diff --git a/packages/mcp-server-supabase/src/pg-meta/index.ts b/packages/mcp-server-supabase/src/pg-meta/index.ts index fb7eab5..786d563 100644 --- a/packages/mcp-server-supabase/src/pg-meta/index.ts +++ b/packages/mcp-server-supabase/src/pg-meta/index.ts @@ -3,6 +3,12 @@ import columnsSql from './columns.sql'; import extensionsSql from './extensions.sql'; import tablesSql from './tables.sql'; +export const DEFAULT_SYSTEM_SCHEMAS = [ + 'information_schema', + 'pg_catalog', + 'pg_toast', +]; + /** * Generates the SQL query to list tables in the database. */ @@ -19,6 +25,8 @@ export function listTablesSql(schemas: string[] = []) { if (schemas.length > 0) { sql += ` where schema in (${schemas.map((s) => `'${s}'`).join(',')})`; + } else { + sql += ` where schema not in (${DEFAULT_SYSTEM_SCHEMAS.map((s) => `'${s}'`).join(',')})`; } return sql; diff --git a/packages/mcp-server-supabase/src/server.test.ts b/packages/mcp-server-supabase/src/server.test.ts index f456f38..8deff74 100644 --- a/packages/mcp-server-supabase/src/server.test.ts +++ b/packages/mcp-server-supabase/src/server.test.ts @@ -705,6 +705,46 @@ describe('tools', () => { ); }); + test('listing all tables excludes system schemas', async () => { + const { callTool } = await setup(); + + const org = await createOrganization({ + name: 'My Org', + plan: 'free', + allowed_release_channels: ['ga'], + }); + + const project = await createProject({ + name: 'Project 1', + region: 'us-east-1', + organization_id: org.id, + }); + project.status = 'ACTIVE_HEALTHY'; + + const result = await callTool({ + name: 'list_tables', + arguments: { + project_id: project.id, + }, + }); + + expect(result).not.toEqual( + expect.arrayContaining([ + expect.objectContaining({ schema: 'pg_catalog' }), + ]) + ); + + expect(result).not.toEqual( + expect.arrayContaining([ + expect.objectContaining({ schema: 'information_schema' }), + ]) + ); + + expect(result).not.toEqual( + expect.arrayContaining([expect.objectContaining({ schema: 'pg_toast' })]) + ); + }); + test('list extensions', async () => { const { callTool } = await setup();