UNPKG

@hechtcarmel/vertica-mcp

Version:

MCP server for Vertica database operations with configurable readonly mode

69 lines 2.55 kB
import { z } from "zod"; import { VerticaService } from "../services/vertica-service.js"; import { getDatabaseConfig } from "../config/database.js"; import { safeJsonStringify } from "../utils/response-formatter.js"; import { validateSchemaName } from "../utils/table-helpers.js"; export default class ListTablesTool { name = "list_tables"; description = "List all tables in a schema with metadata"; inputSchema = { type: "object", properties: { schemaName: { type: "string", description: "Schema name (optional, defaults to configured default schema)", }, }, }; async execute(input) { const parsed = this.parseInput(input); let verticaService = null; try { if (parsed.schemaName) { validateSchemaName(parsed.schemaName); } const config = getDatabaseConfig(); verticaService = new VerticaService(config); const tables = await verticaService.listTables(parsed.schemaName); return safeJsonStringify({ success: true, schema: parsed.schemaName || config.defaultSchema || "public", tableCount: tables.length, tables: tables.map((table) => ({ schemaName: table.schemaName, tableName: table.tableName, owner: table.owner, comment: table.comment, rowCount: table.rowCount, })), queriedAt: new Date().toISOString(), }, 2); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); return safeJsonStringify({ success: false, error: errorMessage, schemaName: parsed.schemaName, queriedAt: new Date().toISOString(), }, 2); } finally { if (verticaService) { try { await verticaService.disconnect(); } catch (error) { console.error("Warning during service cleanup:", error instanceof Error ? error.message : String(error)); } } } } parseInput(input) { const schema = z.object({ schemaName: z.string().optional(), }); return schema.parse(input); } } //# sourceMappingURL=list-tables.js.map