返回 MCP 目录
public公开dns本地运行

mcp-standard-finder

一个用于获取、解析和阅读IETF RFC和互联网草案的Python MCP服务器,支持RFC文档、互联网草案、IETF工作组文档和OpenID基金会规范的搜索与解析。

article

README

🚀 标准查找器 - RFC和互联网草案MCP服务器

标准查找器是一个综合性的Python MCP服务器,用于从IETF网站获取、解析和读取RFC(请求评论)和互联网草案。它提供了一系列工具和资源,可通过编程方式与RFC文档、互联网草案和IETF工作组文档进行交互。

我要感谢 @mjpitz/mcp-rfc 提供的基础。本解决方案是基于Python的移植和扩展,使用了 Kiro

🚀 快速开始

标准查找器使用Python标准库,无需额外安装依赖。你可以直接运行以下命令启动服务器:

# 立即运行 - 无需安装!
python3 standard_finder.py

# 以HTTP模式运行
python3 standard_finder.py --http

# 在自定义端口以HTTP模式运行
python3 standard_finder.py --http --port 8080

✨ 主要特性

RFC支持

  • 按编号获取RFC文档。
  • 按关键字搜索RFC。
  • 从RFC文档中提取特定章节。
  • 解析HTML和TXT格式的RFC文档。

互联网草案支持

  • 按名称获取互联网草案文档(自动检测最新版本)。
  • 使用IETF数据跟踪器API按关键字搜索互联网草案。
  • 自动或明确获取互联网草案的最新版本。
  • 从互联网草案中提取特定章节。
  • 解析HTML和TXT格式的互联网草案。
  • 支持版本感知处理(例如,draft-name-05draft-name 获取最新版本)。

OpenID基金会支持

  • 按名称获取OpenID基金会规范。
  • 按关键字搜索OpenID规范。
  • 从OpenID规范中提取特定章节。
  • 支持所有主要的OpenID规范(连接核心、发现、注册等)。
  • 解析HTML格式的规范并提取元数据。
  • 对长时间运行的操作提供进度通知。

工作组支持

  • 完整的工作组文档:检索任何IETF工作组的所有RFC和互联网草案。
  • 活动文档过滤:自动过滤掉过期、撤回或替换的草案。
  • 工作组元数据:包括工作组信息、描述和状态。
  • 灵活过滤:选择包含/排除RFC或草案,设置每种类型的限制。
  • 流行工作组:已在httpbis、oauth、tls、quic、dnsop等工作组进行测试。

通用特性

  • 智能缓存:提高重复请求的性能。
  • 全面的元数据:提取作者、日期、状态、摘要等信息。
  • 基于章节的解析:按章节和子章节浏览文档。
  • 多种输出格式:完整文档、仅元数据或仅章节。
  • 强大的错误处理:优雅的回退机制和详细的错误消息。
  • 符合MCP协议:与MCP兼容的客户端和MCP检查器完全集成。
  • 双传输模式支持:支持stdio和HTTP传输模式。
  • 增强的RFC解析:改进了各种RFC格式的标题提取。
  • 进度通知:对长时间运行的操作提供实时进度更新。
  • 高级日志记录:全面的日志记录,详细跟踪初始化阶段。
  • 与MCP检查器兼容:具有正确的工具模式格式和参数验证。
  • 通知支持:正确处理所有标准MCP通知。
  • 传输健壮性:增强的错误处理和连接管理。
  • 符合JSON - RPC 2.0:完全符合JSON - RPC 2.0规范。

📦 安装指南

标准查找器仅使用Python标准库,无需额外安装依赖。你可以直接运行以下命令启动服务器:

# 立即运行 - 无需安装!
python3 standard_finder.py

# 以HTTP模式运行
python3 standard_finder.py --http

# 在自定义端口以HTTP模式运行
python3 standard_finder.py --http --port 8080

💻 使用示例

基础用法

# 获取RFC 2616的元数据
await mcp.call_tool('get_rfc', {'number': '2616', 'format': 'metadata'})

# 搜索与HTTP协议相关的RFC
await mcp.call_tool('search_rfcs', {'query': 'http protocol', 'limit': 5})

高级用法

# 获取HTTPbis工作组的所有文档,包括RFC和互联网草案
await mcp.call_tool('get_working_group_documents', {
    "working_group": "httpbis",
    "include_rfcs": true,
    "include_drafts": true,
    "limit": 20
})

📚 详细文档

可用工具

RFC工具

get_rfc

按编号获取RFC文档。 参数

  • number(字符串,必需):RFC编号(例如 "2616")。
  • format(字符串,可选):输出格式(full、metadata、sections),默认:"full"。 示例
{
    "number": "2616",
    "format": "metadata"
}
search_rfcs

按关键字搜索RFC。 参数

  • query(字符串,必需):搜索关键字或短语。
  • limit(数字,可选):返回的最大结果数,默认:10。 示例
{
    "query": "http protocol",
    "limit": 5
}
get_rfc_section

从RFC中获取特定章节。 参数

  • number(字符串,必需):RFC编号(例如 "2616")。
  • section(字符串,必需):要检索的章节标题或编号。 示例
{
    "number": "2616",
    "section": "Introduction"
}

互联网草案工具

get_internet_draft

按名称获取互联网草案文档。如果未指定版本,自动获取最新版本。 参数

  • name(字符串,必需):互联网草案名称,可包含或不包含版本(例如 "draft - ietf - httpbis - http2 - 17" 或 "draft - ietf - httpbis - http2" 获取最新版本)。
  • format(字符串,可选):输出格式(full、metadata、sections),默认:"full"。 示例
{
    "name": "draft - ietf - httpbis - http2 - 17",
    "format": "metadata"
}
{
    "name": "draft - ietf - httpbis - http2",
    "format": "full"
}
search_internet_drafts

按关键字搜索互联网草案。 参数

  • query(字符串,必需):搜索关键字或短语。
  • limit(数字,可选):返回的最大结果数,默认:10。 示例
{
    "query": "http2 protocol",
    "limit": 5
}
get_internet_draft_section

从互联网草案中获取特定章节。 参数

  • name(字符串,必需):互联网草案名称(例如 "draft - ietf - httpbis - http2 - 17")。
  • section(字符串,必需):要检索的章节标题或编号。 示例
{
    "name": "draft - ietf - httpbis - http2 - 17",
    "section": "Introduction"
}
get_working_group_documents

获取特定IETF工作组的所有活动RFC和互联网草案。 参数

  • working_group(字符串,必需):IETF工作组缩写(例如 "httpbis"、"oauth"、"tls")。
  • include_rfcs(布尔值,可选):结果中是否包含RFC(默认:true)。
  • include_drafts(布尔值,可选):结果中是否包含互联网草案(默认:true)。
  • limit(数字,可选):每种类型的最大文档数(默认:50)。 示例
{
    "working_group": "httpbis",
    "include_rfcs": true,
    "include_drafts": true,
    "limit": 20
}

响应包括

  • 工作组信息(名称、描述、状态)。
  • 工作组发布的RFC列表。
  • 工作组的活动互联网草案列表。
  • 摘要统计信息(总数)。

OpenID基金会工具

get_openid_spec

按名称获取OpenID基金会规范。 参数

  • name(字符串):OpenID规范的名称或标识符。
  • format(字符串,可选):输出格式 - "full"(默认)、"metadata" 或 "sections"。 示例
# 获取OpenID Connect核心规范
await mcp.call_tool('get_openid_spec', {'name': 'openid - connect - core'})

# 仅获取元数据
await mcp.call_tool('get_openid_spec', {'name': 'openid - connect - discovery', 'format': 'metadata'})

# 仅获取章节
await mcp.call_tool('get_openid_spec', {'name': 'oauth - 2.0 - multiple - response - types', 'format': 'sections'})
search_openid_specs

按关键字搜索OpenID基金会规范。 参数

  • query(字符串):搜索查询/关键字。
  • limit(整数,可选):最大结果数(默认:10)。 示例
# 搜索OpenID Connect规范
await mcp.call_tool('search_openid_specs', {'query': 'connect'})

# 搜索OAuth规范
await mcp.call_tool('search_openid_specs', {'query': 'oauth', 'limit': 5})
get_openid_spec_section

从OpenID基金会规范中获取特定章节。 参数

  • name(字符串):OpenID规范的名称。
  • section(字符串):要检索的章节标题或标识符。 示例
# 从OpenID Connect核心规范中获取身份验证章节
await mcp.call_tool('get_openid_spec_section', {
    'name': 'openid - connect - core',
    'section': 'Authentication'
})

可用资源

RFC资源

  • rfc://{number}:按编号获取RFC文档。
  • rfc://search/{query}:按关键字搜索RFC。

互联网草案资源

  • draft://{name}:按名称获取互联网草案文档(如果未指定版本,获取最新版本)。
  • draft://search/{query}:按关键字搜索互联网草案。
  • draft://latest/{basename}:按基本名称获取互联网草案的最新版本。

工作组资源

  • wg://{group}:获取工作组的所有文档(RFC和互联网草案)。
  • wg://{group}/rfcs:仅获取工作组的RFC。
  • wg://{group}/drafts:仅获取工作组的互联网草案。

OpenID基金会资源

  • openid://{name}:按名称获取OpenID基金会规范。
  • openid://search/{query}:按关键字搜索OpenID规范。

命令行选项

python3 standard_finder.py --help                    # 显示帮助信息
python3 standard_finder.py                           # 以stdio模式运行(默认)
python3 standard_finder.py --stdio                   # 明确以stdio模式运行
python3 standard_finder.py --http                    # 在端口3000上运行HTTP服务器
python3 standard_finder.py --http --port 8080        # 在端口8080上运行HTTP服务器
python3 standard_finder.py --log - level DEBUG         # 设置日志级别(DEBUG、INFO、WARNING、ERROR)
python3 standard_finder.py --log - dir /var/log/rfc    # 自定义日志目录

日志记录

服务器包含全面的日志记录,具有自动轮转和增强的调试功能:

日志特性

  • 特定实例的日志文件:每个服务器实例都有自己的日志文件。
  • 自动轮转:日志文件在达到10MB时轮转,保留5个备份文件。
  • 带时间戳的文件名:格式:rfc_server_YYYYMMDD_HHMMSS_PID.log
  • 多个日志级别:DEBUG、INFO、WARNING、ERROR。
  • 结构化日志:包括时间戳、函数名和行号。
  • 增强的初始化日志:详细跟踪MCP初始化阶段。
  • 请求/响应日志:完全可见MCP协议交换。
  • 进度通知:对长时间运行的操作进行实时日志记录。
  • 错误诊断:全面的错误报告,包含完整上下文。

日志位置

  • 默认/tmp/rfc_server/
  • 自定义:使用 --log - dir 选项。
  • 权限:确保目录可写。

日志内容

  • 服务器生命周期:启动/关闭事件,包含详细配置。
  • MCP协议:所有请求、响应和通知,包含完整JSON。
  • 初始化阶段:客户端初始化过程的详细日志记录。
  • 工具执行:RFC和互联网草案获取操作的时间记录。
  • 错误条件:包含完整请求上下文的堆栈跟踪。
  • 性能指标:缓存命中、响应大小和时间数据。
  • 传输层:STDIO和HTTP连接管理。
  • 验证:JSON - RPC 2.0合规性和模式验证。

增强的初始化日志

🚀 INITIALIZE REQUEST RECEIVED
Handling request: initialize (ID: 1)
Request timestamp: 2024 - 10 - 01T18:08:29.123456
Validating initialize request format:
  ✅ protocolVersion: str
     Protocol version: 2024 - 11 - 05
  ✅ clientInfo: dict
     Client name: mcp - client
     Client version: 1.0.0

📤 SENDING INITIALIZE RESPONSE
==================================================
Initialize response being sent to client:
  Response size: 456 bytes
  Response ID: 1 (type: int)
  Raw JSON: {"jsonrpc":"2.0","id":1,"result":...}
==================================================
✅ INITIALIZE RESPONSE SENT SUCCESSFULLY

📢 NOTIFICATIONS/INITIALIZED RECEIVED
✅ Client initialization confirmed - server is ready for requests

示例日志条目

2024 - 10 - 01 18:08:29,123 - rfc_server - INFO - main:45 - Starting RFC MCP Server with arguments: {'http': true, 'port': 3000}
2024 - 10 - 01 18:08:29,456 - rfc_server - INFO - handle_request:289 - 🚀 INITIALIZE REQUEST RECEIVED
2024 - 10 - 01 18:08:29,789 - rfc_server - INFO - handle_request:345 - ✅ JSON - RPC 2.0 version confirmed
2024 - 10 - 01 18:08:30,012 - rfc_server - INFO - run_stdio:837 - ✅ INITIALIZE RESPONSE SENT SUCCESSFULLY
2024 - 10 - 01 18:08:30,234 - rfc_server - INFO - handle_request:567 - 📢 NOTIFICATIONS/INITIALIZED RECEIVED

测试HTTP模式

启动HTTP服务器:

python3 standard_finder.py --http

测试端点:

# 健康检查
curl http://localhost:3000/health

# 初始化MCP会话
curl -X POST http://localhost:3000/mcp \
  -H "Content - Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024 - 11 - 05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}'

# 列出工具
curl -X POST http://localhost:3000/mcp \
  -H "Content - Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

# 调用RFC工具
curl -X POST http://localhost:3000/mcp \
  -H "Content - Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_rfc","arguments":{"number":"2616","format":"metadata"}}}'

# 调用工作组工具
curl -X POST http://localhost:3000/mcp \
  -H "Content - Type: application/json" \
  -d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"get_working_group_documents","arguments":{"working_group":"oauth","limit":10}}}'

# 获取OpenID Connect核心规范
curl -X POST http://localhost:3000/mcp \
  -H "Content - Type: application/json" \
  -d '{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"get_openid_spec","arguments":{"name":"openid - connect - core","format":"metadata"}}}'

# 搜索OpenID规范
curl -X POST http://localhost:3000/mcp \
  -H "Content - Type: application/json" \
  -d '{"jsonrpc":"2.0","id":6,"method":"tools/call","params":{"name":"search_openid_specs","arguments":{"query":"oauth","limit":5}}}'

开发

项目结构

standard_finder.py             # 主MCP服务器(零依赖)
requirements.txt               # 可选的Python依赖
tests/
  test_final.py                # 全面的测试套件
README.md                      # 本文件
output/                        # 生成的输出文件

运行测试

# 运行全面的测试套件
python3 tests/test_final.py

# 或者使用npm
npm test

MCP检查器兼容性

服务器与 MCP检查器 完全兼容,可用于调试和测试MCP工具:

模式格式

  • 包装参数:工具模式使用MCP检查器期望的格式,带有命名输入包装器(例如,GetRfcInputSearchRfcsInput)。
  • 向后兼容性:仍然支持现有客户端的直接参数格式。
  • 自动检测:自动检测并处理两种参数格式。
  • 全面的模式:所有9个工具都有详细的JSON模式定义和正确的验证。
  • 参数描述:丰富的参数描述和约束,以提供更好的用户体验。

协议合规性

  • JSON - RPC 2.0:完全符合JSON - RPC 2.0规范。
  • MCP通知:正确处理 notifications/initialized 和其他标准通知。
  • ID一致性:保持请求和响应之间的ID类型一致性。
  • 错误处理:正确的错误响应格式,带有适当的错误代码。

使用MCP检查器进行测试

# 以HTTP模式启动服务器
python3 standard_finder.py --http --port 3000

# 将MCP检查器连接到http://localhost:3000/mcp
# 所有工具将以正确的参数模式和验证显示
# 测试直接和包装参数格式

调试功能

  • 增强的日志记录:详细记录初始化阶段和所有MCP操作。
  • 请求/响应跟踪:完全可见MCP协议交换。
  • 验证日志:详细验证请求和响应。
  • 错误诊断:全面的错误报告,带有堆栈跟踪。

传输模式

Stdio模式(默认)

  • MCP标准:官方MCP传输协议。
  • 基于进程:客户端将服务器作为子进程启动。
  • 可靠:直接的进程通信。
  • 安全:无网络暴露。
  • 与Q CLI兼容:与MCP客户端完美配合。

HTTP模式

  • 🌐 基于网络:服务器作为HTTP服务运行。
  • 🔧 开发/测试:对调试有用。
  • 🌍 Web集成:启用CORS以支持浏览器访问。
  • 🔒 网络安全:需要额外的安全考虑。

快速开始示例

使用MCP客户端

配置完成后,你可以在任何MCP兼容的客户端中使用这些工具:

# 获取RFC 2616(HTTP/1.1)
await mcp.call_tool('get_rfc', {'number': '2616', 'format': 'metadata'})

# 搜索与HTTP相关的RFC
await mcp.call_tool('search_rfcs', {'query': 'HTTP', 'limit': 5})

# 获取最新的HTTP/2互联网草案
await mcp.call_tool('get_internet_draft', {'name': 'draft - ietf - httpbis - http2'})

# 搜索WebSocket草案
await mcp.call_tool('search_internet_drafts', {'query': 'websocket'})

# 获取OAuth工作组的所有文档
await mcp.call_tool('get_working_group_documents', {
    'working_group': 'oauth', 
    'include_rfcs': true, 
    'include_drafts': true, 
    'limit': 20
})

# 仅获取TLS工作组的RFC
await mcp.call_tool('get_working_group_documents', {
    'working_group': 'tls', 
    'include_rfcs': true, 
    'include_drafts': false, 
    'limit': 10
})

# 获取OpenID Connect核心规范
await mcp.call_tool('get_openid_spec', {
    'name': 'openid - connect - core',
    'format': 'metadata'
})

# 搜索OAuth规范
await mcp.call_tool('search_openid_specs', {
    'query': 'oauth',
    'limit': 5
})

使用资源

# 通过资源URI访问
await mcp.read_resource('rfc://2616')
await mcp.read_resource('draft://draft - ietf - httpbis - http2')
await mcp.read_resource('rfc://search/HTTP')

# 工作组资源
await mcp.read_resource('wg://httpbis')           # 所有文档
await mcp.read_resource('wg://oauth/rfcs')        # 仅RFC
await mcp.read_resource('wg://tls/drafts')        # 仅草案

🔧 技术细节

服务器实现了三个主要组件:

  1. RFC服务:处理从RFC中获取、解析和提取数据,具有增强的标题解析功能。
  2. 互联网草案服务:处理从互联网草案中获取、解析和提取数据,支持工作组。
  3. MCP服务器:实现MCP协议,并通过stdio和HTTP传输暴露工具和资源。

标准查找器仅使用Python标准库,采用TXT格式解析以实现最大兼容性。互联网草案服务与IETF数据跟踪器API集成,以增强搜索功能和工作组文档检索。

关键特性

智能版本处理

互联网草案服务自动检测你是请求特定版本还是最新版本:

  • draft - ietf - httpbis - http2 - 17 → 专门获取版本17。
  • draft - ietf - httpbis - http2 → 自动获取最新可用版本。

工作组集成

  • 完整的文档检索:获取任何IETF工作组的所有RFC和互联网草案。
  • 实时数据:使用实时IETF数据跟踪器API获取最新信息。
  • 智能过滤:自动排除过期、撤回或替换的文档。
  • 灵活选项:根据需要选择文档类型并设置限制。

强大的错误处理

  • 优雅地处理网络超时和故障。
  • 无效的RFC/草案编号返回详细的错误消息。
  • 回退机制确保最大兼容性。
  • 全面的日志记录用于调试和监控。

性能优化

  • 内存缓存减少重复的网络请求。
  • 并发请求处理提高吞吐量。
  • 高效解析HTML和纯文本格式。
  • HTTP模式支持多个同时连接。
  • 增强的RFC标题提取以获取更好的元数据。

数据源

  • RFC:官方IETF RFC存储库(rfc - editor.org)。
  • 互联网草案:IETF数据跟踪器(datatracker.ietf.org)。
  • 工作组:IETF数据跟踪器API(datatracker.ietf.org/api)。
  • 搜索:IETF数据跟踪器API,带有网页抓取回退机制。

支持的流行工作组

  • httpbis - HTTP协议规范。
  • oauth - OAuth身份验证和授权。
  • tls - 传输层安全。
  • quic - QUIC传输协议。
  • dnsop - DNS操作。
  • jose - JSON对象签名和加密。
  • ietf - 一般IETF文档。
  • 还有更多...

📄 许可证

本项目采用Apache许可证2.0 - 有关详细信息,请参阅 LICENSE 文件。

近期改进

版本0.2504.4 - 最新增强功能

MCP检查器兼容性

  • 工具模式格式:更新为与MCP检查器兼容的格式,带有命名输入包装器。
  • 参数处理:双格式支持 - 处理包装和直接参数格式。
  • 自动检测:自动检测参数格式并相应处理。
  • 全面的模式:所有9个工具都有详细的JSON模式定义。

协议合规性

  • JSON - RPC 2.0:完全符合JSON - RPC 2.0规范。
  • MCP通知:增加了对 notifications/initialized 和其他标准通知的支持。
  • ID一致性:增强了请求和响应之间的ID类型保留。
  • 错误处理:改进了错误响应格式,带有正确的错误代码。

增强的日志记录

  • 初始化阶段跟踪:详细记录完整的MCP初始化序列。
  • 请求/响应日志:完全可见所有MCP协议交换。
  • 进度通知:对长时间运行的操作进行实时日志记录。
  • 验证日志:全面验证请求和响应。
  • 错误诊断:增强的错误报告,包含完整上下文和堆栈跟踪。

传输层改进

  • STDIO健壮性:增强的错误处理和连接管理。
  • 响应大小管理:在STDIO模式下自动截断大响应。
  • 字符清理:改进了响应中特殊字符的处理。
  • 连接跟踪:详细记录连接生命周期和状态。

工具增强

  • 进度回调:为关键工具添加了进度通知支持。
  • 参数验证:增强的参数验证,带有详细的错误消息。
  • OpenID基金会支持:与OpenID规范目录完全集成。
  • 工作组文档:增强的元数据和过滤功能。

兼容性

  • 向后兼容:所有现有客户端无需更改即可继续工作。
  • MCP检查器就绪:与MCP检查器完全兼容,用于调试。
  • Q CLI兼容:与Q CLI和其他MCP客户端无缝配合。
  • HTTP/STDIO双模式:两种传输模式都得到充分支持和测试。

故障排除

常见问题

MCP检查器连接问题

# 确保服务器以HTTP模式运行
python3 standard_finder.py --http --port 3000

# 检查服务器是否响应
curl http://localhost:3000/health

# 验证MCP端点
curl -X POST http://localhost:3000/mcp \
  -H "Content - Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024 - 11 - 05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

STDIO模式问题

  • 大响应截断:在STDIO模式下,超过200KB的响应会自动截断。
  • 字符编码:为了与STDIO兼容,会清理特殊字符。
  • 连接中断:检查日志中的传输关闭问题。

日志记录和调试

# 启用调试日志
python3 standard_finder.py --log - level DEBUG

# 检查日志文件
ls -la /tmp/rfc_server/

# 监控实时日志
tail -f /tmp/rfc_server/rfc_server_*.log

工具参数问题

  • MCP检查器格式:使用包装参数,如 {"GetRfcInput": {"number": "2616"}}
  • 直接格式:使用直接参数,如 {"number": "2616", "format": "metadata"}
  • 自动检测:服务器自动检测并处理两种格式。

性能优化

  • 缓存:响应在内存中缓存,以处理重复请求。
  • 格式选择:当不需要完整内容时,使用 "metadata" 格式以获得更快的响应。
  • 限制参数:在搜索操作中使用适当的限制,以避免超时。
help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端