A Monday deployment digest
Every Monday at 9:00, list my Vercel deployments from the last seven days, group them by project, call out any that ended in an error state, and save the summary as vercel-week.md in my Documents folder.
Verified MCP server: Vercel
The tool list below is a live capture from the running server; an authenticated tool call is still pending credentials.
The short answer
Last verified 2026-08-03
The Vercel MCP server lets an AI assistant read and change your deployments, projects, domains, environment variables and team settings from a chat window or a scheduled routine. There are two of them, and they are not the same product: Vercel hosts its own remote server at mcp.vercel.com, which your client reaches over the network after an OAuth sign-in and which only accepts clients Vercel has reviewed and approved, and separately there are community packages that run on your own Mac against a personal Vercel Access Token. This page is about the community one, because it is the one a form-based client can start without a browser sign-in. We ran it, spoke the protocol to it, and enumerated all 131 tools it exposes, and the table below is that capture. What we could not do is complete an authenticated call: that needs an Access Token for a real Vercel account, which we do not have, so this page shows you the tools and the exact errors you get without one, and stops there. [1][4][3]
Verification
Method
We spawned the server with npx over stdio with a placeholder Access Token, completed the MCP initialize handshake, and called tools/list: the 131 tools below are that response, word for word. We then made three real tools/call requests. Two of them reached Vercel and came back 403 Not authorized, and the third was rejected by the server's own argument checking before it left the Mac. Authenticated calls here are pending a Vercel Access Token, which we do not have, so nothing on this page claims a successful Vercel read. Separately we sent an unauthenticated initialize request to Vercel's own hosted endpoint at mcp.vercel.com and it answered 401; that reply is printed in the troubleshooting section.
Startup banner
{"result":{"protocolVersion":"2025-06-18","capabilities":{"resources":{"listChanged":true},"prompts":{"listChanged":true},"tools":{"listChanged":true}},"serverInfo":{"name":"vercel-mcp","version":"1.0.0"}},"jsonrpc":"2.0","id":1}One real tool call
tools/call getAuthUser {}Error getting auth user: API error occurred: Status 403 Content-Type "application/json; charset=utf-8". Body: {"error":{"code":"forbidden","message":"Not authorized","invalidToken":true}}Real lines from the captured result: enough to prove the call answered.
Tools
The server answered tools/list with 131 tools on 2026-08-03. The names, descriptions and parameters below are its own words, copied from that response and never edited.
| Tool | What it does |
|---|---|
| getDeploymentEventsdeploymentId*directionfollowlimitnamesinceuntilstatusCodedelimiterbuildsteamIdslug | Gets deployment events by deployment ID and build ID |
| getDeploymentdeploymentId*withGitRepoInfoteamIdslug | Gets a deployment by ID or URL |
| cancelDeploymentdeploymentId*teamIdslug | Cancels a deployment |
| listDeploymentFilesdeploymentId*teamIdslug | Lists deployment files |
| getDeploymentFileContentsdeploymentId*fileId*teamIdslug | Gets deployment file contents |
| getDeploymentsappfromlimitprojectIdtargettouserssinceuntilstateteamIdslug | Lists deployments |
| deleteDeploymentdeploymentId*urlteamIdslug | Deletes a deployment |
| listDnsRecordsdomain*limitsinceuntilteamIdslug | Lists DNS records for a domain |
| createDnsRecorddomain*name*type*value*ttlcommentmxPrioritysrvPrioritysrvWeightsrvPorthttpsTargethttpsPriorityteamIdslug | Creates a DNS record for a domain |
| updateDnsRecorddomain*recordId*nametypevaluettlcommentmxPrioritysrvPrioritysrvWeightsrvPorthttpsTargethttpsPriorityteamIdslug | Updates a DNS record |
| deleteDnsRecorddomain*recordId*teamIdslug | Deletes a DNS record |
| getDomaindomain*teamIdslug | Gets information about a domain |
| getDomainConfigdomain*teamIdslug | Gets domain configuration |
| listDomainslimitsinceuntilteamIdslug | Lists all domains |
| listProjectsexcludeReposfromgitForkProtectionlimitreporepoIdrepoUrlsearchsinceteamIdslug | Lists all projects |
| updateProjectprojectId*autoExposeSystemEnvsbuildCommandcommandForIgnoringBuildStepdevCommanddirectoryListingenableAffectedProjectsDeploymentsframeworkgitCommentsgitLFSinstallCommandnamenodeVersionoutputDirectorypublicSourcerootDirectoryserverlessFunctionRegionskewProtectionMaxAgeteamIdslug | Updates a project |
| listProjectDomainsprojectId*directiongitBranchlimitnameorderproductionredirectredirectssincetargetuntilverifiedteamIdslug | Lists domains for a project |
| getProjectDomainprojectId*domain*teamIdslug | Gets a project domain |
| addProjectDomainprojectId*name*gitBranchredirectredirectStatusCodeteamIdslug | Adds a domain to a project |
| updateProjectDomainprojectId*domain*gitBranchredirectredirectStatusCodeteamIdslug | Updates a project domain |
| removeProjectDomainprojectId*domain*teamIdslug | Removes a domain from a project |
| verifyProjectDomainprojectId*domain*teamIdslug | Verifies a project domain |
| listEnvVarsprojectId*decryptgitBranchlimitsincesourcetargetteamIdslug | Lists environment variables for a project |
| getEnvVarprojectId*envId*decryptteamIdslug | Gets an environment variable |
| createEnvVarprojectId*key*value*type*target*gitBranchcommentcustomEnvironmentIdsteamIdslug | Creates an environment variable |
| editEnvVarprojectId*envId*keyvaluetypetargetgitBranchcommentcustomEnvironmentIdsteamIdslug | Edits an environment variable |
| removeEnvVarprojectId*envId*teamIdslug | Removes an environment variable |
| readAccessGroupidOrName*teamIdslug | Read an access group |
| listAccessGroupsprojectIdmemberIdsearchmembersLimitprojectsLimitlimitnextteamIdslug | List access groups |
| createAccessGroupname*projectsmembersToAddteamIdslug | Create an access group |
| getEdgeConfigsteamIdslug | Get all Edge Configs |
| createEdgeConfigname*itemsteamIdslug | Create an Edge Config |
| getEdgeConfigedgeConfigId*teamIdslug | Get an Edge Config |
| updateEdgeConfigedgeConfigId*items*teamIdslug | Update an Edge Config |
| getCertByIdid*teamIdslug | Get cert by id |
| removeCertid*teamIdslug | Remove cert |
| issueCertcns*teamIdslug | Issue a new cert |
| uploadCertca*cert*key*skipValidationteamIdslug | Upload a cert |
| getTeamteamId* | Get a team |
| getTeamslimitsinceuntil | List all teams |
| createWebhookurl*events*projectIdsteamIdslug | Create a webhook |
| getWebhooksprojectIdteamIdslug | Get a list of webhooks |
| deleteWebhookid*teamIdslug | Delete a webhook |
| createLogDrainname*type*url*deliveryFormatenvironmentsheadersprojectIdssourcessecretsamplingRateteamIdslug | Creates a new Integration Log Drain |
| getAuthUser | Get the authenticated user |
| listAuthTokensteamIdslug | List auth tokens |
| createAuthTokenname*expiresAtteamIdslug | Create an auth token |
| createCheckdeploymentId*name*pathblockingdetailsUrlexternalIdrerequestableteamIdslug | Creates a new check |
| getAllChecksdeploymentId*limitnextteamIdslug | Retrieve a list of all checks |
| getCheckdeploymentId*checkId*teamIdslug | Get a single check |
| updateCheckdeploymentId*checkId*status*conclusionnamedetailsUrloutputteamIdslug | Update a check |
| rerequestCheckdeploymentId*checkId*teamIdslug | Rerequest a check |
| updateAccessGroupidOrName*nameprojectsmembersToAddmembersToRemoveteamIdslug | Update an access group |
| deleteAccessGroupidOrName*teamIdslug | Delete an access group |
| listAccessGroupMembersidOrName*limitnextteamIdslug | List members of an access group |
| listAccessGroupProjectsidOrName*limitnextteamIdslug | List projects in an access group |
| createAccessGroupProjectidOrName*projectId*role*teamIdslug | Add a project to an access group |
| readAccessGroupProjectidOrName*projectId*teamIdslug | Get project details in an access group |
| updateAccessGroupProjectidOrName*projectId*role*teamIdslug | Update a project's role in an access group |
| deleteAccessGroupProjectidOrName*projectId*teamIdslug | Remove a project from an access group |
| deleteEdgeConfigedgeConfigId*teamIdslug | Delete an Edge Config |
| getEdgeConfigItemsedgeConfigId*teamIdslug | Get all items in an Edge Config |
| getEdgeConfigItemedgeConfigId*itemKey*teamIdslug | Get a specific item from an Edge Config |
| getEdgeConfigSchemaedgeConfigId*teamIdslug | Get the schema for an Edge Config |
| patchEdgeConfigSchemaedgeConfigId*schemateamIdslug | Update the schema for an Edge Config |
| deleteEdgeConfigSchemaedgeConfigId*teamIdslug | Delete the schema for an Edge Config |
| getEdgeConfigTokensedgeConfigId*teamIdslug | Get all tokens for an Edge Config |
| deleteEdgeConfigTokensedgeConfigId*tokens*teamIdslug | Delete tokens for an Edge Config |
| getEdgeConfigTokenedgeConfigId*token*teamIdslug | Get a specific token for an Edge Config |
| createEdgeConfigTokenedgeConfigId*label*teamIdslug | Create a token for an Edge Config |
| getTeamMembersteamId*limitsinceuntilsearchrole | List team members |
| inviteUserToTeamteamId*email*role*projects | Invite a user to a team |
| requestAccessToTeamteamId*joinedFrom | Request access to a team |
| getTeamAccessRequestteamId*userId* | Get team access request status |
| joinTeamteamId*inviteCode* | Join a team |
| updateTeamMemberteamId*uid*roleprojects | Update a team member |
| removeTeamMemberteamId*uid* | Remove a team member |
| patchTeamteamId*avatardescriptionnameslug | Update team information |
| createTeamslug* | Create a new team |
| deleteTeamteamId* | Delete a team |
| deleteTeamInviteCodeteamId*inviteId* | Delete team invite code |
| getWebhookid*teamIdslug | Get a webhook |
| deleteIntegrationLogDrainid*teamIdslug | Delete an integration log drain |
| deleteConfigurableLogDrainid*teamIdslug | Delete a configurable log drain |
| getIntegrationLogDrainsintegrationId*teamIdslug | Get integration log drains |
| listUserEventslimitsinceuntiltypesuserIdwithPayloadteamIdslug | List user events |
| requestDeletereasons* | Request user account deletion |
| getAuthTokentokenId*teamIdslug | Get auth token metadata |
| deleteAuthTokentokenId*teamIdslug | Delete an auth token |
| listAliasesdomainfromlimitprojectIdsinceuntilrollbackDeploymentIdteamIdslug | List aliases |
| getAliasidOrAlias*fromprojectIdsinceuntilteamIdslug | Get an alias |
| deleteAliasaliasId*teamIdslug | Delete an alias |
| listDeploymentAliasesdeploymentId*teamIdslug | List deployment aliases |
| assignAliasdeploymentId*alias*redirectteamIdslug | Assign an alias to a deployment |
| recordArtifactEventsevents*xArtifactClientCixArtifactClientInteractiveteamIdslug | Record artifacts cache usage events |
| getArtifactStatusteamIdslug | Get status of Remote Caching |
| getProjectMembersidOrName*limitsinceuntilsearchteamIdslug | List project members |
| addProjectMemberidOrName*uidemailusernamerole*teamIdslug | Add a new member to a project |
| removeProjectMemberidOrName*uid*teamIdslug | Remove a member from a project |
| uploadArtifacthash*data*contentLength*xArtifactDurationxArtifactClientCixArtifactClientInteractivexArtifactTagteamIdslug | Upload a cache artifact |
| downloadArtifacthash*teamIdslug | Download a cache artifact |
| artifactExistshash*teamIdslug | Check if an artifact exists |
| artifactQueryhashes*teamIdslug | Query artifact status |
| createCustomEnvironmentprojectId*body*teamIdslug | Create a custom environment |
| getCustomEnvironmentsprojectId*teamIdslug | Get custom environments for a project |
| getCustomEnvironmentprojectId*envId*teamIdslug | Get a specific custom environment |
| updateCustomEnvironmentprojectId*envId*body*teamIdslug | Update a custom environment |
| deleteCustomEnvironmentprojectId*envId*teamIdslug | Delete a custom environment |
| getConfigurationsteamIdslugview | Get integration configurations |
| getConfigurationconfigId*teamIdslug | Get a specific integration configuration |
| deleteConfigurationconfigId*teamIdslug | Delete an integration configuration |
| gitNamespaceshostteamIdslug | Get available Git namespaces |
| searchReponamespaceId*hostqueryteamIdslug | Search Git repositories |
| getAccountInfointegrationId* | Get marketplace account information |
| getMemberintegrationId*memberId* | Get marketplace member information |
| createEventintegrationId*body* | Create a marketplace event |
| submitBillingDataintegrationId*body* | Submit billing data |
| submitInvoiceintegrationId*body* | Submit an invoice |
| getInvoiceintegrationConfigurationId*invoiceId* | Get an invoice |
| updateInvoiceintegrationId*invoiceId*body* | Update an invoice |
| updateResourceSecretsintegrationId*productIdOrSlug*resourceId*body* | Update resource secrets |
| updateResourceSecretsByIdintegrationId*body* | Update resource secrets by ID |
| exchangeSsoTokenintegrationId*body* | Exchange SSO token |
| updateAttackChallengeModeprojectId*body*teamIdslug | Update attack challenge mode |
| putFirewallConfigprojectId*body*teamIdslug | Create or replace firewall configuration |
| updateFirewallConfigprojectId*body*teamIdslug | Update firewall configuration |
| getFirewallConfigprojectId*teamIdslug | Get firewall configuration |
| getActiveAttackStatusprojectId*teamIdslug | Get active attack status |
| getBypassIpprojectId*teamIdslug | Get bypassed IPs for a project |
| addBypassIpprojectId*body*teamIdslug | Add bypass IP to project |
| removeBypassIpprojectId*ip*teamIdslug | Remove bypass IP from project |
Parameters marked with * are required.
Setup
Copy the block for the app you use. Each one is the configuration this server was verified with.
Open the file ~/Library/Application Support/Claude/claude_desktop_config.json (in Claude Desktop: Settings, then Developer, then Edit Config) and add:
{
"mcpServers": {
"vercel": {
"command": "npx",
"args": [
"-y",
"@mistertk/vercel-mcp"
],
"env": {
"VERCEL_API_KEY": "your_vercel_access_token"
}
}
}
}Paste your own token in place of the placeholder, then quit and reopen Claude Desktop. Claude Desktop can also reach Vercel's own hosted server instead, through Settings, then Connectors, then Add custom connector, which Vercel documents as a paid-plan feature; that route needs no JSON and no token, but it does need an OAuth sign-in. [8][4]
One command in your terminal:
claude mcp add vercel -e VERCEL_API_KEY=your_vercel_access_token -- npx -y @mistertk/vercel-mcp
The -e flag sets the environment variable, and everything after the double dash is the exact command Claude Code will run. Your token ends up in your shell history, so paste it in a fresh terminal if that matters to you. Vercel documents a second route for this client, claude mcp add --transport http vercel https://mcp.vercel.com, which points at Vercel's own server and authorises in the browser when you type /mcp. [9][4]
Add to ~/.cursor/mcp.json for every project, or to .cursor/mcp.json inside one project:
{
"mcpServers": {
"vercel": {
"command": "npx",
"args": [
"-y",
"@mistertk/vercel-mcp"
],
"env": {
"VERCEL_API_KEY": "your_vercel_access_token"
}
}
}
}Cursor picks the file up on restart. A project-level .cursor/mcp.json is worth committing to git only after you have moved the token out of it. Vercel also publishes a Cursor snippet for its own hosted server, which is the same file with a single url line instead of the command and env. [10][4]
No JSON file and no terminal. In Routines: Settings, then Assistant, then Connections, then Add MCP Server. Switch the form to Command (stdio) and enter:
Name Vercel Command npx Arguments -y @mistertk/vercel-mcp Environment Variables VERCEL_API_KEY=your_vercel_access_token
The token belongs in the Environment Variables field, on its own line, not in Arguments. Click Test Connection first: a working server answers with its tool count, one hundred and thirty-one for this package. If it answers nothing at all, the variable did not reach the process. [11]
No terminal needed
If you have never opened Terminal and never want to, this is your path. Routines is a Mac app that runs MCP servers for you: fill in a few fields once, and this server's tools are available to your AI in chat and in scheduled routines.
01
Download the app from getroutines.ai/download, drag it to Applications, and sign in.
02
Click your account at the bottom of the sidebar and choose Settings. Open the Assistant section, then the Connections tab, scroll to MCP Servers, and click Add MCP Server.
03
Switch the form to Command (stdio): this server is a command that runs on your Mac, not a web address. Vercel's own hosted server at mcp.vercel.com is a web address, but reaching it needs an OAuth sign-in that this form does not run, which is why the package below is the route that works here.
04
In the Vercel dashboard, open the Account Tokens page at vercel.com/account/tokens and create one. Vercel scopes a token to your user account and optionally to a single project, so pick the narrowest scope that covers what you want the assistant to see. The plaintext value is shown once, so copy it before you close the page.
05
Name: Vercel. Command: npx. Arguments: -y @mistertk/vercel-mcp. In Environment Variables add one line, VERCEL_API_KEY=your_token. Click Test Connection: Routines starts the server and reports how many tools it found, one hundred and thirty-one for this one. Then click Add Server.
06
The tools work in chat right away. To let a scheduled routine use them, open the routine, find the Tools & connections card, and tick the server under Apps.
Routine ideas
Once the server is connected, a scheduled routine can use its tools while you are away. Copy a prompt, paste it into Routines, and pick a time.
Every Monday at 9:00, list my Vercel deployments from the last seven days, group them by project, call out any that ended in an error state, and save the summary as vercel-week.md in my Documents folder.
On the first of every month at 8:00, list the domains on my Vercel account with their configuration status, flag any that are not verified or are close to expiring, and write the list to vercel-domains.md so I can act on it.
Every Friday at 17:00, list the environment variables on my production Vercel project, note which ones changed this week and who changed them, and write a short report to env-review.md. Never print the values themselves.
Troubleshooting
Real errors captured during the verification run, printed exactly as the server returned them.
What you see
Configuration error: Missing Vercel API key. Set VERCEL_API_KEY environment variable or pass VERCEL_API_KEY=<key> as argument Usage: Environment variable: export VERCEL_API_KEY=<YOUR_API_KEY> Command line: node script.js VERCEL_API_KEY=<YOUR_API_KEY> Optional environment variables: VERCEL_REQUEST_TIMEOUT - Request timeout in ms (default: 30000) VERCEL_MAX_RETRIES - Maximum retry attempts (default: 3) VERCEL_DEBUG - Enable debug logging (default: false) VERCEL_RATE_LIMIT_PER_MINUTE - API calls per minute (default: 60) VERCEL_RATE_LIMIT_BURST - Burst limit (default: 10)
The fix
No token reached the process, so it printed this and quit before the MCP handshake began. We reproduced it by launching the package with the variable unset. There is no partial mode here: with no token there is no tools/list either, which is why a client shows a dead connection rather than an empty one. In a form-based client, check that the value went into the Environment Variables field and not into Arguments. The optional variables in the same message are real and useful: VERCEL_DEBUG=true is the quickest way to see what the server is actually sending.
What you see
Configuration error: Invalid Vercel API key format
The fix
The package checks the shape of the token on your own Mac before it ever calls Vercel, and refuses anything too short or containing characters outside letters, digits, underscores and hyphens. We triggered this on purpose with a four-character value. It is a fast offline failure, so it is easy to tell apart from the 403 further down this list: this one happens at startup, the 403 happens on a tool call. A stray space or a quote copied along with the token is the usual cause.
What you see
Error getting auth user: API error occurred: Status 403 Content-Type "application/json; charset=utf-8". Body: {"error":{"code":"forbidden","message":"Not authorized","invalidToken":true}}The fix
The server is running and the tools are there; Vercel is refusing the token. This is the reply we got throughout our own run, because our token was a placeholder rather than a real one, and it is why this page is marked as enumerated rather than fully verified. The same message covers a revoked token, an expired one, and a token scoped to a different account or project than the resource you asked about. Create a fresh token on the Account Tokens page in the Vercel dashboard and restart the server.
What you see
MCP error -32602: Input validation error: Invalid arguments for tool getDeployment: Required at deploymentId
The fix
Not a Vercel problem: the server checked the arguments and found a required one missing. We got this by calling getDeployment with no arguments at all. Most tools here take at least one identifier, and many take an optional teamId, which you need when the resource belongs to a team rather than your personal account. Ask the assistant to run a listing tool first, such as getDeployments or listProjects, and let it take the identifier from that result.
What you see
HTTP/2 401
www-authenticate: Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://mcp.vercel.com/.well-known/oauth-protected-resource"
{"error":"invalid_token","error_description":"No authorization provided"}The fix
Expected, and worth knowing before you spend an evening on it. Vercel's hosted server at mcp.vercel.com is a different product from the local package on this page, and it accepts nothing without credentials. We sent an initialize request with no Authorization header and got this back, along with a pointer to the OAuth metadata it publishes. Reaching that server means an OAuth sign-in your MCP client completes for you in a browser, and Vercel only allows clients it has reviewed and approved.
What you see
sh: vercel-mcp: command not found
The fix
You installed a different package. Several npm packages carry Vercel MCP names and they are not interchangeable: we hit this exact line running npx -y vercel-mcp-server, whose published archive does not contain the file its own manifest points at, so npx downloads it, finds nothing to run, and hands the failure to the shell. The package this page verified is the scoped one, @mistertk/vercel-mcp. Copy the name including the @mistertk/ prefix.
The fix
The npx command belongs to Node.js. If Node is not installed on your Mac, every client on this page fails at the spawn step before the server can say anything. Install Node from nodejs.org, restart your MCP client, and try again.
FAQ
It is how an AI assistant reads and changes things in a Vercel account: deployments, projects, domains, DNS records, environment variables, team members and more. Two different things go by the name. Vercel runs an official hosted server at mcp.vercel.com, reached over the network after an OAuth sign-in and open only to clients Vercel has reviewed and approved. Separately, community packages wrap the same Vercel REST API as a local process on your Mac, authenticated with a personal Access Token. This page verified one of the community packages, because that is the kind a form-based client can start on its own. [4][1]
The package on this page exposes 131 tools, and the table above is the live tools/list output, word for word. They cover deployments (getDeployments, getDeployment, cancelDeployment, deleteDeployment, getDeploymentEvents), projects and environment variables (listProjects, updateProject, listEnvVars, createEnvVar, removeEnvVar), domains and DNS (listDomains, getDomainConfig, listDnsRecords, createDnsRecord), teams and members (getTeams, getTeamMembers, inviteUserToTeam), Edge Config, certificates, webhooks, log drains, build checks, aliases, and firewall settings. Vercel's own hosted server publishes a different and much smaller set, 32 tools at the time we checked, aimed at documentation search, deployment logs and Web Analytics. [5]
No, and we are not going to imply otherwise. We started the server, completed the handshake, and got the full tool list back, which is what the enumerated badge on this page means. Every tool call we then made returned a real error, printed above: 403 Not authorized from Vercel for the two that reached the network, and an argument-validation error for the one that did not. Completing a real read needs a Vercel Access Token for a real account, which we do not have. Everything else on this page is a receipt from that run.
One Vercel Access Token, passed as the VERCEL_API_KEY environment variable. You create it on the Account Tokens page in the Vercel dashboard, at vercel.com/account/tokens. Vercel scopes a token to your user account and optionally to a single project, so give it the narrowest scope that covers the work, and treat it like a password: the plaintext value is shown once, and anything holding it can act as you. Worth knowing before you decide the scope: the 131 tools above are not read-only, and include deleteDeployment, removeEnvVar, deleteDnsRecord and deleteTeam. The server also reads a few optional variables for timeouts, retries and rate limits, which its own startup message lists. [6]
No. In Routines you fill in three fields plus one environment variable in Settings and click Test Connection; the walkthrough above shows every click. Claude Desktop needs a small JSON file edited once, or a custom connector added through its own settings. Only Claude Code is terminal-first by nature. [11][8]
Both numbers are real and we captured both. The npm registry publishes this package as 0.1.1, and that is the version npx resolved and ran. Over MCP, the running server introduces itself as vercel-mcp version 1.0.0, which is a number written inside its own source and never updated to match the release. Same code, two numbers. It is worth knowing which one to quote when you report a bug: the npm one. [1]
No, and it is the easiest mix-up here because it is the Vercel-published package with by far the most downloads. @vercel/mcp-adapter is a library for building your own MCP server inside a Next.js or similar app and deploying it to Vercel. It is not a server you can point Claude or Cursor at. If you want your assistant to talk to your existing Vercel account, you want either the hosted endpoint at mcp.vercel.com or a community package like the one on this page. Note also that the source repository behind this package no longer resolves on GitHub, so the published npm archive is the only thing left to audit before you install it. [7][3]
Sources
Anything on this page we did not observe in the run is linked here, with the date we read it. The run itself is the receipt for the rest.
[1]
Latest version 0.1.1, published 2025-06-27, MIT, bin vercel-mcp. This is the version npx resolved for our run.
[2]
[3]
The repository named in the package manifest returns 404 Not Found, so the source tree cannot be read on GitHub; only the published npm archive can be inspected.
[4]
The hosted endpoint mcp.vercel.com, its OAuth and Streamable HTTP model, the reviewed-client list, and the per-client setup snippets. Page dated 2026-06-26.
[5]
32 documented tools on the hosted server, including a purchase group that charges a real payment method.
[6]
Access tokens authenticate REST API requests, are scoped to your user account and optionally one project, and their plaintext value is shown only once.
[7]
Version 0.3.2, described as an adapter for Next.js and other frameworks: a library for building a server, not a server to connect to.
[8]
The Claude Desktop config file location and the mcpServers shape.
[9]
The claude mcp add syntax, including -e for environment variables.
[10]
[11]
How Routines runs one-click OAuth connectors and any MCP server.
This page describes Vercel as it behaved in one dated run on one Mac. Versions move: if something here no longer matches what you see, the capture date at the top says how old the reading is.
Behind this directory
Routines, the app behind this directory, runs MCP servers like this one without a terminal: see how connectors work. Your notes stay markdown files on your Mac, there is no cloud bill, and it works offline. Download Routines