Amazon Bedrock Knowledge Bases Retrieval MCP Server を Claude Desktop に接続しナレッジベース内のコンテキスト元に回答を生成してみた

Amazon Bedrock Knowledge Bases Retrieval MCP Server を Claude Desktop に接続しナレッジベース内のコンテキスト元に回答を生成してみた

Clock Icon2025.04.20

こんにちは!クラウド事業本部コンサルティング部のたかくに(@takakuni_)です。

MCP 触っていますでしょうか。AWS からも、多くの MCP サーバーが登場しており、ユーザーにとって便利になっています。

https://github.com/awslabs/mcp

今回はその中の Amazon Bedrock Knowledge Bases Retrieval MCP Server を触ってみたいと思います。

Amazon Bedrock Knowledge Bases Retrieval MCP Server

Amazon Bedrock Knowledge Bases Retrieval MCP Server は、 Amazon Bedrock Knowledge bases で提供されるナレッジベースの機能を MCP 経由でクライアントアクセスできるようにした、MCP サーバーです。

Amazon Bedrock Knowledge Bases Retrieval MCP Server を利用することで、ナレッジベースに保管された社内の情報などのコンテキスト情報を補足できます。

仕組み

Amazon Bedrock Knowledge Bases Retrieval MCP Server で行う操作は主に以下の通りです。回答生成 (Generate) の処理は MCP クライアント側にあることが特徴です。

  1. 指定したナレッジベースに対してベクトル検索を行う Retrieve API の実行
  2. Retrieve API から取得された検索結果のリランク(オプション)

フロー図1(1).png

メリットはやはり、ナレッジベースとのやりとりに MCP という共通プロトコルが利用できるようになったため、他の LLM アプリケーションにもナレッジベースが組み込みやすくなったことでしょうか。

やってみる

それでは実際にナレッジベースを作成し、Amazon Bedrock Knowledge Bases Retrieval MCP Server 経由で検索してみましょう。

ナレッジベースの作成は HashiCorp Terraform で作成しました。作成したコードは以下になります。

Terraform のコードについては本筋から外れるため、省略気味で解説します。

mcp-multirag-kb タグ

MCP Settings に関しての内容は後ほど解説しますが、Amazon Bedrock Knowledge Bases Retrieval MCP Server では、以下のように特定のナレッジベースを利用するといった設定項目がありません。

{
  "mcpServers": {
    "awslabs.bedrock-kb-retrieval-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.bedrock-kb-retrieval-mcp-server@latest"],
      "env": {
        "AWS_PROFILE": "your-profile-name",
        "AWS_REGION": "us-east-1",
        "FASTMCP_LOG_LEVEL": "ERROR"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

では、アカウント内で利用したい/したくない、ナレッジベースをどのように認識するのでしょうか。答えはタグにあります。

ナレッジベースに対して、mcp-multirag-kb タグを付与し MCP Server 内で bedrock:ListTagsForResource API を実行している仕組みでした。

そのため、利用したいナレッジベースには事前にタグを付与しておきましょう。

Amazon Bedrock Knowledge Base: You must have at least one Amazon Bedrock Knowledge Base with the tag key mcp-multirag-kb with a value of true

https://awslabs.github.io/mcp/servers/bedrock-kb-retrieval-mcp-server/

main.tf
 resource "aws_bedrockagent_knowledge_base" "this" {
   name     = "${local.prefix}-knowledge-base"
   role_arn = aws_iam_role.knowledge_bases.arn
 
   knowledge_base_configuration {
     type = "VECTOR"
     vector_knowledge_base_configuration {
       embedding_model_arn = data.aws_bedrock_foundation_model.embedding.model_arn
     }
   }
 
   storage_configuration {
     type = "PINECONE"
     pinecone_configuration {
       connection_string      = "https://${pinecone_index.this.host}"
       credentials_secret_arn = aws_secretsmanager_secret.this.arn
       field_mapping {
         metadata_field = "metadata"
         text_field     = "text"
       }
     }
   }
   depends_on = [
     aws_iam_role_policy_attachment.knowledge_bases,
   ]
 
+  tags = {
+    mcp-multirag-kb = "true"
+  }
 }

IAM

MCP Server 用の IAM 権限について具体的な JSON がなかったため、調べてみました。次を設定するとうまく動きました。(最小権限まで絞れているかは怪しいですが。)

リランクを行う前提で IAM を作成しましたが、不要であれば "bedrock:Rerank", "bedrock:InvokeModel" を外しても動きます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:GetKnowledgeBase",
                "bedrock:Retrieve"
            ],
            "Resource": "arn:aws:bedrock:us-west-2:123456789012:knowledge-base/ナレッジベースID"
        },
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:ListDataSources",
                "bedrock:ListTagsForResource",
                "bedrock:ListKnowledgeBases",
                "bedrock:Rerank"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "bedrock:InvokeModel",
            "Resource": "arn:aws:bedrock:us-west-2::foundation-model/amazon.rerank-v1:0"
        }
    ]
}

以下のようにリランクなしで、動かすことも可能です。

{
  "query": "このKnowledge Baseにはどんな情報が入っていますか?",
  "knowledge_base_id": "8RC306F77L",
  "data_source_ids": ["6B10DMB9PJ"],
  "number_of_results": 3,
  "reranking": false
}

ナレッジベースの同期

Terraform でナレッジベースの作成が終わったら、データソースの同期を行います。同期が完了したら MCP Client の設定に入ります。

2025-04-20 at 16.59.59-Knowledge Base  AmazonBedrock  us-west-2.png

MCP Client との接続

MCP を利用するように設定します。今回 MCP Client は Claude for desktop を使用しました。

開発者設定から 構成を編集 をクリックします。

2025-04-20 at 17.01.05-Claude@2x.png

claude_desktop_config.json を編集します。AWS_PROFILEAWS_REGION を適宜変更しましょう。

claude_desktop_config.json
{
  "mcpServers": {
    "awslabs.bedrock-kb-retrieval-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.bedrock-kb-retrieval-mcp-server@latest"],
      "env": {
        "AWS_PROFILE": "mcp",
        "AWS_REGION": "us-west-2",
        "FASTMCP_LOG_LEVEL": "ERROR"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

インストール済みMCPサーバーに表示されました。

2025-04-20 at 17.42.20-Claude@2x.png

連携サービスを選択から KnowledgeBases をクリックします。

2025-04-20 at 18.07.21-Claude@2x.png

ナレッジベースの詳細が出てきました。(おそらくこのタイミングで bedrock:ListTagsForResource API が実行されています)

2025-04-20 at 17.42.41-Claude@2x.png

質問してみましたが、うまくナレッジベースの内容を取得して回答できていますね。

2025-04-20 at 17.44.20-Claude@2x.png

検索結果の表示をクリックすると、クエリの内容と結果が出てきましたね。(エンコードされちゃっていますが、うまく吸収できているようでした)

2025-04-20 at 17.44.49-Claude@2x.png

まとめ

以上、「Amazon Bedrock Knowledge Bases Retrieval MCP Server を Claude Desktop に接続しナレッジベース内のコンテキスト元に回答を生成してみた。」でした。

AWS の MCP サーバーどんどん増えてきていて興味深いですね。

執筆時点で提供されている MCP Server は DevelpopersIO ではコンプリートできたはず(?)。

これから、どんな MCP サーバーが増えていくのか非常に楽しみです。クラウド事業本部コンサルティング部のたかくに(@takakuni_)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.