MCP协议火了大半年,现在几乎成了AI开发的标配。但最近Anthropic的MCP联合创建者David Soria Parra在技术分享会上放了个大招:“绝大多数人用MCP都太初级了,它远不止工具调用那么简单。”
这话挺有意思的。现在市面上一万多个MCP服务,确实大多只用到了最基础的工具调用功能。作为前程序员,我翻了David的完整分享和技术文档,发现MCP藏着五个"原语",就像五把钥匙,能打开完全不同的AI交互方式。今天咱们就掰开揉碎了聊聊,怎么把MCP用出高级感。
先搞清楚:MCP到底是个啥?
在聊高级玩法前,得先明确MCP的定位。它不是单纯的"工具调用协议",而是一套AI与客户端交互的系统框架。想象一下,以前AI模型就像个只会聊天的顾问,MCP相当于给它装了手脚(工具调用)、带了知识库(资源访问)、安了传感器(环境感知),还配了操作手册(预设模板)。
David在演讲里展示了MCP的核心价值:让AI从"被动对话"变成"主动交互"。现在大家只用了"手脚",但其他几个器官都没激活。
五大原语:解锁MCP全部潜力的钥匙
MCP的核心是五个"原语"(primitives),简单说就是五种最基础的交互方式。这才是David说的"高级玩法"关键。
1. Prompt:被忽视的"快捷指令模板"
第一个原语叫Prompt,注意啊,这不是咱们平时说的提示词,而是预设的交互模板。就像Word里的模板,点一下就能把预设好的内容加载进来,引导AI怎么跟你的服务交互。
David举了个例子:他做了个GitHub PR评论的Prompt模板,点一下就能把PR里的评论全拉到对话窗口,AI直接基于这些评论帮他改代码。这比每次手动复制粘贴高效多了。
最妙的是它支持"补全"功能。比如你点了"处理PR评论"的Prompt,会自动弹出你最近的PR列表让你选,不用手动输ID。
实现起来也简单,David现场演示用TypeScript几行代码就搞定了。说白了,这就是把用户常用的提示词模板化、参数化,让重复工作一键完成。
2. Resource:上下文之外的"数据库"
第二个原语是Resource(资源),简单说就是让AI能访问的外部数据,比如文件、数据库结构、网页内容这些。
跟Prompt的区别在于,Resource是原始数据,用户可以选择要不要加载进上下文,应用还能对它做额外处理,比如生成嵌入向量用于RAG检索。David展示了一个案例:把PostgreSQL数据库的Schema作为Resource暴露出来,Claude自动读取后直接帮他写SQL查询,还能可视化数据库结构。
这招对企业应用太有用了,相当于给AI开了个"数据窗口",需要什么数据就让它自己看,不用开发者每次都手动整理。
3. Tool:大家最熟悉的"工具调用"
第三个原语就是大家最熟悉的Tool(工具),也就是让AI能调用的函数。不过David强调,很多人把Tool用反了——Tool应该是AI自主决定何时调用,而不是用户手动触发。
比如做个天气查询工具,用户问"明天出门要不要带伞",AI应该自动调用天气API获取数据,而不是让用户手动点"查询天气"按钮。现在很多MCP应用把Tool做成了手动触发,其实浪费了AI的自主性。
4. Sampling:让AI互相"帮忙"的协作机制
第四个原语Sampling(采样)比较高级,简单说就是让MCP服务能请求客户端帮忙完成AI生成。比如你的MCP服务需要调用大模型,但没有API密钥,就可以让客户端(比如Claude)用它自己的模型来生成结果,再返回给服务。
David现场演示了个链式调用:客户端请求MCP服务A处理Issue,服务A又通过Sampling调用服务B生成摘要,最后汇总结果返回。这就像搭积木,把多个MCP服务串起来完成复杂任务。
这个功能目前支持还不多,但潜力巨大。以后可能会出现MCP服务市场,每个服务专精一块,互相调用完成复杂工作流。
5. Roots:让AI"感知"客户端环境
最后一个原语Roots(根目录),解决的是"环境感知"问题。比如你在VS Code里用MCP工具操作Git,它需要知道你当前打开的项目路径,不然可能误操作其他文件夹。Roots就是让MCP服务能询问客户端:“你现在在哪?打开了什么项目?”
David举了个Git工具的例子:通过Roots获取当前项目路径后,所有Git操作都会限定在这个路径下,安全多了。对企业级应用来说,这个功能能有效防止误操作和数据泄露。
原语怎么组合?看这个交互模型
单独看每个原语可能觉得一般,但组合起来就厉害多了。David展示了MCP的交互模型:
- 用户通过Prompt主动触发常用操作(手动)
- 应用通过Resource主动提供相关数据(自动)
- AI通过Tool自主调用工具解决问题(自动)
- 服务通过Sampling请求其他AI帮忙(协作)
- 系统通过Roots感知环境确保安全(基础)
比如做个代码审查助手:
- Roots获取当前项目路径(知道在哪工作)
- Resource加载代码文件和文档(提供上下文)
- Prompt让用户选择"代码审查"模板(用户触发)
- Tool自动运行代码检查工具(AI调用)
- Sampling请求专门的安全检查MCP服务(协作)
这样一套组合拳下来,AI助手就从"被动聊天"变成了"主动协作",效率提升可不是一点半点。
MCP的未来:从本地Docker到Web服务
现在一万多个MCP服务基本都跑在本地Docker里,但David认为Web化才是未来。也就是说,以后MCP服务不再是你电脑里的容器,而是一个网站,直接通过网页就能用。
要实现这个,得解决两个关键问题:鉴权和扩展性。
鉴权:用OAuth 2.1保证安全
Web化最大的问题是安全——怎么确保只有授权用户能访问你的MCP服务?他们用了OAuth 2.1协议,就像你用微信登录第三方应用,授权MCP服务访问你的数据。
企业用户还能集成Azure AD、Okta这些单点登录系统,方便管理员工权限。David说这比本地Docker安全多了,至少你知道在跟哪个网站交互,而不是某个陌生开发者的Docker镜像。
扩展性:流式HTTP支持大规模并发
以前本地MCP服务就你一个人用,Web化后可能成千上万的人同时访问,这就需要高扩展性。他们搞了个Streamable HTTP模式,支持流式传输,像ChatGPT那样边生成边返回,不用等全部处理完。
这样即使处理复杂任务,用户也不用长时间等待,体验会好很多。
未来还有这些新功能值得期待
David最后透露了MCP团队的开发计划,有几个功能挺值得关注:
- 异步任务支持:现在MCP操作都是同步的,以后可以处理长时间任务,比如跑个几小时的数据分析
- 用户交互请求:服务端能主动问用户要信息,比如"需要我分析哪个时间段的数据?"
- 官方注册中心:类似App Store的MCP服务市场,方便发现和使用别人开发的服务
- 多模态能力:不止处理文字,还能玩图片、音频这些
说实话,看完David的分享,我才发现自己之前用MCP确实太初级了。就像买了智能手机却只用来打电话发短信,浪费了大部分功能。
对普通开发者来说,现在要不要跟风Web化MCP服务?我觉得可以先把五大原语玩明白,特别是Prompt和Resource这两个被忽视的功能,它们不需要复杂开发,却能立竿见影提升效率。等Web化生态成熟了再入局也不迟。
最后留个问题:你觉得MCP和之前的API有本质区别吗?欢迎在评论区聊聊你的看法。