MCP,全称是 Model Context Protocol(模型上下文协议)

简单来说,它是为了解决大模型(LLM)与外部数据、工具之间“鸡同鸭讲”的问题而诞生的一套开放标准协议。你可以把它理解为 AI 时代的“USB 接口规范”。

下面我为你硬核拆解一下 MCP 的核心概念、架构设计以及具体的实现方案。


一、 为什么需要 MCP?(痛点分析)

在 MCP 出现之前,让 AI Agent 连接外部世界(比如你的数据库、GitHub、本地文件系统)是个巨大的痛苦:

  • 碎片化严重: 每个开发者都要为不同的 LLM App 重复编写对接 Slack、PostgreSQL 等工具的胶水代码。
  • 难以维护: 只要外部工具的 API 一变,或者切换了底层的 LLM,所有的集成代码可能都要重写。

MCP 的核心思想是解耦:让大模型应用(Client)与数据/工具源(Server)分离。有了 MCP,你只需要写一次集成,任何支持 MCP 的 AI Client 就都能直接使用。


二、 MCP 的核心架构

MCP 的设计深受现代 Web 开发中 LSP(Language Server Protocol,微软提出的语言服务协议)的启发。它主要由三层架构组成:

[ AI 应用 / Client ] (如 Claude Desktop, Cursor)
       ▲
       │  (MCP 协议: JSON-RPC 2.0)
       ▼
[ MCP 路由器 / Host ] (负责身份验证、生命周期管理)
       ▲
       │
       ▼
[ MCP 服务端 / Server ] (具体的数据源或工具,如 Postgres Server, GitHub Server)

MCP 协议的三大核心能力(Primitives)

MCP 主要通过以下三种资源类型来定义 Client 和 Server 之间的交互:

  1. Resources(资源):
  • 定义: 类似于只读的 URL 数据源。Server 向 Client 暴露数据(如:本地文件内容、数据库表结构、实时日志)。
  • 作用: 让 AI 能够“看见”和读取上下文。
  1. Tools(工具):
  • 定义: 可执行的函数(Function Calling)。Server 暴露给 Client 执行某些操作的能力(如:发送一封邮件、重构一段代码、在数据库执行写入)。
  • 作用: 让 AI 能够“行动”并改变现实世界。
  1. Prompts(提示词模版):
  • 定义: Server 预设的结构化提示词(模版)。
  • 作用: 帮助用户和 Client 更轻松地构建适合特定任务的复杂 Prompt。

三、 MCP 的具体实现方案

如果你要落地一套基于 MCP 的 AI Agent 系统,通常需要实现 MCP Server 并配置 MCP Client。目前官方和社区(主要由 Anthropic 主导推广)提供了成熟的 SDK(支持 Python 和 TypeScript/JavaScript)

以下是实现一个自定义 MCP Server 的技术路线和核心步骤:

1. 通信机制(Transport Layer)

MCP 基于 JSON-RPC 2.0 协议,支持两种主要的传输方式:

  • Stdio(标准输入输出): 最常见的本地实现方式。Client 通过子进程启动 Server,双方通过 stdinstdout 进行高速通信。适合本地开发工具(如 IDE 插件、桌面 AI 应用)。
  • SSE (Server-Sent Events) / HTTP: 适合远程或云端部署。Client 通过 HTTP POST 发送请求,Server 通过 SSE 异步推流返回结果。

2. 代码实现方案(以 Python 示例)

假设我们要构建一个自定义的 MCP 数据库查询 Server,让 AI Agent 可以安全地查询我们本地的数据库。

第一步:安装依赖
pip install mcp

第二步:编写 MCP Server 代码 (db_server.py)

利用 MCP SDK,我们可以快速定义一个提供 Tool 的服务端:

from mcp.server.fastmcp import FastMCP
import sqlite3

# 初始化 FastMCP 服务端
mcp = FastMCP("Secure Database Server")

# 注册一个 MCP Tool
@mcp.tool()
def query_user_status(user_id: int) -> str:
    """根据用户ID查询用户状态(AI可以通过描述认出这个工具)"""
    # 模拟数据库查询
    conn = sqlite3.connect("users.db")
    cursor = conn.cursor()
    cursor.execute("SELECT name, status FROM users WHERE id = ?", (user_id,))
    row = cursor.fetchone()
    conn.close()
    
    if row:
        return f"用户 {row[0]} 的当前状态是: {row[1]}"
    return f"未找到 ID 为 {user_id} 的用户"

if __name__ == "__main__":
    # 以 stdio 模式运行
    mcp.run(transport="stdio")


3. 在 MCP Client 中接入并运行

编写好 Server 后,如何让 AI Agent 识别并使用它?

以目前原生支持 MCP 的 Claude Desktop 为例,你只需要在其配置文件(claude_desktop_config.json)中添加你的 Server:

{
  "mcpServers": {
    "my-db-server": {
      "command": "python",
      "args": ["/path/to/db_server.py"]
    }
  }
}

运行效果:
当你在 Claude Desktop 中输入:“帮我查一下 ID 是 1001 的用户最近怎么样了?”

  1. Claude 识别出语义,触发 MCP 协议的 Tools 调用。
  2. Client 自动调用 db_server.py 中的 query_user_status(1001)
  3. 脚本返回结果,Claude 整合结果并用自然语言回答用户。

四、 MCP 的核心优势与未来演进

在评估或设计 MCP 方案时,有几个深度维度值得注意:

  • 安全边界(Security Sandbox): 传统的 Agent 赋予大模型直接运行代码或访问 API 的权限非常危险。MCP 建立了清晰的代理边界。Server 暴露什么,LLM 才能用什么,且执行逻辑在 Server 端,可控性极高。
  • 生态复用性: 目前社区已经涌现出大量的开源 MCP Server(如 Git、Postgres、Brave Search、Google Drive)。这意味着你开发一个新 Agent 客户端,一瞬间就能拥有连接几十种主流软件的能力。
  • 从“单机”到“分布式”: 现阶段多为本地 stdio 通信,但随着 SSE 方案的普及,未来的 Agent 架构将演变为:企业中央布设各种知识库/工具的 MCP Servers,员工本地的 AI 助手通过安全鉴权远程连接这些 Server。

总结: MCP 正在成为 AI Agent 基础设施建设的标准。掌握 MCP 的实现,能够让你从“写死功能的 AI 应用开发者”跃升为“构建可扩展 AI 生态的架构师”。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐