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: python3 on PATH with a working venv/pip module (Debian/Ubuntu: python3-venv) is the only hard requirement for the plugin. It prefers uvx/uv and otherwise builds a private venv on first run — $CLAUDE_PLUGIN_DATA/venv for Claude Code, else ~/.rtfm/fronts/<front>/venv. The PyPI path needs uv (for uvx) or pipx. 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.0

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.0
File Size Uploaded Provenance
rtfm_mcp-0.9.0.tar.gz 38.3 kB Without provenance Details

Built distribution (wheel)

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

Total release size: 80.6 kB

Release files / rtfm_mcp-0.9.0.tar.gz

Download URL rtfm_mcp-0.9.0.tar.gz
Size 38.3 kB
Tags Source
SHA-256 checksum
How to use checksums
a204a6980b0ea541fa2aa8bcf97b19ba301de379fbf8a11e970e1c775d3b9e4c
BLAKE2b-256 checksum
How to use checksums
c945e127b4d8940b56d32f3a8249cf2e6e2f2bec5aaa77b9daeba6ffb07bf4b3
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.0-py3-none-any.whl

Download URL rtfm_mcp-0.9.0-py3-none-any.whl
Size 42.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4a47a9865636ffe7e804785c294f192368382c4ee00b5060af30709bb783b855
BLAKE2b-256 checksum
How to use checksums
fa768eb7bf65be40dbf330c7bd66e97fc83152063f516cf2d93dea8892821736
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.0

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