你下载的 zip 是一份独立、可运行的 MCP Server,完全可以在网关之外自部署 ——
本机 pip install + python 起,或 Docker 容器化跑,或嵌进 Claude Desktop。
本页按部署路径展开,讲清楚每一步要做什么、踩什么坑。
| 文件 | 作用 | 必备? |
|---|---|---|
mcp_server.py |
MCP Server 主体,含全部工具函数,启动入口 | ✅ 必备 |
requirements.txt |
Python 依赖清单(mcp[cli] / httpx / uvicorn) |
✅ 必备 |
Dockerfile |
容器镜像配方,基于 python:3.11-slim |
仅 Docker 部署用 |
tools.json |
工具定义的数据副本(参考用,运行时从代码读) | 📖 参考 |
config.yaml |
配置参考(实际以环境变量为准) | 📖 参考 |
README.md |
每个 zip 自带的简要说明 | 📖 参考 |
所有变量都是可选的,有合理默认值,只有 USER_API_ENDPOINT 几乎一定要设:
| 变量 | 含义 | 默认 | 何时必设 |
|---|---|---|---|
USER_API_ENDPOINT |
你业务 API 的根 URL | wizard 第 3 步填写的值 | 几乎总是 |
API_KEY |
鉴权 Key,会作为 X-API-Key 头转发 |
不发送 | 鉴权方式选 api_key 时 |
HOST |
streamable-http 绑定的 host | 127.0.0.1 |
对外服务时改 0.0.0.0 |
PORT |
streamable-http 监听端口 | 8000 |
端口被占时 |
TOOL_TIMEOUT |
单次工具调用总超时(秒) | wizard 生成的默认值 | 上游 API 慢时调大 |
TOOL_CONNECT_TIMEOUT |
TCP 连接超时(秒) | wizard 生成的默认值 | 极少需要改 |
适合做 HTTP 服务暴露给多客户端(Cherry Studio / Cursor / Web)。
# 1. 解压
unzip my-agent.zip -d my-agent
cd my-agent
# 2. 装依赖(一次性,建议用虚拟环境)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
# 3. 配环境变量
export USER_API_ENDPOINT="https://api.example.com"
export API_KEY="sk-xxxxxx" # 没设鉴权就跳过
export HOST="0.0.0.0" # 0.0.0.0 才能被局域网/外部访问
export PORT="8080"
# 4. 跑
python mcp_server.py
看到 Uvicorn running on http://0.0.0.0:8080 就起来了。客户端接 http://<your-ip>:8080/mcp。
适合嵌进 Claude Desktop 这类用 stdio 与本地进程通信的客户端。
cd my-agent
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
export USER_API_ENDPOINT="https://api.example.com"
# 不用启,Claude Desktop 会按 mcp.json 配置拉起 python 进程
后续接入 Claude Desktop 见 客户端接入指南。
zip 自带 Dockerfile,直接 build 即可:
# 1. 把整个 zip 内容放到一个目录
unzip my-agent.zip -d my-agent && cd my-agent
# 2. 构造镜像
docker build -t my-agent .
# 3. 跑容器(streamable-http)
docker run -d --name my-agent \
-p 8080:8080 \
-e USER_API_ENDPOINT="https://api.example.com" \
-e API_KEY="sk-xxxxxx" \
my-agent
# 4. 看日志确认起来
docker logs -f my-agent
# 5. 客户端接 http://<docker-host>:8080/mcp
stdio 模式没有 EXPOSE 端口,容器靠 stdin/stdout 通信 —— 适合被 docker compose 或 K8s 当 sidecar 拉起:
docker run -i --rm \
-e USER_API_ENDPOINT="https://api.example.com" \
my-agent
注:-i 必须开,否则容器拿不到 stdin。
编辑 mcp.json(macOS: ~/.config/claude/mcp.json;Windows: %APPDATA%\Claude\mcp.json):
{
"mcpServers": {
"my-agent": {
"command": "python",
"args": ["C:/Users/you/my-agent/mcp_server.py"],
"env": {
"USER_API_ENDPOINT": "https://api.example.com",
"API_KEY": "sk-xxxxxx"
}
}
}
}
重启 Claude Desktop,在工具列表里会看到 my-agent 暴露的全部工具。
Windows 路径注意:args 里要写绝对路径,且反斜杠要转义("C:\\Users\\you\\...")或直接用正斜杠。
ModuleNotFoundError: No module named 'mcp'忘了 pip install -r requirements.txt。如果用了虚拟环境,确认 Claude Desktop 的 command 指向虚拟环境的 python(否则它会调系统 python,找不到包):
# 找虚拟环境里的 python 绝对路径
which python # macOS/Linux
where python # Windows
# 把这个绝对路径写进 mcp.json 的 command 字段
Uvicorn running on http://127.0.0.1:8080 但外部连不上默认 HOST=127.0.0.1 只接受本机连接。设 HOST=0.0.0.0 即可对外。
调大 TOOL_TIMEOUT(默认约 30s):
export TOOL_TIMEOUT=120
docker logs 看到 Address already in use宿主机 8080 被占。换端口映射:
docker run -p 9000:8080 ... my-agent
客户端连 http://<host>:9000/mcp。
直接编辑 mcp_server.py — 用 @mcp.tool() 装饰器新加一个异步函数即可。改完重启服务生效。
| 维度 | 网关托管 | 自部署 |
|---|---|---|
| 冷启动 | 网关里 in-process 加载(几十 ms) | 本机或容器冷启(几百 ms ~ 几秒) |
| URL 稳定性 | 网关重启 restore_running_servers 恢复,URL 不变 |
自己起进程,URL 取决于 HOST:PORT |
| 多用户隔离 | 网关按 user_id 隔离,可多账号 | 单租户,你自己控访问 |
| 鉴权 / 配额 | 网关侧可加 IP 白名单 / 速率限制 | 依赖反代(Nginx)或 K8s NetworkPolicy |
| 代码再编辑 | 得重新走 wizard | 直接 vim 改 mcp_server.py |
| 适用场景 | 快速验证、多用户协作 | 生产部署、深度定制、嵌入现有系统 |
还没看够?回到 使用指导 看完整流程,或 翻 客户端接入指南 配 IDE / Cherry Studio。
📦 只想用 Docker? 跳到 用 Docker 跑 MCP Server,
那页专注容器化: docker build / compose 编排 / Claude Desktop sidecar / 反代 / 镜像优化,
比本页的第四节更详细。