# 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`包含以下主要配置项：

```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功能和监控