Skip to main content
Glama
srthkdev

DBeaver MCP Server

by srthkdev

list_tables

Retrieve all tables from a specified database connection using DBeaver, with options to filter by schema and include views.

Instructions

List all tables in a database

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
connectionIdYesThe ID or name of the DBeaver connection
includeViewsNoInclude views in the results
schemaNoSpecific schema to list tables from (optional)

Implementation Reference

  • MCP tool handler for list_tables: validates connectionId, fetches connection, delegates to DBeaverClient.listTables, formats response as JSON.
    private async handleListTables(args: { connectionId: string; schema?: string; includeViews?: boolean }) { const connectionId = sanitizeConnectionId(args.connectionId); const connection = await this.configParser.getConnection(connectionId); if (!connection) { throw new McpError(ErrorCode.InvalidParams, `Connection not found: ${connectionId}`); } const tables = await this.dbeaverClient.listTables( connection, args.schema, args.includeViews || false ); return { content: [{ type: 'text' as const, text: JSON.stringify(tables, null, 2), }], }; }
  • Input schema definition and tool metadata registration for the list_tables tool in ListToolsRequestSchema response.
    name: 'list_tables', description: 'List all tables in a database', inputSchema: { type: 'object', properties: { connectionId: { type: 'string', description: 'The ID or name of the DBeaver connection', }, schema: { type: 'string', description: 'Specific schema to list tables from (optional)', }, includeViews: { type: 'boolean', description: 'Include views in the results', default: false } }, required: ['connectionId'], }, },
  • Core listTables method in DBeaverClient: builds driver-specific query, executes it, parses results into table objects. Called by MCP handler.
    async listTables(connection: DBeaverConnection, schema?: string, includeViews: boolean = false): Promise<any[]> { try { const query = buildListTablesQuery(connection.driver, schema, includeViews); const result = await this.executeQuery(connection, query); // Convert result to table objects return result.rows.map(row => { const tableObj: any = {}; result.columns.forEach((col, idx) => { tableObj[col] = row[idx]; }); return tableObj; }); } catch (error) { if (this.debug) { console.error(`Failed to list tables: ${error}`); } // Return empty array instead of crashing return []; } }
  • Helper function to generate database-driver-specific SQL queries for listing tables and views, used by DBeaverClient.listTables.
    export function buildListTablesQuery(driver: string, schema?: string, includeViews: boolean = false): string { const driverLower = driver.toLowerCase(); if (driverLower.includes('postgresql') || driverLower.includes('postgres')) { let query = ` SELECT table_name, table_type, table_schema FROM information_schema.tables WHERE table_schema NOT IN ('information_schema', 'pg_catalog') `; if (schema) { query += ` AND table_schema = '${schema}'`; } if (!includeViews) { query += ` AND table_type = 'BASE TABLE'`; } query += ` ORDER BY table_schema, table_name;`; return query; } else if (driverLower.includes('mysql')) { let query = ` SELECT TABLE_NAME as table_name, TABLE_TYPE as table_type, TABLE_SCHEMA as table_schema FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys') `; if (schema) { query += ` AND TABLE_SCHEMA = '${schema}'`; } if (!includeViews) { query += ` AND TABLE_TYPE = 'BASE TABLE'`; } query += ` ORDER BY TABLE_SCHEMA, TABLE_NAME;`; return query; } else if (driverLower.includes('sqlite')) { let query = ` SELECT name as table_name, type as table_type FROM sqlite_master WHERE type IN ('table'${includeViews ? ", 'view'" : ''}) AND name NOT LIKE 'sqlite_%' ORDER BY name; `; return query; } else if (driverLower.includes('oracle')) { let query = ` SELECT table_name, 'TABLE' as table_type, owner as table_schema FROM all_tables `; if (schema) { query += ` WHERE owner = UPPER('${schema}')`; } if (includeViews) { query += ` UNION ALL SELECT view_name as table_name, 'VIEW' as table_type, owner as table_schema FROM all_views `; if (schema) { query += ` WHERE owner = UPPER('${schema}')`; } } query += ` ORDER BY table_name;`; return query; } else { // Generic fallback let query = ` SELECT table_name, table_type, table_schema FROM information_schema.tables `; if (schema) { query += ` WHERE table_schema = '${schema}'`; } if (!includeViews) { query += `${schema ? ' AND' : ' WHERE'} table_type = 'BASE TABLE'`; } query += ` ORDER BY table_schema, table_name;`; return query; } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/srthkdev/dbeaver-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server