agy-mcp-plugins
Wire MCP servers and package/install plugins into Google's Antigravity (AGY)
image so an AGY worker can reach the flywheel substrate (Agent-Mail, the br/beads
bridge) and run the AgentOps corpus in its own harness. Sibling of agy-native,
which drives the loop; this skill supplies the tool surface that loop runs against.
Overview / When to Use
AGY's extension surface is plugins — a plugin tree (plugin.json + skills/,
subagents/, hooks.json, and a mcpServers declaration) imported, validated,
and enabled through agy plugin {import,validate,install,enable,disable,uninstall,link,list}.
MCP servers reach AGY through that plugin model (declared in a plugin's
mcpServers, or via the AGY settings at ~/.gemini/settings.json), not through a
standalone gemini-cli mcp subcommand. A bare SKILL.md under ~/.gemini/skills/
is portable and needs no plugin.json just to expose a skill — but a tool server
must be declared, enabled, and reachable before any skill that depends on it runs.
Use this skill when standing up the AGY lane in the flywheel, when a freshly built MCP server must become reachable to an AGY worker, or when distributing the AgentOps bundle to AGY as a plugin.
This is operator-side: it drives the flywheel harness. Never surface these commands or this framing in client-facing AI Partner content.
AGY ≠ gemini-cli. Do not reach for gemini mcp, gemini extensions, or
gemini -p — those belong to the retired gemini-cli image. AGY's runtime is
agy / agy -p, and its extension unit is the plugin.
⚠️ Critical Constraints
- Rule 1 — Verify the live surface first. Run
agy plugin help(andagy plugin <sub> --help) before acting. Why: the subcommand shape shifts between Antigravity releases; acting on a remembered shape silently writes a malformed plugin or settings entry that breaks lateragyruns. - Rule 2 — List before and after every mutation. Run
agy plugin listbefore and after import/install/enable/disable. Why: the effective tool surface is the list output, not the command you believed you ran. - Rule 3 — Declare only scoped MCP servers. Register only the servers the AGY task actually needs (Agent-Mail, the br bridge, a specific connector). Why: every registered server widens the tool blast radius an AGY worker can call.
- Rule 4 — Disable before uninstall when uncertain. Prefer
agy plugin disable <name>as the reversible first step overuninstall. Why: uninstalling a working plugin destroys config that may belong to another lane; disable is recoverable. - Rule 5 — Never inline secrets. Declare MCP tokens by env-var reference in
the plugin's
mcpServers/ settings, never as a literal in a tracked file. Why:plugin.jsonand~/.gemini/settings.jsonare plaintext and often synced across the fleet — an inlined token leaks everywhere. - Rule 6 — Keep the
dcgguard wired.~/.gemini/settings.jsoncarries aBeforeTool→dcghook onrun_shell_command; do not remove or shadow it when adding plugins/servers. Why: it blocks destructive commands that an auto-approved AGY worker would otherwise run. - Rule 7 — Operator-side; invoke-never-rebuild. Drive
agy; do not re-author AGY, do not write under~/dev/agentops, do not push agentops. Why: AGY is Emanuel's substrate — own a thin adapter, not the tool.
Workflow / Methodology
Phase 1: Inventory the current surface
agy plugin help # confirm the live subcommand shape (Rule 1)
agy plugin list # installed plugins + enabled state (the BEFORE list)
Record installed plugins, their enabled state, and any MCP servers already declared
in ~/.gemini/settings.json / enabled plugins.
Checkpoint: the target plugin/server name is NOT already present, OR you have
decided repair vs. leave-as-is. Do not blind-add over an existing name.
Phase 2: Declare an MCP server (the tool-reach path)
AGY reaches an MCP server through a plugin's mcpServers declaration (or the AGY
settings). A minimal plugin tree exposing one server:
agy-tools/
plugin.json # { "name":"agy-tools", "version":"0.1.0",
# "mcpServers": { "agent-mail": { "command":"mcp-agent-mail" },
# "beads-br": { "command":"br", "args":["mcp"],
# "env": { "BR_DB": "$BR_DB" } } } }
For a remote/HTTP MCP, declare its url and a *_ENV_VAR token reference (never
the literal token — Rule 5). Validate, then install + enable:
agy plugin validate ./agy-tools
agy plugin install ./agy-tools # reads plugin.json (or name@marketplace)
agy plugin enable agy-tools
agy plugin list # the AFTER list — server-bearing plugin enabled
Checkpoint: agy plugin list shows the plugin enabled; the declared server
appears in the effective surface with the expected scope.
Phase 3: Ship a plugin bundle (the distribution path)
Distribute the AgentOps bundle the AGY-native way — import an existing tree or
install from a plugin.json / marketplace reference:
agy plugin import claude # pull an existing Claude plugin tree into AGY
agy plugin import gemini # or an existing gemini plugin tree
agy plugin validate ./agentops-bundle
agy plugin install ./agentops-bundle # local tree
agy plugin install agentops@<marketplace> # or a marketplace reference
agy plugin enable agentops
Portable-skill note: the corpus already lives at ~/.gemini/skills/<name>/SKILL.md
and AGY reads SKILL.md directly — no plugin.json is needed just to expose a
skill; the plugin path is for servers, subagents, hooks, and bundled distribution.
Checkpoint: agy plugin list shows the bundle installed and enabled from the
expected source.
Phase 4: Smoke-test the tool surface
Run a read-only AGY worker that exercises the wiring; capture output and exit code:
agy -p --add-dir "$REPO" \
"List your available MCP tools and call one safe read-only tool. Do not edit."
Checkpoint: the worker enumerates the expected servers and reaches at least one tool. The config is not "wired" until a worker actually uses it.
Output Specification
Format: plugin/MCP wiring on the AGY image + machine-/human-readable
verification output.
Filename / path: plugin trees live in their own dirs (plugin.json owns the
declaration); AGY-global MCP/hook settings live in ~/.gemini/settings.json
(let agy plugin own plugin writes; edit settings only for AGY-global MCP/hooks).
Structure: for each change report — before/after agy plugin list; plugin and
server names imported/installed/enabled/disabled/uninstalled; smoke-test command +
exit code; explicit rollback commands (agy plugin disable/uninstall).
Quality Rubric
- Ran
agy plugin helpbefore acting — no remembered subcommand shape (Rule 1) - Captured before/after
agy plugin listfor every mutation (Rule 2) - Declared only the MCP servers the task needs — scoped surface (Rule 3)
- Used
disablebeforeuninstallwhen uncertain — reversible first (Rule 4) - No secret inlined; tokens by env-var reference in plugin/settings (Rule 5)
-
dcgBeforeTool hook still present in~/.gemini/settings.json(Rule 6) - Nothing written under
~/dev/agentops; no agentops push (Rule 7) -
agy plugin validatepassed; end-to-end verified by a real AGY worker - No gemini-cli surface used (
gemini mcp/gemini extensions/gemini -p) - Backstage: no client-facing surface mentions these commands or framing
Examples
- Reach Agent-Mail from an AGY flywheel worker: declare
agent-mailin a plugin'smcpServers,agy plugin validate && agy plugin install ./agy-tools && agy plugin enable agy-tools, thenagy plugin listto confirm. - Reach br/beads via an MCP bridge: declare
beads-brwithcommand: br,args: ["mcp"], andenv.BR_DB: "$BR_DB"(env-ref, not literal). - Ship the staged AgentOps bundle to AGY:
agy plugin import claudeto pull the existing tree, thenagy plugin install ./agentops-bundle && agy plugin enable agentops. - Reversible removal:
agy plugin disable agy-tools(confirm via list) beforeagy plugin uninstall agy-tools.
Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
agy plugin install fails: "failed to read plugin.json" |
target isn't a plugin dir / missing plugin.json |
point at a dir containing plugin.json, or use name@marketplace; for a bare skill use ~/.gemini/skills/ |
| Plugin installed but its MCP tools never appear | plugin not enabled, or mcpServers malformed |
agy plugin enable <name>; re-validate; check ~/.gemini/settings.json for the effective server entry |
| MCP server command/url wrong | bad command/args/url in mcpServers |
test the server outside AGY, fix the declaration, re-validate + re-enable |
| Worker tried a destructive command | auto-approve under --dangerously-skip-permissions |
the dcg BeforeTool hook should block it — confirm it's wired in ~/.gemini/settings.json (Rule 6) |
| Unknown plugin/server appears | shared local AGY config from another lane | agy plugin disable <name> first, then ask before uninstall (Rule 4) |
Reached for gemini mcp and it failed |
gemini-cli surface, retired | AGY uses plugins + ~/.gemini/settings.json, not gemini mcp/extensions |
See Also / References
agy-native— drives the loop this skill supplies tools to (sibling AGY skill)agy plugin help,agy plugin <sub> --help— the live, authoritative surfaceagent-mail— the multi-agent coordination MCP most often wiredbeads-br— the br/beads tracker reached via an MCP bridgedcg— the destructive-command guard wired as AGY'sBeforeToolhook~/.gemini/settings.json— AGY-global MCP/hook settings backing the image