UNPKG

@hechtcarmel/vertica-mcp

Version:

MCP (Model Context Protocol) server for readonly Vertica database operations

73 lines 2.78 kB
import { z } from "zod"; import { VerticaService } from "../services/vertica-service.js"; import { getDatabaseConfig } from "../config/database.js"; export default class ListIndexesTool { name = "list_indexes"; description = "List indexes (projections) for a specific table in Vertica with column and uniqueness information"; inputSchema = { type: "object", properties: { tableName: { type: "string", description: "Name of the table to list indexes for", }, schemaName: { type: "string", description: "Schema name (optional, defaults to configured default schema)", }, }, required: ["tableName"], }; async execute(input) { const parsed = this.parseInput(input); let verticaService = null; try { const config = getDatabaseConfig(); verticaService = new VerticaService(config); const indexes = await verticaService.listIndexes(parsed.tableName, parsed.schemaName); return JSON.stringify({ success: true, table: parsed.tableName, schema: parsed.schemaName ?? config.defaultSchema ?? "public", indexCount: indexes.length, indexes: indexes.map((index) => ({ indexName: index.indexName, columnName: index.columnName, isUnique: index.isUnique, indexType: index.indexType, ordinalPosition: index.ordinalPosition, })), note: "In Vertica, indexes are implemented as projections which provide similar functionality", queriedAt: new Date().toISOString(), }, null, 2); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); return JSON.stringify({ success: false, error: errorMessage, tableName: parsed.tableName, schemaName: parsed.schemaName, queriedAt: new Date().toISOString(), }, null, 2); } finally { if (verticaService) { try { await verticaService.disconnect(); } catch (error) { console.warn("Warning during service cleanup:", error); } } } } parseInput(input) { const schema = z.object({ tableName: z.string(), schemaName: z.string().optional(), }); return schema.parse(input); } } //# sourceMappingURL=list-indexes.js.map