execute_custom_query
Run custom SQL queries on PostgreSQL databases using a secure connection. Manage schemas, debug issues, migrate data, and monitor performance with controlled access and optional query timeout.
Instructions
Execute a custom SQL query against the database. WARNING: Use with care. Do not expose to untrusted input.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| connectionString | Yes | PostgreSQL connection string | |
| query | Yes | SQL query to execute | |
| timeout | No | Optional query timeout in milliseconds | |
| values | No | Optional parameter values for the query |
Implementation Reference
- src/tools/custom_query.ts:16-40 (handler)The main handler function that executes the custom SQL query against PostgreSQL using DatabaseConnection, handles connection, execution, error catching, and returns a CustomQueryResult.export async function executeCustomQuery( connectionString: string, query: string, values: unknown[] = [], options: { timeout?: number } = {} ): Promise<CustomQueryResult> { const db = DatabaseConnection.getInstance(); try { await db.connect(connectionString); const result = await db.query(query, values, options); return { success: true, message: 'Query executed successfully', details: result }; } catch (error) { return { success: false, message: `Query execution failed: ${error instanceof Error ? error.message : String(error)}`, details: null }; } finally { await db.disconnect(); } }
- src/index.ts:32-54 (schema)Input JSON Schema for the execute_custom_query tool, specifying required connectionString and query, optional values and timeout.inputSchema: { type: 'object', properties: { connectionString: { type: 'string', description: 'PostgreSQL connection string' }, query: { type: 'string', description: 'SQL query to execute' }, values: { type: 'array', description: 'Optional parameter values for the query', items: { type: 'string' } }, timeout: { type: 'number', description: 'Optional query timeout in milliseconds' } }, required: ['connectionString', 'query'] }
- src/index.ts:28-56 (registration)Tool definition object for 'execute_custom_query' including name, description, and inputSchema, used to populate server capabilities.tools.const TOOL_DEFINITIONS = [ { name: 'execute_custom_query', description: 'Execute a custom SQL query against the database. WARNING: Use with care. Do not expose to untrusted input.', inputSchema: { type: 'object', properties: { connectionString: { type: 'string', description: 'PostgreSQL connection string' }, query: { type: 'string', description: 'SQL query to execute' }, values: { type: 'array', description: 'Optional parameter values for the query', items: { type: 'string' } }, timeout: { type: 'number', description: 'Optional query timeout in milliseconds' } }, required: ['connectionString', 'query'] } } ];
- src/index.ts:101-117 (registration)Switch case in CallToolRequestSchema handler that dispatches to executeCustomQuery for the 'execute_custom_query' tool and formats the MCP response.case 'execute_custom_query': { const { connectionString, query, values, timeout } = request.params.arguments as { connectionString: string; query: string; values?: unknown[]; timeout?: number; }; const result = await executeCustomQuery(connectionString, query, values ?? [], { timeout }); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2) } ] }; }
- src/tools/custom_query.ts:6-10 (schema)TypeScript interface defining the output structure returned by the executeCustomQuery handler.export interface CustomQueryResult { success: boolean; message: string; details: unknown; }