list_extensions.ts•1.36 kB
import * as pg from "pg";
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
export interface ToolProps {
pool: pg.Pool;
}
export function ListExtensions(server: McpServer, props: ToolProps) {
server.tool(
"list_extensions",
"List all PostgreSQL extensions installed in the database",
{},
async () => {
if (!props.pool) {
throw new Error("Database pool not initialized");
}
const client = await props.pool.connect();
try {
const query = `
SELECT
extname as extension_name,
extversion as version,
nspname as schema_name,
extrelocatable as relocatable,
extconfig as config_tables,
extcondition as config_conditions
FROM pg_extension e
LEFT JOIN pg_namespace n ON n.oid = e.extnamespace
ORDER BY extname;
`;
const result = await client.query(query);
return {
content: [
{
type: "text",
text: JSON.stringify(
{
extensions: result.rows,
count: result.rows.length,
},
null,
2,
),
},
],
};
} catch (error) {
throw new Error(
`Failed to list extensions: ${error instanceof Error ? error.message : "Unknown error"}`,
);
} finally {
client.release();
}
},
);
}