Oracle Database MCP Server
Oracle Database MCP Server
GitHub Copilotやその他のLLMが、Oracleデータベースに対して読み取り専用のSQLクエリを実行できるようにするModel Context Protocol (MCP) サーバーです。
目次
Related MCP server: Oracle ADB MCP Server
🍎 macOSのセットアップ (Apple Silicon — M1/M2/M3/M4)
これはMacユーザーに推奨される手順です。DockerランタイムとしてColimaを使用し(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 --versionColima + 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のコンテナレジストリからイメージをプルするには、無料アカウントが必要です。
https://container-registry.oracle.com で無料アカウントを作成します。
ログインし、Database → express に移動して、Accept License Agreementをクリックします。
ターミナルからログインします:
docker login container-registry.oracle.com
# Enter your Oracle account email and password when promptedOracle 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準備ができるまで待ちます(初回起動時は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!データベースは以下で利用可能です:
接続文字列:
localhost:1521/XESYSTEMパスワード:
OraclePwd123Web UI (EM Express): http://localhost:5500/em
サービス名の注意: Oracle XE 21cには2つのサービス名があります:
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ローカルのOracle XE用に.envを編集します(試用におすすめ):
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 buildnpmからインストール
ソースをクローンせずにサーバーバイナリのみが必要な場合:
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をリロードし、エージェントモードで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キャッシュによる高速な繰り返しアクセス(TTL 5分)
📝 監査ログ — 実行メトリクスを含むすべてのクエリをログ記録
⏱️ タイムアウト保護 — 長時間実行されるクエリを防止
🛡️ 結果制限 — メモリ問題を防止するための設定可能な行制限
🍎 Oracle Client不要 — node-oracledb Thin Modeを使用(純粋な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" }スキーマ探索ツール
包括的なスキーマイントロスペクションのための5つの専門ツール:
ツール | 目的 | キャッシュ |
| メタデータとオプションの行数を含むすべてのアクセス可能なテーブル | ✅ |
| 列の型、制約、主キー/外部キー | ✅ |
| JSON形式の外部キーリレーションシップ | ✅ |
| データ形式を理解するためのサンプル値 | ❌ |
| FK、命名、共有列による関連テーブルの検索 | ❌ |
📖 詳細と例については、スキーマ探索ドキュメントを参照してください。
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セキュリティに関する考慮事項
読み取り専用ユーザー — 本番環境では、データベースユーザーはSELECT権限のみを持つべきです。
インジェクション保護なし — サーバーはLLMが有効なSQLを生成することを信頼します。読み取り専用ユーザーが安全策となります。
クエリ制限 — 行数とタイムアウトの制限により、リソースの枯渇を防ぎます。
監査ログ — すべてのクエリがタイムスタンプ付きでログ記録され、レビュー可能です。
ローカル使用 — このサーバーはマシン上で直接実行するように設計されています。ローカルで実行しながら、リモートデータベースにアクセスすることも可能です。
トラブルシューティング
Colimaが実行されていない(macOS)
colima status
colima start --cpu 2 --memory 4 # Oracle needs at least 2GB RAM
docker ps # verify Docker is availableOracleコンテナの問題
# 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 existOracleは実行中ですか?
docker ps | grep oracle-xeポートがマッピングされているか確認:
docker psで0.0.0.0:1521->1521/tcpが表示されるはずです。SYSTEMユーザーには
localhost:1521/XE、その他のユーザーにはlocalhost:1521/XEPDB1を試してください。
サービス名が間違っている
サービス | 用途 |
| SYSTEMユーザー、DBA操作 |
| 通常のアプリケーションユーザー |
権限拒否
Error: ORA-00942: table or view does not existユーザーにSELECT権限を付与します:
GRANT SELECT ANY TABLE TO your_user;Oracleコンテナレジストリへのログインが必要
Error: unauthorized: authentication requiredhttps://container-registry.oracle.com で無料アカウントを作成します。
Database → express のライセンスに同意します。
docker login container-registry.oracle.comを実行します。
レスポンスが大きすぎる
Response for tool 'listTables' exceeded MCP_MAX_RESPONSE_CHARS.envまたはVS Code MCP設定で制限を増やします:
MCP_MAX_RESPONSE_CHARS=100000Thin Modeの注意
このプロジェクトはnode-oracledb Thin Modeを使用しています。これはOracle Instant Clientを必要としない純粋なJavaScriptドライバです。Apple Silicon Macを含むすべてのプラットフォームで動作します。
ドキュメント
📚 統合ガイド:
スキーマ探索ガイド — 高度なスキーマイントロスペクションツール
スキーマ探索クイックリファレンス — すべての探索ツールのチートシート
スキーマ探索の例 — MCPメッセージの例
VS Code統合ガイド — GitHub Copilotとのセットアップ
Claude Desktop統合ガイド — Claude Desktopとのセットアップ
MCP統合ガイド — MCPプロトコルの詳細解説
アーキテクチャ概要 — システムアーキテクチャ図
ログ設定 — ログのセットアップと設定
📝 カスタム指示:
.github/copilot-instructions.md— プロジェクト全体のCopilot指示.github/instructions/— 言語固有のコーディングガイドライン
OracleはOracle Corporationの登録商標です。 このプロジェクトはOracle Corporationと提携、承認、または後援を受けていません。
ライセンス
このプロジェクトはGNU General Public License v3.0 (GPLv3) の下で利用可能です。
🟢 オープンソース — GPLv3
GPLv3を選択した場合、追加の利用分野制限なしで、記述通りのGPLv3の権利を受け取ります。ライセンス全文についてはLICENSEを、ライセンスの概要についてはLICENSE.mdを参照してください。
🔵 商用および政府機関 — 有料ライセンス
交渉による商用条件、保証の確約、または独自の配布権など、代替条件を希望する当事者向けに、作成者から個別の商用ライセンスが提供される場合があります。
📄 ライセンスの概要についてはLICENSE.mdを参照してください。
📄 個別の商用/政府機関向けライセンス条件についてはCOMMERCIAL_LICENSE.mdを参照してください。
貢献
貢献を歓迎します!Issueまたはプルリクエストを作成してください。
Maintenance
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
- AlicenseAqualityBmaintenanceProvides flexible access to Oracle databases for AI assistants like Claude, supporting SQL queries across multiple schemas with comprehensive database introspection capabilities.69510MIT
- FlicenseNot gradedqualityDmaintenanceConnects to Oracle Autonomous Database via OCI Bastion tunneling to enable AI-powered database exploration. Supports schema introspection, automatic ERD generation, and read-only SQL query execution through natural language interfaces.
- FlicenseNot gradedqualityDmaintenanceEnables AI applications to run SQL queries and retrieve results from Oracle Database.8
- FlicenseNot gradedqualityDmaintenanceEnables AI-powered database operations on Oracle Autonomous Database via natural language, including SQL translation, schema exploration, and API orchestration.4
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…
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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