@tpmjs/tools-vercel 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,48 @@
1
+ # @tpmjs/tools-vercel
2
+
3
+ Vercel API tools for AI agents. Manage deployments, projects, domains, environment variables, and build logs.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @tpmjs/tools-vercel
9
+ ```
10
+
11
+ ## Setup
12
+
13
+ Set your Vercel API token:
14
+
15
+ ```bash
16
+ export VERCEL_TOKEN="..."
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ```typescript
22
+ import { listDeployments, getProject, listEnvVars } from '@tpmjs/tools-vercel';
23
+
24
+ const deployments = await listDeployments.execute({ projectId: 'my-project', limit: 5 });
25
+ const project = await getProject.execute({ idOrName: 'my-project' });
26
+ const envVars = await listEnvVars.execute({ idOrName: 'my-project' });
27
+ ```
28
+
29
+ ## Tools
30
+
31
+ | Tool | Description |
32
+ |------|-------------|
33
+ | `listDeployments` | List deployments with optional state filtering |
34
+ | `getDeployment` | Get details of a specific deployment |
35
+ | `cancelDeployment` | Cancel a building deployment |
36
+ | `listProjects` | List all projects in your account |
37
+ | `getProject` | Get details of a specific project |
38
+ | `listDomains` | List all domains in your account |
39
+ | `getDomain` | Get details of a specific domain |
40
+ | `listProjectDomains` | List domains assigned to a project |
41
+ | `listEnvVars` | List environment variables for a project |
42
+ | `createEnvVar` | Create a new environment variable |
43
+ | `deleteEnvVar` | Delete an environment variable |
44
+ | `getDeploymentEvents` | Get build logs and events for a deployment |
45
+
46
+ ## License
47
+
48
+ MIT
@@ -0,0 +1,133 @@
1
+ import * as ai from 'ai';
2
+
3
+ /**
4
+ * @tpmjs/tools-vercel — Vercel API Tools for AI Agents
5
+ *
6
+ * Full access to the Vercel API: manage deployments, projects, domains,
7
+ * environment variables, and logs.
8
+ *
9
+ * @requires VERCEL_TOKEN environment variable
10
+ */
11
+ interface ListDeploymentsInput {
12
+ projectId?: string;
13
+ teamId?: string;
14
+ state?: string;
15
+ limit?: number;
16
+ }
17
+ declare const listDeployments: ai.Tool<ListDeploymentsInput, {
18
+ deployments: unknown[];
19
+ pagination: unknown;
20
+ }>;
21
+ interface GetDeploymentInput {
22
+ idOrUrl: string;
23
+ teamId?: string;
24
+ }
25
+ declare const getDeployment: ai.Tool<GetDeploymentInput, Record<string, unknown>>;
26
+ interface CancelDeploymentInput {
27
+ id: string;
28
+ teamId?: string;
29
+ }
30
+ declare const cancelDeployment: ai.Tool<CancelDeploymentInput, {
31
+ state: string;
32
+ uid: string;
33
+ }>;
34
+ interface ListProjectsInput {
35
+ teamId?: string;
36
+ limit?: number;
37
+ search?: string;
38
+ }
39
+ declare const listProjects: ai.Tool<ListProjectsInput, {
40
+ projects: unknown[];
41
+ pagination: unknown;
42
+ }>;
43
+ interface GetProjectInput {
44
+ idOrName: string;
45
+ teamId?: string;
46
+ }
47
+ declare const getProject: ai.Tool<GetProjectInput, Record<string, unknown>>;
48
+ interface ListDomainsInput {
49
+ teamId?: string;
50
+ limit?: number;
51
+ }
52
+ declare const listDomains: ai.Tool<ListDomainsInput, {
53
+ domains: unknown[];
54
+ pagination: unknown;
55
+ }>;
56
+ interface GetDomainInput {
57
+ name: string;
58
+ teamId?: string;
59
+ }
60
+ declare const getDomain: ai.Tool<GetDomainInput, Record<string, unknown>>;
61
+ interface ListProjectDomainsInput {
62
+ idOrName: string;
63
+ teamId?: string;
64
+ limit?: number;
65
+ }
66
+ declare const listProjectDomains: ai.Tool<ListProjectDomainsInput, {
67
+ domains: unknown[];
68
+ pagination: unknown;
69
+ }>;
70
+ interface ListEnvVarsInput {
71
+ idOrName: string;
72
+ teamId?: string;
73
+ }
74
+ declare const listEnvVars: ai.Tool<ListEnvVarsInput, {
75
+ envs: unknown[];
76
+ }>;
77
+ interface CreateEnvVarInput {
78
+ idOrName: string;
79
+ key: string;
80
+ value: string;
81
+ target: Array<'production' | 'preview' | 'development'>;
82
+ type?: 'plain' | 'secret' | 'encrypted' | 'sensitive';
83
+ teamId?: string;
84
+ }
85
+ declare const createEnvVar: ai.Tool<CreateEnvVarInput, {
86
+ created: Record<string, unknown>;
87
+ }>;
88
+ interface DeleteEnvVarInput {
89
+ idOrName: string;
90
+ envId: string;
91
+ teamId?: string;
92
+ }
93
+ declare const deleteEnvVar: ai.Tool<DeleteEnvVarInput, Record<string, unknown>>;
94
+ interface GetDeploymentEventsInput {
95
+ idOrUrl: string;
96
+ teamId?: string;
97
+ }
98
+ declare const getDeploymentEvents: ai.Tool<GetDeploymentEventsInput, unknown[]>;
99
+ declare const _default: {
100
+ listDeployments: ai.Tool<ListDeploymentsInput, {
101
+ deployments: unknown[];
102
+ pagination: unknown;
103
+ }>;
104
+ getDeployment: ai.Tool<GetDeploymentInput, Record<string, unknown>>;
105
+ cancelDeployment: ai.Tool<CancelDeploymentInput, {
106
+ state: string;
107
+ uid: string;
108
+ }>;
109
+ listProjects: ai.Tool<ListProjectsInput, {
110
+ projects: unknown[];
111
+ pagination: unknown;
112
+ }>;
113
+ getProject: ai.Tool<GetProjectInput, Record<string, unknown>>;
114
+ listDomains: ai.Tool<ListDomainsInput, {
115
+ domains: unknown[];
116
+ pagination: unknown;
117
+ }>;
118
+ getDomain: ai.Tool<GetDomainInput, Record<string, unknown>>;
119
+ listProjectDomains: ai.Tool<ListProjectDomainsInput, {
120
+ domains: unknown[];
121
+ pagination: unknown;
122
+ }>;
123
+ listEnvVars: ai.Tool<ListEnvVarsInput, {
124
+ envs: unknown[];
125
+ }>;
126
+ createEnvVar: ai.Tool<CreateEnvVarInput, {
127
+ created: Record<string, unknown>;
128
+ }>;
129
+ deleteEnvVar: ai.Tool<DeleteEnvVarInput, Record<string, unknown>>;
130
+ getDeploymentEvents: ai.Tool<GetDeploymentEventsInput, unknown[]>;
131
+ };
132
+
133
+ export { type CancelDeploymentInput, type CreateEnvVarInput, type DeleteEnvVarInput, type GetDeploymentEventsInput, type GetDeploymentInput, type GetDomainInput, type GetProjectInput, type ListDeploymentsInput, type ListDomainsInput, type ListEnvVarsInput, type ListProjectDomainsInput, type ListProjectsInput, cancelDeployment, createEnvVar, _default as default, deleteEnvVar, getDeployment, getDeploymentEvents, getDomain, getProject, listDeployments, listDomains, listEnvVars, listProjectDomains, listProjects };
package/dist/index.js ADDED
@@ -0,0 +1,414 @@
1
+ import { tool, jsonSchema } from 'ai';
2
+
3
+ // src/index.ts
4
+ var BASE_URL = "https://api.vercel.com";
5
+ function getApiKey() {
6
+ const token = process.env.VERCEL_TOKEN;
7
+ if (!token) {
8
+ throw new Error(
9
+ "VERCEL_TOKEN environment variable is required. Get your token from https://vercel.com/account/tokens"
10
+ );
11
+ }
12
+ return token;
13
+ }
14
+ async function apiRequest(method, path, body) {
15
+ const token = getApiKey();
16
+ const headers = {
17
+ Authorization: `Bearer ${token}`,
18
+ "Content-Type": "application/json"
19
+ };
20
+ const options = { method, headers };
21
+ if (body !== void 0) {
22
+ options.body = JSON.stringify(body);
23
+ }
24
+ const response = await fetch(`${BASE_URL}${path}`, options);
25
+ if (!response.ok) {
26
+ await handleApiError(response);
27
+ }
28
+ const text = await response.text();
29
+ if (!text) {
30
+ return {};
31
+ }
32
+ return JSON.parse(text);
33
+ }
34
+ async function handleApiError(response) {
35
+ let errorMessage;
36
+ try {
37
+ const errorData = await response.json();
38
+ errorMessage = errorData.error?.message || errorData.message || `HTTP ${response.status}`;
39
+ } catch {
40
+ errorMessage = `HTTP ${response.status}: ${response.statusText}`;
41
+ }
42
+ switch (response.status) {
43
+ case 400:
44
+ throw new Error(`Bad request: ${errorMessage}`);
45
+ case 401:
46
+ throw new Error("Authentication failed: Invalid Vercel token. Check VERCEL_TOKEN.");
47
+ case 403:
48
+ throw new Error(`Access forbidden: ${errorMessage}`);
49
+ case 404:
50
+ throw new Error(`Not found: ${errorMessage}`);
51
+ case 422:
52
+ throw new Error(`Validation error: ${errorMessage}`);
53
+ case 429:
54
+ throw new Error(`Rate limit exceeded: ${errorMessage}`);
55
+ default:
56
+ throw new Error(`Vercel API error (${response.status}): ${errorMessage}`);
57
+ }
58
+ }
59
+ function buildQueryString(params) {
60
+ const entries = Object.entries(params).filter(
61
+ ([, v]) => v !== void 0 && v !== null && v !== ""
62
+ );
63
+ if (entries.length === 0) return "";
64
+ return "?" + entries.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`).join("&");
65
+ }
66
+ var listDeployments = tool({
67
+ description: "List deployments for a project or team. Filter by state (BUILDING, READY, ERROR, CANCELED). Returns recent deployments with URLs and status.",
68
+ inputSchema: jsonSchema({
69
+ type: "object",
70
+ properties: {
71
+ projectId: {
72
+ type: "string",
73
+ description: "Filter by project ID. Omit to list all deployments."
74
+ },
75
+ teamId: {
76
+ type: "string",
77
+ description: "Team ID for team-scoped requests."
78
+ },
79
+ state: {
80
+ type: "string",
81
+ description: "Filter by deployment state: BUILDING, READY, ERROR, or CANCELED."
82
+ },
83
+ limit: {
84
+ type: "number",
85
+ description: "Number of deployments to return (max 100, default 20)."
86
+ }
87
+ },
88
+ additionalProperties: false
89
+ }),
90
+ async execute(input) {
91
+ const params = {};
92
+ if (input.projectId) params.projectId = input.projectId;
93
+ if (input.state) params.state = input.state;
94
+ if (input.limit) params.limit = input.limit;
95
+ if (input.teamId) params.teamId = input.teamId;
96
+ const qs = buildQueryString(params);
97
+ return apiRequest("GET", `/v6/deployments${qs}`);
98
+ }
99
+ });
100
+ var getDeployment = tool({
101
+ description: "Get detailed information about a specific deployment by ID or URL. Returns build status, logs, environment details, and configuration.",
102
+ inputSchema: jsonSchema({
103
+ type: "object",
104
+ properties: {
105
+ idOrUrl: {
106
+ type: "string",
107
+ description: 'Deployment ID or URL (e.g., "dpl_xyz" or "myproject-abc.vercel.app").'
108
+ },
109
+ teamId: {
110
+ type: "string",
111
+ description: "Team ID for team-scoped requests."
112
+ }
113
+ },
114
+ required: ["idOrUrl"],
115
+ additionalProperties: false
116
+ }),
117
+ async execute(input) {
118
+ const qs = input.teamId ? buildQueryString({ teamId: input.teamId }) : "";
119
+ return apiRequest("GET", `/v13/deployments/${input.idOrUrl}${qs}`);
120
+ }
121
+ });
122
+ var cancelDeployment = tool({
123
+ description: "Cancel a running deployment by ID. Only works for deployments in BUILDING or QUEUED state.",
124
+ inputSchema: jsonSchema({
125
+ type: "object",
126
+ properties: {
127
+ id: {
128
+ type: "string",
129
+ description: 'Deployment ID to cancel (e.g., "dpl_xyz").'
130
+ },
131
+ teamId: {
132
+ type: "string",
133
+ description: "Team ID for team-scoped requests."
134
+ }
135
+ },
136
+ required: ["id"],
137
+ additionalProperties: false
138
+ }),
139
+ async execute(input) {
140
+ const qs = input.teamId ? buildQueryString({ teamId: input.teamId }) : "";
141
+ return apiRequest("PATCH", `/v12/deployments/${input.id}/cancel${qs}`);
142
+ }
143
+ });
144
+ var listProjects = tool({
145
+ description: "List all projects in your account or team. Supports search by name and pagination.",
146
+ inputSchema: jsonSchema({
147
+ type: "object",
148
+ properties: {
149
+ teamId: {
150
+ type: "string",
151
+ description: "Team ID to list projects for a specific team."
152
+ },
153
+ limit: {
154
+ type: "number",
155
+ description: "Number of projects to return (max 100, default 20)."
156
+ },
157
+ search: {
158
+ type: "string",
159
+ description: "Search projects by name."
160
+ }
161
+ },
162
+ additionalProperties: false
163
+ }),
164
+ async execute(input) {
165
+ const params = {};
166
+ if (input.teamId) params.teamId = input.teamId;
167
+ if (input.limit) params.limit = input.limit;
168
+ if (input.search) params.search = input.search;
169
+ const qs = buildQueryString(params);
170
+ return apiRequest("GET", `/v9/projects${qs}`);
171
+ }
172
+ });
173
+ var getProject = tool({
174
+ description: "Get detailed information about a specific project by ID or name. Returns configuration, environment variables, domains, and deployment settings.",
175
+ inputSchema: jsonSchema({
176
+ type: "object",
177
+ properties: {
178
+ idOrName: {
179
+ type: "string",
180
+ description: 'Project ID or name (e.g., "prj_xyz" or "my-project").'
181
+ },
182
+ teamId: {
183
+ type: "string",
184
+ description: "Team ID for team-scoped requests."
185
+ }
186
+ },
187
+ required: ["idOrName"],
188
+ additionalProperties: false
189
+ }),
190
+ async execute(input) {
191
+ const qs = input.teamId ? buildQueryString({ teamId: input.teamId }) : "";
192
+ return apiRequest("GET", `/v9/projects/${input.idOrName}${qs}`);
193
+ }
194
+ });
195
+ var listDomains = tool({
196
+ description: "List all domains in your account or team. Returns domain names, verification status, and configuration.",
197
+ inputSchema: jsonSchema({
198
+ type: "object",
199
+ properties: {
200
+ teamId: {
201
+ type: "string",
202
+ description: "Team ID to list domains for a specific team."
203
+ },
204
+ limit: {
205
+ type: "number",
206
+ description: "Number of domains to return (max 100, default 20)."
207
+ }
208
+ },
209
+ additionalProperties: false
210
+ }),
211
+ async execute(input) {
212
+ const params = {};
213
+ if (input.teamId) params.teamId = input.teamId;
214
+ if (input.limit) params.limit = input.limit;
215
+ const qs = buildQueryString(params);
216
+ return apiRequest("GET", `/v5/domains${qs}`);
217
+ }
218
+ });
219
+ var getDomain = tool({
220
+ description: "Get detailed information about a specific domain by name. Returns DNS records, verification status, and SSL configuration.",
221
+ inputSchema: jsonSchema({
222
+ type: "object",
223
+ properties: {
224
+ name: {
225
+ type: "string",
226
+ description: 'Domain name (e.g., "example.com").'
227
+ },
228
+ teamId: {
229
+ type: "string",
230
+ description: "Team ID for team-scoped requests."
231
+ }
232
+ },
233
+ required: ["name"],
234
+ additionalProperties: false
235
+ }),
236
+ async execute(input) {
237
+ const qs = input.teamId ? buildQueryString({ teamId: input.teamId }) : "";
238
+ return apiRequest("GET", `/v5/domains/${input.name}${qs}`);
239
+ }
240
+ });
241
+ var listProjectDomains = tool({
242
+ description: "List all domains assigned to a specific project. Returns domain names and their configuration.",
243
+ inputSchema: jsonSchema({
244
+ type: "object",
245
+ properties: {
246
+ idOrName: {
247
+ type: "string",
248
+ description: 'Project ID or name (e.g., "prj_xyz" or "my-project").'
249
+ },
250
+ teamId: {
251
+ type: "string",
252
+ description: "Team ID for team-scoped requests."
253
+ },
254
+ limit: {
255
+ type: "number",
256
+ description: "Number of domains to return (max 100, default 20)."
257
+ }
258
+ },
259
+ required: ["idOrName"],
260
+ additionalProperties: false
261
+ }),
262
+ async execute(input) {
263
+ const params = {};
264
+ if (input.teamId) params.teamId = input.teamId;
265
+ if (input.limit) params.limit = input.limit;
266
+ const qs = buildQueryString(params);
267
+ return apiRequest(
268
+ "GET",
269
+ `/v9/projects/${input.idOrName}/domains${qs}`
270
+ );
271
+ }
272
+ });
273
+ var listEnvVars = tool({
274
+ description: "List all environment variables for a project. Returns variable names, types, targets, and values (decrypted for system env vars).",
275
+ inputSchema: jsonSchema({
276
+ type: "object",
277
+ properties: {
278
+ idOrName: {
279
+ type: "string",
280
+ description: 'Project ID or name (e.g., "prj_xyz" or "my-project").'
281
+ },
282
+ teamId: {
283
+ type: "string",
284
+ description: "Team ID for team-scoped requests."
285
+ }
286
+ },
287
+ required: ["idOrName"],
288
+ additionalProperties: false
289
+ }),
290
+ async execute(input) {
291
+ const qs = input.teamId ? buildQueryString({ teamId: input.teamId }) : "";
292
+ return apiRequest("GET", `/v9/projects/${input.idOrName}/env${qs}`);
293
+ }
294
+ });
295
+ var createEnvVar = tool({
296
+ description: "Create a new environment variable for a project. Specify key, value, and target environments (production, preview, development).",
297
+ inputSchema: jsonSchema({
298
+ type: "object",
299
+ properties: {
300
+ idOrName: {
301
+ type: "string",
302
+ description: 'Project ID or name (e.g., "prj_xyz" or "my-project").'
303
+ },
304
+ key: {
305
+ type: "string",
306
+ description: 'Environment variable name (e.g., "DATABASE_URL").'
307
+ },
308
+ value: {
309
+ type: "string",
310
+ description: "Environment variable value."
311
+ },
312
+ target: {
313
+ type: "array",
314
+ items: {
315
+ type: "string",
316
+ enum: ["production", "preview", "development"]
317
+ },
318
+ description: "Target environments for this variable (production, preview, development)."
319
+ },
320
+ type: {
321
+ type: "string",
322
+ enum: ["plain", "secret", "encrypted", "sensitive"],
323
+ description: "Variable type: plain, secret, encrypted, or sensitive (default: encrypted)."
324
+ },
325
+ teamId: {
326
+ type: "string",
327
+ description: "Team ID for team-scoped requests."
328
+ }
329
+ },
330
+ required: ["idOrName", "key", "value", "target"],
331
+ additionalProperties: false
332
+ }),
333
+ async execute(input) {
334
+ const { idOrName, teamId, ...body } = input;
335
+ const qs = teamId ? buildQueryString({ teamId }) : "";
336
+ return apiRequest(
337
+ "POST",
338
+ `/v10/projects/${idOrName}/env${qs}`,
339
+ body
340
+ );
341
+ }
342
+ });
343
+ var deleteEnvVar = tool({
344
+ description: "Delete an environment variable from a project by its ID. Use listEnvVars to get the envId.",
345
+ inputSchema: jsonSchema({
346
+ type: "object",
347
+ properties: {
348
+ idOrName: {
349
+ type: "string",
350
+ description: 'Project ID or name (e.g., "prj_xyz" or "my-project").'
351
+ },
352
+ envId: {
353
+ type: "string",
354
+ description: "Environment variable ID (from listEnvVars)."
355
+ },
356
+ teamId: {
357
+ type: "string",
358
+ description: "Team ID for team-scoped requests."
359
+ }
360
+ },
361
+ required: ["idOrName", "envId"],
362
+ additionalProperties: false
363
+ }),
364
+ async execute(input) {
365
+ const qs = input.teamId ? buildQueryString({ teamId: input.teamId }) : "";
366
+ return apiRequest(
367
+ "DELETE",
368
+ `/v9/projects/${input.idOrName}/env/${input.envId}${qs}`
369
+ );
370
+ }
371
+ });
372
+ var getDeploymentEvents = tool({
373
+ description: "Get real-time build logs and events for a deployment. Returns a stream of build steps, output, and errors.",
374
+ inputSchema: jsonSchema({
375
+ type: "object",
376
+ properties: {
377
+ idOrUrl: {
378
+ type: "string",
379
+ description: 'Deployment ID or URL (e.g., "dpl_xyz" or "myproject-abc.vercel.app").'
380
+ },
381
+ teamId: {
382
+ type: "string",
383
+ description: "Team ID for team-scoped requests."
384
+ }
385
+ },
386
+ required: ["idOrUrl"],
387
+ additionalProperties: false
388
+ }),
389
+ async execute(input) {
390
+ const qs = input.teamId ? buildQueryString({ teamId: input.teamId }) : "";
391
+ return apiRequest("GET", `/v3/deployments/${input.idOrUrl}/events${qs}`);
392
+ }
393
+ });
394
+ var index_default = {
395
+ // Deployments
396
+ listDeployments,
397
+ getDeployment,
398
+ cancelDeployment,
399
+ // Projects
400
+ listProjects,
401
+ getProject,
402
+ // Domains
403
+ listDomains,
404
+ getDomain,
405
+ listProjectDomains,
406
+ // Environment Variables
407
+ listEnvVars,
408
+ createEnvVar,
409
+ deleteEnvVar,
410
+ // Logs
411
+ getDeploymentEvents
412
+ };
413
+
414
+ export { cancelDeployment, createEnvVar, index_default as default, deleteEnvVar, getDeployment, getDeploymentEvents, getDomain, getProject, listDeployments, listDomains, listEnvVars, listProjectDomains, listProjects };
package/package.json ADDED
@@ -0,0 +1,102 @@
1
+ {
2
+ "name": "@tpmjs/tools-vercel",
3
+ "version": "0.1.0",
4
+ "description": "Vercel API tools for AI agents. Manage deployments, projects, domains, environment variables, and logs.",
5
+ "type": "module",
6
+ "keywords": [
7
+ "tpmjs",
8
+ "vercel",
9
+ "deployment",
10
+ "hosting",
11
+ "agent"
12
+ ],
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "default": "./dist/index.js"
17
+ }
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsup",
24
+ "dev": "tsup --watch",
25
+ "type-check": "tsc --noEmit",
26
+ "clean": "rm -rf dist .turbo"
27
+ },
28
+ "devDependencies": {
29
+ "@tpmjs/tsconfig": "workspace:*",
30
+ "tsup": "^8.5.1",
31
+ "typescript": "^5.9.3"
32
+ },
33
+ "dependencies": {
34
+ "ai": "6.0.49"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/tpmjs/tpmjs.git",
42
+ "directory": "packages/tools/official/vercel"
43
+ },
44
+ "homepage": "https://tpmjs.com",
45
+ "license": "MIT",
46
+ "tpmjs": {
47
+ "category": "ops",
48
+ "frameworks": [
49
+ "vercel-ai"
50
+ ],
51
+ "tools": [
52
+ {
53
+ "name": "listDeployments",
54
+ "description": "List deployments for a project or team with optional state filtering."
55
+ },
56
+ {
57
+ "name": "getDeployment",
58
+ "description": "Get details of a specific deployment by ID or URL."
59
+ },
60
+ {
61
+ "name": "cancelDeployment",
62
+ "description": "Cancel a deployment that is currently building."
63
+ },
64
+ {
65
+ "name": "listProjects",
66
+ "description": "List all projects in your Vercel account or team."
67
+ },
68
+ {
69
+ "name": "getProject",
70
+ "description": "Get details of a specific Vercel project by name or ID."
71
+ },
72
+ {
73
+ "name": "listDomains",
74
+ "description": "List all domains configured in your Vercel account."
75
+ },
76
+ {
77
+ "name": "getDomain",
78
+ "description": "Get details and configuration for a specific domain."
79
+ },
80
+ {
81
+ "name": "listProjectDomains",
82
+ "description": "List all domains assigned to a specific project."
83
+ },
84
+ {
85
+ "name": "listEnvVars",
86
+ "description": "List environment variables for a Vercel project."
87
+ },
88
+ {
89
+ "name": "createEnvVar",
90
+ "description": "Create a new environment variable on a Vercel project."
91
+ },
92
+ {
93
+ "name": "deleteEnvVar",
94
+ "description": "Delete an environment variable from a Vercel project."
95
+ },
96
+ {
97
+ "name": "getDeploymentEvents",
98
+ "description": "Get build logs and runtime events for a deployment."
99
+ }
100
+ ]
101
+ }
102
+ }