Skip to main content
Glama
newxun
by newxun
README.md
# cursor-sdk-mcp

An [MCP](https://modelcontextprotocol.io) (Model Context Protocol) server that lets MCP clients
such as **Claude Code** invoke the [Cursor SDK](https://cursor.com/docs/sdk/typescript) and use
**Cursor Agent** capabilities as tools for local and cloud coding workflows.

## What it does

The server speaks MCP over **stdio** and exposes these tools:

| Tool | Description |
| --- | --- |
| `cursor_whoami` | Verify the configured Cursor API key and return the authenticated identity. |
| `cursor_list_models` | List the Cursor models available to the account. |
| `cursor_run_agent` | Compatibility alias for a local Cursor Agent run against one `cwd`. |
| `cursor_run_local_agent` | Run a local Cursor Agent against one or more working directories with optional Cursor MCP settings, inline MCP servers, subagents, sandboxing, and auto-review. |
| `cursor_run_cloud_agent` | Run a Cursor Cloud Agent in a Cursor-hosted or self-hosted environment, optionally cloning repos and creating PRs. |
| `cursor_follow_up` | Continue a previous agent conversation by `agentId`. |
| `cursor_get_agent` | Fetch agent metadata. |
| `cursor_list_runs` | List runs for an agent. |
| `cursor_get_run` | Fetch one run by `runId`. |
| `cursor_cancel_run` | Cancel one run by `runId`. |
| `cursor_list_artifacts` | List artifacts produced by an agent. |
| `cursor_download_artifact` | Download an artifact as base64 content. |

Under the hood it uses `@cursor/sdk`'s local and cloud runtimes. Local agents read/write files on
disk from this Node process. Cloud agents run in Cursor-hosted or self-hosted environments and can
use Cursor account/team MCP configuration from `cursor.com/agents`.

## Requirements

- **Node.js >= 22.13** (required by `@cursor/sdk`).
- A **Cursor API key**. Create one at the Cursor Dashboard → API Keys (user key) or Team settings
  (service account key).

## Install & build

```bash
npm install
npm run build
```

## Configure

Set your API key (see `.env.example`):

```bash
export CURSOR_API_KEY="your-cursor-api-key"
# Optional: default model id used when a tool call omits one (default: "auto")
export CURSOR_MCP_DEFAULT_MODEL="auto"
```

## Use with Claude Code

Register the server with Claude Code (stdio):

```bash
claude mcp add cursor-sdk -- node /absolute/path/to/cursor-sdk-mcp/dist/index.js
```

Or add it to your MCP client config manually:

```json
{
  "mcpServers": {
    "cursor-sdk": {
      "command": "node",
      "args": ["/absolute/path/to/cursor-sdk-mcp/dist/index.js"],
      "env": { "CURSOR_API_KEY": "your-cursor-api-key" }
    }
  }
}
```

Then ask Claude Code to, for example, "use the cursor agent to refactor `src/auth.ts`", and it will
call `cursor_run_local_agent` or the compatibility `cursor_run_agent`.

## Local agent usage

Use `cursor_run_local_agent` when the agent should work in local directories:

```json
{
  "prompt": "Refactor src/server.ts to split schemas into src/schemas.ts and run tests.",
  "cwd": "/absolute/path/to/repo",
  "model": "auto",
  "mode": "agent",
  "settingSources": ["project", "user", "plugins"],
  "autoReview": true
}
```

`settingSources` controls which Cursor MCP/settings layers the local runtime loads from disk. You can
also pass inline `mcpServers`, `agents`, and `sandboxOptions` for one-off tool wiring and safety.
For local `cursor_follow_up`, lifecycle, and artifact calls, pass the same `cwd` used to create the
agent so the SDK can find persisted local agent state.

## Live progress and cancellation

`cursor_run_agent`, `cursor_run_local_agent`, `cursor_run_cloud_agent`, and `cursor_follow_up` run to
completion in a single tool call. Because a real coding run can take minutes, the server keeps the
call responsive:

- **Progress streaming.** When the MCP client sends a `progressToken` with the request (most clients
  do this automatically when you register a progress callback), the server streams each agent
  step — assistant text, tool calls, status changes — back as `notifications/progress`. Clients that
  reset their request timeout on progress (set `resetTimeoutOnProgress`) won't time out on long runs,
  and the user sees what the agent is doing instead of a silent wait.
- **Cancellation.** If the client cancels the tool call (its `AbortSignal` fires), the server cancels
  the underlying Cursor run, so you stop paying for work you no longer need.

Progress streaming is best-effort: if a client doesn't request progress, or the runtime doesn't
support streaming, the tool still returns the same final result.

## Cloud agent usage

Use `cursor_run_cloud_agent` when the agent should run in Cursor Cloud:

```json
{
  "prompt": "Add tests for the auth middleware and open a PR.",
  "repos": [{ "url": "https://github.com/your-org/your-repo", "startingRef": "main" }],
  "model": "auto",
  "autoCreatePR": true
}
```

`repos` can be omitted for an empty workspace or a named cloud environment. Cloud agents can use
inline MCP plus Cursor account/team MCP configured at `cursor.com/agents`. Use the lifecycle tools to
inspect runs, cancel work, and fetch artifacts.

## Cursor MCP and skills strategy

- Local agents use inline MCP unless `settingSources` includes project, user, or plugin settings.
- Local stdio MCP servers may include `cwd`; cloud stdio MCP servers must not include `cwd`.
- Cloud agents use inline MCP plus user/team MCP from `cursor.com/agents`.
- OAuth MCP must already be authorized in Cursor before local reuse.
- Cursor skills can live in `.cursor/skills/`, `.agents/skills/`, `~/.cursor/skills/`, or
  `~/.agents/skills/`.
- Claude Code skills are separate from this integration and are not loaded by Cursor Agent through
  this MCP server.

## Development

```bash
npm run dev        # run from source with hot reload (tsx)
npm run typecheck  # type-check only
npm run lint       # eslint
npm test           # integration tests (fake Cursor backend, no network)
npm run demo       # spawn the built server over stdio and call its tools
RUN_AGENT=1 npm run demo   # additionally run a real Cursor Agent (needs CURSOR_API_KEY)
```

## How it's structured

- `src/cursor.ts` — `CursorService` interface + `CursorSdkService` (the `@cursor/sdk` wrapper).
- `src/server.ts` — builds the `McpServer` and registers the tools. Decoupled from the SDK via
  `CursorService` so tests can inject a fake backend.
- `src/index.ts` — entry point; wires the real service to a `StdioServerTransport`.
- `tests/server.test.ts` — connects an in-memory MCP client to the server and exercises every tool.
- `examples/demo-client.ts` — end-to-end demo over a real stdio transport.

## License

MIT

TDQS

A4.3/5.0

Scored across 4 tools

Disambiguation5/5

Each tool serves a distinct purpose: authentication, model listing, starting an agent, and continuing a conversation. No overlap.

Naming Consistency5/5

All tools use snake_case with a consistent 'cursor_' prefix and action-oriented verbs, forming a predictable pattern.

Tool Count5/5

With 4 tools, the set covers the essential interactions (auth, model list, run, follow-up) without bloat or gaps.

Completeness4/5

The domain is well-covered for basic usage; missing an optional stop/status tool, but core workflows are complete.

Maintenance

ActivityStale
ResponsivenessNo issues