关于 MCP2HTTP
MCP2HTTP 是一种传输适配器,用于连接使用 stdio 的 MCP 客户端与无状态 HTTP MCP 服务。它转换传输方式并保留协议语义,还支持可选会话跟踪和能力过滤。
主要功能
- 01将 stdio 客户端桥接到 HTTP 端点
- 02添加客户端生成的 Session-Id UUID
- 03过滤不受支持的能力请求
- 04丢弃不带 ID 的通知
适用场景
- 01将 stdio 客户端连接到 HTTP MCP 端点
- 02在无服务器平台上使用 MCP 服务
- 03在无状态 HTTP 环境中关联请求
MCP 相关
它将 MCP 通信从 stdio 客户端适配到无状态 HTTP 服务,无需 SSE。适配器可选添加 `Session-Id` 标头,并根据服务公布的能力过滤请求。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP2HTTP
用于将 stdio MCP 客户端连接到无状态 HTTP MCP 服务的轻量级传输适配器。
概述
MCP2HTTP 可让使用 stdio 传输的 Model Context Protocol 客户端通过无状态 HTTP 与 MCP 服务通信。MCP 通常使用 stdio(用于本地进程)或服务器发送事件(SSE)传输,而此适配器可桥接到常规 HTTP 端点,支持全新的集成方式。
此适配器仅处理基础传输层转换,并通过由客户端生成的 UUID Session-Id 标头提供可选的状态跟踪。它保留协议语义,让客户端和服务端无需 SSE 即可直接交互,因此能够与无服务器平台和旧版系统无缝协作。
用法
将 MCP 客户端配置为按以下格式调用此命令并传入参数:
npx -y mcp2http <endpoint-url> ["Header: Value"...]
例如,在 Claude Desktop 配置文件(claude_desktop_config.json)中:
{
"mcpServers": {
"my-mcp-server": {
"command": "npx",
"args": [
"-y",
"mcp2http",
"http://localhost:3000/mcp"
]
}
}
}
你还可以将任意数量的 HTTP 标头作为参数传入。例如,添加身份验证令牌:
{
"mcpServers": {
"my-mcp-server": {
"command": "npx",
"args": [
"-y",
"mcp2http",
"https://example.com/mcp",
"Authorization: Bearer token123"
]
}
}
}
你需要一个可正常使用的 MCP HTTP 端点。 示例服务即将提供。
功能
客户端生成的会话跟踪
此适配器会自动生成 UUID,并在每个请求中将其作为 Session-Id 标头发送。 让客户端生成会话 ID 可能看起来有些反直觉,但这一做法类似于 1996 年提出的 Session-Id 方案,该方案从未被正式纳入 HTTP 标准。此机制极其简单,旨在作为适当身份验证的补充,而非替代。
128 位十六进制 UUID 格式具有抗冲突能力,并采用了通用的标识符标准,因此非常适合在无状态 HTTP 环境中关联请求。为避免碎片化并确保行为一致,遵循此设计的服务端实现应拒绝非 128 位十六进制的 Session-Id 值(无论是否带连字符)。
如果不需要会话跟踪,服务端可以安全地完全忽略 Session-Id 标头。 此功能为可选项,旨在方便那些希望在不增加复杂性的情况下关联请求的实现。
能力过滤
此适配器会跟踪服务端在 initialize 响应中公布的能力,并阻止针对不受支持能力的请求。 此功能旨在解决某些 MCP 客户端反复轮询未公布能力的问题,轮询频率可达每分钟数次。通过在请求到达服务端前将其过滤掉,当服务端仅支持特定能力(例如 tools)时,此适配器可减少不必要的负载,同时客户端会继续静默轮询。
通知处理
通知(不带 ID 的消息)会被静默丢弃。 这种做法与 HTTP 的请求/响应架构自然契合。在通过无状态 HTTP 实现 MCP 时,丢弃通知是合理的选择,mcp-golang HTTP 传输等其他实现也得出了相同结论。尽管 notifications/initialized 可能会让人犹豫,但一致地处理通知所带来的实际好处更值得优先考虑。不过,HTTP MCP 服务仍可考虑妥善处理通知,以防其他实现转发这些通知。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。