Offline MCP Server for Qt 4.8.4 documentation
Project description
Qt 4.8.4 Documentation MCP Server
Offline‑only MCP Server that serves Qt 4.8.4 documentation to Agents/LLMs and IDEs. It loads local HTML docs, converts pages to Markdown, and provides fast full‑text search via SQLite FTS5.
Quickstart
- Install the package:
pip install qt4-doc-mcp-server. - Fetch and stage the Qt docs (one-time):
python scripts/prepare_qt48_docs.py --segments 4. - Copy
.envfrom the script output or create one manually (see table below). - Run the server:
qt4-doc-mcp-server(oruv run python -m qt4_doc_mcp_server.main). - Verify health:
curl -s http://127.0.0.1:8000/health→{ "status": "ok" }. - Optional: warm the Markdown cache for faster responses:
qt4-doc-warm-md.
Project Structure
.
├─ README.md # Quick start, config, licensing
├─ LICENSE # MIT license for this codebase
├─ CHANGELOG.md # Keep a Changelog (Unreleased + releases)
├─ THIRD_PARTY_NOTICES.md # Qt docs and deps licensing notes
├─ pyproject.toml # Packaging, deps, console entry points
├─ scripts/
│ ├─ prepare_qt48_docs.py # Download, extract, and stage Qt 4.8.4 docs; writes .env
├─ src/
│ └─ qt4_doc_mcp_server/
│ ├─ __init__.py # Package version
│ ├─ main.py # FastMCP app (+ /health) and CLI run()
│ ├─ config.py # Env loader (dotenv) + startup checks
│ ├─ tools.py # MCP tools (read_documentation now, search planned)
│ ├─ fetcher.py # Canonical URL + local path mapping
│ ├─ convert.py # HTML extraction, link normalization, HTML→Markdown
│ ├─ cache.py # LRU + Markdown store (disk) helpers
│ ├─ doc_service.py # Read path orchestration (store + convert)
│ ├─ search.py # FTS5 index build/query stubs
│ └─ cli.py # Warm‑MD CLI entry (qt4-doc-warm-md)
└─ tests/ # pytest suite (e.g., test_doc_service.py)
Requirements
- Python 3.11+
- Local Qt 4.8.4 HTML documentation (see below)
Get the Qt 4.8.4 Docs
Prepare Docs with Python helper (recommended)
python scripts/prepare_qt48_docs.py # copy docs by default into ./qt4-docs-html
OR
python scripts/prepare_qt48_docs.py --segments 4 # faster download with 4 segments
This will:
- Download and extract the Qt 4.8.4 source archive (or reuse if present)
- Stage the HTML docs at
qt4-docs-html(symlink by default) - Copy
LICENSE.FDLnext to the docs - Create/update
.envwithQT_DOC_BASEand sensible defaults
Configure (dotenv)
Create a .env file in the repo root. The helper script writes sensible defaults; adjust as needed:
| Variable | Default | Purpose |
|---|---|---|
QT_DOC_BASE |
required | Absolute path to the Qt 4.8.4 HTML docs (.../doc/html). |
INDEX_DB_PATH |
.index/fts.sqlite |
Location of the future FTS5 index (safe to leave as-is today). |
MD_CACHE_DIR |
.cache/md |
Directory for cached Markdown blobs + metadata. |
PREINDEX_DOCS |
true |
Reserved for search; keep true so indexing runs once implemented. |
PRECONVERT_MD |
true |
Warm the Markdown cache automatically at startup. |
SERVER_HOST |
127.0.0.1 |
Bind address for the FastMCP server (0.0.0.0 for containers). |
SERVER_PORT |
8000 |
TCP port for streamable HTTP transport. |
MCP_LOG_LEVEL |
WARNING |
Logging verbosity (DEBUG/INFO/WARNING/ERROR). |
MD_CACHE_SIZE |
512 |
In-memory CachedDoc LRU capacity (counts pages). |
Dev Setup and Run
uv venv .venv && source .venv/bin/activate
# Option 1: run without installing the package (dev-only)
# Using uv to run the module directly
uv run python -m qt4_doc_mcp_server.main
# Option 2: install and use the CLI
uv pip install -e .[dev]
qt4-doc-mcp-server
# Health check
curl -s http://127.0.0.1:8000/health
# Optional: preconvert all HTML→Markdown into the store for faster reads
uv run qt4-doc-warm-md
# Run tests (ensure TMPDIR points to a writable location when sandboxed)
uv run python -m pytest -q
How It Works (high‑level)
- Offline‑only: no external HTTP fetches; everything reads from
QT_DOC_BASE. - HTML→Markdown: focused extraction of main content; normalized internal links; attribution appended.
- Markdown store: preconverted pages saved under
.cache/md(sharded by URL hash) for fast reads; in‑memory LRU caches hot pages. - Search (planned): SQLite FTS5 index (title/headings/body) with bm25 ranking and snippets.
MCP Tool Example
Example MCP request/response for read_documentation (trimmed for brevity):
// request
{
"method": "tools/run",
"params": {
"name": "read_documentation",
"arguments": {
"url": "https://doc.qt.io/archives/qt-4.8/qstring.html",
"fragment": "#details",
"section_only": true,
"max_length": 2000
}
}
}
// response
{
"result": {
"title": "QString Class",
"canonical_url": "https://doc.qt.io/archives/qt-4.8/qstring.html",
"markdown": "# QString Class\n...",
"links": [
{"text": "QStringList", "url": "https://doc.qt.io/archives/qt-4.8/qstringlist.html"}
],
"attribution": "Content © The Qt Company Ltd./Digia — GNU Free Documentation License 1.3"
}
}
Deployment
- Direct (systemd, bare metal, CI runners):
- Install with
pip install qt4-doc-mcp-server. - Ensure
.envpoints to your Qt docs and writable cache/index directories. - Start with
qt4-doc-mcp-server; addPRECONVERT_MD=truefor faster first reads.
- Install with
- Containerization (roadmap):
- Docker support is planned; follow the repository for updates or open an issue if you need it sooner.
Licensing
- Code: MIT License (see
LICENSE). - Qt docs: © The Qt Company Ltd./Digia, licensed under GFDL 1.3. This server
converts locally obtained docs and includes attribution in outputs. If you
redistribute a local mirror, include
LICENSE.FDLand preserve notices. - See
THIRD_PARTY_NOTICES.mdfor more.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qt4_doc_mcp_server-0.3.0.tar.gz.
File metadata
- Download URL: qt4_doc_mcp_server-0.3.0.tar.gz
- Upload date:
- Size: 20.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc14988f10bcb4e281adc39c68db8e3df6892c54a64671b2db1530c10d42e7a0
|
|
| MD5 |
86a13995c8856de639ebf4d8b80714f7
|
|
| BLAKE2b-256 |
bb5435e62be1c34c859623a9073a2b6e040103acac8739f0737ee7598baccb53
|
File details
Details for the file qt4_doc_mcp_server-0.3.0-py3-none-any.whl.
File metadata
- Download URL: qt4_doc_mcp_server-0.3.0-py3-none-any.whl
- Upload date:
- Size: 18.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1bcdc6b45a301f37b1b16fdeaf66960d1b9a5be1248473059aa390211d863f6
|
|
| MD5 |
ef810688f0c23371f1cae874c197268a
|
|
| BLAKE2b-256 |
11365ca3d80c356897e70f43147deff03756f69bbf02db3dac43e97fa0549a16
|