Skip to main content
Glama
MikelA92
by MikelA92
databaseHandlers.js3.71 kB
import { Validators } from '../../shared/utils/validators.js'; import { logger } from '../../shared/utils/logger.js'; /** * Handlers for database-related operations */ export class DatabaseHandlers { constructor(apiClient) { this.apiClient = apiClient; this.logger = logger.child('DatabaseHandlers'); } /** * Get a database by ID */ async getDatabase(databaseId) { Validators.validateDatabaseId(databaseId); this.logger.debug('Getting database', { databaseId }); const database = await this.apiClient.makeRequest(`/api/database/${databaseId}`); return { content: [ { type: 'text', text: `Database Information: ID: ${database.id} Name: ${database.name} Engine: ${database.engine} Description: ${database.description || 'No description'} Created: ${database.created_at} Updated: ${database.updated_at}`, }, ], }; } /** * List all databases */ async listDatabases() { this.logger.debug('Listing databases'); const response = await this.apiClient.makeRequest('/api/database/'); const databases = Array.isArray(response) ? response : response.data || []; return { content: [ { type: 'text', text: `Available Databases (${databases.length}): ${databases.map(db => `- ID: ${db.id} | Name: ${db.name} | Engine: ${db.engine}` ).join('\n')}`, }, ], }; } /** * Get database metadata */ async getDatabaseMetadata(databaseId) { Validators.validateDatabaseId(databaseId); this.logger.debug('Getting database metadata', { databaseId }); const metadata = await this.apiClient.makeRequest(`/api/database/${databaseId}/metadata`); const tables = metadata.tables?.map(t => ({ id: t.id, name: t.name, schema: t.schema, fieldCount: t.fields?.length || 0, })) || []; return { content: [ { type: 'text', text: `Database Metadata (ID: ${databaseId}): Database: ${metadata.name} Engine: ${metadata.engine} Total Tables: ${tables.length} Tables: ${tables.map(t => `- ID: ${t.id} | Schema: ${t.schema} | Name: ${t.name} | Fields: ${t.fieldCount}` ).join('\n')}`, }, ], }; } /** * List database tables */ async listDatabaseTables(databaseId) { Validators.validateDatabaseId(databaseId); this.logger.debug('Listing database tables', { databaseId }); // Use metadata endpoint as /tables endpoint doesn't exist const metadata = await this.apiClient.makeRequest(`/api/database/${databaseId}/metadata`); const tables = metadata.tables || []; return { content: [ { type: 'text', text: `Tables in Database ${databaseId}: ${tables.map(t => `- ID: ${t.id} | Schema: ${t.schema} | Name: ${t.name}` ).join('\n')}`, }, ], }; } /** * Get table metadata */ async getTableMetadata(tableId) { Validators.validateTableId(tableId); this.logger.debug('Getting table metadata', { tableId }); const table = await this.apiClient.makeRequest(`/api/table/${tableId}/query_metadata`); const fields = table.fields?.map(f => ({ id: f.id, name: f.name, type: f.base_type, description: f.description, })) || []; return { content: [ { type: 'text', text: `Table Metadata: ID: ${table.id} Name: ${table.name} Schema: ${table.schema} Database: ${table.db?.name} Total Fields: ${fields.length} Fields: ${fields.map(f => `- ${f.name} (${f.type})${f.description ? ` - ${f.description}` : ''}` ).join('\n')}`, }, ], }; } }

Implementation Reference

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/MikelA92/metabase-mcp-mab'

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