r3-yamauchi/bedrock-kb-mcp-server
If you are the rightful owner of bedrock-kb-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
Amazon Bedrock Knowledge Base MCP Server is an unofficial server for managing Amazon Bedrock Knowledge Base using the Model Context Protocol (MCP).
Amazon Bedrock Knowledge Base MCP Server (Unofficial)
Amazon Bedrock Knowledge Baseを管理するためのMCP(Model Context Protocol)サーバーです。
本プロジェクトでは FastMCPフレームワークを使用して Bedrock Knowledge Base に対する操作と RAG(Retrieval-Augmented Generation)機能を提供しています。
リポジトリ
https://github.com/r3-yamauchi/bedrock-kb-mcp-server
主な機能
- Knowledge Base管理: 作成、一覧取得、詳細取得、更新(敢えて削除機能は実装していません)
- ストレージタイプは S3 のみをサポート
- カスタムパーシング設定とチャンキング設定のサポート
- データソース管理: 作成、一覧取得(敢えて削除機能は実装していません)
- カスタムパーシング設定とチャンキング設定のサポート
- データ取り込みジョブ: 開始、ステータス確認
- RAGクエリ: Knowledge Baseに対する検索クエリの実行
- S3ドキュメント管理: アップロード、一覧取得
プロジェクト構造
bedrock-kb-mcp-server/
├── pyproject.toml # プロジェクト設定と依存関係
├── README.md # プロジェクトドキュメント
├── LICENSE # MITライセンス
├── .gitignore # Git除外設定
└── src/
└── bedrock_kb_mcp_server/
├── __init__.py # パッケージ初期化ファイル
├── main.py # MCPサーバーのメインエントリーポイント
├── bedrock_client.py # AWS Bedrock APIクライアントラッパー
├── models.py # Pydanticモデル(バリデーションと型定義)
├── types.py # TypedDict定義(型ヒントの改善)
└── utils.py # ユーティリティ関数(設定、エラーハンドリング、ログ、ARN正規化)
技術スタック
コアライブラリ
- FastMCP (
>=0.1.0): MCPサーバーを構築するためのフレームワーク - boto3 (
>=1.26.0): AWS SDK for Python - AWSサービスとの通信に使用 - pydantic (
>=2.0.0): データバリデーションと設定管理
開発ツール
- pytest (
>=7.0): テストフレームワーク - pytest-asyncio (
>=0.21.0): 非同期テストサポート - black (
>=23.0): コードフォーマッター - ruff (
>=0.1.0): 高速なPythonリンター - mypy (
>=1.0): 静的型チェッカー
Python要件
- Python 3.12以上が必要です
クイックスタート
前提条件
- Python 3.12以上がインストールされていること
uvがインストールされていること- AWSアカウントと適切な認証情報が設定されていること
1. 依存関係のインストール
プロジェクトのルートディレクトリで以下のコマンドを実行します:
uv sync
開発環境の場合は:
uv sync --all-extras
2. AWS認証情報の設定
以下のいずれかの方法でAWS認証情報を設定します:
方法1: AWSプロファイルを使用(推奨)
export AWS_PROFILE=your-profile-name
export AWS_REGION=us-east-1
方法2: 環境変数で直接設定
export AWS_ACCESS_KEY_ID=your-access-key-id
export AWS_SECRET_ACCESS_KEY=your-secret-access-key
export AWS_REGION=us-east-1
方法3: AWS CLIで設定済みの場合
AWS CLIでaws configureを実行して設定済みの場合は、追加の設定は不要です。
3. 環境変数の設定(オプション)
ログレベルや構造化ログの設定を行います:
# ログレベルを設定(DEBUG, INFO, WARNING, ERROR, CRITICAL)
export FASTMCP_LOG_LEVEL=INFO
# 構造化ログ(JSON形式)を使用する場合
export FASTMCP_STRUCTURED_LOG=false
4. サーバーの起動
以下のコマンドでサーバーを起動します:
uv run bedrock-kb-mcp-server
正常に起動すると、以下のようなログが表示されます:
2024-01-01 12:00:00,000 - bedrock_kb_mcp_server.main - INFO - Starting Amazon Bedrock Knowledge Base MCP Server
5. 動作確認
MCP Serverは標準入力(stdin)からJSON-RPC形式のリクエストを受け取り、標準出力(stdout)にJSON-RPC形式のレスポンスを返します。
動作確認方法1: サーバーが起動していることを確認
サーバーを起動すると、以下のようなログが表示されます。このログが表示されれば、サーバーは正常に起動しています。
動作確認方法2: MCPクライアントを使用(推奨)
MCP対応のクライアント(例: Claude Desktop、Cursor IDEなど)を使用して接続します。
Claude Desktopの場合:
~/Library/Application Support/Claude/claude_desktop_config.jsonを編集- MCP Serverを追加:
{
"mcpServers": {
"bedrock-kb-mcp-server": {
"command": "uv",
"args": ["run", "--directory", "/path/to/bedrock-kb-mcp-server", "bedrock-kb-mcp-server"],
"env": {
"AWS_PROFILE": "your-profile-name",
"AWS_REGION": "us-east-1"
}
}
}
}
Cursor IDEの場合:
- 設定からMCP Serverを追加
- コマンドパスと環境変数を設定
動作確認方法3: テストスクリプトを使用
プロジェクトに含まれているtest_mcp_server.pyを使用:
python3 test_mcp_server.py
注意: このスクリプトはサーバーが起動してリクエストに応答することを確認しますが、実際のAWS API呼び出しは行いません。
インストール
uv sync
開発環境の場合は:
uv sync --all-extras
使用方法
環境変数の設定
以下の環境変数を設定する必要があります:
AWS_PROFILE: AWSプロファイル名(認証情報の管理に使用)AWS_REGION: AWSリージョン(例:us-east-1、デフォルト:us-east-1)FASTMCP_LOG_LEVEL: ログレベル(DEBUG,INFO,WARNING,ERROR,CRITICAL、デフォルト:INFO)FASTMCP_STRUCTURED_LOG: 構造化ログ(JSON形式)を使用するか(true/false、デフォルト:false)
サーバーの起動
uv run bedrock-kb-mcp-server
主要コンポーネント
1. bedrock_client.py - AWS Bedrock APIクライアント
AWS Bedrock Knowledge Base APIとの低レベルな通信を担当するラッパークラスです。
BedrockKBClient クラス
環境変数AWS_REGIONからリージョンを取得し、以下の3つのAWSクライアントを初期化します:
bedrock-agent: Knowledge Baseとデータソースの管理用bedrock-agent-runtime: RAGクエリ実行用s3: S3ドキュメント管理用
すべてのクライアントには以下の設定が適用されます:
- リトライ設定(最大3回、adaptiveモード)
- 接続タイムアウト(10秒)
- 読み取りタイムアウト(30秒)
主要メソッド
Knowledge Base管理
create_knowledge_base(): 新しいKnowledge Baseを作成list_knowledge_bases(): すべてのKnowledge Baseを一覧取得(ページネーション対応)get_knowledge_base(): 特定のKnowledge Baseの詳細情報を取得update_knowledge_base(): Knowledge Baseの名前、説明、IAMロールを更新
データソース管理
create_data_source(): Knowledge Baseにデータソースを追加list_data_sources(): 指定されたKnowledge Baseのデータソース一覧を取得
データ取り込みジョブ管理
start_ingestion_job(): データソースからKnowledge Baseへのデータ取り込みジョブを開始get_ingestion_job(): 取り込みジョブのステータスと統計情報を取得
RAGクエリ
retrieve(): Knowledge Baseに対してRAGクエリを実行(結果数1-100を指定可能)
S3ドキュメント管理
upload_document_to_s3(): ローカルファイルをS3バケットにアップロードlist_s3_documents(): S3バケット内のドキュメント一覧を取得(プレフィックスでフィルタリング可能)
2. main.py - MCPサーバーメイン
FastMCPフレームワークを使用してMCPサーバーを構築し、BedrockKBClientの機能をMCPツールとして公開します。
MCPツール
Knowledge Base管理ツール
create_knowledge_base: Knowledge Baseを作成- ストレージタイプ: S3、S3_VECTORS
- 埋め込みモデル: Amazon Titan、Cohere、Amazon Nova Multimodal Embeddings v1
- パーシング設定: BEDROCK_FOUNDATION_MODEL、BEDROCK_DATA_AUTOMATION
- チャンキング設定: FIXED_SIZE、HIERARCHICAL、SEMANTIC、NONE
- マルチモーダルストレージ設定(supplementalDataStorageConfiguration)
- S3 ARN形式とS3 URI形式の両方をサポート
- IAMロールARNのアカウントID自動補完
list_knowledge_bases: すべてのKnowledge Baseを一覧取得get_knowledge_base: 特定のKnowledge Baseの詳細を取得update_knowledge_base: Knowledge Baseを更新
データソース管理ツール
create_data_source: データソースを作成- パーシング設定とチャンキング設定のサポート
- S3 ARN形式とS3 URI形式の両方をサポート
list_data_sources: データソース一覧を取得
データ取り込みツール
start_ingestion_job: 取り込みジョブを開始get_ingestion_job: 取り込みジョブのステータスを取得
RAGクエリツール
retrieve: Knowledge Baseに対してRAGクエリを実行
S3ドキュメント管理ツール
upload_document_to_s3: S3にドキュメントをアップロードlist_s3_documents: S3バケット内のドキュメント一覧を取得
3. models.py - Pydanticモデル
リクエスト/レスポンスのバリデーションと型安全性を提供するPydanticモデルを定義します。
StorageType: ストレージタイプの列挙型(S3, S3_VECTORS)SourceType: データソースタイプの列挙型(S3)ParsingStrategy: パーシング戦略の列挙型(BEDROCK_FOUNDATION_MODEL, BEDROCK_DATA_AUTOMATION)ChunkingStrategy: チャンキング戦略の列挙型(FIXED_SIZE, HIERARCHICAL, SEMANTIC, NONE)ParsingConfiguration: パーシング設定モデルChunkingConfiguration: チャンキング設定モデルVectorIngestionConfiguration: ベクトル取り込み設定モデルCreateKnowledgeBaseRequest: Knowledge Base作成リクエストのバリデーション- S3 URI形式のサポート(自動的にARN形式に変換)
- IAMロールARNのアカウントID自動補完
CreateDataSourceRequest: データソース作成リクエストのバリデーション- S3 URI形式のサポート(自動的にARN形式に変換)
- 各種レスポンスモデル
4. types.py - TypedDict定義
APIレスポンスの型安全性を向上させるためのTypedDict定義を提供します。
KnowledgeBaseResponseDict: Knowledge Base作成/更新レスポンスDataSourceResponseDict: データソース作成レスポンスIngestionJobResponseDict: 取り込みジョブレスポンス- その他のレスポンス型定義
5. utils.py - ユーティリティ関数
設定管理、エラーハンドリング、ログ出力、ARN正規化などの共通機能を提供します。
validate_aws_credentials(): AWS認証情報の検証get_log_level(): ログレベルの安全な取得handle_errors(): エラーハンドリングデコレータ(AWS APIエラーの適切な処理)- 10種類以上のAWSエラーコードに対応
- AWSリクエストIDを含む詳細なエラー情報
get_aws_account_id(): STSを使用してAWSアカウントIDを取得normalize_s3_arn_or_uri(): S3 URI形式をARN形式に変換normalize_iam_role_arn(): IAMロールARNのアカウントIDを自動補完validate_required_string(): 必須文字列パラメータのバリデーション共通化StructuredFormatter: 構造化ログフォーマッター(JSON形式)sanitize_log_data(): 機密情報のマスキングsetup_logging(): ロギング設定の一元管理
ワークフロー例
1. Knowledge Baseの作成と設定
-
S3バケットにドキュメントをアップロード
upload_document_to_s3(local_file_path, bucket_name, s3_key) -
Knowledge Baseを作成(S3 URI形式とIAMロールARNの短縮形式を使用可能)
# 基本的なKnowledge Base create_knowledge_base( name="My Knowledge Base", description="Example KB", role_arn="role/BedrockKBRole", # アカウントIDなし形式(自動補完) storage_type="S3", bucket_arn="s3://my-bucket" # S3 URI形式 ) # S3 Vectorsを使用したKnowledge Base create_knowledge_base( name="Vector KB", description="Vector search enabled KB", role_arn="arn:aws:iam::123456789012:role/BedrockKBRole", storage_type="S3_VECTORS", bucket_arn="s3://vector-bucket", embedding_model_arn="arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-text-v1" ) # マルチモーダルKnowledge Base(Amazon Nova Multimodal Embeddings v1) create_knowledge_base( name="Multimodal KB", description="KB with Nova Multimodal Embeddings", role_arn="role/BedrockKBRole", storage_type="S3_VECTORS", bucket_arn="s3://vector-bucket", embedding_model_arn="arn:aws:bedrock:us-east-1::foundation-model/amazon.nova-2-multimodal-embeddings-v1:0", multimodal_storage_s3_uri="s3://multimodal-storage-bucket/" ) # カスタムパーシングとチャンキング設定を使用 create_knowledge_base( name="Custom KB", description="KB with custom parsing and chunking", role_arn="role/BedrockKBRole", storage_type="S3", bucket_arn="s3://my-bucket", parsing_strategy="BEDROCK_FOUNDATION_MODEL", parsing_model_arn="arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0", parsing_modality="MULTIMODAL", chunking_strategy="FIXED_SIZE", chunking_max_tokens=1000, chunking_overlap_percentage=20 ) -
データソースを作成(S3 URI形式とカスタム設定を使用可能)
# 基本的なデータソース create_data_source( knowledge_base_id="KB123", name="My Data Source", source_type="S3", bucket_arn="s3://my-bucket" # S3 URI形式 ) # カスタムパーシングとチャンキング設定を使用 create_data_source( knowledge_base_id="KB123", name="Custom Data Source", source_type="S3", bucket_arn="s3://my-bucket", parsing_strategy="BEDROCK_FOUNDATION_MODEL", parsing_model_arn="arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0", chunking_strategy="FIXED_SIZE", chunking_max_tokens=1000, chunking_overlap_percentage=20 ) -
データ取り込みジョブを開始
start_ingestion_job(knowledge_base_id, data_source_id) -
ジョブのステータスを確認
get_ingestion_job(knowledge_base_id, data_source_id, ingestion_job_id)
2. RAGクエリの実行
-
Knowledge Baseに対してクエリを実行
retrieve(knowledge_base_id, query, number_of_results) -
結果には関連ドキュメントと引用情報が含まれます
アーキテクチャの特徴
1. レイヤードアーキテクチャ
- プレゼンテーション層:
main.py- MCPツールの定義と公開 - ビジネスロジック層:
bedrock_client.py- AWS APIとの通信 - データ層:
models.py- データバリデーションと型定義
2. エラーハンドリング
- すべてのAWS API呼び出しは
ClientErrorを適切に処理 - 10種類以上のAWSエラーコードに対応(InternalServerException、InvalidParameterException、ResourceNotFoundExceptionなど)
- AWSリクエストIDを含む詳細なエラー情報
- エラーコードに応じた日本語メッセージを提供
- エラー情報はログに記録され、ユーザーには分かりやすいメッセージが返却される
3. ロギング
- 標準ログ: 人間が読みやすい形式(デフォルト)
- 構造化ログ: JSON形式で出力可能(
FASTMCP_STRUCTURED_LOG=trueで有効化) - 機密情報の自動マスキング: ARN、認証情報などが自動的にマスクされる
- 環境変数でログレベルを制御可能
4. 型安全性
- Pydanticを使用したデータバリデーション
- TypedDictを使用したAPIレスポンスの型定義
- すべてのMCPツール関数とBedrockKBClientメソッドの戻り値型を具体的に定義
- 型ヒントの活用
- mypyによる静的型チェック対応
- IDEの補完機能と型安全性が向上
5. 入力バリデーションと正規化
- ARN形式とURI形式の両方をサポート
- S3 ARN形式:
arn:aws:s3:::bucket-name - S3 URI形式:
s3://bucket-nameまたはs3://bucket-name/path(自動的にARN形式に変換) - IAMロールARN: 完全な形式または短縮形式(アカウントIDを自動補完)
- S3 ARN形式:
- 必須フィールドのチェック
- ストレージタイプ、パーシング戦略、チャンキング戦略の列挙型による型安全性の向上
- Pydanticモデルによる包括的なバリデーション
6. リトライロジック
- AWS API呼び出しにリトライメカニズムを実装
- 適応的リトライモード(adaptive)を使用
- 一時的なネットワークエラーやレート制限エラーに対する自動リトライ
セキュリティ考慮事項
- AWS認証情報: 環境変数
AWS_PROFILEを使用して認証情報を管理 - IAMロール: Knowledge Baseには適切なIAMロールが必要
- S3アクセス: S3バケットへのアクセス権限が必要
- リージョン設定: 適切なAWSリージョンを指定
- 機密情報のマスキング: ログ出力時にARN、認証情報などが自動的にマスクされる
トラブルシューティング
よくある問題
-
AWS認証エラー
AWS_PROFILEが正しく設定されているか確認- AWS認証情報が有効か確認
- boto3が自動的に認証情報を取得する場合もあるため(IAMロール、EC2インスタンスプロファイル)、明示的な設定がなくても動作する場合があります
-
リージョンエラー
AWS_REGIONが正しく設定されているか確認- Bedrockがそのリージョンで利用可能か確認
-
権限エラー
- IAMロールに必要な権限があるか確認
- S3バケットへのアクセス権限があるか確認
-
取り込みジョブの失敗
- データソースの設定を確認
- S3バケット内のドキュメント形式を確認
-
バリデーションエラー
- ARN形式が正しい場合、エラーメッセージを確認
- 必須フィールドがすべて指定されているか確認
エラー: AWS認証情報が見つからない
WARNING - AWS認証情報が明示的に設定されていません。
解決方法: AWS認証情報を設定してください(クイックスタートの手順2を参照)
エラー: モジュールが見つからない
ModuleNotFoundError: No module named 'fastmcp'
解決方法: 依存関係をインストールしてください
uv sync
エラー: Pythonバージョンが古い
ERROR: This package requires Python >=3.12
解決方法: Python 3.12以上をインストールしてください
サーバーが起動しない
- ログレベルを
DEBUGに設定して詳細なログを確認:
export FASTMCP_LOG_LEVEL=DEBUG
uv run bedrock-kb-mcp-server
- 構造化ログを有効にしてJSON形式で確認:
export FASTMCP_STRUCTURED_LOG=true
uv run bedrock-kb-mcp-server
実際の使用例
Knowledge Baseの一覧を取得
MCPクライアントからlist_knowledge_basesツールを呼び出すと、AWSアカウント内のすべてのKnowledge Baseが返されます。
Knowledge Baseを作成
{
"name": "my-knowledge-base",
"description": "テスト用のKnowledge Base",
"role_arn": "role/BedrockKnowledgeBaseRole",
"storage_type": "S3",
"bucket_arn": "s3://my-documents-bucket"
}
注意:
role_arnは短縮形式(role/ROLE_NAME)も使用可能で、アカウントIDが自動補完されますbucket_arnはS3 URI形式(s3://bucket-name)も使用可能で、自動的にARN形式に変換されます
RAGクエリを実行
{
"knowledge_base_id": "YOUR_KB_ID",
"query": "ドキュメントの内容について教えてください",
"number_of_results": 5
}
注意事項
- 実際のAWS APIを呼び出すため、適切なAWS認証情報とIAM権限が必要です
- Knowledge Baseの作成には、適切なIAMロールが必要です
- S3バケットへのアクセス権限が必要です
- リージョンによってはBedrockが利用できない場合があります
開発
コードフォーマット
black src/
ruff check src/
mypy src/
テスト(今後実装予定)
pytest
ライセンス
MIT License - see file for details.