はじめに
OCI(Oracle Cloud Infrastructure)のとあるテナンシの管理人をしています。本番環境はないのですが、300名近くのエンジニアがサンドボックスとして利用しているため、規模が大きく日々それなりの管理作業が発生します。コンパートメントは400以上あります。
作業としては、ユーザーのメンテナンスやコンパートメントの払い出しといった定型のものだけでなく、
- 要望に応じた統計的な情報の収集とレポート作成
- 課金関係の異常値の把握と深掘り
- セキュリティ脆弱性のチェックと対象リソースの洗い出し
- リソースのOCIDのリストからのオーナーと対象リソースの種別、名前の調査
といった、アドホックな作業も結構発生します。
こういった作業は基本OCIコンソールから実施するのですが、OCIはコンパートメントを使った高度な管理境界を作ることができるという素晴らしいメリットの裏返しとして、一括作業がやりにくいというデメリットがあり、作業対象が多い場合には手作業だとかなり辛くなります。そういう時には簡易的なスクリプトを都度書いて作業しますが、OCIもリソースの種類が増えて、触ったことすらないサービスがたくさん。。。そういったサービスに関してはCLIのコマンド体系を調べるところから始める必要があり、なかなかに時間を取られるのが悩みでした。
そんななか、最近Oracle公式のMCPサーバーがリリースされたということで、この面倒なアドホック業務をなんとか楽にできないかとの期待を込めて、試してみました。
注意
Oracleのリポジトリでは、これらのMCPサーバーはプロダクション用途ではなく、参照実装・検証・学習向けと明記されています。本記事でも、まずは参照中心の用途で試します。
https://github.com/oracle/mcp
OracleのGitHubリポジトリにはOCI向けの汎用MCPサーバーが2つある
oracle/mcpリポジトリには、たくさんのMCPサーバーがリリースされています。Oracle Databaseを対象としたものが当然ありますし、oci-で始まるさまざまなOCIサービスの個別MCPも多数あります。中にはoci-support-mcp-serverなんて面白そうなものも。
今回探しているOCIを幅広く扱う目的では、主に以下の2つが該当しそうです。それぞれ用途が違っているようですが、Readmeから拾い出したところによるとどうやらこんな感じみたいです。
| MCPサーバー | リンク | OCIとの接続方法 | 向いている用途 |
|---|---|---|---|
| OCI Cloud MCP Server | oci-cloud-mcp-server | OCI Python SDKを直接利用 | OCI APIを汎用的に検索・実行したい |
| OCI API MCP Server | oci-api-mcp-server | OCI CLIコマンドを実行 | OCI CLIコマンドを実行・確認したい |
OCI Cloud MCP ServerはOCI Python SDKのラッパーです。OCI CLIのサブプロセスを呼ばず、SDKのクライアントとメソッドを指定してOCI APIを実行するようです。
細かいところはReadmeを読んでいただくといいと思いますが、私の目を引いた機能はこれ。
- List OCI SDK clients available in the current environment
- Search for the right OCI client operation by short keyword/resource-action search
- Inspect the exact contract of an SDK method before calling it
ふむふむ、どうやらSDKを探すところから始めてくれるので。これを使うと「こんなことをOCIのAPIをコールしてできないかな」的な曖昧な要望であっても、このMCPが提供するSDKの情報を元にクエリーを組み立てくれそうです。その分トークンはたくさん消費するので注意とのことですが、OCI APIをベースにして幅広く調査したい時に便利そうですね。
また、MCPサーバー自体も直接API(Python SDK)をコールでき、レスポンスの項目を絞ったり、一覧結果をコンパクトに返したりする機能もあるようなので、レスポンスの向上も期待できそうです。
一方のOCI API MCP Serverは、名前が超絶紛らわしいですがOCI APIを直接呼び出すものではなく、OCI CLIを実行するMCPサーバーのようです。既存のOCI CLIの知識をそのまま活かしやすいのが特徴とのことで、既存がOCI CLI利用を中心に運用したりスクリプトを作られている方は、こちらの方が使いやすい場面もあると思います。Readme
今回は既存の管理スクリプトが大体Pythonで作っていたということで、前者のOCI Cloud MCP Serverの方を選択しました。また機会があればOCI API MCP Serverの方も導入して、使い分けなども探ってみたいと思います。
セットアップ
今回は、既存のOCI上のコンピュート・インスタンス上に構築しました。
既にVS CodeのリモートワークスペースとCodexが構築済で、OCI CLIとPython SDKもインストールされてます。
そこに、Oracle Cloud MCP Serverをセットアップしていくのですが、作業そのものはそれほど難しくはありません。今回追加作業として必要だったのはPythonの環境前提のuvのセットアップのみで、これもREADMEのコマンドそのままコピペで十分です。既存のPython環境とのバージョン衝突を避けるために、uvは使用されることをお勧めします。
uv python install 3.13
あとは、起動コマンドを打つだけで、勝手にMCPサーバーが起動してきます。(インターネットへの接続が必要です)
uvx oracle.oci-cloud-mcp-server
MCPサーバーへの接続については、今回は同じホスト上のVS Codeリモートワークスペースから呼び出すだけなので、STDIOを使用します。その場合は特に追加のセットアップは不要です。
また、このMCPサーバーはOCI CLIの接続プロファイル設定を利用してOCIのAPIに接続します。本来は、セキュリティの観点から専用のOCI接続プロファイル作成と、付随するOCI IAMのポリシー設定も実施するべきなのですが、一旦割愛してDEFAULTプロファイルをそのまま使います。認証方式やIAM Policy、セキュリティの考慮などについては、次回のブログエントリで詳しく書く予定です。
MCPサーバーを設定する
MCPサーバーの起動が完了したら、~/.codex/config.toml に以下のMCPサーバー情報追加します。
[mcp_servers.oci-cloud-mcp-server]
command = "/home/opc/.local/bin/uvx"
args = ["--python", "3.13", "oracle.oci-cloud-mcp-server"]
startup_timeout_sec = 30
tool_timeout_sec = 180
enabled = true
required = false
default_tools_approval_mode = "approve"
[mcp_servers.oci-cloud-mcp-server]
OCI_CONFIG_PROFILE = "DEFAULT"
OCI_CONFIG_PROFILEには、OCI CLIプロファイル名を指定します。今回の場合はDEFAULTでOK。
プロファイルは、OCI CLIの接続構成ファイルである~/.oci/configの中で、[DEFAULT]のように大カッコで識別された文字列です。もしファイルがない場合には、OCI CLIをインストールして oci setup config コマンドを打つと作成してくれます。ネットで方法を検索して実行しておきましょう。
完了しMCPサーバーを起動したら、一度Codexのチャットを立ち上げ直します。
試してみる
まずは動作確認も兼ねて簡単な参照から試します。
OCI MCPサーバーに接続してサブスクライブしているリージョンの一覧を出力してください。作業は参照みを許可します。変更は行わないでください。
うまくMCPサーバーに接続できたようですね。ちなみに使用したLLMモデルはChatGPT 5.6 Terraです。
ではもう一つ参照処理をさせてみましょう。
OCI MCPサーバーに接続して<対象コンパートメント>コンパートメントのap-tokyo-1リージョンにあるComputeインスタンス一覧を出力してください。
表示名、ライフサイクル状態、OCIDを確認したいです。
作業は参照のみを許可します。変更は行わないでください。
OCI Cloud MCP Serverでは、内部的には以下のような流れでAPIを選択・実行します。
-
ComputeClientで利用できる操作を確認する -
list_instancesの引数を確認する - コンパートメントOCIDを指定して実行する
- 表示名や状態など、必要な項目に絞って結果を返す
OCI CLIでは、コマンドを組み立て、必要なら--queryを指定するような作業です。正確な属性名などを覚えていなくてもそれっぽい名前で指定できるのが楽です。
こちらも無事に結果が返ってきました。前回よりも作業時間が短縮していますね。テナンシOCIDなど前回の実行結果をキャッシュして使用している分、2回目の実行が早くなったようです。
見せてもらおうか、MCPサーバーの性能とやらを
せっかくですので、いくつか高度な作業もさせてみたいと思います。
挑戦1 : ユーザーの利用履歴の抽出
OCI MCPを使ってここ1時間にログインして処理を実行したユーザーを抽出してください
テナンシ管理者だと時々必要になる作業ですね。大抵何かまずいことが起こった場合だったりしますが。
この作業、AuditのAPIを叩くと必要な情報は揃っているのですが、膨大なデータ量を絞り込む必要があり、また人以外のユーザー(インスタンスプリシパルなど)を除外したりユーザーごとに集計したりと、手作業だとちょっと面倒な作業です。
いいですね!あっさりと抽出してくれました。
実は「ログイン」というあえて惑わせるようなキーワードを盛り込んでみたのですが、サインオンのAPIからでは作業の履歴までは取れませんので、代わりにAuditの情報(CRUD処理)から情報を取得してくるという適切な判断をしています。また、頼んでもいませんが大体の操作時間の推計や、主な操作なども添付してくれるあたり気が利いています。
なかなかやりますね。ではこれはどうだ
挑戦2 : 逼迫しているサービス制限の洗い出し
OCI MCPを使って、東京リージョンのネットワーク関連サービスのサービス制限のうち、逼迫しているものを抽出してください。
こちらもOCI管理者あるあるのクエリー作業ですね。サービス制限に引っかかると色々な作業が止まってしまうので、逼迫していそうなものを知るというのは大事な作業ですが、地味に面倒くさいです。また「逼迫している」という曖昧な判断基準もポイントです。
時間はかかりましたが、こちらもあっさりクリアという感じです。処理の過程を見ても適切に実行されています。
うーむ、やりますねぇ。では、次はちょっと複雑なタスクもやらせてみましょう。
挑戦3 : 放置されているブロックボリュームの洗い出し
OCI MCPを使って、projectコンパートメント以下の階層にある全てのコンパートメントに関して、東京リージョンでここ1ヶ月間に一度もアタッチされていないブロックボリュームを抽出してください。
ボリューム名、OCID、サイズ、VPU、所属コンパートメントが知りたいです。
放置ブロックボリュームの抽出のユースケースです。実はこれ、一筋縄ではいかない処理です。一番の難関は「ここ1ヶ月間に一度もアタッチされていない」というところ。つまりAuditレコードを引っ張り出してきて、全レコードの中からボリュームのアタッチまたはデタッチというイベントが存在していないものを抽出、みたいなことをしないといけません。手順が複雑なだけでなく、処理するデータ量も多い作業になります。さあ果たして実行できるでしょうか。
・・・さすがに時間かかってますね。ただアプローチとしてはかなり良い感じです。
ありゃ、さすがに失敗してしまいました。
ただ、MCPやLLM自体の問題というよりも、OCIのAudit API自体のタイムアウトのようです。アプローチ自体は正しいですし、再実行に必要な情報も出力してくれているので、うまく後続のダイアログを組み立てていけば目的の情報は取得することができそうです。
なんとなく実力は見えてきました。うまく使えば心強い相棒になってくれそうな気がします。
使ってみて便利だったこと
さて、今回OCI MCPを使ってみて、特によかったのは次の3点です。
コマンドを思い出さなくてい
これは超絶楽になるポイントですね。OCI CLIの利用経験があっても、サービスごとのコマンドやオプションを毎回覚えているわけではありません。普段あまり触らないサービスの調査にも使いやすそうです。
変更前の確認に使いやすい
OCIテナンシの管理作業では、変更作業そのものより、対象や現状を確認する作業の方が重いことがままあります。MCPサーバーに色々と変更作業をいきなりさせるのは現時点ではちょっと怖いですが、参照用途に限定した上で変更箇所の洗い出しなどに利用するのは現時点のユースケースとしてとても便利そうです。
調査内容をログとして残しやすい
会話を繰り返していて感じたのが、何を実行したかが会話の流れでCodexの中に残るため、調査のメモとしても扱いやすいという点です。作業内容をサマリーして、とお願いすれば複雑な作業工程であってもレポートを作ってくれ、作業ログとして残ります。単なるコンソールログではないですので、作業内容を忘れた頃に検索して振り返るにも非常に便利そうです。
ただし、会話ログにリソース情報やOCIDなどが残る可能性があります。社内環境で利用する場合は、クライアント側のデータ管理を含め、ログの扱いには注意が必要です。
まとめ
OCIのMCPサーバーを、OCIテナンシの管理者業務用途で試してみた記録です。セットアップは非常に簡単で、スクリプトを書くほどではないけどコンソールではちょっと面倒、みたいな調査に活躍してくれそうですので、OCIの管理作業の効率化に試してみてはいかがでしょうか。ただいきなり本番環境で使うのは危険ですので、検証環境、しかも参照処理から始めていくことをおすすめします。
次回は、社内環境で導入するにあたっていくつか考慮した点やTIPSについて書いていこうと思います。特に認証方式、IAM Policy、AGENTS.mdに書いておきたいこと、などMCPサーバーを安全に使うために考えないといけないことはいくつかありますので、その辺りを中心にまとめたいと考えています。





