Skip to main content
Glama

antigravity-mcp

Delegate background subagent jobs to the Antigravity IDE's local agent engine — from Claude Code, Codex, Cursor, or any other MCP client.

CI Python 3.9+ License: MIT

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.git

Or 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.git

Register with your MCP client

claude mcp add antigravity-agents -- antigravity-mcp

From a clone instead of an install:

claude mcp add antigravity-agents -- python3 /path/to/antigravity-mcp/src/antigravity_mcp/__main__.py

Add 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

dispatch_gemini_agent

task, workspace_path?, context_files?, model?, system_instruction?

Validates workspace/context, then queues a job and returns a job_id.

check_agent_job

job_id

Status, elapsed time, progress log, and output.

list_active_jobs

limit?

Recent and in-flight jobs.

cancel_agent_job

job_id

Cooperatively stops a running job.

gemini_code_search

query, context_files, workspace_path?

Validates workspace/context, then scans the captured files synchronously.

list_available_models

—

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 Opus

Matching 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 files

Step 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:

  1. Local Antigravity language server — the default. Connects over loopback HTTPS and reuses the IDE's signed-in session. No API key.

  2. Gemini REST API — used when local execution is disabled and GEMINI_API_KEY or GOOGLE_API_KEY is 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

ANTIGRAVITY_MAX_CONCURRENT_JOBS

3

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.

ANTIGRAVITY_JOB_TIMEOUT

1800

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.

ANTIGRAVITY_MAX_CONCURRENT_REQUESTS

16

Tool calls handled in parallel.

ANTIGRAVITY_STATE_DIR

platform state dir

Where job history is kept.

ANTIGRAVITY_DISABLE_LOCAL

unset

Skip local execution; the workspace gate still requires a verified IDE workspace.

ANTIGRAVITY_LOG_LEVEL

INFO

Server log level on stderr.

GEMINI_API_KEY / GOOGLE_API_KEY

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

IMPORTANT

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_x64). Antigravity 2.0, the separate agent-first app, is untested

Linux

Verified — process discovery via /proc and ss

macOS

Implemented via lsof and ps -axww, not yet verified on real hardware

Windows

Implemented via netstat and WMI, not yet verified on real hardware

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]"
pytest

The 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 tools
cancel_agent_jobB

Cancel a running background subagent job.

NameRequiredDescriptionDefault
job_idYesThe job ID to cancel.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
job_idYesThe job ID returned from dispatch_gemini_agent (e.g. 'agy-1a2b3c4d').

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
taskYesDetailed task description or prompt for the worker agent.
modelNoWhich 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_filesNoOptional absolute file paths to include as context for the agent.
workspace_pathNoTarget 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_instructionNoCustom system instructions for the subagent worker.

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

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.

NameRequiredDescriptionDefault
target_workspaceNoOptional directory path to match against open IDE workspaces.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
limitNoMaximum number of recent jobs to return.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 7 tool updatesv0.1.0
    • First observedcancel_agent_job
    • First observedcheck_agent_job
    • First observeddispatch_gemini_agent
    • First observedgemini_code_search
    • First observedget_active_workspace
    • First observedlist_active_jobs
    • First observedlist_available_models

TDQS

A3.6/5.0

Scored across 7 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    5
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables agents to submit and manage persistent, dependency-aware task graphs with immutable artifacts, resource reservations, durable event streaming, and retryable process execution over MCP.
    12
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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