supabase-mcp.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  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. import { API_URL } from '@/lib/constants'
  6. export async function createSupabaseMCPClient({
  7. accessToken,
  8. projectId,
  9. }: {
  10. accessToken: string
  11. projectId: string
  12. }) {
  13. const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair()
  14. // Instantiate the MCP server and connect to its transport
  15. const apiUrl = API_URL?.replace('/platform', '')
  16. const server = createSupabaseMcpServer({
  17. platform: createSupabaseApiPlatform({
  18. accessToken,
  19. apiUrl,
  20. }),
  21. contentApiUrl: process.env.NEXT_PUBLIC_CONTENT_API_URL,
  22. projectId,
  23. readOnly: true,
  24. })
  25. await server.connect(serverTransport)
  26. // Create the MCP client and connect to its transport
  27. const client = await createMCPClient({
  28. name: 'supabase-studio',
  29. transport: clientTransport,
  30. })
  31. return client
  32. }