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

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

Verify it is wired up by asking your client to call list_available_models. With the IDE open you should get back the live model catalog.

Tools

Tool

Arguments

What it does

dispatch_gemini_agent

task, context_files?, model?, system_instruction?

Starts a background job. Returns a job_id immediately.

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

Scans many files at once and answers 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 the IDE is not running and GEMINI_API_KEY or GOOGLE_API_KEY is set.

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 the local backend entirely.

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

6 tools
cancel_agent_jobB

Cancel a running background subagent job.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.
system_instructionNoCustom system instructions for the subagent worker.

TDQS

A3.6/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 key behavioral trait: asynchronous, non-blocking execution that returns a job_id immediately. However, it omits the rest of the job lifecycle — that the job runs in the background and must be polled, whether it can be cancelled, failure behavior, and any auth/session prerequisites (the model param hints at dependence on the connected 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 tight sentences with zero filler. The core action is front-loaded and the non-blocking return contract is stated second, which is exactly the right ordering.

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?

There is no output schema, so the description usefully states the return value (a job_id). Combined with full parameter coverage, an agent has enough to invoke the tool. The remaining gap is the lifecycle handoff — it never points at check_agent_job or cancel_agent_job for the dispatched job.

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 all four parameters are already documented, including the pointer to list_available_models for the model param. The description adds no additional parameter meaning, 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?

States a specific verb and resource: dispatching coding/analysis/research work to a background Antigravity subagent, and it names the async nature (returns immediately with a job_id). It does not explicitly contrast itself with siblings like gemini_code_search or check_agent_job, but the dispatch semantics are unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'background' and 'orchestrator is never blocked' suggest long-running work that shouldn't be awaited inline. There is no explicit when-to-use vs. gemini_code_search, and no instruction to follow up with check_agent_job or cancel_agent_job — the natural next steps are left for the agent to infer.

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.

ParametersJSON Schema
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.

ParametersJSON Schema
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. 6 tool updatesv0.1.0
    • First observedcancel_agent_job
    • First observedcheck_agent_job
    • First observeddispatch_gemini_agent
    • First observedgemini_code_search
    • First observedlist_active_jobs
    • First observedlist_available_models

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation4/5

Most tools are clearly distinct: dispatch/check/list/cancel form a clean job-management set, and list_available_models is unique. The main soft spot is gemini_code_search vs dispatch_gemini_agent, since both invoke Gemini to reason over code, though the sync-scan vs async-agent distinction in the descriptions mostly resolves it.

Naming Consistency4/5

Five of six names follow a clean verb_noun pattern (dispatch_gemini_agent, list_available_models, check_agent_job, list_active_jobs, cancel_agent_job). gemini_code_search breaks the convention by leading with the noun/qualifier rather than a verb, a minor deviation in an otherwise consistent set.

Tool Count5/5

Six tools is well-scoped for an orchestration server covering sync code Q&A, async dispatch, model discovery, and job lifecycle management. Each tool earns its place with no redundant or filler operations.

Completeness4/5

The subagent job lifecycle is well covered (dispatch, check status/logs/output, list, cancel), plus code search and model listing. Minor gaps remain, such as no explicit job-resume/retry or log-streaming tool, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables local AI agents to generate code and interact with Google Antigravity (Gemini Pro) via MCP, consuming zero API tokens.
    -