{
  "markdown": "# Upstash MCP Server\n\n[![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=upstash&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkB1cHN0YXNoL21jcC1zZXJ2ZXJAbGF0ZXN0IiwiLS1lbWFpbCIsIllPVVJfRU1BSUwiLCItLWFwaS1rZXkiLCJZT1VSX0FQSV9LRVkiXX0%3D)\n[<img alt=\"Install in VS Code\" src=\"https://img.shields.io/badge/Install%20in%20VS%20Code-0098FF?style=for-the-badge&logo=visualstudiocode&logoColor=white\">](https://insiders.vscode.dev/redirect/mcp/install?name=upstash&inputs=%5B%7B%22id%22%3A%22email%22%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Upstash%20email%22%7D%2C%7B%22id%22%3A%22apiKey%22%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Upstash%20API%20key%22%2C%22password%22%3Atrue%7D%5D&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40upstash%2Fmcp-server%40latest%22%2C%22--email%22%2C%22%24%7Binput%3Aemail%7D%22%2C%22--api-key%22%2C%22%24%7Binput%3AapiKey%7D%22%5D%7D)\n\n[![MCP Registry](https://img.shields.io/badge/MCP%20Registry-io.github.upstash%2Fmcp--server-3b82f6)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.upstash/mcp-server)\n[![Glama](https://img.shields.io/badge/Glama-upstash%2Fmcp--server-0f172a)](https://glama.ai/mcp/servers/upstash/mcp-server)\n[![PulseMCP](https://img.shields.io/badge/PulseMCP-upstash--redis-1f2937)](https://www.pulsemcp.com/servers/upstash-redis)\n\nThe Upstash MCP server lets your agent manage and debug your Upstash resources directly, across **Redis**, **QStash**, **Workflow**, and **[Upstash Box](https://upstash.com/docs/box/overall/quickstart)**.\n\n> [!TIP]\n> For most workflows, prefer installing the [Upstash Skill](https://upstash.com/docs/agent-resources/skills) and letting your agent drive [`@upstash/cli`](https://upstash.com/docs/agent-resources/cli) over running the MCP server.\n\n> [!TIP]\n> If you are an AI agent and just need a Redis DB to use or experiment with, you don't need an account at all — call the `redis_database_start_free` tool, or send a POST request to [`https://upstash.com/start-redis`](https://upstash.com/start-redis) directly. It's free, no signup, and the response is markdown with credentials and a quickstart. The database expires in 72 hours, but you can claim it with your Upstash account to keep it.\n>\n> Pass `user_agent` to identify yourself (e.g. `claude-code`, `cursor`, `codex`, `opencode`); the tool forwards it as the `User-Agent` header. Calling the endpoint directly, send the same header yourself, plus a fresh UUIDv4 as `Idempotency-Key`:\n>\n> ```bash\n> curl -X POST -H \"Idempotency-Key: <uuidv4>\" -H \"User-Agent: <your-agent-name>\" https://upstash.com/start-redis\n> ```\n\n## Quickstart\n\nYou'll need your Upstash account email and an API key — create one at [Upstash Console → Account → API Keys](https://console.upstash.com/account/api).\n\nThe Upstash MCP server works with any MCP-compatible client. If your client isn't listed below, check its documentation for how to add a stdio MCP server, then point it at the base command:\n\n```bash\nnpx -y @upstash/mcp-server@latest --email YOUR_EMAIL --api-key YOUR_API_KEY\n```\n\n> [!NOTE]\n> Readonly API keys are supported. When the server starts with one, it automatically disables every tool that would modify state (creating databases, deleting backups, retrying workflows, etc.). Your agent can still read and query your account — including Redis, QStash logs, schedules, and Workflow logs — but it cannot make changes. Upstash Box tools are not available with a readonly key.\n\n<details>\n<summary><b>Claude Code</b></summary>\n\nRun this command in your terminal. See the [Claude Code MCP docs](https://docs.anthropic.com/en/docs/claude-code/mcp) for more info.\n\n```sh\nclaude mcp add --scope user upstash -- npx -y @upstash/mcp-server@latest --email YOUR_EMAIL --api-key YOUR_API_KEY\n```\n\n</details>\n\n<details>\n<summary><b>Cursor</b></summary>\n\nGo to `Settings` → `Cursor Settings` → `MCP` → `Add new global MCP server`.\n\nPasting the following configuration into your Cursor `~/.cursor/mcp.json` file is the recommended approach. You may also install in a specific project by creating `.cursor/mcp.json` in your project folder. See the [Cursor MCP docs](https://docs.cursor.com/context/model-context-protocol) for more info.\n\nSince Cursor 1.0, you can click the install button below for instant one-click installation. Replace `YOUR_EMAIL` and `YOUR_API_KEY` with your real values before confirming.\n\n[![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=upstash&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkB1cHN0YXNoL21jcC1zZXJ2ZXJAbGF0ZXN0IiwiLS1lbWFpbCIsIllPVVJfRU1BSUwiLCItLWFwaS1rZXkiLCJZT1VSX0FQSV9LRVkiXX0%3D)\n\n```json\n{\n  \"mcpServers\": {\n    \"upstash\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@upstash/mcp-server@latest\",\n        \"--email\",\n        \"YOUR_EMAIL\",\n        \"--api-key\",\n        \"YOUR_API_KEY\"\n      ]\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary><b>Windsurf</b></summary>\n\nAdd this to your Windsurf MCP config file at `~/.codeium/windsurf/mcp_config.json`. See the [Windsurf MCP docs](https://docs.windsurf.com/windsurf/cascade/mcp) for more info.\n\n```json\n{\n  \"mcpServers\": {\n    \"upstash\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@upstash/mcp-server@latest\",\n        \"--email\",\n        \"YOUR_EMAIL\",\n        \"--api-key\",\n        \"YOUR_API_KEY\"\n      ]\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary><b>OpenCode</b></summary>\n\nAdd this to your OpenCode configuration file (`~/.config/opencode/opencode.json` or a project-level `opencode.json`). See the [OpenCode MCP docs](https://opencode.ai/docs/mcp-servers) for more info.\n\n```json\n{\n  \"mcp\": {\n    \"upstash\": {\n      \"type\": \"local\",\n      \"command\": [\n        \"npx\",\n        \"-y\",\n        \"@upstash/mcp-server@latest\",\n        \"--email\",\n        \"YOUR_EMAIL\",\n        \"--api-key\",\n        \"YOUR_API_KEY\"\n      ],\n      \"enabled\": true\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary><b>OpenAI Codex</b></summary>\n\nSee the [OpenAI Codex MCP docs](https://developers.openai.com/codex/mcp) for more info.\n\n**Using the CLI**\n\n```sh\ncodex mcp add upstash -- npx -y @upstash/mcp-server@latest --email YOUR_EMAIL --api-key YOUR_API_KEY\n```\n\n**Manual configuration**\n\nAdd this to your Codex config file (`~/.codex/config.toml` or `.codex/config.toml`):\n\n```toml\n[mcp_servers.upstash]\ncommand = \"npx\"\nargs = [\"-y\", \"@upstash/mcp-server@latest\", \"--email\", \"YOUR_EMAIL\", \"--api-key\", \"YOUR_API_KEY\"]\nstartup_timeout_sec = 20\n```\n\n> [!NOTE]\n> If you see startup timeout errors, increase `startup_timeout_sec` to `40`.\n\n</details>\n\n<details>\n<summary><b>VS Code</b></summary>\n\nClick to install — VS Code will prompt for your email and API key (stored in its secret storage):\n\n[<img alt=\"Install in VS Code\" src=\"https://img.shields.io/badge/Install%20in%20VS%20Code-0098FF?style=for-the-badge&logo=visualstudiocode&logoColor=white\" />](https://insiders.vscode.dev/redirect/mcp/install?name=upstash&inputs=%5B%7B%22id%22%3A%22email%22%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Upstash%20email%22%7D%2C%7B%22id%22%3A%22apiKey%22%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Upstash%20API%20key%22%2C%22password%22%3Atrue%7D%5D&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40upstash%2Fmcp-server%40latest%22%2C%22--email%22%2C%22%24%7Binput%3Aemail%7D%22%2C%22--api-key%22%2C%22%24%7Binput%3AapiKey%7D%22%5D%7D)\n[<img alt=\"Install in VS Code Insiders\" src=\"https://img.shields.io/badge/Install%20in%20VS%20Code%20Insiders-24bfa5?style=for-the-badge&logo=visualstudiocode&logoColor=white\" />](https://insiders.vscode.dev/redirect/mcp/install?name=upstash&inputs=%5B%7B%22id%22%3A%22email%22%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Upstash%20email%22%7D%2C%7B%22id%22%3A%22apiKey%22%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Upstash%20API%20key%22%2C%22password%22%3Atrue%7D%5D&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40upstash%2Fmcp-server%40latest%22%2C%22--email%22%2C%22%24%7Binput%3Aemail%7D%22%2C%22--api-key%22%2C%22%24%7Binput%3AapiKey%7D%22%5D%7D&quality=insiders)\n\nOr add this to `.vscode/mcp.json` (or your user `mcp.servers` setting). Using `inputs` with `promptString` means your API key is prompted once and kept in VS Code's secret storage instead of sitting in the config file. See the [VS Code MCP docs](https://code.visualstudio.com/docs/copilot/chat/mcp-servers) for more info.\n\n```json\n{\n  \"inputs\": [\n    { \"type\": \"promptString\", \"id\": \"email\", \"description\": \"Upstash email\" },\n    { \"type\": \"promptString\", \"id\": \"apiKey\", \"description\": \"Upstash API key\", \"password\": true }\n  ],\n  \"servers\": {\n    \"upstash\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@upstash/mcp-server@latest\",\n        \"--email\",\n        \"${input:email}\",\n        \"--api-key\",\n        \"${input:apiKey}\"\n      ]\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary><b>Google Antigravity</b></summary>\n\nAdd this to your Antigravity MCP config. See the [Antigravity MCP docs](https://antigravity.google/docs/mcp) for more info.\n\n```json\n{\n  \"mcpServers\": {\n    \"upstash\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@upstash/mcp-server@latest\",\n        \"--email\",\n        \"YOUR_EMAIL\",\n        \"--api-key\",\n        \"YOUR_API_KEY\"\n      ]\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary><b>Claude Desktop</b></summary>\n\nOpen Claude Desktop's developer settings and edit `claude_desktop_config.json`. See the [Claude Desktop MCP docs](https://modelcontextprotocol.io/quickstart/user) for more info.\n\n```json\n{\n  \"mcpServers\": {\n    \"upstash\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@upstash/mcp-server@latest\",\n        \"--email\",\n        \"YOUR_EMAIL\",\n        \"--api-key\",\n        \"YOUR_API_KEY\"\n      ]\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary><b>Gemini CLI</b></summary>\n\nOpen the Gemini CLI settings file at `~/.gemini/settings.json` and add Upstash to `mcpServers`. See [Gemini CLI Configuration](https://google-gemini.github.io/gemini-cli/docs/tools/mcp-server.html) for details.\n\n```json\n{\n  \"mcpServers\": {\n    \"upstash\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@upstash/mcp-server@latest\",\n        \"--email\",\n        \"YOUR_EMAIL\",\n        \"--api-key\",\n        \"YOUR_API_KEY\"\n      ]\n    }\n  }\n}\n```\n\n</details>\n\n## Example prompts\n\n### Redis\n\n- _\"Start a free temporary Redis I can experiment with\"_\n- _\"Create a new Redis database in us-east-1\"_\n- _\"List my databases sorted by memory usage\"_\n- _\"Update the user schema by pulling from Redis\"_\n- _\"Create a backup of this db, then clear it\"_\n- _\"Show me throughput spikes during the last 7 days\"_\n\n### QStash & Workflow\n\n- _\"Check the QStash logs and figure out why my webhook keeps failing\"_\n- _\"Find failed workflow runs for user `@admin` today\"_\n- _\"Retry the failed workflow run that started 2 hours ago\"_\n- _\"Summarize what's in the DLQ right now, grouped by error type\"_\n- _\"Pause the schedules that are throwing errors\"_\n\n### Upstash Box\n\n- _\"Spin up a Box, clone this repo, and run the tests\"_\n- _\"Snapshot this Box and create 5 copies from it, assign each one a GitHub issue\"_\n- _\"My Box keeps failing to start, check the logs and tell me what's wrong\"_\n\n## Using a Box as your workspace\n\nA Box is a remote Linux container with its own filesystem. The Box tools let an agent work inside one while the agent itself keeps running on your machine: files through `box_read` / `box_write` / `box_edit`, commands through `box_exec`, git and search through `box_git`, and a running server through `box_preview`. `box_upload` copies files into the Box from the machine running the MCP server, which is how uncommitted local work gets in — a clone only brings what you have pushed. With the usual stdio setup the server runs on your own machine, so those are your paths; if you run it remotely with `--transport http`, it reads the server host's filesystem instead, not yours.\n\nBox tools need a Box API key, which is a different credential from your Upstash account API key — the two are not interchangeable. The install command at the top of this README does not include one, so pass `--box-api-key` as well or the first Box call will fail:\n\n```sh\nclaude mcp add --scope user upstash -- npx -y @upstash/mcp-server@latest \\\n  --email YOUR_EMAIL --api-key YOUR_API_KEY --box-api-key YOUR_BOX_API_KEY\n```\n\nSee [Upstash Box API key](#upstash-box-api-key-optional) for the environment-variable form and where to get the key.\n\nIf you only use Upstash Box, you can start the server with `--box-api-key` alone and no account credentials. Redis, QStash and Workflow tools are unavailable in that mode.\n\nCreate the workspace once and reuse its id:\n\n- _\"Create a Box with clone_repo https://github.com/me/my-app, no agent, then wait until the repo is there\"_\n- _\"In that Box, run the tests and fix whatever fails\"_\n- _\"Commit on a new branch in the Box and open a PR\"_\n\nA create returns while the container is still coming up, and `clone_repo` starts cloning only once the Box reports `idle`, so give it a moment before the first read.\n\n**The one thing to know:** your agent's own Read, Write, Edit, Bash, Glob and Grep tools still act on your machine. Nothing stops it from reading a local file and writing the change into the Box, and neither side reports the mismatch. The server sends guidance at startup and every Box tool says which machine it touches, but if you want the boundary enforced rather than suggested, add a `CLAUDE.md` to the project you're driving from:\n\n```markdown\n# Workspace\n\nThe workspace for this project is an Upstash Box, not this directory.\n\n- Use `box_read`, `box_write` and `box_edit` for files; `box_exec` for commands;\n  `box_git` for git and for search (`git grep`, `git ls-files`).\n- Do not use Read, Write, Edit, Bash, Glob or Grep for project files — they act\n  on this machine. Searching locally finds the wrong tree, or nothing at all.\n- The one exception is `box_upload`: it reads paths on this machine on purpose,\n  to copy local files into the Box.\n- The box id for this project is: <paste it here>\n```\n\n## Upstash Box API key (optional)\n\nFor the MCP to interact with [Upstash Box](https://upstash.com/docs/box/overall/quickstart), the agent needs your Box API key. By default you have to paste it into the chat (or keep it in a `.env`) every time the agent runs a Box tool. To avoid this, you can wire the key into the MCP setup itself so the server picks it up automatically on startup.\n\nYou can pass it in two ways.\n\n**CLI flag**\n\n```json\n{\n  \"mcpServers\": {\n    \"upstash\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@upstash/mcp-server@latest\",\n        \"--email\",\n        \"YOUR_EMAIL\",\n        \"--api-key\",\n        \"YOUR_API_KEY\",\n        \"--box-api-key\",\n        \"YOUR_BOX_API_KEY\"\n      ]\n    }\n  }\n}\n```\n\n**Environment variable**\n\n```json\n{\n  \"mcpServers\": {\n    \"upstash\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@upstash/mcp-server@latest\",\n        \"--email\",\n        \"YOUR_EMAIL\",\n        \"--api-key\",\n        \"YOUR_API_KEY\"\n      ],\n      \"env\": {\n        \"UPSTASH_BOX_API_KEY\": \"YOUR_BOX_API_KEY\"\n      }\n    }\n  }\n}\n```\n\n## Debugging\n\nIf the server is misbehaving or a tool keeps failing, enable verbose logging with the `--debug` flag:\n\n```json\n{\n  \"mcpServers\": {\n    \"upstash\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@upstash/mcp-server@latest\",\n        \"--email\",\n        \"YOUR_EMAIL\",\n        \"--api-key\",\n        \"YOUR_API_KEY\",\n        \"--debug\"\n      ]\n    }\n  }\n}\n```\n\nEvery internal event is then written to **stderr**, which your MCP client surfaces in its own log viewer. Share the relevant snippet when reporting an issue on [GitHub](https://github.com/upstash/mcp/issues).\n\n## Telemetry\n\nThe server sends anonymous diagnostic info to Upstash with each request: the MCP server SDK version, your runtime version (Node, Bun, etc.), and basic platform info (OS and architecture). **No account data, tool arguments, or results are collected.** To opt out, add `--disable-telemetry` to the args.\n\n## Development\n\nClone the project and run:\n\n```bash\nbun i\nbun run watch\n```\n\nThis continuously builds the project and watches for changes.\n\nTo run the built server standalone (uses `.env` for credentials) and smoke-test it before publishing:\n\n```bash\nbun i          # ensure deps are current\nbun run build\n# stdio (default) — waits for an MCP client to speak JSON-RPC on stdin:\nbun dist/index.js\n# or HTTP transport, to poke it manually on a port:\nbun dist/index.js --transport http --port 3000\n```\n\nFor testing, create a `.env` file in the project root:\n\n```bash\nUPSTASH_EMAIL=<UPSTASH_EMAIL>\nUPSTASH_API_KEY=<UPSTASH_API_KEY>\n# Optional, for Box tools:\nUPSTASH_BOX_API_KEY=<UPSTASH_BOX_API_KEY>\n```\n\nTo install the local MCP server into Claude Code:\n\n```bash\nclaude mcp add --transport stdio upstash -- bun --watch dist/index.js --debug\n```\n\nTo tail logs from the MCP server in real time:\n\n```bash\nbun run logs\n```\n",
  "bytes": 17182,
  "sha": "bc7a87781fc1692c988ffd802ed78a7d401aea80961467e1f2a2bb620434b231",
  "repo_slug": "upstash/mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_upstash_mcp_server_77ad7281/readme"
}