Skip to main content
Glama
xuejike

Database Query MCP Server

by xuejike

query_oracle

Execute read-only Oracle database queries securely by providing connection details and SELECT statements to retrieve data without modification.

Instructions

执行Oracle数据库查询(只读模式)

Input Schema

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

Implementation Reference

  • Main handler function for query_oracle tool: checks if SQL is read-only, connects to Oracle database, executes the query, handles errors, closes connection, returns structured result.
    async executeOracle(config) { const { querySql } = config; // 检查是否为只读查询 if (!this.isReadOnlyQuery(querySql)) { return { success: false, error: "不允许执行非只读操作。仅支持SELECT、SHOW、DESCRIBE等查询语句。", code: "READONLY_VIOLATION" }; } let connection; try { // 建立数据库连接 connection = await this.getOracleConnection(config); // 执行查询 const result = await this.executeOracleQuery(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.closeOracleConnection(connection); } }
  • Schema definition for query_oracle tool including input parameters (host, port, user, pwd, db, querySql), description, and annotations.
    query_oracle: { name: "query_oracle", description: "执行Oracle数据库查询(只读模式)", 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: "Oracle数据库查询工具(只读)", readOnlyHint: true, destructiveHint: false, idempotentHint: false, openWorldHint: false } }
  • mcp-server.js:48-50 (registration)
    Registration and dispatch: switch case that calls executeOracle for query_oracle tool invocations.
    case config.tools.query_oracle.name: result = await dbTool.executeOracle(request.params.arguments); break;
  • mcp-server.js:77-86 (registration)
    Tool list handler that registers query_oracle in the available tools list.
    server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ config.tools.query_mysql, config.tools.query_postgresql, config.tools.query_mssql, config.tools.query_oracle ] }; });
  • Helper function to establish Oracle database connection using oracledb.
    async getOracleConnection(config) { const { host, port, user, pwd, db } = config; const oracledb = require('oracledb'); return await oracledb.getConnection({ host, port, user, password: pwd, database: db }); }

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