|
最近在折腾大模型Agent开发的时候,发现了一个超级实用的协议——MCP(Model Context Protocol)。它是由Anthropic公司去年11月推出的,本来没啥动静,但今年Agent热潮一起来,它就火了。尤其是Cursor在2月份宣布支持MCP后,直接把这个协议推到了开发者眼前。今天我就来聊聊MCP的来龙去脉,以及怎么用它快速搭建客户端和服务器。相信看完这篇,你也能轻松上手,开发出自己的智能体Agent。 一、MCP是什么?为什么它能改变Agent开发游戏规则先简单说说MCP的背景。MCP全称Model Context Protocol,翻译成模型上下文协议。它本质上是一种规范,专门解决大模型调用外部工具的痛点。我们知道,大模型要想从聊天机器人进化成真正的Agent,必须能调用外部工具,比如查天气、爬网页、操作数据库。但大模型天生没法直接和外部世界互动,所以就需要一个“中介”——Function Calling。 Function Calling这个概念从诞生起就很受欢迎,但问题也明显:写函数代码太费劲,一个简单工具可能要上百行代码,还得配JSON Schema描述函数接口,再加上精心调提示词,确保大模型能准确调用。开发门槛高,重复劳动多。 MCP的出现就像秦始皇统一“书同文、车同轨”一样,它定义了统一的规范:大模型环境叫MCP Client(客户端),工具运行环境叫MCP Server(服务器)。两者之间用固定提示词模板通信。这样一来,大家就不用每次从零写工具了。GitHub上现在已经有上千个开源MCP服务器,从SQL查询到网页爬取、命令行操作,再到数据分析,应有尽有。你只要装个库,几行代码就能接入这些工具。 MCP的最大亮点是生态:Anthropic提供了Python、TypeScript、Java等多语言SDK,开发服务器超级简单。客户端不仅支持Claude模型,还兼容任意本地或在线大模型,甚至像Cursor这样的IDE也能直接用。想象一下,在Cursor里一键连接海量工具,Agent开发速度起飞! 二、搭建MCP客户端:从零到会聊天,只需几步MCP开发的第一步是建客户端。我们用uv工具管理环境——uv是Rust写的Python依赖管理器,比pip快多了,支持虚拟环境,还兼容requirements.txt。安装uv超级简单:用pip install uv,或者curl -LsSf https://astral.sh/uv/install.sh | sh。 uv的基本用法安装依赖:uv pip install requests 创建虚拟环境:uv venv myenv 激活:source myenv/bin/activate(Linux/macOS) 运行项目:uv run python script.py
现在,创建一个MCP客户端项目: uvinitmcp-clientcdmcp-clientuvvenvsource.venv/bin/activateuvaddmcp 然后新建client.py,写一个极简客户端代码(我贴了简化版,实际开发可以复制全文): importasynciofrommcpimportClientSessionfromcontextlibimportAsyncExitStackclassMCPClient:#初始化、连接模拟服务器、聊天循环、清理资源等函数...asyncdefmain():client=MCPClient()try:awaitclient.connect_to_mock_server()awaitclient.chat_loop()finally:awaitclient.cleanup()ifname=="main":asyncio.run(main()) 运行uv run client.py,就能看到一个CLI界面:输入问题,它会模拟回复(先回显你的输入)。代码结构清晰:__init__初始化,chat_loop处理交互,cleanup释放资源。Jupyter里也能跑,加nest_asyncio.apply()解决事件循环冲突。 三、接入在线/本地模型,让客户端“活”起来@极简版太基础了?加OpenAI或DeepSeek吧。先uv add openai python-dotenv,创建.env文件放API Key(国内用反代地址直连OpenAI)。DeepSeek类似,BASE_URL=https://api.deepseek.com。 修改client.py,用OpenAI客户端处理查询: 四、加载dotenv,读取API Keyself.client=OpenAI(api_key=self.openai_api_key,base_url=self.base_url)asyncdefprocess_query(self,query:str)->str:messages=[{"role":"system","content":"你是一个智能助手..."},{"role":"user","content":query}]response=await...#调用APIreturnresponse.choices[0].message.content运行后,就能和大模型聊天了!本地模型呢?用Ollama或vLLM调度框架,它们兼容OpenAI API风格,只改.env就行。比如ollama:BASE_URL=http://localhost:11434/v1/,MODEL=qwq。vLLM类似,启动服务后改BASE_URL=http://localhost:8000/v1。 我试了QwQ-32B模型,响应速度飞快,感觉本地Agent开发门槛真低了。 五、MCP服务器实战:建个天气查询工具,体验Function Calling客户端ready了,现在建服务器。MCP服务器提供Resources(资源)、Tools(工具)、Prompts(提示词)三种能力。我们用stdio(标准输入输出)模式建一个天气查询服务器,用OpenWeather API。 先uv add mcp httpx,获取API Key(免费注册)。新建server.py: importjsonimporthttpxfrommcp.server.fastmcpimportFastMCPmcp=FastMCP("WeatherServer")asyncdeffetch_weather(city:str)->dict:#httpx请求OpenWeatherAPI...defformat_weather(data:dict)->str:#格式化输出温度、湿度等...@mcp.tool()asyncdefquery_weather(city:str)->str:data=awaitfetch_weather(city)returnformat_weather(data)ifname=="main":mcp.run(transport='stdio')这个服务器注册了query_weather工具,描述清楚(城市英文名)。stdio模式下,服务器作为子进程跑。 六、连接客户端测试修改client.py支持stdio连接和Function Calling: asyncdefconnect_to_server(self,server_script_path:str):#启动stdio服务器,list_tools列出工具...asyncdefprocess_query(self,query:str)->str:#list_tools获取可用工具,发给OpenAI#如果finish_reason=="tool_calls",call_tool执行... 运行uv run client.py server.py,问“北京今天天气如何?”大模型会自动调用工具,返回格式化天气:温度XX°C,湿度XX%... 超方便! MCP通讯机制:本地用stdio,远程用HTTP+SSE(服务器推送事件)。JSON-RPC 2.0格式传输。Anthropic正考虑升级成流式HTTP,解决SSE单向限制。 调试用Inspector:装Node.js,npx -y @modelcontextprotocol/inspector uv run server.py,在浏览器http://127.0.0.1:5173/查看工具运行。 七、总结MCP不只是协议,更是生态。它让Agent开发从“高端黑科技”变成“人人可上手”。我从零建了个天气Agent,花了不到一小时,就感受到协作效率的提升。未来,随着更多服务器开源,想象空间巨大。如果你也感兴趣,赶紧试试吧! |