Oracle MCP服务器
用于Oracle数据库操作的模型上下文协议(MCP)服务器实现,基于 spring-ai-mcp-server-webmvc-spring-boot-starter此服务提供了一组通过MCP与Oracle数据库交互的工具,利用服务器发送事件(SSE)进行实时通信。
特性
- 列出Oracle数据库中的所有表
- 描述表结构(列、数据类型、约束)
- 执行SQL语句(SELECT、INSERT、UPDATE、DELETE)
- 安全的数据库连接管理
- 通过SSE进行实时通信
- 基于spring的ai mcp服务器webmvc spring启动程序
技术栈
核心依赖关系
- 弹簧靴3.2.0
- spring-ai-mcp服务器webmvc春季启动启动程序
- Oracle JDBC驱动程序
- 模型上下文协议(MCP)框架
- 龙目
开发工具
- Java 17
- Maven 3.6+
- Spring Boot测试框架
- JUnit5
入门指南
先决条件
- JDK 17
- Maven 3.6+
- Oracle数据库实例
- MCP服务器环境
- 光标IDE
配置
1.数据库配置
创建或修改 application.properties 或 application.yml 具有以下设置:
oracle:
connectionString: jdbc:oracle:thin:@//your-oracle-host:1521/your-service-name
username: your-username
password: your-password2.光标MCP配置
在Cursor IDE中,在以下设置中配置MCP服务器:
{
"mcpServers": {
"oracle-mcp-server": {
"url": "http://{server-ip}:{server-port}/sse",
"enabled": true
}
}
}此配置:
- 将MCP服务器名称设置为“oracle MCP服务器”
- 将服务器URL配置为“http://{server ip}:{server port}/sse”
- 将{server ip}替换为服务器的ip地址 - 将{服务器端口}替换为服务器的端口号
- 启用MCP服务器以在Cursor中使用
建设项目
mvn clean install运行应用程序
mvn spring-boot:runAPI工具
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 # Database configuration
├── service/
│ └── OracleService.java # Core service implementation
└── OracleApplication.java # Application entry point关键组件
- OracleConfig
- 处理数据库连接配置 - 使用Spring的@ConfigurationProperties - 安全密码管理
- OracleService
- 为数据库操作实施MCP工具 - 管理数据库连接 - 处理SQL执行和结果格式化 - 实现错误处理和日志记录
- 连接管理
- 使用Oracle的连接池 - 实现资源的自动关闭 - 优雅地处理连接错误
安全考虑
- 配置中的密码加密
- 连接池管理
- SQL注入预防
- 错误消息清理
测试
该项目包括全面的单元测试:
mvn test测试覆盖范围包括:
- 数据库连接
- 表格列表
- 表结构说明
- SQL执行
- 错误处理
错误处理
该服务实现了稳健的错误处理:
- 连接失败
- SQL语句无效
- 缺少表/列
- 权限问题
贡献
- 分叉存储库
- 创建功能分支
- 提交您的更改
- 推到分支
- 创建拉取请求
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
支持
有关支持和问题,请在存储库中创建问题。
