סיכום פריסות ליום שני
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.
שרת MCP מאומת: Vercel
רשימת הכלים למטה היא לכידה חיה מהשרת הרץ; קריאת כלי מאומתת עדיין ממתינה להרשאות.
התשובה הקצרה
אומת לאחרונה 2026-08-03
שרת ה-MCP של Vercel מאפשר לעוזר AI לקרוא ולשנות את הפריסות, הפרויקטים, הדומיינים, משתני הסביבה והגדרות הצוות שלכם מתוך חלון צ׳אט או מתוך שגרה מתוזמנת. קיימים שניים כאלה, והם לא אותו מוצר: Vercel מארחת שרת משלה בכתובת mcp.vercel.com, שהלקוח שלכם מגיע אליו ברשת אחרי הזדהות OAuth ושפתוח רק ללקוחות ש-Vercel בדקה ואישרה, ובנפרד קיימות חבילות קהילתיות שרצות על ה-Mac שלכם מול Vercel Access Token אישי. העמוד הזה עוסק בחבילה הקהילתית, כי היא זו שלקוח מבוסס טופס יכול להפעיל בלי הזדהות בדפדפן. הרצנו אותה, דיברנו איתה בפרוטוקול וספרנו את כל 131 הכלים שהיא חושפת, והטבלה למטה היא הלכידה הזו. מה שלא יכולנו לעשות הוא להשלים קריאה מאומתת: לשם כך נדרש Access Token לחשבון Vercel אמיתי, שאין לנו, ולכן העמוד מראה את הכלים ואת השגיאות המדויקות שמתקבלות בלעדיו, ועוצר שם. [1][4][3]
אימות
השיטה
הרצנו את השרת עם npx על גבי stdio עם Access Token מדומה, השלמנו את לחיצת היד של MCP וקראנו ל-tools/list: 131 הכלים שלמטה הם התשובה הזו, מילה במילה. אחר כך ביצענו שלוש קריאות כלי אמיתיות. שתיים מהן הגיעו אל Vercel וחזרו עם 403 Not authorized, והשלישית נדחתה על ידי בדיקת הארגומנטים של השרת עצמו עוד לפני שיצאה מה-Mac. קריאות מאומתות כאן ממתינות ל-Vercel Access Token, שאין לנו, ולכן שום משפט בעמוד הזה לא טוען שקריאה ל-Vercel הצליחה. בנוסף שלחנו בקשת initialize ללא אימות לנקודת הקצה המתארחת של Vercel עצמה בכתובת mcp.vercel.com, והיא ענתה 401; התשובה מודפסת בקטע פתרון התקלות.
הודעת הפתיחה של השרת
{"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}קריאת כלי אמיתית אחת
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}}שורות אמיתיות מהתוצאה שנלכדה: מספיק כדי להוכיח שהקריאה נענתה.
כלים
השרת ענה ל-tools/list עם 131 כלים בתאריך 2026-08-03. השמות, התיאורים והפרמטרים למטה הם המילים שלו עצמו, מועתקים מהתשובה הזו וללא עריכה.
| כלי | מה הוא עושה |
|---|---|
| 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 |
פרמטרים המסומנים ב-* הם חובה.
התקנה
העתיקו את הבלוק של האפליקציה שלכם. כל אחד מהם הוא ההגדרה המדויקת שאיתה אימתנו את השרת.
פתחו את הקובץ ~/Library/Application Support/Claude/claude_desktop_config.json (בתוך Claude Desktop: Settings, אחר כך Developer, אחר כך Edit Config) והוסיפו:
{
"mcpServers": {
"vercel": {
"command": "npx",
"args": [
"-y",
"@mistertk/vercel-mcp"
],
"env": {
"VERCEL_API_KEY": "your_vercel_access_token"
}
}
}
}הדביקו את ה-token שלכם במקום הערך לדוגמה, ואז סגרו ופתחו מחדש את Claude Desktop. Claude Desktop יכולה גם להגיע לשרת המתארח של Vercel עצמה, דרך Settings, אחר כך Connectors, אחר כך Add custom connector, ש-Vercel מתעדת כיכולת של מסלולים בתשלום; המסלול הזה לא דורש JSON ולא token, אבל כן דורש הזדהות OAuth. [8][4]
פקודה אחת בטרמינל:
claude mcp add vercel -e VERCEL_API_KEY=your_vercel_access_token -- npx -y @mistertk/vercel-mcp
הדגל -e מגדיר את משתנה הסביבה, וכל מה שאחרי המקף הכפול הוא הפקודה המדויקת ש-Claude Code יריץ. ה-token נשמר בהיסטוריית הפקודות שלכם, אז הדביקו אותו בטרמינל חדש אם זה משנה לכם. Vercel מתעדת מסלול שני ללקוח הזה, claude mcp add --transport http vercel https://mcp.vercel.com, שמכוון לשרת של Vercel עצמה ומבקש אישור בדפדפן כשמקלידים /mcp. [9][4]
הוסיפו ל-~/.cursor/mcp.json עבור כל הפרויקטים, או ל-.cursor/mcp.json בתוך פרויקט אחד:
{
"mcpServers": {
"vercel": {
"command": "npx",
"args": [
"-y",
"@mistertk/vercel-mcp"
],
"env": {
"VERCEL_API_KEY": "your_vercel_access_token"
}
}
}
}Cursor קורא את הקובץ מחדש אחרי הפעלה מחדש. קובץ .cursor/mcp.json ברמת הפרויקט שווה לשמור ב-git רק אחרי שהוצאתם ממנו את ה-token. Vercel מפרסמת גם קטע הגדרה ל-Cursor עבור השרת המתארח שלה, שהוא אותו קובץ עם שורת url אחת במקום ה-command וה-env. [10][4]
בלי קובץ JSON ובלי טרמינל. ב-Routines: Settings, אחר כך Assistant, אחר כך Connections, אחר כך Add MCP Server. העבירו את הטופס ל-Command (stdio) והזינו:
Name Vercel Command npx Arguments -y @mistertk/vercel-mcp Environment Variables VERCEL_API_KEY=your_vercel_access_token
ה-token שייך לשדה Environment Variables, בשורה משלו, ולא ל-Arguments. לחצו קודם על Test Connection: שרת תקין עונה עם מספר הכלים שלו, מאה שלושים ואחד עבור החבילה הזו. אם הוא לא עונה כלום, המשתנה לא הגיע לתהליך. [11]
בלי טרמינל
אם מעולם לא פתחתם את הטרמינל ואין לכם כוונה להתחיל, זה המסלול שלכם. Routines היא אפליקציית Mac שמריצה שרתי MCP בשבילכם: ממלאים כמה שדות פעם אחת, והכלים של השרת זמינים ל-AI שלכם בצ׳אט ובשגרות מתוזמנות.
01
הורידו את האפליקציה מ-getroutines.ai/download, גררו אותה ל-Applications והתחברו.
02
לחצו על החשבון שלכם בתחתית סרגל הצד ובחרו Settings. פתחו את הקטע Assistant, אחר כך את הלשונית Connections, גללו אל MCP Servers ולחצו על Add MCP Server.
03
העבירו את הטופס ל-Command (stdio): השרת הזה הוא פקודה שרצה על ה-Mac שלכם, לא כתובת אינטרנט. השרת המתארח של Vercel בכתובת mcp.vercel.com אכן כן כתובת אינטרנט, אבל הגישה אליו דורשת הזדהות OAuth שהטופס הזה לא מריץ, ולכן החבילה שלמטה היא המסלול שעובד כאן.
04
בלוח הבקרה של Vercel פתחו את עמוד Account Tokens בכתובת vercel.com/account/tokens וצרו שם token. Vercel תוחמת token לחשבון המשתמש שלכם ואופציונלית גם לפרויקט יחיד, אז בחרו את ההיקף הצר ביותר שמכסה את מה שתרצו שהעוזר יראה. הערך הגלוי מוצג פעם אחת בלבד, אז העתיקו אותו לפני שתסגרו את העמוד.
05
Name: Vercel. Command: npx. Arguments: -y @mistertk/vercel-mcp. בשדה Environment Variables הוסיפו שורה אחת, VERCEL_API_KEY=your_token. לחצו Test Connection: Routines מפעילה את השרת ומדווחת כמה כלים היא מצאה, מאה שלושים ואחד עבור השרת הזה. אחר כך לחצו Add Server.
06
הכלים עובדים בצ׳אט מיד. כדי לתת לשגרה מתוזמנת להשתמש בהם, פתחו את השגרה, מצאו את הכרטיס Tools & connections וסמנו את השרת תחת Apps.
רעיונות לשגרות
אחרי שהשרת מחובר, שגרה מתוזמנת יכולה להשתמש בכלים שלו גם כשאתם לא מול המסך. העתיקו פרומפט, הדביקו אותו ב-Routines ובחרו שעה. הפרומפטים כתובים באנגלית בכוונה, מדביקים אותם בדיוק כפי שהם.
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.
פתרון תקלות
שגיאות אמיתיות שנלכדו בריצת האימות, מודפסות בדיוק כפי שהשרת החזיר אותן.
מה רואים
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)
הפתרון
שום token לא הגיע לתהליך, ולכן הוא הדפיס את זה ויצא עוד לפני שלחיצת היד של MCP התחילה. שחזרנו את זה כשהפעלנו את החבילה בלי המשתנה. אין כאן מצב חלקי: בלי token אין גם tools/list, ולכן הלקוח מציג חיבור מת ולא חיבור ריק. בלקוח מבוסס טופס, בדקו שהערך נכנס לשדה Environment Variables ולא ל-Arguments. המשתנים האופציונליים שמופיעים באותה הודעה אמיתיים ושימושיים: VERCEL_DEBUG=true היא הדרך המהירה ביותר לראות מה השרת באמת שולח.
מה רואים
Configuration error: Invalid Vercel API key format
הפתרון
החבילה בודקת את מבנה ה-token על ה-Mac שלכם עוד לפני שהיא פונה ל-Vercel, ומסרבת לכל ערך קצר מדי או כזה שמכיל תווים מעבר לאותיות, ספרות, קו תחתון ומקף. גרמנו לזה בכוונה עם ערך בן ארבעה תווים. זו כשלון מהיר שקורה בלי רשת, ולכן קל להבחין בינו לבין ה-403 שמופיע בהמשך הרשימה: זה קורה בהפעלה, וה-403 קורה בקריאת כלי. רווח מיותר או מרכאות שהועתקו יחד עם ה-token הם הסיבה הרגילה.
מה רואים
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}}הפתרון
השרת רץ והכלים נמצאים שם; Vercel היא זו שמסרבת ל-token. זו התשובה שקיבלנו לאורך כל הריצה שלנו, כי ה-token שלנו היה מדומה ולא אמיתי, ובגלל זה העמוד הזה מסומן ככזה שכליו נספרו ולא כמאומת במלואו. אותה הודעה מכסה גם token שבוטל, token שפג, ו-token שתחום לחשבון או לפרויקט אחר מזה שעליו שאלתם. צרו token חדש בעמוד Account Tokens בלוח הבקרה של Vercel והפעילו מחדש את השרת.
מה רואים
MCP error -32602: Input validation error: Invalid arguments for tool getDeployment: Required at deploymentId
הפתרון
זו לא תקלה של Vercel: השרת בדק את הארגומנטים וגילה שחסר אחד מהם. קיבלנו את זה כשקראנו ל-getDeployment בלי ארגומנטים בכלל. רוב הכלים כאן מקבלים לפחות מזהה אחד, ורבים מקבלים גם teamId אופציונלי, שנדרש כשהמשאב שייך לצוות ולא לחשבון האישי שלכם. בקשו מהעוזר להריץ קודם כלי רשימה, למשל getDeployments או listProjects, ולקחת את המזהה מהתוצאה הזו.
מה רואים
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"}הפתרון
צפוי, וכדאי לדעת את זה לפני שמבזבזים על זה ערב שלם. השרת המתארח של Vercel בכתובת mcp.vercel.com הוא מוצר אחר מהחבילה המקומית שבעמוד הזה, והוא לא מקבל דבר בלי פרטי גישה. שלחנו בקשת initialize בלי כותרת Authorization כלל וקיבלנו את זה בחזרה, יחד עם הפניה למטא-נתוני ה-OAuth שהוא מפרסם. הגעה לשרת ההוא מחייבת הזדהות OAuth שלקוח ה-MCP שלכם משלים בשבילכם בדפדפן, ו-Vercel מתירה זאת רק ללקוחות שהיא בדקה ואישרה.
מה רואים
sh: vercel-mcp: command not found
הפתרון
התקנתם חבילה אחרת. כמה חבילות npm נושאות שמות של Vercel MCP והן לא בנות החלפה: נתקלנו בשורה הזו בדיוק כשהרצנו npx -y vercel-mcp-server, שהארכיון המפורסם שלה לא מכיל את הקובץ שהמניפסט שלה עצמה מפנה אליו, ולכן npx מוריד אותה, לא מוצא מה להריץ ומעביר את הכשלון ל-shell. החבילה שאומתה בעמוד הזה היא זו עם ה-scope, @mistertk/vercel-mcp. העתיקו את השם כולל הקידומת @mistertk/.
הפתרון
הפקודה npx שייכת ל-Node.js. אם Node לא מותקן על ה-Mac, כל לקוח בעמוד הזה ייכשל בשלב ההפעלה עוד לפני שהשרת מספיק לומר משהו. התקינו Node מ-nodejs.org, הפעילו מחדש את לקוח ה-MCP ונסו שוב.
שאלות נפוצות
כך עוזר AI קורא ומשנה דברים בחשבון Vercel: פריסות, פרויקטים, דומיינים, רשומות DNS, משתני סביבה, חברי צוות ועוד. שני דברים שונים נושאים את השם הזה. Vercel מפעילה שרת רשמי מתארח בכתובת mcp.vercel.com, שאליו מגיעים ברשת אחרי הזדהות OAuth והוא פתוח רק ללקוחות ש-Vercel בדקה ואישרה. בנפרד, חבילות קהילתיות עוטפות את אותו Vercel REST API כתהליך מקומי על ה-Mac שלכם, עם Access Token אישי. העמוד הזה אימת אחת מהחבילות הקהילתיות, כי זה הסוג שלקוח מבוסס טופס יכול להפעיל בכוחות עצמו. [4][1]
החבילה שבעמוד הזה חושפת 131 כלים, והטבלה למעלה היא פלט ה-tools/list החי, מילה במילה. הם מכסים פריסות (getDeployments, getDeployment, cancelDeployment, deleteDeployment, getDeploymentEvents), פרויקטים ומשתני סביבה (listProjects, updateProject, listEnvVars, createEnvVar, removeEnvVar), דומיינים ו-DNS (listDomains, getDomainConfig, listDnsRecords, createDnsRecord), צוותים וחברים (getTeams, getTeamMembers, inviteUserToTeam), Edge Config, תעודות, webhooks, log drains, בדיקות בנייה, aliases והגדרות חומת אש. השרת המתארח של Vercel עצמה מפרסם סט אחר וקטן בהרבה, 32 כלים נכון לבדיקה שלנו, שמכוון לחיפוש בתיעוד, ללוגים של פריסות ול-Web Analytics. [5]
לא, ואנחנו לא מתכוונים לרמוז אחרת. הפעלנו את השרת, השלמנו את לחיצת היד וקיבלנו בחזרה את רשימת הכלים המלאה, וזו המשמעות של התג בעמוד הזה שאומר שהכלים נספרו. כל קריאת כלי שביצענו אחר כך החזירה שגיאה אמיתית, שמודפסת למעלה: 403 Not authorized מ-Vercel עבור השתיים שהגיעו לרשת, ושגיאת אימות ארגומנטים עבור זו שלא. השלמת קריאה אמיתית דורשת Vercel Access Token לחשבון אמיתי, שאין לנו. כל השאר בעמוד הזה הוא קבלה מהריצה ההיא.
Vercel Access Token אחד, שמועבר כמשתנה הסביבה VERCEL_API_KEY. יוצרים אותו בעמוד Account Tokens בלוח הבקרה של Vercel, בכתובת vercel.com/account/tokens. Vercel תוחמת token לחשבון המשתמש שלכם ואופציונלית גם לפרויקט יחיד, אז תנו לו את ההיקף הצר ביותר שמכסה את העבודה, והתייחסו אליו כמו לסיסמה: הערך הגלוי מוצג פעם אחת, וכל מי שמחזיק בו יכול לפעול בשמכם. כדאי לדעת לפני שקובעים את ההיקף: 131 הכלים שלמעלה אינם לקריאה בלבד, וכוללים את deleteDeployment, removeEnvVar, deleteDnsRecord ו-deleteTeam. השרת קורא גם כמה משתנים אופציונליים עבור פסקי זמן, ניסיונות חוזרים והגבלת קצב, שהודעת ההפעלה שלו עצמו מפרטת. [6]
לא. ב-Routines ממלאים שלושה שדות ועוד משתנה סביבה אחד בהגדרות ולוחצים Test Connection; המדריך למעלה מראה כל לחיצה. Claude Desktop דורשת עריכה חד-פעמית של קובץ JSON קטן, או הוספת custom connector דרך ההגדרות שלה. רק Claude Code הוא כלי טרמינל מטבעו. [11][8]
שני המספרים אמיתיים ולכדנו את שניהם. מאגר npm מפרסם את החבילה הזו כ-0.1.1, וזו הגרסה ש-npx פתר והריץ. על גבי MCP, השרת הרץ מציג את עצמו כ-vercel-mcp בגרסה 1.0.0, מספר שכתוב בתוך הקוד שלו ומעולם לא עודכן כדי להתאים לגרסת הפרסום. אותו קוד, שני מספרים. כדאי לדעת איזה מהם לצטט כשמדווחים על תקלה: זה של npm. [1]
לא, וזה הבלבול הקל ביותר כאן כי זו החבילה שפורסמה על ידי Vercel עם הכי הרבה הורדות בפער גדול. @vercel/mcp-adapter היא ספרייה לבניית שרת MCP משלכם בתוך אפליקציית Next.js או דומה ולפריסתו ב-Vercel. היא אינה שרת שאפשר לכוון אליו את Claude או את Cursor. אם אתם רוצים שהעוזר שלכם ידבר עם חשבון ה-Vercel הקיים שלכם, אתם צריכים או את נקודת הקצה המתארחת בכתובת mcp.vercel.com או חבילה קהילתית כמו זו שבעמוד הזה. שימו לב גם שמאגר הקוד שמאחורי החבילה הזו כבר לא נפתח ב-GitHub, ולכן הארכיון המפורסם ב-npm הוא הדבר היחיד שנותר לבדוק לפני התקנה. [7][3]
מקורות
כל מה שבעמוד הזה שלא ראינו בעצמנו בריצה מקושר כאן, עם התאריך שבו קראנו אותו. לגבי השאר, הריצה עצמה היא הקבלה.
[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.
העמוד הזה מתאר את Vercel כפי שהתנהג בריצה מתוארכת אחת על Mac אחד. גרסאות משתנות: אם משהו כאן כבר לא תואם למה שאתם רואים, תאריך הלכידה בראש העמוד אומר בן כמה הצילום.
מאחורי המדריך הזה
Routines, האפליקציה שמאחורי המדריך הזה, מריצה שרתי MCP כמו זה בלי טרמינל: כך עובדים המחברים. הפתקים שלכם נשארים קובצי markdown על ה-Mac שלכם, אין חשבון ענן לשלם, והיא עובדת גם בלי אינטרנט. להורדת Routines