J'Blog

2 课 · 概念

语义检索

基于 Chroma 向量库,与 Workspace 知识库分离。用自然语言描述你想查的内容。 非管理员每人每天可检索 5 次(消耗站点 AI 配额)。

MCP架构

原文:架构总览

一句话

MCP是一种基于JSON-RPC 2.0的协议,通过Host-Client-Server三层架构连接AI应用与外部工具,提供工具、资源和提示三种核心原语实现上下文交换。

什么时候翻这页

当你需要理解MCP的整体架构、实现原理或开发MCP客户端/服务器时;当你想了解MCP如何与Claude Code等AI应用集成时;当你需要解决MCP连接或通信问题时。

核心概念

参与者

  • MCP Host: AI应用程序(如Claude Code、Claude Desktop),协调和管理一个或多个MCP客户端
  • MCP Client: 维护与MCP服务器连接的组件,从服务器获取上下文供Host使用
  • MCP Server: 提供上下文数据的程序,可本地或远程运行

层次结构

  • 数据层: 基于JSON-RPC 2.0的协议层,定义客户端-服务器通信的消息结构和语义
    • 生命周期管理:连接初始化、能力协商、连接终止
    • 服务器特性:工具、资源、提示
    • 客户端特性:采样、征询、日志
    • 实用特性:通知、任务
  • 传输层: 定义通信机制和通道,处理连接建立、消息帧和授权
    • Stdio传输:本地进程间通信,无网络开销
    • Streamable HTTP传输:支持远程服务器和标准HTTP认证

核心原语

  • Tools: AI应用可调用的可执行函数(如文件操作、API调用)
  • Resources: 为AI应用提供上下文数据源(如文件内容、数据库记录)
  • Prompts: 可重用的交互模板(如系统提示、少样本示例)

怎么做

实现MCP服务器

  1. 选择传输协议(STDIO或HTTP)
  2. 实现数据层协议(JSON-RPC 2.0)
  3. 定义并实现核心原语(tools、resources、prompts)
  4. 处理生命周期管理(初始化、能力协商、终止)

实现MCP客户端

  1. 建立与MCP服务器的连接
  2. 处理初始化握手和能力协商
  3. 发现和使用服务器提供的原语
  4. 处理服务器发送的通知

集成到AI应用

  1. 在AI应用中实现MCP Host功能
  2. 管理多个MCP客户端连接
  3. 将服务器提供的原语暴露给语言模型
  4. 处理工具调用和结果返回

命令 / 配置速查

初始化请求

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": {
      "elicitation": {}
    },
    "clientInfo": {
      "name": "example-client",
      "version": "1.0.0"
    }
  }
}

工具发现

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/list"
}

工具调用

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "weather_current",
    "arguments": {
      "location": "San Francisco",
      "units": "imperial"
    }
  }
}

通知

{
  "jsonrpc": "2.0",
  "method": "notifications/tools/list_changed"
}

与 Claude Code / Hello-Agents 的联系

在Claude Code中,MCP作为连接外部工具的桥梁,使Claude能够访问文件系统、数据库等外部资源。这与Hello-Agents第10章中讨论的agent工具调用概念相似,但MCP提供了更标准化的协议和更丰富的上下文交换能力。Claude Code中的MCP集成展示了如何将协议层实现与AI应用无缝结合。

初学者易错点

  1. 混淆Host与Client角色: Host是AI应用,Client是Host与Server之间的中介组件,不是直接等同
  2. 忽略传输层选择: 根据使用场景选择合适的传输协议(本地使用STDIO,远程使用HTTP)
  3. 错误处理不完整: MCP是状态协议,必须正确处理生命周期管理和错误情况
  4. 能力声明不一致: 初始化时声明的capabilities必须与实际实现的功能匹配
  5. 忽视通知机制: 通知是MCP实现实时更新的关键,不应忽略其实现

相关词条

官方原文:https://modelcontextprotocol.io/docs/learn/architecture