星露谷MCP大桥
一个混合AI控制的游戏模组,通过模型上下文协议(MCP)将Stardew Valley与AI助手连接起来。使自主AI代理能够通过实时游戏状态同步来控制和玩Stardew Valley。
建筑
┌─────────────────────────────────────────────────────────┐
│ STARDEW VALLEY (Game) │
│ SMAPI Mod (C# .NET 6) │
│ ModEntry → GameStateSerializer │
│ → CommandExecutor (w/ Pathfinder) │
│ → WebSocketServer │
└─────────────────────────────────────────────────────────┘
↕ ws://localhost:8765/game
┌─────────────────────────────────────────────────────────┐
│ MCP Server (Go) │
│ GameClient: WebSocket connection, state tracking │
│ StardewAgent: 12 tools + 30 cheats, autonomous loop │
└─────────────────────────────────────────────────────────┘
↕ Copilot SDK
┌─────────────────────────────────────────────────────────┐
│ Claude Sonnet (via GitHub Copilot SDK) │
└─────────────────────────────────────────────────────────┘先决条件
对于SMAPI Mod
对于MCP服务器
- 转到1.23+
- GitHub Copilot访问权限(Claude Sonnet通过Copilot SDK访问)
建筑
1.构建C#Mod
cd mod/StardewMCP
dotnet build这编译 StardewMCP.dll 并将其放入 bin/Debug/net6.0/.
2.构建Go MCP服务器
cd mcp-server
go build -o stardew-mcp这产生了 stardew-mcp 可执行。
安装
安装SMAPI模块
- 构建mod(见上文)
- 复制整个
mod/StardewMCP/bin/Debug/net6.0/文件夹到您的Stardew Valley mods目录:
- 视窗: %AppData%\StardewValley\Mods\StardewMCP\ - macOS: ~/.config/StardewValley/Mods/StardewMCP/ - Linux: ~/.config/StardewValley/Mods/StardewMCP/
- 复制
manifest.json到同一文件夹
或者使用SMAPI的mod文件夹结构:
Mods/
└── StardewMCP/
├── manifest.json
├── StardewMCP.dll
└── (other build outputs)用法
1.与SMAPI一起开启星露谷
通过SMAPI启动游戏。mod将自动启动WebSocket服务器 ws://localhost:8765/game.
2.加载保存文件
一旦你加载到游戏保存中,模组就会激活。
3.运行MCP服务器
cd mcp-server
./stardew-mcp # Run with default autonomous mode
./stardew-mcp -auto=false # Connect without starting AI agent
./stardew-mcp -goal "Clear the farm and plant parsnips"
./stardew-mcp -url ws://localhost:8765/game # Custom WebSocket URL服务器通过WebSocket连接到游戏,并开始自主AI代理循环。
可用的AI工具
AI代理可以访问12个工具来控制游戏:
| 工具 | 说明 |
|---|---|
move_to | 使用A\*寻路导航到特定坐标 |
get_surroundings | 获取当前游戏状态和61x61 ASCII地图视觉 |
interact | 与某个位置的对象/NPC交互 |
use_tool | 使用当前配备的工具 |
use_tool_repeat | 连续多次使用工具 |
face_direction | 让玩家面向一个方向 |
select_item | 按名称从库存中选择一个项目 |
switch_tool | 切换到特定工具 |
eat_item | 食用食物以获取能量 |
enter_door | 输入建筑或扭曲点 |
find_best_target | 为当前工具找到最佳目标 |
clear_target | 清除当前目标 |
作弊模式
作弊模式提供即时上帝模式功能,用于快速测试或无压力游戏。 必须致电 cheat_mode_enable 第一 在任何其他作弊命令生效之前。
模式控制
| 工具 | 说明 |
|---|---|
cheat_mode_enable | 启用作弊模式(首先需要) |
cheat_mode_disable | 禁用作弊模式和所有持久效果 |
cheat_time_freeze | 打开/关闭时间冻结 |
cheat_infinite_energy | 打开/关闭无限耐力 |
传送
| 工具 | 说明 |
|---|---|
cheat_warp | 远程传输到位置(农场、城镇、山脉、海滩、森林、矿山、沙漠) |
cheat_mine_warp | 扭曲到特定地雷级别(1-120=地雷,121+=骷髅洞) |
农业自动化
| 工具 | 说明 |
|---|---|
cheat_clear_debris | 清除所有杂草、石头、树枝、草 |
cheat_cut_trees | 砍伐所有树木,收集木材/硬木 |
cheat_mine_rocks | 开采所有岩石/巨石,收集矿石 |
cheat_hoe_all | 直到所有可挖掘的瓷砖 |
cheat_water_all | 给所有耕种的土壤浇水 |
cheat_plant_seeds | 在所有空锄头瓷砖上播种(需要种子ID) |
cheat_fertilize_all | 给所有锄地的瓷砖施肥 |
cheat_grow_crops | 立即种植所有作物,准备收割 |
cheat_harvest_all | 收割所有熟作物 |
cheat_dig_artifacts | 挖出所有文物点 |
图案绘制
| 工具 | 说明 |
|---|---|
cheat_hoe_tiles | 按坐标显示特定的瓷砖(瓷砖=“x,y;x,y”) |
cheat_clear_tiles | 清除特定瓷砖 |
cheat_hoe_custom_pattern | 使用ASCII网格输入绘制形状 |
资源和项目
| 工具 | 说明 |
|---|---|
cheat_set_money | 设置黄金金额 |
cheat_add_item | 按ID添加项目(例如,“(O)465”表示杨桃种子) |
cheat_spawn_ores | 添加矿石:铜、铁、金、铱、煤 |
cheat_set_energy | 将耐力恢复到最大值 |
cheat_set_health | 将健康恢复到最大值 |
社交
| 工具 | 说明 |
|---|---|
cheat_set_friendship | 与NPC建立友谊(心1-10或分) |
cheat_max_all_friendships | 最大化所有NPC友谊 |
cheat_give_gift | 立即向NPC赠送礼物 |
升级
| 工具 | 说明 |
|---|---|
cheat_upgrade_backpack | 升级背包(12、24或36个插槽) |
cheat_upgrade_tool | 升级工具(0=基本到4=铱) |
cheat_upgrade_all_tools | 将所有工具升级到指定级别 |
cheat_unlock_all | 最大限度地利用一切:背包、工具、食谱、技能 |
示例:即时农场设置
1. cheat_mode_enable
2. cheat_warp Farm
3. cheat_clear_debris, cheat_cut_trees, cheat_mine_rocks
4. cheat_hoe_all
5. cheat_plant_seeds (with seedId "472" for parsnips)
6. cheat_grow_crops
7. cheat_harvest_allWebSocket协议
mod和服务器通过WebSocket上的JSON进行通信。
请求格式:
{
"id": "uuid",
"type": "command",
"action": "move_to",
"params": {"x": 10, "y": 20}
}响应格式:
{
"id": "uuid",
"type": "response",
"success": true,
"message": "Moved to position",
"data": {}
}配置
- WebSocket端口:默认值
8765(配置于WebSocketServer.cs) - 工具冷却:工具摆动之间有30个游戏节拍(60fps时约0.5秒)
- 国家广播:游戏状态每1秒发送一次
- 路径寻找:A\*具有50000次迭代限制,30个图块扫描半径
故障排除
模块未加载:确保安装了SMAPI 4.0.0+,并且mod文件位于正确的Mods文件夹结构中。
WebSocket连接失败:检查游戏是否正在运行,是否已加载保存。服务器每5秒重试一次连接。
寻路失败:A\*算法最多尝试5次路径重新计算。某些区域可能因障碍物而无法到达。
