Skip to main content
Glama

cursor-cloud-agents-mcp

CI License: MIT

An MCP server that lets your AI assistant drive Cursor Cloud Agents. Launch agents on your repos (or repo-less for research), pick any Cursor model, follow up mid-run, fetch results, and check spend — from Claude Code, Cursor Desktop, Muse, or any MCP client.

If you've searched for "Cursor Cloud Agents MCP server", "MCP server for Cursor", "connect Claude Code to Cursor", "Cursor API MCP integration", or "launch Cursor agents programmatically" — this is it.

Why this exists

Cursor's Cloud Agents API is powerful but raw: you manage agent/run lifecycles, idempotency, timeouts, and model IDs by hand. Every community MCP bridge we found was built on the retired v0 API and left unmaintained. This one is built on the current v1 API (agent + run split), bakes in the hard-won lessons (idempotent launches, generous timeouts, never trust a timeout as failure), and is tested against the live API.

It was designed in the open: the v1 spec was reviewed by four AI models, verified against Cursor's live docs and community reports, and the code was reviewed by two more before release.

Related MCP server: cursor-sdk-mcp

Quickstart

1. Get a Cursor API key. Cursor Dashboard → API Keys → mint a User API key. (Some guides point to Dashboard → Integrations; either location works — you want the crsr_… key.)

2. Install.

# Install from source (PyPI release coming):
uvx --from git+https://github.com/tygart-media/cursor-cloud-agents-mcp cursor-cloud-agents-mcp
# or: pip install git+https://github.com/tygart-media/cursor-cloud-agents-mcp

3. Add it to your MCP client. ⚠️ Set the key in the client's env block, not just your shell — MCP servers are spawned with a scrubbed environment and won't inherit shell variables.

Claude Code (~/.claude.json or project .mcp.json):

{
  "mcpServers": {
    "cursor-cloud-agents": {
      "command": "cursor-cloud-agents-mcp",
      "env": { "CURSOR_API_KEY": "crsr_…" }
    }
  }
}

Cursor Desktop (MCP settings):

{
  "mcpServers": {
    "cursor-cloud-agents": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/tygart-media/cursor-cloud-agents-mcp", "cursor-cloud-agents-mcp"],
      "env": { "CURSOR_API_KEY": "crsr_…" }
    }
  }
}

4. Smoke test. Ask your assistant: "Use cursor_whoami to verify my Cursor key, then list my models."

Tools

Tool

What it does

cursor_launch

Launch an agent + first run. Returns agent_id and run_id. Supports repos, repo-less, model pick, plan/agent mode, idempotency keys.

cursor_status

Poll a run's status. Run status is the source of truth (agent ACTIVE ≠ still running).

cursor_result

Wait for a run to finish and return its result (truncated safely).

cursor_followup

Send a follow-up; starts a new run (returns the new run_id).

cursor_cancel

Cancel the active run (terminal; follow up to continue).

cursor_list

List agents, newest first — your reconciliation tool.

cursor_models

List model ids + params + variants. Call before launching; ids aren't guessable.

cursor_whoami

Verify auth / identity.

cursor_usage

Token usage and cost per agent or run.

Launching well

Give the agent a complete prompt: goal, constraints, and how to verify it's done. Vague prompts produce vague agents. Omit repo_url for research/review/writing tasks; pass a GitHub https URL when it should write code. Omit starting_ref to use the repo default — never assume main. Omit model entirely to use your default chain (never send the literal string "Auto" — the API rejects it).

Transports

  • rest (default): direct https://api.cursor.com with CURSOR_API_KEY. Works anywhere.

  • sandbox: shells out to a cursor-agent CLI on PATH, for sandboxed agent environments that broker the credential for you. Select with CURSOR_TRANSPORT=sandbox. Auto-detected when a CLI exists but no API key is set.

Troubleshooting

  • Launch reported status: "unknown" — the API accepted the launch but the response was slow (launches can take minutes). The agent almost certainly exists: run cursor_list and match by creation time, or retry the launch with the same idempotency_key — replays can never duplicate.

  • cursor_followup says "agent is busy" — a run is still active. Poll cursor_status until terminal, then follow up.

  • Auth errors — run cursor_whoami. Keys are minted at Dashboard → API Keys.

  • "I launched an agent but can't see it in Cursor" — API-created agents are hidden from the dashboard's default list; use the Source filter.

  • Key in logs — the client scrubs CURSOR_API_KEY from every error path, but still: never paste your key into a prompt.

What it costs

Cloud agents spend real Cursor quota. Use cursor_usage to check per-run cost. This server makes no billing decisions for you.

License

MIT.

Available Tools

9 tools
cursor_cancelA

Cancel the active run. Cancellation is terminal — to continue the conversation, send a follow-up (which starts a new run on the same agent). Does not archive the agent. Returns the run's actual post-cancel state.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes
agent_idYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does valuable work: it declares cancellation is terminal, that it does not archive the agent, and that it returns the run's actual post-cancel state. It omits idempotency/error behavior (e.g. cancelling an already-finished run) and any auth requirements, so it is strong but not complete.

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?

Three tight sentences with the terminal-cancellation fact front-loaded and no redundant restatement of the name or title. Every sentence adds a distinct behavioral fact.

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 mutation tool with no annotations and no output schema, the description covers lifecycle effects and even the return value. The remaining gap is parameter semantics, which are left entirely to bare schema titles.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%; both required params (agent_id, run_id) have only bare titles. The description never explains what these parameters identify or their format, so it fails to compensate for the coverage gap. The names are somewhat self-evident, keeping this above a 1.

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 (cancel) and resource (the active run), and implicitly differentiates from the cursor_followup sibling by noting that continuing the conversation requires a follow-up that starts a new run. An agent can distinguish this from cursor_launch/cursor_followup without opening a schema.

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?

Gives a clear when-to-use (cancelling the active run) and routes the continuation case to follow-up, which selects the alternative sibling. It does not address edge conditions such as calling when no run is active or the run has already completed, so it stops short of the explicit when-not guidance a 5 requires.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cursor_followupA

Send a follow-up prompt to an agent. Starts a NEW run — the returned run_id is what you poll with cursor_status (the old run_id is stale).

Only call when the previous run is terminal; a follow-up during an active run fails with "agent is busy" — poll cursor_status first.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
agent_idYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that a NEW run is started, that the old run_id becomes stale, that a run_id is returned for polling, and that concurrent calls fail with 'agent is busy'. It stops short of stating permissions/auth or confirming the mutation/reversibility profile, so 4 rather than 5.

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?

Three tight, front-loaded statements: what it does, what it returns and how to poll it, and the guard condition. No filler; every sentence 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?

No output schema exists, but the description compensates by explaining the return (run_id for polling) and the stale-run caveat. Usage context is complete; the only shortfall is the absence of any parameter-level detail for a 0%-coverage schema.

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 0%, so the description should compensate, but it never explains agent_id or prompt beyond their self-evident names. The 'prompt' meaning (the follow-up text) is inferable and the run_id detail relates to output rather than input, so this is minimally viable rather than strong.

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?

Specific verb ('Send a follow-up prompt to an agent') plus resource (agent), and it immediately clarifies that this starts a NEW run rather than continuing the old one. This distinguishes it cleanly from cursor_launch and cursor_status without opening any schema.

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?

Explicitly states the precondition ('Only call when the previous run is terminal') and the failure mode if violated ('agent is busy'), then names the alternative to use first ('poll cursor_status'). This is textbook when-to-use/when-not-to guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cursor_launchA

Launch a Cursor cloud agent and enqueue its first run.

Pass a complete task prompt: goal, constraints, and how to verify done — vague prompts produce vague agents. Repo-less launches (no repo_url) are for research, reviews, and writing; pass repo_url (a GitHub https URL) when the agent should write code. starting_ref is a branch or SHA; omit it to use the repo default (never assume "main").

Call cursor_models first and pass a model id verbatim — never guess ids, and never pass the literal string "Auto" (omit model instead). model_params is a list of {key, value} dicts for per-model options (only ids/params from cursor_models are accepted). mode is "agent" or "plan".

Returns agent_id AND run_id: poll cursor_status with both. Launch can take minutes; if the tool reports status "unknown", the agent may still have been created — reconcile with cursor_list, or retry with the same idempotency_key (replays are safe and never duplicate).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
nameNo
modelNo
promptYes
repo_urlNo
model_paramsNo
starting_refNo
idempotency_keyNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden and does so well: it warns the call can take minutes, explains the 'unknown' status ambiguity and reconciliation strategy, and states that idempotency replays are safe and never duplicate. This is exactly the operational context an agent needs before calling a long-running launcher.

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?

Front-loaded with the core action, then organized by parameter group and finally by return/polling behavior, with no filler sentences. It is on the long side, but nearly every sentence carries a constraint or warning that an agent would otherwise get wrong.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema and no annotations, the description explains the return values (agent_id AND run_id) and the follow-up action required, plus failure-mode handling. Nothing essential for a correct first invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 8 parameters, yet the description documents prompt content, repo_url format (GitHub https URL), starting_ref semantics (branch or SHA, omit for repo default, don't assume 'main'), model id sourcing, model_params shape ({key, value} dicts restricted to cursor_models options), mode values ('agent'/'plan'), and idempotency_key behavior. Only 'name' is unaddressed, which is a minor omission given the depth elsewhere.

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 and resource ('Launch a Cursor cloud agent and enqueue its first run'), which precisely identifies this as the agent-creation entry point distinct from cursor_status, cursor_followup, and cursor_list mentioned elsewhere in the text.

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 explicit routing: repo-less launches are for research/reviews/writing, pass repo_url when the agent should write code, call cursor_models first for model ids, and poll cursor_status with the returned ids. It also names the recovery path (cursor_list, idempotency_key retry) when status is 'unknown', 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.

cursor_listA

List your agents, newest first. Use this to reconcile after a launch reported status "unknown" (match by name/creation time), or to find an agent you lost track of.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A3.5/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; it does disclose scope ('your agents') and ordering ('newest first'), and the reconciliation hint implies returned fields (name, creation time). It says nothing about pagination, what the default limit does, or the shape of results, which is a real gap for a list tool with 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 tight sentences, purpose and ordering front-loaded before the usage scenarios, with no filler.

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?

Purpose and usage are adequately covered, but with no annotations, no output schema, and an undocumented parameter, an agent still lacks the return shape, pagination behavior, and limit semantics needed to call it precisely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single 'limit' parameter has 0% schema description coverage and the description never explains it or its default. At best, 'newest first' implies which end truncation applies to, but the semantics of the parameter are left undocumented.

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 ('List your agents') plus the ordering ('newest first'), which makes the operation unambiguous. However, it never names or contrasts with siblings like cursor_status or cursor_result, so differentiation from them is only implicit.

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?

Provides two concrete when-to-use scenarios: reconciling after a launch reports 'unknown' (with a matching method) and locating a lost agent. It stops short of explicit negatives or naming an alternative tool for those cases, so it is clear context but not full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cursor_modelsA

List available Cursor models with their ids, parameters, and variants. Call this before cursor_launch and pass the id verbatim — ids are not guessable. Each model may support params (e.g. reasoning effort); only valid id/params combinations from this list will be accepted.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does disclose key behaviors: ids are not guessable, model entries carry params/variants, and only combinations from this list are accepted. It does not mention auth requirements, rate limits, or result size, so it falls short of fully transparent.

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?

Three tight sentences, front-loaded with what the tool returns, then the required call ordering. Every sentence earns its place with no filler.

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?

No output schema exists, but the description compensates by naming the returned content (ids, parameters, variants). For a zero-param discovery tool this is largely complete, though pagination or auth prerequisites are unmentioned.

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 zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. It still adds useful context about the parameter structure of the returned models (e.g. reasoning effort), which is not a schema concern here.

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+resource: 'List available Cursor models with their ids, parameters, and variants.' The listing/discovery role is clearly distinguished from action siblings like cursor_launch and cursor_result without needing to open any schema.

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?

Explicit sequencing guidance: 'Call this before cursor_launch and pass the id verbatim — ids are not guessable.' It also explains the consequence of ignoring it ('only valid id/params combinations from this list will be accepted'), which is a clear when/when-not signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cursor_resultA

Wait for a run to finish (polling server-side) and return its result.

Convenience wrapper over cursor_status for when you just want the final answer. Waits at most timeout_s seconds (clamped to 5 min) — on timeout, keep polling with cursor_status using the returned run_id. Large results are truncated with truncated=true. Transient API blips (429/5xx) are retried with backoff.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idNo
agent_idYes
timeout_sNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and mostly succeeds: it discloses the server-side polling model, the timeout clamp to 5 minutes, timeout recovery behavior, truncation signaled via truncated=true, and retry-with-backoff on 429/5xx. It omits whether the call blocks the agent for the full timeout window and any sensitivity/permission considerations, but the operational profile is unusually well documented.

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?

Front-loaded with the core behavior, then tight clauses for timeout, fallback, truncation, and retries. Every sentence carries an actionable fact; the line wrapping is cosmetic and no content is wasted.

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?

No output schema exists, so the description appropriately covers the return surface (the run's result, plus truncated=true when large). Combined with the timeout and retry details, an agent has enough to call it correctly, though parameter-level detail on agent_id/run_id is 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?

Schema description coverage is 0%, so the description must compensate. It explains timeout_s well (clamped to 5 min) and implies run_id identifies the run for subsequent cursor_status polling, but agent_id and the concrete run_id semantics are never described. Partial compensation for the coverage gap.

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 and resource ('Wait for a run to finish... and return its result') and explicitly positions itself against a sibling ('Convenience wrapper over cursor_status for when you just want the final answer'). An agent can distinguish it from cursor_status without opening either schema.

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?

Explicitly names the condition for choosing this tool ('when you just want the final answer'), names the alternative (cursor_status), and even prescribes the fallback path on timeout ('keep polling with cursor_status using the returned run_id'). Nothing about selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cursor_statusA

Check a run's status. Run status is the source of truth — the agent's lifecycle status (ACTIVE/IDLE) is NOT "is it still working".

If run_id is omitted, the agent's latest run is used. Poll this every 10-30 seconds; never sleep inside a tool call. When terminal=true, result holds the agent's final reply.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idNo
agent_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden and does well: it discloses polling cadence, the default-run fallback, and the meaning of terminal=true plus what result holds when terminal. It doesn't cover auth requirements or what non-terminal status values look like.

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?

Three tight sentences, front-loaded with the purpose and the key semantic caveat, then operational guidance, then the terminal/result contract. No filler.

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 annotations and no output schema, the description still supplies the polling contract and the terminal/result contract, which is the core of what an agent needs. It stops short of describing the status payload itself or possible status values.

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 0% across 2 parameters, so the description must compensate. It explains run_id's default/omit behavior but says nothing about agent_id beyond its presence as required, leaving half the parameters undocumented.

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+resource ('Check a run's status') and sharpens it by disambiguating run status from the agent's ACTIVE/IDLE lifecycle status. It doesn't explicitly name a sibling like cursor_result or cursor_list, so the differentiation is conceptual rather than explicit.

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?

Explicit operational guidance: poll every 10-30 seconds, never sleep inside a tool call, and omit run_id to fall back to the agent's latest run. It tells the agent both how to use the tool and the anti-pattern to avoid.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cursor_usageB

Token usage and cost for an agent (or one run). Costs real money — check this when a run felt expensive.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idNo
agent_idYes

TDQS

B3.4/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 burden. It discloses the notable behavioral trait that the underlying activity 'costs real money', framing this as a cost-auditing read, but never states read-only safety, auth needs, rate limits, or whether the result is cached/live.

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?

Two short sentences, front-loaded with the resource and followed by the motivational cue. Every clause carries information; only the slightly informal tone keeps it from a 5.

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 two-parameter read tool with no output schema, the description covers what is returned (token usage and cost) but not the shape of the return, units, or how cost is attributed across runs. Adequate but with clear gaps for a cost-reporting tool.

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 0% and neither parameter is described in the schema, but the phrase 'an agent (or one run)' maps agent_id to the broad scope and run_id to the narrow one-run scope, adding genuine meaning. It does not explain accepted ID formats or the empty-string default on run_id.

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 resource (token usage and cost) and scope (an agent, or one run), which is clearly distinct from siblings like cursor_status or cursor_result. It lacks an explicit verb (e.g., 'retrieve'), but the intent is unambiguous.

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?

Gives one usage cue ('check this when a run felt expensive'), which is a real trigger condition but no explicit alternatives or when-not guidance. An agent can infer usage but is not routed against sibling cost/status tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cursor_whoamiA

Verify your API key works and see which identity it belongs to. Call this first if anything else fails with auth errors.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden; it discloses the observable effect (key validation result and the bound identity) and implies a harmless read-only call. It does not explicitly state there are no side effects, no rate-limit behavior, or the exact response shape, which keeps it out of the top score.

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 short sentences, zero filler, with the primary purpose front-loaded ahead of the recovery guidance. 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-param, no-output-schema identity check, the description covers what it does and when to reach for it. It could add a note that it is side-effect-free and requires no arguments, but nothing essential is missing for correct invocation.

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 zero parameters, so there is nothing to disambiguate; baseline for a no-arg tool applies. The description correctly does not invent parameters.

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 ('verify') plus two concrete resources ('API key', 'identity'), which is distinct from every sibling (launch/status/followup/result/cancel/list/models/usage). An agent can tell exactly what this tool returns without opening a schema.

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?

Gives an explicit trigger condition: call this first when other tools fail with auth errors. That is actionable routing guidance. It stops short of naming which error classes qualify or an alternative diagnostic, so it is clear context without full when-not coverage.

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. 9 tool updatesv0.1.0
    • First observedcursor_cancel
    • First observedcursor_followup
    • First observedcursor_launch
    • First observedcursor_list
    • First observedcursor_models
    • First observedcursor_result
    • First observedcursor_status
    • First observedcursor_usage
    • First observedcursor_whoami

TDQS

A4.2/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct lifecycle action: launch, status, followup, result, cancel, list, models, whoami, usage. The overlap between cursor_status and cursor_result is explicitly resolved in descriptions (result is a convenience wrapper that waits server-side). No real ambiguity.

Naming Consistency5/5

All tools follow a consistent cursor_<verb/noun> snake_case pattern (cursor_launch, cursor_status, cursor_followup, cursor_list, cursor_models, etc.). Predictable and uniform throughout, and prefixing avoids collision with other servers.

Tool Count5/5

Nine tools is well-scoped for a cloud agent orchestration server. Each earns its place: launch/poll/followup/cancel cover the run lifecycle, plus auxiliary helpers (models, list, whoami, usage) that are genuinely useful rather than filler.

Completeness4/5

Full agent lifecycle is covered: model discovery, launch, status, follow-up, result, cancel, list, auth check, and usage. Minor gaps exist such as no explicit archive/delete agent or run-logs streaming tool, but core workflows are complete and descriptions preempt common dead ends (idempotency, unknown status reconciliation).

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers