Vercel MCP Server
by Quegenx
- vercel-mcp-server
- src
- components
import { z } from "zod";
import { handleResponse } from "../utils/response.js";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { BASE_URL, DEFAULT_ACCESS_TOKEN } from "../config/constants.js";
// Common schemas
const EdgeConfigItemSchema = z.object({
key: z.string(),
value: z.any(),
description: z.string().optional()
});
const EdgeConfigTokenSchema = z.object({
token: z.string(),
label: z.string(),
id: z.string(),
edgeConfigId: z.string(),
createdAt: z.number()
});
const EdgeConfigSchema = z.object({
createdAt: z.number(),
updatedAt: z.number(),
id: z.string(),
slug: z.string(),
ownerId: z.string(),
digest: z.string(),
transfer: z.object({
fromAccountId: z.string(),
startedAt: z.number(),
doneAt: z.null()
}).optional(),
schema: z.record(z.any()),
purpose: z.object({
type: z.literal("flags"),
projectId: z.string()
}).optional(),
sizeInBytes: z.number(),
itemCount: z.number()
});
export function registerEdgeConfigTools(server: McpServer) {
// Create Edge Config
server.tool(
"create_edge_config",
"Create a new Edge Config",
{
slug: z.string().max(64).regex(/^[\w-]+$/).describe("Edge Config slug"),
items: z.record(z.any()).optional().describe("Initial items")
},
async (body) => {
const response = await fetch(`${BASE_URL}/v1/edge-config`, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
body: JSON.stringify(body),
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Edge Config created:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
// Create Edge Config Token
server.tool(
"create_edge_config_token",
"Create a new Edge Config Token",
{
edgeConfigId: z.string().describe("Edge Config ID"),
label: z.string().max(52).describe("Token label")
},
async ({ edgeConfigId, label }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}/token`, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
body: JSON.stringify({ label }),
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Token created:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
// Get Edge Configs
server.tool(
"list_edge_configs",
"List all Edge Configs",
{},
async () => {
const response = await fetch(`${BASE_URL}/v1/edge-config`, {
headers: {
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Edge Configs:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
// Get Edge Config
server.tool(
"get_edge_config",
"Get an Edge Config",
{
edgeConfigId: z.string().describe("Edge Config ID")
},
async ({ edgeConfigId }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}`, {
headers: {
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Edge Config details:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
// Update Edge Config
server.tool(
"update_edge_config",
"Update an Edge Config",
{
edgeConfigId: z.string().describe("Edge Config ID"),
slug: z.string().max(64).regex(/^[\w-]+$/).describe("New slug")
},
async ({ edgeConfigId, slug }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}`, {
method: "PUT",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
body: JSON.stringify({ slug }),
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Edge Config updated:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
// Delete Edge Config
server.tool(
"delete_edge_config",
"Delete an Edge Config",
{
edgeConfigId: z.string().describe("Edge Config ID")
},
async ({ edgeConfigId }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}`, {
method: "DELETE",
headers: {
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
});
await handleResponse(response);
return {
content: [{ type: "text", text: "Edge Config deleted successfully" }],
};
}
);
// Get Edge Config Items
server.tool(
"list_edge_config_items",
"List Edge Config Items",
{
edgeConfigId: z.string().describe("Edge Config ID")
},
async ({ edgeConfigId }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}/items`, {
headers: {
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Edge Config items:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
// Get Edge Config Item
server.tool(
"get_edge_config_item",
"Get an Edge Config Item",
{
edgeConfigId: z.string().describe("Edge Config ID"),
itemKey: z.string().describe("Item key")
},
async ({ edgeConfigId, itemKey }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}/item/${itemKey}`, {
headers: {
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Item details:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
// Update Edge Config Items
server.tool(
"update_edge_config_items",
"Update Edge Config Items",
{
edgeConfigId: z.string().describe("Edge Config ID"),
items: z.array(z.object({
operation: z.enum(["upsert", "remove"]),
key: z.string(),
value: z.any().optional(),
description: z.string().optional()
})).describe("Items to update"),
definition: z.any().optional().describe("Schema definition")
},
async ({ edgeConfigId, ...body }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}/items`, {
method: "PATCH",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
body: JSON.stringify(body),
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Items updated:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
// Get Edge Config Schema
server.tool(
"get_edge_config_schema",
"Get Edge Config Schema",
{
edgeConfigId: z.string().describe("Edge Config ID")
},
async ({ edgeConfigId }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}/schema`, {
headers: {
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Schema:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
// Update Edge Config Schema
server.tool(
"update_edge_config_schema",
"Update Edge Config Schema",
{
edgeConfigId: z.string().describe("Edge Config ID"),
definition: z.any().describe("Schema definition")
},
async ({ edgeConfigId, definition }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}/schema`, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
body: JSON.stringify({ definition }),
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Schema updated:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
// Delete Edge Config Schema
server.tool(
"delete_edge_config_schema",
"Delete Edge Config Schema",
{
edgeConfigId: z.string().describe("Edge Config ID")
},
async ({ edgeConfigId }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}/schema`, {
method: "DELETE",
headers: {
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
});
await handleResponse(response);
return {
content: [{ type: "text", text: "Schema deleted successfully" }],
};
}
);
// Get Edge Config Tokens
server.tool(
"list_edge_config_tokens",
"List Edge Config Tokens",
{
edgeConfigId: z.string().describe("Edge Config ID")
},
async ({ edgeConfigId }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}/tokens`, {
headers: {
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Tokens:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
// Get Edge Config Token
server.tool(
"get_edge_config_token",
"Get Edge Config Token",
{
edgeConfigId: z.string().describe("Edge Config ID"),
token: z.string().describe("Token value")
},
async ({ edgeConfigId, token }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}/token/${token}`, {
headers: {
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Token details:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
// Delete Edge Config Tokens
server.tool(
"delete_edge_config_tokens",
"Delete Edge Config Tokens",
{
edgeConfigId: z.string().describe("Edge Config ID"),
tokens: z.array(z.string()).describe("Tokens to delete")
},
async ({ edgeConfigId, tokens }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}/tokens`, {
method: "DELETE",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
body: JSON.stringify({ tokens }),
});
await handleResponse(response);
return {
content: [{ type: "text", text: "Tokens deleted successfully" }],
};
}
);
// Get Edge Config Backups
server.tool(
"list_edge_config_backups",
"List Edge Config Backups",
{
edgeConfigId: z.string().describe("Edge Config ID"),
limit: z.number().min(0).max(50).optional().describe("Number of backups to return"),
next: z.string().optional().describe("Next page token")
},
async ({ edgeConfigId, ...params }) => {
const queryParams = new URLSearchParams();
if (params.limit) queryParams.set("limit", params.limit.toString());
if (params.next) queryParams.set("next", params.next);
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}/backups?${queryParams}`, {
headers: {
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Backups:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
// Get Edge Config Backup
server.tool(
"get_edge_config_backup",
"Get Edge Config Backup",
{
edgeConfigId: z.string().describe("Edge Config ID"),
backupId: z.string().describe("Backup version ID")
},
async ({ edgeConfigId, backupId }) => {
const response = await fetch(`${BASE_URL}/v1/edge-config/${edgeConfigId}/backups/${backupId}`, {
headers: {
Authorization: `Bearer ${DEFAULT_ACCESS_TOKEN}`,
},
});
const data = await handleResponse(response);
return {
content: [{ type: "text", text: `Backup details:\n${JSON.stringify(data, null, 2)}` }],
};
}
);
}