{
  "markdown": "# Vercel MCP Pro ▲\n\n> The most complete **Vercel** MCP server — **70 tools** covering the entire Vercel REST API (deployments, projects, env vars, domains, DNS, aliases, certs, logs, checks, webhooks, edge config, teams) plus a `vercel_raw` escape hatch and a **readonly** safety mode.\n\n[![npm version](https://img.shields.io/npm/v/vercel-mcp-pro.svg?style=flat-square)](https://www.npmjs.com/package/vercel-mcp-pro)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](LICENSE)\n[![GitHub Stars](https://img.shields.io/github/stars/helbertparanhos/vercel-mcp-pro?style=flat-square)](https://github.com/helbertparanhos/vercel-mcp-pro/stargazers)\n[![GitHub Forks](https://img.shields.io/github/forks/helbertparanhos/vercel-mcp-pro?style=flat-square)](https://github.com/helbertparanhos/vercel-mcp-pro/network/members)\n[![GitHub Issues](https://img.shields.io/github/issues/helbertparanhos/vercel-mcp-pro?style=flat-square)](https://github.com/helbertparanhos/vercel-mcp-pro/issues)\n[![Glama Quality](https://glama.ai/mcp/servers/helbertparanhos/vercel-mcp-pro/badges/score.svg)](https://glama.ai/mcp/servers/helbertparanhos/vercel-mcp-pro)\n\n[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)\n[![Node.js](https://img.shields.io/badge/Node.js-339933?style=flat-square&logo=nodedotjs&logoColor=white)](https://nodejs.org/)\n[![MCP](https://img.shields.io/badge/MCP-Model%20Context%20Protocol-000000?style=flat-square)](https://modelcontextprotocol.io/)\n[![Claude Code](https://img.shields.io/badge/Claude%20Code-D97706?style=flat-square)](https://claude.ai/code)\n[![Cursor](https://img.shields.io/badge/Cursor-Compatible-4F46E5?style=flat-square)](https://cursor.sh)\n[![Claude Desktop](https://img.shields.io/badge/Claude%20Desktop-Compatible-D97706?style=flat-square)](https://claude.ai/download)\n\n[![Instagram](https://img.shields.io/badge/@helbertparanhos-E4405F?style=flat-square&logo=instagram&logoColor=white)](https://www.instagram.com/helbertparanhos)\n[![YouTube](https://img.shields.io/badge/stratacademy-FF0000?style=flat-square&logo=youtube&logoColor=white)](https://www.youtube.com/@stratacademy)\n[![LinkedIn](https://img.shields.io/badge/helbert--paranhos-0077B5?style=flat-square&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/helbert-paranhos/)\n[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-FFDD00?style=flat-square&logo=buy-me-a-coffee&logoColor=black)](https://buymeacoffee.com/helbertparanhos)\n[![Strat Academy](https://img.shields.io/badge/Strat%20Academy-8B5CF6?style=flat-square)](https://stratacademy.com.br)\n\nWorks in **any MCP client** — Claude Code, Claude Desktop, Cursor, ChatGPT — using a Vercel access **token** (no OAuth flow required). Ships with an optional `/vercel` skill that drives the Vercel **CLI** for terminal deploys.\n\n## Why this and not the official one?\n\n| | Official `mcp.vercel.com` | **vercel-mcp-pro** |\n|---|---|---|\n| Auth | OAuth (approved clients only) | Token (works everywhere, self-hosted) |\n| Coverage | Docs search, manage projects/deployments, analyze logs | **Full REST API**: env, domains, DNS, aliases, certs, webhooks, edge config, checks, log drains… |\n| Escape hatch | — | `vercel_raw` → any endpoint, 100% coverage |\n| Safety | — | `VERCEL_READONLY=true` blocks all writes |\n\n## Install\n\n```bash\nnpx -y vercel-mcp-pro\n```\n\nOr clone and build locally:\n\n```bash\ngit clone https://github.com/helbertparanhos/vercel-mcp-pro\ncd vercel-mcp-pro\nnpm install && npm run build\n```\n\n## Configuration\n\n1. Create a token at **https://vercel.com/account/settings/tokens**.\n2. Copy `.env.example` → `.env` and fill it in:\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `VERCEL_TOKEN` | ✅ | Personal or team access token. |\n| `VERCEL_TEAM_ID` | — | Default team scope (injected as `?teamId`). Leave empty for personal account. |\n| `VERCEL_TEAM_SLUG` | — | Scope by team slug (alternative to `VERCEL_TEAM_ID`). |\n| `VERCEL_READONLY` | — | `true` blocks all write/delete tools (and only allows `vercel_raw` GETs). |\n| `VERCEL_DISABLE_RAW` | — | `true` removes the `vercel_raw` escape hatch. |\n| `VERCEL_TIMEOUT_MS` | — | Request timeout (default 60000). |\n| `VERCEL_MAX_RETRIES` | — | Retries on 429/5xx/network (default 3). |\n\n## Add to your client\n\n### Claude Code\n\n```bash\nclaude mcp add vercel-mcp-pro -- npx -y vercel-mcp-pro\n```\n\nOr in this project's `.claude/settings.json` → `mcpServers`:\n\n```json\n\"vercel\": {\n  \"command\": \"node\",\n  \"args\": [\"projects/vercel-mcp-pro/dist/index.js\"],\n  \"env\": {\n    \"VERCEL_TOKEN\": \"your_token\",\n    \"VERCEL_TEAM_ID\": \"team_xxx\"\n  }\n}\n```\n\n### Claude Desktop\n\n`%APPDATA%\\Claude\\claude_desktop_config.json` (Windows) / `~/Library/Application Support/Claude/claude_desktop_config.json` (Mac):\n\n```json\n{\n  \"mcpServers\": {\n    \"vercel\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"vercel-mcp-pro\"],\n      \"env\": { \"VERCEL_TOKEN\": \"your_token\", \"VERCEL_TEAM_ID\": \"team_xxx\" }\n    }\n  }\n}\n```\n\n### Cursor\n\nPaste the same config into `.cursor/mcp.json`.\n\n## Tools (70)\n\n### Deployments (11)\n`list_deployments` · `get_deployment` · `create_deployment` · `cancel_deployment` · `delete_deployment` · `get_deployment_events` · `list_deployment_files` · `get_deployment_file_contents` · `promote_deployment` · `rollback_deployment` · `get_promote_aliases`\n\n### Projects (7)\n`list_projects` · `get_project` · `create_project` · `update_project` · `delete_project` · `pause_project` · `unpause_project`\n\n### Environment Variables (6)\n`list_env_vars` · `get_env_var` · `create_env_var` · `bulk_create_env_vars` · `update_env_var` · `delete_env_var`\n\n### Domains (9)\n`list_domains` · `get_domain` · `get_domain_config` · `add_domain` · `verify_domain` · `remove_domain` · `list_project_domains` · `add_project_domain` · `remove_project_domain`\n\n### DNS (4)\n`list_dns_records` · `create_dns_record` · `update_dns_record` · `delete_dns_record`\n\n### Aliases (4)\n`list_aliases` · `get_alias` · `assign_alias` · `delete_alias`\n\n### Certificates (4)\n`get_cert` · `issue_cert` · `upload_cert` · `remove_cert`\n\n### Logs (2)\n`get_build_logs` · `get_runtime_logs`\n\n### Checks (5)\n`list_checks` · `get_check` · `create_check` · `update_check` · `rerequest_check`\n\n### Webhooks (3)\n`list_webhooks` · `create_webhook` · `delete_webhook`\n\n### Edge Config (6)\n`list_edge_configs` · `get_edge_config` · `get_edge_config_items` · `create_edge_config` · `update_edge_config_items` · `delete_edge_config`\n\n### Teams & User (4)\n`get_user` · `list_teams` · `get_team` · `list_team_members`\n\n### Integrations & Log Drains (4)\n`list_integrations` · `list_log_drains` · `create_log_drain` · `delete_log_drain`\n\n### Escape hatch (1)\n`vercel_raw` — call **any** Vercel REST endpoint (method + full versioned path + params + body). Guarantees 100% coverage even for niche/new endpoints (marketplace, sandboxes, feature-flags, access-groups, rolling-release…). Auto-injects your team scope; honored by readonly mode for GETs.\n\n## Common recipes\n\n**Diagnose a failed deploy**\n```\nlist_deployments(projectId:\"my-app\", state:\"ERROR\")  →  get_build_logs(idOrUrl:\"dpl_...\")\n```\n\n**Ship a preview to production (no rebuild)**\n```\npromote_deployment(projectId:\"my-app\", deploymentId:\"dpl_...\")\n```\n\n**Roll back fast**\n```\nrollback_deployment(projectId:\"my-app\", deploymentId:\"dpl_previous\")\n```\n\n**Add an env var to all environments**\n```\ncreate_env_var(projectId:\"my-app\", key:\"API_KEY\", value:\"…\", target:[\"production\",\"preview\",\"development\"])\n```\n\n**Anything not covered**\n```\nvercel_raw(method:\"GET\", path:\"/v1/security/firewall/config\", params:{ projectId:\"my-app\" })\n```\n\n## The `/vercel` CLI skill (bundled)\n\nFor terminal-driven deploys, this repo also ships a Claude Code skill in [`skill/`](skill/) that drives the official **Vercel CLI** (`vercel deploy`, `vercel logs`, `vercel env`, `vercel rollback`). The MCP gives full API coverage in any client; the skill gives the smoothest `git push → deploy` loop in the terminal. They complement each other — see [`skill/SKILL.md`](skill/SKILL.md).\n\n## Safety\n\n- `VERCEL_READONLY=true` blocks every write/delete tool — only reads and `vercel_raw` GETs run. Ideal for audits and exploration.\n- The `vercel_raw` path is sanitized (must start with a version segment like `/v9/…`; no scheme/host/traversal/control chars) and constrained to `api.vercel.com`.\n- Auth, retries (429 with `Retry-After`, 5xx, network) and rate-limiting are handled for you. The token only ever travels in the `Authorization` header — never in a query string or log.\n\n### Security model — read this before trusting the guards\n\n- **`VERCEL_READONLY` blocks *mutations*, not *reads of secrets*.** Read tools like `list_env_vars` (with `decrypt:true`), `get_env_var` and `get_edge_config_items` return decrypted values and still run in readonly mode — that's their purpose. If your environment must never surface secrets to the model, don't expose those tools / run against a least-privilege token.\n- **`VERCEL_TEAM_ID` is a convenience scope, not a security boundary.** It sets the default team, but a caller can pass a different `teamId`/`slug` per call (including via `vercel_raw`). The real boundary is the **token's own scope** — use a token limited to the team/projects you intend to automate.\n- **Treat the token as production credentials.** It grants the same access as your Vercel account/team. Prefer a scoped token, keep it in `.env` (gitignored) or your client's secret store, and rotate it if it's ever shared or pasted into a chat.\n\n## License\n\nMIT © Helbert Paranhos / Strat Academy\n",
  "bytes": 9661,
  "sha": "aa12c52cabd8e3a856f6f5b40ac2919e53a0c82066cb9859cac1c9f4fc091cf4",
  "repo_slug": "helbertparanhos/vercel-mcp-pro",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_helbertparanhos_vercel_mcp_pro_378b149f/readme"
}