Skip to main content

mcp-server-rfc

An MCP server that reads the RFC corpus with 40x fewer tokens and flags obsoleted specs.

{
  "mcpServers": {
    "rfc": {
      "command": "uvx",
      "args": ["mcp-server-rfc"]
    }
  }
}

No clone, no virtualenv, no path. That is the whole installation. Your client spawns the server on your machine and talks to it over stdin and stdout.

A client showing the server as connected has not necessarily used it, and a model will happily answer an RFC question from memory instead. On Claude Desktop the per-server log records only the handshake, so it cannot tell you either way — docs/desktop-verification.md says where the evidence actually is.

Tools

Tool What it does
search_rfcs Search titles, or the full text of every RFC, ranked by section, if the section index is present
list_sections An RFC's headings with line numbers — the cheap first call
get_rfc Read one section, or a line range

With the section index, a full-text query is words, and each result is one section ranked by BM25, carrying the section number to pass to get_rfc and the line that best matches. Without it, full-text search falls back to rg or grep over a synced mirror, where the query is a literal string and results are whole RFCs; regex=true opts into pattern matching there and in titles. The payload names the backend in tool. Title results put current RFCs before superseded ones, so a page cut short at limit keeps the document you want rather than the one it replaced.

get_rfc refuses any read of more than 1500 lines that is not a named section, answering with its size and a pointer to list_sections rather than filling the context with a specification the model had one question about; a start_line of 1 does not get around it. full=true overrides it. A section you asked for by name is never refused: list_sections reports how long each one is, and max_lines caps any read, so the choice is informed rather than blocked.

Every response carries a banner with the RFC's status and, when it applies, a warning that it has been superseded:

RFC 2616 — Hypertext Transfer Protocol -- HTTP/1.1  [DRAFT STANDARD]
!! OBSOLETED BY: RFC 7230, 7231, 7232, 7233, 7234, 7235

That warning is the reason to use this rather than let a model fetch rfc-editor.org itself. Models cite dead specifications with great confidence.

Works with no setup, fetching documents on demand. Full-text search additionally needs the section index, which the user downloads from a shell:

uvx mcp-server-rfc sync --index

About 270 MB from this project's GitHub releases, checked against its published SHA-256. It ranks sections by BM25 and serves every read from disk, so the server stops fetching from the RFC Editor. uvx mcp-server-rfc sync instead copies the corpus as 512 MB of text files from the RFC Editor's volunteer-run rsync mirror, which is what rg and regex=true search.

The same command that runs the server runs its CLI: sync downloads, status reports what is present, and uvx mcp-server-rfc <command> --help covers the rest. It is also the command the server names in the error you get when full-text search is asked for without either.

Both are optional. The server deliberately does not expose a sync tool: hundreds of megabytes on someone's disk should be a person's decision, not a model's.

If an index or a mirror already exists — synced for the companion skill, say — this server picks it up automatically. It looks under the platform's data directory: $XDG_DATA_HOME/rfc-ai-tooling, or %LOCALAPPDATA%\rfc-ai-tooling on Windows, falling back to ~/.local/share/rfc-ai-tooling. Set $RFC_MIRROR to point at a non-default location — in a container with no home directory, that or --mirror is what to pass.

HTTP mode

The config above is the stdio transport, which needs a client that can spawn a process on your machine. A session running in the cloud — claude.ai on the web, Cowork — cannot, and no configuration fixes that. For those, the server has to be deployed somewhere they can reach:

mcp-server-rfc --transport http --host 0.0.0.0 --port 8080

RFC_TRANSPORT, HOST and PORT are read from the environment too. The repository carries a Dockerfile and a fly.toml that do this. No public instance of this server exists and none is planned — if you want one, you host it, and you should put authentication in front of it, since the server has none and would otherwise be an open proxy to a volunteer-run mirror.

Full-text search works hosted only where the section index is on the server's disk (sync --index there). Without it, a hosted instance returns an error saying so instead of silently answering a title search. The obsolescence banner, section reads and the unscoped-read guard work either way, because they need only the 2 MB RFC index.

If your client has a shell

Use the skill instead — Claude Code, Codex CLI, OpenClaw, Cursor and Zed all qualify. It does the same things with fewer moving parts and gives the agent ripgrep over the corpus:

npx skills add shbernal/rfc-ai-tooling      # from the repo, into .claude/skills/
clawhub install @shbernal/rfc-lookup        # or the last released version

This server is for clients that give the model no shell of its own. Claude Desktop is the clearest case: its chat cannot run a command on your machine, but it will spawn this server there.

Source, issues and the skill: https://github.com/shbernal/rfc-ai-tooling

MIT.

Metadata

Release files for mcp-server-rfc 0.6.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 mcp-server-rfc 0.6.0
File Size Uploaded Provenance Actions
mcp_server_rfc-0.6.0.tar.gz 46.5 kB Without provenance Details for mcp_server_rfc-0.6.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for mcp-server-rfc 0.6.0
File Interpreter ABI Platform Actions
mcp_server_rfc-0.6.0-py3-none-any.whl Python 3 none any Details for mcp_server_rfc-0.6.0-py3-none-any.whl

Total release size: 84.7 kB

Release files / mcp_server_rfc-0.6.0.tar.gz

Download URL mcp_server_rfc-0.6.0.tar.gz
Size 46.5 kB
Tags Source
SHA-256 checksum
How to use checksums
b3afb2ac77d4dac4f135823faff6ed4cc10e806d0ecf1923de4118e1cd536f00
BLAKE2b-256 checksum
How to use checksums
b564070c543a934d52c90fa3676e3bd82c0dc389fbcacb2f8d7a8352758cbb3c
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 / mcp_server_rfc-0.6.0-py3-none-any.whl

Download URL mcp_server_rfc-0.6.0-py3-none-any.whl
Size 38.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
518f492c090e2ae422606389393ceddd09a2a50e5824ad7117106531fbb8f00f
BLAKE2b-256 checksum
How to use checksums
9c266a825d2bbd5f5c295ac4f0adb506dffde83db9f65a54e010a1fda640bbfe
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 mcp-server-rfc 0.6.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