rfcxml-mcp
The RFCXML MCP server provides structured analysis of RFC documents by leveraging their semantic XML structure to extract requirements, analyze dependencies, and generate implementation aids.
Core Capabilities:
Extract Normative Requirements - Identify MUST/SHOULD/MAY requirements with condition/exception structuring, filterable by level and section
Retrieve RFC Structure and Metadata - Get section hierarchies, metadata, and optionally include section content
Manage Definitions - Fetch term definitions and their scope, with search capabilities for specific terms
Analyze Dependencies - Map normative and informative references between RFCs, with optional reverse reference lookup
Identify Related Sections - Find sections within an RFC related to a specified section
Generate Implementation Checklists - Create role-based (client/server/both) Markdown checklists, configurable by specific sections
Validate Compliance - Verify if statements or implementation descriptions adhere to RFC requirements
Key Features:
Dual Format Support - Uses RFCXML v3 for modern RFCs (8650+) with high accuracy; automatically falls back to text parsing for legacy RFCs with medium accuracy
Source Transparency - All responses indicate data source (XML or text) and accuracy level
Performance Optimized - Parallel fetching from multiple sources with LRU caching for frequently accessed RFCs
BCP 14 Compliant - Recognizes all standard RFC requirement keywords
Supports the generation of structured implementation checklists and protocol documentation in Markdown format for easier display and verification.
Provides tools to parse and extract semantic information from RFCXML documents, enabling the retrieval of section hierarchies, normative requirements, and dependency graphs.
RFCXML MCP Server
A Model Context Protocol (MCP) server for structured understanding of RFC documents.
Purpose
Unlike existing text-based RFC MCP servers, this server leverages the semantic structure of RFCXML to enable:
Normative requirements extraction (MUST/SHOULD/MAY) with structured output
RFC dependency graph construction
Definition scope management
Implementation checklist generation
Related MCP server: Unstructured Document Processor MCP
Architecture
┌─────────────────────────┐
│ Markdown / PDF │ Display & Sharing
├─────────────────────────┤
│ Translation │ Explanation & Verification
├─────────────────────────┤
│ RFCXML MCP │ Common Understanding for AI & Humans
├─────────────────────────┤
│ RFCXML │ Single Source of Truth
└─────────────────────────┘Comparison with Existing MCPs
Feature | Existing mcp-rfc | RFCXML MCP |
RFC text retrieval | ✅ | ✅ |
Section extraction | ✅ (text-based) | ✅ (structure-based) |
MUST/SHOULD/MAY extraction | ❌ | ✅ |
Condition/exception structuring | ❌ | ✅ |
RFC dependency graph | ❌ | ✅ |
Definition scope management | ❌ | ✅ |
Implementation checklist | ❌ | ✅ |
Quick Start
Using with Claude Desktop / Claude Code
Add the following to your MCP configuration file:
{
"mcpServers": {
"rfcxml": {
"command": "npx",
"args": ["-y", "@shuji-bonji/rfcxml-mcp"]
}
}
}To pin a version (0.6.x ships patch releases frequently), write the version into the package spec:
{
"mcpServers": {
"rfcxml": {
"command": "npx",
"args": ["-y", "@shuji-bonji/rfcxml-mcp@0.6.53"]
}
}
}To keep fetched RFCs on disk across restarts, pass RFCXML_CACHE_DIR (see Disk cache and rfcxml-prefetch):
{
"mcpServers": {
"rfcxml": {
"command": "npx",
"args": ["-y", "@shuji-bonji/rfcxml-mcp@0.6.53"],
"env": { "RFCXML_CACHE_DIR": "/home/you/.cache/rfcxml-mcp" }
}
}
}Configuration file locations:
Claude Desktop (macOS):
~/Library/Application Support/Claude/claude_desktop_config.jsonClaude Desktop (Windows):
%APPDATA%\Claude\claude_desktop_config.jsonClaude Code (project scope):
.mcp.jsonat the project rootClaude Code (user scope):
~/.claude.jsonClaude Code (CLI):
claude mcp add rfcxml -- npx -y @shuji-bonji/rfcxml-mcp
Installation (Optional)
For global installation:
npm install -g @shuji-bonji/rfcxml-mcpThen configure MCP:
{
"mcpServers": {
"rfcxml": {
"command": "rfcxml-mcp"
}
}
}Available Tools
Phase 1: Basic Structure
get_rfc_structure- Get section hierarchy and metadataget_requirements- Extract normative requirements (MUST/SHOULD/MAY) with structureget_definitions- Get term definitions and their scope
Phase 2: Relationships
get_rfc_dependencies- Get referenced RFCs (normative/informative)get_related_sections- Get related sections within the same RFC
Phase 3: Verification Support
validate_statement- Find the RFC requirements that bear on a statement and report detected contradictions. This is not a conformance judgment:isValidis three-valued (null= nothing matched strongly enough to judge,false= a contradiction was detected,true= no contradiction was detected among the matches). The verdict is yours.generate_checklist- Generate implementation checklist
Legacy RFC Support
RFCs published after RFC 8650 (December 2019) are available in official RFCXML v3 format. Earlier RFCs may not have XML available.
This server includes automatic fallback functionality - when XML is unavailable, it parses the text format instead.
Source Information
All responses include source information:
{
"rfc": 6455,
"sections": [...],
"_source": "text",
"_sourceNote": "Warning: Parsed from text format. Accuracy may be limited."
}
| Description |
| Parsed from RFCXML (high accuracy) |
| Parsed from text (medium accuracy) |
Compatibility
RFC | Format | Notes |
RFC 8650+ | XML | Official RFCXML v3 support |
Before RFC 8650 | Text | Automatic fallback |
Output Samples
Every sample below is trimmed from the actual output of the current build (npm run build, then the listed tool call through an MCP client). Field names and values are verbatim; long arrays are cut with ....
get_rfc_structure - Get RFC Structure
get_rfc_structure { "rfc": 9293 }
{
"metadata": {
"title": "Transmission Control Protocol (TCP)",
"docName": "draft-ietf-tcpm-rfc793bis-28",
"number": 9293,
"date": "2022-08",
"category": "std",
"stream": "IETF",
"abstract": "This document specifies the Transmission Control Protocol (TCP). ..."
},
"sections": [
{ "number": "1", "title": "Purpose and Scope" },
{ "number": "2", "title": "Introduction" },
{
"number": "3",
"title": "Functional Specification",
"subsections": [
{ "number": "3.1", "title": "Header Format" },
{
"number": "3.5",
"title": "Establishing a Connection",
"subsections": [
{ "number": "3.5.1", "title": "Half-Open Connections and Other Anomalies" },
{ "number": "3.5.2", "title": "Reset Generation" },
{ "number": "3.5.3", "title": "Reset Processing" }
]
}
]
}
],
"referenceCount": { "normative": 15, "informative": 85 },
"_source": "xml"
}number is the section number as printed in the RFC (3.5, A.2), not the RFCXML pn (section-3.5). category / stream / abstract come from the IETF Datatracker API and are omitted when the API is unreachable or reports a value outside the mapping (e.g. RFC 1 is unkn / legacy); in that case _sourceNote says so.
get_requirements - Extract Normative Requirements
get_requirements { "rfc": 9293, "level": "MUST" }
{
"rfc": 9293,
"filter": { "section": "all", "level": "MUST" },
"stats": { "total": 55, "byLevel": { "MUST": 55 } },
"requirements": [
{
"id": "R-3.5-1",
"level": "MUST",
"text": "A TCP implementation MUST support simultaneous open attempts (MUST-10).",
"section": "3.5",
"sectionTitle": "Establishing a Connection",
"fullContext": "A TCP implementation MUST support simultaneous open attempts (MUST-10).",
"subject": "tcp implementation",
"action": "support simultaneous open attempts (MUST-10)"
},
{
"id": "R-3.7.1-1",
"level": "MUST",
"text": "TCP endpoints MUST implement both sending and receiving the MSS Option (MUST-14).",
"section": "3.7.1",
"sectionTitle": "Maximum Segment Size Option",
"fullContext": "TCP endpoints MUST implement both sending and receiving the MSS Option (MUST-14).",
"subject": "tcp endpoints",
"action": "implement both sending and receiving the MSS Option (MUST-14)"
}
],
"_source": "xml"
}id is R-<section>-<n> with n numbered per section, so the identifier stays stable when requirements are added elsewhere in the document.
get_rfc_dependencies - Get RFC Dependencies
get_rfc_dependencies { "rfc": 9293 }
{
"rfc": 9293,
"normative": [
{ "rfcNumber": 791, "title": "Internet Protocol", "anchor": "RFC0791" },
{ "rfcNumber": 1191, "title": "Path MTU discovery", "anchor": "RFC1191" },
{
"rfcNumber": 2119,
"title": "Key words for use in RFCs to Indicate Requirement Levels",
"anchor": "RFC2119"
}
],
"informative": [
{ "rfcNumber": 793, "title": "Transmission Control Protocol", "anchor": "RFC0793" },
{ "rfcNumber": 896, "title": "Congestion Control in IP/TCP Internetworks", "anchor": "RFC0896" }
],
"_source": "xml",
"_referencesSource": "xml"
}_referencesSource tells where the reference list came from: xml (RFCXML <references>), text (the References section of the plain text), or api (Datatracker relateddocument, with placeholder titles).
generate_checklist - Generate Implementation Checklist
generate_checklist { "rfc": 9293, "role": "client", "sections": ["3.5", "3.7.1"] } — the markdown field:
# RFC 9293 Implementation Checklist
**Transmission Control Protocol (TCP)**
Role: client
Generated: 2026-09-04T17:09:37.833Z
## Mandatory Requirements (MUST / REQUIRED / SHALL)
- [ ] **MUST** A TCP implementation MUST support simultaneous open attempts (MUST-10). (§3.5)
- [ ] **MUST** TCP endpoints MUST implement both sending and receiving the MSS Option (MUST-14). (§3.7.1)
- [ ] **MUST** If an MSS Option is not received at connection setup, TCP implementations MUST assume a default send MSS of 536 (576 - 40) for IPv4 or 1220 (1280 - 60) for IPv6 (MUST-15). (§3.7.1)
## Recommended Requirements (SHOULD / RECOMMENDED)
- [ ] **SHOULD** TCP implementations SHOULD allow a received RST segment to include data (SHLD-2). (§3.5.3)The same call also returns "stats": { "must": 6, "should": 2, "may": 1, "total": 9 }.
validate_statement - Find Bearing Requirements
validate_statement { "rfc": 6455, "statement": "The client MUST mask all frames sent to the server." }
{
"rfc": 6455,
"statement": "The client MUST mask all frames sent to the server.",
"analysis": { "detectedLevel": "MUST", "detectedSubject": "client" },
"isValid": true,
"matchingRequirements": [
{
"id": "R-5.3-2",
"level": "MUST",
"text": "When preparing a masked frame, the client MUST pick a fresh masking key from the set of allowed 32-bit values.",
"section": "5.3",
"sectionTitle": "Client-to-Server Masking",
"_matchScore": 17,
"_matchedKeywords": ["client", "mask", "frames"],
"_subjectMatch": true,
"_levelMatch": true
}
],
"conflicts": [],
"_source": "text",
"_sourceNote": "Warning: Parsed from text format. Validation accuracy may be limited."
}isValid: true means only that no contradiction was detected among the matched requirements. When nothing matches strongly enough, isValid is null and _verdictNote explains why.
Text Fallback Output (Legacy RFCs)
get_rfc_structure { "rfc": 6455 } — RFC 6455 predates RFCXML v3, so the plain text is parsed:
{
"metadata": {
"title": "The WebSocket Protocol",
"number": 6455,
"date": "2011-12",
"category": "std",
"stream": "IETF",
"abstract": "The WebSocket Protocol enables two-way communication ..."
},
"sections": [
{ "number": "1", "title": "Introduction" },
{ "number": "2", "title": "Conformance Requirements" },
{ "number": "5", "title": "Data Framing" }
],
"referenceCount": { "normative": 18, "informative": 9 },
"_source": "text",
"_sourceNote": "Warning: Parsed from text format. Accuracy may be limited."
}For RFCs 8650 and later, the XML is tried first. If every XML source returns 404 the call fails ("No RFC with that number is published"). If the XML fetch fails for another reason (5xx, timeout), the text is used and _sourceNote says that the XML fetch failed and may be temporary.
Disk cache and rfcxml-prefetch
By default, fetched RFCs live only in an in-memory LRU cache and are re-fetched after every restart. Set RFCXML_CACHE_DIR to keep them on disk:
$RFCXML_CACHE_DIR/
├── xml/rfc9293.xml # RFCXML (RFC 8650 and later)
└── text/rfc6455.txt # plain text (older RFCs, or XML fetch failures)The package also ships a rfcxml-prefetch CLI that fills the same layout ahead of time, for offline or CI use:
# Fetch a range into $RFCXML_CACHE_DIR (or ~/.cache/rfcxml-mcp when unset)
npx -y -p @shuji-bonji/rfcxml-mcp rfcxml-prefetch --range 9110-9114
# Individual RFCs, explicit directory, re-download even if cached
npx -y -p @shuji-bonji/rfcxml-mcp rfcxml-prefetch --rfc 6455 --rfc 9293 --cache-dir ./rfc-cache --forceOptions: --range A-B, --rfc N (repeatable), --cache-dir DIR, --concurrency N (default 3), --force. RFCs already on disk (XML or text) are skipped unless --force is given. RFC numbers must be digits only; --rfc 9110abc exits with code 1.
Examples
See the examples/ directory for complete checklist samples:
Example prompt for Claude:
Generate an implementation checklist for RFC 9293 (TCP).Internal Architecture
Module Structure
src/
├── index.ts # MCP server entry point
├── config.ts # Centralized configuration
├── constants.ts # BCP 14 keyword definitions + RFC number limits
├── services/
│ ├── rfc-fetcher.ts # RFC fetching (parallel)
│ ├── rfc-service.ts # RFC parse & cache management
│ ├── rfcxml-parser.ts # RFCXML parser
│ ├── rfc-text-parser.ts # Text fallback parser
│ └── checklist-generator.ts # Checklist generation service
├── tools/
│ ├── definitions.ts # MCP tool definitions
│ └── handlers.ts # Tool handlers (toolHandlers map)
├── types/
│ └── index.ts # Type definitions
└── utils/
├── cache.ts # LRU cache
├── fetch.ts # Parallel fetch utility
├── logger.ts # Logger abstraction
├── requirement-extractor.ts # Shared requirement extraction
├── section.ts # Section search utilities
├── statement-matcher.ts # Weighted statement matching
├── text.ts # Text processing utility
└── validation.ts # Input validationRFC Fetch Optimization
Sends parallel requests to the two XML sources (RFC Editor, Datatracker) and uses the first successful response. tools.ietf.org was retired in 2021 and is not used. There is no retry; the parallel race is the only redundancy.
┌─────────────────┐
│ fetchRFCXML() │
└────────┬────────┘
│ Parallel requests
┌────┴─────────┐
▼ ▼
┌────────┐ ┌────────┐
│RFC │ │Data- │
│Editor │ │tracker │
└────┬───┘ └────┬───┘
│ │
└──────┬──────┘
│ Promise.any (first success)
▼
┌───────────┐
│ Successful│ → Cancel other requests via AbortController
│ Response │
└───────────┘Concurrent calls for the same RFC (e.g. get_rfc_structure and get_requirements issued in parallel) share one in-flight fetch and one parse.
Cache Strategy
LRU (Least Recently Used) cache with memory limits, plus the optional disk cache (RFCXML_CACHE_DIR) below the XML / text caches:
Cache | Max Entries | Content |
XML Cache | 20 | Raw RFCXML |
Text Cache | 20 | Raw text |
Metadata Cache | 100 | RFC metadata |
Parse Cache | 50 | Parsed structure |
Development
# Install dependencies
npm install
# Development mode
npm run dev
# Build
npm run build
# Unit tests (single run) / watch mode
npm test
npm run test:watch
# E2E test (MCP client integration; fetches a few real RFCs)
npm run test:e2e
# Audit against real RFCs, tool-to-tool crosscheck, output snapshots
# (see tests/audit/README.md; run weekly by .github/workflows/audit.yml)
npm run audit
npm run crosscheck
npm run snapshot
# Lint
npm run lint
# Format
npm run formatLicense
MIT
Related Projects
mjpitz/mcp-rfc - Text-based RFC MCP
ietf-tools/RFCXML - RFCXML schema
xml2rfc - IETF official tool
Available Tools
7 toolsgenerate_checklistB
Generate RFC implementation checklist in Markdown format.
| Name | Required | Description | Default |
|---|---|---|---|
| rfc | Yes | RFC number | |
| role | No | Implementation role (client/server/both) | both |
| sections | No | Sections to include (all if omitted) | |
| includeSubsections | No | Include subsections when filtering by sections (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool generates a checklist, implying a read-only operation, but doesn't cover aspects like whether it requires network access, has rate limits, or what the output looks like beyond 'Markdown format'. For a tool with no annotations, this leaves significant gaps in understanding its behavior.
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?
The description is extremely concise and front-loaded: a single sentence that directly states the tool's purpose and output format. Every word earns its place with no redundancy or unnecessary details, making it efficient for quick understanding.
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?
Given the tool's moderate complexity (4 parameters, no output schema, no annotations), the description is minimally adequate. It covers the core purpose but lacks details on behavior, usage context, and output specifics. With no output schema, it doesn't explain return values, leaving gaps that could hinder effective use by an agent.
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?
The description adds no parameter semantics beyond what the input schema provides. Since schema description coverage is 100%, the schema already fully documents all parameters (rfc, role, sections, includeSubsections). The description doesn't explain how parameters interact or provide additional context, so it meets the baseline for high schema coverage.
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's purpose: 'Generate RFC implementation checklist in Markdown format.' It specifies the verb ('Generate'), resource ('RFC implementation checklist'), and output format ('Markdown format'), making it unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_requirements' or 'get_rfc_structure', which might also involve RFC content, so it doesn't reach the highest score.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools or contexts where other tools might be more appropriate, such as using 'get_requirements' for raw requirements instead of a formatted checklist. Without any usage context or exclusions, the agent has minimal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_definitionsC
Get term definitions from RFC.
| Name | Required | Description | Default |
|---|---|---|---|
| rfc | Yes | RFC number | |
| term | No | Search for specific term |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'Get term definitions from RFC,' which implies a read-only operation, but it doesn't disclose any behavioral traits such as authentication needs, rate limits, error handling, or what the return format looks like. For a tool with no annotations, this is a significant gap in transparency.
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?
The description is extremely concise and front-loaded: 'Get term definitions from RFC.' It's a single sentence that directly states the tool's purpose without any unnecessary words or fluff. Every part of the sentence earns its place, making it efficient and easy to parse.
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?
Given the complexity of the tool (2 parameters, no annotations, no output schema), the description is incomplete. It lacks details on behavioral aspects, usage context, and what to expect in return, which are crucial for an agent to invoke the tool correctly. Without annotations or an output schema, the description should provide more context to compensate, but it doesn't.
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?
The input schema has 100% description coverage, with clear parameter descriptions: 'RFC number' and 'Search for specific term.' The description adds no additional meaning beyond what the schema provides, as it doesn't explain parameter usage, constraints, or examples. With high schema coverage, the baseline score is 3, reflecting adequate but not enhanced parameter semantics.
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's purpose: 'Get term definitions from RFC.' It specifies the verb ('Get') and resource ('term definitions from RFC'), making it easy to understand what the tool does. However, it doesn't differentiate from sibling tools like 'get_related_sections' or 'get_rfc_structure', which might also retrieve RFC content, so it doesn't achieve full sibling differentiation.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention any context, exclusions, or comparisons to sibling tools such as 'get_related_sections' or 'get_requirements', leaving the agent without usage instructions. This lack of guidance makes it harder to select the correct tool in a set of similar options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_requirementsA
Extract normative requirements (MUST/SHOULD/MAY) from RFC in structured format.
| Name | Required | Description | Default |
|---|---|---|---|
| rfc | Yes | RFC number | |
| section | No | Filter by section number (e.g., "5.5.1") | |
| level | No | Filter by requirement level |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral context. It mentions extraction to structured format but doesn't disclose what that format is, whether there are rate limits, authentication needs, or how errors are handled. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.
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?
The description is a single, efficient sentence that communicates the core purpose without unnecessary words. It's front-loaded with the main action and resource, making it easy to parse quickly.
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?
For a tool with 3 parameters, no annotations, and no output schema, the description is adequate but incomplete. It covers the purpose well but lacks details on behavioral traits, output format, and usage context. Given the complexity and missing structured data, it should provide more guidance to be fully helpful.
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 100%, so the schema already documents all three parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, such as explaining how filtering works or providing examples. This meets the baseline for high schema coverage.
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 specific action ('Extract'), resource ('normative requirements from RFC'), and format ('structured format'). It distinguishes from siblings by focusing on requirement extraction rather than checklist generation, definition retrieval, or structural analysis.
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 through the phrase 'normative requirements (MUST/SHOULD/MAY)', suggesting it's for extracting specific requirement types from RFCs. However, it doesn't explicitly state when to use this tool versus alternatives like 'get_definitions' or 'get_related_sections', nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rfc_dependenciesB
Get RFC reference relationships (normative/informative).
| Name | Required | Description | Default |
|---|---|---|---|
| rfc | Yes | RFC number | |
| includeReferencedBy | No | Include RFCs that reference this RFC |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states what the tool does, not how it behaves. It doesn't disclose whether this is a read-only operation, what format the relationships are returned in, whether there are rate limits, or what happens with invalid RFC numbers.
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?
The description is a single, efficient sentence with zero wasted words. It's appropriately sized for this simple tool and front-loads the core purpose immediately.
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?
For a simple read operation with 2 parameters and no output schema, the description is minimally adequate. However, without annotations or output schema, it should ideally provide more behavioral context about what's returned and any constraints.
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 100%, so the schema already documents both parameters completely. The description adds no additional parameter information beyond what's in the schema, maintaining the baseline score for high schema coverage.
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 verb ('Get') and resource ('RFC reference relationships') with specific relationship types ('normative/informative'). It distinguishes from sibling tools like 'get_rfc_structure' by focusing on dependencies rather than structure, but doesn't explicitly contrast with 'get_related_sections' which might have overlapping functionality.
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?
No guidance is provided about when to use this tool versus alternatives like 'get_related_sections' or 'get_requirements'. The description implies it's for dependency analysis but doesn't specify use cases, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rfc_structureC
Get RFC section hierarchy and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| rfc | Yes | RFC number (e.g., 6455) | |
| includeContent | No | Include section content (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions what the tool returns ('section hierarchy and metadata') but doesn't cover critical aspects like whether it's a read-only operation, potential rate limits, authentication needs, error conditions, or response format. This leaves significant gaps in understanding how the tool behaves.
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?
The description is extremely concise—a single sentence that directly states the tool's purpose without any fluff. It's front-loaded and wastes no words, making it easy to parse quickly.
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?
Given the lack of annotations and output schema, the description is insufficiently complete. It doesn't explain what 'section hierarchy and metadata' entails in the response, nor does it address behavioral aspects like safety or performance. For a tool with no structured context, more descriptive detail is needed to guide effective use.
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?
The schema description coverage is 100%, with both parameters clearly documented in the input schema. The description doesn't add any meaningful parameter semantics beyond what's already in the schema (e.g., it doesn't explain what 'section hierarchy' means in relation to the parameters). This meets the baseline for high schema coverage.
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's purpose with specific verbs ('Get') and resources ('RFC section hierarchy and metadata'), making it immediately understandable. However, it doesn't explicitly differentiate this tool from its siblings like 'get_related_sections' or 'get_rfc_dependencies', which might have overlapping functionality.
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 provides no guidance on when to use this tool versus alternatives. With siblings like 'get_related_sections' and 'get_rfc_dependencies' available, there's no indication of how this tool differs or when it's the appropriate choice, leaving usage decisions ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_statementC
Validate if a statement complies with RFC requirements.
| Name | Required | Description | Default |
|---|---|---|---|
| rfc | Yes | RFC number | |
| statement | Yes | Description of implementation or behavior to validate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool validates compliance but doesn't describe what the validation entails (e.g., returns a boolean, detailed report, or error messages), whether it requires network access, or any rate limits. This leaves significant gaps in understanding the tool's behavior.
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?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and wastes no space, making it easy to understand at a glance.
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?
Given the tool's complexity (validation operation with no annotations and no output schema), the description is incomplete. It doesn't explain what the tool returns (e.g., pass/fail result, detailed feedback), how validation is performed, or any behavioral traits. This makes it inadequate for an agent to use the tool effectively without guesswork.
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?
The input schema has 100% description coverage, with clear parameter definitions. The description adds minimal value beyond the schema by implying the 'statement' parameter is for validation, but it doesn't provide additional context like format examples or validation criteria. Baseline 3 is appropriate as the schema does the heavy lifting.
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's purpose with a specific verb ('validate') and resource ('statement'), specifying it checks compliance with RFC requirements. However, it doesn't explicitly differentiate from sibling tools like 'get_requirements' or 'get_definitions', which might provide related information without validation.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context for validation, or how it differs from sibling tools such as 'get_requirements' (which might list requirements) or 'generate_checklist' (which might create validation steps).
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.
7 tool updates
v0.4.5- Changed
generate_checklist4 fields changed- added
Input schema / properties / includeSubsectionsAdded value: +{ + "default": true, + "description": "Include subsections when filtering by sections (default: true)", + "type": "boolean" +} - changed
Input schema / properties / rfc / descriptionPrevious value: -"RFC 番号"New value: +"RFC number" - changed
Input schema / properties / role / descriptionPrevious value: -"実装の役割(クライアント/サーバー/両方)"New value: +"Implementation role (client/server/both)" - changed
Input schema / properties / sections / descriptionPrevious value: -"含めるセクション(省略時は全体)"New value: +"Sections to include (all if omitted)"
- Changed
get_definitions2 fields changed- changed
Input schema / properties / rfc / descriptionPrevious value: -"RFC 番号"New value: +"RFC number" - changed
Input schema / properties / term / descriptionPrevious value: -"特定の用語で検索"New value: +"Search for specific term"
- Changed
get_related_sections2 fields changed- changed
Input schema / properties / rfc / descriptionPrevious value: -"RFC 番号"New value: +"RFC number" - changed
Input schema / properties / section / descriptionPrevious value: -"基準となるセクション番号"New value: +"Base section number"
- Changed
get_requirements3 fields changed- changed
Input schema / properties / level / descriptionPrevious value: -"要件レベルでフィルタ"New value: +"Filter by requirement level" - changed
Input schema / properties / rfc / descriptionPrevious value: -"RFC 番号"New value: +"RFC number" - changed
Input schema / properties / section / descriptionPrevious value: -"セクション番号でフィルタ(例: \"5.5.1\")"New value: +"Filter by section number (e.g., \"5.5.1\")"
- Changed
get_rfc_dependencies2 fields changed- changed
Input schema / properties / includeReferencedBy / descriptionPrevious value: -"この RFC を参照している RFC も含めるか"New value: +"Include RFCs that reference this RFC" - changed
Input schema / properties / rfc / descriptionPrevious value: -"RFC 番号"New value: +"RFC number"
- Changed
get_rfc_structure2 fields changed- changed
Input schema / properties / includeContent / descriptionPrevious value: -"セクションの内容も含めるか(デフォルト: false)"New value: +"Include section content (default: false)" - changed
Input schema / properties / rfc / descriptionPrevious value: -"RFC 番号(例: 6455)"New value: +"RFC number (e.g., 6455)"
- Changed
validate_statement2 fields changed- changed
Input schema / properties / rfc / descriptionPrevious value: -"RFC 番号"New value: +"RFC number" - changed
Input schema / properties / statement / descriptionPrevious value: -"検証したい実装や動作の説明"New value: +"Description of implementation or behavior to validate"
7 tool updates
- First observed
generate_checklist - First observed
get_definitions - First observed
get_related_sections - First observed
get_requirements - First observed
get_rfc_dependencies - First observed
get_rfc_structure - First observed
validate_statement
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose targeting specific aspects of RFC analysis, with no overlap in functionality. For example, get_definitions extracts terms, get_requirements extracts normative language, and get_rfc_structure provides metadata, making misselection unlikely.
All tool names follow a consistent verb_noun pattern using snake_case, such as get_definitions, validate_statement, and generate_checklist. This predictability enhances readability and usability for agents.
With 7 tools, the server is well-scoped for RFC analysis, covering key operations like extraction, validation, and dependency mapping. Each tool earns its place without feeling excessive or insufficient for the domain.
The toolset provides comprehensive coverage for analyzing RFCs, including structure, definitions, requirements, and dependencies, with minor gaps such as lacking tools for editing or updating RFC content, but core workflows are well-supported.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for generating rough-draft project plans from natural-language prompts.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables Large Language Models to search and access IETF RFC documents with pagination support.313MIT
- FlicenseBqualityDmaintenanceA Model Context Protocol server that enables LLMs to extract and use content from unstructured documents across a wide variety of file formats.111-
- 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