MCP 是什么?

Model Context Protocol (MCP) 是 Anthropic 于 2024 年底推出的开放协议,旨在标准化 LLM 与外部工具/数据源的连接方式。

用一句话概括:MCP 之于 AI Agent,相当于 USB-C 之于电子设备

在 MCP 之前:

  • OpenAI 有 Function Calling
  • Anthropic 有 Tool Use API
  • Google 有 Function Calling(格式不同)
  • 每个框架(LangChain、AutoGen)有自己的工具定义格式

开发者要为不同平台重复开发工具 → N 个 LLM × M 个工具 = N×M 种集成

MCP 之后:

  • 工具开发者只需实现一次 MCP Server
  • LLM 只需支持 MCP Client
  • N + M 种集成,而非 N × M。

协议架构

整体设计

┌─────────────────┐         ┌─────────────────┐
│   MCP Client    │         │   MCP Server    │
│  (LLM Agent)    │ ←─────→ │  (工具提供方)    │
│                 │  JSON   │                 │
│  ┌───────────┐  │  -RPC   │  ┌───────────┐  │
│  │ Tool Call │──│─────────│──│ Tool Exec │  │
│  └───────────┘  │         │  └───────────┘  │
│  ┌───────────┐  │         │  ┌───────────┐  │
│  │ Resource  │──│─────────│──│ Data Read │  │
│  └───────────┘  │         │  └───────────┘  │
│  ┌───────────┐  │         │  ┌───────────┐  │
│  │ Prompt    │──│─────────│──│ Templates │  │
│  └───────────┘  │         │  └───────────┘  │
└─────────────────┘         └─────────────────┘

三大核心原语

原语方向用途
ToolsClient → Server执行操作(搜索、计算、写文件)
ResourcesClient → Server读取数据(文件内容、数据库记录)
PromptsServer → Client提供提示模板

传输层

MCP 支持多种传输方式:

  1. stdio:本地进程间通信(最常用)
  2. HTTP + SSE:远程通信
  3. WebSocket:双向实时通信

实现 MCP Server

from mcp import Server, Tool
from mcp.types import TextContent

server = Server("guijiagi-tools")

@server.tool()
def search_agi_papers(query: str, limit: int = 10) -> list[TextContent]:
    """
    搜索 AGI 相关论文
    
    Args:
        query: 搜索关键词
        limit: 返回结果数量上限
    """
    results = paper_api.search(query, limit=limit)
    return [TextContent(type="text", text=format_results(results))]

@server.tool()
def analyze_code(code: str, language: str = "python") -> list[TextContent]:
    """
    分析代码质量和安全性
    
    Args:
        code: 待分析的代码
        language: 编程语言
    """
    issues = linter.check(code, language=language)
    report = format_report(issues)
    return [TextContent(type="text", text=report)]

@server.resource("file:///{path}")
def read_resource(path: str) -> str:
    """读取本地文件资源"""
    return open(path).read()

if __name__ == "__main__":
    server.run(transport="stdio")

MCP Client 集成

from mcp import Client

# 连接 MCP Server
client = Client()
client.connect("stdio", command=["python", "my_server.py"])

# 发现可用工具
tools = await client.list_tools()
# tools = [
#   {name: "search_agi_papers", description: "搜索 AGI 相关论文", ...},
#   {name: "analyze_code", description: "分析代码质量和安全性", ...}
# ]

# 调用工具
result = await client.call_tool("search_agi_papers", {
    "query": "multi-agent collaboration",
    "limit": 5
})

# 将结果注入 LLM 上下文
llm_response = llm.generate(
    f"根据以下搜索结果回答问题:\n{result}\n\n问题: ..."
)

MCP 生态现状(2026)

类别代表 Server说明
文件系统mcp-server-filesystem读写本地文件
搜索mcp-server-brave-searchBrave 搜索引擎
数据库mcp-server-postgresPostgreSQL 查询
代码执行mcp-server-pythonPython 沙箱执行
Gitmcp-server-gitGit 操作
浏览器mcp-server-puppeteer浏览器自动化
知识库mcp-server-obsidianObsidian 笔记
通讯mcp-server-slackSlack 消息

与 Function Calling 的对比

# === Function Calling(OpenAI 风格)===
# 工具定义和调用耦合在 LLM API 中
response = openai.chat.completions.create(
    model="gpt-4",
    tools=[{
        "type": "function",
        "function": {
            "name": "search",
            "parameters": {"type": "object", "properties": {...}}
        }
    }]
)
# 问题: 换成 Claude 就要改格式

# === MCP ===
# 工具定义独立于 LLM
server = Server("my-tools")
@server.tool()
def search(query: str): ...

# 任何支持 MCP 的 LLM 都能用这个工具
# GPT、Claude、Gemini... 统一接口

安全性设计

MCP 内置了多层安全机制:

  1. 工具沙箱:Server 可以限制工具的执行权限
  2. 资源白名单:Resource 访问通过 URI 模式限制
  3. 传输加密:HTTP 传输支持 TLS
  4. 审计日志:所有工具调用可被记录

结语

MCP 正在成为 AI 工具生态的统一标准。就像 HTTP 统一了 Web 通信、SQL 统一了数据库查询,MCP 将统一 AI Agent 的工具调用。

在硅基 AGI 的愿景中,标准化是智能体生态繁荣的基础。当工具开发变得简单且可复用时,每一个开发者都能为 AGI 贡献力量。


关注 硅基 AGI · guijiagi.com,深入理解 Agent 技术的每一个细节。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。