agy-headless-bridge MCP server
This server lets an agent delegate prompts to the Google Antigravity CLI (agy) headlessly and get cleaned text output back, via two tools.
agy_ask— send a one-shot prompt toagy(Gemini via Antigravity) for focused coding, debugging, or reasoning tasks; returns agy's response as text.prompt(required) — the prompt to send.workspace—auto(default) adds the server's cwd so agy sees the repo for coding tasks;nonefor research/Q&A needing no repo context.add_dir— explicit list of directories to add to agy's workspace, overriding theworkspacedefault.model— pick the agy--model.timeout— override the hard timeout in seconds for long tasks.skip_permissions— let agy edit files / run commands unattended (refused unless the server was started withAGY_BRIDGE_ALLOW_SKIP_PERMISSIONS=1).
agy_research— ask Antigravity to research a topic deeply; takes a requiredqueryand never attaches a workspace.Handles the non-TTY empty-output problem by running agy in a pseudo-terminal and cleaning ANSI/TUI noise, so you get readable text back (with timeout/quota/error notes on failure).
Allows interaction with Google's Antigravity CLI (agy) through a pseudo-terminal, enabling AI agents to ask prompts and perform research using Gemini models via the Antigravity platform in headless environments.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@agy-headless-bridge MCP serverask: explain closures in one line"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
agy-headless-bridge
Call the Google Antigravity CLI (agy) headlessly — and actually get output back.
Codename PtyGravity · pty + antiGravity
📖 Architecture & docs → rhishi99.github.io/agy-headless-bridge
TL;DR — the problem, before & after
agy -p "<prompt>" prints nothing when its stdout is not a real terminal.
So calling it from a subprocess, an MCP server, CI, or another coding agent
(Claude Code, Codex, …) returns an empty string and exit 0 — silently. This
package gives agy a fresh pseudo-terminal so it emits normally, then cleans
the output.
flowchart TB
subgraph B["❌ BEFORE — agy -p from any non-TTY caller"]
direction TB
a1["subprocess · MCP · CI · agent"] --> a2["agy -p "prompt""]
a2 --> a3["stdout gated by isatty()"]
a3 --> a4["(empty string)<br/>exit 0 · no error · no output"]
end
subgraph A["✅ AFTER — through agy-headless-bridge"]
direction TB
b1["subprocess · MCP · CI · agent"] --> b2["run(prompt)"]
b2 --> b3["allocate fresh pseudo-terminal"]
b3 --> b4["agy -p "prompt"<br/>isatty() == True"]
b4 --> b5["clean() strips ANSI/TUI"]
b5 --> b6["clean text ✓"]
end
classDef bad fill:#2a1313,stroke:#f87171,color:#ffd9d9;
classDef good fill:#0f2a1e,stroke:#34d399,color:#d7ffe9;
class a1,a2,a3,a4 bad;
class b1,b2,b3,b4,b5,b6 good;# ❌ The problem — plain subprocess
import subprocess
r = subprocess.run(["agy", "-p", "say hi"], capture_output=True, text=True)
print(r.stdout) # '' — prints nothing, exit 0
# ✅ The fix
from agy_headless_bridge import run
print(run("say hi")) # 'Hi! How can I help?'Three entry points around one core:
Entry point | Invoke | Use for |
Library |
| embedding agy in Python |
CLI |
| shell scripts, quick calls |
MCP server |
| letting an agent call agy as a tool |
Related MCP server: agy MCP Server
The problem in detail — upstream bug #76
agy gates its stdout on isatty(). The instant stdout isn't a terminal, it
goes silent — no output, no error, exit 0:
$ agy -p "say hi" | cat
$ # empty. exit 0. nothing.The common winpty agy -p "..." workaround needs a terminal that already
exists, so it still fails from any automated / non-TTY caller.
Newer agy releases fixed this upstream: agy -p "..." | cat printed
normally on agy 1.2.11 (Windows, checked Sep 2026). The bridge still earns its
place there. It works on older agy builds. It kills a hung run on an idle
timer and keeps partial output. It turns a failed exit or a spent quota into a
typed error (AgyExitError / AgyQuotaError). It strips TUI noise, and it
ships a dependency-free MCP server.
The fix — give agy a tty it didn't ask for
Allocate a brand-new pseudo-terminal (one that needs no parent tty) and
attach agy to it. Same code path on every OS — only the pty allocator differs.
flowchart TD
A["Caller — non-TTY<br/>Claude Code · MCP · subprocess · CI"] -->|"prompt"| B{{"run(prompt)"}}
B --> C["find_agy()<br/>$AGY_PATH → PATH → OS defaults"]
C --> D{"sys.platform?"}
D -->|"win32"| E["pywinpty<br/>PtyProcess.spawn"]
D -->|"posix"| F["stdlib pty<br/>os.openpty + Popen"]
E --> G(["fresh pseudo-terminal"])
F --> G
G --> H["agy -p prompt<br/>isatty == True → emits"]
H -->|"raw bytes + ANSI/TUI chrome"| I["clean()<br/>strip CSI/OSC · collapse \r repaints · drop spinner glyphs"]
I -->|"clean text"| APlatform | pty backend | Status |
Windows | ConPTY via | ✅ verified (agy 1.0.6) |
Linux / macOS | stdlib | ⚠️ pty mechanics verified on Linux CI; real |
Linux/macOS users wanted. The pty mechanics (the os.openpty + Popen plumbing) are verified on Linux CI via a stub, but nobody has confirmed the real agy round-trip on bare-metal Linux or macOS yet.
If you're on POSIX: pip install agy-headless-bridge, try it, and
tell us how it went — pass or fail. PRs welcome.
Why not just the existing
agyClaude Code plugins? They wrapagyfor triggering (slash commands, model selection) but still callagy -pdirectly — so in any headless context they hit this exact empty-output bug. This package fixes the I/O layer they're missing. Use both together.
Prerequisites
Before installing this bridge you need:
Python 3.9+ —
python --version.The Antigravity CLI (
agy), installed and authenticated:Install: https://antigravity.google/cli
Authenticate once interactively (
agyopens a browser OAuth flow), or setANTIGRAVITY_API_KEYin your environment if you use an API key.Verify it runs in a real terminal:
agy -p "say hi"should print a reply. (On older agy builds it prints nothing from a pipe. That's the bug this package was built to fix.)
Windows only:
pywinpty(installed automatically as a dependency). POSIX uses the stdlibptymodule — nothing extra.
This package does not install or authenticate
agy, and does not bundle any credentials. It only spawns theagyalready on your machine.
Install
Requires Python 3.9+.
pip install agy-headless-bridge # pywinpty auto-installs on Windows onlyFrom source:
git clone https://github.com/rhishi99/agy-headless-bridge
cd agy-headless-bridge
pip install -e .The bridge locates the binary via, in order: $AGY_PATH → agy on PATH →
OS default install paths.
As a Claude Code plugin
This repo is also a Claude Code plugin (.claude-plugin/plugin.json +
.mcp.json). Installing it registers one local stdio MCP server, antigravity.
What the plugin runs and fetches:
Fetches: nothing from PyPI for this package — the plugin runs the source shipped in the plugin itself. On first start
uv run --frozen(from uv) builds a virtualenv inside the plugin's install directory from the committeduv.lock. The only runtime dependency ispywinpty, on Windows only.Runs:
agy-mcp-serverfrom that source. Each tool call spawns theagybinary already on your machine inside a pseudo-terminal (ConPTY on Windows,ptyon POSIX), passes your prompt to it, and returns the cleaned text output.agyitself contacts Google's Antigravity service using your ownagylogin orANTIGRAVITY_API_KEY.Tools:
agy_askandagy_research. By defaultagy_askadds the server's working directory (your project) to agy's workspace, so agy can read it; passworkspace: "none"to opt out. agy can edit files or run commands only ifagy_askis called withskip_permissions: trueand the server was started withAGY_BRIDGE_ALLOW_SKIP_PERMISSIONS=1; the plugin does not set that variable.Does not: install or authenticate
agy, bundle credentials, open network ports, or send data anywhere other than through theagyyou run.
Requirements: uv on PATH and an installed, authenticated agy (see
Prerequisites). Local MCP servers load in Claude Code and in Cowork sessions
running on your computer; claude.ai chat ignores them.
Usage
Library
from agy_headless_bridge import (
run, AgyExitError, AgyNotFoundError, AgyQuotaError, AgyTimeoutError,
)
try:
# For a CODING task, pass the repo so agy can see it — the library `run()`
# is a thin primitive and does NOT auto-add a workspace (the CLI/MCP layers
# do). Without add_dirs, agy -p runs blind in its own scratch workspace.
print(run("Summarize this repo", add_dirs=["."], timeout=600))
except AgyTimeoutError as exc:
print("timed out; partial so far:\n", exc.partial) # resume with `agy -c`
except AgyQuotaError as exc: # subclass of AgyExitError
print("quota spent; retry in", exc.reset_seconds, "s") # None if unknown
except AgyExitError as exc:
print(f"agy failed (exit {exc.returncode}):\n{exc.output}")
except AgyNotFoundError:
print("install agy first")run(prompt, timeout=900, agy_path=None, *, add_dirs=None, model=None, idle_timeout=120, extra_args=None, skip_permissions=False) -> str raises:
AgyNotFoundErrorif the binary is missing.AgyTimeoutError, carrying.partial, on the idle or hard timeout.AgyQuotaError, carrying.reset_secondsparsed from agy's message, when agy exits non-zero with a quota or rate-limit message.AgyExitError, carrying.returncodeand.output, on any other non-zero exit, such as an unknown--model.ValueErroron an empty prompt.
It returns "" only if agy genuinely emitted nothing. add_dirs → agy
--add-dir; model → --model. The timeout is the absolute ceiling;
idle_timeout ends a run that has gone silent for that many seconds (so a
long-but-active task survives the ceiling).
skip_permissions=True passes --dangerously-skip-permissions. Headless agy
cannot answer tool-approval prompts, so without it agy silently declines every
file edit and command and still exits 0. With it, agy acts unattended inside
add_dirs. Opt in only for trusted prompts.
To get the CLI/MCP "default to cwd for coding, none for research" behaviour in
your own code, use resolve_add_dirs(explicit, use_cwd_default=...).
CLI
agy-bridge "reply with exactly: OK"
python -m agy_headless_bridge "reply with exactly: OK" # equivalent
# Coding task: the current directory is auto-added to agy's workspace, so agy
# sees your repo with no extra flags.
agy-bridge "Find and fix the off-by-one in the parser"
# Research / Q&A that needs no repo — opt out of the cwd default:
agy-bridge --no-workspace "Explain idle timeouts in process supervision"
# Add more dirs, pick a model, widen the limits for a big task:
agy-bridge --add-dir ../shared-lib --model gemini-3-pro \
--timeout 1800 --idle-timeout 180 "Refactor X to match the shared lib"Flag | Default | Meaning |
| cwd (auto) | Add a dir to agy's workspace (repeatable). |
| off | Don't auto-add cwd (use for research / Q&A). |
| agy default | agy |
|
| Hard ceiling (absolute wall). |
|
| Kill after this many seconds of no output. |
| off | Let agy edit files / run commands unattended ( |
Exit codes: 0 success · agy's own code when agy fails (its message is
printed) · 75 quota / rate limit spent (retry later) · 1 timeout or no
output · 127 agy not found.
MCP server
claude mcp add --transport stdio antigravity -- agy-mcp-serveragy-mcp-server is the console-script entry point pip install puts on your
PATH — it's bound to the exact interpreter you installed the package with,
so it sidesteps the "wrong python" problem below entirely. Prefer it over
python -m agy_headless_bridge.mcp_server, especially on Windows.
claude mcp add --transport stdio antigravity -- \
python -m agy_headless_bridge.mcp_serverWindows: use
py -3.11(the Python Launcher) instead ofpythonin the command above. Barepythoncan resolve to the wrong interpreter or the Windows Store stub, which surfaces as an-32000MCP connection error. See Troubleshooting.
The server speaks JSON-RPC stdio directly (no MCP SDK dependency) and routes every call through the pty bridge.
Tool schema (what an agent — or you, integrating manually — sees):
Tool | Argument | Type | Required | Description |
|
| string | ✅ | one-shot prompt sent to agy |
|
|
|
| |
|
| string[] | explicit dirs for agy's workspace (overrides the | |
|
| string | agy | |
|
| number | hard timeout override, seconds | |
|
| boolean | let agy edit files / run commands unattended. Refused unless the server was started with | |
|
| string | ✅ | wrapped as a deep-research prompt for agy (never attaches a workspace) |
Response shape — a standard MCP tools/call result; the answer is the text
content:
{
"jsonrpc": "2.0",
"id": 2,
"result": { "content": [ { "type": "text", "text": "<agy's cleaned answer>" } ] }
}Failures are still a readable text reply rather than a JSON-RPC error, but the
result also carries "isError": true so the client can tell them apart from an
answer:
Timeout: whatever agy produced before the kill, then an
[agy-mcp] TIMEOUT: ...; resume with 'agy -c'note, so partial work isn't lost.Quota spent: agy's message, then
[agy-mcp] QUOTA: ...; resets in ~Ns.Anything else: agy's message (if any), then
[agy-mcp] ERROR: .... This covers agy missing, a non-zero exit and bad arguments.
Use cases & wiring it into your AI coding tools
The whole point: let one AI coding tool delegate work to Gemini via Antigravity, headlessly. Common setups:
Use case | How |
Claude Code asks Gemini for a second opinion / diff review | MCP server → |
A CI step runs an |
|
A Python pipeline fans work out to agy |
|
Codex / any MCP-capable agent delegates to agy | register the same MCP server |
Cron / scheduled job summarizes logs via agy |
|
Wire into Claude Code
Register the MCP server, then prompt Claude to use it:
claude mcp add --transport stdio antigravity -- agy-mcp-serverPrompt to Claude Code: "Use the
agy_asktool to ask Antigravity to review this function for edge cases, then summarize its findings for me."
If you also want slash-command triggering and model selection, pair this bridge
with the community antigravity-cc Claude Code plugin — that handles the
/agy:* commands and Gemini/Claude model swap; this handles the headless I/O.
Wire into Codex (or any MCP client)
Add the server to the client's MCP config:
{
"mcpServers": {
"antigravity": {
"command": "python",
"args": ["-m", "agy_headless_bridge.mcp_server"]
}
}
}Prompt to the agent: "Call
agy_researchwith the query 'idiomatic error handling in Rust' and turn the result into a checklist."
Use from a shell / CI script
ANSWER="$(agy-bridge 'Summarize the key risk in this diff in one sentence.')"
echo "$ANSWER"Configuration
Env var | Default | Meaning |
| auto-detect | Absolute path to the |
|
| Hard ceiling (absolute wall), in seconds |
|
| Kill after this many seconds of no output from agy |
| unset | Set to |
How clean() works
agy's pty output is a TUI stream, not plain text. clean() removes ANSI
escapes (CSI/OSC — colors, cursor moves), \r repaints (a spinner
overwrites one line; only the final paint is kept), and box-drawing / spinner
glyphs (╭─╮ │ ⠋⠙⠹) — leaving just the model's answer.
What comes off the pty vs. what you get back:
RAW (off the pty) CLEANED (returned to you)
───────────────────────────────────── ─────────────────────────
⠋ thinking…\r⠙ thinking…\r\x1b[2K A closure is a function that
\x1b[32m╭─────────────╮\x1b[0m captures variables from the
\x1b[32m│\x1b[0m A closure is a function scope where it was defined.
that captures variables from the
scope where it was defined.
\x1b[32m╰─────────────╯\x1b[0mTroubleshooting / FAQ
pip install fails on Windows building pywinpty — pywinpty is a native
extension. If pip tries to build from source and errors with a compiler/cl.exe
message, install the Microsoft C++ Build Tools (or use a Python where a
prebuilt pywinpty wheel exists — recent CPython on Windows has them). Upgrade
pip first: python -m pip install -U pip.
-32000 MCP connection error on Windows (interpreter mismatch) — bare
python in the claude mcp add command can resolve to the wrong interpreter or
the Windows Store stub, so the spawned server can't import the package and the
connection fails. Use the Python Launcher instead — register the server with
py -3.11 (matching the Python where you installed the package) in place of
python. To confirm where the package actually landed, run
pip show agy-headless-bridge and check the Location: field; if it points to a
different Python than Claude Code spawns, that mismatch is the cause.
AgyNotFoundError — the bridge can't find agy. Set AGY_PATH to the
absolute path of the binary, or make sure agy is on your PATH
(agy --version should work in your shell).
Empty string returned — agy produced no output. Confirm it works in a real
terminal first: agy -p "say hi". If that's also empty, the problem is agy/auth,
not the bridge. Re-authenticate (agy interactively) or check
ANTIGRAVITY_API_KEY.
AgyTimeoutError — agy hit a limit. Two triggers: the hard ceiling
(AGY_BRIDGE_TIMEOUT, default 900s) and the idle timeout
(AGY_BRIDGE_IDLE_TIMEOUT, default 120s — fires when agy emits nothing for that
long). The error carries .partial (whatever agy produced first), and the CLI
prints it before exiting. Widen the limits for long prompts:
AGY_BRIDGE_TIMEOUT=1800 agy-bridge "...", --idle-timeout 300, or
run(prompt, timeout=1800, idle_timeout=300). To continue a run that timed out,
resume the agy session directly with agy -c.
agy stalls until the idle timeout, then times out on what looks like a
normal prompt — this bridge never writes to agy's stdin, so if agy pauses
mid-run to ask for interactive approval (e.g. "allow this tool call?"), the
prompt sits unanswered and the run silently stalls until the idle timeout
kills it. This is currently the most common way a run hangs. Configure agy
itself to auto-approve (check agy --help / its settings for a
non-interactive/auto-approve flag) before delegating tasks that involve tool
use, or expect the idle timeout to eventually fire and surface .partial.
Pseudo-terminal allocation fails — rare. On Windows it means pywinpty
isn't importable (reinstall it). On POSIX it means the system is out of pty
slots or pty.openpty() is denied (containers with no /dev/pts); run with a
real pty available.
Garbled / partial output — open an
issue with the OS,
Python + agy version, and the raw output; clean() may need another glyph rule.
Development & CI
pip install -e ".[dev]"
pytestUnit tests (cleaning, arg validation, binary discovery) always run. The live
agy round-trip test auto-skips when agy isn't installed — so CI runners
(which don't have agy) stay green and never need credentials. CI runs on
Windows + Linux across Python 3.9 and 3.12.
Scope, non-goals & disclaimer
Model selection (Gemini Pro / Flash / Claude inside agy) is not handled here — it's an
agysettings.jsonconcern, covered by theantigravity-ccplugin. Pair the two.Does not install or authenticate
agy, and ships no credentials.Automating any vendor CLI may interact with that vendor's terms / rate limits. You are responsible for using
agywithin Google's terms of service. This project only changes how stdout is captured — it does not bypass auth, quotas, or any access control.Not affiliated with Google. Antigravity and agy are Google products.
License
MIT.
Available Tools
2 toolsagy_askB
Send a one-shot prompt to the Google Antigravity CLI (agy) and return its response. Use to delegate a focused coding, debugging, or reasoning task to Gemini via Antigravity.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | agy --model (optional) | |
| prompt | Yes | The prompt to send to agy | |
| add_dir | No | Explicit directories to add to agy's workspace. Overrides the workspace default below. | |
| timeout | No | Hard timeout in seconds (override when a task legitimately needs longer). | |
| workspace | No | auto (default): if no add_dir given, add the server's cwd so agy sees the repo — needed for coding tasks. none: no workspace (use for research / Q&A that needs no repo context). | |
| skip_permissions | No | Let agy edit files / run commands without approval prompts (headless agy otherwise declines them silently). Only honoured if the server was started with AGY_BRIDGE_ALLOW_SKIP_PERMISSIONS=1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioural burden. It conveys 'one-shot' (single turn) and that a response is returned, but omits that agy can edit files and run commands (the skip_permissions param implies a mutation-capable, headless agent), credential/auth requirements, and timeout/long-task behaviour. These side-effect risks are material and unstated in the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action, zero filler. It could still be marginally more informative without bloating, so not a top mark.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, mutation-capable CLI bridge with no annotations and no output schema, the description is thin: it says nothing about file-editing side effects, permission/skip gating, or result shape. An agent could call it correctly on arguments but would misjudge its blast radius.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents model, prompt, add_dir, timeout, workspace and skip_permissions in detail. The description adds no parameter-level syntax or defaults beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource: send a one-shot prompt to the Antigravity CLI (agy) and return its response. This clearly separates it from a stateful/session tool, and the delegation scoping (coding, debugging, reasoning) hints at its niche versus agy_research without naming the sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use context: delegate a focused coding, debugging, or reasoning task to Gemini. It stops short of an explicit when-not-to-use rule or naming agy_research as the alternative for research/Q&A, so routing between the two siblings is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agy_researchB
Ask Antigravity to research a topic deeply.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Research query or topic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description lacks behavioral details such as whether the tool is read-only, expected response time, or what 'research deeply' entails. The agent is left guessing about side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only one sentence, which is concise but sacrifices clarity. It does not fully explain what the tool does or how to use it effectively. Could be more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (1 parameter, no output schema, no annotations), the description is minimally adequate but lacks completeness. No information about return values, depth of research, or usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for the single parameter 'query'. The description adds no extra semantics beyond what the schema already provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs research on a topic, but it does not differentiate from the sibling tool 'agy_ask'. The phrase 'deeply' hints at more thorough analysis, but the distinction is implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus 'agy_ask'. The description implies usage for deep research, but no alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.3.0- Changed
agy_ask1 field changed- added
Input schema / properties / skip_permissionsAdded value: +{ + "description": "Let agy edit files / run commands without approval prompts (headless agy otherwise declines them silently). Only honoured if the server was started with AGY_BRIDGE_ALLOW_SKIP_PERMISSIONS=1.", + "type": "boolean" +}
1 tool update
v1.2.0- Changed
agy_ask4 fields changed- added
Input schema / properties / add_dirAdded value: +{ + "description": "Explicit directories to add to agy's workspace. Overrides the workspace default below.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / modelAdded value: +{ + "description": "agy --model (optional)", + "type": "string" +} - added
Input schema / properties / timeoutAdded value: +{ + "description": "Hard timeout in seconds (override when a task legitimately needs longer).", + "type": "number" +} - added
Input schema / properties / workspaceAdded value: +{ + "description": "auto (default): if no add_dir given, add the server's cwd so agy sees the repo — needed for coding tasks. none: no workspace (use for research / Q&A that needs no repo context).", + "enum": [ + "auto", + "none" + ], + "type": "string" +}
2 tool updates
- First observed
agy_ask - First observed
agy_research
TDQS
Scored across 2 tools
agy_ask and agy_research both send a prompt to the same Antigravity CLI and return a response, so the boundary is blurred: a user could fulfill research needs by calling agy_ask with a 'research this' prompt. The description hints at a depth/intent difference, but nothing structural distinguishes the two tools (no separate parameters, output shapes, or guarantees).
Both tools use the same agy_ prefix with a single lowercase snake_case verb (ask, research), forming a clean, predictable pattern. There is no mixing of conventions or verb styles.
Two tools is thin for a bridge server, and one of them (agy_research) appears to be a thin wrapper around the other, so the surface feels under-scoped rather than deliberately minimal. It is not extreme, but there is little room for distinct capability.
The server covers one-shot prompt delegation but lacks any session/multi-turn continuation, file or workspace context parameters, or status/cancel operations that a CLI bridge typically needs. Core workflow (ask something and get an answer) works, but agents will hit dead ends for stateful or long-running tasks.
Maintenance
Related MCP Connectors
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Related MCP Servers
- AlicenseAqualityBmaintenanceWraps Google Antigravity CLI into 11 typed MCP tools, enabling any MCP client to invoke agy for code review, prototyping, execution, and long-running tasks.1134 PyPI23MIT
- AlicenseAqualityDmaintenanceEnables Claude to drive the Antigravity agent by running prompts through the agy CLI non-interactively, supporting session management and optional sandboxed execution.51ISC
- FlicenseNot gradedqualityCmaintenanceWraps the Antigravity CLI (agy) as an MCP server, enabling Claude Code and other MCP clients to execute AI tasks and manage conversations via the agy command.-
- AlicenseAqualityDmaintenanceWraps Google's Antigravity CLI as MCP tools for Claude, enabling cost-disciplined multi-model execution with background jobs and fan-out research/review pipelines.13MIT