MCP 协议生态全景分析

作者:Maurice | 灵阙学院

MCP 是什么

Model Context Protocol(MCP)是 Anthropic 于 2024 年底开源的一项标准协议,旨在统一 AI 模型与外部工具、数据源之间的交互接口。

用一句话概括:MCP 之于 AI Agent,正如 HTTP 之于 Web 浏览器——它定义了"AI 如何发现和使用工具"的标准协议。

核心概念

MCP Host(宿主)       MCP Client(客户端)     MCP Server(服务端)
├─ Claude Desktop  ←→  ├─ 内置 MCP 客户端  ←→  ├─ 文件系统 Server
├─ VS Code/Cursor  ←→  ├─ 内置 MCP 客户端  ←→  ├─ 数据库 Server
├─ 自定义 Agent    ←→  └─ SDK 集成         ←→  ├─ API 网关 Server
                                                └─ 自定义 Server
  • Host:运行 AI 模型的应用程序
  • Client:Host 内部与 MCP Server 通信的组件
  • Server:提供工具、资源、提示模板的服务端

三大原语

MCP 定义了三种核心能力:

  1. Tools(工具):可执行的操作,模型决定何时调用

    • 示例:search_webrun_sqlcreate_file
    • 类比:REST API 的 endpoint
  2. Resources(资源):只读数据源,模型可以查询

    • 示例:文件内容、数据库记录、配置信息
    • 类比:GET 请求
  3. Prompts(提示模板):预定义的交互模式

    • 示例:代码审查模板、摘要生成模板
    • 类比:API 的请求模板

为什么 MCP 重要

之前:N x M 适配问题

每个 AI 应用(N 个)要对接每个工具(M 个),需要 N x M 个适配器:

Claude Desktop ──┬── Slack 适配器
                 ├── GitHub 适配器
                 └── Database 适配器

Cursor          ──┬── Slack 适配器(又写一份)
                 ├── GitHub 适配器(又写一份)
                 └── Database 适配器(又写一份)

之后:N + M 标准协议

每个应用实现一个 MCP Client,每个工具实现一个 MCP Server:

Claude Desktop ──┐
Cursor          ──┤──── MCP 协议 ────┬── Slack Server
自定义 Agent    ──┘                  ├── GitHub Server
                                     └── Database Server

适配工作从 N x M 降为 N + M。

生态全景

MCP Server 生态

截至 2026 年初,MCP Server 生态已覆盖以下领域:

开发工具类

Server 功能 Stars
GitHub MCP PR/Issue/Code Search
GitLab MCP MR/Pipeline 管理
Linear MCP 项目管理
Sentry MCP 错误监控

数据库类

Server 功能
PostgreSQL MCP SQL 查询、Schema 探索
SQLite MCP 本地数据库操作
Redis MCP 缓存操作
MongoDB MCP 文档数据库
Neo4j MCP 图数据库查询

通信协作类

Server 功能
Slack MCP 消息发送、频道管理
Notion MCP 页面读写
Google Drive MCP 文档操作
Email MCP 邮件收发

浏览器与搜索类

Server 功能
Playwright MCP 浏览器自动化
Puppeteer MCP 网页截图、交互
Brave Search MCP 网络搜索
Tavily MCP AI 优化搜索

专业领域类

Server 功能
Stripe MCP 支付管理
AWS MCP 云服务操作
Kubernetes MCP 容器编排
Terraform MCP 基础设施管理

SDK 与框架支持

语言/框架 库名 状态
TypeScript @modelcontextprotocol/sdk 官方
Python mcp 官方
Rust mcp-rust-sdk 社区
Go mcp-go 社区
Java mcp-java-sdk 社区
C# mcp-dotnet 社区
FastMCP fastmcp 社区(Pythonic 封装)

如何开发 MCP Server

Python 示例(使用 FastMCP)

from fastmcp import FastMCP

mcp = FastMCP("my-tool-server")

@mcp.tool()
def search_knowledge_base(query: str, limit: int = 10) -> str:
    """Search the knowledge base for relevant articles.

    Args:
        query: Search query in natural language
        limit: Maximum number of results to return
    """
    # 实际实现:调用搜索引擎
    results = kb_client.search(query, limit=limit)
    return format_results(results)

@mcp.resource("kb://articles/{article_id}")
def get_article(article_id: str) -> str:
    """Get the full content of a knowledge base article."""
    article = kb_client.get(article_id)
    return article.content

@mcp.prompt()
def compliance_check(document: str) -> str:
    """Generate a compliance check prompt for the given document."""
    return f"""Please review the following document for compliance issues:

{document}

Check against:
1. Data protection regulations
2. Financial reporting standards
3. Tax compliance requirements

Output format: JSON with findings, severity, and recommendations."""

if __name__ == "__main__":
    mcp.run()

TypeScript 示例

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({
  name: "knowledge-base",
  version: "1.0.0",
});

server.tool(
  "search_knowledge_base",
  "Search the knowledge base for relevant articles",
  {
    query: z.string().describe("Search query"),
    limit: z.number().default(10).describe("Max results"),
  },
  async ({ query, limit }) => {
    const results = await kbClient.search(query, limit);
    return {
      content: [{ type: "text", text: JSON.stringify(results) }],
    };
  }
);

const transport = new StdioServerTransport();
await server.connect(transport);

传输协议

MCP 支持两种传输方式:

stdio(标准输入输出)

  • Host 进程 spawn MCP Server 作为子进程
  • 通过 stdin/stdout 交换 JSON-RPC 消息
  • 适合本地工具、CLI 工具

SSE(Server-Sent Events)

  • MCP Server 作为 HTTP 服务运行
  • Client 通过 HTTP POST 发送请求,SSE 接收响应
  • 适合远程服务、共享工具

Streamable HTTP(2025 新增)

  • 基于标准 HTTP 的双向通信
  • 支持流式响应
  • 更适合生产环境部署

安全考量

权限模型

MCP 目前没有内置权限系统,安全责任在 Host 端:

  1. 用户确认:敏感工具调用前需要用户确认
  2. 白名单:Host 可以限制可用的工具列表
  3. 审计日志:记录所有工具调用的完整日志
  4. 沙盒隔离:危险操作在隔离环境中执行

最佳实践

  1. 最小权限:每个 MCP Server 只暴露必要的工具
  2. 输入验证:Server 端严格验证所有参数
  3. 速率限制:防止 Agent 过度调用
  4. 敏感数据处理:返回结果中脱敏
  5. 凭证隔离:API Key 存储在 Server 端,Agent 看不到

企业落地路径

Phase 1:接入现有工具

将企业已有的内部系统包装为 MCP Server:

  • 内部知识库 → Knowledge Base MCP
  • 工单系统 → Ticket MCP
  • 监控平台 → Monitoring MCP
  • 数据仓库 → Analytics MCP

Phase 2:构建 Agent 工作流

基于 MCP 工具组合,构建自动化工作流:

[用户需求] → Agent 规划 → [MCP: 查知识库] → [MCP: 查工单]
  → Agent 分析 → [MCP: 写报告] → [MCP: 发通知] → 完成

Phase 3:治理与优化

  • 建立 MCP Server 注册中心(统一管理所有可用工具)
  • 监控工具调用指标(成功率、延迟、成本)
  • 优化工具描述(提升 Agent 调用准确率)
  • 建立工具版本管理和灰度发布机制

与竞品协议的对比

维度 MCP OpenAI Function Calling LangChain Tools
定位 通用协议标准 OpenAI 专属 框架内工具
跨模型 部分
独立运行 是(独立进程) 否(嵌入) 否(嵌入)
资源发现 原生支持 不支持 不支持
传输协议 stdio/SSE/HTTP HTTP 内存调用
生态规模 5000+ Server N/A 200+ Tool

MCP 的独特优势在于协议的独立性——它不绑定任何模型或框架,任何 AI 应用都可以接入。

开源资源

  • modelcontextprotocol/servers:官方 MCP Server 实现合集
  • modelcontextprotocol/sdk:官方 TypeScript/Python SDK
  • jlowin/fastmcp:Pythonic 的 MCP 开发框架
  • microsoft/mcp-for-beginners:MCP 入门教程(多语言)
  • punkpeye/awesome-mcp-servers:社区 MCP Server 精选列表

Maurice | maurice_wen@proton.me