Manage Vercel Projects, Deployments, Domains, and Environment Variables via MCP
A Model Context Protocol (MCP) server that exposes Vercel's API for project lifecycle management, deployment operations, and runtime visibility.
Overview
The CL Vercel MCP Server provides stateless, multi-tenant Vercel automation:
Full Vercel API-call catalog discovery from official docs
MVP endpoint wrappers for high-value day-to-day operations
Generic fallback endpoint tool for uncovered API calls
Perfect for:
CI/CD automation and deployment orchestration
Project and environment configuration management
Domain, alias, and runtime log troubleshooting workflows
health_check - Server readiness checkChecks basic MCP server readiness.
Inputs:
Output:
{
"status" : "ok" ,
"server" : "CL Vercel MCP Server"
}
list_vercel_api_calls - List extracted Vercel API callsReturns the full endpoint catalog extracted from Vercel REST API docs.
Inputs:
category (string, optional) - Category filter such as projects , deployments , or environment
Output:
{
"count" : 274 ,
"category" : "projects" ,
"calls" : []
}
list_projects - List projectsMaps to GET /v 10 /projects .
Inputs:
team_id (string, optional) - Team scope
slug (string, optional) - Team slug scope
params (object, optional) - Query params (limit , search , etc.)
get_project - Get a project by ID or nameMaps to GET /v 9 /projects/{ idOrName } .
Inputs:
id_or_name (string, required)
team_id (string, optional)
slug (string, optional)
create_project - Create a projectMaps to POST /v 11 /projects .
Inputs:
body (object, required) - Project creation payload
team_id (string, optional)
slug (string, optional)
update_project - Update a projectMaps to PATCH /v 9 /projects/{ idOrName } .
Inputs:
id_or_name (string, required)
body (object, required)
team_id (string, optional)
slug (string, optional)
list_deployments - List deploymentsMaps to GET /v 6 /deployments .
Inputs:
team_id (string, optional)
slug (string, optional)
params (object, optional)
get_deployment - Get deployment detailsMaps to GET /v 13 /deployments/{ idOrUrl } .
Inputs:
id_or_url (string, required)
team_id (string, optional)
slug (string, optional)
create_deployment - Create deploymentMaps to POST /v 13 /deployments .
Inputs:
body (object, required)
team_id (string, optional)
slug (string, optional)
cancel_deployment - Cancel deploymentMaps to PATCH /v 12 /deployments/{ id }/cancel .
Inputs:
deployment_id (string, required)
team_id (string, optional)
slug (string, optional)
get_deployment_events - Retrieve deployment eventsMaps to GET /v 3 /deployments/{ idOrUrl }/events .
Inputs:
id_or_url (string, required)
team_id (string, optional)
slug (string, optional)
params (object, optional)
list_project_environment_variables - List project environment variablesMaps to GET /v 10 /projects/{ idOrName }/env .
Inputs:
id_or_name (string, required)
team_id (string, optional)
slug (string, optional)
params (object, optional)
create_project_environment_variables - Create project environment variablesMaps to POST /v 10 /projects/{ idOrName }/env .
Inputs:
id_or_name (string, required)
body (object or array, required)
team_id (string, optional)
slug (string, optional)
update_project_environment_variable - Update a project environment variableMaps to PATCH /v 9 /projects/{ idOrName }/env/{ id } .
Inputs:
id_or_name (string, required)
environment_variable_id (string, required)
body (object, required)
team_id (string, optional)
slug (string, optional)
list_project_domains - List project domainsMaps to GET /v 9 /projects/{ idOrName }/domains .
Inputs:
id_or_name (string, required)
team_id (string, optional)
slug (string, optional)
params (object, optional)
add_project_domain - Add domain to projectMaps to POST /v 10 /projects/{ idOrName }/domains .
Inputs:
id_or_name (string, required)
body (object, required)
team_id (string, optional)
slug (string, optional)
assign_deployment_alias - Assign alias to deploymentMaps to POST /v 2 /deployments/{ id }/aliases .
Inputs:
deployment_id (string, required)
body (object, required)
team_id (string, optional)
slug (string, optional)
list_deployment_aliases - List deployment aliasesMaps to GET /v 2 /deployments/{ id }/aliases .
Inputs:
deployment_id (string, required)
team_id (string, optional)
slug (string, optional)
get_runtime_logs_for_deployment - Get deployment runtime logsMaps to GET /v 1 /projects/{ projectId }/deployments/{ deploymentId }/runtime-logs .
Inputs:
project_id (string, required)
deployment_id (string, required)
team_id (string, optional)
slug (string, optional)
params (object, optional)
vercel_api_request - Generic Vercel endpoint fallbackCalls any Vercel REST endpoint when a dedicated wrapper tool is not yet available.
Inputs:
method (string, required)
path (string, required)
team_id (string, optional)
slug (string, optional)
headers (object, optional)
params (object, optional)
json_body (any, optional)
body (string, optional)
timeout_seconds (number, optional)
(boolean, optional)
API Parameters Reference
Common Parameters
team_id - Team context (teamId query value)
slug - Team slug context (slug query value)
params - Additional endpoint-specific query parameters
body / json_body - Endpoint payload for write operations
Resource Formats
Project: id_or_name (example: my-project )
Deployment: deployment_id or (example: )
Authentication Guide
Vercel API Key Guide Authentication is handled server-side via fastmcp-credentials . The gateway injects your Vercel token through the X-MCP-Cred-Fields header as a JSON object (e.g. { "apiToken" : "<token>" } ) — no auth_token parameter is needed in any tool call.
Step 1: Create Token
Open Vercel account token settings: https://vercel.com/account/tokens
Create a personal access token
Copy and securely store the token
Provide the token to the MewCP gateway, which injects it via X-MCP-Cred-Api-Key on every request.
Step 3: Team Scope If operating on team resources, include team_id and/or in your tool call.
Setup
pip install -r requirements.txt
Running the Server
# stdio
python server.py
# sse
python server.py --transport sse --host 127.0.0.1 --port 8001
# streamable-http
python server.py --transport streamable-http --host 127.0.0.1 --port 8001
Troubleshooting
Common Issues Missing or Invalid Token
Cause: Invalid or expired token, or missing X-MCP-Cred-Api-Key header from the gateway
Solution: Verify the gateway has a valid Vercel token configured and retry
Team Resource Access Errors
Cause: Team-scoped endpoint called without team_id /slug
Solution: Add the correct team scope params
Cause: Missing required fields in body or invalid types
Solution: Validate payload shape against Vercel endpoint docs
Unknown Endpoint Path
Cause: Wrong API version or path in vercel_api_request
Solution: Use list_vercel_api_calls to discover valid method/path pairs
Resources
Project Structure
cl-mcp-vercel/
|-- server.py
|-- requirements.txt
|-- README.md
`-- vercel_mcp/
|-- __init__.py
|-- cli.py
|-- config.py
|-- tools.py
|-- schemas.py
|-- service.py
`-- vercel_endpoints.json