はじめに
IBM ai-services(IBM Power AI Launchpad)v0.4.0 から、各 AI サービスが MCP(Model Context Protocol)サーバーとして公開されるようになりました。
この記事では、ai-services が提供する MCP エンドポイントに IBM のAIコーディングアシスタント「Bob」から接続し、RAG ベースの Q&A などのサービスを呼び出してみます。
MCP は AI エージェントやコーディングアシスタントとツールを接続するためのプロトコルです。対応クライアントであれば、ai-services のサービスをそのまま「ツール」として呼び出せます。
ai-services のインストールや初期セットアップは、以下の記事を参照してください。
MCP接続方法は下記の公式ドキュメントを参照しています。
前提環境
-
サーバー: IBM Power(IBM Spyre アクセラレーター搭載)
-
ai-services バージョン: v0.4.0 以降(MCP サーバー機能あり)
-
クライアント: Bob(IBM AIコーディングアシスタント)
-
クライアント OS: macOS
TLS 証明書のセットアップ
ai-services のカタログは Caddy による HTTPS エンドポイントを提供しています。
エンドポイントの URL は <service>.<host>.nip.io 形式のドメインで提供されており(nip.io は IP アドレスを DNS 名に変換するサービスです)、Caddy が自己署名のルート証明書を発行しています。
クライアント側でこの証明書を信頼するよう設定しておく必要があります。
Worker から TLS 証明書を取得する
ここでいう「Worker」とは、ai-services がAIサービス用のコンテナを実行するLPARのことです。
ai-services v0.4.0 以降ではカタログ(管理サーバー)とWorker(実行サーバー)が分離しており、コンテナや MCP エンドポイントはWorker上に立ち上がります。
TLS 証明書もWorker側の Caddy が発行するため、ここではWorkerサーバーから証明書を取得します。
ssh root@<worker-host> "cat /var/lib/containers/storage/volumes/caddy-catalog/_data/caddy/pki/authorities/local/root.crt" > ~/caddy-root.crt
取得した証明書の内容を確認します。
openssl x509 -noout -subject -issuer -dates -in ~/caddy-root.crt
subject=CN=Caddy Local Authority - 2026 ECC Root
issuer=CN=Caddy Local Authority - 2026 ECC Root
notBefore=Oct 2 00:16:56 2026 GMT
notAfter=Aug 10 00:16:56 2036 GMT
クライアント OS に証明書をインポートする
OS ごとの手順は以下の通りです。
公式ドキュメント参照 (https://www.ibm.com/docs/ja/aiservices/2026.09.0?topic=assistant-connecting-mcp-server)
macOS
sudo security add-trusted-cert -d -r trustRoot \
-k /Library/Keychains/System.keychain ~/spyre/caddy-root.crt
Linux(Red Hat 系)
sudo cp ~/caddy-root.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust
Linux(Debian 系)
sudo cp ~/caddy-root.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
Windows
certmgr.msc(証明書マネージャー)または PowerShell を使用し、「信頼されたルート証明機関」ストアにインポートします。
Node.js ベースのツールを使う場合
Node.js は OS の信頼ストアとは独立した証明書ストアを持っています。以下の環境変数を設定してから、アプリケーションを再起動してください。export NODE_EXTRA_CA_CERTS=~/spyre/caddy-root.crt
アクセストークンを取得する
MCP エンドポイントへの接続には Bearer トークンによる認証が必要です。
カタログの API URL は ai-services catalog info --runtime podman コマンドで確認できます。
環境変数 `TOKEN` にそのまま入れ込む形にしています。
カタログAPIのURLやユーザー名、パスワードがご利用の環境に合わせて変更してください。
TOKEN=$(curl -s -X POST \
https://<catalog-api-host>/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"<username>","password":"<password>"}' \
| python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])")
取得したトークンには有効期限があるため、期限切れの場合は再度このコマンドを実行してトークンを更新してください。
MCP エンドポイントを確認する
デプロイ済みアプリケーションの一覧確認
curl -sL https://<catalog-api-host>/api/v1/applications/ \
-H "Authorization: Bearer $TOKEN" | python3 -c "
import sys,json
for a in json.load(sys.stdin).get('data',[]):
print(a['name'], a['id'], a['status'])
"
以下のように起動しているアプリケーション IDが表示されます。(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx の部分)
Digital assistant xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Running
アプリケーション ID から MCP エンドポイント URL を取得する
一覧で確認したアプリケーション ID を使って、各サービスの MCP エンドポイントを取得します。
curl -sL https://<catalog-api-host>/api/v1/applications/<application-id>/ \
-H "Authorization: Bearer $TOKEN" | python3 -c "
import sys,json
app=json.load(sys.stdin)
for svc in app.get('services',[]):
for ep in svc.get('endpoints',[]):
if ep['type']=='mcp':
print(svc['type'], '->', ep['url'])
"
Question and answer -> https://chat-bot-mcp-xxxxxxxxxx.<host>.nip.io
Digitize documents -> https://digitize-mcp-xxxxxxxxxx.<host>.nip.io
Find similar items -> https://similarity-mcp-xxxxxxxxxx.<host>.nip.io
3 つのサービスがそれぞれ独立した MCP エンドポイントとして公開されています。
MCP クライアントの設定
基本的な設定フォーマット
MCP 対応クライアントの設定ファイルには以下のように記述します。
{
"mcpServers": {
"<service-name-1>": {
"url": "https://<mcp-endpoint-1>/mcp",
"headers": {
"Authorization": "Bearer <access-token>"
}
},
"<service-name-2>": {
"url": "https://<mcp-endpoint-2>/mcp",
"headers": {
"Authorization": "Bearer <access-token>"
}
}
}
}
Bob での設定例
Bob で接続を試みたところ、上記の基本フォーマットでは動作しませんでした。
これは Bob の MCP クライアントがトランスポートの種類を明示的に要求するためで、"type": "streamable-http" を指定することで解決します。
Bob の MCP 設定は、設定画面(Settings → MCP Servers)または mcp_settings.json に記述します。
{
"mcpServers": {
"Question and answer": {
"type": "streamable-http",
"url": "https://<chat-bot-mcp-endpoint>/mcp",
"headers": {
"Authorization": "Bearer <ai-service-token>"
}
},
"Digitize documents": {
"type": "streamable-http",
"url": "https://<digitize-mcp-endpoint>/mcp",
"headers": {
"Authorization": "Bearer <ai-service-token>"
}
}
}
}
MCPを設定することで、RAGの機能にAIコードエージェントからアクセスが可能になるので、PDF化された固有情報などをAIで利用するために使えるかと思います。
公式のgithubに更新情報の動画が掲載されています。
こちらでは、Claude Codeを使ったデモを見ることが出来ます。
デモの中では画像のようにClaude CodeにMCPを登録していました。
