FastPostgresMCP
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.
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 databasesPruebas con el inspector MCP integrado
También puede utilizar el Inspector MCP para probar y depurar visualmente:
# From the project repository:
bun run inspectProblemas comunes
Si ve este error al ejecutar bunx postgres-mcp :
FastPostgresMCP started
[warning] FastMCP could not infer client capabilitiesSeguido de mensajes de ping, significa:
El servidor MCP se inició correctamente
El cliente se conectó exitosamente
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 clipara probar con la CLI de MCPConfiguració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
postgresevitan la inyección de SQL.🔑 Autenticación opcional: conexiones seguras basadas en red (SSE/HTTP) mediante validación de clave API (gancho
authenticatedefastmcp).📄 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.onysession.onpara 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
FastMCPserver.addTool(paraquery_tool,execute_tool,schema_toolytransaction_tool)server.addResourceTemplate(para enumerar tablas e inspeccionar esquemas de tablas)server.start(con focostdio, adaptable parasse/http)Opcional: Hook
authenticate(para validación de clave API)contextde 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.onpara 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-mcpEl paquete npm está disponible en https://www.npmjs.com/package/postgres-mcp
Opción 2: Clonar repositorio
Clonar el repositorio:
# Replace with your actual repository URL git clone https://github.com/llm-graph/postgres-mcp.git cd postgres-mcpInstalar 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.
Crear archivos de entorno:
Para producción:
cp .env.example .envPara desarrollo:
cp .env.development.example .env.development
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.
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 únicosDEFAULT_DB_ALIAS: alias predeterminado si se omite 'dbAlias' en las llamadas a herramientasDetalles 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-mcpO 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.tsModo de desarrollo manual:
bun run --watch src/index.ts
Pruebas con herramientas CLI fastmcp
Terminal interactiva:
bunx fastmcp dev src/index.tsInspector 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
Abra Configuración/Preferencias del cursor (Cmd+ o Ctrl+).
Vaya a "Extensiones" -> "MCP".
Haga clic en "Agregar servidor MCP" o edite
settings.json.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 } } }Guardar y reiniciar el cursor o "Recargar servidores MCP".
Verificar la conexión en el estado/registros de MCP de Cursor.
Escritorio de Claude
Localice y edite
config.json(consulte el README anterior para conocer las rutas).Agregue una entrada similar en
mcpServers, utilizando la ruta absoluta enargs.Reinicie Claude Desktop.
🛠️ Capacidades del MCP expuestas
Autenticación (opcional)
Protege los transportes de red (HTTP/SSE) a través del encabezado
X-API-Keyque coincide conMCP_API_KEYsiENABLE_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/tablesDescripció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, consultainformation_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, consultainformation_schema.columnspara 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,reportProgressopcional ,sessionde 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, accesosession.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,sessionde 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, accesssession.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 ainformation_schemapara recursos de listado de esquemas/tablas.SSL/TLS: Esencial para producción (
DB_<ALIAS>_SSL=requireo 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
authenticateprotege principalmente los transportes de red. La seguridadstdiodepende 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 toolsexecute_toolC
Safely execute a data-modifying SQL statement
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| dbAlias | No | ||
| statement | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| dbAlias | No | ||
| statement | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| dbAlias | No | ||
| tableName | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| dbAlias | No | ||
| operations | Yes |
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
v1.0.0- First observed
execute_tool - First observed
query_tool - First observed
schema_tool - First observed
transaction_tool
TDQS
Scored across 4 tools
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.
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.
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.
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
Related MCP Connectors
- XataOAuthio.github.xataio
Xata MCP server lets AI agents interact with your Xata projects, and Postgres database branches.
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
- dataOAuthco.thinair
PostgreSQL, MySQL, and SQL Server in one session. 26 read-only MCP tools for AI agents.
Related MCP Servers
- AlicenseBqualityNot gradedmaintenanceA universal MCP server that enables AI agents to securely manage PostgreSQL databases, make API requests, and execute SSH commands with features for database analysis, schema editing, and data operations.31-
- AlicenseNot gradedqualityNot gradedmaintenanceAn 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
- AlicenseNot gradedqualityDmaintenanceZero-config MCP server that empowers AI agents to safely query SQL and NoSQL databases like PostgreSQL, MySQL, SQLite, MongoDB, and Redis.8 npm1MIT
- AlicenseAqualityDmaintenanceA production-grade MCP server that gives AI agents safe, authenticated access to a PostgreSQL database.3MIT