Files
deploy.stack/mcp_server_go/README.md
cnphpbb 226726eecd feat: 初始化MCP服务器Go版本实现
添加MCP服务器Go版本的核心功能,包括:
- 配置文件管理
- 日志系统
- OpenAI API集成
- HTTP服务器和API端点
- 健康检查和监控
- 安装脚本和文档
2025-09-10 22:23:34 +08:00

297 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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功能和监控