Cursor Cloud MCP
# Cursor Cloud MCP
Unofficial MCP server for [Cursor Cloud Agents](https://cursor.com/agents). Same sign-in and API handling as [Cursor for Android](https://github.com/BenItBuhner/Cursor-for-Android). Not affiliated with Anysphere, Inc.
List agents, read transcripts, follow runs, and send follow-ups from any MCP client.
## Install
Node 20+.
```bash
npm install
npm run build
```
## Auth
Paste an API key from [cursor.com/dashboard/api](https://cursor.com/dashboard/api):
```bash
export CURSOR_API_KEY=key_...
```
Or sign in in the browser. That stores a key at `~/.config/cursor-cloud-mcp/credentials.json`.
```bash
npm run login
npm run status
npm run logout
```
## Run
```bash
npm start
```
`~/.cursor/mcp.json`:
```json
{
"mcpServers": {
"cursor-cloud": {
"command": "node",
"args": ["/absolute/path/to/Cursor-Cloud-MCP/build/index.js"],
"env": {
"CURSOR_API_KEY": "${env:CURSOR_API_KEY}"
}
}
}
}
```
`npm run http` serves `POST /mcp` on port 8091.
Set `CURSOR_EXTENDED_MODE=1` for the same unofficial account endpoints [Cursor for Android](https://github.com/BenItBuhner/Cursor-for-Android) keeps behind Extended mode. Off by default. Call `cursor_status` first. The server describes its own tools.
## License
[MIT](LICENSE) © 2026 Bennett Buhner
TDQS
Scored across 29 tools
Most tools target distinct resources and actions, and descriptions clarify differences. The main overlap is list_agents vs list_agents_v0 (legacy version), with minor potential confusion between get_run/get_run_stream and PR-related tools, but these are mostly resolvable by descriptions.
Most names follow snake_case verb_noun conventions (list_*, get_*, create_*, cancel_*), but several are noun-first or state-oriented (cursor_status, project_lineage, agent_lifecycle, prewarm_transcript), creating a mixed but still readable pattern.
29 tools is heavy for the server's apparent scope. The set includes legacy variants (list_agents_v0) and many extended endpoints, pushing well beyond the 3-15 range that tends to be well-scoped.
A critical gap is the absence of a create_agent tool, despite list_models explicitly referencing create_agent. There is also no update_agent or initial run creation, leaving core lifecycle operations incomplete despite extensive read and extended coverage.