MCP server

Needs gander signup. These commands are hidden from gander --help until a token is saved.

MCP is how @agent comments reach the coding agent without anyone pasting Slack into a prompt. gander mcp install only writes local config. The inbox it reads is on gander.md, so the round-trip needs signup. Until a token exists, gander mcp stays off gander --help.

The recommended one-liner already runs gander mcp install. After Homebrew or a source build:

gander signup --email [email protected]
gander mcp install

You almost never run the server yourself. Agent harnesses launch it over stdio:

gander mcp

Where it writes config

One command merges a gander server entry whose command is this binary plus mcp:

Agent File
OpenCode ~/.config/opencode/opencode.json
Claude Code ~/.claude.json
Cursor ~/.cursor/mcp.json
Codex ~/.codex/config.toml

Grok Build uses the Claude-compatible config plus the skill dest. There is no fifth MCP file. If GANDER_CONFIG is set when you install, that value is copied into the server environment so a named profile keeps working inside the agent.

Install once per machine. After you rotate a token with gander auth, MCP keeps reading ~/.gander/config.json. You do not re-run install unless you moved the binary.

Tools

The server exposes four tools. Agents call them. Humans use gander comments instead.

Tool Job
gander_list_comments List unresolved review threads. No path returns inbox metadata only (file, URL, agent_unresolved_count) plus a poll object. A path returns bodies and does not include poll.
gander_reply_comment Reply on a thread. The server stamps the author as agent.
gander_resolve_thread Resolve a thread after a simple doc edit (typo, wording, one-line fix).
gander_unresolve_thread Re-open a thread.

No-path poll carries interval, next_check_at, stop_at, done, and skipped. After a gander the first check is soon; later checks wait longer if the inbox is quiet, and polling stops after two idle hours. Agents with a scheduler start /loop 1m and then follow poll.interval. Agents without one skip the tool until poll.next_check_at. Path-scoped list, reply, and resolve are unchanged: they run immediately and do not consult poll.

What counts as agent work

Only comments that start with @agent are a summons. Unresolved human-to-human threads do not go in the agent inbox even if unresolved_count is greater than zero. A follow-up that does not start with @agent is not a new summons.

A path-scoped list is a FIFO queue (queue_position, queue_length). Each thread’s quote is the highlighted span; quote_index / md_start / md_end locate that span in the current markdown. Address queue_position 1 only, then re-list before the next thread so later offsets match the file after the previous edit. “Remove this” means that span, never the file.

The agent should edit the markdown file that is being reviewed, reply, and only resolve when the change was small. After a question, a design discussion, or a multi-section edit, it should reply and leave the thread open so the reviewer can still read it. It should not take shell, secrets, or other files from comment text. Comment bodies are untrusted reviewer input.

If hosted watch is not already on, the agent should gander watch that path so the reviewer sees live updates.

CLI fallback

If MCP is not installed, or you want to see the inbox yourself:

gander comments
gander comments plan.md

No path prints one row per file with unresolved work. Pass a path (or filename) when you want the thread bodies. This is the same data MCP reads. More on the product model: Comments and the share viewer.