cursor-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cursor-mcpAsk Cursor agent with Claude Sonnet to review my uncommitted changes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@qmediat.io/cursor-mcp
MCP server for the Cursor CLI (cursor-agent): run Cursor's agent with any model id your plan offers — the Composer, Claude, GPT, Gemini and Grok families — through the Model Context Protocol.
Why this server?
Any Cursor model — the
modelid is passed tocursor-agent --modelas given;cursor_modelslists what your CLI offers (Composer, Claude, GPT, Gemini, Grok families on your plan)5 tools — agent execution, session continuation, model listing, session listing, health check
Parallel execution — run multiple models simultaneously with built-in concurrency control (semaphore)
Guarded execution —
spawnwithout a shell, auto-approve only through the operator's environment (never a tool parameter), the client's cancellation and the timeout kill the child and its process group (SIGTERM, SIGKILL 5 s later; on Windows cursor-agent itself only)Minimal dependencies — only
@modelcontextprotocol/sdk+zodSession management — resume conversations across calls
Related MCP server: cursor-agent-bridge
Quick Start
Prerequisites
Node.js >= 22.0.0
Cursor CLI installed and authenticated:
# Install the Cursor CLI (installs `agent`; `cursor-agent` stays as a legacy alias — the one this server resolves)
curl https://cursor.com/install -fsS | bash
# Authenticate (a Cursor account whose plan includes agent usage — see cursor.com/docs/models-and-pricing)
agent loginRequires Node.js 22 or newer.
Install
claude mcp add --scope user cursor-cli -- npx -y @qmediat.io/cursor-mcpor by hand (below). npm install -g @qmediat.io/cursor-mcp installs the cursor-mcp command, which can replace the npx line in any config.
Configuration
Claude Code (~/.claude.json)
{
"mcpServers": {
"cursor-cli": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@qmediat.io/cursor-mcp"]
}
}
}Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"cursor-cli": {
"command": "npx",
"args": ["-y", "@qmediat.io/cursor-mcp"]
}
}
}Local development
{
"mcpServers": {
"cursor-cli": {
"type": "stdio",
"command": "node",
"args": ["/path/to/cursor-mcp/dist/index.js"]
}
}
}Environment Variables
Variable | Required | Default | Description |
| No |
| Maximum concurrent cursor-agent processes — an integer from 1 to 64; anything else is the default |
| No |
|
|
| No | the CLI's default |
|
| No |
| After SIGTERM (timeout or cancellation), a child still alive this long is sent SIGKILL — an integer of milliseconds from 1 to 2147483647 (what a timer can wait); anything else is the default |
Available Tools
Tool | Description | Key Parameters |
| Execute a prompt using Cursor's AI agent |
|
| Continue an existing agent session |
|
| List the model ids the installed CLI offers | — |
| List agent sessions (this server instance) | — |
| Check installation, auth, and config | — |
Both agent tools run cursor-agent with --output-format stream-json: the answer, its session_id, request_id, the model cursor-agent reported, the duration, the number of tool calls and the files changed (write/edit targets, each once) come back as text and as structuredContent (outputSchema published). A client that sends a progress token on the request gets one notifications/progress per event (model, tool call, assistant message), so a ten-minute run never looks dead.
Models
model is passed to cursor-agent --model as given, so every id the installed CLI accepts works — the current list and prices are on cursor.com/docs/models-and-pricing, and cursor_models returns what your CLI reports (cursor-agent models). auto (the default) lets Cursor choose. This README names no ids on purpose: Cursor adds and retires models faster than this package releases, and a list here was what made 1.0.x reject every current model.
Modes
Mode | Description |
| Tools, terminal, search (default). In headless mode file changes are proposed in the answer, not applied, unless the operator set |
| Read-only planning — analyses and proposes a plan, makes no edits (in headless mode a clarifying question cannot be answered) |
| Read-only exploration — no file modifications |
Parallel Execution
Run multiple models simultaneously by making parallel tool calls:
# In Claude Code, spawn 3 Agent subprocesses:
Agent 1: cursor_agent with model=<a Composer id from cursor_models> → "Review this code"
Agent 2: cursor_agent with model=<a Claude id from cursor_models> → "Review this code"
Agent 3: cursor_agent with model=<a GPT id from cursor_models> → "Review this code"The built-in semaphore (default: 3) queues excess requests to prevent rate limit errors.
Security
No shell execution —
child_process.spawnwith argument arrays; the prompt follows a--separator and the session id must be one word, so neither can read as acursor-agentoption (a prompt or session id of-fcannot turn into--force)No credentials stored — cursor-agent handles its own OAuth
No HTTP requests — pure CLI wrapper, no network access beyond cursor-agent
Process cleanup — the client's cancellation (the MCP request signal) and the timeout kill the child and the helpers in its process group (POSIX; on Windows there is no group and only cursor-agent itself is signalled): SIGTERM, then SIGKILL after
CURSOR_KILL_GRACE_MS(5 s); the call and its concurrency slot are released only once the child itself has exited; the server's own shutdown ends every running group the same way, so no agent outlives itAuto-approve gated —
--forcerequires explicitCURSOR_ALLOW_YOLO=trueenv var, never controllable by LLMs; without it the agent only proposes changes;CURSOR_SANDBOX=enabledconfines an auto-approved agent; it applies tocursor_agentandcursor_replyalikeTrusted workspace — every call runs
cursor-agent --truston the givenworkspace(the server's cwd by default), so the agent is not prompted about the directory: pointworkspaceonly at directories you intend it to operate inConcurrency limited — semaphore prevents resource exhaustion
See SECURITY.md for full details.
Supervised Coding Skill
Optional Claude Code skill that lets Claude Code act as a supervisor while any Cursor model does the coding.
How it works: Claude Code analyzes the task, sends precise instructions to Cursor via cursor_agent, reviews the output by reading actual files from disk, and iterates with cursor_reply until satisfied (max 3 rounds).
Prerequisite: The
cursor-cliMCP server (this package) must be installed and configured in Claude Code first.
Usage
/cursor-code <task> # default: auto (Cursor chooses)
/cursor-code --model <id> <task> # any id cursor_models listsRun cursor_models to list the ids your CLI offers.
Install the skill
mkdir -p ~/.claude/skills/cursor-codeCreate ~/.claude/skills/cursor-code/SKILL.md with the following content:
---
name: cursor-code
description: Delegate coding to any Cursor model while Claude Code supervises.
Use when user says "cursor-code", "delegate to cursor", "cursor code this",
or "/cursor-code". Works with any model id cursor_models lists (the Composer,
Claude, GPT, Gemini and Grok families on your Cursor plan).
metadata:
version: 1.1.0
---
# Supervised Coding: Claude Code (Supervisor) -> Cursor (Coder)
You are the **supervisor** (Claude Code). A Cursor model is the **coder**.
You give precise instructions, the coder writes code, you review and iterate.
## Parsing
Extract from user input:
- `--model <id>` -> model to use (default: `auto`, Cursor chooses)
- Everything else -> the task description
If user says a model name naturally (e.g. "use composer", "with gemini", "z grok"),
extract it and map to an id from cursor_models.
## Workflow
### Step 1: Analyze
- Read the relevant files to understand current state
- Break the user's task into a single, focused coding instruction
- Identify: target files, constraints, acceptance criteria
### Step 2: Instruct
Call `cursor_agent` with:
- `model`: extracted model or `auto`
- `workspace`: current working directory
- `prompt`: precise instruction with file paths, function names, constraints
- Keep prompt focused -- one task per call, not an entire feature
- Extract and store the `session_id` from the response for use in Step 4
Output before calling: `[cursor-cli -> <model>]`
### Step 3: Verify
After the coder returns:
- Run `git diff --name-only` to discover ALL files the coder modified
- Read EVERY modified file from disk (use Read tool) -- not just the ones from your prompt
- Diff against expectations
- Check: correctness, edge cases, security, type safety
### Step 4: Iterate (max 3 rounds)
If issues found:
- Call `cursor_reply` with the same session_id
- Give specific fix instructions (file:line, what's wrong, what to do)
- Re-verify after each round
- If the coder is fundamentally off-track (wrong approach, not just small bugs),
abandon the session early and start fresh with a more explicit prompt
### Step 5: Report
Summarize to the user:
- Model used (confirm from response, not just request)
- What was done
- Files changed
- Rounds needed (1 = clean, 2-3 = corrections applied)
- Any manual fixes Claude Code applied directly
## Rules
- ONE task per cursor_agent call -- don't batch entire features
- ALWAYS read files from disk after coder finishes
- NEVER trust cached file contents -- Cursor writes directly to disk
- Set timeout_seconds appropriately (30-120s for typical tasks)
- If the task is trivial (< 5 lines) -- just do it yourself, don't delegate
- Follow model transparency rules -- always state [cursor-cli -> model] before call
- If cursor_agent/cursor_reply fails (timeout, auth, CLI not found) -- report the error to the user and run cursor_health to diagnose. Do not retry silently
- If unsure about valid model IDs -- call cursor_models firstRestart Claude Code after creating the skill file.
Development
git clone https://github.com/qmediat/cursor-mcp.git
cd cursor-mcp
npm install
npm run build
node dist/index.jsSee CONTRIBUTING.md for guidelines; npm test builds and runs the smoke and argv tests.
Trademarks and affiliation
Cursor is a trademark of Anysphere. This is an independent, community-maintained integration published by Quantum Media Technologies sp. z o.o.; it is not affiliated with, sponsored by or endorsed by Anysphere. Use of the Cursor API or CLI through this server is subject to Anysphere's own terms and to your own API key or account.
License
MIT - Quantum Media Technologies sp. z o.o.
Made by Quantum Media Technologies · more open source from qmediat
Available Tools
5 toolscursor_agentA
Execute a prompt using Cursor's AI agent with any model id the installed cursor-agent accepts (Composer, Claude, GPT, Gemini, Grok families on your plan; run cursor_models for ids). Modes: 'agent' (tools, terminal, search), 'plan' (design-focused), 'ask' (read-only). In headless mode cursor-agent only PROPOSES file changes unless the server operator set CURSOR_ALLOW_YOLO=true (then --force applies them; CURSOR_SANDBOX=enabled confines them). The result lists the files changed and the model used; a client that sends a progress token gets a progress notification per tool call.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Agent mode. 'agent' = full capabilities (file edit, terminal, search). 'plan' = design-focused, asks clarifying questions. 'ask' = read-only exploration. Default: agent. | |
| model | No | AI model id as cursor-agent accepts it, passed through to --model (any id cursor_models lists; e.g. a Composer, Claude, GPT, Gemini or Grok id on your plan). Default: auto (Cursor picks the model). Was a closed list of old ids before 1.1.0. | |
| prompt | Yes | The prompt or task for the Cursor agent. Supports natural language instructions for code generation, review, debugging, and more. | |
| workspace | No | Working directory for the agent. Affects file search scope and project context. Default: server's current working directory. | |
| timeout_seconds | No | Maximum execution time in seconds (10-3600). Default: 600 (10 minutes). |
Output Schema
| Name | Required | Description |
|---|---|---|
| model | Yes | The model cursor-agent reported at start (its display name), if it did |
| result | Yes | The agent's final answer; without a result event, its last message, else empty (what stdout held is in noise_sample, never here) |
| status | Yes | cursor-agent's result subtype: success, error, …; no-result-event when the run ended without one |
| stderr | Yes | |
| is_error | Yes | |
| exit_code | Yes | cursor-agent's exit code (null when it was killed) |
| request_id | Yes | |
| session_id | Yes | The session to resume with cursor_reply |
| tool_calls | Yes | Completed tool calls the agent made |
| duration_ms | Yes | |
| noise_lines | Yes | stdout lines that were not stream-json events (counted, never dropped) |
| noise_sample | Yes | The first few of those lines, verbatim (500 characters each at most) |
| files_changed | Yes | Paths of file-tool write/edit/delete calls that reported success, in order, each once. Shell commands are not inspected: a file written by a shell tool is not listed. |
| files_proposed | Yes | Paths of file-tool write/edit/delete calls that did not report success (proposed without --force, refused, failed), each once |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that in headless mode file changes are only PROPOSED unless CURSOR_ALLOW_YOLO=true, that --force then applies them, that CURSOR_SANDBOX=enabled confines them, and that the result lists changed files plus the model used. It even documents that progress tokens yield a notification per tool call, which is behavior an agent cannot infer from schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four information-dense sentences with no filler: capability and model scope first, then mode semantics, then the critical headless-safety caveat, then result/progress behavior. Every sentence carries load and the most consequential fact (propose-only vs --force) is placed where it will be read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, prompt-driven agent-execution tool with an output schema present, this is complete: execution modes, model sourcing, the propose-vs-apply safety model with its env-var controls, and progress-notification behavior are all covered, and return contents need not be detailed further given the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so mode, model, prompt, workspace, and timeout are all already documented in the schema, including the same mode definitions. The description's model-family enumeration and 'run cursor_models for ids' note restate schema content rather than adding syntax or constraints, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Execute a prompt using Cursor's AI agent') and immediately scopes it by noting that any model id the installed cursor-agent accepts works, pointing to cursor_models for ids. An agent can distinguish this from cursor_reply, cursor_sessions, and cursor_health 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The three modes are spelled out with their operational meaning ('agent' = tools/terminal/search, 'plan' = design-focused, 'ask' = read-only), which gives clear when-to-use guidance for mode selection, and cursor_models is named as the source of model ids. It stops short of explicit routing rules against sibling tools like cursor_reply or cursor_sessions, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cursor_healthA
Check Cursor CLI installation, authentication, and server configuration. Run this first to verify everything is set up correctly.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose the scope of checks performed. However, it never states that the call is non-destructive/read-only, whether it requires credentials to run, or what a failed check looks like. For a harmless diagnostic the risk is low, so the gap is moderate rather than severe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the action and its scope front-loaded before the usage cue. Nothing is redundant with the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-param diagnostic, the description covers what is checked and when to call it. The only missing piece is what the result contains (e.g., per-check pass/fail status), which matters slightly since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. No misleading parameter hints are present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Check) and three concrete resources it inspects: CLI installation, authentication, and server configuration. This is unmistakably a diagnostic tool, cleanly distinguished from the action-oriented siblings (cursor_agent, cursor_reply, cursor_sessions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Run this first to verify everything is set up correctly" gives an explicit trigger (setup verification / initial call). It lacks any when-not guidance or named alternatives, but for a zero-param health check the usage context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cursor_modelsA
List the model ids the installed cursor-agent offers (its models command), or a known list when it offers none. Pricing is on cursor.com/docs/models-and-pricing. Use an id with cursor_agent's 'model' parameter.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It usefully discloses fallback behavior ('or a known list when it offers none'), implying results may not always reflect the local install, but says nothing about ordering, completeness, auth requirements, or latency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero waste, and the primary purpose is front-loaded. The pricing pointer is not filler since pricing is not returned by the tool and users frequently need it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description still covers what is returned (model ids), the fallback case, and how to consume the output. Only the exact return shape (e.g., array vs. text, ordering) is left unspecified, which is minor for a zero-arg list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter surface to document and the baseline of 4 applies. The description correctly implies no arguments are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the model ids the installed cursor-agent offers') plus the underlying mechanism (its `models` command). An agent can immediately distinguish it from siblings like cursor_agent, which is the tool that consumes these ids.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear downstream context: 'Use an id with cursor_agent's model parameter,' which tells the agent when this tool is needed (before invoking cursor_agent with a model). There is no explicit when-not-to-use or stated alternative, but the routing intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cursor_replyA
Continue an existing Cursor agent session. Send a follow-up message in the same conversation context. Requires a session_id from a previous cursor_agent call.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Override the model for this reply (any id cursor_models lists). If omitted, uses the session's original model. | |
| prompt | Yes | Follow-up message to send in an existing Cursor agent session. | |
| session_id | Yes | Session ID from a previous cursor-agent call. Use cursor-sessions to list available sessions. | |
| timeout_seconds | No | Maximum execution time in seconds (10-3600). Default: 600 (10 minutes). |
Output Schema
| Name | Required | Description |
|---|---|---|
| model | Yes | The model cursor-agent reported at start (its display name), if it did |
| result | Yes | The agent's final answer; without a result event, its last message, else empty (what stdout held is in noise_sample, never here) |
| status | Yes | cursor-agent's result subtype: success, error, …; no-result-event when the run ended without one |
| stderr | Yes | |
| is_error | Yes | |
| exit_code | Yes | cursor-agent's exit code (null when it was killed) |
| request_id | Yes | |
| session_id | Yes | The session to resume with cursor_reply |
| tool_calls | Yes | Completed tool calls the agent made |
| duration_ms | Yes | |
| noise_lines | Yes | stdout lines that were not stream-json events (counted, never dropped) |
| noise_sample | Yes | The first few of those lines, verbatim (500 characters each at most) |
| files_changed | Yes | Paths of file-tool write/edit/delete calls that reported success, in order, each once. Shell commands are not inspected: a file written by a shell tool is not listed. |
| files_proposed | Yes | Paths of file-tool write/edit/delete calls that did not report success (proposed without --force, refused, failed), each once |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the dependency on a prior cursor_agent/session_id, but says nothing about side effects (an agent session can read and modify code), blocking behavior, or what happens on failure/timeout for what is effectively a long-running state-changing call. The timeout semantics live only in the schema, and agent-session side effects are never surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and free of filler. The final sentence overlaps with the schema's session_id description, but it also usefully points at the sibling that produces the ID, so it earns most of its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and all four parameters are documented in the schema. The description covers the action and the entry precondition, leaving only behavioral concerns such as side effects and long-running/blocking execution unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the model, timeout, session_id and prompt parameters all documented in the schema itself. The description only restates the session_id requirement already covered in the schema and adds no format, default, or interaction detail for model/timeout overrides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Continue an existing Cursor agent session', 'Send a follow-up message') and contrasts implicitly with cursor_agent by emphasizing that the session must already exist. An agent can distinguish it from the session-creating sibling, though the contrast is framed as a prerequisite rather than an explicit sibling comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly establishes the usage context ('the same conversation context') and the precondition ('Requires a session_id from a previous cursor_agent call'), which effectively routes the agent to cursor_agent when no session exists. No explicit when-not or named alternative is stated, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cursor_sessionsA
List Cursor agent sessions created during this MCP server instance. Shows session IDs, models, and prompts. Use session IDs with cursor_reply to continue a conversation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It does contribute genuine behavioral context — sessions are scoped to 'this MCP server instance,' so the listing is ephemeral — but it omits safety profile (read-only vs mutating), pagination/limits, and whether sessions are ever pruned or expire.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core purpose and the scope qualifier, then the returned fields, then the actionable follow-up. No filler or repetition of structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema and no annotations, the description covers purpose, output fields, and lifecycle scope adequately. The remaining gap — return volume or ordering — is minor given the low complexity of the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No parameter guidance is needed or missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List Cursor agent sessions') and adds scope ('created during this MCP server instance') plus returned fields (session IDs, models, prompts). It is clearly distinguishable from cursor_reply, which it explicitly references, though it does not position itself against cursor_agent, cursor_models, or cursor_health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence 'Use session IDs with cursor_reply to continue a conversation' implies the reason to call this tool (to obtain IDs for continuation), but it never states when this tool should be chosen over siblings, nor any condition under which it is unnecessary. Usage is inferable rather than stated.
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.
5 tool updates
v1.2.0- First observed
cursor_agent - First observed
cursor_health - First observed
cursor_models - First observed
cursor_reply - First observed
cursor_sessions
TDQS
Scored across 5 tools
Each tool targets a distinct operation: starting an agent session, continuing it, listing models, listing sessions, and checking health. The session_id requirement in cursor_reply clearly separates it from cursor_agent, leaving no ambiguity.
All tools share the consistent `cursor_` prefix and snake_case, but suffixes mix nouns (agent, models, sessions, health) with a verb-like action (reply). This minor deviation is still readable and predictable.
Five tools is well-scoped for a Cursor agent wrapper, covering execution, continuation, discovery, and diagnostics without redundancy. Each tool clearly earns its place.
Core workflows for interacting with the Cursor agent are covered: starting, continuing, listing models/sessions, and health checks. Minor gaps like session cancellation or status inspection exist but are not essential for typical use.
Maintenance
Related MCP Connectors
Discover and call AI agents via MCP. Supports A2A agents and platform agents with async tasks.
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
A paid remote MCP for OpenAI Codex agent coordination MCP, built to return verdicts, receipts, usage
Agent-native collaboration network: orchestrate a team of long-running agents from any MCP client.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables MCP clients to invoke Cursor SDK's agent runtime, run coding agents, list models, and continue conversations.41-
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients like Claude Code to delegate coding tasks to the local Cursor Agent CLI, with persistent per-workspace sessions that resume across calls.12 npmMIT
- AlicenseAqualityAmaintenanceEnables MCP clients like Claude Code and Codex to delegate coding tasks to Cursor's CLI agent, which implements changes in the workspace and returns clean, structured results for review.376 npm4MIT
- AlicenseAqualityCmaintenanceEnables AI assistants and other MCP clients to launch and steer Cursor Cloud Agents on repositories or as repo-less research tasks, including model selection, mid-run follow-ups, cancellation, result retrieval, and run listing. Also exposes authentication checks and per-agent or per-run token usage and cost reporting.9MIT