返回市场
甲骨文MCP服务器

甲骨文MCP服务器

作者:danielmeppiel94 星标更新:2025-08-22

项目介绍

技术文档摘要

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 Edits”
    • 选择“代理模式”
    • 单击聊天输入中的刷新按钮以加载可用工具

完成这些步骤后,您可以通过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":"", // 可选:如果您使用厚模式并且想要设置非默认目录用于客户端库
               "READ_ONLY_MODE":"1"  // 可选:设置为"0"以允许写操作(默认:"1"为只读)
            }
        }
    }
}

当使用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 .
    
    1. 配置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>:1521/<service-name>",
                     "TARGET_SCHEMA":"",
                     "CACHE_DIR":".cache",
                     "THICK_MODE":"",  // 可选:设置为"1"以启用厚模式
                     "ORACLE_CLIENT_LIB_DIR":"", // 可选:如果您使用厚模式并且想要设置非默认目录用于客户端库
                     "READ_ONLY_MODE":"1"  // 可选:设置为"0"以允许写操作(默认:"1"为只读)
                  }
            }
         }
      }
      
    • 替换路径为您实际的uv二进制路径和oracle-mcp-server目录路径

对于两种选项:

  • 替换ORACLE_CONNECTION_STRING为您实际的数据库连接字符串
  • TARGET_SCHEMA是可选的,默认为用户的模式
  • CACHE_DIR是可选的,默认为.cache在MCP服务器根文件夹内
  • READ_ONLY_MODE默认为"1"(只读)以保证安全性。仅当需要写操作时才设置为"0"

本地启动服务器

要直接运行MCP服务器:

uv run main.py

对于开发和测试:

# 安装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表相关?

run_sql_query

执行SQL查询并将结果返回为格式化的表格。 示例:

你能帮我运行这个查询吗?SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID =  10

注意:在只读模式(默认)下,仅允许SELECT语句。写操作(INSERT、UPDATE、DELETE)出于安全原因被阻止。当禁用只读模式(READ_ONLY_MODE="0")时,此工具可以执行读写操作。

架构

此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架构。

只读模式

MCP服务器默认以只读模式运行,以提高安全性。这会阻止任何写操作(INSERT、UPDATE、DELETE、DDL),同时允许对数据库的完全读取访问。它保护数据库免受AI生成查询引起的意外更改。

配置

  • 默认READ_ONLY_MODE="1"(只读,安全)
  • 写访问READ_ONLY_MODE="0"(允许写操作)

系统要求

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

性能考虑

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

贡献

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

许可

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

支持

对于问题和疑问:

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