#!/usr/bin/env node
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import pg from "pg";
import * as dotenv from "dotenv";
import { registerTools } from "./tools/index.js";
dotenv.config();
const { Pool } = pg;
// Configuración de la conexión PostgreSQL
const pool = new Pool({
host: process.env.PGHOST || "localhost",
port: parseInt(process.env.PGPORT || "5432"),
database: process.env.PGDATABASE || "",
user: process.env.PGUSER,
password: process.env.PGPASSWORD,
max: 10,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
ssl: process.env.PGSSLMODE === "disable" ? false : { rejectUnauthorized: false },
});
const DEFAULT_SCHEMA = process.env.PGSCHEMA || "public";
// Crear el servidor MCP
const server = new McpServer(
{
name: "postgres-mcp",
version: "1.0.0",
},
{
capabilities: {
tools: {},
},
}
);
// Registrar todas las herramientas
registerTools(server, {
pool,
defaultSchema: DEFAULT_SCHEMA,
});
// Iniciar el servidor
async function main() {
try {
// Probar conexión
await pool.query("SELECT 1");
console.error("Conexión a PostgreSQL establecida correctamente");
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("Servidor MCP postgres-mcp iniciado");
} catch (error) {
console.error("Error al iniciar el servidor:", error);
process.exit(1);
}
}
// Manejar cierre graceful
process.on("SIGINT", async () => {
console.error("Cerrando servidor...");
await pool.end();
process.exit(0);
});
main();