Skip to main content
Glama
xuejike

Database Query MCP Server

by xuejike

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
NameRequiredDescriptionDefault
dbYes数据库名称
hostYes数据库主机地址
portYes数据库端口
pwdYes数据库密码
querySqlYes要执行的SQL查询语句(仅支持SELECT等只读操作)
userYes数据库用户名

Implementation Reference

  • 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); } }
  • 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;
  • 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; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/xuejike/coding-db-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server