Files
supabase/apps/studio/lib/ai/supabase-mcp.ts
T

42 lines
1.2 KiB
TypeScript

import { createMCPClient } from '@ai-sdk/mcp'
import { createSupabaseMcpServer } from '@supabase/mcp-server-supabase'
import { createSupabaseApiPlatform } from '@supabase/mcp-server-supabase/platform/api'
import { StreamTransport } from '@supabase/mcp-utils'
import { API_URL } from '@/lib/constants'
export async function createSupabaseMCPClient({
accessToken,
projectId,
}: {
accessToken: string
projectId: string
}) {
// Create an in-memory transport pair
const clientTransport = new StreamTransport()
const serverTransport = new StreamTransport()
clientTransport.readable.pipeTo(serverTransport.writable)
serverTransport.readable.pipeTo(clientTransport.writable)
// Instantiate the MCP server and connect to its transport
const apiUrl = API_URL?.replace('/platform', '')
const server = createSupabaseMcpServer({
platform: createSupabaseApiPlatform({
accessToken,
apiUrl,
}),
contentApiUrl: process.env.NEXT_PUBLIC_CONTENT_API_URL,
projectId,
readOnly: true,
})
await server.connect(serverTransport)
// Create the MCP client and connect to its transport
const client = await createMCPClient({
name: 'supabase-studio',
transport: clientTransport,
})
return client
}