Files
deploy.stack/mcp_server_go
cnphpbb 45d8181205 fix: 增加调试输出并调整健康检查超时时间
在配置加载时添加调试信息输出,方便排查问题
将健康检查的超时时间从2秒延长至60秒,避免因网络延迟导致误判
2025-09-11 21:54:55 +08:00
..

MCP Server Go

一个使用Golang实现的MCPMaster Control Program服务器能够对接开放的AI API如OpenAI提供数据分析和处理功能。

项目特点

  • 基于Golang开发高性能、低资源占用
  • 使用slog标准库进行日志管理支持多级别、多格式日志输出
  • 使用TOML格式配置文件配置简单明了
  • 支持对接OpenAI API可扩展支持其他AI服务
  • 提供健康检查、Prometheus监控指标
  • 实现CORS跨域支持、请求速率限制、请求日志等中间件
  • 支持配置文件热重载
  • 优雅关闭机制

目录结构

mcp_server_go/
├── main.go          # 主程序文件
├── config.toml      # 配置文件
├── README.md        # 项目说明文档
├── go.mod           # Go模块定义
├── go.sum           # 依赖版本锁定
└── logs/            # 日志文件目录
    └── mcp_server.log  # 日志文件

配置说明

配置文件config.toml包含以下主要配置项:

# 服务器基本配置
[server]
listen_addr = "0.0.0.0:8080"  # 监听地址和端口
read_timeout = 30            # 读取超时时间(秒)
write_timeout = 30           # 写入超时时间(秒)
max_header_bytes = 1048576   # 最大请求头大小(字节)

# OpenAI API 配置
[openai]
api_key = "your_api_key_here"  # OpenAI API密钥
base_url = "https://api.openai.com/v1"  # API基础URL
model = "gpt-3.5-turbo"  # 使用的模型
temperature = 0.7        # 生成内容的随机性
max_tokens = 1000        # 最大生成token数
request_timeout = 60     # 请求超时时间(秒)

# 日志配置
[logging]
level = "info"          # 日志级别: debug, info, warn, error
format = "text"         # 日志格式: text, json
output_path = "logs/mcp_server.log"  # 日志文件路径
max_size = 100          # 单个日志文件最大大小(MB)
max_age = 7             # 日志保留天数
max_backups = 5         # 最大备份文件数
compress = false        # 是否压缩归档日志

# 安全配置
[security]
allowed_origins = ["*"]  # 允许的源
allowed_methods = ["GET", "POST", "OPTIONS"]  # 允许的HTTP方法
allowed_headers = ["Content-Type", "Authorization"]  # 允许的HTTP头

安装与依赖

前提条件

  • Go 1.21或更高版本
  • 有效的OpenAI API密钥或其他兼容的AI服务API密钥

安装依赖

# 初始化Go模块如果尚未初始化
go mod init mcp_server_go

# 安装依赖包
go get github.com/sashabaranov/go-openai
go get github.com/spf13/viper
go get github.com/fsnotify/fsnotify
go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp
go get github.com/google/uuid
go get golang.org/x/time/rate

# 生成go.sum文件
go mod tidy

运行方法

直接运行

# 确保配置文件正确设置
# 启动服务器
go run main.go

编译后运行

# 编译项目
go build -o mcp_server
sudo chmod +x mcp_server

# 运行编译后的二进制文件
./mcp_server

作为系统服务运行

可以创建一个systemd服务文件来管理MCP服务器

sudo nano /etc/systemd/system/mcp_server.service

添加以下内容(根据实际路径修改):

[Unit]
Description=MCP Server Go
After=network.target

[Service]
Type=simple
User=your_user
WorkingDirectory=/home/geng/mydate/deploy.stack/mcp_server_go
ExecStart=/home/geng/mydate/deploy.stack/mcp_server_go/mcp_server
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

然后启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable mcp_server
sudo systemctl start mcp_server

API接口文档

健康检查接口

GET /health

检查服务器和OpenAI连接状态

响应示例

{
  "status": "ok",
  "version": "1.0.0",
  "timestamp": 1634567890,
  "openai_health": true
}

MCP数据提交接口

POST /mcp/v1/submit

提交数据到MCP服务器进行处理和AI分析

请求体示例

{
  "data": {
    "disk_id": "sda",
    "smart_data": {
      "temperature": 38,
      "power_on_hours": 12345,
      "read_errors": 0,
      "write_errors": 0
    },
    "performance_data": {
      "read_speed": 120,
      "write_speed": 90
    }
  },
  "type": "disk_inspection",
  "metadata": {
    "server_id": "server-001",
    "location": "data_center_a"
  },
  "timestamp": 1634567890
}

响应示例

{
  "success": true,
  "message": "数据提交成功",
  "data": {"disk_id": "sda", ...},  // 原始提交的数据
  "ai_result": {
    "analysis": "硬盘状态良好,温度正常,无错误记录。",
    "recommendations": "建议定期进行数据备份,继续监控硬盘健康状态。",
    "health_score": 98
  },
  "request_id": "req-1634567890-ab12cd34",
  "timestamp": 1634567891
}

Prometheus监控指标

GET /metrics

提供Prometheus格式的监控指标

日志说明

日志配置在[logging]部分,支持以下特性:

  • 可配置日志级别debug、info、warn、error
  • 支持文本和JSON两种日志格式
  • 日志文件自动轮转(基于大小和时间)
  • 同时输出到控制台和文件

安全配置

  • 配置CORS策略限制允许的源、方法和头部
  • 实现请求速率限制,防止滥用
  • 支持配置文件中的安全设置热重载

与disk_inspection.py的对接

MCP服务器可以直接接收disk_inspection.py脚本发送的数据:

  1. 确保disk_inspection.py中的submit_to_mcp方法配置正确的MCP服务器地址http://localhost:8080/mcp/v1/submit
  2. 确保disk_inspection.py安装了requests依赖pip install requests
  3. 运行MCP服务器和disk_inspection.py脚本

故障排除

常见问题

  1. OpenAI API调用失败

    • 检查API密钥是否正确配置
    • 确认网络连接正常特别是可以访问OpenAI API
    • 查看日志文件获取详细错误信息
  2. 配置文件不生效

    • 确认配置文件路径正确
    • 检查配置项格式是否符合TOML规范
  3. 端口被占用

    • 修改config.toml中的listen_addr配置,使用其他可用端口
  4. 请求速率限制

    • 如果遇到"请求过于频繁"的错误,可以调整代码中的速率限制参数

日志分析

日志文件默认位于logs/mcp_server.log包含详细的请求处理信息、错误信息和OpenAI API调用情况。可以使用以下命令查看日志

# 实时查看日志
tail -f logs/mcp_server.log

# 搜索错误信息
grep -i error logs/mcp_server.log

开发与扩展

添加新的AI服务支持

可以扩展代码以支持其他AI服务提供商只需实现相应的客户端初始化和请求处理逻辑。

自定义数据处理逻辑

可以修改analyzeWithOpenAI函数根据不同的数据类型和需求定制AI分析的提示词和处理逻辑。

添加新的API端点

可以在main.go中添加新的HTTP处理函数并注册到路由器扩展服务器功能。

许可证

MIT License

版本历史

  • v1.0.0: 初始版本支持OpenAI API对接、基本的MCP功能和监控