Skip to main content

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)

Source distribution for rtfm-mcp 0.9.3
File Size Uploaded Provenance
rtfm_mcp-0.9.3.tar.gz 38.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for rtfm-mcp 0.9.3
File Interpreter ABI Platform
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page