query_postgresql
Execute read-only PostgreSQL database queries to retrieve data using SELECT statements while maintaining database security and preventing modifications.
Instructions
执行PostgreSQL数据库查询(只读模式)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| db | Yes | 数据库名称 | |
| host | Yes | 数据库主机地址 | |
| port | Yes | 数据库端口 | |
| pwd | Yes | 数据库密码 | |
| querySql | Yes | 要执行的SQL查询语句(仅支持SELECT等只读操作) | |
| user | Yes | 数据库用户名 |
Implementation Reference
- db-query-tool.js:250-289 (handler)Main handler function that implements the query_postgresql tool logic: checks if query is read-only, connects to PostgreSQL DB, executes the query, returns formatted results or error, and ensures connection cleanup.async executePostgreSQL(config) { const { querySql } = config; // 检查是否为只读查询 if (!this.isReadOnlyQuery(querySql)) { return { success: false, error: "不允许执行非只读操作。仅支持SELECT、SHOW、DESCRIBE等查询语句。", code: "READONLY_VIOLATION" }; } let connection; try { // 建立数据库连接 connection = await this.getPostgreSQLConnection(config); // 执行查询 const result = await this.executePostgreSQLQuery(connection, querySql); // 返回结果 return { success: true, data: result.data, columns: result.columns, rowCount: result.rowCount }; } catch (error) { // 错误处理 return { success: false, error: error.message, code: error.code || 'DATABASE_ERROR' }; } finally { // 关闭数据库连接 await this.closePostgreSQLConnection(connection); } }
- mcp.full.config.js:75-115 (schema)Defines the input schema, name, description, required parameters, and annotations for the query_postgresql tool.query_postgresql: { name: "query_postgresql", description: "执行PostgreSQL数据库查询(只读模式)", inputSchema: { type: "object", properties: { host: { type: "string", description: "数据库主机地址" }, port: { type: "integer", description: "数据库端口" }, user: { type: "string", description: "数据库用户名" }, pwd: { type: "string", description: "数据库密码" }, db: { type: "string", description: "数据库名称" }, querySql: { type: "string", description: "要执行的SQL查询语句(仅支持SELECT等只读操作)" } }, required: ["host", "port", "user", "pwd", "db", "querySql"] }, annotations: { title: "PostgreSQL数据库查询工具(只读)", readOnlyHint: true, destructiveHint: false, idempotentHint: false, openWorldHint: false } },
- mcp-server.js:77-86 (registration)Registers query_postgresql in the list of available tools served in response to ListToolsRequest.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ config.tools.query_mysql, config.tools.query_postgresql, config.tools.query_mssql, config.tools.query_oracle ] }; });
- mcp-server.js:40-42 (registration)Dispatches calls to the query_postgresql tool to the executePostgreSQL handler method.case config.tools.query_postgresql.name: result = await dbTool.executePostgreSQL(request.params.arguments); break;
- db-query-tool.js:96-108 (helper)Helper function to establish PostgreSQL database connection using pg client.async getPostgreSQLConnection(config) { const { host, port, user, pwd, db } = config; const { Client } = require('pg'); const client = new Client({ host, port, user, password: pwd, database: db }); await client.connect(); return client; }