使用说明
Oracle MCP服务器(Go)
这是一个用Go编写的用于Oracle数据库的模型上下文协议(MCP)服务器。它允许LLM(如Claude)与Oracle数据库交互,以检查模式、查看PL/SQL源代码和执行 只读 查询。
它使用标准 工作室 传输,这意味着它被设计为由MCP客户端(如Claude Desktop或启用MCP的IDE扩展)直接运行。
🔒 安全说明
此服务器严格为只读。 它的设计将数据安全作为首要任务。
✅ 此服务器可以做什么:
- 执行
SELECT查询您的数据 - 阅读Oracle的数据字典视图(
ALL_*,DBA_*,V$*) - 查看PL/SQL源代码
ALL_SOURCE - 使用以下命令检索DDL脚本
DBMS_METADATA.GET_DDL - 生成执行计划(将临时数据存储在
PLAN_TABLE,然后清理)
❌ 此服务器不能执行的操作:
- 无插入、更新、删除 --无法修改任何表数据
- 没有CREATE、ALTER、DROP --无法更改数据库架构
- 不执行 --无法运行存储过程或函数
- 不同意,雷沃基 --无法更改权限
- 没有真相,梅尔奇 --无法执行任何数据操作
🛡️ 我们如何确保只读安全:
- 查询验证:The
sql-select该工具明确验证查询是否以开头SELECT或WITH执行前 - 仅字典视图:所有其他工具都查询Oracle的只读数据字典视图
- 无DDL执行:DDL仅 检索到的 作为文本,从未执行
- 临时数据清理:任何临时数据(如执行计划)在使用后立即删除
备注:为了提高安全性,您可以与仅具有以下条件的数据库用户连接
SELECT所需词典视图的权限。这在数据库级别提供了深度防御。
特性
📊 表和模式工具
| 工具 | 说明 |
|---|---|
sql-select |
执行任意 SELECT 或 WITH 查询(限制为1000行) |
list-tables |
列出所有可访问的表(不包括系统架构) |
get-table-schema |
获取特定表的列定义 |
list-constraints |
列出表的所有约束(PK、FK、唯一、检查) |
get-constraint-columns |
获取构成约束的列 |
🔧 PL/SQL对象工具
| 工具 | 说明 |
|---|---|
list-objects |
按类型列出Oracle对象(过程、函数、包、类型等) |
get-object-source |
获取过程、函数、包、类型、触发器的PL/SQL源代码 |
describe-object |
获取有关任何Oracle对象的全面信息(如SQL*Plus DESCRIBE) |
📅 计划程序作业工具
| 工具 | 说明 |
|---|---|
list-jobs |
列出所有Oracle计划程序作业 |
get-job-details |
获取特定工作的详细信息 |
🔗 依赖关系工具
| 工具 | 说明 |
|---|---|
list-dependencies |
列出给定对象所依赖或使用的对象 |
👁️ 查看工具
| 工具 | 说明 |
|---|---|
list-views |
列出当前用户可访问的所有视图 |
get-view-definition |
获取视图的SQL定义 |
📇 索引工具
| 工具 | 说明 |
|---|---|
list-indexes |
列出所有索引,可选择按表筛选 |
get-index-columns |
获取构成索引的列 |
🔢 序列工具
| 工具 | 说明 |
|---|---|
list-sequences |
列出当前用户可访问的所有序列 |
⚡ 触发工具
| 工具 | 说明 |
|---|---|
list-triggers |
列出所有触发器,可选择按表筛选 |
🏷️ 类型工具
| 工具 | 说明 |
|---|---|
list-types |
列出所有用户定义的类型(对象类型、集合类型) |
get-type-attributes |
获取用户定义类型的属性(字段) |
🔄 同义词工具
| 工具 | 说明 |
|---|---|
list-synonyms |
列出当前用户可访问的所有同义词 |
🔍 搜索和分析工具
| 工具 | 说明 |
|---|---|
search-source |
在PL/SQL源代码中搜索文本,以查找表、列或变量的使用位置 |
search-columns |
在所有表中搜索列名(查找具有特定列的所有表) |
get-ddl |
使用DBMS_METADATA获取任何对象的完整SQL CREATE脚本(DDL) |
explain-plan |
获取SQL查询的执行计划以分析性能 |
get-table-stats |
获取表的优化器统计信息(行数、上次分析时间、大小) |
list-invalid-objects |
列出所有状态为INVALID、需要重新编译的数据库对象 |
📝 文档工具
| 工具 | 说明 |
|---|---|
get-table-comments |
获取表及其列的注释/文档 |
get-table-relationships |
获取表的所有外键关系(传入和传出) |
📊 监视工具
| 工具 | 说明 |
|---|---|
list-sessions |
列出活动数据库会话(需要V$SESSION权限) |
get-job-run-history |
获取调度程序作业的执行历史记录(状态、持续时间、错误) |
先决条件
- 前进(1.18+): 构建应用程序。
- Oracle数据库: 访问Oracle实例。
- 无需即时客户端: 用途
go-ora,一个纯粹的围棋手。
配置
应用程序需要以下环境变量:
ORACLE_USER:数据库用户名。ORACLE_PASSWORD:数据库密码。ORACLE_CONNECT_STRING:host:port/service_name.
建筑
快速生成
go build -o mcp_oracle.exe .
构建并发布到GitHub
要创建一个新版本,并将可执行文件上传到GitHub:
# Interactive mode - prompts for version
.\release.ps1
# Specify version directly
.\release.ps1 -Version "v1.2.0"
# Create as draft release
.\release.ps1 -Version "v1.2.0" -Draft
发布的先决条件:
- GitHub命令行界面 (
gh)已安装并验证 - 跑
gh auth login如果尚未通过身份验证
使用Claude Desktop
要将其与Claude Desktop应用程序一起使用,请将以下内容添加到配置文件中(通常 %APPDATA%\Claude\claude_desktop_config.json 在Windows上):
{
"mcpServers": {
"oracle-db": {
"command": "c:/path/to/your/mcp_oracle.exe",
"args": [],
"env": {
"ORACLE_USER": "your_user",
"ORACLE_PASSWORD": "your_password",
"ORACLE_CONNECT_STRING": "localhost:1521/XEPDB1"
},
"disabled": false,
"autoApprove": [
"sql-select",
"list-tables",
"get-table-schema",
"list-constraints",
"get-constraint-columns",
"list-objects",
"get-object-source",
"describe-object",
"list-jobs",
"get-job-details",
"list-dependencies",
"list-views",
"get-view-definition",
"list-indexes",
"get-index-columns",
"list-sequences",
"list-triggers",
"list-types",
"get-type-attributes",
"list-synonyms",
"search-source",
"search-columns",
"get-ddl",
"explain-plan",
"get-table-stats",
"list-invalid-objects",
"get-table-comments",
"get-table-relationships",
"list-sessions",
"get-job-run-history"
]
}
}
}
确保用实际值替换路径和凭据。
使用VS代码(扩展名)
如果您正在开发一个充当MCP客户端的VS Code扩展:
- 产卵
mcp_oracle.exe过程。 - 在流程选项中设置环境变量。
- 通过以下方式进行沟通
stdin和stdout使用MCP JSON-RPC协议。
工具示例
查询数据
Tool: sql-select
Arguments: {"query": "SELECT * FROM employees WHERE department_id = 10"}
列出所有程序
Tool: list-objects
Arguments: {"object_type": "PROCEDURE", "owner": "HR"}
获取源代码
Tool: get-object-source
Arguments: {"object_name": "CALCULATE_SALARY", "object_type": "PROCEDURE", "owner": "HR"}
列出工作
Tool: list-jobs
Arguments: {"owner": "MYSCHEMA"}
查找依赖关系
Tool: list-dependencies
Arguments: {"object_name": "MY_PACKAGE", "direction": "used_by"}
获取表约束
Tool: list-constraints
Arguments: {"table_name": "EMPLOYEES", "owner": "HR"}
手动测试(CLI)
您可以通过运行服务器来验证服务器是否启动,但它将挂起等待stdin上的JSON-RPC输入。
$env:ORACLE_USER="user"
$env:ORACLE_PASSWORD="password"
$env:ORACLE_CONNECT_STRING="localhost:1521/xe"
.\mcp_oracle.exe
MCP协议
此服务器实现了模型上下文协议(MCP)规范:
- 运输:Stdio(标准输入/标准输出)
- 协议:JSON-RPC 2.0
- 发现:支持
tools/list用于自动工具发现 - 执行:支持
tools/call用于工具执行
当AI代理连接时,它将通过 tools/list 方法。