touwaeriol/oracle-11g-mcp
If you are the rightful owner of oracle-11g-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
Oracle 11g MCP Server is a Java-based server that leverages the Model Context Protocol (MCP) to interact with Oracle databases, providing SQL execution, table schema retrieval, and table search functionalities.
execute_sql
Executes arbitrary SQL statements with optional parameterization.
get_table_schema
Retrieves detailed structure information of a specified table.
search_tables
Searches tables and columns based on a keyword.
Oracle 11g MCP Server
基于官方 MCP Java SDK 实现的 Oracle 数据库 MCP 服务器,提供 SQL 执行、表结构查询和表搜索功能。
功能特性
- 基于 MCP (Model Context Protocol) Java SDK 实现
- 提供三个核心工具:
execute_sql
- 执行任意 SQL 语句get_table_schema
- 获取表的详细结构信息search_tables
- 根据关键字搜索表和列
- 支持 SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP 等所有 SQL 操作
- 支持事务管理(DML 操作自动事务)
- 支持参数化查询
- 结果集限制为 1000 行以避免内存溢出
环境要求
- JDK 17 或更高版本
- Gradle 8.x
- Oracle 数据库(支持 11g 及以上版本)
构建项目
./gradlew clean build
构建成功后,可执行 JAR 文件位于 build/libs/oracle-11g-mcp.jar
配置
环境变量配置
创建 .env
文件(可选):
ORACLE_JDBC_URL=jdbc:oracle:thin:@//host:port/service_name
ORACLE_USERNAME=your_username
ORACLE_PASSWORD=your_password
或者直接设置环境变量:
export ORACLE_JDBC_URL="jdbc:oracle:thin:@//localhost:1521/XE"
export ORACLE_USERNAME="system"
export ORACLE_PASSWORD="oracle"
JDBC URL 格式
支持以下格式:
- SID 格式:
jdbc:oracle:thin:@host:port:SID
- Service Name 格式:
jdbc:oracle:thin:@//host:port/service_name
运行服务器
直接运行
java -jar build/libs/oracle-11g-mcp.jar
使用启动脚本
./run-mcp-server.sh
Docker 支持
构建 Docker 镜像
docker build -t oracle-mcp-server .
使用 Docker Compose
生产环境:
docker-compose up
开发环境(包含 Oracle 11g XE):
docker-compose -f docker-compose.dev.yml up
MCP 工具说明
execute_sql
执行任意 SQL 语句的通用工具。
参数:
sql
(必需): 要执行的 SQL 语句params
(可选): 参数化查询的参数数组
示例:
查询数据:
{
"name": "execute_sql",
"arguments": {
"sql": "SELECT * FROM users WHERE status = ?",
"params": ["active"]
}
}
创建表:
{
"name": "execute_sql",
"arguments": {
"sql": "CREATE TABLE test_table (id NUMBER PRIMARY KEY, name VARCHAR2(100))"
}
}
插入数据:
{
"name": "execute_sql",
"arguments": {
"sql": "INSERT INTO test_table (id, name) VALUES (?, ?)",
"params": ["1", "Test User"]
}
}
get_table_schema
获取表的详细结构信息,包括列定义、主键、索引、外键和注释。
参数:
table_name
(必需): 表名schema
(可选): 模式名(默认为当前用户)
示例:
{
"name": "get_table_schema",
"arguments": {
"table_name": "EMPLOYEES",
"schema": "HR"
}
}
返回信息包括:
- 列信息(名称、类型、长度、精度、是否可空、默认值、注释)
- 主键信息
- 索引信息(名称、类型、是否唯一、包含的列)
- 外键信息(约束名、列、引用表、引用列、删除规则)
- 表注释
search_tables
根据关键字搜索表和列,支持在表名、列名和注释中搜索。
参数:
keyword
(必需): 搜索关键字schema
(可选): 限定搜索的模式(默认搜索所有可访问的模式)search_columns
(可选): 是否搜索列名和列注释(默认: true)limit
(可选): 返回结果的最大数量(默认: 100,最大: 500)
示例:
搜索包含"order"的表和列:
{
"name": "search_tables",
"arguments": {
"keyword": "order",
"search_columns": true,
"limit": 50
}
}
仅在特定模式中搜索表:
{
"name": "search_tables",
"arguments": {
"keyword": "customer",
"schema": "SALES",
"search_columns": false
}
}
返回信息包括:
- 匹配的表列表(包含行数、最后分析时间、注释)
- 匹配的列列表(包含所属表、数据类型、是否可空、注释)
- 结果按相关性排序(完全匹配 > 前缀匹配 > 包含匹配)
项目结构
oracle-11g-mcp/
├── build.gradle # Gradle 构建配置
├── src/main/java/
│ └── com/oracle/mcp/
│ ├── config/ # 配置类
│ ├── server/ # MCP 服务器实现
│ └── tools/ # SQL 执行工具
├── docker-compose.yml # 生产环境配置
├── docker-compose.dev.yml # 开发环境配置
└── Dockerfile # Docker 镜像构建
依赖项
io.modelcontextprotocol.sdk:mcp:0.10.0
- MCP Java SDKcom.oracle.database.jdbc:ojdbc8:23.5.0.24.07
- Oracle JDBC 驱动com.fasterxml.jackson.core:jackson-databind:2.15.3
- JSON 处理io.github.cdimascio:dotenv-java:3.0.0
- 环境变量管理ch.qos.logback:logback-classic:1.4.14
- 日志框架
注意事项
- 查询结果集限制为 1000 行,超过部分会被截断
- DML 操作(INSERT、UPDATE、DELETE)自动使用事务
- DDL 操作(CREATE、ALTER、DROP)立即生效
- 支持所有标准 SQL 语句和 Oracle 特定语法
许可证
MIT License