Official MCP connector
One config block and Cursor's agent can deploy your repo, read build logs, set env vars and add a database on SnapDeploy — and reply with the live URL. Works in Windsurf the same way.
deploy-scoped token on API Keys (the page generates the block below with your token already in it).~/.cursor/mcp.json — or Cursor Settings → MCP → Add server. Windsurf: ~/.codeium/windsurf/mcp_config.json.{
"mcpServers": {
"snapdeploy": {
"command": "npx",
"args": ["-y", "@snapdeploy/mcp"],
"env": { "SNAPDEPLOY_API_KEY": "sd_pat_your_token" }
}
}
}
Your repo needs to be on GitHub and connected to SnapDeploy once; the connector returns the connect link if it isn't.
On a failed build the reply includes the error code, a readable message and the last lines of the build log — enough for the agent to fix the code and deploy again. Each attempt counts toward the free deploy limit, and the reply says how many are left.
npx -y @snapdeploy/mcp) as a local process and asks it which tools it offers. The SnapDeploy tools appear in agent mode alongside Cursor's own.detect_env_vars: it finds the variables the code reads, flags the required and secret ones and tells the agent where each value lives. The agent asks you for what it cannot know.deploy creates the container, links the GitHub repository and starts the first build. If linking fails the container is removed again — no half-finished state to clean up later.| Client | File | Notes |
|---|---|---|
| Cursor (global) | ~/.cursor/mcp.json | Recommended: the token is yours, not the project's |
| Cursor (per project) | .cursor/mcp.json in the repo | Fine for the server definition, but never commit a token — each developer mints their own on API Keys |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | Same mcpServers block |
| VS Code agent mode | .vscode/mcp.json | VS Code names the top-level key servers and takes "type": "stdio"; command, args and env are identical |
| Claude Desktop, Cline, Zed, Codex, Gemini CLI | their MCP settings | Same command, args and env; see Claude Code and Codex / Gemini CLI |
The connector needs Node.js 18 or newer on the machine that runs the editor; npx -y fetches and caches the package the first time.
Scopes nest: read ⊂ deploy ⊂ manage. A token can only reach the rows at or below its scope; the server checks this before any controller runs, and answers 403 INSUFFICIENT_SCOPE with the scope it wanted.
| Scope | Tools | What they do |
|---|---|---|
| read | list_apps get_status get_logs get_deployments check_quota list_repos detect_env_vars | Inventory, status, runtime logs, deployment history with error and build-log tail, remaining deploys and hours, connected GitHub repos, the env vars a repo needs (names, sources and where to find each value) |
| deploy | deploy set_env start_container stop_container wake_container | Create + link + build in one call (or rebuild an existing app at a chosen size), replace environment variables, start, stop and wake |
| manage | create_database add_domain assign_always_on | Managed Postgres, MySQL, MariaDB, MongoDB, Redis or RabbitMQ add-ons; custom domains; attach a spare Always-On subscription |
| — none — | delete, cancel, change password, apply SmartFix commits | Not tools, and refused by the server for every token (403 INTERACTIVE_SESSION_REQUIRED). These need a signed-in person. |
sd_pat_, shown exactly once — copy it into the assistant's config and it is gone from the UI. Only a hash is stored.401 on every path from that moment — no grace period.(set), database credentials as (redacted). The masking happens on the server, not in the connector, so a raw API call gets the same answer.sk_ API keys still work but are unscoped — prefer a token for anything an assistant holds.Prompt injection is real: a file in a cloned repo can carry instructions the model may follow. The connector has no delete tool, and if the agent escalates to a raw API call with the same token the server refuses it. We tested exactly that with a live agent — it got a 403.
A leaked token can deploy and read logs, nothing more: no deletes, no secrets (values are masked server-side), no account changes. It expires on the date you chose, it is throttled per token, and you revoke it in one click on the API Keys page.
Every attempt costs one deploy unit and the reply says how many remain, so the model is told to diagnose before retrying. Identical requests inside ten minutes return the original build instead of a new one. Plan limits come back as 402/429 with your upgrade link and an instruction not to retry.
| You see | It means | Do this |
|---|---|---|
401 Unauthorized | The token was revoked, has expired, or the env var name in your config is wrong | Mint a new token on API Keys; the variable is SNAPDEPLOY_API_KEY |
403 INSUFFICIENT_SCOPE | The token's scope is below what the tool needs; the response names requiredScope | Create a token with that scope (databases and domains need manage) |
GitHub not connected | SnapDeploy has no GitHub authorization for your account yet | Open the link the connector returns (or Dashboard → Deploy → Connect GitHub) once; then ask again |
MISSING_ENTRY_POINT | A Node repo has no index.js/server.js/app.js at the root and no main/start script | Add one, set a root directory, or add a Dockerfile — then deploy again |
Missing required environment variables | The repo declares variables that are not set on the container | Ask for detect_env_vars, set them with set_env, deploy again |
402 SIZE_REQUIRES_ALWAYS_ON | Medium (2 GB) and Large (4 GB) containers need an Always-On subscription | Deploy small, or buy Always-On from the link in the reply ($25 / $45 per month) |
402 websocket | Apps that hold WebSocket connections need Always-On (sleeping containers would drop them) | Add Always-On from the link, or deploy a non-WebSocket app on the free tier |
429 DEPLOY_CAP_REACHED | The free tier's 10 deploys a day (5 per rolling 12 hours) are used up — failed attempts count | Wait for the window, or a $1 Sprint Pack lifts the cap for 24 hours |
Tools missing in the agent | mcp.json not reloaded, invalid JSON, or Node.js missing | Reload the window; open the MCP settings panel — the server should be green with its tools listed |
The connector itself is free and open. Managed databases and custom domains are available on every tier. India pays in INR (UPI, cards, net banking); everywhere else via PayPal. Full pricing.
Create a scoped token on the SnapDeploy API Keys page, add the snapdeploy server to ~/.cursor/mcp.json (command npx, args -y @snapdeploy/mcp, env SNAPDEPLOY_API_KEY), reload Cursor, then ask the agent to deploy your GitHub repository. It replies with the live URL.
Yes. Windsurf reads the same mcpServers JSON from ~/.codeium/windsurf/mcp_config.json. Any MCP-capable client works with the same command, arguments and environment variable.
No. There are no delete tools and the SnapDeploy server refuses deletes, cancellations and password changes for every token. Deleting requires a signed-in person in the dashboard or the mobile app.
You can commit the server definition, but never a token. Keep tokens in your global ~/.cursor/mcp.json, and have each developer create their own on the API Keys page so it can be revoked individually.
No. Environment-variable values come back as "(set)" and database credentials are masked, on the server side. The agent can set a value you paste but can never read one back.
Yes. The free tier gives you up to 4 containers, 10 deploys a day (5 per rolling 12 hours) and 100 hours a month, no credit card. When a limit is reached the agent shows SnapDeploy's upgrade link — a $1 Sprint Pack or Always-On from $12 per container per month — and stops.
It receives the error code, a readable message and the last lines of the build log, fixes the code and deploys again. Each attempt counts toward the free deploy limit; identical requests inside ten minutes are deduplicated so a retry never starts a second build.
Usually the editor was not reloaded after editing mcp.json, the JSON has a syntax error, or Node.js is not installed. Reload the window and check Cursor's MCP settings panel — the snapdeploy server should show as connected with its tools listed.
Claude Code · Codex CLI and Gemini CLI · Claude Desktop, Cline, Zed and VS Code agent mode use the same JSON block. Building in Lovable? Your export deploys first-try without a connector.
Free tier · no credit card · India (UPI/cards) and international payments
Create your account