返回市场
甲骨文MCP服务器

甲骨文MCP服务器

作者:zhengwanbo2 星标更新:2025-06-20

项目介绍

技术文档摘要

MCP Server - Oracle DB Context

English | 中文

一个强大的模型上下文协议(MCP)服务器,为大型Oracle数据库提供上下文数据库模式信息,使AI助手能够理解和处理包含数千张表的数据库。

目录

概述

MCP Oracle DB Context服务器解决了在处理非常大的Oracle数据库时的一个关键挑战:如何向AI模型提供准确的相关数据库模式信息,而不被数以万计的表和关系所淹没。

通过智能缓存和提供数据库模式信息,该服务器允许AI助手:

  • 按需查找特定表的模式
  • 查找匹配特定模式的表
  • 理解表之间的关系和外键
  • 获取数据库供应商信息

特性

  • 智能模式缓存:构建并维护数据库模式的本地缓存,以减少数据库查询
  • 目标模式查找:无需加载整个数据库结构即可检索特定表的模式
  • 表搜索:按名称模式匹配查找表
  • 关系映射:理解表之间的外键关系
  • Oracle数据库支持:专门为Oracle数据库构建
  • MCP集成:与GitHub Copilot、Claude、ChatGPT等支持MCP的AI助手无缝协作

使用方法

与VSCode Insiders中的GitHub Copilot集成

要使用此MCP服务器与VSCode Insiders中的GitHub Copilot,请按照以下步骤操作:

  1. 安装VSCode Insiders

  2. 安装GitHub Copilot扩展

    • 打开VSCode Insiders
    • 转到扩展市场
    • 搜索并安装“GitHub Copilot”
  3. 配置MCP服务器

  4. 启用代理模式

    • 在VSCode Insiders中打开Copilot聊天
    • 单击“Copilot编辑”
    • 选择“代理模式”
    • 单击聊天输入中的刷新按钮以加载可用工具

完成这些步骤后,您将可以通过GitHub Copilot的聊天界面访问所有数据库上下文工具。

选项1:使用Docker(推荐)

在VSCode Insiders中,转到您的用户或工作区settings.json文件,并添加以下内容:

"mcp": {
    "inputs": [
     {
       "id": "db-password",
       "type": "promptString",
       "description": "Oracle DB 密码",
       "password": true,
     }
   ],
    "servers": {
        "oracle": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "-e",
                "ORACLE_CONNECTION_STRING",
                "-e",
                "TARGET_SCHEMA",
                "-e",
                "CACHE_DIR",
                "-e",
                "THICK_MODE",
                "dmeppiel/oracle-mcp-server"
            ],
            "env": {
               "ORACLE_CONNECTION_STRING":"<db-username>/${input:db-password}@<host>:1521/<service-name>",
               "TARGET_SCHEMA":"",
               "CACHE_DIR":".cache",
               "THICK_MODE":"",  // 可选:设置为"1"以启用厚模式
               "ORACLE_CLIENT_LIB_DIR":"" // 可选:如果您使用厚模式并且想要设置非默认目录用于客户端库
            }
        }
    }
}

当使用Docker(推荐方法)时:

  • 容器中包含了所有依赖项
  • 如果需要,可以在环境变量中设置THICK_MODE=1以启用厚模式
  • 如果您使用THICK_MODE,可以可选地设置Oracle客户端库安装路径ORACLE_CLIENT_LIB_DIR,如果它不同于默认位置。

选项2:使用UV(本地安装)

此选项需要本地安装和设置项目:

  1. 先决条件

    • Python 3.12或更高版本
    • Oracle数据库访问权限
    • Oracle即时客户端(用于oracledb Python包)
  2. 安装UV

    # 使用curl安装uv(macOS/Linux)
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
    # 或者使用PowerShell(Windows)
    irm https://astral.sh/uv/install.ps1 | iex
    

    安装uv后,请重新启动您的终端。

  3. 项目设置

    # 克隆仓库
    git clone https://github.com/yourusername/oracle-mcp-server.git
    cd oracle-mcp-server
    
    # 创建并激活虚拟环境
    uv venv
    
    # 激活(Unix/macOS)
    source .venv/bin/activate
    
    # 激活(Windows)
    .venv\Scripts\activate
    
    # 安装依赖项
    uv pip install -e .
    
  4. 配置VSCode设置

    "mcp": {
       "inputs": [
          {
             "id": "db-password",
             "type": "promptString",
             "description": "Oracle DB 密码",
             "password": true,
          }
       ],
       "servers": {
          "oracle": {
                "command": "/path/to/your/.local/bin/uv",
                "args": [
                   "--directory",
                   "/path/to/your/oracle-mcp-server",
                   "run",
                   "main.py"
                ],
                "env": {
                   "ORACLE_CONNECTION_STRING":"<db-username>/${input:db-password}@<host>:1121/<service-name>",
                   "TARGET_SCHEMA":"",
                   "CACHE_DIR":".cache",
                   "THICK_MODE":"",  // 可选:设置为"1"以启用厚模式
                   "ORACLE_CLIENT_LIB_DIR":"" // 可选:如果您使用厚模式且希望设置非默认目录用于客户端库
                }
          }
       }
    }
    
  • 将路径替换为您实际的uv二进制路径和oracle-mcp-server目录路径

对于两个选项:

  • ORACLE_CONNECTION_STRING替换为您的实际数据库连接字符串
  • TARGET_SCHEMA是可选的,默认为用户的模式
  • CACHE_DIR是可选的,默认为.cache在MCP服务器根文件夹内

选项3:使用Cherry Studio

通过stdio运行 img.png

通过sse运行 img_1.png

本地启动服务器

要直接运行MCP服务器:

uv run main.py

或

python main.py --transport=sse

对于开发和测试:

# 安装MCP Inspector
uv pip install mcp-cli

# 使用MCP Inspector测试
mcp dev main.py

# 或在Claude Desktop中安装
mcp install main.py

可用工具

当连接到如VSCode Insiders中的GitHub Copilot或Claude这样的AI助手时,将有以下工具可用:

get_table_schema

获取特定表的详细模式信息,包括列、数据类型、空值性和关系。 示例:

你能给我展示EMPLOYEES表的模式吗?

get_tables_schema

一次性获取多个表的模式信息。比多次调用get_table_schema更高效。 示例:

请提供EMPLOYEES和DEPARTMENTS表的模式。

search_tables_schema

按名称模式搜索表并检索其模式。 示例:

找到所有可能与客户相关的表并显示它们的模式。

rebuild_schema_cache

强制重建模式缓存。由于资源密集型,应谨慎使用。 示例:

数据库结构已更改。能否重建模式缓存?

get_database_vendor_info

获取有关连接的Oracle数据库版本和模式的信息。 示例:

我们正在运行哪个版本的Oracle数据库?

search_columns

搜索包含与特定术语匹配的列的表。当您知道需要什么数据但不确定哪些表包含它时很有用。 示例:

哪些表包含与customer_id相关的列?

get_pl_sql_objects

获取关于存储过程、函数、包、触发器等PL/SQL对象的信息。 示例:

显示所有以'CUSTOMER_'开头的存储过程。

get_object_source

检索PL/SQL对象的源代码。对于调试和理解数据库逻辑很有用。 示例:

你能给我展示CUSTOMER_UPDATE_PROC过程的源代码吗?

get_table_constraints

获取表的所有约束(主键、外键、唯一约束、检查约束)。 示例:

ORDERS表上定义了哪些约束?

get_table_indexes

获取表上定义的所有索引,有助于查询优化。 示例:

显示CUSTOMERS表上的所有索引。

get_dependent_objects

查找依赖于指定数据库对象的所有对象。 示例:

哪些对象依赖于CUSTOMER_VIEW视图?

get_user_defined_types

获取数据库中用户定义类型的详细信息。 示例:

显示在模式中定义的所有自定义类型。

get_related_tables

获取通过外键与指定表相关联的所有表,显示传入和传出的关系。 示例:

哪些表与ORDERS表相关?

read_query

执行SELECT查询 示例:

查询订单表记录?

exec_ddl_sql

执行CREATE/ALTER/DROP操作 示例:

创建一个学生表,包括姓名,性别,出生日期,班级,入学时间?

exec_dml_sql

执行INSERT/UPDATE/DELETE操作 示例:

为学生表插入100条数据

exec_pro_sql

执行PL/SQL代码块

架构

此MCP服务器采用三层架构,针对大规模Oracle数据库进行了优化:

  1. DatabaseConnector 层

    • 管理Oracle数据库连接和查询执行
    • 实现连接池和重试逻辑
    • 处理原始SQL操作
  2. SchemaManager 层

    • 实现智能模式缓存
    • 提供优化的模式查找和搜索
    • 管理磁盘上的持久缓存
  3. DatabaseContext 层

    • 暴露高级MCP工具和接口
    • 处理授权和访问控制
    • 为AI消费提供模式优化

连接模式

数据库连接器支持两种连接模式:

薄模式(默认)

默认情况下,连接器使用Oracle的薄模式,这是一种纯Python实现。这种模式:

  • 更容易设置和部署
  • 对大多数基本数据库操作足够
  • 在不同环境中更具移植性

厚模式

对于需要高级Oracle功能或更好性能的情况,您可以启用厚模式:

  • 当使用Docker(推荐)时:在Docker环境变量中设置THICK_MODE=1
  • 当使用本地安装时:导出THICK_MODE=1环境变量,并确保安装了与您的系统架构和数据库版本兼容的Oracle客户端库

您可以使用ORACLE_CLIENT_LIB_DIR环境变量指定Oracle客户端库的自定义位置。这在以下情况下特别有用:

  • 您在非标准位置安装了Oracle客户端库
  • 您需要在同一系统上使用多个Oracle客户端版本
  • 您没有权限在标准位置安装Oracle客户端
  • 您需要特定的Oracle客户端版本以与某些数据库功能兼容

注意:当使用Docker时,您不需要担心安装Oracle客户端库,因为它们已包含在容器中(Oracle Instant Client v23.7)。容器支持Oracle数据库版本19c至23ai,适用于linux/arm64和linux/amd64架构。

系统要求

  • Python:版本3.12或更高(为了最佳性能)
  • 内存:对于大型数据库(10,000+表),至少需要4GB可用RAM
  • 磁盘:最少500MB空闲空间用于模式缓存
  • Oracle:兼容Oracle Database 11g及更高版本
  • 网络:与Oracle数据库服务器的稳定连接

性能考虑

  • 对于非常大的数据库,初始缓存构建可能需要5-10分钟
  • 后续启动通常少于30秒
  • 缓存后,模式查找通常在一秒内完成
  • 内存使用量随活动模式大小而变化

贡献

我们欢迎贡献!请参阅我们的贡献指南了解详情。

许可

本项目根据MIT许可证发布 - 详情见LICENSE文件。

支持

对于问题和疑问:

  • 在此GitHub存储库中创建问题