forked from DevOps/deploy.stack
7.1 KiB
7.1 KiB
MCP Server Go
一个使用Golang实现的MCP(Master 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脚本发送的数据:
- 确保
disk_inspection.py中的submit_to_mcp方法配置正确的MCP服务器地址(http://localhost:8080/mcp/v1/submit) - 确保
disk_inspection.py安装了requests依赖:pip install requests - 运行MCP服务器和disk_inspection.py脚本
故障排除
常见问题
-
OpenAI API调用失败
- 检查API密钥是否正确配置
- 确认网络连接正常,特别是可以访问OpenAI API
- 查看日志文件获取详细错误信息
-
配置文件不生效
- 确认配置文件路径正确
- 检查配置项格式是否符合TOML规范
-
端口被占用
- 修改
config.toml中的listen_addr配置,使用其他可用端口
- 修改
-
请求速率限制
- 如果遇到"请求过于频繁"的错误,可以调整代码中的速率限制参数
日志分析
日志文件默认位于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功能和监控