本文档介绍了如何使用 MCP(模型上下文协议)客户端实现来连接和交互 MCP 服务器。客户端为所有 MCP 协议操作提供了一个高级接口,包括工具执行、资源访问和提示管理。
有关处理服务器发起的通知的信息,请参阅处理通知。有关传输机制的详细信息,请参阅传输机制。
MCP 客户端遵循结构化的生命周期,包含设置、初始化、使用和清理等不同阶段。
来源:client/client.go44-54 client/client.go56-75 client/client.go124-172 examples/simple_client/main.go87-149
使用NewClient函数,并提供传输层和可选的配置来创建客户端。
Client结构维护连接状态、功能和通知处理程序。
| 字段 | 目的 | 类型 |
|---|---|---|
transport | 底层传输层 | transport.Interface |
initialized | 初始化状态 | bool |
notifications | 通知处理程序 | []func(mcp.JSONRPCNotification) |
clientCapabilities | 客户端声明的功能 | mcp.ClientCapabilities |
serverCapabilities | 服务器报告的功能 | mcp.ServerCapabilities |
来源:client/client.go15-25 client/client.go29-34 client/client.go36-54
创建客户端后,必须启动传输连接并完成 MCP 初始化握手。
初始化过程处理功能协商,并发送必需的notifications/initialized消息以完成握手。
来源:client/client.go56-75 client/client.go124-172 examples/simple_client/main.go97-116
客户端通过transport.Interface支持多种传输机制。每种传输类型都有特定的配置要求。
来源:client/client.go11 client/client.go17 examples/simple_client/main.go52-84
适用于命令行服务器进程
适用于基于 HTTP 的服务器
来源:examples/simple_client/main.go52-53 examples/simple_client/main.go78-84
客户端提供所有主要 MCP 协议操作的方法,按功能领域进行组织。
来源:client/client.go92-122 client/client.go174-416
工具代表服务器提供的可执行函数。
客户端为列表操作提供了分页(ListToolsByPage)和自动分页(ListTools)两种版本。
来源:client/client.go328-374 examples/simple_client/main.go119-131
资源代表可被客户端读取的数据源。
来源:client/client.go179-278 examples/simple_client/main.go134-146
提示代表带有参数的可重用消息模板。
客户端提供两种处理分页响应的方法。
使用*ByPage方法进行受控分页。
使用非分页方法,它们会自动获取所有页面。
自动分页实现会内部处理游标管理和上下文取消。
来源: client/client.go191-214 client/client.go339-362 client/client.go401-416
客户端支持注册多个通知处理程序,当服务器发送通知时会调用这些处理程序。
通知处理程序按注册顺序同步执行。传输层会自动将收到的通知路由给所有已注册的处理程序。
来源: client/client.go82-90 client/client.go67-73 examples/simple_client/main.go92-95
客户端提供了几个用于错误处理和调试的实用程序方法。
来源: client/client.go174-177 client/client.go420-434 client/client.go76-80
客户端维护请求状态并自动处理JSON-RPC协议。
来源: client/client.go92-122 client/client.go104-111
客户端自动处理:
这提供了一个干净、类型安全的接口,覆盖了底层的JSON-RPC协议,同时保持了完整的MCP兼容性。