mcpField
C
Courtship

Courtship

本地服务
github.com/grimmdev开发工具01 周前更新

关于 Courtship

Courtship 是用于 LOVE 游戏开发的 MCP 运行时、代理和基准测试 CLI,面向游戏开发者及 Agent。它将游戏检查、Lua 执行、输入模拟、崩溃恢复和文档索引整合在一起,并可代理上游 MCP 服务、压缩工具响应。

主要功能

  1. 01按需发现工具并加载 Schema
  2. 02路由游戏任务并压缩响应
  3. 03模拟输入并确定性推进帧
  4. 04检查游戏状态并执行 Lua
  5. 05捕获崩溃并支持修复后恢复
  6. 06运行任务级基准测试

适用场景

  1. 01让 Agent 检查 LOVE 游戏状态
  2. 02测试输入操作及物理行为
  3. 03在游戏崩溃后诊断并迭代修复
  4. 04比较 MCP 工作流的调用、延迟和令牌用量

MCP 相关

Courtship 可通过 stdio 或 HTTP 作为 MCP 运行时及代理,为客户端提供游戏工具,并管理上游 MCP 服务。其代理按需加载工具 Schema、整形响应并记录会话用量。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"grimmdev-courtship": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/grimmdev/courtship:1.0.2"
]
}
}
}
启动命令docker run -i --rm ghcr.io/grimmdev/courtship:1.0.2

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/grimmdev/courtship:1.0.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

横幅

你的 Agent 与 LOVE 游戏之间的协议层。

courtship(court)是一个一体化、以效率为准则的 MCP 运行时和任务级基准测试工具,专为 LOVE 游戏开发而设计。它在单个零依赖静态二进制文件中原生封装了实时游戏检查、代码执行、Agent Joypad 输入模拟、安全崩溃恢复,以及 LOVE 12 API 离线文档索引;同时也可作为效率治理代理,置于现有上游服务之前。

CI Release License Glama


1. 问题与论点

LOVE 模型上下文协议(MCP)生态系统功能齐全,却缺乏治理。原始桥接会在每次交互时输出单体游戏状态对象、冗长的文档转储以及数百个未经筛选的键,导致上下文膨胀和 Token 成本飙升。

Courtship 充当测量与优化层,验证三项基础论断:

论断目标实测结果状态
1. 常驻上下文开销将常驻架构上下文减少 >=70%减少 76.5%(340 对比 1,450 个 Token)已证实
2. 响应整形开销将每项任务的 Token 开销减少 >=40%平均减少 53.4%已证实
3. 统一路由器效率混合任务中优于独立 MCP 服务借助本地 FTS5,延迟降低 40%,调用次数减少 33%已证实

2. 架构

+-----------------+       MCP (stdio/HTTP)       +--------------------------------+
|   AI Client     |<---------------------------->|  court proxy                   |
| (Claude Code,   |   ~340 token                 |  +- meta-tools (5 standing)    |
|  Cursor, IDE)   |   standing surface           |  +- heuristic router           |
+-----------------+                              |  +- response shaper & cursors  |
                                                 |  +- session token ledger       |
                                                 |  +- upstream pool manager      |
                                                 +---------------+----------------+
                                                                 | MCP
                                       +-------------------------+--------------------------+
                                       |                         |                          |
                                       v                         v                          v
                                   LovePilot               LOVE 12 Docs            Custom Game Servers
                                       |                   (SQLite FTS5)
                                       v
                                   LOVE Game
                                  (TCP 12345)

代理以带内部注册表的守护进程运行,而非简单的直通代理。工具架构会保留在守护进程端,直到按需加载;闲置 N 个轮次后过期。


3. GitHub MCP 注册表与客户端设置

Courtship 已发布至官方模型上下文协议(MCP)注册表,并使用经过验证的命名空间:

io.github.grimmdev/courtship
在 VS Code / Cursor / Claude Desktop 中安装
选项 A:原生二进制文件(最快)

从 Releases 下载二进制文件,或通过 cargo build --release --bin court 构建。

将其添加到 MCP 客户端配置(mcp.json 或 claude_desktop_config.json)中:

{
  "mcpServers": {
    "courtship": {
      "command": "court",
      "args": ["proxy"]
    }
  }
}
选项 B:通过 Docker / GitHub Packages 容器化运行

无需安装本地依赖即可运行:

{
  "mcpServers": {
    "courtship": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/grimmdev/courtship:latest"
      ]
    }
  }
}

4. 核心功能

4.1 常驻接口(少于 500 个 Token)

常驻上下文中仅永久公开 5 个精简元工具(约 340 个 Token),保持上下文清爽,同时让 Agent 能按需发现或调用任意游戏工具:

  • discover_tools(query, limit):模糊发现工具,无需加载架构。
  • load_tool_schema(name):按需加载完整 JSON 架构。
  • call_tool(name, args):通过压缩过滤器执行工具。
  • love_task(goal, context):智能意图路由器(文档、检查或执行)。
  • report_usage():统计会话 Token 数、调用次数和延迟。
4.2 内置游戏功能(通过 call_tool 和 discover_tools 使用)
  • simulate_input(sequence):Agent Joypad:分派定时键盘输入(press、keydown、keyup)。
  • step_frames(count, dt):确定性帧步进:以固定的 dt 将物理模拟推进 N 个刻度。
  • get_last_crash():安全崩溃诊断:恢复非致命堆栈跟踪和局部变量。
  • clear_crash():热修补后恢复游戏循环。
  • visual_diff(image_a, image_b):视觉回归:比较两张截图并返回边界框。
  • get_objects():以精简格式返回活动实体的坐标和类型。
  • get_screenshot():返回缩小并裁剪后的 PNG 帧缓冲区。
  • run_lua(code):在游戏循环中执行任意 Lua 代码。
4.3 安全崩溃拦截(覆盖 love.errhand)

当 Agent 引入错误时,防止臭名昭著的 LOVE “蓝屏死机” 导致进程崩溃或 MCP 桥接中断:

  • 替换 love.errhand,暂停执行并显示游戏内诊断 HUD,而不是终止程序。
  • 提取出错的源文件、行号、debug.traceback() 和活动局部变量。
  • 保持 TCP 套接字监听器处于活动状态,以便 Agent 通过 get_last_crash() 检查故障、编写修复并热重载。
4.4 Agent Joypad 和确定性物理验证

让 Agent 能够测试需要时间和移动的游戏机制:

  • 输入序列:分派定时操作序列(例如,按住 D 1.2s,按下 Space,然后释放)。
  • 帧步进:以固定增量时间(默认 1/60)按精确帧数推进 love.update(dt),在验证平台游戏物理和碰撞时消除墙上时钟抖动。
4.5 8 条规则的响应整形器

每个工具返回值和通知都会经过确定性整形:

  1. 字段投影:将实体图精简为 {id, type, name, x, y}。
  2. 剔除空值和空内容:移除空数组、对象和空字符串。
  3. 深度上限:将超过 3 层的深层对象图折叠为 "<table: N keys>"。
  4. 数组切片和游标:对超过 50 项的数组进行切片,并将游标提示存储在内存中。
  5. 令牌上限:自动截断并控制超出 max_tokens 的载荷。
  6. 截图压缩:通过区域裁剪和双线性缩小(默认 0.5)防止视觉令牌激增。
  7. 增量模式:连续流(watch_game_state)会抑制相同的刻度,令牌数降至 0。
  8. 精简文档:移除 Wiki 导航界面并对代码示例去重。
4.6 零插桩启动器(court run)

动态包装任何现有 LOVE 游戏:

court run ./mygame --mcp-port 12345

自动挂载源文件并挂接 love.update、love.draw 和桥接,无需修改你的代码库。若要手动集成,court init 会生成 5 行的内联挂接代码。


5. 基准测试结果

在参考套件上运行 court bench --compare lovepilot,courtship:

task                     tokens   calls   p95ms  turns  success
--------------------------------------------------------------
fix-double-jump             316       2     110      2     PASS
spawn-coin                  307       2     110      2     PASS
--------------------------------------------------------------
TOTAL (per task)            311       2     110      2      2/2
vs lovepilot          -54.3%   -33%    -40%     -         -
参考套件细分
  • platformer(物理模拟 + 跳跃逻辑):令牌减少 54.3%
  • ui_heavy(绘制调用压力测试 + 小地图 + HUD):令牌减少 52.1%
  • menu_nested(6 层深的 UI 实体树):令牌减少 53.9%

6. CLI 参考

运行 MCP 代理
court proxy --port 12345
court proxy --eager # Fallback exposing full upstream tools
运行基准测试和 CI 回归门禁
# Compare candidate against raw baseline
court bench --suite ./suites/platformer.yaml --compare lovepilot,courtship

# Enforce CI gate (fails if regression exceeds threshold)
court bench --suite ./suites/platformer.yaml --ci --max-regression 10.0

# Submit signed benchmark to community leaderboard
court bench --suite ./suites/platformer.yaml --compare lovepilot,courtship --submit
启动 LOVE 游戏
court run ./fixtures/platformer
court run ./fixtures/platformer --shim-only
离线文档索引
court docs search "rectangle"
court docs search "love.physics.newWorld"
环境和令牌开销审计
court doctor
court doctor --ci

7. 配置(courtship.toml)

[proxy]
port = 12345
max_response_tokens = 1500
evict_after_turns = 6
delta_notifications = true
eager = false

[upstream.lovepilot]
transport = "stdio"
command = "uvx"
args = ["--from", "./love-mcp", "love-mcp-server"]
shape = { get_objects = "lean", get_screenshot = "scaled" }

[upstream.docs]
transport = "builtin"
index = "./lua54-love12.sqlite"

[bench]
suite_dir = "./suites"
baseline = ".courtship/baseline.json"
max_regression = "10%"

8. 许可证

采用双重许可,可任选其一:

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。