macOS上のGemini CLI 0.40.1で作業を実施しています。Gemini CLIでのMCPサーバーの設定については、主に以下のドキュメントを参照しています。
MCP servers with Gemini CLI
git clone https://github.com/ujnak/sh-sales-analysis.git
cd sh-sales-analysis
% git clone https://github.com/ujnak/sh-sales-analysis.git
Cloning into 'sh-sales-analysis'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 28 (delta 3), reused 27 (delta 2), pack-reused 0 (from 0)
Receiving objects: 100% (28/28), 10.77 KiB | 5.39 MiB/s, done.
Resolving deltas: 100% (3/3), done.
% cd sh-sales-analysis
sh-sales-analysis %
リポジトリに含まれる販売分析のスキルを、Gemini CLI向けにインストールします。APMのv0.9.3以降より、ターゲットとしてGemini CLIをサポートしています。
sh-sales-analysis % apm install --only apm --target gemini --force
[>] Installing dependencies from apm.yml...
[+] <project root> (local)
|-- 4 skill(s) integrated -> .gemini/skills/
[*] Installed 1 APM dependency.
sh-sales-analysis %
SQLclのMCPサーバーを構成します。.gemini/settings.jsonにMCPサーバーに関する設定を追記します。
{
"mcp": {
"allowed": ["oracle-sh"],
"excluded": []
},
"mcpServers": {
"oracle-sh": {
"command": "/opt/homebrew/Caskroom/sqlcl/26.1.0.086.1709/sqlcl/bin/sql",
"args": ["-R", "4", "-mcp"],
"env": {
"TNS_ADMIN": "/Users/username/Documents/mcp-salesadb"
},
"trust": false
}
}
}
Gemini CLIを実行します。
gemini
MCPサーバーが1つ、スキルが4つ認識されていることが確認できます。
/authコマンドを実行してGoogleのモデルを呼び出せるように認証する、また、MCPサーバーの設定を読み出すには/permissionsコマンドを実行し、プロジェクト・フォルダを信頼する必要があるようです。
認識されているMCPサーバーをリストします。
/mcp list
SQLclのMCPサーバーとしてoracle-shが認識されていることが確認できます。
oracle-shで利用可能な接続を一覧します。
「 oracle-shで利用できる接続を一覧して。」
ローカルで実行しているデータベースへの接続local-26ai-apexdevに接続します。
「local-26ai-apexdevに接続して。」
スキルを参照した検索を実行します。
「 売り上げの地域別のランキングを調べて。」
スキルとしてrankingが選択されました。使用するかどうか確認を求められたので、Allow for this sessionを選択しています。
実行するSELECT文を生成し、ツールrun-sqlを呼び出します。結果が表形式で返されました。
続いて、リモートMCPサーバーsampleserverを呼び出してみます。
OAuthに関連しして設定できる属性は、以下にリストされています。
.gemini/settings.jsonで、この中のclientId、clientSecret、scopesを以下のように指定します。redirectUriとして設定するURLは、Entra IDに作成したアプリにリダイレクトURIとして追加しておきます。
{
"mcp": {
"allowed": ["ords-sampleserver"],
"excluded": []
},
"mcpServers": {
"ords-sampleserver": {
"httpUrl": "https://ホスト名/ords/apexdev/sampleserver/mcp",
"oauth": {
"clientId": "${ORDS_MCP_CLIENT_ID}",
"clientSecret": "${ORDS_MCP_CLIENT_SECRET}",
"scopes": ["api://378e****-****-****-****-********d5ed/mcp:connect"],
"redirectUri": "http://localhost:60655/oauth/callback"
}
}
}
}
.gemini/settings.jsonを更新し、Gemini CLIを実行します。
Microsoft Entra IDの設定手順は、記事「Role based JWT profileで保護したORDS REST APIにアクセスする - Microsoft Entra ID編」にて紹介しています。
httpUrlのホスト名はOpenRestyがリバース・プロキシとして動作しているホスト名に置き換えます。またoauth.scopesはEntra IDに登録されているアプリORDS MCPに設定されたスコープに置き換えます。
環境変数を設定し、geminiを起動します。
export ORDS_MCP_CLIENT_ID=[OAuthクライアントID]
export ORDS_MCP_CLIENT_SECRET=[OAuthクライアント・シークレット]
gemini
認識されているMCPサーバーをリストします。
/mcp list
リモートMCPサーバーords-sampleserverのステータスは、Disconnect (OAuth not authenticated)と表示されています。
OAuthでの認証を実行します。
/mcp auth ords-sampleserver
以下のエラーが発生しました。
Failed to authenticate with MCP server 'ords-sampleserver': Protected resource 378e****-****-****-****-********d5ed does not match
expected https://ホスト名/ords/apexdev/sampleserver/mcp
リモートMCPサーバーの保護については、リバース・プロキシが稼働しているホストが返す、/.well-known/oauth-protected-resourceに以下のように設定しています。
{
"resource": "378e****-****-****-****-********d5ed",
"authorization_servers": [
"https://login.microsoftonline.com/3940****-****-****-****-********2758/v2.0"
],
"scopes_supported": ["api://378e****-****-****-****-********d5ed/mcp:connect"]
}
エラー・メッセージは、ここでresourceに設定している値がhttpUrlとして設定しているリモートMCPサーバーのアドレスに一致していないため、認証できないと言っています。確認のために、/.well-known/oauth-protected-resourceのresourceに、httpUrlの値を設定してみます。
以下のように、OAuthによる認証が先に進みます。
Authentication required for MCP Server: 'ords-sampleserver.' Opening authentication page in your browser.
Do you want to continue?
1. Yes
2. No
1. Yesを選択し、OAuthによる認証を実行します。
ブラウザ開きますが、resourceの指定が正しくないため(と思われる)Entra IDでの認証がinvalid_targetで失敗します。
Authentication Failed
Error: invalid_target
AADSTS9010010: The resource parameter provided in the request doesn't match with the requested scopes.
resourceの値をhttpUrlと一致させれられるIdPであればGemini CLIでの認証を通せると思われますが、Microsoft Entra IDでそのような設定をする方法は見つけられませんでした。
Microsoft Entra IDでのリモートMCPサーバーの保護については残念でしたが、Gemini CLIでSQclのMCPサーバーを呼び出せること、また、Microsoft APMで管理しているスキルが使用できることが確認できました。また、SQLclでの接続であれば、OAuthでデータベースへの接続を認証できることも確認できています。
今回の記事は以上になります。
完








