一个强大的模型上下文协议(MCP)服务器,提供大型Oracle数据库的上下文数据库模式信息,使AI助手能够理解和处理包含数千张表的数据库。
MCP Oracle DB Context服务器解决了在处理非常大的Oracle数据库时的一个关键挑战:如何向AI模型提供准确的相关数据库模式信息,而不被成千上万的表和关系所淹没。
通过智能缓存和提供数据库模式信息,该服务器允许AI助手:
要使用此MCP服务器与VSCode Insiders中的GitHub Copilot,请按照以下步骤操作:
安装VSCode Insiders
安装GitHub Copilot扩展
配置MCP服务器
启用代理模式
完成这些步骤后,您可以通过GitHub Copilot的聊天界面访问所有数据库上下文工具。
在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=1THICK_MODE,可以可选地设置Oracle客户端库安装路径ORACLE_CLIENT_LIB_DIR,如果它不同于默认位置。此选项需要本地安装和设置项目:
前提条件
oracledb Python包)安装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后,请重新启动您的终端。
项目设置
# 克隆仓库
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 .
"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"为只读)
}
}
}
}
对于两种选项:
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数据库进行了优化:
DatabaseConnector 层
SchemaManager 层
DatabaseContext 层
数据库连接器支持两种连接模式:
默认情况下,连接器使用Oracle的薄模式,这是一种纯Python实现。这种模式:
对于需要高级Oracle功能或更好性能的情况,您可以启用厚模式:
THICK_MODE=1THICK_MODE=1环境变量,并确保安装了与您的系统架构和数据库版本兼容的Oracle客户端库您可以使用ORACLE_CLIENT_LIB_DIR环境变量指定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"(允许写操作)我们欢迎贡献!请参阅我们的贡献指南了解详情。
本项目根据MIT许可证发布 - 详情见LICENSE文件。
对于问题和疑问: