# Vercel (MCP server)

> Inspect deployments, logs, and project state on Vercel from an AI agent.

[Canonical HTML page](https://top-mcps.com/mcp/vercel-mcp) · [server.json](https://top-mcps.com/mcp/vercel-mcp.json) · [methodology](https://top-mcps.com/about/methodology)

## Install

### Claude Desktop — `claude_desktop_config.json`

Paste under mcpServers. Fully quit and reopen Claude after editing.

```json
{
  "mcpServers": {
    "vercel-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "VERCEL_TOKEN",
        "-e",
        "VERCEL_TEAM_ID",
        "vercel/mcp-server:latest"
      ],
      "env": {
        "VERCEL_TOKEN": "${VERCEL_TOKEN}",
        "VERCEL_TEAM_ID": "${VERCEL_TEAM_ID}"
      }
    }
  }
}
```

### Claude Code — `CLI or .mcp.json`

Run from your repo. Commit .mcp.json to share with your team.

```shell
# export VERCEL_TOKEN=changeme
# export VERCEL_TEAM_ID=optional-team-scope
claude mcp add vercel-mcp -- docker run --rm -i -e VERCEL_TOKEN -e VERCEL_TEAM_ID vercel/mcp-server:latest
```

### Cursor — `.cursor/mcp.json`

Global path: ~/.cursor/mcp.json. Reload window after editing.

```json
{
  "mcpServers": {
    "vercel-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "VERCEL_TOKEN",
        "-e",
        "VERCEL_TEAM_ID",
        "vercel/mcp-server:latest"
      ],
      "env": {
        "VERCEL_TOKEN": "${VERCEL_TOKEN}",
        "VERCEL_TEAM_ID": "${VERCEL_TEAM_ID}"
      }
    }
  }
}
```

### VS Code — `.vscode/mcp.json`

VS Code uses the "servers" key (not "mcpServers").

```jsonc
{
  "servers": {
    "vercel-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "VERCEL_TOKEN",
        "-e",
        "VERCEL_TEAM_ID",
        "vercel/mcp-server:latest"
      ],
      "env": {
        "VERCEL_TOKEN": "${VERCEL_TOKEN}",
        "VERCEL_TEAM_ID": "${VERCEL_TEAM_ID}"
      }
    }
  }
}
```

### Windsurf — `~/.codeium/windsurf/mcp_config.json`

Open via Cascade → hammer icon → Configure.

```json
{
  "mcpServers": {
    "vercel-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "VERCEL_TOKEN",
        "-e",
        "VERCEL_TEAM_ID",
        "vercel/mcp-server:latest"
      ],
      "env": {
        "VERCEL_TOKEN": "${VERCEL_TOKEN}",
        "VERCEL_TEAM_ID": "${VERCEL_TEAM_ID}"
      }
    }
  }
}
```

### Cline — `cline_mcp_settings.json`

Open via the Cline sidebar → MCP Servers → Edit.

```json
{
  "mcpServers": {
    "vercel-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "VERCEL_TOKEN",
        "-e",
        "VERCEL_TEAM_ID",
        "vercel/mcp-server:latest"
      ],
      "env": {
        "VERCEL_TOKEN": "${VERCEL_TOKEN}",
        "VERCEL_TEAM_ID": "${VERCEL_TEAM_ID}"
      }
    }
  }
}
```

### Continue — `~/.continue/config.json`

Continue uses modelContextProtocolServers with a transport block.

```json
{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "docker",
          "args": [
            "run",
            "--rm",
            "-i",
            "-e",
            "VERCEL_TOKEN",
            "-e",
            "VERCEL_TEAM_ID",
            "vercel/mcp-server:latest"
          ],
          "env": {
            "VERCEL_TOKEN": "${VERCEL_TOKEN}",
            "VERCEL_TEAM_ID": "${VERCEL_TEAM_ID}"
          }
        }
      }
    ]
  }
}
```

### Codex CLI — `~/.codex/config.toml`

Codex uses TOML. Each server is a [mcp_servers.<name>] subtable.

```shell
# ~/.codex/config.toml
[mcp_servers.vercel-mcp]
command = "docker"
args = [
  "run",
  "--rm",
  "-i",
  "-e",
  "VERCEL_TOKEN",
  "-e",
  "VERCEL_TEAM_ID",
  "vercel/mcp-server:latest",
]
env = { VERCEL_TOKEN = "${VERCEL_TOKEN}", VERCEL_TEAM_ID = "${VERCEL_TEAM_ID}" }
```

### Zed — `~/.config/zed/settings.json`

Zed calls them "context_servers". Settings live-reload on save.

```jsonc
{
  "context_servers": {
    "vercel-mcp": {
      "command": {
        "path": "docker",
        "args": [
          "run",
          "--rm",
          "-i",
          "-e",
          "VERCEL_TOKEN",
          "-e",
          "VERCEL_TEAM_ID",
          "vercel/mcp-server:latest"
        ]
      },
      "env": {
        "VERCEL_TOKEN": "${VERCEL_TOKEN}",
        "VERCEL_TEAM_ID": "${VERCEL_TEAM_ID}"
      }
    }
  }
}
```

### ChatGPT — `ChatGPT → Settings → Connectors (remote URL)`

Paste this into Settings → Connectors → Add custom connector. Requires ChatGPT Pro / Team / Enterprise / Edu with Developer mode enabled. ChatGPT supports remote HTTPS MCP servers only — stdio servers must be hosted on a public HTTPS endpoint first.

```json
{
  "name": "Vercel (MCP server)",
  "transport": "http",
  "url": "https://mcp.vercel.com"
}
```

## At a glance

- **Maintainer:** Vercel
- **Transport:** stdio
- **Auth model:** API key
- **Required secrets:** VERCEL_TOKEN, VERCEL_TEAM_ID
- **Supported clients:** Claude, Cursor, VS Code, Windsurf, Any MCP-compatible client, Vercel team or hobby account
- **License:** Apache-2.0
- **Language:** TypeScript
- **Latest version:** latest
- **Last verified:** 2026-06-02
- **Score:** 67/100 (rubric 2026-04 — see https://top-mcps.com/about/methodology)
- **Source:** https://github.com/vercel/mcp-server

## Tools & permissions

| Tool | Description | Args | Side effects |
|------|-------------|------|--------------|
| `list_projects` | List Vercel projects in the configured team or account. | `—` | read |
| `list_deployments` | List recent deployments for a project. | `project: string` | read |
| `get_build_logs` | Fetch build logs for a deployment. | `deployment_id: string` | read |
| `list_env_vars` | List env var names and scopes for a project (values masked). | `project: string` | read |
| `list_domains` | List domains attached to a project. | `project: string` | read |

## Security & scope

- **Access scope:** read-only
- **Sandbox:** Authenticates with a Vercel access token, ideally scoped to one team. Most tools are read-only; the redeploy tool can be disabled via VERCEL_DISABLE_WRITES=true for read-only stacks.
- **Gotchas:**
  - Tokens granted personal-account scope can see every project the human can see — scope by team.
  - The MCP masks env var values, but build logs themselves can leak secrets if the application echoes them; sanitize on the build side.
  - Redeploy tool can trigger a production deploy — leave VERCEL_DISABLE_WRITES=true unless you actively need it.

## Quick answer

**What it does.** Wraps the Vercel REST API for project, deployment, log, env var (metadata only), and domain operations. Read-only by default for sensitive surfaces.

**Best for:**
- Deploy investigation
- Build-log debugging
- Env var audits
- Domain status checks
- Multi-project team overview

**Not for:**
- Unattended deploys
- Workflows that need secret values in plaintext
- Vercel features outside the public REST surface

## Description

The official Vercel MCP connects an AI agent to a Vercel team or personal account. Lists projects and deployments, fetches build and runtime logs, inspects environment variables (without exposing secret values), and audits domains and DNS records. Built for the "why did my last deploy fail" and "what is in production right now" workflows that otherwise require a dashboard tour.

## Why it matters

Vercel is the default host for Next.js and an enormous chunk of the modern frontend. An MCP turns "why did this build fail" into one prompt against your account, not five Console tabs.

## Key features

- Official Vercel maintainership
- Team scoping at connect time
- Deploy + log + env audit tools
- Domain + DNS inspection
- Secret values intentionally masked

## FAQ

### Team scoping?

Pass VERCEL_TEAM_ID to scope all calls to one team. Without it the MCP defaults to the personal account associated with the token, which is rarely what shared agents should target.

### Does it expose env var values?

No. The MCP returns env var names, scopes, and update times — values are intentionally masked because returning them would leak production secrets into the model context.

### Can it redeploy?

Yes via a dedicated tool that requires explicit confirmation in the prompt. For high-blast-radius operations gate the tool through a human-in-the-loop step.

## Changelog

- **2026-06-02** — Refreshed install snippets and fact sheet; verified for 2026.
- **2025-03-30** — Initial directory listing.
