query_database
Execute read-only SQL SELECT queries against Oracle databases to retrieve data, column information, and query performance metrics for analysis and reporting.
Instructions
Execute a read-only SQL SELECT query against the Oracle database. Returns rows, column names, and execution metrics.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| maxRows | No | Maximum number of rows to return (optional) | |
| query | Yes | The SQL query to execute (SELECT statements only) | |
| timeout | No | Query timeout in milliseconds (optional) |
Implementation Reference
- src/tools/queryDatabase.ts:17-45 (handler)The handler function for the query_database tool. Validates input using Zod schema, logs the execution, calls executeQuery helper, and returns structured success/error response.export async function queryDatabase(input: QueryDatabaseInput) { try { // Validate input const validated = QueryDatabaseSchema.parse(input); logger.info('Executing query via MCP tool', { queryLength: validated.query.length, maxRows: validated.maxRows, }); // Execute the query const result = await executeQuery(validated.query, { maxRows: validated.maxRows, timeout: validated.timeout, }); return { success: true, data: result, }; } catch (err: any) { logger.error('Query database tool failed', { error: err.message }); return { success: false, error: err.message || 'Unknown error occurred', }; } }
- src/tools/queryDatabase.ts:6-10 (schema)Zod input schema for validating query_database tool parameters: query (required string), maxRows and timeout (optional numbers).export const QueryDatabaseSchema = z.object({ query: z.string().min(1, 'Query cannot be empty'), maxRows: z.number().int().positive().optional(), timeout: z.number().int().positive().optional(), });
- src/server.ts:38-60 (registration)Registration of query_database tool in the tools list returned by tools/list, including JSON schema equivalent for input.{ name: 'query_database', description: 'Execute a read-only SQL SELECT query against the Oracle database. Returns rows, column names, and execution metrics.', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'The SQL query to execute (SELECT statements only)', }, maxRows: { type: 'number', description: 'Maximum number of rows to return (optional)', }, timeout: { type: 'number', description: 'Query timeout in milliseconds (optional)', }, }, required: ['query'], }, },
- src/server.ts:90-101 (registration)Dispatch logic in tools/call handler: validates args with schema and invokes the queryDatabase handler.if (name === 'query_database') { const validated = QueryDatabaseSchema.parse(args); const result = await queryDatabase(validated); return { content: [ { type: 'text' as const, text: JSON.stringify(result, null, 2), }, ], };