【AI工具界的"乐高大师":MCP协议拯救手忙脚乱的程序员】
——当你的AI代理开始抱怨"工具太多,我选择摆烂"时…
场景一:
凌晨3点,程序员老王盯着屏幕上的AI代理崩溃日志,第108次尝试让DeepSeek自动订外卖:
“亲爱的用户,我理解您想订老乡鸡,但我的知识截止到2023年,而且——说真的,您觉得我一个语言模型会有饿了么账号吗?😅”
场景二:
新来的实习生小李兴奋地展示他的"全能AI助理":
“看!它能查天气、读邮件、分析股票…(突然程序报错)等等,这个’工具依赖地狱’错误是什么意思?”
这时,MCP协议像超级英雄一样从天而降——不过它穿的不是披风,而是一件印满API接口的紧身衣! 🦸♂️
🤖 AI代理们的"工具焦虑症"现状
- 症状1:你的AI助手比瑞士军刀功能还多,但调用API时比第一次约会还紧张
- 症状2:每加一个新工具就要重写300行代码,程序员发际线以光速后退
- 症状3:工具之间互相打架:“日历API说周二有空,但邮件API显示那天要开追悼会”
(此时办公室饮水机旁传来AI的碎碎念:“要不你们人类自己来?”)
🎩 MCP协议:不是魔法,但比魔法更靠谱
想象一下:
如果AI工具界也有"插座标准",MCP就是那个让中美欧插头都能用的万能转换器!
它的简历亮点:
- 🧠 脑容量升级:从"我知道的"进化到"我能查到我知道的"
- 🔌 即插即用:像乐高一样拼接工具,再也不用担心GitHub仓库变成"工具坟场"
- 🕺 社交达人:让高冷的LLM和话痨的Slack机器人快乐牵手
(某AI代理感动落泪:“终于不用在’对不起,我做不到’和’404 Error’之间反复横跳了!”)
🚀 前方高能预告
在接下来的冒险中,你将看到:
- Git仓库变身话痨:用MCP让代码自己写commit message(终于不用编"修复bug"了)
- Airbnb客服AI:一边查房源一边讲冷笑话(“这套房不错,就是鬼故事多了点”)
- 黑客帝国既视感:2000+工具同时在线,键盘侠看了都直呼专业
…
温馨提示:阅读时请勿喝水,否则看到"用MCP让Excel表格和量子计算机聊天"时可能会喷屏!
为什么为AI代理和基于LLM的应用采用MCP?
MCP正在成为一种标准,帮助开发者构建能够有效与其他外部应用通信的AI系统。微软最近宣布在其Copilot Studio中集成MCP,以简化AI应用和代理访问工具的方式。此外,OpenAI也宣布在其产品中支持MCP,例如Agents SDK和ChatGPT桌面应用。直接为AI助手配备工具并没有错,但对于一个由多个代理组成的AI代理系统来说,管理多个任务(如阅读和回复邮件、网页抓取、财务分析、获取实时天气信息等)会变得非常繁琐。
带有工具集成的AI代理
在上图中,三个外部工具连接到LLM。如果工具数量增加到100多个,管理和保护它们将变得非常困难。改进的方法是通过MCP注册表访问这些工具,如下一节所示。
带有MCP集成的AI代理
在这张图中,我们将代理系统所需的工具组合在一起,并通过MCP服务器访问它们,以提供更一致的用户体验。MCP方法使得通过中心位置管理和保护这些工具变得更加容易。
使用MCP相比传统工具集成的优势
MCP相比传统工具集成方式有多个关键优势。例如,没有MCP的工具集成可靠性存疑,因为在调用多个外部应用的API时可能会因不兼容的AI基础设施而出现错误。在MCP之前,每个需要添加到代理的工具都必须通过自定义代码实现,这可能需要数周时间。
- 架构:与预建的AI代理工具规范不同,MCP具有清晰灵活的架构,用于与工具和API交互。
- 改进的外部工具访问和管理:它通过标准化接口为AI模型提供工具访问,弥合了LLM与第三方系统之间的通信鸿沟。
- 解决独立工具实现的限制:MCP工具既适用于单用户场景,也适用于团队。
- 社区驱动:MCP拥有许多开源服务器和开发者生态系统,广泛应用于开发者社区的多种用例。
- 认证:它具有强大的内置认证和权限系统,用于控制工具访问。例如,使用Composio提供的MCP工具时,可以通过Google Sheets或Gmail认证用户。
- 工具搜索:与传统的安装、配置和集成工具到AI聊天机器人的方法不同,MCP使得搜索和发现外部工具更加容易。
- 可扩展性:MCP可以轻松扩展到大量用户和应用。
- 行业标准:虽然可以通过硬编码工具为AI应用提供上下文,但MCP提供了一种行业标准,为代理和LLM提供所需的上下文。
MCP服务器的种类
Anthropic的MCP规范有两种服务器形式,用于为代理和AI项目添加工具。这些MCP服务器连接类型包括:
- 服务器发送事件(SSE):通过HTTP连接到远程服务。
- STDIO:允许执行本地命令并通过标准I/O进行通信。
你选择的构建AI应用的框架将提供连接这些服务器所需的类。
访问MCP注册表/服务器生态系统
有许多开源库提供了托管的MCP工具,用于增强LLM和代理,确保它们生成的响应可靠。这些托管的MCP工具库被称为注册表,提供了精选的服务集合。你可以使用它们的工具将AI应用连接到以下注册表。此外,你可以使用不同类型的服务器,例如uvx
(基于Python的工具,无需安装),还有基于Docker的MCP工具运行选项,以及需要安装Node.js的npx
服务器。
- GitHub上的MCP服务器:社区构建的服务器集合,包含额外的MCP资源。
- Glama注册表:为开发者提供的生产就绪的开源MCP服务器。
- Smithery注册表:通过Smithery,开发者可以访问2000多个MCP服务器,增强AI代理和LLM的能力。
- OpenTools:OpenTools为MCP工具使用提供生成式API。你可以访问数百个现成的MCP工具,用于AI项目。通过OpenTools API,开发者可以扩展LLM的网页搜索能力、获取实时位置数据和网页抓取。API支持Curl、Python和TypeScript。访问OpenTools的快速入门指南以使用API。
from openai import OpenAI
client = OpenAI(
base_url="https://api.opentools.com",
api_key="<OPENTOOLS_API_KEY>"
)
completion = client.chat.completions.create(
model="anthropic/claude-3.7-sonnet",
messages=[
{
"role": "user", "content": "Compare specs of top 5 EVs on caranddriver.com" }
],
tools=[{
"type": "mcp", "ref": "firecrawl" }]
)
- PulseMCP注册表:通过PulseMCP,你可以浏览托管的MCP工具和用例,用于AI项目。查看PulseMCP新闻了解最近热门的MCP服务器和应用。
- mcp.run:该注册表为开发者提供了数百个MCP应用,用于业务。
- Composio注册表:Composio的基于SSE的MCP服务器允许轻松集成工具与不同的AI框架,以构建应用。
- guMCP:Gumloop的guMCP提供免费、开源且完全托管的MCP服务器,可与任何AI应用无缝集成。
为LLM和代理添加MCP的七大客户端框架
尽管MCP最近成为了热门话题,开发者社区都在讨论它,但很难知道应该使用哪些MCP客户端框架来与AI应用和代理集成。我们经过研究,发现了以下领先的MCP客户端平台,适用于基于Python和TypeScript的代理工作流和AI助手。
注意:以下部分展示了在构建AI解决方案的框架中实现MCP的示例,而非与Cursor或Windsurf等AI代码编辑器的MCP集成。
1. 使用OpenAI Agents SDK构建Git MCP代理
当使用OpenAI Agents SDK构建代理时,你可以通过SDK的MCPServerStdio
和MCPServerSse
类连接到这些社区构建的MCP服务器。以下MCP代理实现访问本地Git仓库的根目录,并回答用户关于仓库的查询。
import asyncio
import shutil
import streamlit as st
from agents import Agent, Runner, trace
from agents.mcp import MCPServer, MCPServerStdio
async def query_git_repo(mcp_server: MCPServer, directory_path: str, query: str):
agent = Agent(
name="Assistant",
instructions=f"Answer questions about the localgit repository at {
directory_path}, use that for repo_path",
mcp_servers=[mcp_server],
)
with st.spinner(f"Running query: {
query}"):
result = await Runner.run(starting_agent=agent, input=query)
return result.final_output
async def run_streamlit_app():
st.title("Local Git Repo Explorer")
st.write("This app allows you to query information about a local git repository.")
directory_path = st.text_input("Enter the path to the git repository:")
if directory_path:
# Common queries as buttons
col1, col2 = st.columns(2)
with col1:
if st.button("Most frequent contributor"):
query = "Who's the most frequent contributor?"
run_query(directory_path, query)
with col2