MCP 基本概念

背景和价值

以下是对 大模型 MCP 官方协议 的核心解析,综合多篇文档信息整理:


一、协议概述

MCP(Model Context Protocol,模型上下文协议)是 Anthropic 公司于 2024 年 11 月 推出的开放标准协议,旨在为大型语言模型(LLM)提供 标准化的外部资源连接接口。其核心目标包括:

  • 标准化集成:统一 LLM 与工具/数据源的交互方式,避免重复开发适配接口。
  • 动态扩展:支持即插即用,新增工具或数据源时无需修改现有架构。
  • 安全边界:通过本地化数据处理和最小权限原则保护敏感信息。

类比为 AI 领域的“USB-C 接口”,MCP 实现了模型与外部世界的双向实时交互。
应用场景

  • 企业级开发:连接内部数据库/OA 系统,构建智能客服或数据分析工具。
  • 个人效率工具:通过 MCP 调用 GitHub、Slack 等服务,实现自然语言指令操作。
  • 动态知识增强:实时获取天气、股票等外部数据,解决模型信息孤岛问题。

二、核心架构

MCP 采用 客户端-服务器(C/S)架构,包含三大组件:

  1. MCP 主机(Host)
    • 发起请求的 LLM 应用(如 Claude Desktop、IDE 等)。
    • 负责管理客户端实例、权限控制和上下文聚合。
  2. MCP 客户端(Client)
    • 与服务器建立 1:1 连接,处理协议消息和状态管理。
    • 支持能力协商(如声明支持的协议版本和功能)。
  3. MCP 服务器(Server)
    • 轻量级服务程序,通过标准协议暴露三类能力:
      • 工具(Tools):执行外部操作(如 Git 命令、API 调用)。
      • 资源(Resources):提供数据访问(如文件、数据库)。
      • 提示词(Prompts):预定义任务模板(如医疗诊断模板)。

三、通信机制

1. 协议规范

  • 基础协议:基于 JSON-RPC 2.0,支持有状态会话。
  • 消息类型
    • Requests:双向请求(需响应),如 tools/list(获取工具列表)。
    • Responses:对应请求的响应(成功或错误)。
    • Notifications:单向通知(无需回复),如资源更新推送。

2. 传输层

  • stdio(标准输入输出)
    • 适用于本地进程通信,速度快且无需网络。
    • 局限性:仅支持单进程通信,资源占用高。
  • SSE(Server-Sent Events)
    • 基于 HTTP 的远程通信,支持多客户端连接。
  • Streamable HTTP(2025-03-26 新增)
    • 替代 SSE,简化双通道响应机制,更适合云原生架构。

3. 生命周期管理

  1. 初始化(Initialization)
    • 客户端与服务器协商协议版本和功能支持(如工具列表)。
  2. 操作阶段(Operation)
    • 动态交互(如调用工具、读取资源)。
  3. 关闭(Shutdown)
    • 优雅终止连接并释放资源。

四、安全设计

MCP 通过以下机制保障安全性:

  1. 数据不出域
    • 敏感操作在本地服务器完成,避免数据上传至云端。
  2. 最小权限原则
    • 服务器自主控制资源访问范围(如限制文件读写路径)。
  3. 会话隔离
    • 每个客户端独立会话,防止跨服务数据泄露。


六、开发规范

  1. 服务端实现
    • 使用 Node.js/Python 开发轻量级服务器,通过注解声明工具和资源。
    • 示例代码见网页5的 server_demo.py(支持 stdio 和 SSE 协议)。
  2. 客户端集成
    • 遵循 JSON-RPC 2.0 规范,处理请求/响应和错误重试。

运行模式

STUDIO

本地模式。
@modelcontextprotocol/server-github 是一个基于 Node.js 开发的工具包,其功能可能涉及 ​GitHub 自动化操作。您可以通过以下方式进一步验证:

查询 npm 仓库​:
运行 npm view @modelcontextprotocol/server-github,若返回包信息则确认为公开的 Node.js 包。

如下命令,
$jons = '{xx}' 定义mcpserver的运行的相关参数
echo $json | npx -y @modelcontextprotocol/server-github 把参数以管道形式传给mcpserver, nodejs形式运行mcp server

@modelcontextprotocol/server-github 是 Node.js 包,该包可能来自 ​npm 公共仓库​ 或 ​项目本地依赖

npx 与 npm 的区别:

命令 用途 是否需要全局安装
npm install -g <包> 全局安装包
npm run <本地命令> 运行本地项目中的脚本 否(需本地安装)
npx <包> 直接运行包(优先本地,若无则临时下载)

SSE

SSE模式就是通过网络远程连接MCP server,服务运行在提供Server的厂家服务器上,以各类URL+key的形式提供给用户(这样强能力的Server就能远程收费了,比如xx德MCP-server)

参考资料

posted @ 2025-05-17 22:59  向着朝阳  阅读(160)  评论(0)    收藏  举报