MCP是Anthropic于2024年11月开源的AI与外部世界连接的统一标准,底层使用JSON-RPC2.0协议,官方传输标准为stdio, Streamable HTTP,SSE已废弃,核心作用是通过标准化中间层解决AI应用与外部工具/数据源之间的M x N集成问题,实现即插即用。

核心定义与角色

MCP 常被称为“AI 的 USB-C 接口”。它解决的核心痛点是:传统模式下 m 个模型 × n 个工具需要 m×n 次定制开发,引入 MCP 后只需 m+n 次实现即可全互联。

在 AI 系统中,MCP 承担以下角色:

  • 标准化连接层:统一 LLM 与外部工具/数据源的交互接口,各厂商只需实现一次 Client 或 Server 即可互通
  • 能力扩展桥梁:让模型从“只会回答”升级为“能执行操作”(读文件、查数据库、调 API)
  • 安全隔离层:所有敏感操作在 Server 端执行,凭证不暴露给模型侧
  • 智能体基础设施:是 AI Agent 串联多个工具完成复杂任务的基础设施,但它不是智能体框架本身,而是智能体访问工具的标准化整合层

核心架构

MCP采用Host-Client-Server三层架构:

  • Host主机,运行LLM的应用环境
  • Client客户端,内嵌于Host中的通信中间件,将模型指令转为Json-RPC2.0标准请求,与Server通信
  • Server服务器,外部能力的提供者,封装并暴露三类核心原语Primitives
    • Resources资源,只读数据
    • Tools工具,可执行函数
    • Prompts提示模板,可复用的工作流模板

底层协议

MCP底层使用JSON-RPC2.0作为消息格式标准

JSON-RPC2.0是一种轻量级、语言无关的远程过程调用协议,使用JSON作为数据格式,不是传输协议,而是应用层的消息格式标准,传输层可以灵活替换。

消息类型:MCP中所有通信都遵循JSON-RPC2.0的三种消息类型,

  • 请求Request,客户端发起,要求服务器执行操作,包含唯一id
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": { "name": "getWeather", "arguments": { "city": "杭州" } }
}
  • 响应Response,服务器对请求的回复,包含result 或 error
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": { "content": [{ "type": "text", "text": "杭州今天晴,28°C" }] }
}
  • 通知Notification,单向详细,无需回复,不包含id
{
  "jsonrpc": "2.0",
  "method": "notifications/resources/updated",
  "params": { "uri": "file:///data/report.txt" }
}

初始化握手:连接建立后必须先完成能力协商,Client发送initialize请求声明自身能力,Server返回其支持的capabilities,双方协商完成后才能调用list_tools(), call_tool()等方法

传输模式详解

MCP协议定义了三种标准传输机制:

1、stdio模式(标准输入 / 输出)

  • 原理:Client以子进程形式启动Server,通过操作系统的stdin / stdout管道交换JSON-RPC消息,不走网络
  • 通信流程:Client启动Server子进程 -> Client往Server的stdin写入消息 -> Server处理后往stdout写入响应 ->Client从stdout读取结果 ->结束关闭stdin终止进程
  • 特点:消息以换行符 \n分隔,UTF-8编码,Server可通过stderr输出日志
  • 适用场景:本地开发、CLI工具、单机部署、CI/CD管道
  • 优势:零网络延迟,实现简单,安全性高
  • 局限:只能单进程通信,无法多客户端并发

2、Streamable HTTP模式(远程推荐)

  • 原理:基于HTTP协议,通过单一端点,例如/mcp实现双向通信,支持流式传输,用于替代SSE
  • 适用场景:远程服务调用,云端部署,多客户端并发访问,浏览器环境
  • 优势:支持跨网络通信,多客户端共享,天然兼容Web基础设施(负载均衡,CDN等)

3、SSE模式(已废弃)

  • 原理:基于HTTP + SSE,Client通过HTTP Post发请求,Server通过SSE单向推送响应
  • 推荐使用Streamable HTTP替代

模式对比:

特性 stdio Streamable HTTP SSE
通信方式 进程管道,stdin, stdout HTTP双向 HTTP POST + SSE推送
网络依赖 需要 需要
多客户端 不支持 支持 支持
适用场景 本地/ CLI 远程 / 云端 远程(已废弃)

示例

http模式

例如Kubernetes MCP Server的HTTP模式配置示例,认证方式使用Bearer Token

{
  "mcpServers": {
    "kubernetes": {
      "enabled": true,
      "type": "http",
      "url": "http://xxxx/mcp",
      "headers": {
        "Authorization": "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjFhMmIzYzRkNWU2Zjc4OTAxMjM0NTY3ODkwYWJjZGVmIn0.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0In0.signature",
        "X-Cluster-Name": "prod-cluster-01"
      },
      "description": "Kubernetes MCP server for cluster management operations"
    }
  }
}
  • type, "http"表示Streamable HTTP传输模式
  • url,是远程地址

或者HTTP模式 + API key,

{
  "mcpServers": {
    "weather-api": {
      "enabled": true,
      "type": "http",
      "url": "https://api.example.com/mcp",
      "headers": {
        "X-API-Key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "Content-Type": "application/json"
      },
      "description": "Weather API MCP server for weather query operations"
    }
  }
}

stdio模式

例如Postgresql数据库MCP Server的配置示例,使用sdtio传输模式
配置:

{
  "mcpServers": {
    "postgres": {
      "enabled": true,
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://readonly_user:your_password@xxxxx/test_db"
      ],
      "description": "PostgreSQL MCP server for database query operations"
    }
  }
}
  • enabled表示是否启用
  • command表示启动Server子进程的命令,用到npx
  • args表示命令参数,-y自动确认安装
  • description,描述信息

总结:

  • HTTP模式,用type: “http” + url连接远程服务,适合团队共享,云端部署
  • stdio模式,用command + args启动本地子进程,适合本地开发,轻量工具
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐