项目介绍
Oracle MCP Server
这是一个基于 spring-ai-mcp-server-webmvc-spring-boot-starter 的 Oracle 数据库操作 Model Context Protocol (MCP) 服务器实现。该服务提供了一组工具,通过 MCP 与 Oracle 数据库进行交互,并利用 Server-Sent Events (SSE) 实现实时通信。
功能
- 列出 Oracle 数据库中的所有表
- 描述表结构(列、数据类型、约束)
- 执行 SQL 语句(SELECT、INSERT、UPDATE、DELETE)
- 安全的数据库连接管理
- 通过 SSE 实现实时通信
- 基于 spring-ai-mcp-server-webmvc-spring-boot-starter 构建
技术栈
核心依赖
- Spring Boot 3.2.0
- spring-ai-mcp-server-webmvc-spring-boot-starter
- Oracle JDBC 驱动
- Model Context Protocol (MCP) 框架
- Lombok
开发工具
- Java 17
- Maven 3.6+
- Spring Boot 测试框架
- JUnit 5
快速开始
先决条件
- JDK 17
- Maven 3.6+
- Oracle 数据库实例
- MCP 服务器环境
- Cursor IDE
配置
1. 数据库配置
创建或修改 application.properties 或 application.yml 文件,添加以下设置:
oracle:
connectionString: jdbc:oracle:thin:@//your-oracle-host:1521/your-service-name
username: your-username
password: your-password
2. Cursor MCP 配置
在你的 Cursor IDE 中,在设置中配置 MCP 服务器:
{
"mcpServers": {
"oracle-mcp-server": {
"url": "http://{server-ip}:{server-port}/sse",
"enabled": true
}
}
}
此配置:
- 设置 MCP 服务器名称为 "oracle-mcp-server"
- 配置服务器 URL 为 "http://{server-ip}:{server-port}/sse"
- 将 {server-ip} 替换为你的服务器 IP 地址
- 将 {server-port} 替换为你的服务器端口号
- 启用 MCP 服务器以在 Cursor 中使用
构建项目
mvn clean install
运行应用程序
mvn spring-boot:run
API 工具
1. 列表表工具
- 名称:
list_tables
- 描述:获取 Oracle 数据库中的所有表列表
- 使用:无需参数
- 返回:以换行符分隔的表名列表
2. 描述表工具
- 名称:
describe_table
- 描述:获取指定表的结构信息
- 参数:
tableName - 要描述的表名
- 返回:CSV 格式的表结构,包括:
3. 执行 SQL 工具
- 名称:
execute_sql
- 描述:执行 Oracle SQL 语句
- 参数:
sql - 要执行的 SQL 语句
- 返回:
- 对于 SELECT:查询结果的 CSV 格式
- 对于 INSERT/UPDATE/DELETE:受影响的行数
实现细节
架构
com.mcp.oracle/
├── config/
│ └── OracleConfig.java # 数据库配置
├── service/
│ └── OracleService.java # 核心服务实现
└── OracleApplication.java # 应用程序入口点
关键组件
-
OracleConfig
- 处理数据库连接配置
- 使用 Spring 的 @ConfigurationProperties
- 安全密码管理
-
OracleService
- 实现用于数据库操作的 MCP 工具
- 管理数据库连接
- 处理 SQL 执行和结果格式化
- 实现错误处理和日志记录
-
连接管理
- 使用 Oracle 的连接池
- 实现资源自动关闭
- 平稳处理连接错误
安全考虑
- 配置中的密码加密
- 连接池管理
- 防止 SQL 注入
- 错误消息净化
测试
该项目包含全面的单元测试:
mvn test
测试覆盖率包括:
- 数据库连接
- 表列表
- 表结构描述
- SQL 执行
- 错误处理
错误处理
该服务实现了强大的错误处理:
- 连接失败
- 无效的 SQL 语句
- 缺少表/列
- 权限问题
贡献
- 分叉仓库
- 创建你的功能分支
- 提交更改
- 推送到分支
- 创建拉取请求
许可证
本项目采用 MIT 许可证 - 详情见 LICENSE 文件。
支持
对于支持和问题,请在仓库中创建一个 Issue。