菜单

完整的服务器示例

相关源文件

本文档提供了完整 MCP 服务器示例实现的详细演练,该示例展示了 MCP Go SDK 的所有主要功能。该示例展示了如何构建一个功能齐全的 MCP 服务器,包含资源、提示、工具、钩子、通知和多种传输机制。

有关单个服务器组件的信息,请参阅MCP 服务器。有关特定于传输的详细信息,请参阅传输机制。有关测试服务器实现的信息,请参阅服务器测试

概述

位于examples/everything/main.go 的完整服务器示例展示了一个生产就绪的 MCP 服务器实现,它展示了 MCP Go SDK 的所有主要功能。此示例既可作为参考实现,也可作为所有服务器功能的测试平台。

该服务器实现了多种工具类型、资源处理模式、提示模板、全面的钩子使用和通知系统,同时支持标准输入输出(stdio)和 HTTP 传输。

服务器架构

来源:examples/everything/main.go33-169

服务器配置与初始化

服务器使用启用了全面功能的 server.NewMCPServer 构造函数进行配置。该配置展示了生产服务器设置的最佳实践。

服务器设置组件

组件配置目的
服务器标识"example-servers/everything", "1.0.0"用于客户端的服务器标识
资源能力WithResourceCapabilities(true, true)启用资源读取和订阅
提示能力WithPromptCapabilities(true)启用提示列表更改
工具能力WithToolCapabilities(true)启用工具执行
日志记录WithLogging()启用请求/响应日志记录
钩子WithHooks(hooks)附加生命周期钩子

服务器初始化发生在 NewMCPServer 函数中,该函数创建了一个配置完整且所有功能都已启用的服务器实例。

来源:examples/everything/main.go64-72

钩子和生命周期管理

该示例展示了请求生命周期管理的全面钩子使用,提供了对请求处理所有阶段的深入了解。

钩子实现模式

钩子系统提供以下拦截点

  • BeforeAny: 在每个请求之前调用,用于日志记录和预处理
  • OnRequestInitialization: 调用以进行授权和验证
  • BeforeInitialize/AfterInitialize: 初始化请求生命周期
  • BeforeCallTool/AfterCallTool: 工具执行生命周期
  • OnSuccess/OnError: 最终请求结果处理

来源:examples/everything/main.go35-62

资源实现

服务器演示了三种资源实现模式:静态资源、资源模板和动态生成的资源。

资源类型和处理程序

资源类型URI 模式处理函数内容类型
静态test://static/resourcehandleReadResourcetext/plain
模板test://dynamic/resource/{id}handleResourceTemplatetext/plain
生成test://static/resource/1-100handleGeneratedResource混合内容

生成的资源展示了内容类型的变化,其中偶数资源返回文本内容,奇数资源返回二进制大对象内容。

资源注册流程

generateResources 函数以编程方式创建了 100 个资源,展示了可伸缩的资源管理模式。

来源:examples/everything/main.go74-89 examples/everything/main.go171-190 examples/everything/main.go192-253

工具实现

服务器实现了五种不同的工具类型,展示了 MCP Go SDK 中可用的不同工具模式和功能。

工具目录

工具名称参数返回类型特殊功能
echomessage: string文本内容基本字符串处理
adda: number, b: number文本内容数值计算
notify文本内容发送通知
longRunningOperationduration: number, steps: number文本内容进度通知
getTinyImage混合内容图像数据处理

工具执行流程

longRunningOperation 工具演示了高级功能,包括进度令牌处理和工具执行期间服务器发起的通知。

来源:examples/everything/main.go105-164 examples/everything/main.go311-467

提示实现

服务器实现了两种提示模式:一种是不带参数的简单提示,另一种是带有必需参数和多模态内容的复杂提示。

提示规范

提示名称参数消息类型特性
simple_prompt仅用户文本基本提示模板
complex_prompttemperature, style用户文本、助手文本、用户图像多模态对话

复杂提示演示了参数插值和多模态内容,包括使用 MCP_TINY_IMAGE 常量嵌入图像数据。

提示消息结构

来源:examples/everything/main.go91-104 examples/everything/main.go255-309

通知处理

服务器实现了通知发送和接收功能,展示了双向通信模式。

通知机制

服务器提供两种通知场景

  1. 工具触发的通知notify 工具发送即时通知
  2. 进度通知longRunningOperation 工具发送周期性进度更新

通知流程

通知系统使用 server.ServerFromContext(ctx) 模式从工具处理程序访问服务器实例。

来源:examples/everything/main.go351-378 examples/everything/main.go381-423 examples/everything/main.go469-474

传输选择和服务器启动

服务器支持标准输入输出(stdio)和 HTTP 两种传输方式,可通过命令行选择,展示了灵活的部署选项。

传输配置

传输命令行服务器类型端点
Stdio--transport=stdio (默认)server.ServeStdiostdin/stdout
HTTP--transport=httpserver.NewStreamableHTTPServer:8080/mcp

服务器启动流程

HTTP 服务器在 /mcp 提供 RESTful 端点,而 stdio 服务器支持命令行集成和基于进程的通信。

来源:examples/everything/main.go476-496

运行完整示例

该示例可以以两种模式执行

Stdio 模式(默认)

HTTP 模式

该服务器展示了生产就绪的模式,包括错误处理、日志记录、进度报告以及适用于实际 MCP 服务器实现的全面功能覆盖。

来源:examples/everything/main.go476-496