Files
msd-core/docs/how-to/connect-gsd-mcp-server.md
Tom Boucher 8f2ebbe9bf feat(#1928): remove sunset Gemini CLI runtime, redirect to Antigravity (#1996)
* feat(#1928): remove sunset gemini cli runtime, redirect to antigravity

Google sunset Gemini CLI on 2026-06-18; Antigravity CLI is its official successor (already a first-class GSD runtime). Remove the gemini runtime from the enum (16->15), aliases, labels, config-home fragment, install path, converters (convertClaudeToGemini{Markdown,Toml,Agent}, convertSlashCommandsToGeminiMentions), capability descriptor, gemini-extension.json, RULESET.GEMINI.*, and the interactive menu (renumbered, no gap).

--gemini now prints an explicit deprecation notice citing the 2026-06-18 sunset and redirects to --antigravity (no silent alias, per the issue's Hyrum's-Law rejection). Antigravity is preserved throughout: its GEMINI.md contextFileName, .gemini/antigravity config home, the shared convertGeminiToolName/claudeToGeminiTools tool vocabulary, and the 'gemini' hookEvents dialect it declares. GEMINI.md retargeted as Antigravity's context file.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* chore(#1928): backfill changeset PR number (#1996)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* chore(#1928): drop Gemini CLI from issue templates (review nit)

Removes the sunset Gemini CLI runtime from the two GitHub issue-template
runtime lists that the removal PR missed, per @davesienkowski's review nit:
- feature_request.yml: 'Applicable runtimes' checkbox (a user could otherwise
  request a feature for a runtime GSD no longer supports)
- bug_report.yml: 'Runtime' dropdown + the stale ~/.gemini/settings.json
  retrieval-help line

Leaves the post-removal templates fully consistent with the Antigravity redirect.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 13:32:51 -04:00

3.0 KiB

How to connect a host to the GSD companion MCP server

This guide shows you how to make a MCP-capable host (Claude Code, Codex, OpenCode, VS Code, Antigravity CLI, Cursor, Cline, Hermes) drive GSD — run GSD commands and read/write .planning/ state — through the companion MCP server, with no bespoke plugin.

Once connected, three tools appear in the host alongside its others: gsd_invoke_command, gsd_read_state, gsd_write_state. (For the tool contracts, see the reference section below; for why this server exists and its trust model, see ADR-1239 and the capability trust model.)

1. Add the server to your host's MCP config

The entry shape is the same everywhere; only the config file and key differ by host.

{
  "gsd": {
    "command": "npx",
    "args": ["-y", "@opengsd/gsd-core", "gsd-mcp-server"],
    "cwd": "/abs/path/to/your/project"
  }
}
  • Claude Code / Codex / OpenCode / Cursor / Cline / Hermes — under the host's mcpServers object (project or user config).
  • VS Code — in the workspace MCP servers list.
  • Antigravity CLI — under its mcpServers block.

Set cwd to the project whose .planning/ you want GSD to manage — the server resolves state paths against it.

2. Restart the host

On startup the host performs the MCP initialize handshake, lists tools, and the three GSD tools become callable.

3. Verify

Ask the host to read an existing planning file:

{ "name": "gsd_read_state", "arguments": { "path": "/abs/path/to/your/project/.planning/STATE.md" } }

It returns the file's contents. gsd_invoke_command takes {family, subcommand, args} and returns the command-routing hub's structured result (the same shape gsd-tools produces).

If something does not work

  • command not found: gsd-mcp-server — invoke via npx as shown above, or install the package globally first (npm i -g @opengsd/gsd-core).
  • gsd_read_state fails with ENOENT — the path is resolved literally; pass an absolute path under the project's .planning/.
  • The host lists no GSD tools — confirm the server starts in isolation: npx @opengsd/gsd-core gsd-mcp-server then send an initialize request on stdin; it writes a protocolVersion response and exits on EOF.
  • You manage multiple projects — register one gsd entry per project with a distinct name and cwd; the server is stateless across projects.

Reference — the three tools

Tool Arguments Returns
gsd_invoke_command {family: string, subcommand: string, args?: unknown[]} the command-routing hub result ({ok, …}) as JSON text
gsd_read_state {path: string} the file contents as text
gsd_write_state {path: string, content: string} {ok: true, path} as JSON text

Errors from a tool are returned as MCP tool errors (isError: true), not as JSON-RPC protocol errors — the host surfaces them in its normal tool-failure UX.