模型上下文协议

MCP是一个开源开放标准框架,用于标准化AI系统(特别是大型语言模型)与外部工具、数据源和服务的集成和通信。

  • by HemaKumar0077
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 HemaKumar0077/Model-Context-Protocol-MCP-

使用说明

模型上下文协议(MCP)的最终指南

目录

引言

模型上下文协议(MCP)是一种 开源、开放标准框架 由Anthropic于2024年11月25日推出。它从根本上规范了人工智能(AI)系统,特别是大型语言模型(LLM)如何与外部工具、数据源和服务集成和通信。

🚀 快速采用MCP推出后,包括OpenAI和Google DeepMind在内的主要行业参与者立即采用了它,这表明人们对它的实用性和重要性达成了广泛共识。

什么是MCP?

“USB-C for AI”类比

MCP经常被描述为 “用于AI的USB-C端口” -提供一种通用的、标准化的数字通信协议,该协议能够:

  • ✅ 任何符合MCP的AI应用程序(主机),可与任何符合MCP标准的工具或数据源(服务器)连接
  • ✅ 消除了每个配对的自定义一次性集成代码
  • ✅ 创建一个开放、可互操作的生态系统
  • ✅ 防止专有的围墙花园解决方案

核心目的

解决“一体化瓶颈”

MCP解决了人工智能项目因将LLM连接到以下方面的复杂性而失败的关键挑战:

  • 🗄️ 孤立数据库
  • 🔧 遗留系统
  • 🏢 专有企业平台
  • 📁 本地文件系统

通用接口功能

graph TD
    A[AI System] --> B[MCP Protocol]
    B --> C[Reading Files]
    B --> D[Executing Functions]
    B --> E[Handling Contextual Prompts]
    B --> F[Multi-step Tasks]

为什么MCP很重要

解决LLM的关键限制

局限性 传统问题 MCP解决方案
幻觉 LLM生成看似合理但不正确的信息 直接访问权威数据源
知识切断 培训数据收集时信息冻结 实时访问实时系统和当前数据

解锁代理AI

MCP实现了从 被动反应者 到 积极的“实干家”:

flowchart LR
    A[Traditional LLM<br/>Knowledge Retrieval] --> B[MCP-Enabled Agent<br/>Task Execution]
    B --> C[Agent Economy]

实际应用

行业 用例 示例
软件开发 人工智能辅助编码 游标、源图、Zed、回复
企业自动化 数据分析和工作流程 查询数据库、检查付款、起草消息
私人助理 日程和任务管理 日历集成,笔记组织
创意工作流程 按代码设计 Figma到前端代码生成

技术架构

核心组件

graph TB
    subgraph "MCP Host (AI Application)"
        H[Host Application<br/>e.g., Cursor, Claude Desktop]
        C1[MCP Client 1]
        C2[MCP Client 2]
        C3[MCP Client N]
    end
    
    subgraph "External Services"
        S1[MCP Server 1<br/>e.g., Filesystem]
        S2[MCP Server 2<br/>e.g., Stripe API]
        S3[MCP Server N<br/>e.g., Database]
    end
    
    H --> C1
    H --> C2  
    H --> C3
    C1 -.->|1:1 Connection| S1
    C2 -.->|1:1 Connection| S2
    C3 -.->|1:1 Connection| S3

组件角色

组件 角色 描述
MCP主机 AI应用 面向用户的AI环境(IDE、聊天机器人等)
MCP客户端 连接器 与每台服务器保持1:1连接
MCP服务器 工具/数据提供程序 通过标准化原语公开功能

两层协议栈

数据层(内层)

  • 协议:JSON-RPC 2.0
  • 消息类型:请求、响应、通知
  • 核心图元:
原始 目的 示例
工具 可执行函数 API调用、计算
资源 文件式数据源 文档、数据库架构
提示 可重用模板 引导式工作流

传输层(外层)

运输方式 用例 优势
标准输入/输出(stdio) 本地进程 快速,无网络开销
HTTP与SSE 远程服务器 Web身份验证,实时更新

通信流

sequenceDiagram
    participant User
    participant Host as Host (LLM)
    participant Client as MCP Client
    participant Server as MCP Server

    User->>Host: "What's the status of my latest order?"
    
    Note over Host,Server: Initialization Phase
    Host->>Client: Initialize Connection
    Client->>Server: 1. initialize(capabilities)
    Server-->>Client: 2. initializeResult(capabilities)
    Client->>Server: 3. notifications/initialized
    
    Note over Host,Server: Discovery Phase
    Client->>Server: 4. tools/list
    Server-->>Client: 5. Available tools
    Client->>Host: Provide tools to LLM context
    
    Note over Host,Server: Execution Phase
    Host->>Host: 6. LLM decides on tool
    Host->>Client: 7. Execute tool request
    Client->>Server: 8. tools/call(get_latest_order)
    Server-->>Client: 9. Tool result
    Client->>Host: 10. Return result
    
    Host->>Host: 11. Synthesize response
    Host-->>User: "Your latest order has been shipped."

入门指南

构建MCP服务器

先决条件

  • Node.js环境
  • JSON-RPC的基本理解

快速入门示例

import { McpServer, StdioServerTransport } from '@modelcontextprotocol/sdk';
import { z } from 'zod';

// 1. Create server instance
const server = new McpServer({
  name: 'weather-server',
  version: '1.0.0',
});

// 2. Define a tool
server.tool(
  'get_weather',
  'Gets current weather for a city',
  z.object({
    city: z.string().describe('City name'),
  }),
  async (params) => {
    const weather = `Weather in ${params.city}: Sunny, 72°F`;
    return {
      content: [{ type: 'text', text: weather }],
    };
  }
);

// 3. Start server
async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.error('Weather MCP server started.');
}

main();

客户端集成

配置文件(mcp.json)

{
  "mcpServers": {
    "local-weather": {
      "command": "node",
      "args": ["/path/to/weather-server.js"]
    },
    "stripe-api": {
      "url": "https://mcp.stripe.com",
      "auth": {
        "type": "bearer",
        "token": "your-api-key"
      }
    }
  }
}

开发工具

MCP检查员 -基本测试工具:

npx @modelcontextprotocol/inspector node server.js

MCP生态系统

官方SDK

语言 存储库 维护者
TypeScript modelcontextprotocol/typescript-sdk 人类学
python modelcontextprotocol/python-sdk 人类学
C modelcontextprotocol/csharp-sdk 微软
去吧 modelcontextprotocol/go-sdk 谷歌
Java modelcontextprotocol/java-sdk 社区
Kotlin modelcontextprotocol/kotlin-sdk JetBrains
红宝石 modelcontextprotocol/ruby-sdk Shopify

主要采用者

mindmap
  root((MCP Ecosystem))
    AI Providers
      Anthropic
      OpenAI
      Google DeepMind
    Cloud Platforms
      Microsoft Azure
      Google Cloud
      Cloudflare
    Developer Tools
      Cursor
      VS Code
      Sourcegraph
      Replit
    SaaS Platforms
      Stripe
      Figma
      Slack
      Google Drive

客户端功能支持矩阵

客户 资源 提示 工具 根 启发
光标 ✅ ✅ ✅ ✅ ✅
克劳德代码 ✅ ✅ ✅ ✅ ❓
克劳德桌面 ✅ ✅ ✅ ❌ ❓
VS代码(副本) ❌ ❌ ✅ ❌ ❌
ChatGPT❌ ❌ ✅ ❌ ❓

传说:✅ 支持|❌ 不支持|❓ 未知/部分

安全考虑

代理供应链安全

主要威胁

威胁类型 描述 缓解
快速注射 恶意服务器利用会话上下文 输入验证、输出净化
权限升级 将良性工具与恶意结果相结合 最小特权原则
假冒工具 模仿可信服务器的相似服务器 服务器验证、可信注册表

安全最佳实践

graph TB
    A[Security Best Practices] --> B[Server Developers]
    A --> C[Client Developers]
    A --> D[Enterprise Adopters]
    
    B --> B1[Validate Inputs]
    B --> B2[Narrow Permissions]
    B --> B3[Sanitize Outputs]
    
    C --> C1[User Confirmation]
    C --> C2[Sandboxing]
    C --> C3[Access Controls]
    
    D --> D1[VPC Deployment]
    D --> D2[Central Orchestration]
    D --> D3[Audit Trails]

与备选方案的比较

特性 MCP 专有函数调用 LangChain
类型 开放协议 API专有功能 开放框架
哲学 标准化和互操作性 生态系统内的易用性 灵活性和协调性
供应商锁定 低(模型无关) 高(平台特定) 中(生态系统锁定)
生态系统 跨供应商互操作工具 平台特定工具 自定义集成
最适合 面向未来的代理基础架构 快速的单平台开发 复杂的自定义代理逻辑

战略定位

graph LR
    A[HTTP Protocol] --> B[Web Applications]
    C[MCP Protocol] --> D[AI Agent Applications]
    
    style A fill:#e1f5fe
    style C fill:#e8f5e8

资源和社区

官方资源

社区频道

发现资源


贡献

我们欢迎捐款!请查看我们的 贡献指南 有关如何执行以下操作的详细信息:

  • 🐛 报告错误
  • 💡 建议功能
  • 🔧 提交拉取请求
  • 📖 改进文档

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。


MCP:将人工智能与世界连接起来,一次一个标准。 🌐🤖