diff --git a/README.md b/README.md index 40251a4..68a9731 100644 --- a/README.md +++ b/README.md @@ -345,10 +345,15 @@ commit SHA so an older score can never authorize a replacement head. start an MCP subprocess. - Claude Code: install the plugin under `adapters/claude-code`. - Cursor: copy the files under `adapters/cursor` or use its MCP configuration. + Cursor CLI can power an Astro source checkout by copying + `adapters/cursor/.cursor/mcp.astro.json` to `.cursor/mcp.json`; that config + launches the local `./packages/agent-merge-queue[mcp]` package instead of the + public release. - Other clients: connect `deploybot-mcp` over stdio or call the CLI directly. The Claude Code and Cursor MCP configurations launch the pinned public release -with `uvx`. +with `uvx`; the Astro Cursor CLI variant uses the same command against the +source tree package. The `mergeq` and `mergeq-mcp` command aliases remain for compatibility. ## Command overview diff --git a/adapters/cursor/.cursor/mcp.astro.json b/adapters/cursor/.cursor/mcp.astro.json new file mode 100644 index 0000000..d23eaf3 --- /dev/null +++ b/adapters/cursor/.cursor/mcp.astro.json @@ -0,0 +1,12 @@ +{ + "mcpServers": { + "deploybot": { + "command": "uvx", + "args": [ + "--from", + "./packages/agent-merge-queue[mcp]", + "deploybot-mcp" + ] + } + } +} diff --git a/tests/test_skill.py b/tests/test_skill.py index 53acb29..0fe2fd6 100644 --- a/tests/test_skill.py +++ b/tests/test_skill.py @@ -179,6 +179,27 @@ def test_cursor_adapter_exposes_status_workflow(self) -> None: self.assertIn("never freeze a", rule) self.assertIn("queue merely to inspect it", rule) + def test_cursor_cli_can_use_astro_source_tree_package(self) -> None: + config = json.loads( + ( + ROOT / "adapters" / "cursor" / ".cursor" / "mcp.astro.json" + ).read_text(encoding="utf-8") + ) + args = config["mcpServers"]["deploybot"]["args"] + + self.assertEqual(config["mcpServers"]["deploybot"]["command"], "uvx") + self.assertIn("./packages/agent-merge-queue[mcp]", args) + self.assertIn("deploybot-mcp", args) + self.assertNotIn(RELEASE_COMMIT, " ".join(args)) + + def test_readme_documents_cursor_cli_for_astro(self) -> None: + readme = (ROOT / "README.md").read_text(encoding="utf-8") + + self.assertIn("Cursor CLI", readme) + self.assertIn("Astro source checkout", readme) + self.assertIn("mcp.astro.json", readme) + self.assertIn("./packages/agent-merge-queue[mcp]", readme) + def test_github_workflow_wakes_after_named_ci_finishes(self) -> None: workflow = (ROOT / "examples" / "github-workflow.yml").read_text( encoding="utf-8"