MCP服务器实现

一个基于Go语言的模型上下文协议(MCP)服务器实现,提供茶叶信息管理工具、资源和提示功能,适用于学习和开发环境。

  • by cbrgm
  • Go
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 cbrgm/go-mcp-server

使用说明

转到MCP服务器

A. 模型上下文协议(MCP) Go中的服务器实现,通过工具、资源和提示提供茶信息。

备注:本项目仅供学习之用。我从头开始构建了这个MCP服务器,以理解模型上下文协议规范。对于生产使用,考虑使用 mcp走 或者等待官方MCP Go SDK发布(预计2025年6月底)。

此MCP服务器,尤其是 mcp 包,是在帮助下编写的 克劳德代码 使用最新版本的 MCP规范 (2025-06-21).

特性

  • 符合MCP 2025-03-26规范
  • 多个传输: stdio (默认), http 与SSE合作
  • 茶叶收藏:8种优质茶(绿茶、红茶、乌龙茶、白茶)
  • 完整的MCP功能:工具、资源和提示

快速开始

# Build the binary
go build ./cmd/go-mcp-server

# Run with stdio transport (default)
./go-mcp-server

# Run with HTTP transport
./go-mcp-server -transport http -port 8080

# Test with MCP Inspector
echo '{"jsonrpc":"2.0","method":"initialize","id":1}' | ./go-mcp-server

用法

服务器二进制文件接受几个命令行参数来配置其行为:

./go-mcp-server [options]

命令行参数

参数 类型 默认值 描述
-transport 字符串 stdio 要使用的传输协议(stdio 或 http)
-port int 8080 HTTP服务器端口(仅与 -transport http)
-request-timeout 持续时间 30s 等待请求处理的最长时间
-shutdown-timeout 持续时间 10s 等待正常关机的最长时间
-log-level 字符串 info 日志级别(debug, info, warn, error)
-log-json bool的。 false 以JSON格式输出日志
-server-name 字符串 MCP Server 初始化时返回服务器名称
-server-version 字符串 1.0.0 初始化时返回服务器版本

例子

# Default stdio transport with debug logging
./go-mcp-server -log-level debug

# HTTP transport on custom port with JSON logs
./go-mcp-server -transport http -port 9000 -log-json

# Custom timeouts for production use
./go-mcp-server -transport http -request-timeout 60s -shutdown-timeout 30s

# Custom server identification
./go-mcp-server -server-name "My Tea Server" -server-version "2.0.0"

MCP能力

工具

  • getTeaNames -列出所有可用的茶
  • getTeaInfo -获取详细的茶叶信息和冲泡说明
  • getTeasByType -按类型过滤茶(绿茶、红茶、乌龙茶、白茶)

资源

  • menu://tea -完整的茶叶收藏,包括价格和细节

鼓励

  • tea_recommendation -基于情绪/偏好的个性化推荐
  • brewing_guide -特定茶的详细冲泡说明
  • tea_pairing -食物搭配建议

茶叶收藏示例

尝试以下命令来探索茶叶收藏:

# List all available teas
echo '{"jsonrpc":"2.0","method":"tools/call","id":1,"params":{"name":"getTeaNames","arguments":{}}}' | ./go-mcp-server

# Get information about a specific tea
echo '{"jsonrpc":"2.0","method":"tools/call","id":2,"params":{"name":"getTeaInfo","arguments":{"name":"earl-grey"}}}' | ./go-mcp-server

# Get all oolong teas
echo '{"jsonrpc":"2.0","method":"tools/call","id":3,"params":{"name":"getTeasByType","arguments":{"type":"Oolong Tea"}}}' | ./go-mcp-server

# Read the complete tea menu resource
echo '{"jsonrpc":"2.0","method":"resources/read","id":4,"params":{"uri":"menu://tea"}}' | ./go-mcp-server

# Get a brewing guide for gyokuro
echo '{"jsonrpc":"2.0","method":"prompts/get","id":5,"params":{"name":"brewing_guide","arguments":{"tea_name":"gyokuro"}}}' | ./go-mcp-server

Web用户界面

使用HTTP传输时,根路径上有一个web状态页(/)服务器的。此页面显示服务器信息、活动会话和可用终结点。

MCP客户端配置

克劳德桌面/VS代码/其他MCP客户端

将此配置添加到MCP客户端设置中:

{
  "mcpServers": {
    "tea": {
      "command": "podman",
      "args": ["run", "-i", "--rm", "ghcr.io/cbrgm/go-mcp-server:v1"]
    }
  }
}

对于本地开发,您还可以使用:

{
  "mcpServers": {
    "tea": {
      "command": "go",
      "args": ["run", "./cmd/go-mcp-server"],
      "cwd": "/path/to/go-mcp-server"
    }
  }
}

MCP检验员测试

  1. 安装: npm install -g @modelcontextprotocol/inspector
  2. 开始: npx @modelcontextprotocol/inspector
  3. 使用命令连接: go run ./cmd/go-mcp-server

许可证

Apache 2.0