| import { Server } from "@modelcontextprotocol/sdk/server/index.js"; |
| import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; |
| import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js"; |
| import { getSupabaseClient } from './supabase'; |
| import * as tools from './tools'; |
|
|
| const server = new Server({ |
| name: "supabase-mcp", |
| version: "1.0.0", |
| }, { |
| capabilities: { |
| tools: {}, |
| }, |
| }); |
|
|
| server.setRequestHandler(ListToolsRequestSchema, async () => ({ |
| tools: [ |
| { |
| name: "list_tables", |
| description: "List all tables in the public schema of your Supabase database", |
| inputSchema: { type: "object", properties: {} } |
| }, |
| { |
| name: "insert_record", |
| description: "Insert a new record into a specific table", |
| inputSchema: { |
| type: "object", |
| properties: { |
| table: { type: "string" }, |
| record: { type: "object" } |
| }, |
| required: ["table", "record"] |
| } |
| } |
| ] |
| })); |
|
|
| server.setRequestHandler(CallToolRequestSchema, async (request) => { |
| |
| const url = process.env.SUPABASE_URL || ""; |
| const key = process.env.SUPABASE_KEY || ""; |
| const client = getSupabaseClient(url, key); |
|
|
| switch (request.params.name) { |
| case "list_tables": |
| return { content: [{ type: "text", text: JSON.stringify(await tools.listTables(client)) }] }; |
| case "insert_record": |
| const { table, record } = request.params.arguments as any; |
| return { content: [{ type: "text", text: JSON.stringify(await tools.insertRecord(client, table, record)) }] }; |
| default: |
| throw new Error("Tool not found"); |
| } |
| }); |
|
|
| const transport = new StdioServerTransport(); |
| await server.connect(transport); |
|
|