菜单

服务器配置

相关源文件

本页面介绍 Go SDK 中 MCP 服务器的配置选项和初始化过程。它解释了如何通过各种配置选项和功能来创建、配置和自定义服务器行为。

有关服务器会话管理的信息,请参阅会话管理。有关钩子和中间件的详细信息,请参阅钩子和中间件

服务器初始化

MCP 服务器是使用 NewMCPServer 函数创建的,该函数接受名称、版本和可变参数列表的配置选项

MCPServer 结构体包含所有服务器状态,包括资源、提示、工具、功能和会话管理。服务器为不同的资源类型使用单独的互斥锁以实现并发访问。

服务器创建流程

来源:server/server.go291-318

配置选项

配置通过 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: 指示日志支持的布尔指针

隐式功能注册

当添加资源、提示或工具时,服务器会自动注册功能

  • 添加资源会调用 implicitlyRegisterResourceCapabilities
  • 添加提示会调用 implicitlyRegisterPromptCapabilities
  • 添加工具会调用 implicitlyRegisterToolCapabilities

这确保了即使没有显式配置,功能也可用。

来源: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: 保护工具过滤器

这种设计允许并发读取不同资源类型,同时在修改期间保持一致性。

来源:server/server.go139-147