rtfm
rtfm — Read the
F-Full Manual.
A local MCP server with thin Claude Code and OpenCode fronts that makes large, can't-read-by-hand
technical documentation searchable — PDF spec sets, documentation repositories (and, later,
public doc sites) — and answers questions strictly from that material, with grounded citations.
The server is published as the rtfm-mcp Python package.
The eternal advice "read the manual" falls apart when the manual is a 400-page protocol
spec or a vendor doc-set no human can hold in their head. rtfm ingests the full manual
so the answer is one cited query away.
Limitations
rtfm indexes the extractable text a document already carries. It does not OCR images
and does not execute JavaScript, so image-only/scanned PDFs and image-only or JS-rendered
web pages are out of scope — they index as empty. (See ADR 0005.)
Install
Claude Code
# in Claude Code:
/plugin marketplace add canlin-zhang/rtfm
/plugin install rtfm@rtfm
OpenCode
opencode plugin add 'github:canlin-zhang/rtfm#main::path:plugins/opencode'
The plugin registers the rtfm MCP server and the read-the-manual skill.
Any MCP client (PyPI)
The server is also published as rtfm-mcp:
uvx --from rtfm-mcp rtfm-server # or: pipx install rtfm-mcp && rtfm-server
Point the client's MCP configuration at that command:
{
"mcpServers": {
"rtfm": {
"command": "uvx",
"args": ["--from", "rtfm-mcp", "rtfm-server"]
}
}
}
Prerequisites: the plugin builds a private venv under
$CLAUDE_PLUGIN_DATA/venv (Claude Code) or ~/.rtfm/fronts/<front>/venv
(otherwise), installs the pinned rtfm-mcp there once, and runs it from there.
It uses uv when present (uv venv --seed + uv pip install); without uv it falls
back to python3 -m venv + pip, so python3 with a working venv/pip module
is the hard requirement (Python 3.11+; Debian/Ubuntu: python3-venv). Later
launches do not touch the network. See ADR 0019.
The manual uvx/pipx commands above are for a one-off MCP client config, not
the plugin.
Optional: install poppler-utils (pdftotext) for best-quality PDF extraction.
Platform support: Linux and macOS. Windows is not officially supported.
Two ways to use it
Quick-and-dirty (the default drop-dir). Drop PDFs or Markdown/text into ~/.rtfm/default
and just search — the default dir re-indexes itself on search, so dropped files show up with
no extra step. Keep it small; it's a scratch space.
Organized corpus (pointed-to folders). For a large, structured doc set (e.g. a vendor's
documentation tree), add a dir source in ~/.rtfm/manifest.toml pointing at the folder, then
build it once:
reindex("vendor-docs")
Searches are instant afterward. dir sources auto-reindex inline when the delta is small
(RTFM_AUTO_REINDEX_MAX, default 10); a larger delta returns a warning telling you to run
reindex once. git_repo sources are the exception to the budget: a stale or never-indexed
source always auto-reindexes inline on search — no budget gate, warns loudly on failure —
including the initial clone for managed sources, so the first search over a fresh corpus can
take a while. Byte-identical files that repeat across version subfolders are extracted once;
find_duplicates lists every path a given content lives at.
Use
Drop PDFs / .md / .mdx / .rst / .txt into ~/.rtfm/default/, then ask your agent to search them, or
add more sources by editing ~/.rtfm/manifest.toml (see manifest.example.toml).
Or invoke the bundled read-the-manual skill — /rtfm:read-the-manual in Claude Code,
@read-the-manual in OpenCode — to have a question answered strictly from the corpus:
verbatim quotes with page/line citations, no model-knowledge fallback.
Status
Early but working. Today rtfm gives you zero-config search over a default drop-folder: PDF,
Markdown, reStructuredText, and text files are indexed into one content-addressed full-text
index with page/line citations, exposed through the search / read / reindex /
find_duplicates / list_sources / health_check tools and the read-the-manual skill.
The core is published as rtfm-mcp; the Claude Code and OpenCode fronts are thin. HTML with
anchor citations, web sources, file-curation tools, and OCR are planned — see the
roadmap.
Architecture decisions live in docs/adr/; domain language in CONTEXT.md.
License
MIT © Canlin Zhang
Metadata
Release files for rtfm-mcp 0.9.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| rtfm_mcp-0.9.3.tar.gz | 38.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rtfm_mcp-0.9.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 80.9 kB
Release files / rtfm_mcp-0.9.3.tar.gz
| Download URL | rtfm_mcp-0.9.3.tar.gz |
|---|---|
| Size | 38.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3f3294e0dbdeb79cc457ffb4c636e1b6d8a76ec3ecd5acc8772c779a89ab469c
|
|
BLAKE2b-256 checksum How to use checksums |
ebead4c3af406b3ff1925fbd20fbecee5f277f7b5a47f0cb102b411697292212
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rtfm_mcp-0.9.3-py3-none-any.whl
| Download URL | rtfm_mcp-0.9.3-py3-none-any.whl |
|---|---|
| Size | 42.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5a2c2741582e95e84c08cf5d204c9e5de6c00319a34894afd3dbc7f20d734a33
|
|
BLAKE2b-256 checksum How to use checksums |
3102bd6ddf28b2b8f0265daaaa2eb04897ee2a80e2166abc7e62a4480f867cae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for rtfm-mcp 0.9.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.