Oracle数据库协议服务器

Oracle MCP Server是一个为Oracle 19c数据库设计的模型上下文协议服务器,使AI代理(如Claude)能够通过MCP与Oracle数据库交互,执行查询、检查模式并直接检索数据。

  • by Akshay-Quorum2145
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Akshay-Quorum2145/Oracle-MCP

使用说明

Oracle MCP服务器

Oracle 19c数据库的模型上下文协议(MCP)服务器。该服务器使AI代理(如Claude)能够通过MCP与Oracle数据库交互,允许它们执行查询、检查模式和直接检索数据。

特性

  • 执行SQL查询:运行SELECT查询并获取JSON格式的结果
  • 架构检查:列出表、描述表结构和预览数据
  • TNS别名支持:适用于您现有的Oracle TNS配置
  • 连接池:高效的数据库连接管理
  • 只读模式:可选安全模式,仅将操作限制为SELECT查询
  • 安全配置:基于环境的凭证管理

先决条件

  • Python 3.10或更高版本
  • Oracle 19c数据库(或兼容版本)
  • Oracle TNS配置(tnsnames.ora)或直接连接字符串

安装

PyPI(一旦发布)

pip install oracle-mcp

来源

# Clone the repository
git clone https://github.com/yourusername/oracle-mcp.git
cd oracle-mcp

# Install in development mode
pip install -e .

配置

1.设置环境变量

创建一个 .env 在项目目录中创建文件或设置环境变量:

# Required
ORACLE_USER=your_username
ORACLE_PASSWORD=your_password
ORACLE_DSN=your_tns_alias  # e.g., FC1070 or hostname:1521/service_name

# Optional
ORACLE_POOL_MIN=2
ORACLE_POOL_MAX=10
QUERY_TIMEOUT=30
READ_ONLY_MODE=false

对于TNS别名(推荐): 如果您使用TNS别名(如SQL Developer中),请设置 ORACLE_DSN 您的TNS别名(例如。, FC1070).确保您的 tnsnames.ora 文件配置正确且可访问。

对于直接连接: 或者,使用直接连接字符串: hostname:1521/service_name

2.配置MCP客户端

您可以通过两种方式调用服务器:

  • python -m oracle_mcp (推荐)--可移植,只要Python在PATH上就可以工作。不依赖 Scripts/ MCP客户端正在解析目录。
  • oracle-mcp --控制台脚本入口点。仅当Python Scripts/ 目录(例如。 %APPDATA%\Python\Python3XX\Scripts 在Windows上)位于PATH上,并且您的MCP客户端继承了该PATH。

如果 oracle-mcp 为您提供以下错误 oracle-mcp required by oracle-mcp is not found,使用 python -m oracle_mcp 相反,形式。

克劳德桌面版

编辑配置文件:

窗户: %APPDATA%\Claude\claude_desktop_config.json macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "oracle": {
      "command": "python",
      "args": ["-m", "oracle_mcp"],
      "env": {
        "ORACLE_USER": "your_username",
        "ORACLE_PASSWORD": "your_password",
        "ORACLE_DSN": "FC1070"
      }
    }
  }
}

GitHub副本(VS代码)

创建或编辑 .vscode/mcp.json 在您的工作区中(或添加到用户设置中):

{
  "servers": {
    "oracle": {
      "type": "stdio",
      "command": "python",
      "args": ["-m", "oracle_mcp"],
      "env": {
        "ORACLE_USER": "your_username",
        "ORACLE_PASSWORD": "your_password",
        "ORACLE_DSN": "FC1070"
      }
    }
  }
}

安全说明: 为了更好的安全性,使用环境变量而不是硬编码凭据:

{
  "mcpServers": {
    "oracle": {
      "command": "python",
      "args": ["-m", "oracle_mcp"],
      "env": {
        "ORACLE_USER": "${ORACLE_USER}",
        "ORACLE_PASSWORD": "${ORACLE_PASSWORD}",
        "ORACLE_DSN": "${ORACLE_DSN}"
      }
    }
  }
}

然后在系统中设置这些环境变量。

用法

配置后,Oracle MCP服务器为AI代理提供以下工具:

工具

  1. execute_query -执行SELECT查询

    Execute a SQL query:
    SELECT * FROM employees WHERE department = 'IT'
    
  2. list_tables -列出所有表和视图

    Show me all tables in the database
    
  3. describe_table -获取表结构

    Describe the structure of the employees table
    
  4. preview_table -从表中获取示例数据

    Show me a preview of the employees table
    
  5. execute_dml -执行INSERT/UPDATE/DELETE(如果禁用只读模式)

    Insert a new employee record
    

资源

  • oracle://connection -查看数据库连接信息
  • oracle://schema -查看架构元数据

交互示例

在MCP服务器运行时,您可以询问Claude(或任何与MCP兼容的AI代理):

  • “数据库中有哪些表可用?”
  • “显示EMPLOYEES表的结构”
  • “运行查询以查找IT部门的所有员工”
  • “从ORDERS表中获取数据样本”
  • “客户中的记录总数是多少?”

AI代理将使用适当的MCP工具与您的Oracle数据库交互并提供结果。

发展

项目结构

oracle-mcp/
├── src/oracle_mcp/
│   ├── __init__.py       # Package initialization
│   ├── server.py         # MCP server implementation
│   ├── oracle_client.py  # Oracle database client
│   └── config.py         # Configuration management
├── tests/                # Test files
├── pyproject.toml        # Package configuration
└── README.md            # This file

运行测试

# Install development dependencies
pip install -e ".[dev]"

# Run tests
pytest

配电楼

# Install build tools
pip install build

# Build the package
python -m build

故障排除

TNS配置问题

如果遇到“TNS:无法解析连接标识符”错误:

  1. 验证您的 tnsnames.ora 文件位置
  2. 检查一下 ORACLE_DSN 匹配您的条目 tnsnames.ora
  3. 确保 TNS_ADMIN 环境变量指向包含以下内容的目录 tnsnames.ora
  4. 请尝试使用直接连接字符串: hostname:1521/service_name

连接错误

  • 验证数据库凭据是否正确
  • 检查数据库是否可以从您的网络访问
  • 确保Oracle数据库正在运行并接受连接
  • 如果远程连接,请查看防火墙规则

权限问题

  • 确保数据库用户具有适当的SELECT权限
  • 对于DML操作,确保授予写入权限
  • 检查用户是否可以访问所需的架构

安全最佳实践

  1. 从不提交凭据 -使用环境变量或安全保管库
  2. 使用只读模式 如果可能-设置 READ_ONLY_MODE=true
  3. 限制数据库权限 -仅向数据库用户授予必要的权限
  4. 使用专用数据库用户 -创建特定用户以访问AI代理
  5. 监控查询 -定期查看查询日志
  6. 设置查询超时 -通过以下方式防止长时间运行的查询 QUERY_TIMEOUT

贡献

欢迎投稿!请随时提交拉取请求。

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。

致谢

支持

有关问题、疑问或贡献,请访问 GitHub 仓库.