MCP (Model Context Protocol 模型上下文协议),最初由 Anthropic 推出的一种开放标准,旨在统一大模型与外部数据源和工具之间的通信协议。其目的在于解决当前 AI 大模型因数据孤岛限制而无法充分发挥潜力的难题,MCP 使得 AI 应用能够安全地访问和操作本地及远程数据,为 AI 应用提供连接万物的接口。
Function Calling 是 AI 模型调用函数的机制,而 AI agent 是一个自主运行的智能系统,利用 Function Calling 和 MCP 来分析和执行任务,实现特定目标。
Function Calling 与 MCP 的区别
MCPModel Context Protocol 模型上下文协议。
Function Calling 函数调用。
这两种技术都旨在增强 AI 模型与外部数据的交互能力,但 MCP 不止可以增强 AI 模型,还可以连接其他的应用系统。
类别
MCPModel Context Protocol
Function Calling
性质
协议
功能
范围
通用(多数据源、多功能)
特定场景(单一数据源或功能)
目标
统一接口,实现互操作
扩展模型能力
实现
基于标准协议
依赖于特定模型实现
开发复杂度
低:通过统一协议实现多源兼容
高:需要为每个任务单独开发函数
复用性
高:一次开发,可多场景使用
低:函数通常为特定任务设计
灵活性
高:支持动态适配和扩展
低:功能扩展需要额外开发
常见场景
复杂场景,如跨平台数据访问与整合
简单任务,如天气查询等
核心架构
MCP 遵循客户端-服务器架构,其中包含以下几个核心概念:
MCP 主机(Host):发起请求的 LLM 应用程序。(例如 Claude Desktop、IDE 或 AI 工具)
MCP 客户端(MCP Client):在主机程序内部,与 MCP server 保持 1:1 的连接。
asyncdefconnect_to_server(self, server_script_path: str): """Connect to an MCP server Args: server_script_path: Path to the server script (.py or .js) """ is_python = server_script_path.endswith('.py') is_js = server_script_path.endswith('.js') ifnot (is_python or is_js): raise ValueError("Server script must be a .py or .js file")
# List available tools response = await self.session.list_tools() tools = response.tools print("\nConnected to server with tools:", [tool.name for tool in tools])
asyncdefprocess_query(self, query: str) -> str: """Process a query using Claude and available tools""" messages = [ { "role": "user", "content": query } ]
response = await self.session.list_tools() available_tools = [{ "name": tool.name, "description": tool.description, "input_schema": tool.inputSchema } for tool in response.tools]
# Initial Claude API call response = self.anthropic.messages.create( model="claude-3-5-sonnet-20241022", max_tokens=1000, messages=messages, tools=available_tools )