Skip to main content
Glama
tannerpace

Oracle Database MCP Server

by tannerpace

Oracle Database MCP 服务器

一个模型上下文协议 (MCP) 服务器,使 GitHub Copilot 和其他 LLM 能够对 Oracle 数据库执行只读 SQL 查询。

npm version License: Dual (GPLv3 / Commercial)


目录

  1. macOS 设置 (Apple Silicon — M1/M2/M3/M4)

  2. 安装

  3. 配置 VS Code

  4. 可选:创建只读用户

  5. 功能

  6. 可用工具

  7. 配置参考

  8. 开发

  9. 安全注意事项

  10. 故障排除

  11. 文档

  12. 许可


Related MCP server: Oracle ADB MCP Server

🍎 macOS 设置 (Apple Silicon — M1/M2/M3/M4)

这是 Mac 用户的推荐路径。我们使用 Colima 作为 Docker 运行时(比 Docker Desktop 更轻量,且在 Apple Silicon 上原生运行),并从源代码构建 MCP 服务器。

第 1 步 — 安装先决条件

Homebrew(如果已安装则跳过):

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Node.js v18+(通过 nvm,推荐):

# Install nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# Reload your shell config, then install Node
source ~/.zshrc
nvm install 20
nvm use 20
node --version    # should print v20.x.x

或者通过 Homebrew:

brew install node
node --version

Colima + Docker CLI

brew install colima docker

第 2 步 — 启动 Colima

Colima 是 macOS 的轻量级容器运行时 — 无需 Docker Desktop。

# Start with enough resources for Oracle XE (needs at least 2GB RAM)
colima start --cpu 2 --memory 4 --disk 30

# Verify Docker is working
docker ps

如果你已经运行了内存较小的 Colima,请运行 colima stop 然后使用上述标志重启。

第 3 步 — 拉取并启动 Oracle XE

Oracle 的容器注册表要求在拉取镜像前拥有一个免费账户

  1. https://container-registry.oracle.com 创建一个免费账户

  2. 登录,导航至 Database → express,然后点击 Accept License Agreement

  3. 从终端登录:

docker login container-registry.oracle.com
# Enter your Oracle account email and password when prompted
  1. 拉取并运行 Oracle XE 21c:

docker run -d \
  --name oracle-xe \
  -p 1521:1521 \
  -p 5500:5500 \
  -e ORACLE_PWD=OraclePwd123 \
  container-registry.oracle.com/database/express:latest
  1. 等待其就绪(首次启动需要 60–90 秒):

# Poll health status — wait for "healthy"
watch -n 5 'docker inspect --format="{{.State.Health.Status}}" oracle-xe'

# Or tail the logs directly
docker logs -f oracle-xe
# Look for: DATABASE IS READY TO USE!

你的数据库现已在以下地址可用:

服务名称说明: Oracle XE 21c 有两个服务名称:

  • XE — 容器数据库 (CDB),用于 SYSTEM 用户

  • XEPDB1 — 可插拔数据库 (PDB),用于常规应用程序用户

稍后启动和停止数据库:

docker start oracle-xe
docker stop oracle-xe

第 4 步 — 克隆并构建 MCP 服务器

git clone https://github.com/tannerpace/mcp-oracle-database.git
cd mcp-oracle-database
npm install
npm run build

第 5 步 — 配置环境

cp .env.example .env

编辑 .env 以使用本地 Oracle XE(适合试用):

ORACLE_CONNECTION_STRING=localhost:1521/XE
ORACLE_USER=system
ORACLE_PASSWORD=OraclePwd123

对于生产环境,请先创建一个专用的只读用户 — 参见 创建只读用户

第 6 步 — 测试服务器

# Core tests: connects to Oracle, queries schema and version
npm run test-client

# Schema discovery tool tests
npm run test-discovery

预期输出:

✅ All tests completed successfully!

📊 Test Summary:
1. List Tools: ✅
2. List Tables (fast): ✅
3. List Tables (with counts): ✅
4. Describe Table: ✅
5. Get Table Relations: ✅
6. Get Sample Values: ✅
7. Suggest Related Tables: ✅
8. Cache Test: ✅

第 7 步 — 连接 VS Code

参见下方的 配置 VS Code


📦 安装

从源代码构建(推荐)

为你提供最新代码,并允许你在连接到 Copilot 之前运行测试套件以验证一切正常。

git clone https://github.com/tannerpace/mcp-oracle-database.git
cd mcp-oracle-database
npm install
npm run build

从 npm 安装

如果你只想获取服务器二进制文件而无需克隆源代码:

npm install -g mcp-oracle-database

🔌 配置 VS Code

选项 A — 从源代码(推荐)

在你的 VS Code 工作区中创建 .vscode/mcp.json(或添加到你的全局 MCP 配置中):

{
  "servers": {
    "oracleDatabase": {
      "type": "stdio",
      "command": "node",
      "args": ["/absolute/path/to/mcp-oracle-database/dist/server.js"],
      "env": {
        "ORACLE_CONNECTION_STRING": "localhost:1521/XE",
        "ORACLE_USER": "system",
        "ORACLE_PASSWORD": "OraclePwd123",
        "ORACLE_POOL_MIN": "2",
        "ORACLE_POOL_MAX": "10",
        "QUERY_TIMEOUT_MS": "30000",
        "MAX_ROWS_PER_QUERY": "1000",
        "ENFORCE_READ_ONLY_QUERIES": "true",
        "MCP_MAX_RESPONSE_CHARS": "50000",
        "MCP_MAX_ROWS_IN_RESPONSE": "200",
        "MCP_MAX_STRING_LENGTH": "500"
      }
    }
  }
}

/absolute/path/to/mcp-oracle-database 替换为你机器上的真实路径(例如 /Users/yourname/GITHUB/mcp-oracle-database)。

选项 B — 从 npm 全局安装

{
  "servers": {
    "oracleDatabase": {
      "type": "stdio",
      "command": "mcp-database-server",
      "env": {
        "ORACLE_CONNECTION_STRING": "localhost:1521/XE",
        "ORACLE_USER": "your_user",
        "ORACLE_PASSWORD": "your_password",
        "ORACLE_POOL_MIN": "2",
        "ORACLE_POOL_MAX": "10",
        "QUERY_TIMEOUT_MS": "30000",
        "MAX_ROWS_PER_QUERY": "1000",
        "ENFORCE_READ_ONLY_QUERIES": "true",
        "MCP_MAX_RESPONSE_CHARS": "50000",
        "MCP_MAX_ROWS_IN_RESPONSE": "200",
        "MCP_MAX_STRING_LENGTH": "500"
      }
    }
  }
}

保存配置后,重新加载 VS Code 并在 Agent 模式下打开 Copilot 聊天。尝试:

"What tables are in the database?"
"Describe the HELP table"
"Show me 5 rows from the HELP table"

可选:创建只读用户

使用 SYSTEM 进行本地测试没问题,但对于任何真实数据库,请创建一个专用的只读用户。

连接到 Oracle(例如通过 sqlplus 或像 DBeaver 这样的 GUI):

-- For Oracle XE local Docker, connect with:
-- sqlplus system/OraclePwd123@localhost:1521/XEPDB1

CREATE USER readonly_user IDENTIFIED BY secure_password;
GRANT CREATE SESSION TO readonly_user;
GRANT SELECT ANY TABLE TO readonly_user;

-- Or restrict to specific tables:
-- GRANT SELECT ON myschema.orders TO readonly_user;
-- GRANT SELECT ON myschema.customers TO readonly_user;

然后更新你的 .env 或 MCP 配置:

ORACLE_CONNECTION_STRING=localhost:1521/XEPDB1
ORACLE_USER=readonly_user
ORACLE_PASSWORD=secure_password

功能

  • 🔒 只读访问 — 出于安全考虑,使用专用的只读数据库用户

  • 📡 stdio 传输 — 通过标准输入/输出进行通信(无需 HTTP 服务器)

  • 连接池 — 高效的 Oracle 连接管理

  • 📊 模式自省 — 查询表和列信息

  • 🔍 高级模式发现 — 5 种用于发现表、关系和数据模式的专用工具

  • 💾 内存缓存 — 通过 LRU 缓存实现快速重复访问(5 分钟 TTL)

  • 📝 审计日志 — 所有查询均带有执行指标记录

  • ⏱️ 超时保护 — 防止长时间运行的查询

  • 🛡️ 结果限制 — 可配置的行数限制以防止内存问题

  • 🍎 无需 Oracle 客户端 — 使用 node-oracledb Thin 模式(纯 JS,可在 Apple Silicon 上运行)

架构

GitHub Copilot / LLM
        ↓ (MCP Protocol)
  MCP Client (spawns process)
        ↓ (JSON-RPC over stdio)
    MCP Server (Node.js)
        ↓ (node-oracledb Thin Mode)
  Oracle Database (read-only user)

可用工具

核心工具

query_database

执行只读 SQL SELECT 查询。

{
  "query": "SELECT table_name FROM user_tables FETCH FIRST 10 ROWS ONLY",
  "maxRows": 10
}

get_database_schema

获取特定表的表列表或列详细信息。

{ "tableName": "ORDERS" }

模式发现工具

用于全面模式自省的五种专用工具:

工具

用途

缓存

listTables

所有可访问的表,包含元数据和可选的行数

describeTable

列类型、约束、主键/外键

getTableRelations

JSON 格式的外键关系

getSampleValues

用于理解数据格式的样本值

suggestRelatedTables

通过外键、命名、共享列查找相关表

📖 参见 模式发现文档 获取完整详细信息和示例。

Copilot 提示词示例

"List all tables in the database"
"Describe the ORDERS table and its relationships"
"How many active users are there?"
"What are the top 5 products by sales this month?"
"Show me recent transactions for customer ID 12345"

配置参考

所有设置均可放入 .env 或作为 VS Code MCP 配置中的 env 键。

# Oracle Database Connection
ORACLE_CONNECTION_STRING=localhost:1521/XE    # host:port/service
ORACLE_USER=system
ORACLE_PASSWORD=OraclePwd123

# Connection Pool
ORACLE_POOL_MIN=2
ORACLE_POOL_MAX=10

# Query Safety
QUERY_TIMEOUT_MS=30000           # max query time in ms
MAX_ROWS_PER_QUERY=1000          # max rows Oracle will fetch
MAX_QUERY_LENGTH=50000           # max SQL length in chars
ENFORCE_READ_ONLY_QUERIES=true   # reject non-SELECT statements

# MCP Response Limits
MCP_MAX_RESPONSE_CHARS=50000     # hard cap on total response size
MCP_MAX_ROWS_IN_RESPONSE=200     # max rows per tool call response
MCP_MAX_STRING_LENGTH=500        # max chars per string field

# Logging
LOG_LEVEL=info
ENABLE_AUDIT_LOGGING=true
ENABLE_FILE_LOGGING=true
LOG_DIR=./logs
NODE_ENV=development

大型模式: 如果你的数据库有 500 个以上的表,请将 MCP_MAX_RESPONSE_CHARS 提高到 100000


开发

脚本

npm run build          # Compile TypeScript → dist/
npm run dev            # Watch mode compilation
npm run clean          # Remove dist/
npm run typecheck      # Type-check without compiling
npm start              # Start MCP server (requires build first)
npm run test-client    # Core tool tests against live Oracle DB
npm run test-discovery # Schema discovery tool tests

项目结构

mcp-oracle-database/
├── src/
│   ├── server.ts               # MCP server entry point
│   ├── client.ts               # Core test client
│   ├── test-discovery.ts       # Discovery tools test client
│   ├── config.ts               # Zod-validated configuration
│   ├── database/
│   │   ├── oracleConnection.ts # Connection pool manager
│   │   ├── queryExecutor.ts    # Query execution + safety checks
│   │   └── types.ts
│   ├── tools/
│   │   ├── queryDatabase.ts    # query_database tool
│   │   ├── getSchema.ts        # get_database_schema tool
│   │   └── discovery/          # 5 schema discovery tools + cache
│   └── utils/
│       ├── logger.ts           # Lightweight file + console logger
│       └── responseFormatter.ts # MCP response size management
├── dist/                       # Compiled output (git-ignored)
├── .env                        # Your credentials (git-ignored)
├── .env.example                # Template
└── package.json

安全注意事项

  1. 只读用户 — 生产环境中的数据库用户应仅拥有 SELECT 权限

  2. 无注入保护 — 服务器信任 LLM 生成有效的 SQL;只读用户是安全网

  3. 查询限制 — 行数和超时限制可防止资源耗尽

  4. 审计日志 — 所有查询均带有时间戳记录以供审查

  5. 本地使用 — 该服务器旨在直接在你的机器上运行;它可以本地运行,同时访问远程数据库。


故障排除

Colima 未运行 (macOS)

colima status
colima start --cpu 2 --memory 4   # Oracle needs at least 2GB RAM
docker ps                          # verify Docker is available

Oracle 容器问题

# Check if container exists
docker ps -a | grep oracle-xe

# View startup logs
docker logs oracle-xe

# Already exists but stopped — just start it
docker start oracle-xe

# Check health status
docker inspect --format='{{.State.Health.Status}}' oracle-xe
# Wait for: healthy

连接失败

Error: ORA-12545: Connect failed because target host or object does not exist
  • Oracle 是否在运行? docker ps | grep oracle-xe

  • 检查端口是否已映射:docker ps 应显示 0.0.0.0:1521->1521/tcp

  • SYSTEM 用户尝试 localhost:1521/XE,其他用户尝试 localhost:1521/XEPDB1

服务名称错误

服务

用途

localhost:1521/XE

SYSTEM 用户,DBA 操作

localhost:1521/XEPDB1

常规应用程序用户

权限被拒绝

Error: ORA-00942: table or view does not exist

授予用户 SELECT 权限:

GRANT SELECT ANY TABLE TO your_user;

需要 Oracle 容器注册表登录

Error: unauthorized: authentication required
  1. https://container-registry.oracle.com 创建一个免费账户

  2. 接受 Database → express 的许可协议

  3. 运行 docker login container-registry.oracle.com

响应过大

Response for tool 'listTables' exceeded MCP_MAX_RESPONSE_CHARS

.env 或你的 VS Code MCP 配置中提高限制:

MCP_MAX_RESPONSE_CHARS=100000

Thin 模式说明

本项目使用 node-oracledb Thin 模式 — 一种纯 JavaScript 驱动程序,无需 Oracle Instant Client。它适用于包括 Apple Silicon Mac 在内的所有平台。


文档

📚 集成指南:

📝 自定义指令:


Oracle 是 Oracle Corporation 的注册商标。 本项目不隶属于 Oracle Corporation,也不受其认可或赞助。


许可

本项目基于 GNU 通用公共许可证 v3.0 (GPLv3) 发布。

🟢 开源 — GPLv3

如果你选择 GPLv3,你将获得书面形式的 GPLv3 权利,且没有额外的用途限制。参见 LICENSE 获取完整许可文本,参见 LICENSE.md 获取简短许可概述。

🔵 商业与政府 — 付费许可

对于希望获得替代条款(如协商的商业条款、保修承诺或专有分发权)的各方,作者可提供单独的商业许可。

📄 参见 LICENSE.md 获取许可概述。 📄 参见 COMMERCIAL_LICENSE.md 获取单独的商业/政府许可条款。


贡献

欢迎贡献!请提交 issue 或 pull request。

A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
32dResponse time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Read-only bank access for your AI agent. Connects Claude, ChatGPT, Cursor, Gemini, Codex.

  • Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.

  • Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tannerpace/mcp-oracle-database'

If you have feedback or need assistance with the MCP directory API, please join our Discord server