内容
# 城市天际线 — Claude 代码 MCP 顾问
城市天际线的 AI 伴侣,通过 [MCP](https://modelcontextprotocol.io/)(模型上下文协议)直接连接到运行中的游戏。首创 — 没有其他适用于城市天际线的 MCP 服务器。
Claude 成为您的城市顾问:它读取实时城市统计数据,诊断问题,调整预算和税收,拆除建筑物,发送游戏内 Chirper 消息,截取屏幕截图,并管理存档文件 — 所有操作都从终端执行。
### 实际操作示例
在一个会话中,Claude 能够:
- 监控一个城市从 3,596 人增长到 16,164 人,实时跟踪城市发展
- 检测和响应活跃的洪水紧急情况、垃圾危机和水污染大流行
- 动态调整预算(警察、教育、垃圾)和税收
- 发送类似游戏内 Chirper 消息,作为一个讽刺的城市顾问
- 按名称和密度百分比识别拥堵的道路
- 跟踪跨代公民的教育进展
- 通过桌面控制截取屏幕截图,以直观诊断城市布局问题
## 架构
```
Claude Code <--stdio/MCP--> Python MCP 服务器 <--HTTP--> C# 游戏模组(端口 7828)
| |
存档解析器 游戏管理器
(.crp 文件) (建筑管理器、经济管理器等)
```
## MCP 工具列表
### 读取工具
| 工具 | 描述 |
|------|-------------|
| `is_game_running` | 检查模组是否激活 |
| `get_city_stats` | 完整的城市报告(人口、资金、服务、交通) |
| `get_buildings` | 列出建筑物,并可筛选(类型、废弃、烧毁) |
| `get_traffic` | 道路段、拥堵、流量百分比 |
| `get_transport` | 公交、地铁、火车、有轨电车线路 |
| `get_districts` | 区,含人口和幸福度 |
| `get_budget` | 按服务划分的收支明细 |
| `get_problems` | 所有建筑物的问题(电力、水、消防、犯罪、垃圾、工人) |
| `get_changes` | 增量检测(人口、资金、废弃建筑物、交通) |
| `take_screenshot` | 捕获游戏内屏幕截图 |
### 写入工具
| 工具 | 描述 |
|------|-------------|
| `demolish_building` | 按 ID 拆除建筑物 |
| `demolish_all_abandoned` | 大规模拆除所有废弃建筑物 |
| `set_money` | 添加/移除资金 |
| `set_tax_rate` | 更改税率(0-29%)适用于任何服务 |
| `set_budget` | 更改服务预算(50-150%) |
| `pause_game` | 暂停/取消暂停模拟 |
| `set_game_speed` | 设置速度(1-3) |
| `send_chirp` | 以“Claude 顾问”为身份向游戏内 Chirper 消息流发送消息 |
### 存档文件工具
| 工具 | 描述 |
|------|-------------|
| `list_saves` | 列出所有 .crp 存档文件 |
| `read_save_metadata` | 解析存档文件头 |
| `backup_save` | 创建带时间戳的备份 |
## 快速安装
```bash
git clone https://github.com/BernardUriza/cities-skylines--cc-mcp-advisor.git
cd cities-skylines--cc-mcp-advisor
# 构建和安装模组
bash mod/build.sh
# 安装 Python 依赖项
pip install httpx mcp
# 在 Claude Code 中注册 MCP 服务器
claude mcp add cities-skylines -- python3 -m mcp_server.server
```
然后:
1. 重启城市天际线
2. 在内容管理器 > 模组中启用 **"Claude 城市顾问 MCP"**
3. 加载存档
4. 在 Claude Code 中,询问: *"检查我的城市"* 或 *"拆除所有废弃建筑物"*
## 手动构建(Mac)
```bash
cd mod/
bash build.sh
```
这会编译所有 C# 源代码,并将 DLL 安装到游戏的模组目录中。
## 测试连接
在游戏运行并加载存档的情况下:
```bash
# 直接 HTTP 测试
curl http://localhost:7828/api/v1/health
# 完整连接测试
python3 scripts/test_connection.py
```
## 项目结构
```
mod/ # C# 游戏模组(在 Unity 内运行)
ClaudeAdvisorMod.cs # 入口点(IUserMod)
HttpCommandServer.cs # HTTP 服务器,端口 7828
RequestHandler.cs # 请求路由和服务层
GameActionExecutor.cs # 写操作(拆除、资金、税收、Chirp 消息)
CityDataCollector.cs # 读取操作(统计数据、建筑物、交通、问题)
Logger.cs # 结构化日志记录,带关联 ID
JsonHelper.cs # JSON 实用工具(无 Newtonsoft 依赖项)
build.sh # 编译脚本
mcp_server/ # Python MCP 服务器(stdio 传输)
server.py # FastMCP 工具定义
game_client.py # 模组的 HTTP 客户端
save_parser.py # .crp 二进制文件解析器
scripts/
install.sh # 完整安装脚本
test_connection.py # 连接验证
```
## 工作原理
1. **C# 模组** 在城市天际线内运行,在 `localhost:7828` 启动 HTTP 服务器
2. **Python MCP 服务器** 将 Claude Code 工具调用转换为 HTTP 请求
3. **读取操作** 直接访问游戏单例管理器(读取线程安全)
4. **写入操作** 使用 `SimulationManager.AddAction()` 安全地分派到模拟线程
## 要求
- 城市天际线(Steam)
- macOS / Linux(计划支持 Windows)
- Python 3.10+
- Mono(用于编译:`brew install mono`)
- Claude Code
## HTTP API 参考
模组在 `localhost:7828` 公开以下端点:
| 方法 | 端点 | 描述 |
|--------|----------|-------------|
| GET | `/api/v1/health` | 健康检查 |
| GET | `/api/v1/stats` | 完整的城市统计数据 |
| GET | `/api/v1/buildings?type=X&flags=X&limit=N` | 建筑物列表,带筛选条件 |
| GET | `/api/v1/traffic` | 交通数据 |
| GET | `/api/v1/transport` | 交通线路 |
| GET | `/api/v1/districts` | 区 |
| GET | `/api/v1/budget` | 经济收支明细 |
| GET | `/api/v1/problems` | 所有建筑物的问题 |
| GET | `/api/v1/changes` | 增量检测 |
| GET | `/api/v1/screenshot` | 触发屏幕截图捕获 |
| POST | `/api/v1/actions/demolish` | `{"buildingId": N}` |
| POST | `/api/v1/actions/demolish-abandoned` | 大规模拆除 |
| POST | `/api/v1/actions/money` | `{"amount": N}` |
| POST | `/api/v1/actions/tax` | `{"service": "X", "rate": N}` |
| POST | `/api/v1/actions/budget` | `{"service": "X", "budget": N}` |
| POST | `/api/v1/actions/speed` | `{"speed": 1-3}` |
| POST | `/api/v1/actions/pause` | `{"paused": true/false}` |
| POST | `/api/v1/actions/chirp` | `{"message": "text"}` |
## 许可证
MIT