import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { ListToolsRequestSchema, CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";
export function createD1Server(options) {
const { client } = options;
const server = new Server({
name: "cloudflare-d1-mcp",
version: "1.0.0",
}, {
capabilities: {
tools: {},
},
});
// Register the tools/list handler
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "d1_query",
description: "Run a SQL query against the configured Cloudflare D1 database.",
inputSchema: {
type: "object",
properties: {
sql: {
type: "string",
description: "The SQL statement to execute."
},
bindings: {
type: "array",
description: "Optional positional bindings for the SQL statement.",
items: {
type: ["string", "number", "boolean", "null"]
}
}
},
required: ["sql"]
}
},
{
name: "d1_list_tables",
description: "List tables available in the Cloudflare D1 database.",
inputSchema: {
type: "object",
properties: {},
additionalProperties: false
}
}
]
};
});
// Register the tools/call handler
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
try {
if (name === "d1_query") {
const { sql, bindings } = args;
const result = await client.executeQuery(sql, bindings);
return {
content: [
{
type: "text",
text: JSON.stringify(result, null, 2)
}
]
};
}
else if (name === "d1_list_tables") {
const tables = await client.listTables();
return {
content: [
{
type: "text",
text: JSON.stringify(tables, null, 2)
}
]
};
}
else {
throw new Error(`Unknown tool: ${name}`);
}
}
catch (error) {
return {
content: [
{
type: "text",
text: `Error: ${error instanceof Error ? error.message : String(error)}`
}
],
isError: true
};
}
});
return {
server,
async start() {
// Use the proper stdio transport from MCP SDK
const transport = new StdioServerTransport();
await server.connect(transport);
console.error('Cloudflare D1 MCP server started');
}
};
}
//# sourceMappingURL=server.js.map