Skip to main content
Glama
sanshao85

gomoku-mcp-server

by sanshao85
README.md
# 五子棋AI对战项目

基于MCP (Model Context Protocol) 的五子棋AI对战平台,让AI通过MCP接口进行五子棋对战。

## ✨ 项目亮点

- 🤖 **真实AI对战**: 支持Claude等AI通过MCP协议直接对战
- 👁️ **实时观战**: 精美的Web界面实时显示对战过程
- 🎯 **完整游戏逻辑**: 标准15x15五子棋规则,支持胜负判断
- 📊 **数据统计**: 玩家排行榜、游戏历史、统计分析
- 🔧 **易于扩展**: 模块化设计,支持自定义AI算法

## 🎮 演示效果

**已成功实现Claude AI vs Claude AI对战!**

- ✅ 两个AI实例同时连接
- ✅ 实时下棋和状态更新
- ✅ Web界面完美显示棋盘
- ✅ 游戏逻辑完全正确

## 项目结构

```
gomoku-ai-battle/
├── README.md                    # 项目说明
├── requirements.txt             # Python依赖
├── GOMOKU_AI_BATTLE_PROJECT.md  # 详细项目文档
├──
├── game_server/                 # 游戏服务端
│   ├── main.py                  # FastAPI应用入口
│   ├── config.py                # 配置文件
│   ├── models/                  # 数据模型
│   ├── services/                # 业务逻辑
│   └── api/                     # API路由
│
├── mcp_server/                  # MCP服务器
│   ├── gomoku_mcp.py            # MCP服务器主文件
│   ├── config.py                # MCP配置
│   └── tools/                   # MCP工具
│
├── ai_client/                   # AI客户端
│   ├── mcp_client.py            # MCP客户端封装
│   └── simple_ai.py             # 简单AI实现
│
├── scripts/                     # 脚本工具
│   ├── start_game_server.py     # 启动游戏服务端
│   ├── start_mcp_server.py      # 启动MCP服务器
│   └── run_ai_battle.py         # 运行AI对战
│
└── tests/                       # 测试代码
    ├── test_game_logic.py       # 游戏逻辑测试
    └── test_mcp_server.py       # MCP服务器测试
```

## 🚀 快速开始

### 1. 安装依赖

```bash
pip install -r requirements.txt
```

### 2. 启动游戏服务端

```bash
python scripts/start_game_server.py
```

游戏服务端将在 `http://localhost:8000` 启动:
- 🌐 **Web界面**: http://localhost:8000
- 📚 **API文档**: http://localhost:8000/docs
- 🎮 **观战台**: http://localhost:8000/static/index.html

### 3. 配置Claude Desktop

在Claude Desktop配置文件中添加MCP服务器:

**配置文件位置:**
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`

**配置内容:**
```json
{
  "mcpServers": {
    "gomoku-mcp-server": {
      "command": "python",
      "args": ["D:\\your\\project\\path\\scripts\\start_mcp_server.py"],
      "env": {
        "PYTHONIOENCODING": "utf-8",
        "MCP_GAME_SERVER_URL": "http://localhost:8000"
      }
    }
  }
}
```

### 4. 启动MCP服务器

```bash
python scripts/start_mcp_server.py
```

### 5. 重启Claude Desktop

完全关闭并重新打开Claude Desktop,让配置生效。

### 6. 开始AI对战!

现在Claude AI可以直接通过MCP工具进行五子棋对战:

```
我想创建一个五子棋房间开始对战
```

或者运行示例AI客户端:

```bash
# 运行2个AI对战
python scripts/run_ai_battle.py --mode battle --ai-count 2

# 让AI加入指定房间
python scripts/run_ai_battle.py --mode join --room-id room_12345 --ai-id AI_Test
```

## 使用说明

### 游戏服务端API

游戏服务端提供REST API接口:

- `POST /api/v1/rooms` - 创建房间
- `GET /api/v1/rooms` - 获取房间列表
- `POST /api/v1/rooms/{room_id}/join` - 加入房间
- `POST /api/v1/rooms/{room_id}/move` - 下棋
- `GET /api/v1/rooms/{room_id}/game` - 获取游戏状态

### 🛠️ MCP工具

MCP服务器提供以下工具供AI调用:

**游戏操作工具:**
- `create_room(creator_id, room_name)` - 创建房间
- `join_room(room_id, player_id)` - 加入房间
- `leave_room(room_id, player_id)` - 离开房间
- `start_game(room_id, player_id)` - 开始游戏
- `make_move(room_id, player_id, x, y)` - 下棋
- `get_move_suggestions(room_id, player_id, count)` - 获取下棋建议
- `get_leaderboard(limit, sort_by)` - 获取排行榜
- `get_server_status()` - 获取服务器状态

**信息查询资源:**
- `board_state://{room_id}` - 获取棋盘状态
- `game_info://{room_id}` - 获取游戏信息
- `gomoku://room_list` - 获取房间列表
- `player_info://{player_id}` - 获取玩家信息

### 🎯 AI对战示例

**创建房间并开始对战:**
```
Claude: 我想创建一个五子棋房间
AI: 成功创建房间 'Claude的AI对战房间',房间ID: room_3b93ac16

Claude: 让另一个AI加入房间
AI: 成功加入房间 room_3b93ac16

Claude: 开始游戏并下第一步棋在中心位置
AI: 下棋成功

Claude: 查看当前棋盘状态
AI: [显示15x15棋盘,中心有黑子●]
```

**实际演示结果:**
- ✅ 成功创建房间:`room_3b93ac16`
- ✅ 两个AI同时对战:`Claude_AI_1 vs Claude_AI_2`
- ✅ 已进行7步对战,游戏进行中
- ✅ Web界面实时显示棋盘状态

### AI客户端开发

使用 `GomokuMCPClient` 类可以轻松开发AI客户端:

```python
from ai_client.mcp_client import GomokuMCPClient

async def my_ai():
    async with GomokuMCPClient() as client:
        # 创建房间
        result = await client.create_room("my_ai", "测试房间")

        # 获取棋盘状态
        board = await client.get_board_state("room_id")

        # 下棋
        result = await client.make_move("room_id", "my_ai", 7, 7)
```

## 配置

### 游戏服务端配置

在 `game_server/config.py` 中可以配置:

- 服务器地址和端口
- 棋盘大小和获胜条件
- 房间和玩家限制
- 日志级别

### MCP服务器配置

在 `mcp_server/config.py` 中可以配置:

- 游戏服务器连接地址
- 连接超时和重试设置
- AI建议数量限制
- 日志级别

## 开发和测试

### 运行测试

```bash
# 运行所有测试
pytest

# 运行特定测试
pytest tests/test_game_logic.py
pytest tests/test_mcp_server.py
```

### 开发模式

```bash
# 启动游戏服务端(开发模式)
python scripts/start_game_server.py --debug --reload

# 启动MCP服务器(调试模式)
python scripts/start_mcp_server.py --debug --log-level DEBUG
```

## 🏗️ 架构说明

### 系统架构

```
┌─────────────┐    MCP     ┌─────────────┐    HTTP    ┌─────────────┐
│   Claude AI  │ ←────────→ │  MCP 服务器   │ ←────────→ │  游戏服务端   │
│  (黑子玩家)   │            │             │            │             │
└─────────────┘            └─────────────┘            └─────────────┘
                                  ↑                           ↑
                                  │ MCP                       │ HTTP
                                  ↓                           ↓
┌─────────────┐            ┌─────────────┐            ┌─────────────┐
│   Claude AI  │ ←────────→ │  MCP 服务器   │            │   Web 观战台  │
│  (白子玩家)   │            │   (同一个)    │            │             │
└─────────────┘            └─────────────┘            └─────────────┘
```

### 数据流

1. **AI连接**: Claude AI通过MCP协议连接到MCP服务器
2. **指令转换**: MCP服务器将AI指令转换为HTTP API调用
3. **游戏处理**: 游戏服务端处理五子棋逻辑并更新状态
4. **结果返回**: MCP服务器将游戏结果返回给AI
5. **实时观战**: Web界面实时显示棋盘状态

### 技术栈

- **游戏服务端**: Python + FastAPI + Pydantic + Uvicorn
- **MCP服务器**: MCP Python SDK (FastMCP) + httpx
- **Web界面**: HTML5 + CSS3 + JavaScript + 实时刷新
- **AI客户端**: Claude Desktop + MCP协议
- **通信协议**: HTTP REST API + MCP stdio + WebSocket(可选)

### 核心特性

- 🔄 **实时同步**: 游戏状态实时同步到所有客户端
- 🎯 **精确控制**: 坐标系统(0-14),支持精确下棋
- 🛡️ **错误处理**: 完善的异常处理和重试机制
- 📊 **状态管理**: 完整的游戏状态和房间管理
- 🎮 **多模式**: 支持AI vs AI、观战、统计等多种模式

## 🎉 成功案例

### 实际对战记录

**房间信息:**
- 房间ID: `room_3b93ac16`
- 房间名: "Claude的AI对战房间"
- 对战双方: `Claude_AI_1` (黑子) vs `Claude_AI_2` (白子)

**对战进程:**
1. ✅ Claude_AI_1 创建房间
2. ✅ Claude_AI_2 成功加入
3. ✅ 游戏自动开始
4. ✅ 已进行7步对战
5. ✅ Web界面实时显示

**棋盘状态:**
```
当前棋盘 (第7步后):
   0  1  2  3  4  5  6  7  8  9 10 11 12 13 14
 0  ·  ·  ·  ·  ·  ·  ·  ·  ·  ·  ·  ·  ·  ·  ·
 1  ·  ·  ·  ·  ·  ·  ·  ·  ·  ·  ·  ·  ·  ·  ·
 ...
 7  ·  ·  ·  ·  ○  ●  ●  ●  ○  ○  ·  ·  ·  ·  ·
 8  ·  ·  ·  ·  ·  ·  ·  ·  ●  ·  ·  ·  ·  ·  ·
 ...
```

**技术验证:**
- ✅ MCP协议通信正常
- ✅ 游戏逻辑完全正确
- ✅ Web界面实时更新
- ✅ 多AI并发支持
- ✅ 错误处理机制有效

## 🚀 扩展功能

项目支持以下扩展:

- 🧠 更复杂的AI算法 (已有基础框架)
- 👁️ Web界面观战 (✅ 已实现)
- 📹 游戏回放功能
- 🎲 多种棋类支持 (象棋、围棋等)
- 💾 数据库持久化
- 🔐 用户认证系统
- 📊 高级统计分析
- 🏆 AI算法评分系统
- 🌐 多人在线对战
- 📱 移动端支持

## 🔧 故障排除

### 常见问题及解决方案

1. **MCP服务器无法启动**
   ```
   错误: URL validation error
   解决: 检查资源URI格式,确保使用有效的URL scheme
   ```

2. **HTTP 307重定向错误**
   ```
   错误: 游戏服务器错误: 307 Temporary Redirect
   解决: 在httpx请求中添加 follow_redirects=True
   ```

3. **Claude Desktop看不到MCP工具**
   ```
   问题: 配置文件修改后工具不显示
   解决:
   - 确保配置文件路径正确
   - 完全重启Claude Desktop
   - 检查MCP服务器是否启动
   ```

4. **游戏服务端连接失败**
   ```
   错误: 连接游戏服务器失败
   解决:
   - 确保游戏服务端在 http://localhost:8000 运行
   - 检查端口是否被占用
   - 查看防火墙设置
   ```

5. **下棋失败**
   ```
   错误: 无效的下棋位置
   解决:
   - 确保坐标在0-14范围内
   - 检查位置是否已被占用
   - 确认轮到当前玩家
   ```

### 调试步骤

1. **验证服务端状态**
   ```bash
   curl http://localhost:8000/api/v1/health
   # 应返回: {"status":"healthy",...}
   ```

2. **检查MCP连接**
   ```bash
   python scripts/start_mcp_server.py --debug
   # 查看详细日志输出
   ```

3. **测试API调用**
   ```bash
   curl http://localhost:8000/api/v1/rooms/
   # 应返回房间列表JSON
   ```

### 日志查看

```bash
# 查看游戏服务端日志
python scripts/start_game_server.py --log-level DEBUG

# 查看MCP服务器日志
python scripts/start_mcp_server.py --debug --log-level DEBUG

# 查看AI对战日志
tail -f ai_battle.log
```

### 成功验证清单

- ✅ 游戏服务端启动: `http://localhost:8000`
- ✅ MCP服务器启动: 显示"启动五子棋MCP服务器"
- ✅ Claude Desktop重启: 配置生效
- ✅ MCP工具可见: 在Claude中可以调用工具
- ✅ 创建房间成功: 返回房间ID
- ✅ 下棋成功: 返回"下棋成功"
- ✅ Web界面显示: 棋盘实时更新

## 贡献

欢迎提交Issue和Pull Request来改进项目!

## 许可证

MIT License