fix(vercel): align integration with live Vercel REST API docs (#5370)

* fix(vercel): align integration with live Vercel REST API docs

- 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

* fix(vercel): address review findings on DNS/deployment param handling

- 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

* fix(vercel): fix pagination token type mismatch and clarify DNS update 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

* fix(vercel): fix zero-value SRV/HTTPS/MX numeric fields being dropped

- 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)

* fix(vercel): fix stale cross-operation field leaks in block params

- 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

* feat(vercel): close remaining input/output completeness gaps

- 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

* fix(vercel): fix remaining No->false truthy-string dropdown bugs

- 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

* fix(vercel): fix silent project-rename leak in update_project

- 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
This commit is contained in:
Waleed
2026-07-02 10:39:09 -07:00
committed by GitHub
parent 0507acf2dd
commit a267a95809
44 changed files with 1505 additions and 40 deletions
File diff suppressed because it is too large Load Diff
+7
View File
@@ -26,12 +26,19 @@ export const vercelAddDomainTool: ToolConfig<VercelAddDomainParams, VercelAddDom
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelAddDomainParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v7/domains${qs ? `?${qs}` : ''}`
},
@@ -56,12 +56,19 @@ export const vercelAddProjectDomainTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelAddProjectDomainParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v10/projects/${params.projectId.trim()}/domains${qs ? `?${qs}` : ''}`
},
@@ -32,12 +32,19 @@ export const vercelCancelDeploymentTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelCancelDeploymentParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v12/deployments/${params.deploymentId.trim()}/cancel${qs ? `?${qs}` : ''}`
},
+21 -3
View File
@@ -27,18 +27,32 @@ export const vercelCreateAliasTool: ToolConfig<VercelCreateAliasParams, VercelCr
visibility: 'user-or-llm',
description: 'The domain or subdomain to assign as an alias',
},
redirect: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description:
'Hostname to 307-redirect the alias to instead of serving the deployment directly',
},
teamId: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelCreateAliasParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v2/deployments/${params.deploymentId.trim()}/aliases${qs ? `?${qs}` : ''}`
},
@@ -47,9 +61,13 @@ export const vercelCreateAliasTool: ToolConfig<VercelCreateAliasParams, VercelCr
Authorization: `Bearer ${params.apiKey}`,
'Content-Type': 'application/json',
}),
body: (params: VercelCreateAliasParams) => ({
alias: params.alias.trim(),
}),
body: (params: VercelCreateAliasParams) => {
const body: Record<string, unknown> = { alias: params.alias.trim() }
if (params.redirect != null && params.redirect !== '') {
body.redirect = params.redirect.trim()
}
return body
},
},
transformResponse: async (response: Response) => {
+7
View File
@@ -62,12 +62,19 @@ export const vercelCreateCheckTool: ToolConfig<VercelCreateCheckParams, VercelCh
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelCreateCheckParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v1/deployments/${params.deploymentId.trim()}/checks${qs ? `?${qs}` : ''}`
},
@@ -64,6 +64,12 @@ export const vercelCreateDeploymentTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
@@ -71,6 +77,7 @@ export const vercelCreateDeploymentTool: ToolConfig<
const query = new URLSearchParams()
if (params.forceNew) query.set('forceNew', params.forceNew)
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v13/deployments${qs ? `?${qs}` : ''}`
},
+79 -5
View File
@@ -40,9 +40,9 @@ export const vercelCreateDnsRecordTool: ToolConfig<
},
value: {
type: 'string',
required: true,
required: false,
visibility: 'user-or-llm',
description: 'The value of the DNS record',
description: 'The value of the DNS record (not used for SRV/HTTPS records)',
},
ttl: {
type: 'number',
@@ -56,18 +56,73 @@ export const vercelCreateDnsRecordTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Priority for MX records',
},
srvTarget: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Target hostname for SRV records (required when recordType is SRV)',
},
srvWeight: {
type: 'number',
required: false,
visibility: 'user-or-llm',
description: 'Weight for SRV records (required when recordType is SRV)',
},
srvPort: {
type: 'number',
required: false,
visibility: 'user-or-llm',
description: 'Port for SRV records (required when recordType is SRV)',
},
srvPriority: {
type: 'number',
required: false,
visibility: 'user-or-llm',
description: 'Priority for SRV records (required when recordType is SRV)',
},
httpsTarget: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Target hostname for HTTPS records (required when recordType is HTTPS)',
},
httpsPriority: {
type: 'number',
required: false,
visibility: 'user-or-llm',
description: 'Priority for HTTPS records (required when recordType is HTTPS)',
},
httpsParams: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Optional service parameters for HTTPS records (e.g. "alpn=h2,h3")',
},
comment: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'A comment to add context on what this DNS record is for (max 500 characters)',
},
teamId: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelCreateDnsRecordParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v2/domains/${params.domain.trim()}/records${qs ? `?${qs}` : ''}`
},
@@ -77,13 +132,32 @@ export const vercelCreateDnsRecordTool: ToolConfig<
'Content-Type': 'application/json',
}),
body: (params: VercelCreateDnsRecordParams) => {
const type = params.recordType.trim().toUpperCase()
const body: Record<string, unknown> = {
name: params.recordName.trim(),
type: params.recordType.trim(),
value: params.value.trim(),
type,
}
if (params.ttl != null) body.ttl = params.ttl
if (params.mxPriority != null) body.mxPriority = params.mxPriority
if (type === 'SRV') {
body.srv = {
target: params.srvTarget?.trim(),
weight: params.srvWeight,
port: params.srvPort,
priority: params.srvPriority,
}
} else if (type === 'HTTPS') {
body.https = {
target: params.httpsTarget?.trim(),
priority: params.httpsPriority,
...(params.httpsParams ? { params: params.httpsParams.trim() } : {}),
}
} else {
if (params.value != null) body.value = params.value.trim()
if (type === 'MX' && params.mxPriority != null) body.mxPriority = params.mxPriority
}
if (params.comment != null && params.comment !== '') body.comment = params.comment
return body
},
},
+7
View File
@@ -65,12 +65,19 @@ export const vercelCreateEnvVarTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelCreateEnvVarParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v10/projects/${params.projectId.trim()}/env${qs ? `?${qs}` : ''}`
},
+28
View File
@@ -53,18 +53,43 @@ export const vercelCreateProjectTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Custom install command',
},
rootDirectory: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Subdirectory of the repository the project lives in (for monorepos)',
},
nodeVersion: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Node.js version to use (e.g. 22.x, 20.x, 18.x)',
},
devCommand: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Custom dev server command',
},
teamId: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelCreateProjectParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v11/projects${qs ? `?${qs}` : ''}`
},
@@ -80,6 +105,9 @@ export const vercelCreateProjectTool: ToolConfig<
if (params.buildCommand) body.buildCommand = params.buildCommand.trim()
if (params.outputDirectory) body.outputDirectory = params.outputDirectory.trim()
if (params.installCommand) body.installCommand = params.installCommand.trim()
if (params.rootDirectory) body.rootDirectory = params.rootDirectory.trim()
if (params.nodeVersion) body.nodeVersion = params.nodeVersion.trim()
if (params.devCommand) body.devCommand = params.devCommand.trim()
return body
},
},
+7
View File
@@ -27,12 +27,19 @@ export const vercelDeleteAliasTool: ToolConfig<VercelDeleteAliasParams, VercelDe
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelDeleteAliasParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v2/aliases/${params.aliasId.trim()}${qs ? `?${qs}` : ''}`
},
@@ -32,12 +32,19 @@ export const vercelDeleteDeploymentTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelDeleteDeploymentParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const id = params.deploymentId.trim()
if (id.includes('.')) {
query.set('url', id)
@@ -38,12 +38,19 @@ export const vercelDeleteDnsRecordTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelDeleteDnsRecordParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v2/domains/${params.domain.trim()}/records/${params.recordId.trim()}${qs ? `?${qs}` : ''}`
},
+7
View File
@@ -29,12 +29,19 @@ export const vercelDeleteDomainTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelDeleteDomainParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v6/domains/${params.domain.trim()}${qs ? `?${qs}` : ''}`
},
+7
View File
@@ -35,12 +35,19 @@ export const vercelDeleteEnvVarTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelDeleteEnvVarParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v9/projects/${params.projectId.trim()}/env/${params.envId.trim()}${qs ? `?${qs}` : ''}`
},
+7
View File
@@ -29,12 +29,19 @@ export const vercelDeleteProjectTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelDeleteProjectParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v9/projects/${params.projectId.trim()}${qs ? `?${qs}` : ''}`
},
+7
View File
@@ -26,12 +26,19 @@ export const vercelGetAliasTool: ToolConfig<VercelGetAliasParams, VercelGetAlias
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelGetAliasParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v4/aliases/${params.aliasId.trim()}${qs ? `?${qs}` : ''}`
},
+7
View File
@@ -32,12 +32,19 @@ export const vercelGetCheckTool: ToolConfig<VercelGetCheckParams, VercelCheckRes
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelGetCheckParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v1/deployments/${params.deploymentId.trim()}/checks/${params.checkId.trim()}${qs ? `?${qs}` : ''}`
},
+7
View File
@@ -35,6 +35,12 @@ export const vercelGetDeploymentTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
@@ -42,6 +48,7 @@ export const vercelGetDeploymentTool: ToolConfig<
const query = new URLSearchParams()
if (params.withGitRepoInfo) query.set('withGitRepoInfo', params.withGitRepoInfo)
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v13/deployments/${params.deploymentId.trim()}${qs ? `?${qs}` : ''}`
},
@@ -62,6 +62,12 @@ export const vercelGetDeploymentEventsTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
@@ -73,6 +79,7 @@ export const vercelGetDeploymentEventsTool: ToolConfig<
if (params.since !== undefined) query.set('since', String(params.since))
if (params.until !== undefined) query.set('until', String(params.until))
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v3/deployments/${params.deploymentId.trim()}/events${qs ? `?${qs}` : ''}`
},
+7
View File
@@ -26,12 +26,19 @@ export const vercelGetDomainTool: ToolConfig<VercelGetDomainParams, VercelGetDom
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelGetDomainParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v5/domains/${params.domain.trim()}${qs ? `?${qs}` : ''}`
},
@@ -32,12 +32,19 @@ export const vercelGetDomainConfigTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelGetDomainConfigParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v6/domains/${params.domain.trim()}/config${qs ? `?${qs}` : ''}`
},
+22
View File
@@ -20,18 +20,40 @@ export const vercelGetEnvVarsTool: ToolConfig<VercelGetEnvVarsParams, VercelGetE
visibility: 'user-or-llm',
description: 'Project ID or name',
},
decrypt: {
type: 'boolean',
required: false,
visibility: 'user-or-llm',
description: 'If true, decrypted variable values are returned instead of ciphertext',
},
gitBranch: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description:
'Filter results to the environment variables for this git branch (must have target=preview)',
},
teamId: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelGetEnvVarsParams) => {
const query = new URLSearchParams()
if (params.decrypt) query.set('decrypt', 'true')
if (params.gitBranch) query.set('gitBranch', params.gitBranch.trim())
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v10/projects/${params.projectId.trim()}/env${qs ? `?${qs}` : ''}`
},
+11
View File
@@ -26,12 +26,19 @@ export const vercelGetProjectTool: ToolConfig<VercelGetProjectParams, VercelGetP
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelGetProjectParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v9/projects/${params.projectId.trim()}${qs ? `?${qs}` : ''}`
},
@@ -50,6 +57,8 @@ export const vercelGetProjectTool: ToolConfig<VercelGetProjectParams, VercelGetP
id: data.id,
name: data.name,
framework: data.framework ?? null,
rootDirectory: data.rootDirectory ?? null,
nodeVersion: data.nodeVersion ?? null,
createdAt: data.createdAt,
updatedAt: data.updatedAt,
link: data.link
@@ -67,6 +76,8 @@ export const vercelGetProjectTool: ToolConfig<VercelGetProjectParams, VercelGetP
id: { type: 'string', description: 'Project ID' },
name: { type: 'string', description: 'Project name' },
framework: { type: 'string', description: 'Project framework', optional: true },
rootDirectory: { type: 'string', description: 'Root directory of the project', optional: true },
nodeVersion: { type: 'string', description: 'Node.js version', optional: true },
createdAt: { type: 'number', description: 'Creation timestamp' },
updatedAt: { type: 'number', description: 'Last updated timestamp' },
link: {
+7
View File
@@ -39,6 +39,12 @@ export const vercelListAliasesTool: ToolConfig<VercelListAliasesParams, VercelLi
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
@@ -48,6 +54,7 @@ export const vercelListAliasesTool: ToolConfig<VercelListAliasesParams, VercelLi
if (params.domain) query.set('domain', params.domain.trim())
if (params.limit) query.set('limit', String(params.limit))
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v4/aliases${qs ? `?${qs}` : ''}`
},
+7
View File
@@ -26,12 +26,19 @@ export const vercelListChecksTool: ToolConfig<VercelListChecksParams, VercelList
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelListChecksParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v1/deployments/${params.deploymentId.trim()}/checks${qs ? `?${qs}` : ''}`
},
@@ -32,12 +32,19 @@ export const vercelListDeploymentFilesTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelListDeploymentFilesParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v6/deployments/${params.deploymentId.trim()}/files${qs ? `?${qs}` : ''}`
},
@@ -69,6 +69,12 @@ export const vercelListDeploymentsTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
@@ -82,6 +88,7 @@ export const vercelListDeploymentsTool: ToolConfig<
if (params.until) query.set('until', String(params.until))
if (params.limit) query.set('limit', String(params.limit))
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v7/deployments${qs ? `?${qs}` : ''}`
},
@@ -35,6 +35,12 @@ export const vercelListDnsRecordsTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
@@ -42,6 +48,7 @@ export const vercelListDnsRecordsTool: ToolConfig<
const query = new URLSearchParams()
if (params.limit) query.set('limit', String(params.limit))
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v5/domains/${params.domain.trim()}/records${qs ? `?${qs}` : ''}`
},
+23
View File
@@ -27,6 +27,12 @@ export const vercelListDomainsTool: ToolConfig<VercelListDomainsParams, VercelLi
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
@@ -34,6 +40,7 @@ export const vercelListDomainsTool: ToolConfig<VercelListDomainsParams, VercelLi
const query = new URLSearchParams()
if (params.limit) query.set('limit', String(params.limit))
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v5/domains${qs ? `?${qs}` : ''}`
},
@@ -65,6 +72,10 @@ export const vercelListDomainsTool: ToolConfig<VercelListDomainsParams, VercelLi
email: d.creator.email ?? null,
}
: null,
customNameservers: d.customNameservers ?? [],
userId: d.userId ?? null,
teamId: d.teamId ?? null,
transferStartedAt: d.transferStartedAt ?? null,
}))
return {
@@ -117,6 +128,18 @@ export const vercelListDomainsTool: ToolConfig<VercelListDomainsParams, VercelLi
email: { type: 'string', description: 'Creator email' },
},
},
customNameservers: {
type: 'array',
description: 'Custom nameservers',
items: { type: 'string' },
},
userId: { type: 'string', description: 'Owner user ID', optional: true },
teamId: { type: 'string', description: 'Owner team ID', optional: true },
transferStartedAt: {
type: 'number',
description: 'Transfer start timestamp',
optional: true,
},
},
},
},
@@ -32,6 +32,12 @@ export const vercelListProjectDomainsTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
limit: {
type: 'number',
required: false,
@@ -44,6 +50,7 @@ export const vercelListProjectDomainsTool: ToolConfig<
url: (params: VercelListProjectDomainsParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
if (params.limit) query.set('limit', String(params.limit))
const qs = query.toString()
return `https://api.vercel.com/v9/projects/${params.projectId.trim()}/domains${qs ? `?${qs}` : ''}`
+29
View File
@@ -29,12 +29,25 @@ export const vercelListProjectsTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Maximum number of projects to return',
},
from: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description:
"Continuation token for pagination, taken from the previous response's pagination.next value. Query only projects updated after this timestamp or continuation token.",
},
teamId: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
@@ -42,7 +55,9 @@ export const vercelListProjectsTool: ToolConfig<
const query = new URLSearchParams()
if (params.search) query.set('search', params.search)
if (params.limit) query.set('limit', String(params.limit))
if (params.from) query.set('from', params.from.trim())
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v10/projects${qs ? `?${qs}` : ''}`
},
@@ -59,6 +74,8 @@ export const vercelListProjectsTool: ToolConfig<
id: p.id,
name: p.name,
framework: p.framework ?? null,
rootDirectory: p.rootDirectory ?? null,
nodeVersion: p.nodeVersion ?? null,
createdAt: p.createdAt,
updatedAt: p.updatedAt,
}))
@@ -69,6 +86,7 @@ export const vercelListProjectsTool: ToolConfig<
projects,
count: projects.length,
hasMore: data.pagination?.next != null,
nextFrom: data.pagination?.next != null ? String(data.pagination.next) : null,
},
}
},
@@ -83,6 +101,12 @@ export const vercelListProjectsTool: ToolConfig<
id: { type: 'string', description: 'Project ID' },
name: { type: 'string', description: 'Project name' },
framework: { type: 'string', description: 'Framework', optional: true },
rootDirectory: {
type: 'string',
description: 'Root directory of the project',
optional: true,
},
nodeVersion: { type: 'string', description: 'Node.js version', optional: true },
createdAt: { type: 'number', description: 'Creation timestamp' },
updatedAt: { type: 'number', description: 'Last updated timestamp' },
},
@@ -96,5 +120,10 @@ export const vercelListProjectsTool: ToolConfig<
type: 'boolean',
description: 'Whether more projects are available',
},
nextFrom: {
type: 'string',
description: 'Continuation token to pass as `from` to fetch the next page',
optional: true,
},
},
}
+7
View File
@@ -29,12 +29,19 @@ export const vercelPauseProjectTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelPauseProjectParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v1/projects/${params.projectId.trim()}/pause${qs ? `?${qs}` : ''}`
},
@@ -38,12 +38,19 @@ export const vercelPromoteDeploymentTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelPromoteDeploymentParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v10/projects/${params.projectId.trim()}/promote/${params.deploymentId.trim()}${qs ? `?${qs}` : ''}`
},
@@ -38,12 +38,19 @@ export const vercelRemoveProjectDomainTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelRemoveProjectDomainParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v9/projects/${params.projectId.trim()}/domains/${params.domain.trim()}${qs ? `?${qs}` : ''}`
},
+14
View File
@@ -35,12 +35,26 @@ export const vercelRerequestCheckTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
autoUpdate: {
type: 'boolean',
required: false,
visibility: 'user-or-llm',
description: 'Whether to mark the check as running immediately on rerequest',
},
},
request: {
url: (params: VercelRerequestCheckParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
if (params.autoUpdate !== undefined) query.set('autoUpdate', String(params.autoUpdate))
const qs = query.toString()
return `https://api.vercel.com/v1/deployments/${params.deploymentId.trim()}/checks/${params.checkId.trim()}/rerequest${qs ? `?${qs}` : ''}`
},
+78 -1
View File
@@ -23,6 +23,7 @@ export interface VercelListDeploymentsParams {
until?: number
limit?: number
teamId?: string
slug?: string
}
export interface VercelGetDeploymentParams {
@@ -30,19 +31,23 @@ export interface VercelGetDeploymentParams {
deploymentId: string
withGitRepoInfo?: string
teamId?: string
slug?: string
}
export interface VercelListProjectsParams {
apiKey: string
search?: string
limit?: number
from?: string
teamId?: string
slug?: string
}
export interface VercelGetProjectParams {
apiKey: string
projectId: string
teamId?: string
slug?: string
}
export interface VercelCreateDeploymentParams {
@@ -54,18 +59,23 @@ export interface VercelCreateDeploymentParams {
gitSource?: string
forceNew?: string
teamId?: string
slug?: string
}
export interface VercelListDomainsParams {
apiKey: string
limit?: number
teamId?: string
slug?: string
}
export interface VercelGetEnvVarsParams {
apiKey: string
projectId: string
decrypt?: boolean
gitBranch?: string
teamId?: string
slug?: string
}
export interface VercelListDeploymentsResponse extends ToolResponse {
@@ -134,11 +144,14 @@ export interface VercelListProjectsResponse extends ToolResponse {
id: string
name: string
framework: string | null
rootDirectory: string | null
nodeVersion: string | null
createdAt: number
updatedAt: number
}>
count: number
hasMore: boolean
nextFrom: string | null
}
}
@@ -147,6 +160,8 @@ export interface VercelGetProjectResponse extends ToolResponse {
id: string
name: string
framework: string | null
rootDirectory: string | null
nodeVersion: string | null
createdAt: number
updatedAt: number
link: {
@@ -189,6 +204,10 @@ export interface VercelListDomainsResponse extends ToolResponse {
boughtAt: number | null
transferredAt: number | null
creator: VercelDomainCreator | null
customNameservers: string[]
userId: string | null
teamId: string | null
transferStartedAt: number | null
}>
count: number
hasMore: boolean
@@ -216,6 +235,7 @@ export interface VercelCancelDeploymentParams {
apiKey: string
deploymentId: string
teamId?: string
slug?: string
}
export interface VercelCancelDeploymentResponse extends ToolResponse {
@@ -234,6 +254,7 @@ export interface VercelDeleteDeploymentParams {
apiKey: string
deploymentId: string
teamId?: string
slug?: string
}
export interface VercelDeleteDeploymentResponse extends ToolResponse {
@@ -252,6 +273,7 @@ export interface VercelGetDeploymentEventsParams {
since?: number
until?: number
teamId?: string
slug?: string
}
export interface VercelGetDeploymentEventsResponse extends ToolResponse {
@@ -281,6 +303,7 @@ export interface VercelCreateEnvVarParams {
gitBranch?: string
comment?: string
teamId?: string
slug?: string
}
export interface VercelCreateEnvVarResponse extends ToolResponse {
@@ -308,6 +331,7 @@ export interface VercelUpdateEnvVarParams {
gitBranch?: string
comment?: string
teamId?: string
slug?: string
}
export interface VercelUpdateEnvVarResponse extends ToolResponse {
@@ -329,6 +353,7 @@ export interface VercelDeleteEnvVarParams {
projectId: string
envId: string
teamId?: string
slug?: string
}
export interface VercelDeleteEnvVarResponse extends ToolResponse {
@@ -341,6 +366,7 @@ export interface VercelListDeploymentFilesParams {
apiKey: string
deploymentId: string
teamId?: string
slug?: string
}
export interface VercelListDeploymentFilesResponse extends ToolResponse {
@@ -365,7 +391,11 @@ export interface VercelCreateProjectParams {
buildCommand?: string
outputDirectory?: string
installCommand?: string
rootDirectory?: string
nodeVersion?: string
devCommand?: string
teamId?: string
slug?: string
}
export interface VercelCreateProjectResponse extends ToolResponse {
@@ -386,7 +416,11 @@ export interface VercelUpdateProjectParams {
buildCommand?: string
outputDirectory?: string
installCommand?: string
rootDirectory?: string
nodeVersion?: string
devCommand?: string
teamId?: string
slug?: string
}
export interface VercelUpdateProjectResponse extends ToolResponse {
@@ -402,6 +436,7 @@ export interface VercelDeleteProjectParams {
apiKey: string
projectId: string
teamId?: string
slug?: string
}
export interface VercelDeleteProjectResponse extends ToolResponse {
@@ -414,6 +449,7 @@ export interface VercelPauseProjectParams {
apiKey: string
projectId: string
teamId?: string
slug?: string
}
export interface VercelPauseProjectResponse extends ToolResponse {
@@ -428,6 +464,7 @@ export interface VercelUnpauseProjectParams {
apiKey: string
projectId: string
teamId?: string
slug?: string
}
export interface VercelUnpauseProjectResponse extends ToolResponse {
@@ -442,6 +479,7 @@ export interface VercelListProjectDomainsParams {
apiKey: string
projectId: string
teamId?: string
slug?: string
limit?: number
}
@@ -472,6 +510,7 @@ export interface VercelAddProjectDomainParams {
redirectStatusCode?: number
gitBranch?: string
teamId?: string
slug?: string
}
export interface VercelAddProjectDomainResponse extends ToolResponse {
@@ -494,6 +533,7 @@ export interface VercelRemoveProjectDomainParams {
projectId: string
domain: string
teamId?: string
slug?: string
}
export interface VercelRemoveProjectDomainResponse extends ToolResponse {
@@ -506,6 +546,7 @@ export interface VercelGetDomainParams {
apiKey: string
domain: string
teamId?: string
slug?: string
}
export interface VercelGetDomainResponse extends ToolResponse {
@@ -533,6 +574,7 @@ export interface VercelAddDomainParams {
apiKey: string
name: string
teamId?: string
slug?: string
}
export interface VercelAddDomainResponse extends ToolResponse {
@@ -557,6 +599,7 @@ export interface VercelDeleteDomainParams {
apiKey: string
domain: string
teamId?: string
slug?: string
}
export interface VercelDeleteDomainResponse extends ToolResponse {
@@ -570,6 +613,7 @@ export interface VercelGetDomainConfigParams {
apiKey: string
domain: string
teamId?: string
slug?: string
}
export interface VercelGetDomainConfigResponse extends ToolResponse {
@@ -587,10 +631,19 @@ export interface VercelCreateDnsRecordParams {
domain: string
recordName: string
recordType: string
value: string
value?: string
ttl?: number
mxPriority?: number
srvTarget?: string
srvWeight?: number
srvPort?: number
srvPriority?: number
httpsTarget?: string
httpsPriority?: number
httpsParams?: string
comment?: string
teamId?: string
slug?: string
}
export interface VercelCreateDnsRecordResponse extends ToolResponse {
@@ -605,6 +658,7 @@ export interface VercelListDnsRecordsParams {
domain: string
limit?: number
teamId?: string
slug?: string
}
export interface VercelListDnsRecordsResponse extends ToolResponse {
@@ -633,6 +687,7 @@ export interface VercelDeleteDnsRecordParams {
domain: string
recordId: string
teamId?: string
slug?: string
}
export interface VercelDeleteDnsRecordResponse extends ToolResponse {
@@ -772,6 +827,7 @@ export interface VercelListAliasesParams {
domain?: string
limit?: number
teamId?: string
slug?: string
}
export interface VercelListAliasesResponse extends ToolResponse {
@@ -796,6 +852,7 @@ export interface VercelGetAliasParams {
apiKey: string
aliasId: string
teamId?: string
slug?: string
}
export interface VercelGetAliasResponse extends ToolResponse {
@@ -816,7 +873,9 @@ export interface VercelCreateAliasParams {
apiKey: string
deploymentId: string
alias: string
redirect?: string
teamId?: string
slug?: string
}
export interface VercelCreateAliasResponse extends ToolResponse {
@@ -832,6 +891,7 @@ export interface VercelDeleteAliasParams {
apiKey: string
aliasId: string
teamId?: string
slug?: string
}
export interface VercelDeleteAliasResponse extends ToolResponse {
@@ -997,6 +1057,7 @@ export interface VercelCreateCheckParams {
externalId?: string
rerequestable?: boolean
teamId?: string
slug?: string
}
export interface VercelCheckResponse extends ToolResponse {
@@ -1025,12 +1086,14 @@ export interface VercelGetCheckParams {
deploymentId: string
checkId: string
teamId?: string
slug?: string
}
export interface VercelListChecksParams {
apiKey: string
deploymentId: string
teamId?: string
slug?: string
}
export interface VercelListChecksResponse extends ToolResponse {
@@ -1069,6 +1132,7 @@ export interface VercelUpdateCheckParams {
path?: string
output?: string
teamId?: string
slug?: string
}
export interface VercelRerequestCheckParams {
@@ -1076,6 +1140,8 @@ export interface VercelRerequestCheckParams {
deploymentId: string
checkId: string
teamId?: string
slug?: string
autoUpdate?: boolean
}
export interface VercelRerequestCheckResponse extends ToolResponse {
@@ -1092,8 +1158,16 @@ export interface VercelUpdateDnsRecordParams {
type?: string
ttl?: number
mxPriority?: number
srvTarget?: string
srvWeight?: number
srvPort?: number
srvPriority?: number
httpsTarget?: string
httpsPriority?: number
httpsParams?: string
comment?: string
teamId?: string
slug?: string
}
export interface VercelUpdateDnsRecordResponse extends ToolResponse {
@@ -1149,6 +1223,7 @@ export interface VercelUpdateProjectDomainParams {
redirectStatusCode?: number
gitBranch?: string
teamId?: string
slug?: string
}
export interface VercelUpdateProjectDomainResponse extends ToolResponse {
@@ -1171,6 +1246,7 @@ export interface VercelVerifyProjectDomainParams {
projectId: string
domain: string
teamId?: string
slug?: string
}
export interface VercelVerifyProjectDomainResponse extends ToolResponse {
@@ -1192,6 +1268,7 @@ export interface VercelPromoteDeploymentParams {
projectId: string
deploymentId: string
teamId?: string
slug?: string
}
export interface VercelPromoteDeploymentResponse extends ToolResponse {
+7
View File
@@ -29,12 +29,19 @@ export const vercelUnpauseProjectTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelUnpauseProjectParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v1/projects/${params.projectId.trim()}/unpause${qs ? `?${qs}` : ''}`
},
+7
View File
@@ -74,12 +74,19 @@ export const vercelUpdateCheckTool: ToolConfig<VercelUpdateCheckParams, VercelCh
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelUpdateCheckParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v1/deployments/${params.deploymentId.trim()}/checks/${params.checkId.trim()}${qs ? `?${qs}` : ''}`
},
+73 -5
View File
@@ -56,6 +56,48 @@ export const vercelUpdateDnsRecordTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Priority for MX records',
},
srvTarget: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Target hostname for SRV records (required together when updating SRV data)',
},
srvWeight: {
type: 'number',
required: false,
visibility: 'user-or-llm',
description: 'Weight for SRV records (required together when updating SRV data)',
},
srvPort: {
type: 'number',
required: false,
visibility: 'user-or-llm',
description: 'Port for SRV records (required together when updating SRV data)',
},
srvPriority: {
type: 'number',
required: false,
visibility: 'user-or-llm',
description: 'Priority for SRV records (required together when updating SRV data)',
},
httpsTarget: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Target hostname for HTTPS records (required together when updating HTTPS data)',
},
httpsPriority: {
type: 'number',
required: false,
visibility: 'user-or-llm',
description: 'Priority for HTTPS records (required together when updating HTTPS data)',
},
httpsParams: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Optional service parameters for HTTPS records (e.g. "alpn=h2,h3")',
},
comment: {
type: 'string',
required: false,
@@ -68,12 +110,19 @@ export const vercelUpdateDnsRecordTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelUpdateDnsRecordParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v1/domains/records/${params.recordId.trim()}${qs ? `?${qs}` : ''}`
},
@@ -85,16 +134,35 @@ export const vercelUpdateDnsRecordTool: ToolConfig<
body: (params: VercelUpdateDnsRecordParams) => {
const body: Record<string, unknown> = {}
if (params.name != null && params.name !== '') body.name = params.name
if (params.value != null && params.value !== '') body.value = params.value
if (params.type != null && params.type !== '') body.type = params.type
const type =
params.type != null && params.type !== '' ? params.type.trim().toUpperCase() : null
if (type != null) body.type = type
if (params.ttl != null) {
const ttl = Number(params.ttl)
if (!Number.isNaN(ttl)) body.ttl = ttl
}
if (params.mxPriority != null) {
const mxPriority = Number(params.mxPriority)
if (!Number.isNaN(mxPriority)) body.mxPriority = mxPriority
if (type === 'SRV') {
body.srv = {
target: params.srvTarget?.trim(),
weight: params.srvWeight,
port: params.srvPort,
priority: params.srvPriority,
}
} else if (type === 'HTTPS') {
body.https = {
target: params.httpsTarget?.trim(),
priority: params.httpsPriority,
...(params.httpsParams ? { params: params.httpsParams.trim() } : {}),
}
} else {
if (params.value != null && params.value !== '') body.value = params.value
if (params.mxPriority != null) {
const mxPriority = Number(params.mxPriority)
if (!Number.isNaN(mxPriority)) body.mxPriority = mxPriority
}
}
if (params.comment != null && params.comment !== '') body.comment = params.comment
return body
},
+7
View File
@@ -71,12 +71,19 @@ export const vercelUpdateEnvVarTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelUpdateEnvVarParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v9/projects/${params.projectId.trim()}/env/${params.envId.trim()}${qs ? `?${qs}` : ''}`
},
+28
View File
@@ -53,18 +53,43 @@ export const vercelUpdateProjectTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Custom install command',
},
rootDirectory: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Subdirectory of the repository the project lives in (for monorepos)',
},
nodeVersion: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Node.js version to use (e.g. 22.x, 20.x, 18.x)',
},
devCommand: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Custom dev server command',
},
teamId: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelUpdateProjectParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v9/projects/${params.projectId.trim()}${qs ? `?${qs}` : ''}`
},
@@ -80,6 +105,9 @@ export const vercelUpdateProjectTool: ToolConfig<
if (params.buildCommand) body.buildCommand = params.buildCommand.trim()
if (params.outputDirectory) body.outputDirectory = params.outputDirectory.trim()
if (params.installCommand) body.installCommand = params.installCommand.trim()
if (params.rootDirectory) body.rootDirectory = params.rootDirectory.trim()
if (params.nodeVersion) body.nodeVersion = params.nodeVersion.trim()
if (params.devCommand) body.devCommand = params.devCommand.trim()
return body
},
},
@@ -56,12 +56,19 @@ export const vercelUpdateProjectDomainTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelUpdateProjectDomainParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v9/projects/${params.projectId.trim()}/domains/${params.domain.trim()}${qs ? `?${qs}` : ''}`
},
@@ -38,12 +38,19 @@ export const vercelVerifyProjectDomainTool: ToolConfig<
visibility: 'user-or-llm',
description: 'Team ID to scope the request',
},
slug: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description: 'Team slug to scope the request (alternative to teamId)',
},
},
request: {
url: (params: VercelVerifyProjectDomainParams) => {
const query = new URLSearchParams()
if (params.teamId) query.set('teamId', params.teamId.trim())
if (params.slug) query.set('slug', params.slug.trim())
const qs = query.toString()
return `https://api.vercel.com/v9/projects/${params.projectId.trim()}/domains/${params.domain.trim()}/verify${qs ? `?${qs}` : ''}`
},