Python MCP服务器

一个基于FastAPI和fastmcp的Python MCP服务器,提供可流式传输的HTTP端点,适用于托管MCP服务器,支持一键部署到Render。

  • by GitCodeWulf
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 GitCodeWulf/custodyops-mcp-python

使用说明

custodyops mcp python

最低限度 Python MCP服务器 超过 流式HTTP 使用FastAPI+ fastmcp,准备在上部署 渲染 使用HTTPS。它暴露了一个 ping 工具加两个演示工具(get_positions, list_upcoming_corporate_actions)您可以用只读适配器替换您的托管数据。

为什么是流式HTTP? 这是推荐的运输方式 远程/托管MCP服务器,将双向流式传输简化为单个 POST /mcp 端点,使云部署变得简单。有关规范模式,请参阅MCP HTTP快速入门和SDK文档。

特性

  • 位于的可流式HTTP端点 POST /mcp
  • 承载者身份验证 通过 AUTH_TOKEN
  • /health 正常运行时间检查的端点
  • 代码占用最小,易于使用更多MCP工具进行扩展
  • 一键部署 通过渲染 render.yaml

快速启动(本地)

python -m venv .venv && source .venv/bin/activate   # Windows: .venv\Scriptsctivate
pip install -r requirements.txt
export AUTH_TOKEN=devtoken123
export PORT=3000
uvicorn app:app --host 0.0.0.0 --port $PORT

使用cURL进行测试:

# tools/list
curl -s -X POST http://localhost:3000/mcp   -H "Content-Type: application/json"   -H "Authorization: Bearer devtoken123"   -d '{"jsonrpc":"2.0","id":"1","method":"tools/list","params":{}}' | jq

# tools/call ping
curl -s -X POST http://localhost:3000/mcp   -H "Content-Type: application/json"   -H "Authorization: Bearer devtoken123"   -d '{"jsonrpc":"2.0","id":"2","method":"tools/call","params":{"name":"ping","arguments":{}}}' | jq

或者运行辅助脚本:

chmod +x scripts/test_locally.sh
AUTH_TOKEN=devtoken123 PORT=3000 ./scripts/test_locally.sh

部署到渲染(HTTPS)

  1. 叉或推 将此仓库添加到您的GitHub。
  2. 在渲染中: New → 网络服务→ 连接仓库.
  3. 查看来自的设置 render.yaml (Python环境,免费计划)。提供自动配置 超文本传输安全协议.
  4. 集 AUTH_TOKEN 在渲染中 环境 (如果使用蓝图,则自动生成)。
  5. 部署→ 您的公共MCP端点是: https://<your-app>.onrender.com/mcp.

远程测试:

APP_URL=https://<your-app>.onrender.com AUTH_TOKEN=<token> ./scripts/test_remote.sh

从克劳德桌面(远程MCP)使用

向添加中继条目 claude_desktop_config.json:

{
  "mcpServers": {
    "custodyops-mcp": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://<your-app>.onrender.com/mcp"],
      "env": { "AUTH_TOKEN": "<same-token>" }
    }
  }
}

重新启动应用程序,然后让Claude列出可用的工具。

使用真实的监护数据进行扩展

将演示工具替换为数据集市或API的只读适配器。保留回复 小字体,并在可能的情况下添加野外来源。

骨架示例:

@mcp_tool
def get_positions(account_id: str) -> str:
    rows = query_positions(account_id)  # your adapter
    return json.dumps(rows)

安全说明

  • 保持 AUTH_TOKEN 秘密;定期旋转。对于企业使用,请转到OAuth/JWT并添加每个帐户的授权。
  • 随着 HTTP传输,正常的日志记录是可以的,但要编辑敏感数据并添加请求ID。

许可证

麻省理工学院