返回市场
MCP服务器用于Oracle数据库

MCP服务器用于Oracle数据库

作者:kutsushitaneko6 星标更新:2025-05-11

项目介绍

Oracle数据库用的MCP服务器(极其实验性)

这是一个用于Oracle数据库的MCP(模型上下文协议)服务器的实验性实现。该服务器旨在让AI应用程序能够执行SQL查询并从Oracle数据库中获取结果。MCP服务器在本地运行,并旨在通过MCP客户端如Cursor或Cline无缝提供数据库体验。

功能

  • 执行对Oracle数据库的SQL查询
  • 获取表结构
  • 安全措施(查询长度限制、危险关键词检查)
    • 仅实施了最低限度的安全措施。仅应在无法从外部访问的本地环境中使用。
  • 结果格式化功能(因为是供LLM调用的,可能有一些额外的操作)

必要条件

  • Python 3.11及以上版本
  • 对Oracle数据库的访问权限
  • 设置必要的环境变量(.env文件)
  • uv(一个快速的Python包管理器)

※测试仅在Windows 11上进行。对于Linux/Mac,请根据需要调整目录路径等。

设置步骤

  1. 克隆仓库:
git clone [repository-url]
cd mcp-server-for-oracle-database
  1. 创建并激活虚拟环境:
uv venv .venv
source .venv/bin/activate
.venv\Scripts\activate
  1. 安装依赖包:
uv pip install -r requirements.txt
  1. 设置环境变量: 创建.env文件,并设置以下信息:
ORACLE_USER=your_username
ORACLE_PASSWORD=your_password
ORACLE_DSN=your_dsn

提供的工具

execute_oracle

执行SQL查询(仅限SELECT语句),并返回格式化的结果。

  • 参数:

    • query: SQL查询(仅限SELECT语句)
    • params: 绑定变量
    • max_length: 响应的最大字符数
    • max_rows: 最大行数

    ※LLM经常尝试错误地使用参数。如果有更好的方法来传达这些参数的使用方式,请告知我们。 ※由于读取的是LLM,所以格式可能有些多余。

list_tables

显示数据库中的表列表。

  • 参数:
    • max_rows: 最大表数(整数类型,默认值:50)
    • name_pattern: 表名模式(例如:'%EMP%')(可选)
    • order_by: 排序顺序('TABLE_NAME'或'CREATED',默认值:'TABLE_NAME')
    • include_system_tables: 是否包括系统表(默认值:False)
    • use_all_tables: 是否参考ALL_TABLES(默认值:False)
    • owner: 表的所有者(当use_all_tables为True时必须指定)

describe_table

显示表的结构。类似于sqlplus的describe命令。

  • 参数:
    • table_name: 表名

oracle_query_assistant

返回指导execute_oracle(对Oracle数据库执行查询)的提示。

  • 参数
    • query_type: SQL类型(目前仅支持"select")

使用方法

注册到MCP客户端:

在Claude Desktop或Cursor的MCP配置文件中添加以下内容。

{
  "mcpServers": {
    "ORACLE": {
      "command": "虚拟环境Python执行文件的绝对路径(...\\mcp-server-for-autonomous-database\\.venv\\Scripts\\python.exe)",
      "args": [
        "MCP服务器的绝对路径(....\\mcp-server-for-oracle-database\\oracledb_mcp_server.py)"
      ]
    }
  }
}

※修改配置文件后,需要重启MCP客户端。对于Claude Desktop,还需要先停止后台运行的进程,然后再重新启动。

在Claude Desktop或Cursor等MCP客户端中进行各种尝试。

示例1: 显示表的结构

xxxx 表的结构如何?
xxxx 的结构是

截图

示例2: 获取表的数据

xxxx 表的数据是什么?

截图 截图 截图

示例3: 执行SQL

试一下这个 SQL

安全性

  • 不接受除SELECT语句之外的其他语句(不能执行DDL/DML)
    • 不接受SELECT INTO 和 UNION ALL
  • 查询长度限制(默认值:1MB)
  • 危险关键词检查
  • 输入值的清理
  • 验证只读查询