MCP协议HTTP适配器

MCP2HTTP是一个最小化传输适配器,用于将使用stdio传输的MCP客户端连接到无状态HTTP MCP服务器,支持会话跟踪和能力过滤。

  • by tekorex
  • JavaScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 tekorex/mcp2http

使用说明

MCP2HTTP

用于将stdio MCP客户端连接到无状态HTTP MCP服务器的最小传输适配器。

概述

MCP2HTTP启用 模型上下文协议 客户端使用stdio传输通过无状态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 如果他们不需要会话跟踪,则完全使用header。 此功能是可选的,为希望在请求之间建立相关性而不增加复杂性的实现提供了便利。

能力筛选

适配器从以下位置跟踪服务器功能 initialize 响应并阻止对不支持功能的请求。 此功能解决了某些MCP客户端的问题,这些客户端每分钟多次重复轮询未发布的功能。通过在这些请求到达服务器之前对其进行过滤,当服务器仅支持特定功能时,此适配器可以减少不必要的负载,即。 tools,而客户端则默默地继续其轮询行为。

通知处理

通知(没有ID的消息)会自动丢弃。 这种方法自然与HTTP的请求/响应架构相一致。当在无状态HTTP上实现MCP时,丢弃通知是一个明智的选择,这是其他实现(如 麦高朗 HTTP传输。当 notifications/initialized 可能会让人停下来,一致的通知处理的实际好处应该会取得胜利。然而,HTTP MCP服务器可能仍然希望优雅地处理通知,以防其他实现转发它们。

许可证

麻省理工学院