MCP2HTTP
用于将stdio MCP客户端连接到无状态HTTP MCP服务器的最小传输适配器。
概述
MCP2HTTP启用 模型上下文协议 客户端使用stdio传输通过无状态HTTP与MCP服务器通信。虽然MCP通常使用stdio(用于本地进程)或服务器发送事件(SSE)传输,但此适配器桥接到常规HTTP端点,从而实现了新的集成可能性。
适配器仅处理基本的传输层转换,同时通过客户端生成的UUID提供可选的状态跟踪 Session-Id 头球它保留了协议语义,允许客户端和服务器直接交互,而不需要SSE,从而与无服务器平台和遗留系统无缝协作。
用法
将MCP客户端配置为使用以下格式的参数调用此命令:
npx -y mcp2http ["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 如果他们不需要会话跟踪,则完全使用header。 此功能是可选的,为希望在请求之间建立相关性而不增加复杂性的实现提供了便利。
能力筛选
适配器从以下位置跟踪服务器功能 initialize 响应并阻止对不支持功能的请求。 此功能解决了某些MCP客户端的问题,这些客户端每分钟多次重复轮询未发布的功能。通过在这些请求到达服务器之前对其进行过滤,当服务器仅支持特定功能时,此适配器可以减少不必要的负载,即。 tools,而客户端则默默地继续其轮询行为。
通知处理
通知(没有ID的消息)会自动丢弃。 这种方法自然与HTTP的请求/响应架构相一致。当在无状态HTTP上实现MCP时,丢弃通知是一个明智的选择,这是其他实现(如 麦高朗 HTTP传输。当 notifications/initialized 可能会让人停下来,一致的通知处理的实际好处应该会取得胜利。然而,HTTP MCP服务器可能仍然希望优雅地处理通知,以防其他实现转发它们。
许可证
麻省理工学院
