MCP 游戏服务器
一个模型上下文协议(MCP)服务器,通过统一的工具接口,为AI代理提供访问各种经典游戏、Gymnasium环境以及棋盘游戏的途径。
特点/特性
- 33+ MCP 工具 用于游戏互动
- 视觉渲染 - 返回游戏状态为base64编码的PNG图像或SVG
- 多种游戏类型 - 经典控制、棋盘游戏、雅达利游戏
- 统一界面 所有游戏类型间的一致API
- 丰富的游戏状态 - 视觉和文本形式的游戏状态信息
安装
# Clone the repository
git clone https://github.com/itsish/mcp-games-public
cd mcp-games-public
# Install dependencies
pip install -r requirements.txt
# Run the server
python -m src.main快速入门
对于Claude Desktop
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"mcp-games": {
"command": "python",
"args": ["-m", "src.main"],
"cwd": "/path/to/mcp-games-public"
}
}
}对于MCP检查员
npx @modelcontextprotocol/inspector python -m src.main支持的游戏
经典控制(体育馆)
- CartPole-v1(译文:杆球平衡问题-v1) - 在移动的车上平衡一根杆
- MountainCar-v0(山地汽车环境v0版本) - 把车开上陡峭的山路
- FrozenLake-v1(冻结湖-v1) - 在结冰的湖面上穿行,避开冰洞
雅达利游戏(Atari Games)
- 逃脱(或突破) - 经典的打砖块街机游戏
棋盘游戏
- 井字棋 - 经典的3x3网格游戏
- 国际象棋 - 完整的国际象棋实现,包含合法走法验证
- 四子棋(或称为“连四棋”) - 移动棋子以连接成四连
- 二十一点(一种纸牌游戏) - 赌场纸牌游戏(选择要牌或停牌以达到21点)
多智能体游戏(PettingZoo)
- 国际象棋(PettingZoo版) - 双人象棋,实现全部规则
可用工具
游戏管理
list_games- 列出所有可用的游戏start_game- 开始一个新的游戏实例get_game_state- 获取当前游戏状态并进行可视化渲染reset_game- 将游戏重置为初始状态end_game- 结束游戏实例并进行清理
杆球平衡动作
cartpole_move_left- 将购物车向左移动cartpole_move_right- 将手推车向右移动cartpole_get_state- 获取小车位置、速度、杆的角度
山地汽车动作(或:山地赛车操作)
mountaincar_accelerate_left- 加速向左行驶mountaincar_accelerate_right- 加速向右行驶mountaincar_coast- 无加速滑行
突破行动
breakout_start- 开始新的消消乐游戏breakout_move- 移动桨板(左/右/保持不动)breakout_get_state- 通过视觉帧获取游戏状态
二十一点游戏行动
blackjack_start- 开始新的二十一点游戏blackjack_hit- 再抽一张牌blackjack_stand- 保持当前手(或保持现状)blackjack_get_state- 获取当前玩家的手牌和庄家的可见牌
井字棋动作
tictactoe_start- 开始新的井字棋游戏tictactoe_place- 在位置放置X或Otictactoe_get_state- 获取棋盘状态
“FrozenLake Actions” 可以翻译为“冰湖动作”或“冰冻湖面行动”,具体取决于上下文和语境。如果是指游戏或模拟环境中的动作,那么“冰湖动作”可能更为贴切;如果是指某种策略或计划的实施,则“冰冻湖面行动”可能更合适。但通常情况下,“冰湖动作”是一个较为通用的翻译
frozenlake_move_up- 让玩家向上移动frozenlake_move_down- 将玩家向下移动frozenlake_move_left- 玩家向左移动frozenlake_move_right- 玩家向右移动
国际象棋动作
chess_move- 下一步棋(例如,“e2e4”)chess_get_legal_moves- 获取当前位置的所有合法走法chess_analyze_position- 获取职位分析与评估
“Connect Four Actions”可以翻译为“四子棋行动”或“连线四行动”,具体取决于上下文和语境,但通常“四子棋”是更常见的翻译,因为它直接关联到了游戏Connect Four(又称“四子棋”或“连线四”)。所以,翻译为“四子棋行动”较为贴切
connectfour_start- 开始新的四子棋游戏connectfour_drop_piece- 在列(0-6)中放置棋子connectfour_get_state- 获取带视觉效果的棋盘状态connectfour_get_valid_moves- 获取有效列的列表connectfour_undo_move- 撤销上一步操作connectfour_get_winner- 检查游戏是否有胜者
PettingZoo 国际象棋动作
pettingzoo_chess_start- 开始PettingZoo棋类游戏pettingzoo_chess_move- 使用动作索引进行移动pettingzoo_chess_get_state- 获取董事会意见/看法pettingzoo_chess_get_legal_actions- 获取法律诉讼指标
示例用法
# Start a game
response = await start_game(game_type="CartPole-v1", player_name="AI_Agent")
# Get visual state
state = await cartpole_get_state(game_id=response.game_id)
# Returns state with base64 PNG image of current frame
# Make a move
result = await cartpole_move_right(game_id=response.game_id)
# For chess
await chess_move(game_id=chess_id, move="e2e4")
legal_moves = await chess_get_legal_moves(game_id=chess_id)视觉渲染
所有游戏均支持在响应中进行视觉渲染:
- PNG 图像对于基于像素的游戏,返回的是Base64编码的字符串
- SVG 渲染适用于桌游和简单环境的矢量图形
- 自动格式选择游戏选择最佳的可视化格式
建筑
- FastMCP 框架基于装饰器的简单MCP服务器实现
- 游戏注册表游戏类型和实例的集中管理
- 体操馆整合与OpenAI Gym环境的直接集成
- 模块化设计易于添加新游戏和环境
要求
- Python 3.10+
- 见
requirements.txt对于包依赖
许可证
麻省理工学院许可证
做出贡献
欢迎投稿!请随时:
- 添加新游戏或环境
- 提高可视化渲染效果
- 增强游戏状态表示
- 修复漏洞或改进文档
支持
如遇到问题或疑问,请在GitHub上提交一个议题。
