使用说明
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)
我们将安装过程简化为一个脚本。
- 下载/克隆 将此存储库连接到您的本地计算机。
- 跑
install.bat:- 双击文件
install.bat在项目文件夹中。 - 或 通过终端运行它:
cd path\to\mcp-oracle-server install.bat - 此脚本将自动安装Python依赖项并注册
mcp-oracle-server包裹。
- 双击文件
步骤2:下载Oracle即时客户端(必填)
由于Oracle Instant Client很大并且具有专有许可,我们不能将其包含在源代码(git)中。您需要手动下载:
- 访问 适用于Windows x64的Oracle即时客户端.
- 下载 基本包 (例如。,
instantclient-basic-windows.x64-23.x.x.x.zip). - 将zip文件解压缩到此项目的根目录中。
- 您将有一个类似的文件夹
instantclient_23_0(或类似版本)。
备注:请记住以下配置的此目录的完整路径。
步骤3:配置数据库连接
您有两个选项来配置数据库连接。
选项1:集中式配置(推荐)
您可以将Oracle配置直接嵌入到MCP客户端配置文件中(例如。, mcp_config.json).这将所有设置保存在一个地方,并允许您在不丢失连接详细信息的情况下切换项目。
- 打开MCP配置文件(例如。,
c:\Users\<YourUser>\.gemini\antigravity\mcp_config.json). - 添加一个
oracleConfig内部部分oracle-server定义。 - 添加
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)
此方法将配置保存在项目文件夹中。
- 找到
oracle_config.example.json在项目文件夹中。 - 将其重命名为
oracle_config.json. - 更新您的数据库详细信息。
- 在你的
mcp_config.json,setORACLE_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
]
🔒 安全特性
-
SQL注入防护
- 根据安全标识符模式验证所有表名
- 全程使用的参数化查询
-
查询限制
- SELECT查询被阻止包含DML关键字
- 已阻止危险命令(DROP DATABASE等)
-
受保护的表
- 不可修改的可配置表列表
-
连接池
- 正确管理和释放连接
- 无证书风险
📊 使用示例
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许可证-随意使用和修改!
🤝 贡献
欢迎投稿!请随时提交问题和拉取请求。
内置于❤️ 用于人工智能驱动的企业数据库管理
