本页面介绍 Go SDK 中 MCP 服务器的配置选项和初始化过程。它解释了如何通过各种配置选项和功能来创建、配置和自定义服务器行为。
有关服务器会话管理的信息,请参阅会话管理。有关钩子和中间件的详细信息,请参阅钩子和中间件。
MCP 服务器是使用 NewMCPServer 函数创建的,该函数接受名称、版本和可变参数列表的配置选项
MCPServer 结构体包含所有服务器状态,包括资源、提示、工具、功能和会话管理。服务器为不同的资源类型使用单独的互斥锁以实现并发访问。
服务器创建流程
配置通过 ServerOption 函数模式进行处理。每个选项都是在初始化期间修改服务器的函数
| 选项 | 目的 | 参数 |
|---|---|---|
WithResourceCapabilities | 配置资源订阅和更改通知 | subscribe bool, listChanged bool |
WithPromptCapabilities | 配置提示更改通知 | listChanged bool |
WithToolCapabilities | 配置工具更改通知 | listChanged bool |
WithLogging | 启用服务器日志功能 | 无 |
WithInstructions | 为客户端设置服务器指令 | instructions string |
WithPaginationLimit | 设置列表操作的分页限制 | limit int |
| 选项 | 目的 | 参数 |
|---|---|---|
WithHooks | 添加请求生命周期钩子 | *Hooks |
WithToolHandlerMiddleware | 添加工具处理器中间件 | ToolHandlerMiddleware |
WithToolFilter | 添加工具过滤函数 | ToolFilterFunc |
WithRecovery | 添加 panic 恢复中间件 | 无 |
配置应用模式
来源:server/server.go28-29 server/server.go165-289
服务器功能系统定义了服务器支持哪些功能,并在初始化期间将这些功能告知客户端
这些功能被组织成特定的功能区域
resourceCapabilities: 控制资源订阅和更改通知promptCapabilities: 控制提示更改通知toolCapabilities: 控制工具更改通知logging: 指示日志支持的布尔指针当添加资源、提示或工具时,服务器会自动注册功能
implicitlyRegisterResourceCapabilitiesimplicitlyRegisterPromptCapabilitiesimplicitlyRegisterToolCapabilities这确保了即使没有显式配置,功能也可用。
来源:server/server.go172-194 server/server.go435-469
完整的服务器配置过程遵循此模式
这是服务器配置在实践中的工作方式
这将创建一个具有以下功能的服务器:
来源:server/server.go172-194 examples/everything/main.go64-72
MCPServer 为不同的资源类型使用独立的读写互斥锁,以最大化并发访问
resourcesMu: 保护资源和资源模板promptsMu: 保护提示和提示处理器toolsMu: 保护工具middlewareMu: 保护工具处理器中间件notificationHandlersMu: 保护通知处理器capabilitiesMu: 保护功能配置toolFiltersMu: 保护工具过滤器这种设计允许并发读取不同资源类型,同时在修改期间保持一致性。