Files
deploy.stack/mcp_server_go/README.md

297 lines
7.1 KiB
Markdown
Raw Normal View History

# 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`包含以下主要配置项:
```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密钥
### 安装依赖
```bash
# 初始化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
```
## 运行方法
### 直接运行
```bash
# 确保配置文件正确设置
# 启动服务器
go run main.go
```
### 编译后运行
```bash
# 编译项目
go build -o mcp_server
sudo chmod +x mcp_server
# 运行编译后的二进制文件
./mcp_server
```
### 作为系统服务运行
可以创建一个systemd服务文件来管理MCP服务器
```bash
sudo nano /etc/systemd/system/mcp_server.service
```
添加以下内容(根据实际路径修改):
```ini
[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
```
然后启用并启动服务:
```bash
sudo systemctl daemon-reload
sudo systemctl enable mcp_server
sudo systemctl start mcp_server
```
## API接口文档
### 健康检查接口
**GET /health**
检查服务器和OpenAI连接状态
**响应示例**
```json
{
"status": "ok",
"version": "1.0.0",
"timestamp": 1634567890,
"openai_health": true
}
```
### MCP数据提交接口
**POST /mcp/v1/submit**
提交数据到MCP服务器进行处理和AI分析
**请求体示例**
```json
{
"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
}
```
**响应示例**
```json
{
"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调用情况。可以使用以下命令查看日志
```bash
# 实时查看日志
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功能和监控