前言
MCP刚刚发布的时候还是不温不火的,直到今年二月份cursor正式宣布接入对MCP功能的支持,才把这项功能推向了全体开发人员面前,本质来说他是一种技术Protocol,即种智能体Agent开发过程中共同约定的一种规范。这就好比秦始皇的"书同文、车同轨",在统一的规范下,大家的协作效率就能大幅提高,最终提升智能体Agent的开发效率。截止目前,已上千种MCP工具诞生,在强悍的MCP生态加持下, 人人手搓Manus的时代即将到来。就像现在Vue的开发者尤雨溪一样像统一我们前端的开发工具链一样,因为这样开发效率会大大提升。
他比我们的Function Calling 好在哪里?
总的来说,MCP解决的最大痛点,就是Agent开发中调用外部工具的技术门槛过高的问题。我们都知道,能调用外部工具,是大模型进化为智能体Agent的关键,如果不能使用外部工具,大模型就
只能是个简单的聊天机器人,甚至连查询天气都做不到。
由于底层技术限制啊,大模型本身是无法和外部工具直接通信的,Function calling的思路,就是创建一个外部函数(function)作为中介,一边传递大模型的请求,另一边调用外部工具,最终让大模型能够间接的调用外部工具。
Function calling是个非常不错的技术设计,自诞生以来,一直被业内奉为圭臬。但唯一的问题就是,编写这个外部函数的工作量太大了,一个简单的外部函数往往就得上百行代码,而且,为了让大模型"认识"
这些外部函数,我们还要额外为每个外部函数编写一个JSON Schema格式的功能说明,此外,我们还需要精心设计一个提示词模版,才能提高Function calling响应的准确率。
MCP的出现
如果你看过MCP的说明文档你会发现,其实他不仅仅是你们在网上看到的 MCP server ,他还有 MCP client 的开发,MCP的目标,就是能在Agent开发过程中,让大模型更加便捷的调用外部工具。为此,MCP提出了两个方案,其一,"车同轨、书同文",统一Function calling的运行规范。首先是先统一名称,MCP把大模型运行环境称作 MCP Client,也就是MCP客户端,同时,把外部函数运行环境称作MCP Server,也就是MCP服务器,下面我也会给大家分别介绍一下他们两个。
这是目前支持MCP的几个客户端 即MCP client
在日常工作和学习中,我们经常需要与浏览器、文件、数据库、代码仓库等外部工具打交道。传统方式中,我们需要手动截图或者复制文本,然后粘贴到AI窗口进行对话。MCP通过标准化的协议自动化了这些步骤。
MCP服务作为AI与外部工具的中间层,代替人类访问并操作外部工具。每个MCP服务(或称MCP server)专精于一类工作,比如读写浏览器、本地文件、操作git仓库等。
MCP 库这是这个网站的链接。
统一MCP客户端和服务器的运行规范,并且要求MCP客户端和服务器之间,也统一按照某个既定的提示词模板进行通信。"车同轨、书同文"最大的好处就在于,可以避免MCP服务器的重复开发,也就是避免外部函数重复编写。
例如,像查询天气、网页爬取、查询本地MySQL数据库这种通用的需求,大家有一个人开发了一个服务器就好,开发完大家都能复制到自己的项目里来使用,不用每个人每次都单独写一套。这可是促进全球AI开发者共同协作的好事儿,很快,GitHub上就出现了海量的已经开发好的MCP 服务器,从SQL数据库检索、到网页浏览信息爬取,从命令行操作电脑、到数据分析机器学习建模,等等等等,不一而足。 (之前的function calling 会存在 不同AI厂商要求不同的工具描述格式,导致同一工具需为不同平台重复开发适配层,还有硬编码耦合,编码耦合就像把工具直接钉死在工具箱里,想换个工具得把整个箱子拆了重做,特别费劲。)
如何去自己开发一个 MCP server
现在,只要你本地运行的大模型支持MCP协议,也就是只要安装了相关的库,仅需几行代码即可接入这些海量的外部工具,是不是感觉Agent开发门槛瞬间降低了呢。
这种"车同轨、书同文"的规范,在技术领域就被称作协议,例如http就是网络信息交换的技术协议。各类技术协议的目标,都是希望通过提高协作效率来提升开发效率,而MCP,Model Context Protocol,就
是一种旨在提高大模型Agent开发效率的技术协议。
那既然是协议,必然是使用的人越多才越有用。因此,为了进一普及MCP协议,Anthropic还提供了一整套MCP客户端、服务器开发的SDK,也就是开发工具,并且支持Python、TS和Java等多种语言,借助
SDK,仅需几行代码,就可以快速开发一个MCP服务器。
自己来写一个 MCP Server
其实步骤很简单,你只需要按我下面的步骤走即可。
环境配置流程
1. 安装包管理工具uv
# Linux/macOS
curl -LsSf astral.sh/uv/install.... | sh
# Windows (PowerShell)
irm astral.sh/uv/install.... | iex
⚠️ 安装后需重启终端
2. 创建项目目录
uv init weather && cd weather
3. 配置虚拟环境
# 创建虚拟环境 uv venv
# 激活环境 # Linux/macOS source .venv/bin/activate
# Windows ..venv\Scripts\activate
4. 安装依赖
uv add "mcp[cli]" httpx
5. 创建服务文件
touch weather.py # 创建空文件
项目结构验证
执行后应生成以下目录结构:
weather/
├── .venv/ # 虚拟环境
├── weather.py # 主程序文件
└── uv.lock # 依赖锁定文件
然后就是往里面写我们的MCP Server 脚本了
导入包并设置实例
一些需要使用的包 然后还有下面的这两行代码。
from mcp.server.fastmcp import FastMCP
# 初始化FastMCP服务器 mcp = FastMCP( "weather" )
// 可以填你们自己的文件名
然后是写你的辅助代码
一般是写处理请求:创建辅助函数来处理外部请求,例如API调用。确保这些函数能够处理错误并返回清晰的结果。
或者是数据格式化:定义函数来格式化或处理数据,以便于后续的使用或展示。这可能包括解析JSON响应或格式化输出。
然后是实现工具执行
写法是标记工具函数:
@mcp.tool()
装饰器用于标记某个函数,使其成为MCP框架中的一个工具。这样,框架能够识别并处理这些工具函数。
下面是一个获取天气的代码demo
这里是只写了 ****@mcp.tool() , 但是他不止于通过工具提供功能,还有以下两个功能 (要给他写好详细的 docString,这样LLM才知道这个函数是用来做什么的)
- @mcp.resource(): 通过资源公开数据(可以将其视为 GET 端点;它们用于将信息加载到 LLM 的上下文中)
- @mcp.prompt(): 通过提示定义交互模式(LLM 交互的可重复使用模板)
最后就是运行服务器
最后,让我们初始化并运行服务器:
if __name__ == "__main__" : # 初始化并运行服务器 mcp . run(transport= 'stdio' )
现在我们去MCP CLIENT 里面使用他
我这里选择的是cursor ,你需要在你的 cursor 里 点开 settings
然后点击 MCP. ,再是 Add new global Mcp server,在你的 mcp.json 配置文件中加入 这个
当然你的 command 是你weather.py 脚本所在地的 地址 用 which uv 去获取
然后args 里面的 地址 也需要你去替换成自己的,配置完了之后,你再去点开你的 MCP ,你就能看到这个
说明他已经配置完成了。
现在我们就可以去我们cursor的agent模式中去提问今天的天气如何啦
总结
目前看来MCP 的强大之处在于,它可以让 AI 大模型与各种各样的工具和服务连接起来,从而实现更加复杂和强大的功能。今年注定是智能体爆发的一年,而MCP必然会大幅让这个过程加速,理解并使用好他才能应对时代的浪潮。