Skip to main content
Glama
llm-graph

FastPostgresMCP

by llm-graph

FastPostgresMCP 🐘⚡️ (Servidor MCP multi-DB con todas las funciones)

Este proyecto implementa un servidor de Protocolo de Contexto de Modelo (MCP) ultrarrápido, seguro en cuanto a tipos y con todas las funciones, diseñado para que los agentes de IA (como Cursor, Claude Desktop) interactúen con múltiples bases de datos PostgreSQL, lo que incluye el listado de tablas y la inspección de esquemas.

Está construido con Bun, TypeScript, postgres y aprovecha las características avanzadas del marco fastmcp para construir servidores MCP robustos.

Licencia: MIT Desarrollado por fastmcp Construido con Bun Utiliza postgres Mecanografiado Repositorio de GitHub Paquete NPM

Propósito: Un servidor MCP para agentes de IA

Esta no es una biblioteca que se pueda importar a su código. Es una aplicación de servidor independiente . Se ejecuta como un proceso y los clientes MCP (como los agentes de IA) se comunican con ella mediante el Protocolo de Contexto de Modelo basado en JSON (v2.0), generalmente a través de una conexión stdio administrada por la aplicación cliente (p. ej., Cursor).

Related MCP server: Postgres MCP Pro

Solución de problemas y desarrollo

Uso de la CLI para realizar pruebas

El paquete incluye un comando CLI integrado para probar el servidor MCP directamente:

# From the project repository:
bun run cli

# This will start an interactive MCP CLI session where you can:
# - Call any of the PostgreSQL tools (query_tool, execute_tool, etc.)
# - View server capabilities
# - Test queries against your configured databases

Pruebas con el inspector MCP integrado

También puede utilizar el Inspector MCP para probar y depurar visualmente:

# From the project repository:
bun run inspect

Problemas comunes

Si ve este error al ejecutar bunx postgres-mcp :

FastPostgresMCP started
[warning] FastMCP could not infer client capabilities

Seguido de mensajes de ping, significa:

  1. El servidor MCP se inició correctamente

  2. El cliente se conectó exitosamente

  3. Pero el cliente solo envía solicitudes de ping y no negocia adecuadamente las capacidades.

Esto suele indicar que necesitas usar un cliente MCP adecuado. Prueba:

  • Uso de bun run cli para probar con la CLI de MCP

  • Configuración del servidor MCP en Cursor o Claude Desktop como se describe en la sección Instalación

Si está desarrollando un cliente MCP personalizado, asegúrese de que implemente correctamente el protocolo MCP, incluida la negociación de capacidades.

✨ Características principales

  • 🚀 Ultrarrápido: Creado con Bun y fastmcp .

  • 🔒 Type-Safe: TypeScript de extremo a extremo con validación de esquema Zod.

  • 🐘 Compatibilidad con múltiples bases de datos: conéctese y administre interacciones entre varias instancias de PostgreSQL definidas en .env .

  • 🛡️ Seguro por diseño: las consultas parametrizadas a través de postgres evitan la inyección de SQL.

  • 🔑 Autenticación opcional: conexiones seguras basadas en red (SSE/HTTP) mediante validación de clave API (gancho authenticate de fastmcp ).

  • 📄 Esquema de base de datos a través de recursos MCP:

    • Lista de tablas: obtenga una lista de tablas en una base de datos a través de db://{dbAlias}/schema/tables .

    • Inspeccionar esquema de tabla: obtenga información detallada de la columna para una tabla específica a través de db://{dbAlias}/schema/{tableName} .

  • 💬 Interacción de herramientas mejorada:

    • Registro en la herramienta: las herramientas envían registros detallados al cliente (contexto log ).

    • Informes de progreso: las operaciones de larga duración informan del progreso (contexto reportProgress ).

  • 🧠 Consciente de la sesión: acceder a la información de la sesión dentro del contexto de ejecución de la herramienta (contexto session ).

  • 📡 Impulsado por eventos: utiliza server.on y session.on para el manejo de eventos de conexión/sesión.

  • 🔧 Experiencia de desarrollador moderna (DX): configuración clara, API intuitiva, pruebas fáciles con herramientas fastmcp .

Qué está incluido (funciones de fastmcp aprovechadas)

  • Núcleo del servidor FastMCP

  • server.addTool (para query_tool , execute_tool , schema_tool y transaction_tool )

  • server.addResourceTemplate (para enumerar tablas e inspeccionar esquemas de tablas)

  • server.start (con foco stdio , adaptable para sse / http )

  • Opcional: Hook authenticate (para validación de clave API)

  • context de ejecución de la herramienta ( log , reportProgress , session )

  • Zod para la validación del esquema de parámetros

  • server.on (para registro de conexión)

  • (Potencialmente) session.on para lógica específica de sesión

📋 Requisitos previos

  • Bun (se recomienda v1.0 o posterior): instalado y en PATH.

  • Bases de datos PostgreSQL: Credenciales de acceso y conectividad. El usuario necesita permisos para consultar information_schema .

⚙️ Instalación

Opción 1: Paquete NPM

# Install globally
npm install -g postgres-mcp

# Or install locally in your project
npm install postgres-mcp

El paquete npm está disponible en https://www.npmjs.com/package/postgres-mcp

Opción 2: Clonar repositorio

  1. Clonar el repositorio:

    # Replace with your actual repository URL
    git clone https://github.com/llm-graph/postgres-mcp.git
    cd postgres-mcp
  2. Instalar dependencias:

    bun install

🔑 Configuración (Multi-Base de Datos y Autenticación Opcional)

Configurar a través de variables de entorno, cargadas desde archivos .env apropiados.

  1. Crear archivos de entorno:

    • Para producción: cp .env.example .env

    • Para desarrollo: cp .env.development.example .env.development

  2. Orden de carga de archivos de entorno: El servidor carga las variables de entorno de los archivos en el siguiente orden de prioridad:

    • .env.<NODE_ENV> (por ejemplo, .env.development , .env.production , .env.staging )

    • .env.local (para anulaciones locales, no controladas por versiones)

    • .env (opción predeterminada) Esto permite diferentes configuraciones para diferentes entornos.

  3. Edite los archivos de entorno para definir las conexiones de la base de datos y la autenticación:

    • DB_ALIASES : lista separada por comas de alias de base de datos únicos

    • DEFAULT_DB_ALIAS : alias predeterminado si se omite 'dbAlias' en las llamadas a herramientas

    • Detalles de conexión de base de datos para cada alias (por ejemplo, DB_MAIN_HOST , DB_REPORTING_HOST )

    • Autenticación de clave API opcional ( ENABLE_AUTH , MCP_API_KEY )

# Example .env file - Key Variables

# REQUIRED: Comma-separated list of unique DB aliases
DB_ALIASES=main,reporting

# REQUIRED: Default alias if 'dbAlias' is omitted in tool calls
DEFAULT_DB_ALIAS=main

# OPTIONAL: Enable API Key auth (primarily for network transports)
ENABLE_AUTH=false
MCP_API_KEY=your_super_secret_api_key_here # CHANGE THIS

# Define DB connection details for each alias (DB_MAIN_*, DB_REPORTING_*, etc.)
DB_MAIN_HOST=localhost
DB_MAIN_PORT=5432
DB_MAIN_NAME=app_prod_db
DB_MAIN_USER=app_user
DB_MAIN_PASSWORD=app_secret_password
DB_MAIN_SSL=disable

# Alternative: Use connection URLs
# DB_MAIN_URL=postgres://user:password@localhost:5432/database?sslmode=require

# --- Optional: Server Logging Level ---
# LOG_LEVEL=info # debug, info, warn, error (defaults to info)

🚀 Ejecutar el servidor (como un proceso)

Ejecute este servidor directamente con Bun. El cliente AI (como Cursor) normalmente iniciará y administrará este comando automáticamente.

Opción 1: Usar el paquete instalado globalmente

  • Para ejecutar manualmente: postgres-mcp

Opción 2: Usar el paquete en su proyecto

  • Para ejecutar desde su proyecto: npx postgres-mcp

  • O importar programáticamente:

    // server.js
    import { startServer } from 'postgres-mcp';
    
    // Start the MCP server
    startServer();

Opción 3: Desde el repositorio clonado

  • Para ejecutar manualmente (para probar): bun run src/index.ts

  • Modo de desarrollo manual: bun run --watch src/index.ts

Pruebas con herramientas CLI fastmcp

  • Terminal interactiva: bunx fastmcp dev src/index.ts

  • Inspector de interfaz de usuario web: bunx fastmcp inspect src/index.ts

💻 Usando la API programática (como biblioteca)

Además de ejecutarse como un servidor MCP independiente, postgres-mcp también se puede utilizar programáticamente como una biblioteca en sus aplicaciones Node.js/TypeScript.

Uso básico

import { createPostgresMcp } from 'postgres-mcp';

// Create the PostgresMcp instance
const postgresMcp = createPostgresMcp();

// Start the server
postgresMcp.start();

// Direct database operations
const results = await postgresMcp.executeQuery(
  'SELECT * FROM users WHERE role = $1',
  ['admin'],
  'main' // optional database alias
);

// When done, stop the server and close connections
await postgresMcp.stop();

Importaciones de funciones directas

Para casos de uso más simples, puede importar funciones específicas directamente:

import { 
  initConnections, 
  closeConnections, 
  executeQuery, 
  executeCommand, 
  executeTransaction, 
  getTableSchema,
  getAllTableSchemas
} from 'postgres-mcp';

// Configure database connections
const dbConfigs = {
  main: {
    host: 'localhost',
    port: 5432,
    database: 'my_db',
    user: 'db_user',
    password: 'db_password'
  }
};

// Initialize connections
initConnections(dbConfigs);

// Execute a query
const results = await executeQuery(
  'SELECT * FROM users WHERE role = $1',
  ['admin'],
  'main'
);

// Get schema for a single table
const schema = await getTableSchema('users', 'main');

// Get schema for all tables in the database
const allSchemas = await getAllTableSchemas('main');

// Close connections when done
await closeConnections();

Opciones de configuración

const postgresMcp = createPostgresMcp({
  // Custom database configurations (override .env)
  databaseConfigs: {
    main: {
      host: 'localhost',
      port: 5432,
      database: 'app_db',
      user: 'app_user',
      password: 'password',
      ssl: 'disable'
    }
  },
  // Server configuration
  serverConfig: {
    name: 'Custom PostgresMCP',
    defaultDbAlias: 'main'
  },
  // Transport options: 'stdio', 'sse', or 'http'
  transport: 'http',
  port: 3456
});

Para obtener la documentación completa sobre la API programática, consulte docs/programmatic-api.md .

🔌 Conexión con clientes de IA (Cursor, Claude Desktop)

Configure su agente de IA (cliente MCP) para ejecutar este script de servidor a través de su mecanismo de comando/argumentos.

Cursor AI - Ejemplo detallado

  1. Abra Configuración/Preferencias del cursor (Cmd+ o Ctrl+).

  2. Vaya a "Extensiones" -> "MCP".

  3. Haga clic en "Agregar servidor MCP" o edite settings.json .

  4. Agregue la siguiente configuración JSON:

    // In Cursor's settings.json or MCP configuration UI
    {
      "mcpServers": {
        "postgres-mcp": { // Unique name for Cursor
          "description": "MCP Server for PostgreSQL DBs (Main, Reporting)",
          "command": "bunx",  // Use 'bun' or provide absolute path: "/Users/your_username/.bun/bin/bun"
          "args": [
            "postgres-mcp"
            // or
            // *** ABSOLUTE PATH to your server's entry point ***
            // "/Users/your_username/projects/postgres-mcp/src/index.ts" /
          ],
          "env": {
            // .env file in project dir is loaded automatically by Bun.
            // Add overrides or Cursor-specific vars here if needed.
          },
          "enabled": true
        }
      }
    }
  5. Guardar y reiniciar el cursor o "Recargar servidores MCP".

  6. Verificar la conexión en el estado/registros de MCP de Cursor.

Escritorio de Claude

  1. Localice y edite config.json (consulte el README anterior para conocer las rutas).

  2. Agregue una entrada similar en mcpServers , utilizando la ruta absoluta en args .

  3. Reinicie Claude Desktop.

🛠️ Capacidades del MCP expuestas

Autenticación (opcional)

  • Protege los transportes de red (HTTP/SSE) a través del encabezado X-API-Key que coincide con MCP_API_KEY si ENABLE_AUTH=true .

  • Las conexiones stdio (predeterminadas para Cursor/Claude) generalmente omiten esta verificación.

Recursos

1. Lista de tablas de bases de datos

  • Plantilla de URI: db://{dbAlias}/schema/tables

  • Descripción: recupera una lista de nombres de tablas de usuario dentro del alias de base de datos especificado (normalmente del esquema 'público').

  • Definición de recurso ( addResourceTemplate ):

    • uriTemplate : "db://{dbAlias}/schema/tables"

    • arguments :

      • dbAlias : (cadena, obligatoria) - Alias de la base de datos (desde .env ).

    • load({ dbAlias }) : se conecta a la base de datos, consulta information_schema.tables (filtrado para tablas base en el esquema público, personalizable en la implementación), formatea el resultado como una matriz de cadenas JSON ["table1", "table2", ...] y devuelve { text: "..." } .

Ejemplo de uso (indicador de AI): "Obtenga el recurso db://main/schema/tables para enumerar las tablas en la base de datos principal".

2. Inspeccionar el esquema de la tabla

  • Plantilla de URI: db://{dbAlias}/schema/{tableName}

  • Descripción: Proporciona información detallada del esquema (columnas, tipos, nulabilidad, valores predeterminados) para una tabla específica.

  • Definición de recurso ( addResourceTemplate ):

    • uriTemplate : "db://{dbAlias}/schema/{tableName}"

    • arguments :

      • dbAlias : (cadena, obligatoria) - Alias de la base de datos.

      • tableName : (cadena, obligatoria) - Nombre de la tabla.

    • load({ dbAlias, tableName }) : se conecta, consulta information_schema.columns para la tabla específica, formatea como una matriz de cadenas JSON de objetos de columna, devuelve { text: "..." } .

Ejemplo de uso (indicador de IA): "Describe el recurso db://reporting/schema/daily_sales ".

Ejemplo de contenido de respuesta (cadena JSON):

"[{\"column_name\":\"session_id\",\"data_type\":\"uuid\",\"is_nullable\":\"NO\",\"column_default\":\"gen_random_uuid()\"},{\"column_name\":\"user_id\",\"data_type\":\"integer\",\"is_nullable\":\"NO\",\"column_default\":null},{\"column_name\":\"created_at\",\"data_type\":\"timestamp with time zone\",\"is_nullable\":\"YES\",\"column_default\":\"now()\"},{\"column_name\":\"expires_at\",\"data_type\":\"timestamp with time zone\",\"is_nullable\":\"YES\",\"column_default\":null}]"

Herramientas

Las herramientas reciben un objeto context ( log , reportProgress , session ).


1. query_tool

Ejecuta consultas SQL de solo lectura.

  • Descripción: Ejecute de forma segura SQL de solo lectura, obtenga resultados, con registro/progreso de ejecución.

  • Parámetros: statement (cadena), params (matriz, opción), dbAlias (cadena, opción).

  • Uso de contexto: log.info/debug , reportProgress opcional , session de acceso.

  • Devuelve: cadena JSON de la matriz de filas.

Ejemplo de solicitud:

{
  "tool_name": "query_tool",
  "arguments": {
    "statement": "SELECT product_id, name, price FROM products WHERE category = $1 AND price < $2 ORDER BY name LIMIT 10",
    "params": ["electronics", 500],
    "dbAlias": "main"
  }
}

Ejemplo de contenido de respuesta (cadena JSON):

"[{\"product_id\":123,\"name\":\"Example Gadget\",\"price\":499.99},{\"product_id\":456,\"name\":\"Another Device\",\"price\":350.00}]"

2. execute_tool

Ejecuta sentencias SQL que modifican datos.

  • Descripción: Ejecute SQL que modifique datos de forma segura, con registro de ejecución.

  • Parámetros: statement (cadena), params (matriz, opción), dbAlias (cadena, opción).

  • Uso de contexto: log.info/debug , acceso session .

  • Devuelve: Cadena que indica las filas afectadas.

Ejemplo de solicitud:

{
  "tool_name": "execute_tool",
  "arguments": {
    "statement": "UPDATE users SET last_login = NOW() WHERE user_id = $1",
    "params": [54321]
    // dbAlias omitted, uses DEFAULT_DB_ALIAS
  }
}

Ejemplo de contenido de respuesta (cadena):

"Rows affected: 1"

3. schema_tool

Recupera información detallada del esquema para una tabla específica.

  • Descripción: Obtenga definiciones de columnas y detalles para una tabla de base de datos.

  • Parámetros: tableName (cadena), dbAlias (cadena, opt).

  • Uso de contexto: log.info , session de acceso .

  • Devuelve: matriz de cadenas JSON de objetos de información de columnas.

Ejemplo de solicitud:

{
  "tool_name": "schema_tool",
  "arguments": {
    "tableName": "user_sessions",
    "dbAlias": "main"
  }
}

Ejemplo de contenido de respuesta (cadena JSON):

"[{\"column_name\":\"session_id\",\"data_type\":\"uuid\",\"is_nullable\":\"NO\",\"column_default\":\"gen_random_uuid()\"},{\"column_name\":\"user_id\",\"data_type\":\"integer\",\"is_nullable\":\"NO\",\"column_default\":null},{\"column_name\":\"created_at\",\"data_type\":\"timestamp with time zone\",\"is_nullable\":\"YES\",\"column_default\":\"now()\"},{\"column_name\":\"expires_at\",\"data_type\":\"timestamp with time zone\",\"is_nullable\":\"YES\",\"column_default\":null}]"

4. transaction_tool

Ejecuta múltiples sentencias SQL de forma atómica.

  • Descripción: Ejecutar secuencia SQL en una transacción, con registro/progreso de pasos.

  • Parámetros: operations (matriz de {declaración, parámetros}), dbAlias (cadena, opción).

  • Uso de contexto: log.info/debug/error , reportProgress , access session .

  • Devuelve: cadena JSON que resume el éxito/fracaso: {"success": true, "results": [...]} o {"success": false, "error": ..., "failedOperationIndex": ...} .

Ejemplo de solicitud:

{
  "tool_name": "transaction_tool",
  "arguments": {
    "operations": [
      {
        "statement": "INSERT INTO orders (customer_id, order_date, status) VALUES ($1, NOW(), 'pending') RETURNING order_id",
        "params": [101]
      },
      {
        "statement": "INSERT INTO order_items (order_id, product_sku, quantity, price) VALUES ($1, $2, $3, $4)",
        "params": [9999, "GADGET-X", 2, 49.99]
      },
      {
        "statement": "UPDATE inventory SET stock_count = stock_count - $1 WHERE product_sku = $2 AND stock_count >= $1",
        "params": [2, "GADGET-X"]
      }
    ],
    "dbAlias": "main"
  }
}

Ejemplo de contenido de respuesta de éxito (cadena JSON):

"{\"success\":true,\"results\":[{\"operation\":0,\"rowsAffected\":1},{\"operation\":1,\"rowsAffected\":1},{\"operation\":2,\"rowsAffected\":1}]}"

Ejemplo de contenido de respuesta de error (cadena JSON):

"{\"success\":false,\"error\":\"Error executing operation 2: new row for relation \\\"inventory\\\" violates check constraint \\\"stock_count_non_negative\\\"\",\"failedOperationIndex\":2}"

Eventos de servidor y sesión

  • Utiliza server.on('connect'/'disconnect') para registrar las conexiones del cliente.

  • Se puede utilizar session.on(...) para un manejo más granular de eventos de sesión si es necesario.

Consideraciones de seguridad

  • Inyección SQL: Mitigada mediante consultas parametrizadas. Sin concatenación directa de entradas.

  • Permisos de base de datos: Críticos. Asignar el mínimo privilegio a cada DB_<ALIAS>_USER , incluyendo acceso de lectura a information_schema para recursos de listado de esquemas/tablas.

  • SSL/TLS: Esencial para producción ( DB_<ALIAS>_SSL=require o más estricto).

  • Gestión de secretos: Proteja el archivo .env (añádalo a .gitignore ). Utilice la gestión segura de secretos para entornos de producción (Vault, Doppler, secretos en la nube).

  • Alcance de autenticación: el gancho authenticate protege principalmente los transportes de red. La seguridad stdio depende del entorno de ejecución.

  • Sensibilidad de los datos: tenga en cuenta los datos a los que se puede acceder a través de conexiones/herramientas.

  • Consultas de recursos: Las consultas utilizadas para listar tablas ( information_schema.tables ) y esquemas ( information_schema.columns ) suelen ser seguras, pero dependen de los permisos de la base de datos. Asegúrese de que los usuarios configurados tengan el acceso de lectura adecuado. Personalice la consulta de lista de tablas (p. ej., filtrado de esquemas) si es necesario para mayor seguridad o claridad.

📜 Licencia

Este proyecto está licenciado bajo la Licencia MIT . Consulte el archivo de LICENCIA para más detalles.

📋 Registro de cambios

1.0.0

  • Lanzamiento inicial

  • Servidor MCP con todas las funciones para PostgreSQL

  • Soporte para múltiples conexiones de bases de datos

  • Herramientas para consultas, ejecución, inspección de esquemas y transacciones

  • Recursos para la introspección de esquemas

  • Documentación completa y ejemplos

Available Tools

4 tools
execute_toolC

Safely execute a data-modifying SQL statement

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
dbAliasNo
statementYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Uses the word 'Safely' but does not elaborate on safety mechanisms, error handling, or any behavioral traits. No annotations provided to compensate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, adequately concise but too brief to provide useful information beyond the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, no annotations, and 3 undocumented parameters, the description is incomplete for an SQL execution tool. Does not explain return values or parameter usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not mention any parameters despite 0% schema coverage. No explanation of 'params', 'dbAlias', or 'statement' meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Safely execute a data-modifying SQL statement', specifying verb (execute) and resource (SQL statement), and distinguishes from read-only query_tool and schema_tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use vs. sibling tools (query_tool, schema_tool, transaction_tool). Does not mention when not to use or alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_toolC

Safely execute a read-only SQL query and retrieve results

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
dbAliasNo
statementYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must disclose all behavioral traits. It only mentions 'safely' and 'read-only', but fails to cover error handling, authentication requirements, result format, rate limits, or side effects. The minimal disclosure leaves significant uncertainty about tool behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise but at the expense of necessary details. It is front-loaded with the purpose but omits parameter explanations and usage context. Every sentence should earn its place; this one only partially does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool complexity (3 parameters, no schema descriptions, no annotations, no output schema, and sibling tools), the description is incomplete. It fails to document how to use parameters, the output format, or how this tool relates to siblings. Significant gaps remain for the agent to function correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no details about the three parameters (statement, params, dbAlias). It does not explain what params does, how to format the statement, or the role of dbAlias. The description adds zero semantic value beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Safely execute a read-only SQL query and retrieve results'. It specifies a verb ('execute'), a resource ('SQL query'), and a key constraint ('read-only'), effectively distinguishing it from sibling tools like execute_tool (likely for writes) and transaction_tool (for transactional operations).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for read-only queries via the 'read-only' qualifier, but does not explicitly state when to use this tool versus alternatives like execute_tool for writes or transaction_tool for transactions. No when-not guidance or alternative names are provided, leaving the agent to infer usage from sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schema_toolC

Retrieve detailed schema information for a specific table

ParametersJSON Schema
NameRequiredDescriptionDefault
dbAliasNo
tableNameYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only states it retrieves schema info but does not disclose read-only nature, error handling, or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with key action, but lacks necessary detail. It is minimally concise at the expense of completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, no annotations, and 2 under-documented parameters, the description is severely incomplete. It does not explain what 'detailed schema information' entails or how to use the optional dbAlias.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description does not explain the parameters (dbAlias, tableName) beyond the bare schema. The description fails to add meaning, e.g., the role of dbAlias or format of tableName.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'retrieve' and the resource 'detailed schema information for a specific table'. However, it does not differentiate from sibling tools like query_tool, which might also retrieve schema-related data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives such as execute_tool or query_tool. The description does not mention prerequisites or exclusionary conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transaction_toolB

Execute multiple SQL statements as a single atomic transaction

ParametersJSON Schema
NameRequiredDescriptionDefault
dbAliasNo
operationsYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. 'Atomic transaction' implies ACID properties, but doesn't disclose rollback behavior, error handling, timeouts, or constraints. Adequate but not detailed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no wasted words. Efficiently conveys core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, no annotations, and sibling tools suggest similar operations. Description lacks details on return values, error handling, transaction lifecycle, or limitations. Incomplete for a multi-statement tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning description adds no information about parameters like dbAlias or operations. The term 'multiple SQL statements' loosely maps to operations array but does not explain structure, required fields, or defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool executes multiple SQL statements atomically, which is a specific verb+resource. It distinguishes from siblings like execute_tool (likely single statement) and query_tool (read-only) by emphasizing atomic multi-statement execution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like execute_tool or query_tool. Description does not mention use cases, prerequisites, or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv1.0.0
    • First observedexecute_tool
    • First observedquery_tool
    • First observedschema_tool
    • First observedtransaction_tool

TDQS

B3.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a well-defined and distinct purpose: execute_tool for data modification, query_tool for read-only queries, schema_tool for table metadata, and transaction_tool for atomic operations. There is no ambiguity or overlap.

Naming Consistency5/5

All tool names follow a consistent verb_tool pattern using snake_case (execute_tool, query_tool, schema_tool, transaction_tool). The naming is predictable and clear.

Tool Count4/5

With four tools, the set is minimal but covers essential database operations (read, write, schema, transactions). While missing some auxiliary functions like listing tables, the count is appropriate for a focused server.

Completeness4/5

The tools cover the main CRUD lifecycle (via query and execute) and add schema retrieval and transactions. Minor gaps exist, such as lacking a tool to list all tables, but the core workflows are supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    An open-source MCP server that provides AI agents with advanced PostgreSQL capabilities including index tuning, query plan optimization, and comprehensive database health analysis. It supports safe SQL execution through configurable access modes and offers both stdio and SSE transport options for various development environments.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Zero-config MCP server that empowers AI agents to safely query SQL and NoSQL databases like PostgreSQL, MySQL, SQLite, MongoDB, and Redis.
    8 npm
    1
    MIT