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 + 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 (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.2

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.2
File Size Uploaded Provenance
rtfm_mcp-0.9.2.tar.gz 38.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for rtfm-mcp 0.9.2
File Interpreter ABI Platform
rtfm_mcp-0.9.2-py3-none-any.whl Python 3 none any Details

Total release size: 80.8 kB

Release files / rtfm_mcp-0.9.2.tar.gz

Download URL rtfm_mcp-0.9.2.tar.gz
Size 38.4 kB
Tags Source
SHA-256 checksum
How to use checksums
8a3211ddec88b89f9111aebc37c40a409defd5c3513ab8a46b7e99184dcc9f48
BLAKE2b-256 checksum
How to use checksums
7c171765eac32c3ab35c579ec91a199a3aaa720b6edf52416458edd6dab25225
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.2-py3-none-any.whl

Download URL rtfm_mcp-0.9.2-py3-none-any.whl
Size 42.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b354cd4ceeb61199b01c3395b415078e308bfc796020106a5fffc7cdea6ca7b4
BLAKE2b-256 checksum
How to use checksums
2d307f41ac1cbcc4989a6317b5d5b4680a95dae589bcb547b9615727665781d9
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.2

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