摘要:这里是文章没有AI味的小杨,今天给大家分享一波Mcp协议。MCP(Model Context Protocol,模型上下文协议)是一种开放标准协议,用于将AI模型连接到各种外部工具和数据源,还有大家常说的 AI界的USB接口(相信大家已经听吐了)。
什么是MCP协议?
这里是文章没有AI味的小杨,今天给大家分享一波Mcp协议。
MCP(Model Context Protocol,模型上下文协议)是一种开放标准协议,用于将AI模型连接到各种外部工具和数据源,还有大家常说的 AI界的USB接口(相信大家已经听吐了)。
通俗来说就是,这个世界已经打造为适合人类的样子,现阶段的AI对现实世界的理解充满着不确定性,对事物的理解能力也没有人那么强,那么我们需要定义一种协议来
告诉AI怎么调用我们的工具(jsonSchema),参数名、参数类型、参数描述。响应AI的Tool call(前提是遵守我们定义的JsonSchema)返回给AI结果,AI携带上结果继续发起对话(相当于省略了我们按照AI的提示执行命令,然后复制一段报错信息给AI的过程)现在作为一个还算懂点技术的人今天来从技术的角度来聊一聊MCP协议。
为啥MCP协议如此重要?在MCP协议出现之前,要想将AI模型与外部工具交互是一件复杂且不稳定的,Tool call的出现还是比较早的,openai很早就支持了,并且由于没有标准也就意味着每一个人Tool call的实现方式就不一样,有人用tool call,有人用json_response的方式,对参数使用也不一致。
2024年11月推出的Mcp成为了现阶段最合适的解决方案,甚至openai也加入到这个生态中。
MCP协议架构MCP使用客户端-服务器架构,其核心组件包括:
MCP主机(Host):面向用户的AI界面(如Claude Desktop、Cursor、Cline插件等),可连接到多个MCP服务器。附带一张Mcp协议支持情况图。STDIO(标准输入/输出):类似于Python的subprocess.Popen,然后write/read stdout来实现,但是我们不用操心transport layer,官方已经提供了python和javascript的sdk,几乎是一键接入,有能力的话发布至pypi或npm后用户使用也非常简单,python可以使用现在的明星包管理工具uv(uvx)或者js使用npx,都可以实现一键运行HTTP+SSE(服务器发送事件):用于远程连接,HTTP用于客户端请求,SSE用于服务器响应和流式传输,这个现在用的比较少,比如CLaude Desktop现在不支持这种方式,cursor其他IDE没试过,但是主流应该还是STDIO的方案MCP与API的对比
MCP与传统API(有openapi支持的restful api)其实比较像。虽然二者都实现了系统间的通信,但MCP有一些关键优势:
单一协议集成所有功能,不要误以为MCP只包含Tool call,实际上还有Prompts,Resources等,只不过现在各个Client对这些特性的支持比较有限,例如resources资源实时数据更新,而不是静态连接,例如在Claude Desktop中一次对话可以多次调用Tool call,并且根据Tool call result做出决策动态工具发现和上下文处理,mcp协议有notifications/tools/list_changed事件可以支持热更新工具列表MCP的核心优势简化开发:只需编写一次代码,就可以多次集成,官方主推语言时python和js,动态语言跨平台天生优势相比Go Rust等工具分发起来要容易很多,结合pypi和npm分发起来也非常方便,现在Python也有自己的npx(uvx)哈哈,明星工具UV。灵活性:可以在不进行复杂重新配置的情况下切换AI模型或工具。实时响应:MCP连接保持活跃,也就是说我在配置文件新增了工具之后不需要重启客户端就能实现工具的热更新。安全合规:内置访问控制和标准化安全实践,不用多解释了,AI最重要的课题之一就是安全。可扩展性:随着AI生态系统的增长,可以添加来自官方、社区的各种新工具,以前AI主要是卷提示词,现在大家也都开始卷MCP了。MCP的实际应用场景
MCP协议在各种场景中展现出强大的功能:
我作为一个Python开发者,提供一个场景你就知道了
我正在开发一个django5 ninja + vue3 + elementui的项目,集成以下Mcp Server:
filesystem:官方出品的Mcp Server,支持修改、创建文件等常见操作,非常好用,虽然edit_file是exact替换,但是claude3.7 pro上表现还不错,匹配不上的情况不是特别多fetch:自动拉取elementui文档,自动拉取ninja的openapi.json,自动接口测试Github:用过Python的我觉得都可以用起来,众所周知Python语言特性太丰富了,即便是大几K star的项目也不能保证没有bug,文档也不一定全,这时候让claude直接去读github是非常爽的,完全不需要人工干预定位代码,提供代码用法,找到错误。这是我遇到django-ninja的TestApiclient确实login方法时让他查询github仓库确认并给出解决方案。这个算是样板间了,Claude官方提供的方案,Claude Pro可以直接使用。
优点是不限制上下文和次数,缺点就不用说了国内用不了,即便是代充也非常容易被封号,我自己的话用的是别人搭的Claude镜像站,现在自己做了一套工具现在Claude Web也能用上Mcp
Cursor和Claude Pro价格一样,结合MCP加上Cursor自身的上下文感知能力非常强,能让很多原本不连贯的编程体验现在只需要accept再accept就可以了,缺点就是贵,而且现在Claude3.7 thinking需要两次高级请求,成本有点高。
Cline是开源的,而且是作为插件嵌入到vscode,之前使用vscode的同学完全不会有迁移的痛苦,现在微软开始封cursor的扩展商店了很多人习惯的插件可能在cursor就用不到了,cline的优势就出来了,还有一个即是有点也是缺点的特性就是需要自己提供provider,也就是说要自己去买Token,这个成本不用我说也知道有多高了,尤其是现在Claude3.7 thinking,国内主力用可以考虑deepseek r1和claude3.7混用,毕竟挣得是人民币花美元还是有点吃不消哈哈。
Cline在Mcp这块非常积极,在Mcp支持这块比Cursor要强很多,可以一键安装,有点应用商店的感觉,现在大家也都在做Mcp Server的应用商店,cline在这块很有优势。
今天就分享到这里,下一期分享一波我自己做的基于Git的工具,能够实现代码Snapshot,防止Ai破坏你的代码库。
来源:鼠meme