一个强大的模型上下文协议(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":"" // 可选:如果您使用厚模式并且想要设置非默认目录用于客户端库
}
}
}
}
当使用Docker(推荐方法)时:
THICK_MODE=1以启用厚模式THICK_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 .
配置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":"" // 可选:如果您使用厚模式且希望设置非默认目录用于客户端库
}
}
}
}
对于两个选项:
ORACLE_CONNECTION_STRING替换为您的实际数据库连接字符串TARGET_SCHEMA是可选的,默认为用户的模式CACHE_DIR是可选的,默认为.cache在MCP服务器根文件夹内通过stdio运行

通过sse运行

要直接运行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数据库进行了优化:
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架构。
我们欢迎贡献!请参阅我们的贡献指南了解详情。
本项目根据MIT许可证发布 - 详情见LICENSE文件。
对于问题和疑问: