internet-standards-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@internet-standards-mcpIs RFC 2616 still current? What replaces it?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Internet Standards
RFCs and IANA registries for coding agents, straight from the RFC Editor and IANA: the exact text of any RFC section, whether an RFC is still current and what replaces it today, the errata filed against a section, and registered values such as HTTP status codes, header fields, media types, ports and TLS cipher suites.
Models quote obsolete RFCs from memory. Ask one about HTTP/1.1 and it cites RFC 2616, which was replaced twice (by RFCs 7230 to 7235 in 2014, then by RFCs 9110 to 9112 in 2022). Internet Standards follows every obsoleted-by chain to its end, warns whenever a section comes from an obsolete RFC, and returns section text verbatim with the verified errata that correct it, so an agent can quote a requirement exactly and know it still applies.
rfc_info: status, whether it is current, what obsoletes it and the current replacements at the end of the chain, what updates it. Accepts RFC numbers, BCP/STD/FYI series (BCP 14 is RFC 2119 and RFC 8174) and Internet-Draft names.rfc_section: one section's exact text by number (15.5.5) or title, with its verified and held errata; a phrase search across the RFC; or the table of contents, with subsections listed so an agent can drill down.search_rfcs: topic search in which current documents rank above the ones they replaced.iana_lookup: HTTP status codes, fields and methods, media types, URI schemes, port numbers, TLS cipher suites, link relations and DNS record types, each with its defining RFC section.
No account or key needed. Built and maintained by Arhan Canli.
Install
Needs Node.js 20 or newer. No account or key.
Claude Code
claude mcp add internet-standards -- npx -y internet-standards-mcpClaude Desktop: download internet-standards-mcp-<version>.mcpb from the latest release and open it. The bundle is signed; verify it with gh attestation verify <file> --repo arhancanli/internet-standards-mcp.
Any other client (Windsurf, Zed, Cline, Continue and others), in its MCP config file:
{
"mcpServers": {
"internet-standards": {
"command": "npx",
"args": [
"-y",
"internet-standards-mcp"
]
}
}
}Docker
docker build -t internet-standards-mcp https://github.com/arhancanli/internet-standards-mcp.git && docker run -i --rm internet-standards-mcpHosted (Streamable HTTP): node src/server.mjs --http serves stateless MCP at POST /mcp (port from PORT, default 3000).
Related MCP server: rfc-server
Example
An agent calls rfc_info with:
{
"ids": [
"RFC 2616",
"BCP 14",
"draft-ietf-httpbis-semantics",
"RFC 99999"
]
}and gets back (recorded from the live server on 2026-09-26):
{
"results": [
{
"id": "RFC 2616",
"rfc": "RFC 2616",
"title": "Hypertext Transfer Protocol -- HTTP/1.1",
"status": "Draft Standard",
"current": false,
"obsoleted_by": [
"RFC 7230",
"RFC 7231",
"RFC 7232",
"RFC 7233",
"RFC 7234",
"RFC 7235"
],
"current_replacements": [
"RFC 9110",
"RFC 9111",
"RFC 9112"
],
"updated_by": [
"RFC 2817",
"RFC 5785",
"RFC 6266",
"RFC 6585"
],
"obsoletes": [
"RFC 2068"
],
"published": "June 1999",
"authors": "R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter et al.",
"url": "https://www.rfc-editor.org/rfc/rfc2616.html",
"errata": "https://www.rfc-editor.org/errata/rfc2616",
"info": "https://www.rfc-editor.org/info/rfc2616"
},
{
"id": "BCP 14",
"series": "BCP14",
"rfc": "RFC 2119",
"title": "Key words for use in RFCs to Indicate Requirement Levels",
"status": "Best Current Practice",
"current": true,
"updated_by": [
"RFC 8174"
],
"published": "March 1997",
"authors": "S. Bradner",
"url": "https://www.rfc-editor.org/rfc/rfc2119.html",
"errata": "https://www.rfc-editor.org/errata/rfc2119",
"info": "https://www.rfc-editor.org/info/rfc2119"
},
{
"id": "BCP 14",
"series": "BCP14",
"rfc": "RFC 8174",
"title": "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words",
"status": "Best Current Practice",
"current": true,
"updates": [
... (43 more lines)Tools
Tool | What it does |
| Looks up an entry in an IANA registry (HTTP status codes, fields, methods; media types; URI schemes; port numbers; TLS cipher suites; link relations; DNS record types) by exact value or name, else by text. Returns the entry and its defining RFC section. |
| For up to 20 RFCs (RFC 2616, BCP 14, STD 97 or a draft name): title, status, whether it is current, what obsoletes it and the current replacements at the end of that chain, what updates it, and links. Use before citing or implementing an RFC. |
| Returns the exact text of one RFC section (by number like 15.5.5 or by title) with the verified errata that apply to it; with find, lists the sections containing a phrase; with neither, the table of contents. Warns when the RFC is obsolete. |
| Finds RFCs by topic words in titles, keywords and abstracts; current documents rank above the ones they replaced. Returns number, title, status, year and what obsoletes each. |
How it behaves
Read-only: no tool changes anything outside this process.
Network: HTTPS only, to the hosts listed in
package.jsonunderfactory.allowHosts, with a deadline, a size cap and bounded retries; a read that stalls is abandoned and retried. Nothing else is contacted, and nothing is logged except unexpected failures (to stderr, without your inputs).Per-RFC lookups use the RFC Editor's small per-document records. The full RFC index (for search, series and drafts) and the errata export are downloaded compressed on first use, then kept in memory as parsed data for 12 hours; RFC texts and IANA registries for 24 hours.
Section text is the RFC Editor's published plain text with page footers and running headers removed; long sections are cut at 12,000 characters with an explicit marker.
Results are compact JSON with a matching output schema.
Benchmark
Measured 2026-09-26 with gpt-5.4-mini, 10 fixed tasks graded by fixed checks (bench/tasks.json, raw results in bench/results/).
Server | Correct | Input tokens | Output tokens | Tool calls | Median time |
This server | 5/10 | 30684 | 892 | 27 | 6.0 s |
rfcxml-mcp, the most active RFC server | 6/10 | 214403 | 865 | 27 | 5.3 s |
Performance
Measured 2026-09-26 from Dubai, home connection against the live upstream, Node 24.19.0 (bench/perf.json, scripts/perf.mjs in the factory).
Call | First call | Repeat | Result size |
rfc_info: RFC 2616, BCP 14, a draft name and a missing number | 1814 ms | 0.6 ms | 2,055 chars |
rfc_section: RFC 9110 section 12.5.1 with its errata | 1868 ms | 0.5 ms | 6,171 chars |
rfc_section: RFC 7231 section 6.5.4 (paginated, obsolete) | 2795 ms | 0.4 ms | 997 chars |
rfc_section: find a phrase in RFC 9110 | 636 ms | 4.6 ms | 5,094 chars |
search_rfcs: http semantics | 1212 ms | 3.6 ms | 1,190 chars |
iana_lookup: HTTP status 418 | 358 ms | 0.4 ms | 245 chars |
iana_lookup: media type application/json | 278 ms | 0.6 ms | 206 chars |
iana_lookup: port 5432 | 480 ms | 1.1 ms | 497 chars |
First call: a fresh server process, including the TLS connection and the upstream's own time. Repeat: the same call again, answered from the in-process cache, so it shows this server's own overhead.
Tool definitions the model reads on every turn (name, description, input schema): 2,119 characters, against 3,643 for rfcxml-mcp, the most active RFC server. The full tool list, with the output schemas and annotations clients use to validate results, is 3,610 characters (3,636 for the alternative).
Data sources
RFC Editor: per-RFC records, RFC text, the RFC index and the errata database.
IANA protocol registries (CSV exports).
More MCP servers by Arhan Canli
End of Life: Is this version still supported? EOL dates, latest patch and upgrade target for 470+ products.
Package Truth: Checks packages exist before install: version, deprecation, vulnerabilities, licence. 7 ecosystems.
Citation Check: Verifies citations: finds fabricated or mismatched references and retractions, returns clean BibTeX.
Drug Label: FDA drug label answers with section citations, RxNorm name resolution, recalls and shortages.
Recall Check: One recall check across CPSC, FDA and NHTSA: match by name, model number, UPC or VIN.
Satellite Imagery: Find the clearest Sentinel-2, Landsat, Sentinel-1 or NAIP scene for any place, with band links.
License
MIT, Copyright (c) 2026 Arhan Canli.
Available Tools
4 toolsiana_lookupIANA registry lookupARead-onlyIdempotent
Looks up an entry in an IANA registry (HTTP status codes, fields, methods; media types; URI schemes; port numbers; TLS cipher suites; link relations; DNS record types) by exact value or name, else by text. Returns the entry and its defining RFC section.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| registry | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| exact | Yes | |
| total | Yes | |
| entries | Yes | |
| registry | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and idempotent behavior, so the bar is lower. The description adds valuable behavioral context: matching logic ('by exact value or name, else by text') and return content (entry plus its defining RFC section). This goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that front-loads the core purpose, then lists supported registries, explains query semantics, and states the return value. Every clause earns its place with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description is largely complete for a lookup tool. Missing edge cases like 'not found' behavior and details on 'text' matching are minor gaps, not blockers. Overall it is adequately comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does enumerate registries (partially redundant with the enum) and clarifies that query matches exact value/name or text. However, it does not explicitly map the two parameters or address formatting, case sensitivity, or text matching nuances. Adds some but not full meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('looks up'), resource ('IANA registry'), and enumerates the registry categories. It is immediately distinguishable from RFC-focused sibling tools like rfc_info and search_rfcs, so an agent can select it without deep schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context implies usage for IANA lookups versus RFC-related siblings, but there is no explicit when-to-use or when-not-to-use guidance, nor any mention of alternatives. The usage is inferable but not directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rfc_infoRFC status and replacementsARead-onlyIdempotent
For up to 20 RFCs (RFC 2616, BCP 14, STD 97 or a draft name): title, status, whether it is current, what obsoletes it and the current replacements at the end of that chain, what updates it, and links. Use before citing or implementing an RFC.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond annotations: the 20-item batch limit, acceptance of varied identifiers (RFC number, BCP, STD, draft name), and the fact that it resolves the full replacement chain to its end. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense, front-loaded sentence states the scope and return fields, followed by a single usage directive. Every clause earns its place; there is no filler or repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be spelled out, and annotations cover the safety profile. The description explains the input domain, the batch limit, and the resolved output semantics. Minor gap: it does not describe behavior for invalid/unknown identifiers, but this is acceptable given the output schema and annotations already carry significant weight.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema only says 'array of strings' with maxLength 100. The description fully compensates by specifying exactly what the ids array accepts: RFC numbers (RFC 2616), BCP 14, STD 97, or draft names. This is critical semantic detail the schema does not provide, and it is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('get') with a clear resource (RFC status/replacements) and enumerates the exact fields returned: title, status, current-ness, obsoletes, replacement chain, updates, and links. It clearly distinguishes from siblings (iana_lookup, rfc_section, search_rfcs) since none of those cover status/replacement-chain resolution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit trigger: 'Use before citing or implementing an RFC.' This tells the agent when to reach for the tool. However, it does not name sibling tools as alternatives (e.g., 'for a section, use rfc_section') or state when not to use it, leaving the exclusion logic implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rfc_sectionExact RFC section textARead-onlyIdempotent
Returns the exact text of one RFC section (by number like 15.5.5 or by title) with the verified errata that apply to it; with find, lists the sections containing a phrase; with neither, the table of contents. Warns when the RFC is obsolete.
| Name | Required | Description | Default |
|---|---|---|---|
| rfc | Yes | RFC number, e.g. 9110 | |
| find | No | Phrase to locate | |
| section | No | ||
| subtree | No | Include subsections |
Output Schema
| Name | Required | Description |
|---|---|---|
| rfc | Yes | |
| obsoleted_by | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds meaningful context: verified errata are included, obsolete RFCs trigger a warning, and mode-dependent output is described. It does not cover edge cases like not-found behavior, but this is not a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary return value, then mode variants and the warning. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and read-only annotations present, the description covers all invocation modes and the obsolete-warning behavior. It is sufficient for an agent to select and call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the description adds semantics for the undocumented section parameter (number like 15.5.5 or title) and clarifies the find parameter's role. Subtree is only described in the schema, but the description goes beyond schema for the main mode-switching params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns exact RFC section text with errata, and describes distinct modes for find and table-of-contents. It is specific about the resource and verb, though it does not explicitly distinguish itself from siblings like search_rfcs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use each mode: section lookup by number/title, find for phrase search, and neither for TOC. However, it does not mention when to prefer a sibling tool or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_rfcsSearch RFCsARead-onlyIdempotent
Finds RFCs by topic words in titles, keywords and abstracts; current documents rank above the ones they replaced. Returns number, title, status, year and what obsoletes each.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| include_obsolete | No | Default true |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent behavior. The description adds valuable context beyond annotations: ranking of current documents above replaced ones and the specific return fields ('number, title, status, year and what obsoletes each'). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences deliver the search scope, ranking rule, and return fields with no filler. The most important operational detail (what it searches) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and annotations covering safety/idempotence, the description covers search semantics, ranking, and return shape. The main remaining gap is the meaning of include_obsolete, but overall the agent has enough to invoke the tool correctly for typical searches.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, and the description meaningfully explains the query parameter as topic-word matching against titles, keywords, and abstracts. However, the include_obsolete parameter is not addressed in the description, leaving its semantics only to the field name and 'Default true' schema note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Finds') and resource ('RFCs') with clear search scope: topic words in titles, keywords, and abstracts. The ranking behavior and return fields further distinguish it from siblings like rfc_info and rfc_section, making its role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for keyword/topic searching rather than exact-number lookup or section retrieval. However, it never explicitly says when to prefer this tool over siblings or provides exclusions, so the guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
iana_lookup - First observed
rfc_info - First observed
rfc_section - First observed
search_rfcs
TDQS
Scored across 4 tools
Each tool has a clear, distinct purpose: IANA registry lookup vs. RFC discovery, metadata retrieval, and section text extraction. There is no meaningful overlap between any two tools.
All names use lowercase with underscores styles vary between object+verb (iana_lookup), object+noun (rfc_info, rfc_section), and verb+object (search_rfcs). The pattern is not perfectly uniform but remains predictable and readable.
At 4 tools, the server is compact but covers the core references for internet standards. Slightly thin, but each tool serves a necessary, non-redundant function.
The set covers IANA lookups, RFC searching, metadata validation, and section-level text with errata. Missing full RFC text retrieval or a registry listing, but the main workflows are covered without major dead ends.
Maintenance
Related MCP Connectors
Hosted 3GPP MCP server for Rel-15–20 TS/TR search. Index stays current.
Exact reference codes for AI agents: countries, currencies with minor units, HTTP status, MIME.
Machine-readable entity discovery with provenance, trust and verified source evidence.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables programmatic access to IETF RFC documents, allowing users to fetch, search, and extract specific sections from RFCs.330 npm19Apache 2.0
- AlicenseBqualityDmaintenanceAn MCP server for obtaining, parsing and reading RFC documents from the ietf.org website, providing programmatic interactive tools.32Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables querying IETF documents, RFCs, working groups, and persons from the IETF Datatracker via MCP tools.4 npmMIT
- AlicenseNot gradedqualityCmaintenanceProvides LLM-based access to IETF documents such as RFCs, Internet-Drafts, STD/BCP/FYI series, and errata through a Model Context Protocol server.MIT