@mseep/supabase-mcp
Version:
MCP server for Supabase CRUD operations
126 lines • 4.39 kB
JavaScript
;
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