UNPKG

@mseep/supabase-mcp

Version:

MCP server for Supabase CRUD operations

126 lines 4.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mcpService = void 0; const supabase_js_1 = require("./supabase.js"); class MCPService { /** * Handle tool call requests from Claude */ async handleToolCall(toolCall) { const { name, parameters } = toolCall; try { switch (name) { case 'queryDatabase': return await this.handleQueryDatabase(parameters); case 'insertData': return await this.handleInsertData(parameters); case 'updateData': return await this.handleUpdateData(parameters); case 'deleteData': return await this.handleDeleteData(parameters); case 'listTables': return await this.handleListTables(); default: return { error: `Unknown tool: ${name}` }; } } catch (error) { return { error: `Error executing tool ${name}: ${error.message}` }; } } /** * Handle database query operation */ async handleQueryDatabase(params) { const { table, query = {}, select = '*' } = params; if (!table) { return { error: 'Table name is required' }; } const result = await supabase_js_1.supabaseService.queryData(table, query, select); if (result.error) { return { error: `Database query error: ${result.error.message || JSON.stringify(result.error)}` }; } return { content: result.data }; } /** * Handle database insert operation */ async handleInsertData(params) { const { table, data } = params; if (!table) { return { error: 'Table name is required' }; } if (!data || (Array.isArray(data) && data.length === 0)) { return { error: 'Data is required for insert operation' }; } const result = await supabase_js_1.supabaseService.insertData(table, data); if (result.error) { return { error: `Database insert error: ${result.error.message || JSON.stringify(result.error)}` }; } return { content: result.data }; } /** * Handle database update operation */ async handleUpdateData(params) { const { table, data, query } = params; if (!table) { return { error: 'Table name is required' }; } if (!data || Object.keys(data).length === 0) { return { error: 'Data is required for update operation' }; } if (!query || Object.keys(query).length === 0) { return { error: 'Query is required for update operation' }; } const result = await supabase_js_1.supabaseService.updateData(table, data, query); if (result.error) { return { error: `Database update error: ${result.error.message || JSON.stringify(result.error)}` }; } return { content: result.data }; } /** * Handle database delete operation */ async handleDeleteData(params) { const { table, query } = params; if (!table) { return { error: 'Table name is required' }; } if (!query || Object.keys(query).length === 0) { return { error: 'Query is required for delete operation' }; } const result = await supabase_js_1.supabaseService.deleteData(table, query); if (result.error) { return { error: `Database delete error: ${result.error.message || JSON.stringify(result.error)}` }; } return { content: result.data }; } /** * Handle listing database tables */ async handleListTables() { const result = await supabase_js_1.supabaseService.listTables(); if (result.error) { return { error: `Error fetching tables: ${result.error.message || JSON.stringify(result.error)}` }; } return { content: result.tables }; } } // Export a singleton instance exports.mcpService = new MCPService(); //# sourceMappingURL=mcp.js.map