index.test.ts•1.71 kB
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamTransport } from '@supabase/mcp-utils';
import { describe, expect, test } from 'vitest';
import {
  ACCESS_TOKEN,
  API_URL,
  MCP_CLIENT_NAME,
  MCP_CLIENT_VERSION,
} from '../test/mocks.js';
import { createSupabaseMcpServer, version } from './index.js';
import { createSupabaseApiPlatform } from './platform/api-platform.js';
type SetupOptions = {
  accessToken?: string;
  projectId?: string;
  readOnly?: boolean;
  features?: string[];
};
async function setup(options: SetupOptions = {}) {
  const { accessToken = ACCESS_TOKEN, projectId, readOnly, features } = options;
  const clientTransport = new StreamTransport();
  const serverTransport = new StreamTransport();
  clientTransport.readable.pipeTo(serverTransport.writable);
  serverTransport.readable.pipeTo(clientTransport.writable);
  const client = new Client(
    {
      name: MCP_CLIENT_NAME,
      version: MCP_CLIENT_VERSION,
    },
    {
      capabilities: {},
    }
  );
  const platform = createSupabaseApiPlatform({
    apiUrl: API_URL,
    accessToken,
  });
  const server = createSupabaseMcpServer({
    platform,
    projectId,
    readOnly,
    features,
  });
  await server.connect(serverTransport);
  await client.connect(clientTransport);
  return { client, clientTransport, server, serverTransport };
}
describe('index', () => {
  test('index.ts exports a working server', async () => {
    const { client } = await setup();
    const { tools } = await client.listTools();
    expect(tools.length).toBeGreaterThan(0);
  });
  test('index.ts exports a version', () => {
    expect(version).toStrictEqual(expect.any(String));
  });
});