随着 AI Agent 技术的蓬勃发展,诸如 RAG(Retrieval Augmented Generation)、通用的“tool calling”以及炙手可热的 Model Context Protocol (MCP) 等新概念层出不穷,深刻影响着软件开发和大模型 (LLM) 的应用流程。MCP 的迅速走红,让一些人感到困惑,另一些人则将其视为又一个值得关注的热点。本文将深入浅出地剖析 MCP,揭示其背后的本质,并指导你快速搭建一个自己的 MCP Server。
MCP:大模型交互的标准化桥梁
Model Context Protocol (MCP),由 Anthropic(Claude 大模型背后的公司)提出,旨在为 LLM 应用中的 “tool calling” 过程带来标准化。简单来说,MCP 充当了 AI Agent 与外部系统之间的桥梁,使得大模型能够安全、高效地调用各种工具和服务,从而拓展其应用边界。
Anthropic 发布的官方文章对其进行了详细阐述:
Introducing the Model Context Protocol
MCP 的核心价值在于简化和统一了 LLM 与外部世界的交互方式。 在没有 MCP 之前,各种框架和工具包(如 LangChain、LlamaIndex、Agno 等)都拥有各自独立的工具集成方法。 以使用 DuckDuckGo 进行搜索为例,每个框架都需要自行实现一个 DuckDuckGo Tool 类或函数,与其框架的内部机制相兼容。 这导致了大量的重复工作和碎片化的生态系统。
MCP 的出现旨在改变这种现状。它提出了一种统一的接口规范,允许开发者编写一次工具,并在不同的框架和语言中使用。 设想一下, 如果你想让你的 LLM 具备使用 Kubernetes 的能力, 你只需要编写一个 MCP Server, 其中定义了所有相关的函数。 之后,任何支持 MCP Client 的框架都可以通过这个服务器来访问 Kubernetes,从而实现工具的复用和标准化。
如下图所示,MCP Server 将开发者定义的工具、提示词和资源通过 API 暴露给外部。 它会提供一个 JSON 格式的工具列表, 包含每个工具的参数, 从而允许客户端向其发起请求。 除此之外, MCP Server 还可以提供取消、ping 和进度等辅助功能,以增强交互的稳定性和可控性。
总而言之, MCP Server 的本质与编写 Rest API 并无太大差别, 只不过它遵循了 MCP 的标准规范, 以确保与 AI Agent 能够无缝衔接。
Transport:多样化的通讯方式
在计算机通信领域,”transport” (传输) 指的是数据如何在两个系统之间传递。 在 MCP Server 开发中, 同样存在 transport 的概念。 由于我们通常通过网络暴露 Web 服务, 因此对 HTTP 协议非常熟悉。
MCP 也支持多种 transport 方式, 其中包括 HTTP 和 stdio。 使用 stdio transport 允许我们在本地环境中与 MCP Server 进行交互, 特别是在开发和调试阶段。 可以将 stdio transport 想象成通过 Unix socket 进行通信, 方便快捷。
当使用 stdio transport 时, MCP Client 会将 MCP Server 作为一个子进程启动。 客户端和服务器通过标准输入/输出流 (stdin/stdout) 进行通信。
更多关于 MCP 中 transport 的信息, 可以参考官方文档:
Transports – Model Context Protocol
MCP 使用 JSON-RPC 对消息进行编码, 且消息必须使用 UTF-8 编码。 当前协议定义了两种 transport 方式: HTTP 和 stdio。
快速构建你的 MCP Server
接下来, 我们将使用 FastMCP 库快速构建并测试一个简单的 MCP Server。 FastMCP 是一个 Python 库, 旨在简化 MCP Server 和客户端的开发。
你可以通过以下链接了解更多关于 FastMCP 的信息:
GitHub — jlowin/fastmcp: 🚀 The fast, Pythonic way to build MCP servers and clients
使用 FastMCP, 我们可以用不到 10 行代码写出我们的第一个 MCP Server:
from fastmcp import create_app, Tool
tools = [
Tool(
name="example_tool",
description="An example tool that returns a static response.",
input_schema={"type": "object", "properties": {}},
output_schema={"type": "object", "properties": {"result": {"type": "string"}}},
function=lambda: {"result": "Hello from MCP Server!"},
)
]
app = create_app(tools=tools)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
上面的代码创建了一个 MCP Server, 它包含一个名为 “example_tool” 的工具。 这个工具不接受任何输入参数, 并且总是返回一个静态的响应 “Hello from MCP Server!”。
当然, 实际应用中, 你可以根据自己的需求自定义工具的功能。 例如, 我们可以创建一个工具来执行 Web 搜索, 或者调用其他的 API 来获取数据。 这一切都取决于你的想象力和你想要解决的问题。 比如,你可以使用 requests
库向 serp API 发送请求, 然后将搜索结果返回给 AI Agent。
使用 MCP Inspector 进行测试
编写好 MCP Server 之后, 我们需要对其进行测试, 以确保其能够正常工作。 为了方便测试, Model Context Protocol 团队发布了一个名为 “inspector” 的项目。
你可以通过以下链接了解更多关于 MCP Inspector 的信息:
GitHub – modelcontextprotocol/inspector: Visual testing tool for MCP servers
要使用 MCP Inspector, 你需要先安装 Node.js 和 npm。 然后,你可以使用以下命令启动 MCP Inspector:
npx @modelcontextprotocol/inspector
启动 MCP Inspector 后, 它会在浏览器中打开一个界面。 在这个界面中, 你需要填写 MCP Server 的连接信息 (例如, URL)。 然后,你可以点击 “List Tools” 按钮来查看 MCP Server 提供的所有工具。
如果你看到你开发的工具出现在列表中, 那么说明 MCP Server 已经成功连接。 接下来, 你可以尝试调用工具, 并查看其返回的结果。
正如上文代码定义的 example_tool
, 无需任何参数,调用后将返回预设的 “Hello from MCP Server!” 响应。
将 MCP Server 集成到 AI Agent 中
现在我们已经成功搭建并测试了 MCP Server, 接下来我们将演示如何将其集成到 AI Agent 中。 在本例中, 我们将使用 Cursor 编辑器, 它对 MCP Client 提供了内置的支持。
在 Cursor 的 Settings 界面中, 点击 “Add new global MCP Server” 按钮, 然后输入 MCP Server 的信息 (例如, URL)。
例如,我们可以添加以下配置:
{
"WebSearchMCPServer": {
"url": "http://localhost:8000/mcp"
}
}
添加 MCP Server 后, Cursor 会自动将其启用。 现在, 你可以创建一个新的对话, 并指示 Cursor 使用你提供的工具。
例如, 你可以输入以下指令:
“use search_web tool to search for ‘Model Context Protocol'”
Cursor 会自动调用你添加的 MCP Server, 并将搜索结果显示给你。
需要注意的是, 在上面的例子中, 我们特意指定了使用 “search_web” 工具。 如果没有指定, Cursor 可能会自行执行 Web 搜索。
除了 Cursor 之外, 你还可以使用其他的 AI Agent 框架来集成 MCP Server, 例如 Agno。
以下代码展示了如何使用 Agno 来调用 MCP Server:
from agno import Agent
agent = Agent(
tools=[
{
"type": "mcp",
"name": "my_mcp_server",
"url": "http://localhost:8000/mcp",
}
]
)
response = agent.run("Use my_mcp_server to call example_tool")
print(response)
更多关于 Agno 和 MCP 的信息, 可以参考官方文档:
Model Context Protocol (MCP) – Agno
总结:MCP,开启大模型应用的新篇章
通过本文的介绍, 相信你已经对 Model Context Protocol (MCP) 有了更深入的了解。 MCP 作为一种标准化的工具调用协议, 极大地简化了 AI Agent 与外部系统之间的集成。 通过构建 MCP Server, 你可以轻松地将各种工具和服务暴露给 AI Agent, 从而拓展其应用边界。
尽管起步可能需要一些学习成本, 但 MCP 的价值在于它能够提高工具的复用性, 降低开发成本, 并促进 AI Agent 生态系统的发展。 随着越来越多的框架和工具开始支持 MCP, 我们相信 MCP 将会在大模型时代扮演越来越重要的角色。 希望本文能够帮助你快速入门 MCP, 并开启你的 AI Agent 应用开发之旅。