fix(vercel): align integration with live Vercel REST API docs#5370
Conversation
- add missing teamId/slug scoping to 29 tools (deployments, checks, projects, env vars) - add DNS SRV/HTTPS record support (nested srv/https objects) to create/update_dns_record - add decrypt/gitBranch filters to get_env_vars, autoUpdate to rerequest_check - add redirect param to create_alias, comment to create_dns_record - add missing customNameservers/userId/teamId/transferStartedAt fields to list_domains output - wire pagination filters (limit/since/until/search/app) into block subBlocks for list_deployments, list_teams, list_team_members, list_dns_records, list_project_domains - wire previously-unexposed tool params into block UI: withGitRepoInfo, gitSource, forceNew, externalId, rerequestable, output, direction, follow - fix duplicate projectId subBlock id collision between list_deployments and other project-scoped operations - fix teamId scope field incorrectly hidden for check operations
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryMedium Risk Overview Team scoping: Optional Block UI & param wiring: Renames the list-deployments project filter to DNS: Create/update DNS tools support SRV and HTTPS via nested Tool-layer fixes: Reviewed by Cursor Bugbot for commit 7b1fe84. Configure here. |
Greptile SummaryThis PR audits and aligns the Vercel integration's 63 tools against the live Vercel REST API, adding missing team-scoping params (
Confidence Score: 5/5Safe to merge; all changes are additive API-alignment fixes with no breaking changes to existing tool contracts. The changes are a large but mechanical expansion — adding optional params, fixing a duplicate subBlock ID, and wiring tool fields into the block UI. Each tool correctly builds its URL and body, type coercions are handled consistently (with one minor inconsistency for apps/sim/blocks/blocks/vercel.ts — the Important Files Changed
Sequence Diagram%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
participant UI as Block UI (vercel.ts)
participant Handler as getParams handler
participant Tool as Tool (e.g. create_dns_record.ts)
participant API as Vercel REST API
UI->>Handler: "{ operation, recordType='SRV', srvTarget, srvWeight, srvPort, srvPriority, teamSlug, ... }"
Handler->>Handler: "base = { ...rest, apiKey, slug: teamSlug }"
Handler->>Tool: "{ domain, recordName, recordType='SRV', srvTarget, srvWeight, srvPort, srvPriority }"
Tool->>Tool: "body.srv = { target, weight, port, priority }"
Tool->>API: "POST /v2/domains/{domain}/records?teamId=...&slug=..."
API-->>Tool: "{ uid, updated }"
Tool-->>UI: "{ success, output: { uid, updated } }"
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
participant UI as Block UI (vercel.ts)
participant Handler as getParams handler
participant Tool as Tool (e.g. create_dns_record.ts)
participant API as Vercel REST API
UI->>Handler: "{ operation, recordType='SRV', srvTarget, srvWeight, srvPort, srvPriority, teamSlug, ... }"
Handler->>Handler: "base = { ...rest, apiKey, slug: teamSlug }"
Handler->>Tool: "{ domain, recordName, recordType='SRV', srvTarget, srvWeight, srvPort, srvPriority }"
Tool->>Tool: "body.srv = { target, weight, port, priority }"
Tool->>API: "POST /v2/domains/{domain}/records?teamId=...&slug=..."
API-->>Tool: "{ uid, updated }"
Tool-->>UI: "{ success, output: { uid, updated } }"
Reviews (8): Last reviewed commit: "fix(vercel): fix silent project-rename l..." | Re-trigger Greptile |
- fix withGitRepoInfo 'No' dropdown sending withGitRepoInfo=false instead of omitting the param - remove redundant duplicate 'Forward' option from eventsDirection dropdown - fix mxPriority being silently dropped in update_dns_record when record type is left unset
|
@greptile review |
|
@cursor review |
…e UX - fix list_projects nextFrom being stored as a number despite string typing, which threw TypeError on .trim() when chained into a follow-up list_projects call - clarify that the DNS update Value field has no effect on existing SRV/HTTPS records unless Record Type is explicitly reselected
|
@greptile review |
|
@cursor review |
- SRV weight/port/priority, HTTPS priority, and MX priority use truthy checks that silently drop legitimate 0 values; switch to explicit empty/null checks - add missing MX Priority field to create_dns_record block UI (tool already required it for MX records but there was no way to set it)
|
@greptile review |
|
@cursor review |
- fix list_deployments/create_deployment/update_check/list_team_members/update_dns_record/update_env_var conditionally spreading into keys that collide with unrelated operations' non-destructured literal subBlock fields (projectId, deploymentId, target, name, search) - a stale value left over from switching operations in the UI would silently leak into the wrong tool call since the conditional spread only overrides when the current operation's own field has a value - fix now always assigns these keys directly so they deterministically override any stale base value
|
@greptile review |
|
@cursor review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 176ca4a. Configure here.
- add missing slug (team-slug) param to 13 domain/DNS/alias tools that were skipped in an earlier fix pass, matching the pattern used everywhere else in this integration - add rootDirectory, nodeVersion, devCommand params to create_project/update_project (verified against Vercel's live OpenAPI spec — high-value fields for monorepo support and runtime pinning) - surface rootDirectory/nodeVersion in get_project/list_projects outputs, since the API already returns them - wire all new fields into the block UI as advanced fields
|
@greptile review |
|
@cursor review |
- checkRerequestable, checkAutoUpdate, envVarsDecrypt dropdowns used id: 'false' for their No option (a truthy non-empty string), causing the conditional spread to always fire and explicitly send false instead of omitting the param - swept the whole file for this pattern; checkBlocking correctly keeps 'false' since it's a required field that's always sent directly, not conditionally
|
@greptile review |
|
@cursor review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 4d7f749. Configure here.
- update_project had no dedicated rename field and just returned base directly, so a stale value from create_deployment's unrelated 'name' subBlock (Project Name for the deployment) could silently flow through and rename a project on update - add a dedicated 'New Project Name' field for update_project, wired with a direct override so it always takes precedence over any stale leaked value
|
@greptile review |
|
@cursor review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 7b1fe84. Configure here.
Summary
/validate-integrationaudit of all 63 Vercel tools + block against Vercel's live REST API docs and OpenAPI specteamId/slugteam-scoping params to 29 tools across deployments, checks, projects, and env varsSRV/HTTPSrecord support to create/update DNS record tools (nestedsrv/httpsobjects, matching Vercel's discriminated-union schema)decrypt/gitBranchfilters to get_env_vars,autoUpdateto rerequest_check,redirectto create_alias,commentto create_dns_recordcustomNameservers/userId/teamId/transferStartedAtfields to list_domains outputgitSource,forceNew,withGitRepoInfo,externalId,rerequestable,output, etc.) so users can actually set themidcollision (projectIdused by two unrelated operations) and a bug hiding the team-scope field for check operationsType of Change
Testing
Tested manually — full monorepo
tsc --noEmitandbun run lintpass clean.Checklist