Token导航 LogoToken导航

MCP Server · 数据服务

Oracle MCP Sdm With Guardrails

一个为Oracle数据库设计的具有高级安全特性的模型上下文协议(MCP)服务器,提供全面的查询安全功能,支持通过StrongDM代理和在Apple Silicon Mac上运行。

stdio官方级别未说明来源级核验工具 4
PythonClaude数据分析Claude Desktop

快速开始

作者 / 组织
mofiaboss
提供方
mofiaboss

工具数量

4

来源目录标注

资源数量

0

来源目录标注

提示词数量

0

来源目录标注

GitHub Star

0

仓库热度

收录来源

1 个

MCP World

选型结论

Oracle MCP Sdm With Guardrails 属于数据服务类 MCP Server,公开资料标注 4 个工具,通过stdio 本地进程接入,适配 Claude Desktop、Claude,有可以直接复制的安装命令;接入前先确认权限范围。

分类

数据服务

传输方式

stdio

认证方式

无需认证

部署方式

公开资料未说明

安装与配置

安装命令

pip install -r requirements.txt

公开命令不是通用的启动方式,拼不出可靠配置示例;请在客户端 MCP 配置里按官方文档填写 command 和 args。

上手步骤

  1. 1

    准备运行环境

    stdio 服务在本地起进程,需要先装好 对应的运行时,再按安装命令拉取依赖。

  2. 2

    安装服务

    复制下面的安装命令执行;命令里带占位符的位置换成自己的密钥或路径。

  3. 3

    写入客户端配置

    在客户端的 MCP 配置里填启动命令和参数,保存后完全退出客户端再打开,让新配置生效。

  4. 4

    验证是否可用

    连接成功后客户端会列出 4 个工具,随便调一个只读工具确认能返回结果。

接入前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

详细介绍

具有高级安全功能的Oracle MCP服务器

一种用于Oracle数据库的模型上下文协议(MCP)服务器,具有全面的查询安全功能,旨在通过StrongDM代理和Apple Silicon Mac工作。

🔒 安全审核: ✅ 已修复所有漏洞(2025-11-21)

🛡️ 为什么选择MCP?

与其他数据库MCP服务器不同,此实现包括 生产级安全特性:

  • ✅ SQL注入保护 -对所有入口点进行严格的输入验证
  • ✅ 方块笛卡尔积 -防止可能锁定数据库的意外交叉连接
  • ✅ 查询复杂性评分 -在执行前拒绝过于复杂的查询
  • ✅ 结果集限制 -自动强制最大行返回(默认值为10000)
  • ✅ 只读执行 -阻止所有写操作(DELETE、UPDATE、INSERT、DROP、UNION等)
  • ✅ 多层验证 -模式检测、关键字屏蔽和复杂性分析
  • ✅ 凭证安全 -密码从未在进程列表中公开
  • ✅ 评论删除 -防止基于SQL注释的绕过
  • ✅ 详细日志记录 -所有被阻止的查询都会记录原因

安全研究: 43%的流行MCP服务器包含SQL注入漏洞。此实现采用安全第一设计构建,并通过了全面的安全审计。

🏗️ 建筑

此MCP使用 Java子流程模式 通过JDBC连接到Oracle:

┌─────────────────┐
│ Claude/AI Agent │
└────────┬────────┘
         │ MCP Protocol
┌────────▼────────────────┐
│ oracle_mcp_server.py    │  ← Python MCP Server
│  + Query Validator      │  ← SAFETY LAYER
└────────┬────────────────┘
         │ Subprocess
┌────────▼────────────────┐
│  Java JDBC Process      │  ← OracleQuery.java
│  ojdbc11.jar            │
└────────┬────────────────┘
         │ TCP/StrongDM
┌────────▼────────────────┐
│  Oracle Database        │
└─────────────────────────┘

为什么选择Java子进程?

创建此实现是因为 现有的MCP解决方案不起作用 使用StrongDM+苹果硅:

  • ❌ mcp炼金术 使用Python oracledb → 失败(StrongDM不兼容)
  • ❌ Python Java桥 (JPype1,PyJNIus)→ 撞上苹果硅
  • ✅ Java JDBC子进程 → 使用经过验证的DataGraph JDBC驱动程序

优点:

  • 适用于Python库失败的StrongDM代理
  • 经过验证的稳定性(与JetBrains DataGraph相同的驱动程序)
  • 进程隔离可防止崩溃
  • Apple Silicon上没有原生库的复杂性

🚀 快速开始

先决条件

  • Java 21+(建议使用OpenJDK)
  • Python 3.12+
  • Oracle JDBC驱动程序(ojdbc11)
  • 访问Oracle数据库(直接或通过StrongDM代理)

安装

  1. 克隆存储库:
   git clone https://github.com/mofiaboss/oracle-mcp-sdm-with-guardrails.git
   cd oracle-mcp-sdm-with-guardrails
  1. 创建虚拟环境:
   # Use python3.10 or later (python3.12 recommended)
   python3.12 -m venv oracle_mcp_venv
   source oracle_mcp_venv/bin/activate  # On Windows: oracle_mcp_venv\Scripts\activate
  1. 安装Python依赖项:
   pip install -r requirements.txt
  1. 下载Oracle JDBC驱动程序:

- 下载 ojdbc11-23.5.0.24.07.jar (或稍后)从 甲骨文 - 放置在项目目录中或记下路径

  1. 下载JSON库:

- 下载 json-20240303.jar 从 Maven中央仓库 - 重命名为 json.jar 并放置在项目目录中

  1. 编译Java查询程序:
   export JDBC_JAR="/path/to/ojdbc11-23.5.0.24.07.jar"
   javac -cp ".:json.jar:$JDBC_JAR" OracleQuery.java
  1. 配置环境变量:
   cp .env.example .env
   # Edit .env with your Oracle connection details
  1. 更新路径 oracle_jdbc.py:

编辑第38-47行以匹配您的Java和JDBC路径:

   self.java_home = Path("/opt/homebrew/opt/openjdk@21")
   self.jdbc_jar = Path("/path/to/ojdbc11-23.5.0.24.07.jar")

测试

# Test safety features
python test_safety.py

# Test Python wrapper
python oracle_jdbc.py

🔧 配置

Claude桌面配置

添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):

{
  "mcpServers": {
    "oracle": {
      "command": "/path/to/oracle_mcp_venv/bin/python",
      "args": [
        "/path/to/oracle_mcp_server.py"
      ],
      "env": {
        "ORACLE_HOST": "127.0.0.1",
        "ORACLE_PORT": "10006",
        "ORACLE_SERVICE_NAME": "ORCL",
        "ORACLE_USER": "your_username",
        "ORACLE_PASSWORD": "your_password"
      }
    }
  }
}

环境变量

变量描述默认值
ORACLE_HOST数据库主机127.0.0.1
ORACLE_PORT数据库端口10006
ORACLE_SERVICE_NAMEOracle服务名称ylvoprd
ORACLE_USER数据库用户名username
ORACLE_PASSWORD数据库密码password

安全配置

调整安全设置 oracle_mcp_server.py (第48-52行):

validator = QueryValidator(
    max_complexity=50,      # Maximum complexity score (lower = stricter)
    max_rows=10000,         # Maximum result rows
    allow_cross_joins=False # Enable to allow CROSS JOIN (not recommended)
)

🛡️ 安全功能

看 安全_食品S.md 以获取完整的文档。

什么被阻止

-- ❌ Cartesian products
SELECT * FROM orders, customers

-- ❌ Explicit cross joins
SELECT * FROM users CROSS JOIN orders

-- ❌ All write operations
DELETE FROM users WHERE id = 1
UPDATE orders SET status = 'X'
INSERT INTO users VALUES (1, 'test')
DROP TABLE sensitive_data
TRUNCATE TABLE logs

-- ❌ Overly complex queries (score > 50)
SELECT * FROM t1, t2, t3, t4 WHERE t1.id = 1

允许的内容(带警告)

-- ✅ Simple queries
SELECT * FROM users WHERE id = 123

-- ✅ Proper joins with conditions
SELECT * FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE o.status = 'PENDING'

-- ✅ Aggregate queries
SELECT COUNT(*) FROM orders WHERE created_date > SYSDATE - 7

查询复杂性评分

查询的评分基于:

  • +5 每张桌子点数
  • +20 每个逗号分隔表的点数(隐式连接)
  • +10 每子查询点数
  • +5 得分 DISTINCT
  • +3 每个聚合函数的点数
  • +10 得分 SELECT * 有多张桌子

最高得分: 50 (可配置)

📊 查询响应格式

成功的查询返回验证元数据:

{
  "success": true,
  "row_count": 42,
  "rows": [...],
  "validation": {
    "complexity_score": 15,
    "warnings": [
      "Query involves 2 tables. Ensure proper JOIN conditions exist."
    ],
    "row_limit_applied": 10000
  }
}

被阻止的查询返回详细错误:

{
  "success": false,
  "error": "Dangerous pattern detected: CROSS JOIN...",
  "complexity_score": 0,
  "warnings": []
}

🔌 可用的MCP工具

🎯 推荐的查询工作流

为了获得最大的安全性,请务必在执行前预览查询:

  1. 先预览: 使用 preview_query 验证并查看复杂性得分
  2. 评审: Claude将向您展示查询和复杂性的详细信息
  3. 确认: 明确批准查询执行
  4. 执行: 克劳德将使用 query_oracle 运行它

这个两步工作流程确保您始终知道将对数据库运行什么。

preview_query ⭐ 先用这个

预览和验证SQL查询,而无需执行它们。显示:

  • 将执行的确切查询
  • 复杂性得分(0-50,越低越简单)
  • 任何验证警告或错误
  • 是否应用行限制
  • 安全评估

例子:

Preview this query: SELECT * FROM customers WHERE country = 'US'

答复包括:

{
  "preview_mode": true,
  "query_to_execute": "SELECT * FROM customers WHERE country = 'US'",
  "validation": {
    "is_safe": true,
    "complexity_score": 8,
    "max_complexity": 50,
    "complexity_explanation": "Lower is simpler. Score based on: JOINs (+5 each), subqueries (+3 each), GROUP BY (+2), aggregates (+1 each)",
    "warnings": ["Table 'customers' used - ensure proper WHERE clause"]
  },
  "safety_limits": {
    "max_rows": 10000,
    "row_limit_will_be_applied": true
  }
}

query_oracle

执行带有安全验证的SQL SELECT查询。

重要提示: 只能在使用后调用 preview_query 并获得用户确认。

例子:

Query the database: SELECT * FROM customers WHERE country = 'US'

describe_table

获取表结构、列、数据类型和主键。

例子:

Describe the ORDERS table structure

list_tables

列出数据库中所有可访问的表。

例子:

List all tables in the current schema

📁 项目结构

oracle-mcp-server/
├── oracle_mcp_server.py    # Main MCP server
├── oracle_jdbc.py           # JDBC wrapper
├── query_validator.py       # Safety validation layer
├── OracleQuery.java         # Java JDBC query program
├── OracleQuery.class        # Compiled Java class
├── json.jar                 # JSON library for Java
├── test_safety.py           # Safety feature tests
├── SAFETY_FEATURES.md       # Detailed safety documentation
├── README.md                # This file
├── requirements.txt         # Python dependencies
└── .env.example            # Environment configuration template

🐛 故障排除

连接失败

  1. 验证Java安装:
   java -version
   # Should show Java 21+
  1. 测试数据库连接:
   # Via SQLPlus or another tool
   sqlplus username/password@//host:port/service_name
  1. 检查StrongDM(如果使用):
   ps aux | grep sdm
   nc -zv 127.0.0.1 10006
  1. 验证JDBC jar路径:
   ls -la /path/to/ojdbc11*.jar

Java错误

  • 类未找到异常:JDBC jar不在类路径中
  • 不满足链接错误:Java版本不匹配
  • 连接被拒绝:在指定的主机/端口上无法访问数据库

MCP服务器未加载

  1. 完全重新启动克劳德桌面
  2. 检查Claude Desktop中的日志是否有错误
  3. 直接测试Python脚本: python oracle_mcp_server.py
  4. 验证已安装的所有依赖项: pip list

🤝 贡献

欢迎投稿!需要改进的地方:

  • \[\]添加对更多数据库类型的支持
  • \[\]实现连接池
  • \[\]添加查询计划分析
  • \[\]创建Docker容器
  • \[\]添加指标/监控端点
  • \[\]支持Oracle钱包身份验证

📝 许可证

MIT许可证-有关详细信息,请参阅许可证文件

🙏 致谢

  • 为解决Apple Silicon上StrongDM代理兼容性问题而构建
  • 受Datadog安全实验室关于MCP漏洞的安全研究启发
  • 基于OWASP SQL注入预防指南的查询验证模式
  • 使用JetBrains DataGraph中经过验证的Oracle JDBC驱动程序

📚 相关文件

______________________________________________________________________

安全说明: 默认情况下,此MCP服务器阻止写入操作。如果你需要写访问权限,你应该实现适合你环境的额外身份验证和授权层。

工具与能力

工具数量

4

资源数量

0

提示词数量

0

能力标签

数据库安全Python本地部署SQL注入防护查询验证Oracle数据库MCP协议

支持客户端

Claude DesktopClaude

数量来自来源目录的标注,具体工具清单以官方文档为准。

典型使用场景

用自然语言查库

不用手写 SQL,直接问数据,让模型组织查询语句。

数据巡检

定期拉指标、做对比,把异常项整理成一段说明。

打通业务数据

把数据库、数仓和接口接进同一个上下文,减少导出再上传。

选择建议

值得选的地方

  • 只提供 4 个工具,职责集中,接入后不容易误操作。
  • 有现成的安装命令,不用自己找入口,照着跑就能起服务。
  • 已经适配 Claude Desktop、Claude,换客户端不用重新研究配置。

先想清楚的地方

  • stdio 方式要求本地装好 运行环境,换机器要重新装一遍。
  • 第三方目录整理,版本更新和行为细节以官方仓库为准。

更适合

  • 需要在数据服务场景里让模型直接调用外部能力的人。
  • 已经在用 Claude Desktop 的用户,接入路径最短。
  • 想先快速试一下、能接受在本地跑服务的人。

不太适合

  • 完全不想在本地装环境的人。
  • 需要厂商级 SLA 和技术支持的生产环境。

同类对比

5 个同类
MCP Server工具数传输方式安装命令收录来源最后核验
Oracle MCP Sdm With Guardrails

MCP World · 本页

4stdio有1 个2026-05-17
Memory 9d25f64e

MCP World

9未说明未标注1 个2026-05-17
Prisma MCP Server

MCP World

0stdio有3 个2026-05-17
Astr Bot

MCP World

0stdio有1 个2026-05-17
Getzep MCP

MCP World

9stdio有1 个2026-05-17

按同分类和工具数量挑出最接近的几条,字段以各自详情页为准。

常见问题

5 条

Oracle MCP Sdm With Guardrails 怎么安装?

公开资料给出的安装命令是 pip install -r requirements.txt,运行环境为 未标注。装完后按客户端要求写进 MCP 配置,重启客户端生效。

Oracle MCP Sdm With Guardrails 怎么在 Claude Desktop、Cursor 里配置?

它是stdio 本地进程,客户端配置里要写启动命令和参数,运行环境是 未标注;保存后完全退出客户端再打开,配置才会生效。

Oracle MCP Sdm With Guardrails 收费吗?

本站只整理公开资料,不代收费用,也没有标注具体价格。是否收费取决于服务本身和背后的接口额度,正式使用前按官方说明确认。

Oracle MCP Sdm With Guardrails 需要 API Key 吗?

公开资料标注为无需认证,装好就能连;如果实际调用时报鉴权错误,按官方文档补上凭据。

Oracle MCP Sdm With Guardrails 支持哪些客户端?

公开资料标注支持 Claude Desktop、Claude;其他客户端只要能配置 MCP Server,也能用同样的命令或地址接入。

来源信息

继续浏览同类 MCP