基础

1 服务器初始化

server.NewMCPServer 是创建 MCP 服务核心实例的函数,其定义和配置能力如下:

func NewMCPServer(
    name string, 
    version string, 
    opts ...ServerOption
) *MCPServer
参数
类型
必需
描述

name

string

服务名称(显示在能力端点/capabilities中)

version

string

服务版本号(语义化版本格式如 "1.0.0")

opts

...ServerOption

​能力配置选项​​(可变参数,可添加多个配置函数)

1.1 可配置能力

1.1.1 工具能力配置

server.WithToolCapabilities(enabled bool)
  • ​作用​​:启用/禁用工具调用功能

  • ​启用后​​:

    • 暴露 /mcp/tools/list 端点

    • 暴露 /mcp/tools/call 端点

    • 允许使用 AddTool() 注册工具

  • ​示例​​:server.WithToolCapabilities(true)

1.1.2 资源能力配置

  • 作用​​:启用/禁用资源读写能力

  • ​参数​​:

    • read:启用资源读取(GET 操作)

    • write:启用资源修改(PUT/POST/DELETE)

  • ​启用后​​:

    • 暴露 /mcp/resources/list 端点

    • 暴露 /mcp/resources/read 端点

    • 允许使用 AddResource() 注册资源

  • ​示例​​:server.WithResourceCapabilities(true, false) // 启用读,禁用写

1.1.3 提示能力配置

  • 作用​​:启用/禁用提示功能

  • ​启用后​​:

    • 暴露 /mcp/prompts/list 端点

    • 暴露 /mcp/prompts/get 端点

    • 允许管理 AI 提示模板

  • ​示例​​:server.WithPromptCapabilities(true)

1.1.4 日志能力配置

  • 作用​​:启用请求日志记录

  • ​记录内容​​:

    • 所有入站请求信息

    • 处理时长

    • 错误信息

  • ​示例​​:server.WithLogging()

1.1.5 状态管理配置

  • ​作用​​:启用有状态会话支持

  • ​功能​​:

    • 自动生成会话 ID

    • 维护跨请求的上下文

    • 会话过期处理

  • ​示例​​:server.WithStateManagement()

1.1.6 并发控制配置

  • ​作用​​:设置最大并发请求数

  • ​参数​​:max - 最大并发数(0 表示无限制)

  • ​示例​​:server.WithMaxConcurrent(100)

1.1.7 请求超时配置

  • ​作用​​:设置请求处理超时时间

  • ​参数​​:d - 超时时间(如 30*time.Second

  • ​示例​​:server.WithRequestTimeout(10 * time.Second)

1.1.8 自定义中间件

  • 作用​​:添加全局中间件

  • ​类型定义​​:

  • ​示例​​:

1.2 返回值

返回值
类型
描述

*MCPServer

结构体指针

初始化完成的 MCP 服务器实例,包含以下核心字段:

- name:服务名称

- version:版本号

- tools:注册的工具映射(map[string]Tool)

- resources:注册的资源映射(map[string]Resource)

- prompts:提示词集合

- middlewares:中间件链

- capabilities:启用的能力配置

1.3 示例

1.4 注意

  1. ​能力依赖​​:

  2. ​配置顺序​​:

  1. ​默认行为​​:

    • 所有能力默认 ​​禁用​

    • 未配置超时/并发限制时无约束

    • 未启用日志时不记录请求

  2. ​中间件执行顺序​​:

2 工具注册

mcp-go 包中,工具注册是构建 MCP 服务的核心环节,主要涉及两个关键函数:NewTool()AddTool()

2.1 工具创建函数:NewTool

参数
类型
必需
描述

name

string

​工具名称​​(唯一标识符,如 "search_users")

opts

...ToolOption

​工具配置选项​​(可变参数,可添加多个配置函数)

2.1.1 参数定义函数

2.1.2 参数选项

2.1.3 元数据配置

2.1.4 返回值

返回值
类型
描述

*Tool

结构体指针

初始化完成的工具对象,包含以下核心字段:

- Name: 工具名称

- Description: 工具描述

- Parameters: 参数列表(包含名称、类型、约束等)

- Category: 工具分类

2.1.5 示例

2.2 工具注册函数:AddTool

参数
类型
必需
描述

tool

*Tool

NewTool 创建的工具对象

handler

ToolHandler

工具调用的处理函数

2.2.1 处理函数签名

  • ctx context.Context​ 包含请求上下文,可用于:

    • 获取请求超时信息

    • 传递中间件设置的值(如用户身份)

    • 访问 HTTP 原始请求头(通过 req.Header

  • req CallToolRequest​ 工具调用请求结构:

*CallToolResult​ 成功时返回的结果对象,使用以下构造器创建:

其中 ToolResultContent 可以是:

  • error​ 错误时返回,会触发 JSON-RPC 错误响应;注册成功返回 nil,工具名重复时返回 ErrToolExists

2.2.1.1 处理函数示例

3 资源注册

3.1 资源创建函数:NewResource

mcp-go 中,资源注册是构建 MCP 服务的核心能力之一,它允许你定义可通过统一资源标识符(URI)访问的数据实体。

参数
类型
必需
描述

uriPattern

string

​URI模式​​(支持参数化路径,如 "users://{user_id}"

displayName

string

​显示名称​​(用于文档和发现)

opts

...ResourceOption

资源配置选项(可变参数)

3.1.1 资源配置

3.1.1.1 元数据配置

3.1.1.2 访问控制配置

3.1.1.3 缓存控制配置

3.1.1.4 分页支持配置

3.1.1.5 内容协商配置

3.1.2 返回值

返回值
类型
描述

*Resource

结构体指针

资源对象,包含以下核心字段:

- URIPattern: 原始URI模式

- DisplayName: 显示名称

- Description: 详细描述

- MIMEType: 默认MIME类型

- CompiledPattern: 编译后的正则模式(用于参数提取)

3.1.3 示例

3.2 资源注册函数:AddResource

参数
类型
必需
描述

res

*Resource

NewResource 创建的资源对象

handler

ResourceHandler

资源访问处理函数

3.2.1 处理函数签名

  • ctx context.Context​ 请求上下文,包含:

    • 请求超时信息

    • 中间件传递的值(如用户身份)

    • 访问控制信息

  • req ReadResourceRequest​ 资源请求结构:

​- []ResourceContents​ 资源内容列表,支持多种内容类型:

  • 构造函数

  • error​ 错误时返回,会转换为HTTP错误状态码;注册成功返回 nil,URI模式冲突时返回 ErrResourceExists

3.2.2 示例

4 中间件系统

MCP 的中间件系统提供了强大的请求处理管道能力,允许开发者在核心业务逻辑前后插入自定义处理逻辑。

4.1 工具中间件

  • middleware:中间件函数,签名如下:

  • next:下一个中间件或最终处理函数

  • 返回:包装后的处理函数

4.2 资源中间件

  • middleware:中间件函数,签名如下:

  • next:下一个中间件或最终处理函数

  • 返回:包装后的处理函数

4.3 示例

  • 认证与鉴权

  • 缓存处理

5 服务启动

mcp-go 包中,服务启动是构建 MCP 服务的最后环节,提供了多种配置选项来优化服务行为和性能。

5.1 创建HTTP服务器

NewStreamableHTTPServer 函数是创建 MCP HTTP 服务器的核心入口,它提供了丰富的配置选项来定制 HTTP 服务的行为和特性。

参数
类型
必需
描述

s

*MCPServer

​MCP 服务器实例​​(包含工具、资源等注册信息)

opts

...HTTPOption

​HTTP 服务器配置选项​​(可变参数,可添加多个配置函数)

5.1.1 端点路径配置

5.1.2 会话管理配置

5.1.3 心跳机制

5.1.4 请求处理配置

5.1.5 内容编码

5.1.6 CORS配置

5.1.7 安全头配置

返回值
类型
描述

*StreamableHTTPServer

结构体指针

HTTP 服务器实例,包含以下核心字段:

- mcpserver: 关联的 MCP 服务器实例

- router: HTTP 路由器

- sessionManager: 会话管理器

- heartbeatInterval: 心跳间隔

- corsConfig: CORS 配置

- gzipLevel: Gzip 压缩级别

5.1.8 示例

5.2 HTTP传输

参数
类型
必需
描述

addr

string

​服务监听地址​​(格式:"ip:port" 或 ":port",如 ":8080")

opts

...StartOption

​启动配置选项​​(可变参数,可添加多个配置函数)

5.2.1 连接管理选项

5.2.2 TLS/SSL 安全配置

5.2.3 高级性能选项

5.2.4 调试与诊断

5.2.5 优雅关闭

  • error:

    • 启动成功返回 nil,失败返回具体错误(如端口冲突)

5.2.6 示例

最后更新于