mcp-server-rfc
An MCP server for looking up IETF RFCs.
{
"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 if a mirror has been synced |
list_sections |
An RFC's headings with line numbers — the cheap first call |
get_rfc |
Read one section, or a line range |
Queries are literal by default; regex=true opts into pattern matching, and
under scope='fulltext' the dialect is whichever of rg or grep the machine
has, which the payload names 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 an unscoped read of an RFC over 1500 lines, answering with its
size and a pointer to list_sections rather than filling the context with a
specification the model had one question about. 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.
Full-text search
Works with no setup, fetching documents on demand. Full-text search additionally requires a local mirror, which the user creates from a shell:
uvx mcp-server-rfc sync
The same command that runs the server runs its CLI: sync downloads the
corpus, 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 a mirror.
512 MB, a few minutes, entirely optional. The server deliberately does not expose a sync tool: half a gigabyte pulled from a volunteer-run mirror should be a person's decision, not a model's.
If 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 is the one thing that does not survive: it reads a local 512 MB corpus, so 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 all work, because they need only the 2 MB 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.
Release files for mcp-server-rfc 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcp_server_rfc-0.4.0.tar.gz | 33.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcp_server_rfc-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 60.3 kB
Release files / mcp_server_rfc-0.4.0.tar.gz
| Download URL | mcp_server_rfc-0.4.0.tar.gz |
|---|---|
| Size | 33.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
60f3b61e7871f14a27e0d637052fe56a9a3f42864965d2003ad6b06eee4e0331
|
|
BLAKE2b-256 checksum How to use checksums |
533633204e9470ccb2d2926d6e8f8b43471f15a45a54a4d95cb56acb1fd3295f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","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.4.0-py3-none-any.whl
| Download URL | mcp_server_rfc-0.4.0-py3-none-any.whl |
|---|---|
| Size | 27.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
13e0aa913a4f46972ab887e7895b6679f0e8a088bdd9d2b4651aebc96baabcc1
|
|
BLAKE2b-256 checksum How to use checksums |
8e3f5f7334cecbbbf1d3028808531e35584a6cb03cb9e6d7c1e781b28ed55303
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","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}
|