单胞菌
本地的ROO代码MCP服务器连接到Oracle DB并通过安全的MCP工具返回有限的元数据集。
已经实施的项目
- Python项目通过
pip - MCP 服务器
stdio运输 - 工具
get_table_info(schema_name, table_name) - 通过环境变量连接到Oracle
- 通过匿名PL/SQL块获取表和列的描述
- 基本输入验证和错误处理
- 最小单位验证和响应格式测试
堆栈
- Python 3.11+
oracledbmcp
限制和安全
- 该服务器设计用于在没有Docker的Windows主机上运行。
- 不支持来自用户的任意SQL查询。
- 该工具仅在服务器端使用固定逻辑。
schema_name和table_name通过简单的Oracle身份验证。- 元数据只能从
DBA_TABLES,DBA_TAB_COMMENTS,DBA_TAB_COLUMNS,DBA_COL_COMMENTS.
项目结构
.
├── .env.example
├── pyproject.toml
├── readme.md
├── src/
│ └── mcporacle/
│ ├── config.py
│ ├── errors.py
│ ├── models.py
│ ├── server.py
│ ├── validation.py
│ ├── oracle/
│ │ └── client.py
│ └── services/
│ └── table_info.py
└── tests/安装
PowerShell
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -e .
Copy-Item .env.example .env设置 .env
创建 .env 基于 .env.example:
MCPORACLE_ORACLE_USER=system
MCPORACLE_ORACLE_PASSWORD=oracle
MCPORACLE_ORACLE_DSN=localhost:1521/FREEPDB1
MCPORACLE_LOG_LEVEL=INFO必需变量:
MCPORACLE_ORACLE_USERMCPORACLE_ORACLE_PASSWORDMCPORACLE_ORACLE_DSN
启动服务器
安装后:
mcporacle备选案文:
python -m mcporacle.server服务器从本地MCP服务器开始 stdio适合与Roo Code集成。
在vscode中配置roo code
Roo Code支持两层MCP服务器配置:
- 全局文件
mcp_settings.json - 设计文件
.roo/mcp.json
对于这个项目,使用项目配置更方便。 .roo/mcp.json将设置绑定到特定存储库。
Roo Code接口:
- 在Vscode中打开Roo Code面板
- 打开MCP分区
- 点击
Edit Project MCP - 插入下面的配置
推荐选项:Credentials B .env
如果项目的根已经存在 .env服务器将自己读取它。在这种情况下,只需在roo code配置中指定启动命令和 cwd.
{
"mcpServers": {
"mcporacle": {
"command": "C:\\path\\to\\mcporacle\\.venv\\Scripts\\python.exe",
"args": ["-m", "mcporacle.server"],
"cwd": "C:\\path\\to\\mcporacle",
"disabled": false
}
}
}需要替换的内容:
C:\\path\\to\\mcporacle到存储库的绝对路径C:\\path\\to\\mcporacle\\.venv\\Scripts\\python.exe在虚拟项目环境中实现Python的绝对路径
替代品:Credentials在Roo Code中
如果你不想使用 .env,您可以直接在MCP服务器设置中传递环境变量:
{
"mcpServers": {
"mcporacle": {
"command": "C:\\path\\to\\mcporacle\\.venv\\Scripts\\python.exe",
"args": ["-m", "mcporacle.server"],
"cwd": "C:\\path\\to\\mcporacle",
"env": {
"MCPORACLE_ORACLE_USER": "system",
"MCPORACLE_ORACLE_PASSWORD": "oracle",
"MCPORACLE_ORACLE_DSN": "localhost:1521/FREEPDB1",
"MCPORACLE_LOG_LEVEL": "INFO"
},
"disabled": false
}
}
}什么是重要的启动
cwd必须指向存储库的根,否则服务器找不到本地存储库.env- 通往…的道路
python.exe最好指定绝对值,以便Roo Code不依赖于激活的终端。 - 保存后
.roo/mcp.json服务器将出现在roo code中的MCP服务器列表中 - 如果服务器已经以不同的配置运行,请从MCP面板重新启动它
快速检查
将MCP服务器连接到Roo Code后,将出现工具 get_table_info例如,您可以进一步提供roo请求:
Используй tool get_table_info для схемы HR и таблицы EMPLOYEES工具 get_table_info
入口
{
"schema_name": "HR",
"table_name": "EMPLOYEES"
}出口
{
"ok": true,
"table": {
"owner": "HR",
"table_name": "EMPLOYEES",
"comment": "Employee master data",
"columns": [
{
"name": "EMPLOYEE_ID",
"data_type": "NUMBER",
"nullable": false,
"data_length": 22,
"data_precision": 10,
"data_scale": 0,
"column_id": 1,
"comment": "Primary key"
}
]
}
}如何实现查询
该工具调用匿名PL/SQL块,该块:
- 打开一个参考曲线的表信息
- 打开列列表的第二个参考曲线
- 通过绑定参数从DBA Views读取数据
这允许您保持严格限制的功能,而不接受客户端的SQL。
Oracle要求
Oracle用户应该能够阅读:
DBA_TABLESDBA_TAB_COMMENTSDBA_TAB_COLUMNSDBA_COL_COMMENTS
如果没有访问权限,工具将返回应用程序级别错误。
测试
建立依赖关系后:
python -m unittest discover -s tests -v还没有加入MVP
- 其他工具除
get_table_info - 连接池
- 元数据缓存
- Fallback 的
ALL_*/USER_*观点 - 与Oracle DB集成测试
假设
- 对于第一个MVP,选择了最简单、最安全的接口:只有一个工具,只有MetaData Lookup。
- 如果用户没有权限
DBA_*Views,服务器现在返回一个明显的错误,而不是试图自动切换到其他字典。
