数据库查询服务器

MCP数据库服务器是一个通过AI代理执行数据库查询的工具,支持Oracle和PostgreSQL数据库,提供安全查询和自动连接管理功能。

  • by EmmanuelBarbosaMonteiro
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 EmmanuelBarbosaMonteiro/mcp-server-oracle

使用说明

MCP 数据库服务器

MCP(模型上下文协议)服务器,用于通过人工智能代理执行数据库查询。

🎯 支持的银行

  • Oracle 数据库 - 使用Oracle数据库
  • PostgreSQL(译为“波斯特高斯库”或直接保留原名,因“PostgreSQL”在中文中常直接使用) - 使用pg(注:pg可能是一个特定上下文中的缩写或术语,根据上下文可能需要具体翻译,但在此处保持原样以避免歧义)

💡 服务器会根据配置的环境变量自动检测使用哪个数据库。

🔧 设置

1. 安装依赖项

npm install

2. 安装VS Code扩展(推荐)

以下扩展名将自动建议:

  • ESLint(中文可译为“ES语言静态检查工具”或根据上下文简化为“ES静态检查工具”,但通常直接使用其英文原名) - 代码检查和自动修复
  • 更美观 - 代码格式化

自动格式化设置为在保存时(Ctrl+S)执行。

3. 设置环境变量

对于Oracle数据库:

创建一个文件 .env 或者设置变量:

# Windows PowerShell
$env:ORACLE_USER="seu_usuario"
$env:ORACLE_PASSWORD="sua_senha"
$env:ORACLE_CONNECT_STRING="localhost:1521/ORCL"
$env:ORACLE_POOL_MIN="0"
$env:ORACLE_POOL_MAX="4"

或在CMD中:

set ORACLE_USER=seu_usuario
set ORACLE_PASSWORD=sua_senha
set ORACLE_CONNECT_STRING=localhost:1521/ORCL
set ORACLE_POOL_MIN=0
set ORACLE_POOL_MAX=4

对于 PostgreSQL:

# Windows PowerShell
$env:POSTGRES_USER="seu_usuario"
$env:POSTGRES_PASSWORD="sua_senha"
$env:POSTGRES_DATABASE="nome_do_banco"
$env:POSTGRES_HOST="localhost"
$env:POSTGRES_PORT="5432"
$env:POSTGRES_POOL_MIN="0"
$env:POSTGRES_POOL_MAX="4"

或者在CMD中:

set POSTGRES_USER=seu_usuario
set POSTGRES_PASSWORD=sua_senha
set POSTGRES_DATABASE=nome_do_banco
set POSTGRES_HOST=localhost
set POSTGRES_PORT=5432
set POSTGRES_POOL_MIN=0
set POSTGRES_POOL_MAX=4

强制使用特定数据库类型(可选):

如果您已设置两家银行的凭证,请使用:

$env:DB_TYPE="oracle"    # ou "postgres"

🎨 格式化和代码检查(或代码规范检查)

该项目已配置为 ESLint e 更漂亮 以保持代码质量。

可用命令:

# Verificar problemas de lint
npm run lint

# Corrigir problemas automaticamente
npm run lint:fix

# Formatar código
npm run format

# Verificar formatação
npm run format:check

保存时自动格式化

自动格式化已启用。按下时 Ctrl+S,代码将是:

  • ✅ 已通过 Prettier 格式化
  • ✅ 已通过ESLint修正(自动错误)

4. 执行

开发模式:

npm run dev

生产模式:

npm run build
npm start

🛠️ 可用工具

database_query

在配置的数据库(Oracle 或 PostgreSQL)上执行 SELECT 查询。

参数:

  • sql (必填):SQL SELECT 查询
  • binds (可选):带有绑定参数的对象
    • Oracle:使用 :paramName “na query”可以翻译为“无查询”或“未查询”。这里,“na”通常是一个缩写,用来表示“not applicable”(不适用)或“not available”(不可用)的意思,但在“query”这个上下文中,它可能更倾向于表示“没有进行查询”或“未执行查询”的状态。因此,根据具体语境,“na query”可以灵活翻译为“无查询”或“未查询”
    • PostgreSQL:使用 :paramName (将自动转换为 $1, $2等)
  • limit (可选):行数限制(默认:500)
  • timeoutMs (可选):超时时间(毫秒)(默认:15000)

限制:

  • 仅允许使用SELECT查询
  • DML/DDL 命令因安全原因被阻止

使用示例:

{
  "sql": "SELECT * FROM users WHERE status = :status",
  "binds": { "status": "active" },
  "limit": 100
}

database_status

返回数据库连接状态的信息。

返回:

{
  "database": "Oracle",
  "connected": true,
  "poolSize": 4
}

📝 与MCP客户端一起使用

添加到 claude_desktop_config.json:

对于Oracle:

{
  "mcpServers": {
    "database": {
      "command": "node",
      "args": [
        "C:\\Users\\Emmanuel\\Desktop\\mcp\\mcp-database\\dist\\index.js"
      ],
      "env": {
        "DB_TYPE": "oracle",
        "ORACLE_USER": "seu_usuario",
        "ORACLE_PASSWORD": "sua_senha",
        "ORACLE_CONNECT_STRING": "localhost:1521/ORCL"
      }
    }
  }
}

对于 PostgreSQL:

{
  "mcpServers": {
    "database": {
      "command": "node",
      "args": [
        "C:\\Users\\Emmanuel\\Desktop\\mcp\\mcp-database\\dist\\index.js"
      ],
      "env": {
        "DB_TYPE": "postgres",
        "POSTGRES_USER": "seu_usuario",
        "POSTGRES_PASSWORD": "sua_senha",
        "POSTGRES_DATABASE": "nome_do_banco",
        "POSTGRES_HOST": "localhost",
        "POSTGRES_PORT": "5432"
      }
    }
  }
}

🔒 安全

  • 永远不要 在代码中提交凭据
  • 使用环境变量或密钥管理器
  • 服务器自动阻止非SELECT命令
  • 绑定参数是被支持的,以防止SQL注入

🏗️ 可扩展架构

该项目采用了模块化和可扩展的架构进行开发:

  • **接口 IDatabaseConnector**定义座椅连接器的合同
  • 特定连接器针对Oracle和PostgreSQL的实现
  • 工厂模式自动检测并启动正确的数据库
  • 易于扩展通过实施添加新的银行 IDatabaseConnector

添加新数据库:

  1. 创建一个新的连接器在 src/database/seuBancoConnector.ts
  2. 实现接口 IDatabaseConnector
  3. 添加类型到 src/database/types.ts
  4. 在工厂注册 src/database/connectorFactory.ts
  5. 安装所需的依赖项