OIC Monitoring MCP Server
OIC Monitoring MCP Server
Oracle Integration Cloud(OIC)向けの読み取り専用MCPサーバーです。MCPクライアント(Claude Codeなど)を接続し、統合、接続、ランタイムインスタンス、エラー、フローログについて平易な言葉で質問すると、サーバーがそれらをOIC REST API呼び出しに変換し、クリーンでLLMに適したJSONを返します。
FastAPI + WebSocketで構築され、OAuth2 Client Credentials(IDCS/IAM)で認証します。
目次
要件
項目 | 要件 |
Python | 3.10以降(3.11以上推奨)。コードは |
OS | Windows 10/11、macOS 12+、または最新のLinux |
ネットワーク | OICインスタンスとIDCS/IAMトークンURLへの送信HTTPSアクセス |
OICアクセス |
|
ディスク占有量は小さく、仮想環境はおよそ120MB、ログは合計約60MBに制限されています。
インストール
手順はすべてのプラットフォームで共通です:
Python 3.10以上をインストールする
コードを取得する
仮想環境を作成し、依存関係をインストールする
.envを作成して値を入力するサーバーを起動して確認する
OSによって異なるのは、ステップ1と仮想環境のアクティベーションコマンドのみです。
Windows
1. Pythonのインストール
最も簡単な方法は、PowerShellでwingetを使用することです:
winget install -e --id Python.Python.3.12または、python.org/downloads/windowsからインストーラーをダウンロードします。インストーラーを使用する場合は、最初の画面で 「Add python.exe to PATH」 にチェックを入れます。この1つのチェックボックスが、後に発生する「python is not recognized」問題の大半の原因です。
PowerShellを閉じて開き直し、確認します:
py -3 --versionPython 3.10.x以降が表示されるはずです。pyランチャーは公式インストーラーに同梱されており、WindowsでPythonを起動する最も確実な方法なので、以下のコマンドではこれを使用します。
2. コードの取得
git clone <your-repo-url> oic-mcp
cd oic-mcp3. 仮想環境の作成と依存関係のインストール
py -3 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -r requirements.txtPowerShellが「running scripts is disabled」というエラーでアクティベーションスクリプトをブロックした場合は、ユーザー単位で署名済みローカルスクリプトを一度だけ許可します。
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedPowerShellではなくcmd.exeを使用していますか? .venv\Scripts\activate.batでアクティベートします。
4. 設定
Copy-Item .env.example .env
notepad .env設定に記載されている値を入力します。
5. サーバーを起動
.\scripts\run-local.ps1macOS
1. Pythonのインストール
macOSにはシステムPythonが同梱されていますが、これを対象にビルドすることは避けてください。Homebrewで独自のPythonをインストールします。
brew install python@3.12続いて、確認します。
python3 --versionHomebrewがない場合は、先にHomebrewをインストールするか、python.org/downloadsmacosからmacOS用インストーラーをダウンロードします。
2. コードを取得
git clone <your-repo-url> oic-mcp
cd oic-mcp3. 仮想環境を作成し、依存関係をインストール
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt4. 設定
cp .env.example .env
nano .env5. サーバーを起動
chmod +x scripts/*.sh
./scripts/run-local.shLinux
1. Pythonのインストール
Debian / Ubuntu:
sudo apt update
sudo apt install -y python3 python3-venv python3-pip gitpython3-venvパッケージはDebianoは別途用意されており、見落としがちです。これがないと、python3 -m venvは「ensurepip is not available」エラーで失敗します。
RHEL / Rocky / Alma / Fedora:
sudo dnf install -y python3.12 python3.12-devel gitバージョンを確認する:
python3 --versionディストistributionが3.10未満の場合(たとえばRHEL 8、標準では3=3.6)は、システムのものに加えて新しいインタプリタ(AppStreamやdeadsnakesからpython3.11またはpython3.12)をインストールし、仮想環境作成時にその明示的なバイナリを使用します(例:python3.12 -m venv .venv)。
2. コードを取得
git clone <your-repo-url> oic-mcp
cd oic-mcp3. 仮想環境の作成し、依存関係をインストール
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt4. 設定
cp .env.example .env
nano .env5. サーバーを起動
chmod +x scripts/*.sh
./scripts/run-local.shインストールの確認
サーバーは、デフォルトでws://127.0.0.1:8085/wsで待ち受けます。別のターミナルで:
python3 scripts/ws-call.py tools/listWindowsの場合:
.\.venv\Scripts\python.exe scripts\ws-call.py tools/list約40のツールのJSONリストが返されるはずです。WebSocketクライアントを必要としない、プレーンなHTTPヘルスチェックもあります。
curl http://127.0.0.1:8085/healthz
# {"status": "ok"}接続エラーまたは401が発生した場合は、トラブルシューティングを参照してください。
ホストとポートの変更
run-local.shとrun-local.ps1はどちらもPORT変数を読み取り、指示がない限りループバックのみにバインドします。
# Linux / macOS
PORT=8086 ./scripts/run-local.sh
HOST=0.0.0.0 PORT=8086 ./scripts/run-local.sh# Windows
$env:PORT="8086"; .\scripts\run-local.ps1
$env:MCP_HOST="0.0.0.0"; $env:PORT="8086"; .\scripts\run-local.ps1または、uvicornを直接呼び出します。これは、スクリプトが内部で行っていることです。
uvicorn mcp_server.main:app --host 127.0.0.1 --port 8085 --ws websockets0.0.0.0にバインドすると、認証されていないWebSocketがネットワークに公開されます。TLSとファイアウォールの背後でのみ行ってください。本番運用を参照してください。
設定(.env)
.env.exampleを.envにコピーして、値を入力します:
Variable | Required | Notes |
| 必須 | 例: |
| 推奨 | すべてのリクエストに |
| 必須 | 例: |
| 必須 | 機密アプリのクライアント ID |
| 必須 | 機密アプリのクライアントシークレット |
| 条件付き | アプリがIDCSでOICリソース/スコープで事前構成されていない場合のみ必要 ----- トラブルシューティング |
| 任意 | デフォルト`` |
| 任意 | デフォルト |
| 任意 | デフォルト |
| 任意 | このプロセスが読み込むenvファイル、デフォルト |
機密アプリのクライアントには、OICインスタンスのリソースアプリに対してIDCS/IAMで**ServiceUser**アプリケーションロールが割り当てられている必要があります(クライアントアプリ自体ではなく)。そうでないと、有効なトークンがあってもすべての呼び出しが401エラーになります。トラブルシューティングを参照してください。
.envとすべての.env.*ファイルはgitignorになる(追跡されるのは.env.exampleのみ)ため、シークレットはリについてリポジトリに残りません。
MCPクライアントを接続する
Claude Code:
claude mcp add-json oic '{"type":"ws","url":"ws://127.0.0.1:8085/ws"}'生のJSON設定をサポートするその他のクライアント:MCPサーバー設定にこれを追加します(例:.mcp.json、またはmcp.json.exampleをコピー)。
{
"mcpServers": {
"oic": {
"type": "ws",
"url": "ws://127.0.0.1:8085/ws"
}
}
}このサーバーはWebSocketトランスポートのみをサポートしています。stdioサーバーではないため、
"type": "stdio"やspawned-command設定はここでは機能しません。まずサーバを独自のプロセスとして起動し、クライアントをそのURLに向けてください。
接続後は、エージェントに「アクティブな統合を一覧表示」や「INTEGRATION_CODEの最新20件のランタイムインスタンスを表示」のように質問するだけで、自分でツール名を指定して呼び出す必要はありません。
1つのコードベースから複数の環境を実行する
Dev、Test、Prodを監視するために2つ目のクローンは必要ありません。1つのチェッされるアウトで必要な数だけプロセスを実行でき、各プロセスはOIC_ENV_FILEで独自のenvファイルを指し、各プロセスは独自のポートで実行されます。
mcp_server/settings.pyはプロセスの開始時にOIC_ENV_FILEを読み取り、そのファイルを.envの代わりに読み込みします。プロセスのその他はすべて同一(同じコード、同じツール)です。
1. 環境ごとに1つのenvファイルを作成
cp .env.example .env.dev
cp .env.example .env.test
cp .env.example .env.prod各ファイルは、その環境のOIC_BASE_URL、OIC_INSTANCE_NAME、OAuth資格情報を入力し、ログが混ざらないようにそれぞれ個別のログファイルを指定します:
# in .env.prod
MCP_LOG_FILE=mcp_server.prod.log2. 環境ごとに1つのプロセスを、それぞれ独自のポートで起動
Linux / macOS:
OIC_ENV_FILE=.env.dev PORT=8085 ./scripts/run-local.sh
OIC_ENV_FILE=.env.test PORT=8086 ./scripts/run-local.sh
OIC_ENV_FILE=.env.prod PORT=8087 ./scripts/run-local.shWindows PowerShellは、各プロセスが独自の変数を設定するため、1つのターミナルにつき1つです。
$env:OIC_ENV_FILE=".env.prod"; $env:PORT="8087"; .\scripts\run-local.ps1またはuvicornを直接呼び出します:
OIC_ENV_FILE=.env.prod uvicorn mcp_server.main:app --host 127.0.0.1 --port 8087 --ws websockets3. 各プロセスをクライアントに、一意の別名で登録
{
"mcpServers": {
"oic-dev": { "type": "ws", "url": "ws://127.0.0.1:8085/ws" },
"oic-test": { "type": "ws", "url": "ws://127.0.0.1:8086/ws" },
"oic-prod": { "type": "ws", "url": "ws://127.0.0.1:8087/ws" }
}
}エージェントは、明確に名前付けされた3つのツールセットを認識します。したがって、1つの会話内で複数の環境の同じ統合を比較要求できます。
推奨レイアウト:
環境 | envファイル | ポート | クライアント名 | ログファイル |
Dev |
| 8085 |
|
|
テスト |
| 8086 |
|
|
本番 |
| 8087 |
|
|
知っておくとよいこと
OIC_ENV_FILE詳しくは、プロセス起動時に一度読み取られます。環境変数を変更するか、envファイル自体を編集するには、そのプロセスの再起動が必要です。。実際のOS環境変数は、envファイルのどんな内容よりも優先されます。
OIC_BASE_URLシェルプロファイルに環境変数をエクスポートしている場合、どのenvファイルを読み込んだかに関係なく、すべてのプロセスがそれを使用します。これらの変数はシェルプロファイルに置かないでください。各プロセスには独自のポートが必要です。同じポートの2つのプロセスは「アドレスはすでに使用中」エラーで発生します。
Dockerでは、
--env-fileは実際の環境変数を注入するため、そこではOIC_ENV_FILEは不要です。--env-fileを適切なファイルに指定するだけです。ここのすべてのツールは読み取り専用ですが、最小権限の原則は無料で適用できます。各環境のOAuthアプリには
ServiceUserロールのみを付与します。
サーバーを起動し続ける
2つのサポートされるパターンがあります。意図的に1つ選択してください。ログアウト時の動作が大きく異なるためです。
オプションA: セッションのみ(ターミナルを閉じると終了する)
開発、アドホック調査、および一晩中はメモリに資格情報を保持しながらプロセスを放置したくない作業に最適です。
フォアグラウンドで、専用のターミナルウィンドウで実行:
# Linux / macOS
./scripts/run-local.sh# Windows
.\scripts\run-local.ps1それが全体の方法です。プロセスはそのターミナルの子プロセスです:
Ctrl+Cで即停止します。ターミナルウィンドウを閉じる、SSHセッションを終了する、ログアウトすると、終了します。
自動再起動はなく、再起動後に復帰することはありません。
ログはターミナルとmcp_server.logに同時に出力されるため、このモードはデバッグの最も簡単な方法でもあります。
プロンプトに戻りたいが、プロセスをセッションで終了したい場合は、デーモン化ではなくシェルジョブ、のバックグラウンドとして実行します。
./scripts/run-local.sh > uvicorn.log 2>&1 &
echo "started as PID $!"
# later, from the same shell
kill %1セッション内だけで動作させたいのであれば、nohup、setsid、disown、screen、tmux でラップしないでください。これらはすべてプロセスをセッションから切り離すためのもので、ログアウト後もプロセスを生存させ続けます。
セッションを閉じた後に何も残っていないことを確認するには:
# Linux / macOS
pgrep -af "mcp_server.main"# Windows
Get-CimInstance Win32_Process -Filter "Name='python.exe'" |
Where-Object { $_.CommandLine -like "*mcp_server.main*" } |
Select-Object ProcessId, CommandLineオプションB: 永続的なバックグラウンドサービス(再起動後も生存)
共有サーバーや、チームがMCPエンドポイントを常時利用できることを前提とするワークステーションに最適です。以下のどのケースでも、サービスは起動時に開始され、クラッシュした場合は自動的に再起動します。
この用途には nohup ... & を使わないでください。ログアウトしてもプロセスは残りますが、再起動には耐えられず、プロセスが死んでも再起動されません。OSのサービス管理機能を使ってください。
Linux(systemd)
/etc/systemd/system/oic-mcp.service を作成します:
[Unit]
Description=OIC Monitoring MCP Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=oicmcp
Group=oicmcp
WorkingDirectory=/opt/oic-mcp
Environment=OIC_ENV_FILE=/opt/oic-mcp/.env.prod
ExecStart=/opt/oic-mcp/.venv/bin/uvicorn mcp_server.main:app --host 127.0.0.1 --port 8085 --ws websockets
Restart=always
RestartSec=5
# Basic hardening
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
[Install]
WantedBy=multi-user.target次に:
sudo useradd --system --home /opt/oic-mcp --shell /usr/sbin/nologin oicmcp
sudo chown -R oicmcp:oicmcp /opt/oic-mcp
sudo chmod 600 /opt/oic-mcp/.env.prod
sudo systemctl daemon-reload
sudo systemctl enable --now oic-mcp
sudo systemctl status oic-mcpenable は再起動後にサービスを復活させ、Restart=always はクラッシュ後にプロセスを再起動します。この2つは両方必要です。
ログはジャーナルに出力されます:
journalctl -u oic-mcp -f2番目の環境 を用意するには、ユニットを oic-mcp-test.service にコピーし、Environment=OIC_ENV_FILE= の行と --port を変更してから、sudo systemctl enable --now oic-mcp-test を実行します。
自分のユーザーとして実行したい場合は、同じユニットを ~/.config/systemd/user/oic-mcp.service に置き、systemctl --user enable --now oic-mcp で有効化し、sudo loginctl enable-linger $USER を実行します。これにより、最初のログイン時ではなく起動時に開始されるようになります。
macOS(launchd)
~/Library/LaunchAgents/com.oic.mcp.plist を作成し、/Users/you/oic-mcp を実際のパスに置き換えます:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.oic.mcp</string>
<key>ProgramArguments</key>
<array>
<string>/Users/you/oic-mcp/.venv/bin/uvicorn</string>
<string>mcp_server.main:app</string>
<string>--host</string><string>127.0.0.1</string>
<string>--port</string><string>8085</string>
<string>--ws</string><string>websockets</string>
</array>
<key>WorkingDirectory</key>
<string>/Users/you/oic-mcp</string>
<key>EnvironmentVariables</key>
<dict>
<key>OIC_ENV_FILE</key>
<string>/Users/you/oic-mcp/.env.prod</string>
</dict>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>StandardOutPath</key>
<string>/Users/you/oic-mcp/launchd.out.log</string>
<key>StandardErrorPath</key>
<string>/Users/you/oic-mcp/launchd.err.log</string>
</dict>
</plist>読み込みます:
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.oic.mcp.plist
launchctl print gui/$(id -u)/com.oic.mcp | head -20RunAtLoad は起動時にすぐ、そしてログインのたびに開始します。KeepAlive はプロセスが終了したときに再起動します。
停止するには、または plist 編集後に再読み込みするには:
launchctl bootout gui/$(id -u)/com.oic.mcp
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.oic.mcp.plist~/Library/LaunchAgents 内の LaunchAgent は、あなたがログインしたときに起動します。誰もログインする前にマシンがエンドポイントを提供しなければならない場合は、同じ plist を /Library/LaunchDaemons/ に置き(所有者 root:wheel、モード 644)、root として実行されないように UserName キーを追加し、sudo launchctl bootstrap system /Library/LaunchDaemons/com.oic.mcp.plist で読み込んでください。
2番目の環境を用意する場合は、新しい Label(com.oic.mcp.test)と異なるポート、異なる OIC_ENV_FILE を指定して plist を複製します。
Windows(NSSM、推奨)
NSSM は、任意の実行可能ファイルを本格的な Windows サービスとしてラップします。winget install nssm または choco install nssm でインストールし、次に 管理者 PowerShell で:
$proj = "D:\oic_mcp_git"
nssm install OicMcp "$proj\.venv\Scripts\uvicorn.exe" "mcp_server.main:app --host 127.0.0.1 --port 8085 --ws websockets"
nssm set OicMcp AppDirectory $proj
nssm set OicMcp AppEnvironmentExtra "OIC_ENV_FILE=$proj\.env.prod"
nssm set OicMcp Start SERVICE_AUTO_START
nssm set OicMcp AppStdout "$proj\service.out.log"
nssm set OicMcp AppStderr "$proj\service.err.log"
nssm set OicMcp AppExit Default Restart
nssm set OicMcp AppRestartDelay 5000
nssm start OicMcpSERVICE_AUTO_START が再起動後にサービスを復元し、AppExit Default Restart がクラッシュ後に再起動します。
他のサービスと同じように管理します:
Get-Service OicMcp
nssm restart OicMcp
nssm stop OicMcp
nssm remove OicMcp confirm2つ目の環境で利用するには、別の名前(OicMcpTest)で独自のポートと OIC_ENV_FILE を持つ別のサービスをインストールします。
Windows(タスクスケジューラ、追加ツール不要)
NSSM をインストールできない場合、タスクスケジューラで起動時に起動できます。まず、プロジェクトフォルダーに start-prod.bat を作成します。スケジュールタスクはインラインで作業ディレクトリを設定しにくいためです:
@echo off
cd /d D:\oic_mcp_git
set OIC_ENV_FILE=D:\oic_mcp_git\.env.prod
".venv\Scripts\python.exe" -m uvicorn mcp_server.main:app --host 127.0.0.1 --port 8085 --ws websockets次に、管理者 PowerShell で登録します:
schtasks /Create /TN "OIC MCP Server" /TR "D:\oic_mcp_git\start-prod.bat" /SC ONSTART /RU SYSTEM /RL HIGHEST /F
schtasks /Run /TN "OIC MCP Server"
schtasks /Query /TN "OIC MCP Server"これは起動時には開始しますが、デフォルトではクラッシュ時に再起動しません。タスクスケジューラのタスクの 設定 タブで「タスクが失敗した場合、1分ごとに再起動する」を追加し、最大3回までに設定します。この点は NSSM の方が優れているため、NSSMが推奨されます。
Docker(任意のプラットフォーム)
再起動ポリシーは、Docker デーモン自体が起動時に開始する限り、ホストの再起動をまたいでもサービス管理者と同じ役割を果たします:
docker build -t oic-mcp:latest .
docker run -d \
--name oic-mcp-prod \
--restart unless-stopped \
-p 8085:8080 \
--env-file .env.prod \
oic-mcp:latestコンテナは内部で 8080 番ポートを待ち受けるため、任意のホストポートをマッピングしてください。2つ目の環境は、名前、ホストポート、env ファイルを変更して実行します:
docker run -d --name oic-mcp-test --restart unless-stopped \
-p 8086:8080 --env-file .env.test oic-mcp:latestdocker ps と docker logs -f oic-mcp-prod で確認します。
どちらを使うべきか?
セッションのみ | 永続サービス | |
ターミナルを閉じても維持される | いいえ | はい |
ログアウトしても維持される | いいえ | はい |
再起動後も維持される | いいえ | はい |
クラッシュ後に再起動する | いいえ | はい |
セットアップの手間 | なし | 一度だけ数分 |
適している用途 | 開発、単発の調査 | 共有サーバー、常時稼働のチーム利用 |
ツール
すべてのツールは tools/list で確認でき、読み取り専用です。多くはオプションの version を受け付けます。省略時は自動的に最新バージョンが解決されます。
インテグレーション
list_integrations- オプション:onlyActivated、limit、pagelist_activated_integrationsget_integration-identifierとversionで指定get_integration_auto-codeまたはcode|versionによるデザイン時の詳細、最新を自動解決search_integration_by_name- 全カタログ検索(自動ページング)。完全一致または部分一致。常にリストを返すlist_integrations_search-code/name/description/keywordsに対するクライアント側ページング検索export_integration- インテグレーションZIPをbase64でダウンロード、またはエントリとプレビューのlistOnly
実行時監視
list_instances- オプション:integrationId、status、startTime/endTime、timewindow、limitget_instance-instanceIdによる完全な詳細get_instance_activity_stream- 単一インスタンスのステップ単位のフロー/実行ログlist_errors- オプション:integrationId、timewindow、limitlist_metrics- 過去のトラッキングメトリクス。時間単位または日単位list_schedules/get_schedule- インテグレーションごとのスケジュール情報
接続、パッケージ、構成部品
list_connections/get_connection/get_connection_detaillist_packages/get_packagelist_lookups/get_lookupget_librarylist_adapters/get_adapterlist_agents/list_agent_groupslist_endpoints- ロールと接続先を含むインテグレーションエンドポイント
デザイン時分析
summarize_integration- トリガー/ターゲット/トラッキング変数を一覧表示summarize_integration_with_steps- 上記に加えて、選択したステップのI/O概要summarize_flow_controls- Switch/ForEach/Route/Fault/Scope 構文の数とサンプルをまとめるsummarize_mappings- マッピングステップを抽出deep_flow_outline- フロー全体をコンパクトなテキストアウトラインで表示get_integration_step-stepName(完全一致 + あいまい一致)に一致する生のJSONサブツリーと、一致するエンドポイントsummarize_step_io-stepNameに対する疑わしいSQL/クエリスニペットとパラメータ。ステップが見つからない場合はエンドポイント一致にフォールバック
ユーティリティ
fetch_raw_path- 任意の相対OICパスを取得search_json- 任意のJSON形式の構造に対する部分文字列検索
デザイン時ツールは、オプションの designJsonPath を受け入れて、OIC を呼び出す代わりに以前にダウンロードしたデザインJSONをディスクから読み取ることができます。オフライン分析や、反復作業中の重複呼び出し回避に役立ちます。
レスポンス形式
すべての tools/call 結果は MCP 仕様のエンベロープに従います: {"content": [{"type": "text", "text": "<json-or-plain-text>"}], "isError": false}。実際のツールペイロードは text 内に JSON シリアライズされています。構造化データを得るにはもう一度パースします:
python3 scripts/ws-call.py tools/call '{"name":"list_integrations","arguments":{"limit":3}}' \
| python3 -c "
import json, sys
resp = json.load(sys.stdin)
payload = json.loads(resp['result']['content'][0]['text'])
print(json.dumps(payload, indent=2))
"ツール実行エラー(OIC に到達できない、不正な識別子など)も同じ形式で isError: true とともに返ってきます。成功を前提とせず、そのフラグを確認してください。真正のプロトコルエラー(未知のメソッド、未知のツール名)は、実際の JSON-RPC error オブジェクトとして返されます。大きなペイロードは 100,000 文字に制限され、切り詰められた場合には、黙ってではなく明確に [TRUNCATED ...] とマークされます。
動作の仕組み
サーバーは JSON-RPC 2.0 / MCP を話す WebSocket エンドポイントを1つ公開します。クライアントは
tools/listでツールを発見し、tools/callで実行します。呼び出しのたびに、認証済みの
httpx.AsyncClientを介して OIC の REST API から取得します。OAuth トークンはキャッシュされ、期限が切れると自動的に更新されます。WebSocket ハンドシェイクでは、クライアントが提供する場合
mcpサブプロトコルをネゴシエートします。initializeは、仕様準拠のprotocolVersionとオブジェクト型のcapabilitiesを返します。これは Claude Code のような厳格なクライアントが接続を受け入れるために必要です。リダイレクトは httpx の組み込み処理ではなく手動でフォローされます。OIC のデザイン時ゲートウェイは
OIC_BASE_URLとは異なるホストに 307 リダイレクトします。httpx はデフォルトでホスト間リダイレクト時にAuthorizationヘッダーを削除するため、この既知の信頼できるホップでは手動処理によってヘッダーが保持されます。
ログ
ログは mcp_server.log に出力されます(MCP_LOG_FILE で上書き可能)。1ファイルあたり10MBで自動ローテーションされ、バックアップ5つを保持します(約60MB の上限)。無限に増えることはありません。logrotate、cron ジョブ、sudo はどのプラットフォームでも不要で、アプリが書き込みのたびに自分のログサイズを管理します。
環境ごとに1つのプロセスを実行する場合は、各 env ファイルに別々の MCP_LOG_FILE を設定して、ログを分離可能にしてください。
本番運用の堅牢化
TLS(Nginx/Traefik などのリバースプロキシ)の背後で実行し、ネットワークアクセスを制限してください。WebSocket エンドポイントには独自の認証がないため、信頼できないネットワークに直接公開しないでください。
特別な理由がない限り、バインドアドレスは
127.0.0.1のままにしてください。シークレットはボールトに保管し、
.envをコミットしないでください。Linux では env ファイルをchmod 600し、サービスユーザーが所有するようにしてください。OAuth クライアントには、必要な最小限のロールを割り当ててください(
ServiceUserは読み取りレベル。ServiceDeveloperは作成/インポートツールが特に必要な場合を除いて避けてください)。プロセスマネージャー(systemd、launchd、NSSM)を使って再起動後にも生存させてください。オプションB を参照。
大規模なカタログではペイロードサイズに注意してください。全リストを取得するより、
list_integrations_searchで絞り込み語とページングを使う方が良いです。
トラブルシューティング
インストールと起動
pythonまたはpyが認識されない(Windows) - Python が「Add python.exe to PATH」なしでインストールされています。インストーラーを再実行して「変更」を選び、それを有効にするか、winget install -e --id Python.Python.3.12で再インストールしてください。その後、新しいターミナルを開きます。running scripts is disabled on this system(Windows) - PowerShell の実行ポリシーが仮想環境のアクティブ化をブロックしています。Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedを実行するか、cmd.exeで.venv\Scripts\activate.batを使用してください。ensurepip is not available(Debian/Ubuntu) - 独立した venv パッケージをインストールしてください:sudo apt install python3-venv。TypeError: unsupported operand type(s) for |- Python 3.9 以前を使用しています。3.10+ をインストールし、新しいインタプリタで仮想環境を再作成してください。起動時に
OIC_BASE_URLまたはOAUTH_*を指すValidationError- env ファイルが見つからないか、不完全です。.env.exampleを.envにコピーしたこと、プロジェクトディレクトリからプロセスを開始したこと、OIC_ENV_FILE(設定している場合)が存在するファイルを指していることを確認してください。address already in use- 別のプロセスがポートを保持しています。lsof -i :8085(Linux/macOS)またはnetstat -ano | findstr :8085(Windows)で特定するか、別のPORTで起動してください。
認証
トークンURLから401/403 -
OAUTH_CLIENT_ID/OAUTH_CLIENT_SECRETと、OAUTH_TOKEN_URLが IDCS/IAM ドメインに対して正しいことを確認してください。トークンリクエストは成功する(200)のに、OIC の呼び出しがすべて401になる - これはほとんどの場合、トークンが原因ではなく IDCS ロールの欠落が原因です。OCI Console → Identity & Security → Domains → 自分のドメインで、OIC インスタンス自身のリソースアプリ(機密クライアントアプリではありません)を探し、Application roles →
ServiceUserで自分の機密クライアントアプリをアプリケーションとして割り当ててください。割り当てた後、新しいトークンを取得してください。既存のトークンは遡ってロールを獲得しません。
接続
接続拒否/WebSocket に到達できない - サーバープロセスが実際に実行されているか(
pgrep -af mcp_server.main、systemctl status oic-mcp、またはGet-Service OicMcp)を確認し、同じポートに他のプロセスがバインドされていないことを確認してください。curl http://127.0.0.1:8085/healthzが最も手早い確認方法です。Claude Code がサーバーを「still connecting」と表示する、またはツールが読み込まれない - サーバーはクライアントセッションの開始前に起動してある必要があります。起動していなかった場合、自動的には再試行されません。サーバーの正常性を確認してから、クライアントを再起動してください。
別の環境のデータが返ってくる - 実 OS の環境変数が env ファイルを上書きしています。実 OS の環境変数の方が優先されるためです。
env | grep OIC_(Linux/macOS)またはGet-ChildItem Env:OIC_*(Windows)で確認し、シェルプロファイルから不要な古い値を消去してください。
ツールの使用
特定のフロー/デザインパスで 404 が発生する - 生のパス取得ではなく、デザインタイムのツール(
get_integration_auto、summarize_*)を優先してください。バージョン解決と既知のエンドポイントの癖を処理してくれます。応答が大きい、または遅い - 完全なカタログを取得するのではなく、
list_integrations_search/search_integration_by_nameとページング(perPage、maxPages)で絞り込んでください。ヘルスチェック - プロセス自体が起動していれば、
GET /healthzは{"status": "ok"}を返します(OIC への接続は検証しません)。
ライセンス
This server cannot be installed
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 Connectors
Official Microsoft MCP Server to query Microsoft Entra data using natural language
A paid remote MCP for AI SDK data query MCP, built to return verdicts, receipts, usage logs, and aud
Search, document and execute authenticated API calls across 700+ apps via one MCP server
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/mkc110891/oic-monitoring-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server