Model Context Protocol 的服务器、客户端与接入配置。
MCP 是让模型应用连接外部工具和数据源的开放协议,基于 JSON-RPC。服务器暴露 tools、resources、prompts;客户端(Claude Code、IDE、桌面应用)负责发现并调用。
传输方式主要有 stdio 和 Streamable HTTP。stdio 适合本地进程,HTTP 适合远程共享服务;早期 SSE 传输已被 Streamable HTTP 取代,新旧客户端要匹配协议版本。
pip install -U "mcp[cli]"
Python SDK 自带 FastMCP,适合快速写工具服务器:
cat > server.py <<'PY'
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("ops-tools")
@mcp.tool()
def disk_usage(path: str = "/") -> dict:
"""返回指定路径的磁盘总量、已用和可用字节数。"""
import shutil
usage = shutil.disk_usage(path)
return {"total": usage.total, "used": usage.used, "free": usage.free}
@mcp.resource("config://app")
def app_config() -> str:
"""返回应用配置摘要。"""
return "env=prod\nregion=cn"
if __name__ == "__main__":
mcp.run(transport="stdio")
PY
python server.py
stdio 服务器启动后不会打印欢迎信息,stdout 已被 JSON-RPC 占用。
在 Claude Code 中注册 stdio 服务器:
claude mcp add --transport stdio ops-tools -- python /abs/path/server.py
claude mcp list
用 Inspector 调试工具列表和调用参数:
npx -y @modelcontextprotocol/inspector python /abs/path/server.py
远程部署改用 Streamable HTTP,并加认证:
# server.py 中改为 mcp.run(transport="streamable-http")
claude mcp add --transport http ops https://mcp.example.com/mcp \
--header "Authorization: Bearer $MCP_TOKEN"
print 或日志写到 stdout 都会破坏 JSON-RPC 帧;日志一律走 stderr 或 logging。python 可能不是你以为的解释器;在配置里写绝对路径并固定虚拟环境。npx 启动的服务器每次可能下载不同版本;生产配置固定包版本,离线环境预装依赖。合上页面,先回答,再展开对照。