USB-C出现之前,每个设备都有自己的充电线和数据线,出门要带一堆线。USB-C统一了接口,一根线走天下。MCP(Model Context Protocol)想做的事情类似——在AI模型和外部工具/数据源之间定义一个统一的接口标准;

这个协议的意义可能比很多人想象的大。它不只是让AI"调用工具"那么简单,而是在重新定义AI应用的集成方式;

为什么需要MCP

在MCP出现之前,每个AI应用对接外部工具的方式都是私有的。Claude有自己的工具调用格式,GPT有Function Calling,开源模型各有各的做法。一个天气查询工具,要分别适配三个平台的接口——重复工作量巨大;

从工具开发者的角度:写一个工具要适配N个平台,维护成本高到离谱。从AI应用开发者的角度:集成M个工具要写M套代码,每个工具的接口都不一样。MCP要解决的就是这个问题——定义一个标准协议,工具开发者写一次,所有AI应用都能用。

MCP的核心架构

MCP采用客户端-服务器架构,包含三个角色:

MCP Host是运行AI模型的应用,比如Claude Desktop、IDE插件、自研的AI应用。MCP Client内嵌在Host中,负责和Server通信。MCP Server是提供工具和数据的服务端,每个Server专注一组相关能力;

一个MCP Server可以暴露三类能力:

Tools是AI可以调用的函数,类似API接口。AI模型通过描述了解每个Tool的功能和参数格式,自主决定调用哪个。Resources是AI可以读取的数据源,类似文件或数据库记录。和Tool不同,Resource是被动的数据暴露,不是主动的函数执行。Prompts是预定义的提示模板,帮助用户更好地使用Server的能力;

一个简单的MCP Server

用Python SDK创建一个查询天气的MCP Server:

from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp.types import Tool, TextContent
import json

server = Server("weather-server")

@server.list_tools()
async def handle_list_tools():
    return [
        Tool(
            name="get_weather",
            description="获取指定城市的天气信息",
            inputSchema={
                "type": "object",
                "properties": {
                    "city": {"type": "string", "description": "城市名称"},
                    "days": {"type": "integer", "description": "预报天数", "default": 3}
                },
                "required": ["city"]
            }
        )
    ]

@server.call_tool()
async def handle_call_tool(name: str, arguments: dict):
    if name == "get_weather":
        city = arguments.get("city", "北京")
        days = arguments.get("days", 3)
        # 实际项目中这里调用天气API
        data = {"city": city, "forecast": [
            {"day": f"第{i+1}天", "temp": "22-28°C", "weather": "晴"}
            for i in range(days)
        ]}
        return [TextContent(type="text", text=json.dumps(data, ensure_ascii=False))]

和Function Calling的区别

OpenAI的Function Calling是平台绑定的——只在OpenAI的模型上能用。MCP是协议标准——任何模型、任何平台都能实现。类比的话,Function Calling是苹果的Lightning接口,MCP是USB-C;

另一个关键区别是MCP定义了完整的工具发现机制(list_tools)。AI应用启动时自动发现Server提供了哪些工具,不需要预先硬编码工具列表。

生态现状

Claude Desktop已经原生支持MCP,配置文件里加一行就能接入新的Server。社区也涌现了大量的MCP Server:数据库查询、文件系统操作、GitHub集成、Slack消息、日历管理……基本上你能想到的工具都有人写了Server;

开源模型的支持在快速追赶。通过LangChain或自定义的MCP Client,Ollama、vLLM等开源推理框架也能使用MCP Server。

写在最后

MCP的价值在于"标准化"。当工具开发者只需写一次Server,当AI应用只需实现一个Client就能接入所有工具,整个生态的效率会指数级提升。这和USB-C统一充电接口是同一个道理——标准化带来的便利性远超任何单一平台的优势。