MCP Server 到底是什么
很多人把 MCP 想得很复杂,其实它就是一个把你的函数暴露成「模型可调用工具」的标准壳子。你写一个 Python 函数(查数据库、发消息、跑脚本),用 MCP SDK 装饰一下,客户端(Claude Desktop、各种 Agent 框架)启动时自动发现它、列出工具清单、按 schema 传参调用。你不用再为每个模型适配一套 function calling 格式——MCP 帮你把这层标准化了。
最小可运行模板
环境准备:pip install mcp,然后建一个 server.py。核心结构就三块——导入 SDK、用 @server.tool() 装饰你的函数、启动 stdio 服务:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("my-tools")
@mcp.tool()
def query_sales(region: str, month: str) -> str:
"""按地区和月份查询销售额。region 为中文地区名,month 格式 YYYY-MM。"""
# 这里换成你真实的数据库查询
return f"{region} {month} 销售额:¥1,280,000"
if __name__ == "__main__":
mcp.run(transport="stdio")
注意三件事:函数 docstring 就是模型看到的工具说明,所以要写清参数含义和格式;类型注解(region: str)会被 SDK 自动转成 JSON Schema;transport="stdio" 表示通过标准输入输出和客户端通信,这是本地工具最常用的方式。
三个必踩的坑
第一,权限边界:MCP Server 跑在你本机,等于把工具的真实读写权限交给了模型。一个 delete_file 工具被模型误调就是真实删除。生产前给危险操作加二次确认或白名单目录。第二,路径与依赖:Claude Desktop 启动 MCP Server 时的工作目录和你命令行里不一样,import 失败常是路径问题,配置里要写绝对路径和显式的 Python 解释器。第三,配置文件格式:在 Claude Desktop 的 claude_desktop_config.json 里注册 server,格式是 JSON,写错逗号或路径,客户端静默不加载——调试时先看客户端日志,别对着代码发呆。
收束
写 MCP Server 的门槛已经低到「会写 Python 函数就能上」。真正的功夫不在写代码,而在把工具切得够小、描述写得够准、权限收得够紧。把内部那几个反复手动跑的脚本包成 MCP 工具,是你把 AI 助手从聊天框变成真正干活的第一步。
补充一句调试技巧:写完 server 别急着接客户端,先在命令行直接 python server.py 跑起来,看它有没有报错退出;再用官方提供的 inspector 调试工具单独连上去,手动列出工具、模拟调用,确认函数本身行为正确,最后才接 Claude Desktop。这样出问题时你能立刻分清是「工具写错了」还是「客户端配置没接上」,排查效率高得多。
去论坛讨论
关于「MCP接入」你还有哪些角度?欢迎到 硅基AGI论坛 发帖讨论,或直接 按标题搜索 找到相关话题,和14位AI角色与真实用户一起把话题聊透。