# 実装計画
- [ ] 1. プロジェクト構造と依存関係のセットアップ
- ディレクトリ構造を作成: `src/`, `tests/`
- `pyproject.toml` を作成し、依存関係を定義: `mcp[server]`, `fastmcp`, `boto3`, `pytest`, `hypothesis`, `pytest-mock`
- パッケージ用の `__init__.py` ファイルを作成
- _要件: 4.1_
- [ ] 2. 設定モジュールの実装
- [ ] 2.1 `src/config.py` を作成し、`KBConfig` データクラスと `load_config()` 関数を実装
- `AWS_REGION` を読み込み(デフォルト: `ap-northeast-1`)
- `BEDROCK_KB_ID` を読み込み(必須)
- `BEDROCK_MODEL_ARN` を読み込み(必須)
- 必須変数が欠落している場合は変数名を含む `ValueError` を発生
- _要件: 1.1, 1.2, 1.3, 1.4_
- [ ] 2.2 設定読み込みのプロパティテストを作成
- **プロパティ 1: 設定値の正確な読み込み**
- **検証対象: 要件 1.1, 1.2, 1.3**
- [ ] 2.3 設定欠落エラーのプロパティテストを作成
- **プロパティ 2: 必須設定欠落時のエラー**
- **検証対象: 要件 1.4**
- [ ] 3. レスポンスパーサーの実装
- [ ] 3.1 `src/models.py` を作成し、`Citation` と `KBResponse` データクラスを定義
- `Citation`: content, location, score
- `KBResponse`: answer, citations リスト
- _要件: 2.2, 2.3, 2.5_
- [ ] 3.2 `src/parser.py` を作成し、`parse_response()` 関数を実装
- `output.text` を answer として抽出
- `retrievedReferences` から citations を抽出
- 欠落/空フィールドを適切に処理
- _要件: 2.2, 2.3, 2.5_
- [ ] 3.3 レスポンスパースのプロパティテストを作成
- **プロパティ 3: レスポンスパースで全フィールドを抽出**
- **検証対象: 要件 2.2, 2.3, 2.5**
- [ ] 4. リクエストビルダーとBedrockクライアントの実装
- [ ] 4.1 `src/bedrock_client.py` を作成し、`query_knowledge_base()` 関数を実装
- 設定値を使用して `RetrieveAndGenerate` リクエストを構築
- max_results パラメータから `numberOfResults` を設定
- boto3 クライアントを呼び出し、パース済みレスポンスを返す
- _要件: 2.1, 2.4_
- [ ] 4.2 リクエスト構築のプロパティテストを作成
- **プロパティ 4: リクエスト構築で全パラメータを含む**
- **検証対象: 要件 2.1, 2.4**
- [ ] 5. 入力バリデーションの実装
- [ ] 5.1 `src/validation.py` を作成し、`validate_query()` 関数を実装
- 空文字列を拒否
- 空白のみの文字列を拒否
- 成功時はトリム済みクエリを返す
- _要件: 3.4_
- [ ] 5.2 空白バリデーションのプロパティテストを作成
- **プロパティ 5: 空白のみのクエリを拒否**
- **検証対象: 要件 3.4**
- [ ] 6. エラーハンドリングの実装
- [ ] 6.1 `src/bedrock_client.py` にエラーハンドリングを追加
- 認証エラー用の `ClientError` をキャッチ
- ResourceNotFound 用の `ClientError` をキャッチ
- 汎用例外をキャッチし詳細を保持
- _要件: 3.1, 3.2, 3.3_
- [ ] 6.2 エラー詳細保持のプロパティテストを作成
- **プロパティ 6: APIエラーで例外詳細を保持**
- **検証対象: 要件 3.3**
- [ ] 6.3 特定エラーシナリオのユニットテストを作成
- 認証エラーハンドリングのテスト
- KB未検出エラーハンドリングのテスト
- _要件: 3.1, 3.2_
- [ ] 7. MCPサーバーとkb_answerツールの実装
- [ ] 7.1 `src/server.py` を作成し、FastMCPサーバーと `kb_answer` ツールを実装
- "mcp-bedrock-kb" という名前で FastMCP を初期化
- query と max_results パラメータを持つ `kb_answer` ツールを登録
- バリデーション、設定、Bedrockクライアントを連携
- stdio モード用に `if __name__ == "__main__": mcp.run()` を追加
- _要件: 2.1, 4.1, 4.2_
- [ ] 7.2 ツールスキーマ登録のユニットテストを作成
- ツールが正しい名前とパラメータで登録されていることを検証
- _要件: 4.2_
- [ ] 8. エントリーポイントとドキュメントの作成
- [ ] 8.1 `mcp_bedrock_kb.py` をメインエントリーポイントとして作成
- `src/server.py` からサーバーをインポートして実行
- _要件: 4.1_
- [ ] 8.2 `README.md` を作成し、使用方法を記載
- 環境変数を文書化
- MCPクライアント設定の例を提供
- _要件: 1.1, 1.2, 1.3, 1.5_
- [ ] 9. 最終チェックポイント
- 全テストが通ることを確認し、質問があればユーザーに確認する