supabase-mcp.ts37 lines · main
| 1 | import { createMCPClient } from '@ai-sdk/mcp' |
| 2 | import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js' // .js required for esbuild ESM resolution |
| 3 | import { createSupabaseMcpServer } from '@supabase/mcp-server-supabase' |
| 4 | import { createSupabaseApiPlatform } from '@supabase/mcp-server-supabase/platform/api' |
| 5 | |
| 6 | import { API_URL } from '@/lib/constants' |
| 7 | |
| 8 | export async function createSupabaseMCPClient({ |
| 9 | accessToken, |
| 10 | projectId, |
| 11 | }: { |
| 12 | accessToken: string |
| 13 | projectId: string |
| 14 | }) { |
| 15 | const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair() |
| 16 | |
| 17 | // Instantiate the MCP server and connect to its transport |
| 18 | const apiUrl = API_URL?.replace('/platform', '') |
| 19 | const server = createSupabaseMcpServer({ |
| 20 | platform: createSupabaseApiPlatform({ |
| 21 | accessToken, |
| 22 | apiUrl, |
| 23 | }), |
| 24 | contentApiUrl: process.env.NEXT_PUBLIC_CONTENT_API_URL, |
| 25 | projectId, |
| 26 | readOnly: true, |
| 27 | }) |
| 28 | await server.connect(serverTransport) |
| 29 | |
| 30 | // Create the MCP client and connect to its transport |
| 31 | const client = await createMCPClient({ |
| 32 | name: 'supabase-studio', |
| 33 | transport: clientTransport, |
| 34 | }) |
| 35 | |
| 36 | return client |
| 37 | } |