IBM Documentation検索MCPサーバー
はじめに
IBM BobなどのAIエージェントを使っていて、「IBM製品の機能について、公式ドキュメントを参照しながらコーディング支援や質問への回答をしてほしい」と思ったことはありませんか?
LLMは学習データに基づいて回答しますが、最新の機能や詳細な仕様についてはハルシネーションが起こり、公式ドキュメントを参照しないと正確な情報が得られないことがあります。特に、IBM製品の複雑な機能や設定手順については、ドキュメントを直接確認することが重要です。
そこで、MCP (Model Context Protocol) を使って、IBM BobからIBM Documentationを検索できるツールを作成しました。IBM Documentationの内容をサーバー内に持っているわけではなく、必要に応じてインターネット経由で検索を行います。IBM Documentationに対してリアルタイム検索ベースのRAGが行えるようになるイメージです。これにより、AIエージェントが公式ドキュメントの内容を参照しながら、より正確で詳細な回答を提供できるようになります。
なお、このMCPサーバーは、IBM Bobを活用して作成しました。使ったプロンプトはこちらです。
ソースコード
完全なソースコードは以下です:
- テスト環境
- Windows 11
- Python 3.12.10
Windows PCのローカルで動作確認しています。リモートのサーバーとしてはテストしていません。Macなどでも動作はすると思います。
利用イメージ
IBM BobのAdvancedモードで、watsonx Orchestrateでlangflowは使える?と質問すると、関連するドキュメントを自動検索して回答します。
AIエージェントは、search_ibm_docsとget_ibm_topicのツールを使用してマニュアルを検索します。

やっているのはIBM Documentationでの検索と同じです。

提示されたURLにアクセスすると、マニュアルに該当の記述が確認できます。

プロンプトのコツ
Advancedモードで製品名を含めると、このツールを使用する可能性が高くなります。ただし、AdvancedモードにするだけではLLMの知識だけで回答することもあるため、確実にツールを使用させたい場合はibm-docsを使ってと明示的に指定してください。また、元のマニュアルのURLも確認したい場合は、URLも教えてと追加すると出力されます。
対応製品
IBM Documentationで公開されているすべての製品に対応可能です。新しい製品を追加する場合は、products.yamlに定義を記述してください。以下の製品をサンプルとして定義済みです:
- IBM SPSS Modeler (v19.0.0) - 統計分析とデータマイニングのためのビジュアルデータサイエンスツール
- IBM Cloud Pak for Data (v5.3.x) - データとAIのための統合プラットフォーム
- IBM CPLEX Optimization Studio (v22.1.1) - 数理最適化のための統合開発環境
- IBM watsonx Orchestrate - AIを活用したビジネスプロセス自動化プラットフォーム
- IBM Planning Analytics (v3.1.0) - 統合ビジネスプランニングとパフォーマンス管理ソリューション
製品スコープ(各製品を識別するID)を設定するだけで、任意のIBM製品のドキュメントを検索できます。
機能
1. list_ibm_products - 製品一覧取得
利用可能なIBM製品の一覧を表示します。
パラメータ: なし
使用例:
list_ibm_products()
戻り値: フォーマット済みテキスト文字列
- 製品一覧が人間が読みやすい形式で返されます
- 有効/無効の製品が分類されて表示されます
- 各製品の名前、バージョン、ID、説明、ステータスが含まれます
出力例:
ℹ 登録製品数: 5
- IBM SPSS Modeler (v19.0.0) [spss-modeler] ✅ 有効
- IBM Cloud Pak for Data (v5.3.x) [cloud-pak-data] ✅ 有効
- IBM CPLEX Optimization Studio (v22.1.1) [cplex] ✅ 有効
- IBM watsonx Orchestrate (vbase) [watsonx-orchestrate] ✅ 有効
- IBM Planning Analytics (v3.1.0) [planning-analytics] ❌ 無効
ℹ 有効な製品数: 4
2. search_ibm_docs - ドキュメント検索
指定した製品のドキュメント内をキーワードで検索します。
パラメータ:
-
product_id(必須): 製品ID(例: 'spss-modeler') -
keyword(必須): 検索キーワード -
max_results(オプション): 最大結果数(デフォルト: 5)
使用例:
{
"product_id": "spss-modeler",
"keyword": "stream save",
"max_results": 5
}
戻り値: 検索結果の辞書のリスト List[Dict[str, str]]
各辞書には以下のキーが含まれます:
-
title(str): トピックのタイトル -
url(str): トピックの完全なURL -
snippet(str): 検索結果のスニペット(抜粋テキスト) -
product(str): 製品名 -
breadcrumb(str, オプション): パンくずリスト(トピックの階層構造)
出力例:
1. 生成されたオブジェクトへのアクセス
URL: https://www.ibm.com/docs/ja/spss-modeler/19.0.0?topic=api-accessing-generated-objects
スニペット: import modeler.api stream = modeler.script.stream() # Set this to an existing folder on your system....
2. スタンドアロン スクリプトの例 :モデルの保存とロード
URL: https://www.ibm.com/docs/ja/spss-modeler/19.0.0?topic=scripts-standalone-script-example-saving-loading-model
スニペット: . # Note use of forward slash and trailing slash. installation = "C:/Program Files/IBM/SPSS/Modeler/...
3. extensionexportnode プロパティー
URL: https://www.ibm.com/docs/ja/spss-modeler/19.0.0?topic=properties-extensionexportnode
スニペット: Python for Spark の例 #### script example for Python for Spark import modeler.api stream = modeler.scr...
3. get_ibm_topic - トピック取得
特定のトピックページの内容を取得します。
パラメータ:
-
product_id(必須): 製品ID -
topic_path(必須): トピックパス(例: 'automation-scripting-scripting-language')
使用例:
{
"product_id": "spss-modeler",
"topic_path": "automation-scripting-scripting-language"
}
戻り値: トピック情報の辞書 Dict[str, str]
以下のキーが含まれます:
-
title(str): トピックのタイトル -
content(str): トピックの本文内容(テキスト形式、HTMLタグは除去済み) -
url(str): トピックの完全なURL -
product(str): 製品名
出力例:
タイトル: スクリプトとスクリプト言語
製品: IBM SPSS Modeler
URL: https://www.ibm.com/docs/ja/spss-modeler/19.0.0?topic=automation-scripting-scripting-language
コンテンツ長: 105文字
コンテンツプレビュー:
スクリプトとスクリプト言語
スクリプトの概要
スクリプトのタイプ
ストリーム・スクリプト
スタンドアロンスクリプト
SuperNode スクリプト
ストリーム内のループおよび条件付き実行
スクリプトの実行と中断...
セットアップ方法
詳細なセットアップ手順は、以下のガイドを参照してください:
設定が完了すると、IBM Bobで以下のように表示されます。
実装のポイント
課題1: SPAの動的コンテンツ
問題: IBM DocumentationはJavaScriptで動的にコンテンツを読み込むため、通常のHTTPリクエストでは取得できない
解決策:
- 検索にはIBM Docs Search APIを使用
- トピック取得にはPlaywrightでブラウザを自動化
課題2: 複数製品への対応
問題: 各IBM製品には異なるスコープIDとURL構造がある
解決策: 設定ファイル(products.yaml)ベースのアプローチで製品情報を管理。各製品のスコープ、URL、言語などをYAMLで定義し、動的に読み込む仕組みを実装しました。
# products.yaml の例
products:
spss-modeler:
name: "IBM SPSS Modeler"
base_url: "https://www.ibm.com/docs/ja/spss-modeler/19.0.0"
scope: "SS3RA7_19.0.0"
language: "ja"
version: "19.0.0"
enabled: true
製品スコープの見つけ方と追加方法
まずは、以下のようなプロンプトで追加するのが効率的です。
@/config/products.yaml にIBM Planning Analyticsを追加して
ただし、AIによる製品スコープの推測はハルシネーションを起こしやすいため、各製品のURLから直接確認することを推奨します。
- IBM Documentationで目的の製品ページを開く
- URLを確認する:
https://www.ibm.com/docs/ja/{product-path}/{version} - ブラウザのデベロッパーツールを開く
4.Networkタブを表示し、ページを更新して?lang=jaを探す

テスト
包括的なテストスクリプトで動作を確認できます。リポジトリに含まれるtest_server.pyを実行してください:
# テストの実行
python test_server.py
テストでは以下の項目を確認します:
- 製品一覧の取得
- 複数製品でのドキュメント検索
- トピックページの取得
- エラーハンドリング
設定ファイルによる製品管理
製品情報を設定ファイルで管理しています:
新しい言語の追加方法
-
src/ibm_docs/i18n/locales/に新しい言語ファイルを作成(例:fr.json) - 既存の
ja.jsonまたはen.jsonをテンプレートとして使用 - すべてのメッセージを翻訳
-
config/products.yamlのsupported_languagesに言語コードを追加
global:
supported_languages: ["ja", "en", "fr"]
応用例
1. 複数言語対応
YAMLファイルで言語を指定することで、製品ごとに異なる言語のドキュメントを検索できます:
# products.yaml
products:
spss-modeler-ja:
scope: "SS3RA7_19.0.0"
base_path: "spss-modeler/19.0.0"
name: "IBM SPSS Modeler (日本語)"
language: "ja"
spss-modeler-en:
scope: "SS3RA7_19.0.0"
base_path: "en/spss-modeler/19.0.0"
name: "IBM SPSS Modeler (English)"
language: "en"
2. バージョン比較
異なるバージョンのドキュメントを比較する場合は、以下のように製品IDを分けて定義します:
# products.yaml
products:
spss-modeler-v19:
scope: "SS3RA7_19.0.0"
base_path: "spss-modeler/19.0.0"
name: "IBM SPSS Modeler 19.0"
language: "ja"
spss-modeler-v18:
scope: "SS3RA7_18.0.0"
base_path: "spss-modeler/18.0.0"
name: "IBM SPSS Modeler 18.0"
language: "ja"
これにより、AIエージェントが異なるバージョンのドキュメントを検索できるようになります。
3. カスタムフィルタリング
特定のトピックタイプのみを抽出:
def filter_by_type(results: List[Dict], topic_type: str) -> List[Dict]:
"""トピックタイプでフィルタリング"""
return [r for r in results if topic_type in r.get('breadcrumb', '')]
# 使用例
api_docs = filter_by_type(results, "API reference")
tutorials = filter_by_type(results, "Tutorial")
参考リンク
まとめ
この記事では、IBM Documentation全般に対応したMCPサーバーを紹介しました。
主な特徴
- 設定ベースアプローチ: YAMLファイルで製品を簡単に追加・管理
- 多言語対応: 日本語・英語のドキュメントに対応
- 3つのツール: 製品一覧取得、ドキュメント検索、トピック取得
活用シーン
- IBM製品の公式ドキュメントを参照しながらのコーディング
- 最新機能や詳細な仕様の確認
- 複数製品のドキュメントを横断的に検索
- AIエージェントによる正確な技術サポート
IBM BobによるMCPサーバー作成について
このMCPサーバーは、IBM Bobを活用して作成しました。
使用した主なプロンプトは以下の通りです:
当初はSPSS Modelerのマニュアルだけを参照させようとしていました。
bobにSPSS Modelerのマニュアルを参照させることはできませんか
MCPサーバーを作るプランを立ててください。
標準機能:トピック取得 + キーワード検索機能
pythonでつくれますか
IBM Documentationのページがjavascriptで作られたSPAであったため普通にRequestするだけではうまく動かず、試行錯誤をしました。
IBM BobでIBM Documentationの検索はできますか
MCPサーバーでは回答がjavascriptということで返ってきませんでした
https://www.ibm.com/docs/api/v1/search?query=stream%20save&products=SS3RA7_19.0.0&lang=ja&size=3でドキュメント検索ができるので反映してください
get_spss_topicはコンテンツを収集できていないようです
SPAでコンテンツを取得できませんか
SPSS Modeler専用だったので、IBM Documentation全般に使えるように修正し、英語にも対応させました。
spss_modeler_docをIBMのドキュメント全般につかえるMCPサーバーにすることはできますか?デメリットはありますか?
新しいプロジェクトで 設定ベースアプローチでつくることはできますか
多言語対応でとりあえず日本語と英語に対応できますか






