菜单

MCP 客户端

相关源文件

MCP 客户端是 Model Control Protocol (MCP) 客户端接口的 Go 语言实现。它提供了一种结构化的方式来连接和与 MCP 服务器交互,允许应用程序访问资源、执行工具以及利用服务器管理的提示。本页面涵盖了客户端架构、初始化过程和主要功能。

有关服务器实现的信息,请参阅MCP 服务器

架构

MCP 客户端遵循分层架构,通过transport.Interface抽象了传输机制。核心Client结构体处理协议级操作,同时将通信委托给可插拔的传输实现。

MCP 客户端架构

客户端架构包括

  1. 客户端核心:主要的Client结构体,实现所有 MCP 协议操作
  2. 传输抽象层:实现不同通信机制的transport.Interface
  3. 传输实现:SSE 和 Stdio 通信的具体实现
  4. 工厂函数:创建预配置客户端的便利函数

来源:client/client.go15-25 client/sse.go23-33 client/stdio.go11-30

关键组件

  1. MCPClient 接口:定义了所有客户端实现的契约,指定了初始化连接、管理资源、执行工具和处理提示的方法。

  2. 客户端实现:MCPClient 接口的具体实现,负责管理

    • 与服务器的连接状态
    • 请求/响应处理
    • 通知处理
    • 列表操作的分页
  3. 传输层:抽象了客户端和服务器之间的通信细节,支持不同的传输机制,如 Server-Sent Events (SSE) 和 stdio。

客户端初始化流程

设置 MCP 客户端涉及三个主要步骤:创建、启动和协议初始化。

MCP 客户端初始化序列

来源:client/client.go34-156

客户端创建和初始化

客户端提供特定于传输的工厂函数,以便于设置

SSE 客户端创建:

Stdio 客户端创建:

手动客户端创建:

客户端初始化流程:

  1. 启动客户端(stdio 自动启动,其他需手动)

  2. 初始化 MCP 协议:

来源:client/sse.go23-33 client/stdio.go11-30 client/client.go44-54 client/client.go124-172

核心功能

MCP 客户端提供了与服务器资源、提示和工具交互的方法。

资源管理

客户端可以列出、读取和订阅资源

资源管理操作流程

来源:client/client.go163-262

主要资源操作

  • ListResources:获取所有资源,自动处理分页
  • ListResourcesByPage:检索单页资源
  • ReadResource:按 ID 获取特定资源
  • Subscribe:注册以接收资源更改通知
  • Unsubscribe:取消资源更改通知

提示管理

与服务器提示系统交互的方法

  • ListPrompts:获取所有提示,自动处理分页
  • ListPromptsByPage:检索单页提示
  • GetPrompt:按 ID 获取特定提示

来源:client/client.go264-310

工具执行

发现和调用工具的方法

  • ListTools:获取所有工具,自动处理分页
  • ListToolsByPage:检索单页工具
  • CallTool:在服务器上执行特定工具

来源:client/client.go312-358

补全支持

客户端支持向服务器请求补全

  • Complete:请求给定输入的补全

来源:client/client.go368-383

分页处理

MCP 客户端以两种方式处理分页

  1. 自动分页:通过诸如ListResources之类的方法,迭代获取所有页面
  2. 手动分页:通过诸如ListResourcesByPage之类的方法,赋予调用者对分页的控制权

客户端使用通用的listByPage函数来处理不同资源类型之间的通用分页逻辑。

分页处理流程

来源:client/client.go163-400

通知处理

客户端提供了一个线程安全的通知系统,用于处理服务器发起的消​​息

通知处理流程

注册通知处理程序:

线程安全:通知系统使用sync.RWMutex确保对处理程序列表的线程安全访问,允许并发通知处理,同时防止处理程序注册期间出现数据竞争。

来源:client/client.go82-90 client/client.go67-73 client/client.go20-21

传输层

MCP 客户端通过transport.Interface抽象通信,支持具有专门功能的多种传输实现

传输类型

传输工厂函数用例特殊功能
SSENewSSEMCPClient()基于 HTTP 的通信实时通知、自定义请求头、HTTP 客户端配置
StdioNewStdioMCPClient()进程间通信子进程管理、stderr 访问

SSE 传输特性

SSE 传输提供基于 HTTP 的通信及额外功能

SSE 传输配置

特定传输辅助函数:

  • GetEndpoint(client):返回当前的 SSE 端点 URL
  • WithHeaders(headers):设置静态 HTTP 请求头
  • WithHeaderFunc(func):设置动态请求头生成函数
  • WithHTTPClient(client):使用自定义 HTTP 客户端

Stdio 传输特性

Stdio 传输管理子进程通信

Stdio 传输进程管理

特定传输辅助函数:

  • GetStderr(client):返回子进程标准错误(stderr)读取器

来源:client/sse.go11-42 client/stdio.go32-43 client/transport

请求-响应流程

每个与服务器通信的客户端方法都遵循类似的模式

请求-响应处理流程

来源:client/client.go77-106

总结

MCP 客户端提供了 Model Control Protocol 客户端接口的完整实现,提供了一种与 MCP 服务器交互的结构化方式。通过其分层架构和传输抽象,它支持不同的通信机制,同时为应用程序提供一致的 API。

有关在应用程序中使用客户端的更多详细信息,请参阅客户端使用。有关处理服务器通知的信息,请参阅处理通知