Oracle数据库协议服务器

Oracle数据库协议服务器(MCP)是一个为AI助手提供安全接口以与Oracle数据库交互的全面解决方案,支持多数据库连接、智能发现、安全验证等功能。

  • by longgoll
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 longgoll/mcp-oracle-server

使用说明

Oracle数据库MCP服务器🗄️

英语 | 越南语

💡 新来的?什么是MCP? 👉 在此处阅读初学者指南

全面 模型上下文协议(MCP) 用于Oracle数据库操作的服务器。该服务器使AI助手能够通过安全、定义良好的接口与Oracle数据库进行交互。

🌟 特性

核心功能

  • 多数据库支持 -同时连接到多个数据库(开发、生产、测试)
  • 智能发现 -工具如 locate_table 帮助AI在不猜测的情况下找到数据
  • 连接池 -具有自动池的高效数据库连接
  • 安全验证 -输入验证、SQL注入预防、受保护表
  • 查询日志记录 -具有性能跟踪功能的自动日志记录
  • Markdown输出 -用于AI消费的漂亮格式化结果

可用工具

🌐 发现与连接(新增!)

工具 说明
list_databases 列出所有已配置的数据库连接和状态
locate_table 全局搜索:查找哪个数据库包含表
get_session_info 查看所有活动池的详细会话信息

📋 基本数据库操作

(所有工具现在都支持可选功能 database_name 论点)

工具 说明
list_tables 列出当前用户可用的所有表
describe_table 获取特定表的架构/结构
run_read_only_query 安全执行SELECT查询
run_query_with_pagination 带分页支持的SELECT
run_modification_query 带有自动提交的INSERT、UPDATE、DELETE、CREATE、DROP

🔍 DDL和检查(深潜)

工具 说明
get_object_ddl 获取表、视图、包的DDL/Source。..
list_constraints 列出主键、外键、支票
list_indexes 列出所有索引及其列

🔎 搜索工具

工具 说明
search_in_table 在所有文本列中进行全文搜索

📊 绩效与管理(行政)

工具 说明
explain_query_plan 获取执行计划以调试性能
inspect_locks 查看阻止会话和锁
kill_session 终止卡住的会话(谨慎使用)

🛠️ 维护和开发工具(新!)

工具 说明
list_invalid_objects 列出已损坏的调试过程/包
compile_object 重新编译无效对象(Proc、Func、Pkg)
check_tablespace_usage 存储监控:查看每个TS的磁盘使用情况
generate_mock_data 模拟数据:生成用于测试的假数据

📤 导入/导出

工具 说明
export_query_to_csv 将查询结果导出到CSV文件
analyze_import_file 第一步: 导入前验证并映射CSV/Excel文件
import_data_from_file 第二步: 执行批量导入(需要先进行分析)

🚀 安装与设置指南

步骤1:安装服务器(install.bat)

我们将安装过程简化为一个脚本。

  1. 下载/克隆 将此存储库连接到您的本地计算机。
  2. 跑 install.bat:
    • 双击文件 install.bat 在项目文件夹中。
    • 或 通过终端运行它:
      cd path\to\mcp-oracle-server
      install.bat
      
    • 此脚本将自动安装Python依赖项并注册 mcp-oracle-server 包裹。

步骤2:下载Oracle即时客户端(必填)

由于Oracle Instant Client很大并且具有专有许可,我们不能将其包含在源代码(git)中。您需要手动下载:

  1. 访问 适用于Windows x64的Oracle即时客户端.
  2. 下载 基本包 (例如。, instantclient-basic-windows.x64-23.x.x.x.zip).
  3. 将zip文件解压缩到此项目的根目录中。
  4. 您将有一个类似的文件夹 instantclient_23_0 (或类似版本)。

备注:请记住以下配置的此目录的完整路径。

步骤3:配置数据库连接

您有两个选项来配置数据库连接。

选项1:集中式配置(推荐)

您可以将Oracle配置直接嵌入到MCP客户端配置文件中(例如。, mcp_config.json).这将所有设置保存在一个地方,并允许您在不丢失连接详细信息的情况下切换项目。

  1. 打开MCP配置文件(例如。, c:\Users\<YourUser>\.gemini\antigravity\mcp_config.json).
  2. 添加一个 oracleConfig 内部部分 oracle-server 定义。
  3. 添加 ORACLE_CONFIG_FILE 指向配置文件本身的环境变量。

示例 mcp_config.json:

{
  "mcpServers": {
    "oracle-server": {
      "command": "python",
      "args": ["-m", "mcp_oracle_server"],
      "env": {
        "PYTHONIOENCODING": "utf-8",
        "PYTHONPATH": "D:\\Projects\\mcp-oracle-server\\src",
        "ORACLE_CONFIG_FILE": "c:\\Users\\<YourUser>\\.gemini\\antigravity\\mcp_config.json",
        "ORACLE_CLIENT_PATH": "D:\\Projects\\mcp-oracle-server\\instantclient_23_0",
        "EXPORT_DIRECTORY": "D:\\Projects\\mcp-oracle-server\\exports"
      },
      "oracleConfig": {
        "databases": [
          {
            "name": "dev",
            "user": "your_username",
            "password": "your_password",
            "host": "localhost",
            "port": "1521",
            "service_name": "ORCLPDB"
          }
        ],
        "global_settings": {
          "default_database": "dev",
          "pool_min": 2,
          "pool_max": 10
        }
      }
    }
  }
}

选项2:项目特定配置(oracle_config.json)

此方法将配置保存在项目文件夹中。

  1. 找到 oracle_config.example.json 在项目文件夹中。
  2. 将其重命名为 oracle_config.json.
  3. 更新您的数据库详细信息。
  4. 在你的 mcp_config.json,set ORACLE_CONFIG_DIR 到项目文件夹。

示例 oracle_config.json:

{
  "databases": [
    {
      "name": "prod",
      "user": "admin",
      "password": "secure_password",
      "dsn": "production.server.com:1521/finance_service"
    }
  ],
  "global_settings": { ... }
}

注: oracle_client_path 必须指向您刚刚提取的文件夹(包含 oci.dll).确保使用绝对路径以避免错误。

📁 项目结构

mcp-oracle-server/
├── server.py          # Main MCP server with Multi-DB support
├── config.py          # Configuration loader (JSON + Env)
├── oracle_config.json # Database Connection Profiles
├── logger.py          # Logging and query tracking
├── .env               # Legacy single-db config
├── instantclient_23_0/ # Oracle Instant Client
└── README.md          # This file

🔧 配置选项

oracle_config.json

密钥 描述
name 数据库的唯一标识符(例如。, dev, prod)
dsn 复制连接字符串(例如。 host:port/service)
mode 可选。吃起来 SYSDBA 用于管理员连接
encoding 可选。默认 UTF-8

环境变量(遗留/全局覆盖)

变量 描述
ORACLE_CLIENT_PATH Oracle即时客户端的路径
LOG_LEVEL 日志记录级别(信息、调试)

受保护的表

编辑 config.py 添加不应修改的表:

PROTECTED_TABLES = [
    "SYS",
    "SYSTEM",
    "AUDIT_TRAIL",
    # Add your sensitive tables here
]

🔒 安全特性

  1. SQL注入防护

    • 根据安全标识符模式验证所有表名
    • 全程使用的参数化查询
  2. 查询限制

    • SELECT查询被阻止包含DML关键字
    • 已阻止危险命令(DROP DATABASE等)
  3. 受保护的表

    • 不可修改的可配置表列表
  4. 连接池

    • 正确管理和释放连接
    • 无证书风险

📊 使用示例

1.发现(我的数据在哪里?)

# Find which database has the 'EMPLOYEES' table
locate_table("EMPLOYEES")
# Output: Found in database 'HR_PROD'

# List all connected environments
list_databases()

2.多数据库查询

# Query a specific database
run_read_only_query("SELECT * FROM employees", database_name="HR_PROD")

# List tables in Finance DB
list_tables(database_name="finance_prod")

3.基本查询(默认数据库)

# Uses the default_database defined in json
describe_table("PRODUCTS")

4.监测

# View execution plan
explain_query_plan("SELECT * FROM large_table WHERE status = 'ACTIVE'")

# Check system health across all pools
get_session_info()

5.安全数据导入

# Step 1: Analyze file and get mapping proposal
analyze_import_file("C:/data/users.xlsx", "USERS")

# Step 2: Confirmation required! Agent must ask user.
# Step 3: Execute with confirmed JSON
import_data_from_file("C:/data/users.xlsx", "USERS", '{"Name":"USERNAME", "Age":"USER_AGE"}')

📜 许可证

MIT许可证-随意使用和修改!

🤝 贡献

欢迎投稿!请随时提交问题和拉取请求。


内置于❤️ 用于人工智能驱动的企业数据库管理