无状态MCP代理

该服务是一个无状态MCP代理,通过将Streamable HTTP MCP服务器转换为Stdio接口,强制无状态行为,适用于需要稳定连接和API密钥管理的场景。

  • by post-class
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 post-class/mcp_proxy_stateless

使用说明

概述

这款应用通过将Streamable HTTP MCP服务器转换为Stdio接口,使您能够使用该服务器。作为一个关键特性,它通过移除(某些元素)来强制实现无状态行为 mcp-session-id 每次请求时都如此。

使用方法

安装

uv add mcp-proxy-stateless

示例MCP客户端配置

{
  "mcpServers": {
    "lf-agents": {
      "command": "uvx",
      "args": [
        "mcp-proxy-stateless",
        "--insecure",
        "--timeout",
        "300",
        "--headers",
        "x-api-key",
        "YOUR_API_KEY",
        "https://your_mcp_domain/mcp"
      ]
    }
  }
}

先决条件

  • MCP服务器必须支持可流式传输的HTTP。
  • 不支持SSE。

注释

  • 对于需要API密钥的服务器,您可以指定 --headers KEY VALUE 多次。
  • 如果需要CA证书,请指定 --ssl-cert-file /path/to/cacert.pem (仅适用于MCP连接)。为了快速测试,请设置 --insecure 跳过HTTPS验证。该 SSL_CERT_FILE 环境变量也支持,但使用时 --ssl-cert-file 建议避免影响整个环境。

超时

  • 每个请求(如初始化 / 列出工具 / 调用工具等)的默认总体超时时间为120秒。
  • 要更改它,请使用 --timeout SECONDS。
    • 示例: uvx mcp-proxy-stateless --timeout 300 https://example/mcp
  • 此值同样适用于HTTP(httpx)超时设置,以稳定长时间运行操作的连接。

CLI 选项

选项 描述 默认值 示例
url 目标可流式传输的HTTP MCP终端节点(必需) 无(必需) https://your_mcp_streamable_http_endpoint/mcp
-H KEY VALUE / --headers KEY VALUE 添加额外的HTTP头(API密钥等)。 mcp-session-id 总是被移除 无 --headers x-api-key YOUR_API_KEY, --headers Authorization "Bearer YOUR_TOKEN"
--insecure / --no-insecure 禁用/启用TLS证书验证 验证已启用 (--no-insecure) 禁用: --insecure / 推荐: SSL_CERT_FILE=/path/to/cacert.pem uvx mcp-proxy-stateless ...
--timeout SECONDS 每个请求的总体超时时间(初始化/列出工具/调用工具等) 120 (或者 MCP_PROXY_TIMEOUT 环境变量) --timeout 300, MCP_PROXY_TIMEOUT=300 uvx mcp-proxy-stateless ...
--ssl-cert-file PATH 仅用于MCP连接的CA证书包 无(系统/默认信任库) --ssl-cert-file /path/to/cacert.pem
--log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL} 日志详细程度 INFO --log-level DEBUG

TLS 验证(私有 CA / 自签名)

  • 添加 --insecure 禁用远程终端的TLS证书验证。
    • 示例: uvx mcp-proxy-stateless --insecure --headers x-api-key YOUR_API_KEY https://example/mcp
  • 建议:提供CA证书以保持验证功能启用。
    • 示例: uvx mcp-proxy-stateless --ssl-cert-file /path/to/cacert.pem https://example/mcp
    • 兼容性:环境变量 SSL_CERT_FILE=/path/to/cacert.pem 同样有效(在未指定时作为备用方案)。
    • 注: --ssl-cert-file 仅适用于用于MCP连接的httpx客户端,且不影响 uvx 依赖解析(PyPI 连接)。

测试(紫外线)

  • 同步依赖项
    • uv sync
  • 运行所有测试
    • uv run -m unittest discover -s test -v
  • 运行特定测试
    • 从终端用户角度进行的MCP客户端测试: uv run -m unittest test/test_client_user.py -v
    • 更狭窄的情况: uv run -m unittest test.test_client_user.TestClientLike.test_my_mcp_insecure -v
  • 环境变量
    • .env 如果存在,则自动加载。主要用途:
      • TEST_URL_PLAYWRIGHT用于测试的PlaywrightMCP端点的URL(例如。, https://.../mcp)。
  • 配置文件
    • 你可以在(系统/软件中)准备MCP设置 test/test_mcp_servers.json如果你包含 ${TEST_URL_PLAYWRIGHT} 在URL中,它将使用来自(某处的)值进行展开 .env。

URLs(统一资源定位符)

PyPI

https://pypi.org/project/mcp-proxy-stateless/ 的中文翻译可以是:“https://pypi.org 上的项目 mcp-proxy-stateless”。不过,通常我们不会直接翻译网址,而是保留原样,同时在中文语境下解释其含义或用途。但按照您的要求,直接翻译网址部分(即网址中的文字部分)可以如上所述。如果需要更完整的表述,可以说:“这是 Python 包索引(PyPI)上的一个项目链接:mcp-proxy-stateless”

Git

https://github.com/post-class/mcp_proxy_stateless 翻译为中文是:“https://github.com/post-class/mcp无状态代理”