antigravity-mcp
Provides a fallback execution backend via the Gemini REST API, allowing delegated agent jobs to run on Gemini when local Antigravity execution is disabled and a Gemini/Google API key is configured.
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., "@antigravity-mcpDispatch a background job to scan src/ and summarize the architecture"
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.
antigravity-mcp
Delegate background subagent jobs to the Antigravity IDE's local agent engine — from Claude Code, Codex, Cursor, or any other MCP client.
If you have the Antigravity IDE open and signed in, you already have a local agent engine with a catalog of frontier models sitting idle. This is an MCP server that exposes that engine as a handful of tools, so the model you actually drive your work with can hand jobs off to it and keep going.
Your orchestrator stays the architect. The subagents do the legwork.
┌─────────────────────────────────────────────────┐
│ Your MCP client │
│ (Claude Code · Codex · Cursor · anything else) │
│ plans the work, reviews every result │
└───────────────────────┬─────────────────────────┘
│ MCP · JSON-RPC 2.0 over stdio
▼
┌─────────────────────────────────────────────────┐
│ antigravity-mcp │
│ returns a job_id immediately, never blocks │
│ bounded worker pool · job history on disk │
└───────────────────────┬─────────────────────────┘
│ tried in order
┌─────────────────┼─────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ Antigravity │ │ Gemini REST │ │ Explicit │
│ language │ │ API │ │ failure │
│ server │ │ │ │ │
│ no API key │ │ needs a key │ │ never faked │
└───────────────┘ └───────────────┘ └───────────────┘Why
Orchestrating models are expensive and serial. Plenty of real work isn't worth their attention: scanning forty files to answer one architectural question, generating the fifth round of near-identical fixtures, or reading a dependency tree you already understand. Hand those to a fast local worker, keep planning while it runs, and collect the result when you need it.
Because jobs run on the IDE's own authenticated session, no API key is needed when the IDE is open.
Related MCP server: agent-mesh MCP Server
Install
pip install git+https://github.com/Kio-pon/antigravity-mcp.gitOr clone it — there are no dependencies, so a checkout runs as-is on a bare interpreter:
git clone https://github.com/Kio-pon/antigravity-mcp.gitRegister with your MCP client
claude mcp add antigravity-agents -- antigravity-mcpFrom a clone instead of an install:
claude mcp add antigravity-agents -- python3 /path/to/antigravity-mcp/src/antigravity_mcp/__main__.pyAdd to ~/.codex/config.toml:
[mcp_servers.antigravity-agents]
command = "antigravity-mcp"{
"mcpServers": {
"antigravity-agents": {
"command": "antigravity-mcp",
"env": {
"ANTIGRAVITY_MAX_CONCURRENT_JOBS": "3"
}
}
}
}Ready-made config files live in examples/.
The strict policy build intentionally starts with no network authority. A
trusted host integration must install an operator-approved execution scope before
calling list_available_models, get_active_workspace, or either dispatch tool.
Opening an IDE, passing workspace_path, or restoring a job does not create that
authority. Until that integration is configured, these tools fail closed; do not
replace it with a client-side endpoint, token, or environment-variable shortcut.
Tools
Tool | Arguments | What it does |
|
| Validates workspace/context, then queues a job and returns a |
|
| Status, elapsed time, progress log, and output. |
|
| Recent and in-flight jobs. |
|
| Cooperatively stops a running job. |
|
| Validates workspace/context, then scans the captured files synchronously. |
| — | The live model catalog from your IDE session. |
Picking a model
The catalog is whatever your Antigravity account currently has, and it changes as models ship — so nothing is hardcoded. Call list_available_models to see it, then pass either an exact label or a loose description:
"Gemini 3.8 Flash (High)" exact label
"gemini 3.7 flash medium" version + family + effort tier
"flash" best available flash — highest effort, newest version
"opus" best available OpusMatching is token-based and strict about what you do specify: every word and version number you give has to appear in the model's label. "gemini-3.5-flash" will not quietly resolve to a 3.7 model just because both are flash — it raises and lists what actually exists. Leave a dimension out and it is a wildcard, resolved to the highest effort tier and newest version that fits.
How a session usually goes
1. dispatch_gemini_agent → job_id, returned instantly
2. …carry on with your own work…
3. check_agent_job → output when it's ready
4. review before applying anything to filesStep 4 is the point of the whole design. A subagent's output is a proposal, not a commit.
Execution backends
Two backends, tried in order:
Local Antigravity language server — the default. Connects over loopback HTTPS and reuses the IDE's signed-in session. No API key.
Gemini REST API — used when local execution is disabled and
GEMINI_API_KEYorGOOGLE_API_KEYis set, after the same workspace gate succeeds.
Strict workspace gate (Phase 1)
Policy-first authority lifecycle
An approved scope belongs to trusted server startup code, not to MCP tool input. It declares literal loopback Language Server bindings with a process-creation identity, approved workspace roots, and narrowly selected capabilities. The server re-observes the pinned process/listener and credential before every RPC. Workspace validation first captures a particular workspace, context-file identity and execution intent; only that trusted flow issues the short-lived authorization needed for a job. A public-looking evidence object, a saved job, or a copied permit is not authority and is rejected by the scope's per-scope issuance registry.
The installed antigravity-mcp console command intentionally supplies no scope
and therefore keeps network-capable tools disabled. A separately reviewed
embedding host may construct an in-memory ApprovedExecutionScope from its own
operator-approved binding and call antigravity_mcp.server.main(execution_scope=scope)
or MCPServer(execution_scope=scope). This package does not accept an endpoint,
PID, workspace, capability, token, or scope revision from environment variables,
MCP arguments, client metadata, or persisted jobs as a substitute for that host
integration.
Replacing or revoking a scope invalidates its outstanding probes, snapshots and grants. Authority is bounded (default 30 minutes and 1,024 live handles) and is released when the job becomes terminal. This registry is owned and locked by the scope instance; it is not a process-global cache. It is a Python in-process trust boundary, not a defense against arbitrary code already executing inside the MCP server process.
Trusted Windows broker contract (offline implementation)
antigravity_mcp.windows_broker defines a narrow contract for a future,
separately reviewed Windows launcher/broker. It is not connected to the MCP
console or a live IDE in this package release. Its default provider refuses all
operations. A real host must independently authenticate an operator-approved
launch plan and an IPC peer, launch the disposable IDE, and verify the artifact,
process-creation identity, literal-loopback listener ownership, exact Workspace
identity, and endpoint credential before supplying a runtime binding.
The broker keeps the credential in host memory and returns only opaque, single-use, expiring grants bound to one authenticated MCP process identity, one approved Workspace/context/intent, one endpoint binding, and one local operation. REST is not a broker capability. Replacing/revoking the broker scope, restarting the broker, a changed process/listener/token/Workspace binding, or an expired grant makes later sends fail closed. A send already initiated cannot be recalled; process/listener inspection and connection establishment are not atomic.
The planned production transport is a Windows named pipe whose server obtains the peer token/SID from the operating system; a PID/SID supplied inside an MCP message is never sufficient. The current provider protocol is intentionally testable with a deterministic fake, but the fake is not installed or selected by production code. There is no environment-variable, command-line, persisted-job, or MCP-argument fallback for launch plans, endpoint credentials, or grants. The legacy Windows direct ownership verifier is disabled: it must not read an arbitrary process command line/token and send Local RPC merely because embedding code supplied a PID/port. Until a broker-backed verifier with the required host controls exists, Windows local execution remains fail-closed.
antigravity_mcp.windows_boundary supplies a fail-closed, standard-library
Windows observer for a pre-approved PID: it compares the process creation
identity and canonical executable path, hashes the executable, and reads the
Windows IPv4 listener table to require the pinned literal-loopback listener to
be owned by that PID. It never launches an IDE, opens a socket, discovers a
candidate, reads a credential, or issues a broker grant. Its bounded JSON codec
is only input validation for a future pipe protocol; it is not a named-pipe
server and does not authenticate an IPC peer. A production pipe endpoint still
needs a reviewed ACL, OS-observed peer token/SID verification, an
integrity-protected launch-plan source, a Job Object child lifecycle, and
disposable-Windows verification. Process/listener observation and a later
connection remain non-atomic, so any such host must revalidate immediately
before send and still document the remaining TOCTOU window.
REST generation requires a separately approved rest capability and is disabled
by the default scope. Local authority does not imply REST authority. TLS hostname
and certificate validation stay enabled, redirects are rejected, and the
transport ignores proxy settings. These controls do not make process/socket
ownership checks atomic with opening a connection; a PID, socket or workspace can
still change after the final preflight or while an already-started request is in
flight.
Both execution tools require one verifiable IDE endpoint with exactly one workspace.
workspace_path, when supplied, must be an absolute directory that exactly matches
that workspace after canonicalization. Parent/child matches are rejected. Without
it, discovery must identify one unique workspace/endpoint. Unknown discovery
results, multiple matching endpoints, missing workspaces and mismatches stop
execution before a job is created. HTTP 404/405 from the workspace RPC remains
unknown, just like timeouts, authentication failures and malformed responses.
An endpoint is excluded only with independent evidence, such as a command-line
flag identifying an extension-service port, or a verified unrelated workspace.
Execution discovery returns candidates together with explicit completeness and
uncertainty information. Partial process/socket inventories cannot silently become
complete lists. Linux PID stat errors remain unknown unless process absence or
an unrelated executable can be established independently.
Dispatch may omit context files; code search still requires at least one file. Every supplied file must be readable UTF-8, regular, and inside the workspace after symlink/junction resolution. Relative context paths are resolved against that workspace, never a backend's current directory. Missing, unreadable or changed files and context exceeding 500,000 characters are rejected rather than partially included. The validated text is captured once and shared by both backends.
After a queued job gets a slot, its binding is checked again. Local execution checks
again before StartCascade and before sending the task; REST checks immediately
before HTTP dispatch. A failed recheck marks the existing job failed without
sending its task, and never triggers a REST fallback. Old injected executors that
cannot accept the validated snapshot and workspace are rejected before job creation.
Direct calls through the legacy GeminiExecutor alias use the same gate.
Workers wait for submission acknowledgement before entering an executor. A submit exception aborts that acknowledgement, marks the job failed, and wakes any worker already waiting so it exits. Job transitions use a per-job lock: pending can become running, failed or cancelled; running can become completed, failed or cancelled. Terminal states cannot become running again. Local/REST transport initiation uses a reservation under the same lock, so a terminal transition and a new send are serialized. A Condition lets terminal transitions wait without holding the state lock during network I/O, while the terminal reservation blocks additional sends. A request that already began cannot be recalled; cancellation/failure may wait for the transport-initiation call to return; the existing RPC/HTTP timeouts still apply.
This intentionally changes compatibility: REST-only execution with no verifiable
IDE workspace is refused, even with an API key or ANTIGRAVITY_DISABLE_LOCAL=1.
Disabling local execution does not disable workspace discovery/validation.
These checks are not a filesystem sandbox. Workspace instructions in prompts and the existing post-run trajectory audit do not prevent an IDE agent from accessing other paths. The IDE RPC provides no atomic validate-and-send operation: an external workspace change can still occur after the final check or during a running task. Phase 1 detects changes visible at preflight, not changes after it.
If neither is reachable the job fails with an error saying so. There is deliberately no further tier that returns a stand-in result: a plausible answer no model actually produced is worse than an error, because nothing downstream can tell the two apart.
Configuration
All optional.
Variable | Default | Purpose |
|
| Jobs running at once. Every job drives a live session on the same language server process, so this is a real resource ceiling, not a formality. Extra jobs queue. |
|
| Seconds before a job is abandoned. Completion is detected, not waited out — a short single-shot answer returns in seconds — so a generous ceiling only bounds a genuinely stuck agent. |
|
| Tool calls handled in parallel. |
| platform state dir | Where job history is kept. |
| unset | Skip local execution; the workspace gate still requires a verified IDE workspace. |
|
| Server log level on stderr. |
| unset | Enables the REST fallback. |
Job history is written to $XDG_STATE_HOME/antigravity-mcp/jobs.json on Linux, ~/Library/Application Support/antigravity-mcp/ on macOS, and %LOCALAPPDATA%\antigravity-mcp\ on Windows — never into the install tree. It survives across sessions, which is what makes a job_id from yesterday still mean something today.
The optional skill
skills/antigravity-agent/ is a Claude Code skill that teaches the orchestrator when delegating is worth it, so you don't have to say it every time. Install it with:
cp -r skills/antigravity-agent ~/.claude/skills/Protocol support
The server implements the current 2026-07-28 specification and the
handshake-based revisions before it, deciding per request which one a client is
speaking. Modern clients declare their version in each request's _meta; legacy
clients open with initialize. Both work against the same process with no
configuration, and server/discover reports every version on offer.
Because stdio has no HTTP status codes to drive fallback, server/discover is
also how a client tells a modern server from a legacy one — so it is answered
before anything else.
Compatibility
The local backend speaks private IDE IPC —StartCascade, SendUserCascadeMessage, GetUserStatus, GetCascadeTrajectory over loopback Connect-RPC. These are internal endpoints with no cross-version stability guarantee. An IDE update can change them.
Status | |
MCP specification | 2026-07-28 (current), plus 2025-06-18, 2025-03-26, 2024-11-05 |
Antigravity IDE | Verified against v1.107.0 ( |
Linux | Verified — process discovery via |
macOS | Implemented via |
Windows | Implemented via |
Python | 3.9+ |
Running it on macOS or Windows? A quick issue saying whether discovery found your language server would be genuinely useful — that's the one part that cannot be tested without the hardware.
Development
git clone https://github.com/Kio-pon/antigravity-mcp.git
cd antigravity-mcp
pip install -e ".[dev]"
pytestThe default suite is hermetic — no IDE, no network, no API key — driving the real request path with a stub executor in place of a language server. To also run the live round-trip against a real one, open the IDE and set ANTIGRAVITY_LIVE_TESTS=1.
See CONTRIBUTING.md.
License
MIT.
Not affiliated with, endorsed by, or supported by Google or the Antigravity IDE team.
Available Tools
7 toolscancel_agent_jobB
Cancel a running background subagent job.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job ID to cancel. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing beyond the action itself. It does not say whether cancellation is irreversible, whether the job's partial output is retained or discarded, what happens if the job already finished, or what the tool returns. For a destructive lifecycle operation this is a significant gap.
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?
A single front-loaded sentence with zero filler; the action and its target are stated immediately.
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 one-parameter tool with a fully documented schema and no output schema, the definition is minimally viable. It is still missing the behavioral facts an agent needs before invoking a cancellation (irreversibility, effect on job output, behavior on already-completed jobs).
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% and the single job_id parameter is documented in the schema ('The job ID to cancel.'), so the baseline of 3 applies. The description adds no format, sourcing, or lookup guidance (e.g. obtaining the ID from list_active_jobs) beyond the schema.
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 states a specific verb and resource ('Cancel a running background subagent job'), which an agent can distinguish from the read-oriented siblings check_agent_job and list_active_jobs by verb alone. It stops short of explicitly naming a sibling or contrasting scope, so it lands at 4 rather than 5.
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?
There is no when-to-use guidance, no prerequisites (e.g. the job must still be running), and no mention of alternatives or follow-up tools such as check_agent_job. The word 'running' hints at a precondition but leaves it to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_agent_jobB
Check the status, logs, duration, and output of a dispatched agent job.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job ID returned from dispatch_gemini_agent (e.g. 'agy-1a2b3c4d'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden as a single terse sentence. It never states that the operation is read-only, whether it blocks or polls, whether log output is truncated or streamed, or how it behaves for a still-running versus failed job.
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?
One sentence, zero filler, and the object of the operation is front-loaded before the enumerated return facets. Nothing here fails to earn its place.
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?
With no output schema and no annotations, the description usefully compensates by naming what comes back (status, logs, duration, output). It still omits polling/streaming behavior and terminal state handling, which an agent monitoring a job would want.
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% for the single job_id parameter, and the schema description even cites dispatch_gemini_agent as the source and gives an example format. The prose adds no meaning beyond the schema, so the baseline of 3 applies.
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 pairs a specific verb ('Check') with a specific resource ('a dispatched agent job') and enumerates the returned facets (status, logs, duration, output), which is clearer than the bare name. It implicitly distinguishes itself from dispatch_gemini_agent by noting the job is already dispatched, but it does not explicitly contrast itself with list_active_jobs or cancel_agent_job.
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?
There is no guidance on when to use this tool versus list_active_jobs (which also surfaces jobs) or cancel_agent_job. The dependency on a prior dispatch is only hinted at through 'dispatched', leaving the workflow condition to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_gemini_agentA
Dispatch a coding, analysis, or research task to a background Antigravity subagent. Returns immediately with a job_id so the orchestrator is never blocked.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | Detailed task description or prompt for the worker agent. | |
| model | No | Which live model to run this job on, e.g. 'Gemini 3.8 Flash (High)'. The live catalog (versions, families, and thinking-effort tiers) changes over time and depends on the connected Antigravity IDE session — call list_available_models rather than assuming a name. Defaults to the fastest available flash-tier model. | |
| context_files | No | Optional absolute file paths to include as context for the agent. | |
| workspace_path | No | Target workspace directory, which must exactly match one verified IDE workspace. Omit only when discovery identifies a unique workspace. This validates dispatch; it does not sandbox the agent filesystem. | |
| system_instruction | No | Custom system instructions for the subagent worker. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the single most important trait: this is asynchronous and returns a job_id immediately. It says nothing about failure modes (do errors surface at dispatch or later via check_agent_job), concurrency/rate limits, or the dependence on an active Antigravity IDE session.
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 sentences, front-loaded with the action and finished with the async guarantee. Nothing is redundant and nothing needs to be skimmed past.
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 dispatch tool with no output schema, the description is adequate but thin: it establishes that a job_id comes back, yet does not say what else the response holds or that results must be retrieved later via check_agent_job. The rich input schema covers the request side, so the remaining gap is on the response/lifecycle side.
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 baseline is 3; the schema already documents task, model (with the list_available_models routing hint), context_files, workspace_path and system_instruction in detail. The description adds no parameter-level meaning beyond what the schema provides.
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 specific verb and resource: dispatch a coding/analysis/research task to a background subagent, plus the async outcome (returns job_id). It is clearly distinguishable from check_agent_job, list_active_jobs and cancel_agent_job in practice, but it never names those siblings to make the distinction explicit.
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?
The task classes it accepts (coding, analysis, research) plus the 'returns immediately so the orchestrator is never blocked' note give clear context for when to reach for it over a blocking call. There are no exclusions, however: nothing says what it should not be used for, and the follow-up path (poll with check_agent_job) is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gemini_code_searchA
Use a large-context model to scan multiple repository files at once and answer architectural or code questions about them. Runs synchronously and returns the answer.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Query or pattern to search for and explain across the provided files. | |
| context_files | Yes | Absolute paths of the files to scan. | |
| workspace_path | No | Exact IDE workspace directory; inferred only when unambiguous. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that execution is synchronous and that the tool returns an answer, but it omits limits, permissions, latency/cost implications, and error behavior for a large-context model call.
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 two sentences, front-loads the core capability, and includes the synchronous-return behavior without wasted wording.
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?
It covers the basic purpose and synchronous return behavior, which is helpful given no annotations and no output schema. However, it leaves out practical constraints such as file count limits, output format expectations, and how workspace_path inference works.
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%, so the schema already documents query, context_files, and workspace_path. The description reinforces multi-file scanning and question answering but adds no additional meaning for workspace_path or file-path constraints.
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 states a specific action: scan multiple repository files with a large-context model and answer architectural or code questions. This clearly distinguishes it from workspace/job-management siblings, though it does not explicitly name or contrast with dispatch_gemini_agent.
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?
It gives an implied usage context by saying to use it for multi-file scanning and architectural/code questions. However, it does not specify when to choose this over dispatch_gemini_agent or when this tool is inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_active_workspaceA
Inspect the live Antigravity IDE instances and return the active workspace path, process ID, listening port, and connection status. Use this before dispatching file-modifying tasks to ensure the agent targets the correct workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| target_workspace | No | Optional directory path to match against open IDE workspaces. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. 'Inspect' implies a read-only, non-mutating operation and the returned fields are named, but there is no statement about side effects, permissions/auth requirements, or behavior when no workspace matches.
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 tightly packed sentences with no filler. The core capability is front-loaded, and the usage guidance follows immediately.
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?
With no output schema, the description compensates by enumerating the returned fields, which is sufficient for a simple read-only tool. The only gap is the unaddressed behavior of the optional target_workspace filter (match failure semantics).
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%, so the single optional target_workspace parameter is already documented in the schema. The description never mentions the filtering parameter or what happens on a non-match, so it adds no meaning beyond structured data; baseline 3 applies.
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?
A specific verb ('Inspect') plus a specific resource ('live Antigravity IDE instances'), followed by the exact fields returned (workspace path, PID, port, connection status). It is clearly distinguishable from siblings like dispatch_gemini_agent or list_active_jobs, though it does not name them 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?
Explicitly states when to call it: 'before dispatching file-modifying tasks to ensure the agent targets the correct workspace.' This gives clear context, but no exclusions or named alternatives (e.g., when to skip it in favor of list_active_jobs).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_active_jobsC
List active, pending, completed, cancelled, or failed subagent jobs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of recent jobs to return. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and discloses almost nothing: no ordering (most recent first?), no pagination/limit behavior, no scope of jobs, and no indication of what a job entry contains. The only real signal is that all statuses are returned, which contradicts the tool name's implication of actives-only.
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?
One compact sentence with no filler, front-loaded with the verb and resource. It is efficient, though the status enumeration carries most of the weight and could be paired with one clause on scope.
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 simple single-parameter list tool with no output schema, the definition covers purpose but omits ordering, scope, and result shape, leaving the agent to guess what a returned job record looks like. Adequate but clearly thin.
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?
The single 'limit' parameter is fully described in the schema ('Maximum number of recent jobs to return'), so the schema does the work. The description adds no ordering or default-value context beyond it, which is the baseline expectation at 100% coverage.
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 gives a clear verb ('List') and resource ('subagent jobs') and usefully enumerates the statuses returned, which corrects the misleading 'active' in the name. It does not, however, distinguish itself from sibling check_agent_job or explain scope (own jobs vs all jobs).
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?
There is no guidance on when to use this rather than check_agent_job (single job status) or the dispatch tools. The reader must infer that this is the enumeration counterpart, but nothing in the text says so.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_available_modelsA
List the live models currently available from the connected Antigravity IDE session. Call this before dispatch_gemini_agent when you do not already know an exact, currently-live model name.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully signals that results are session-scoped and dynamic ('live', 'currently available'), but says nothing about what the listing returns (names vs. full metadata), whether it is cached, or any failure mode when no session is connected. Adequate but incomplete for a tool with zero annotation coverage and no output schema.
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 sentences, zero waste, with the resource and scope front-loaded and the usage condition following. Every clause earns its place.
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 zero-parameter list tool, purpose and the routing rule to dispatch_gemini_agent are covered. The only gap is the return shape, which matters slightly more here because no output schema exists to describe it.
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?
The tool takes no parameters, so there is nothing for the description to disambiguate and the schema is trivially complete. Baseline 4 applies for a zero-parameter tool.
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 specific verb (List) and resource (live models available from the connected Antigravity IDE session), and scopes it to the current session rather than a static catalogue. It also names the downstream consumer, dispatch_gemini_agent, so an agent can place it among its siblings.
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 an explicit call condition: invoke before dispatch_gemini_agent when the exact, currently-live model name is unknown. That is a concrete when-to-use trigger tied to a named sibling, leaving little to inference.
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.
7 tool updates
v0.1.0- First observed
cancel_agent_job - First observed
check_agent_job - First observed
dispatch_gemini_agent - First observed
gemini_code_search - First observed
get_active_workspace - First observed
list_active_jobs - First observed
list_available_models
TDQS
Scored across 7 tools
Each tool maps to a distinct action: workspace inspection, model listing, async dispatch, job status/list/cancel, and synchronous code search. The only mild overlap is between check_agent_job and list_active_jobs (both about job state) and between dispatch_gemini_agent and gemini_code_search (both invoke Gemini), but descriptions clearly separate single-job inspection from enumeration and async background work from synchronous analysis.
Six of seven tools follow a clean verb_noun snake_case pattern (get_active_workspace, dispatch_gemini_agent, list_available_models, check_agent_job, list_active_jobs, cancel_agent_job). gemini_code_search deviates by leading with a noun/namespace, a minor inconsistency but still readable and predictable.
Seven tools is well-scoped for an IDE orchestration server, with each tool earning its place across discovery, dispatch, and job management. Nothing feels redundant or padded.
The subagent lifecycle is fully covered (dispatch, check, list, cancel) alongside workspace discovery, model enumeration, and synchronous code analysis. Minor gaps exist—no retry/resume of a job, no follow-up message to a running agent, and no explicit wait-for-completion primitive—but agents can poll with check_agent_job.
Maintenance
Related MCP Connectors
Hosted MCP memory and agent control plane for durable conversations, jobs, and operations.
Start and manage Reason cloud coding agents, projects and sessions from any MCP client.
- aXDeprecatedio.github.ax-platform
Agent-native collaboration network: orchestrate a team of long-running agents from any MCP client.
Discover and call AI agents via MCP. Supports A2A agents and platform agents with async tasks.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables MCP clients to submit long-running jobs that are executed safely in isolated child processes with a durable SQLite queue, configurable timeouts, retries with backoff, and backpressure.5MIT
- AlicenseNot gradedqualityDmaintenanceEnables coordinating specialist agents through an event-driven backend, allowing submission of goals, retrieval of job status and results, and listing of jobs via MCP tools.MIT
- AlicenseAqualityCmaintenanceEnables agents to submit and manage persistent, dependency-aware task graphs with immutable artifacts, resource reservations, durable event streaming, and retryable process execution over MCP.12MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to asynchronously submit tasks to a persistent coding agent already running on a development machine, disconnect, and retrieve results later through a secure, policy-controlled gateway.MIT