keyboard_double_arrow_up

Blog X-Tech5エンジニアがお送りするテックブログ
SREやDevOpsをはじめ、インフラエンジニアリングの実践情報を届けします。

AWS公式ドキュメント検索を効率化:DifyとMCP Serverで作るAIチャットボット

2025年5月13日 

はじめに

AWSに関する情報を探す際、公式ドキュメントは最も正確で重要なソースです。しかし、膨大なドキュメントの中から必要な情報や解決策を見つけ出すのは時に一苦労です。

AWSが公開している AWS Documentation MCP Server は最新の情報を検索できる Model Context Protocol (MCP) サーバーであり、効率的なドキュメント検索の助けになります。

今回は Dify Community 版を利用し、
ユーザーが個別の端末設定なしに利用できるチャットボット を作成した事例を紹介します。

前提

MCPを使う際、公式サイトでも紹介されている Claude for Desktop アプリケーションに設定方法がまず思い浮かびます。
この場合、利用者が個別にインストールや設定を行う必要があるため、その手間を省いて利用できる方法を検討しました。

そこで今回は既存の Dify Community サーバーを用いて、Dify と MCP を連携させる形でチャットボットを作成しました。

利用する生成AIのモデルの比較や変更が容易に行え、ノーコードでチャットボットを作成できるので、手軽に生成AIアプリケーションを作成する上で、Difyは非常に適していると感じています。

構成

様々な構成が考えられますが、今回は以下のように EC2インスタンス 1台で完結する構成としました。

  • Dify Community 版を docker compose で起動
  • MCP Server を docker compose で起動
  • Dify と MCP を連携
  • Dify 上でMCPを利用するエージェントを作成

構築方法

既に様々な構築例が公開されていますので、今回はポイントのみ抜粋して作成手順をご紹介します。

(1) Dify 起動

cd /opt
sudo git clone https://github.com/langgenius/dify.git
cd /opt/dify/docker

# .env を作成、環境に合わせて適宜変更
sudo cp .env.example .env

# MCP Server とのコンテナ間通信に利用 (後述)
sudo vi docker-compose.override.yaml

docker compose up -d

MCP Server と通信するための設定を override ファイルで追加します。
元の設定ファイルを変更せずに設定を追加・上書きできるので override 方式を選択しています。
今回の場合、plugin_daemon サービスが MCP Server に接続できる必要があります。

  • docker-compose.override.yaml
services:
  plugin_daemon:
    networks:
        - default
        - mcp-servers-network

networks:
  mcp-servers-network:
    name: mcp-servers-network

(2) MCP Server 起動

Dify とはリリースサイクルも異なる事が予想されるため、MCP Server群は個別の docker compose で管理するようにしています。

sudo mkdir -p /opt/mcp-servers
cd /opt/mcp-servers/
sudo git clone <https://github.com/awslabs/mcp.git awslabs/mcp

vi docker-compose.yaml

docker compose up -d

起動用の Dockerfile が用意されているのでそのまま利用します。
aws-documentation-mcp-serverは、デフォルトstdio(標準出力)で起動しますが、オプションを付与することで SSE(Server-Sent Events) を利用したHTTP通信が可能になります。

Dify と連携するために、今回は SSE を指定し、 Dify 側に追加したネットワークを利用します。

  • docker-compose.yaml
services:
  aws-doc-mcp:
    build: ./awslabs/mcp/src/aws-documentation-mcp-server
    image: awslabs/aws-documentation-mcp-server:latest
    command: --sse --port 8888
    restart: always
    environment:
      - FASTMCP_LOG_LEVEL=ERROR
    networks:
      - default
      - mcp-servers-network

networks:
  mcp-servers-network:
    external: true

(3) Dify プラグイン設定

公式ドキュメントで紹介されている MCP SSE / StreamableHTTP プラグインを利用します。

認証の設定を行います。

url にはサービス名とポート番号を指定します。

  • MCP Servers config
{
    "aws-doc-mcp": {
        "url": "http://aws-doc-mcp:8888/sse",
        "headers": {},
        "timeout": 50,
        "sse_read_timeout": 50
    }
}

認証済み となれば成功です。

(4) Dify エージェント作成

“ツール” に mcp_sse の Fetch MCP Tools と Call MCP Tools を追加します。

“手順” にシステムプロンプトを設定します。 簡略化していますが、以下にプロンプトの例を示します。

あなたは、AWS (Amazon Web Services) の公式ドキュメントに基づいて、ユーザーからの質問に回答する専門のアシスタントです。

# 役割
あなたは、AWSの技術情報やサービス仕様に関する質問に対し、正確かつ信頼性の高い情報を提供するエキスパートです。

# 知識の範囲
回答は、必ず MCP (Model Context Protocol) "search_documentation"、"recommend" から取得したAWS公式ドキュメントの内容のみに基づいてください。

# トーンとスタイル
正確、客観的、かつプロフェッショナルなトーンで回答してください。

# 出力形式
回答の最後に「参照ドキュメント:」という見出しでAWS公式ドキュメントの具体的なURLをリスト形式で明記してください。複数のドキュメントを参照した場合も、全てのURLはこの最後のセクションにまとめて記載してください。

プレビュー実行を行い、 MCP Server を利用した回答になることを確認します。

(5) アプリケーションの実行確認

公開して “アプリを実行” から同様に確認します。

タイトルが中国語で表示されることがありますが、これはご愛嬌ということで。後から変更可能です。

まれに URL が返らない場合がありますが、この点についてはプロンプトを調整することで改善できると考えています。

モデルについて

ご参考までに、いくつかのモデルで試した結果を以下に示します。

プロンプトの調整やモデルの選択によって、得られる結果は変わってくると考えられます。

  • OpenAI
    • GPT-4.1 を主に利用しています。
    • GPT-4.1 mini: 速度とコスト面では優れていましたが、回答にURLが含まれない場合が増えました。
    • GPT-4.1 nano: 検索精度が低下しました。
  • Claude:
    • Claude 3.7 Sonnet はツールの呼び出しに失敗したり、トークン数超過で回答が返却されないことがありました
    • Claude 3.5 Haiku は回答の文面がやや理解しにくい面がありました。

おわりに

今回はAWSの公式ドキュメント検索を効率化するAIチャットボットを構築した事例をご紹介しました。

この方法の大きな利点は、利用ユーザー側で特別な端末設定が不要な点、そして公式ドキュメントに基づく信頼性の高い情報を、対話形式で手軽に入手できる点です。 AWSの広範なドキュメントの中から必要な情報へ迅速にたどり着くための、強力なサポートツールとなると考えています。


[免責]

本記事はBlog投稿時点における投稿者又は弊社環境で確認している事象や手順です。

各サービスの仕様や機能は変更される可能性があります。最新の情報については各公式サイトをご確認ください。

本件に伴い生じた不具合・損害等について、投稿者及び弊社は一切の責任を負わないものとします。