第一个 MCP 服务器
理论铺垫完毕,本章动手:用 Python 官方 SDK 写一个只含一个加法工具的 MCP 服务器,跑起来并接入宿主。全程默认 stdio 传输,代码完整可复制。
环境准备
需要 Python 3.10+,安装官方 SDK:
pip install mcp
# 输出:Successfully installed mcp ...
python --version
# 输出:Python 3.13.x
最小服务器:一个 add 工具
新建 server.py,代码如下:
# server.py —— 第一个 MCP 服务器(stdio 传输)
from mcp.server.fastmcp import FastMCP
# 创建服务器实例,名称会显示在客户端里
mcp = FastMCP("math-server")
@mcp.tool
def add(a: int, b: int) -> int:
"""把两个整数相加并返回结果(描述会作为工具说明给模型看)"""
return a + b
if __name__ == "__main__":
mcp.run() # 默认使用 stdio,从 stdin 读请求、向 stdout 写响应
说明:工具名取函数名 add,参数从类型注解推导出 JSON Schema,docstring 作为模型看到的工具描述——这一套约定在第 8 章展开。
用 MCP Inspector 测试
服务器单独运行不会打印任何东西,它要等客户端消息。最省事的验证方式是打开官方检查器 MCP Inspector:
# 方式一:npx 直接启动 Inspector 的图形界面,再在界面里填启动命令
npx @modelcontextprotocol/inspector
# 方式二:部分版本支持把启动命令直接附在后面(以 Inspector 文档为准)
npx @modelcontextprotocol/inspector python server.py
若安装了 mcp 的命令行工具,也可用一行命令拉起检查器:
mcp dev server.py # 打开 Inspector 开发界面
mcp inspect server.py # 命令行快速检查服务器
打开 Inspector 后连接本服务器,在"工具"列表里应能看到 add;直接填 a=3、b=5 调用,返回 8,即大功告成。检查器相关用法后续章节详解。
接入宿主:以 Claude Desktop 为例
把服务器注册进宿主配置文件(路径与字段以宿主文档为准):
{
"mcpServers": {
"math-server": {
"command": "python",
"args": ["/绝对路径/server.py"]
}
}
}
保存后重启宿主,就能在工具列表看到 math-server 的 add。Windows 上建议把 command 写成 python 完整路径(如虚拟环境里的 python.exe)。Cline、Cursor 等宿主的接入方式类似,只是配置界面不同。
常见问题
- 报"连接失败":多半是 command/args 路径不对或环境变量缺失,先在终端手动执行一次启动命令确认无报错。
- 看不到工具:确认初始化正常,宿主侧开启了该服务器的工具。
小结
一个 MCP 服务器可以只写 10 行:建 FastMCP 实例、@mcp.tool 注册工具、mcp.run() 启动;再借 Inspector 或宿主配置验证即可。下一章把工具写得更健壮:描述、参数约束与错误处理。