[Amazon Bedrock]MCPサーバーでビジネス課題を解決する

# はじめに

皆さんはもうMCPサーバーを使っていますか？
LLMと様々なツールを簡単に連携できるので、非常に便利ですよね。

弊社は特定のビジネス課題を解決するため、営業部門にもMCPサーバーを導入しています。
この記事では、AWSのMCPサーバーを活用した社内事例をご紹介します。

![ChatGPT Image 2025年5月9日 18_32_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/67e7e6f8-8a28-417a-86b3-68e46b3e43fe.png)


# そもそもMCPサーバーは何?

Model Context Protocol（MCP）は、大規模言語モデル（LLM）をさまざまなデータソースやツールに接続するための標準化されたプロトコルです。

LLMに対して独自のツールや機能を提供し、AIアシスタントの能力を大幅に拡張することができます。

![https___qiita-image-store.s3.ap-northeast-1.amazonaws.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/a1335cdf-4e91-4fef-b368-d96e05cf7da1.png)

詳しい説明は稔さんのスライドをご参照してください、非常にわかりやすいです:point_up_tone1:

https://speakerdeck.com/minorun365/yasasiimcpru-men

# 弊社のビジネス課題

弊社は主にECデータの販売、可視化と分析サービスを提供しています。具体的には
- 商品の売上推計
- 価格動向
- ランキング情報などを見える化

データを元に、お客様の意思決定をサポートしています。

新規顧客との商談において、**「データがあれば何ができるのか」** を直感的かつ素早く理解していただくことが、成約につながる最も重要なポイントです。

![video_kaigi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/4feeaad2-9c2d-4206-b908-8173921ee265.png)

これまでは主に自社製品のBIツールを使って説明してきましたが、データ自体は見やすく表示できるものの、そこから得られる**インサイト**や**具体的な活用方法が伝わりにくい**というボトルネックがありました:point_up:

また、Amazon Bedrock Agentを活用したAIサービスも開発しましたが、Agentの思考プロセスの特性上、最終的な回答が出るまでに時間がかかってしまいます。

さらに、クライアントからの質問がAgentの想定用途から外れる可能性もあり、商談の場でクライアントに待ち時間を強いることは失注リスクにもつながるため、アプローチの変更が必要だと考えていました:thinking:
# AWS MCP Servers

https://github.com/awslabs/mcp?tab=readme-ov-file#what-is-the-model-context-protocol-mcp-and-how-does-it-work-with-aws-mcp-servers

AWS MCP ServersはAWSLabsが公開したオープンソースプロジェクトで、MCPサーバーをAWS領域に特化させたツールセットです。

**主要なMCPサーバー抜粋**

| サーバー名 | 機能の概要 | 
|:-----------|------------:|
| AWS Documentation MCP       | 公式ドキュメント全文検索＋サマリー生成        |
| CDK MCP / Terraform MCP     | IaC 生成・デプロイ・差分取得をツールチェーンから直接実行      |
| Bedrock Knowledge Bases Retrieval MCP       | Bedrock KB への検索／埋め込み更新        |
| Cost Analysis MCP       | AWS Cost Explorer API を呼び出し、コスト最適化提案        |
| その他もあります       | ...        |


**特に注目すべき2つのサーバー**

**1. Amazon Bedrock Knowledge Bases Retrieval MCP Server**

- 用途: Amazon Bedrockナレッジベースへのアクセス

**2. AWS Lambda MCP Server**

- 用途: AWS Lambda関数をMCPツールとして実行

![bedrock-agent-mcp.drawio (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/3a9c72fb-2fee-4827-be2b-6496e3e9e1d2.png)

Amazon Bedrock Agentを構築する際、Knowledge BasesとLambda Functionを利用することがよくあります。

AWS MCP Serversを使うことで、Bedrock Agentで構築したインフラストラクチャーを、様々なMCPクライアントから効率的に活用できるようになります。

既存のAIプロダクトの更新を待たずに、MCPクライアントを通じてお客様の様々なリクエストに柔軟かつ高速に対応できるようになります。

![business_idea_share.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/964e6e37-00e0-4dc3-a119-d7b10e66daba.png)

また、ビジネス側の創造力に委ねる部分もあるため、商談で得られた良いアイデアや取り組みを今後のAIプロダクト開発に反映していくことも可能になります。

# Claude DesktopにAWS MCPを接続する

![claude-desktop-application-for-windows.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/d4666cd7-31fa-4b98-8674-4ea192ec03dc.jpeg)


基本的にクライアントはどれでも構いませんが、Claude Desktopの場合は他の多様なデータソースとの連携が可能で、ウェブ検索やデータの可視化も得意としているため、個人的におすすめです。

今回の実装は、Amazon Bedrock Agentを活用したプロダクトが既に存在し、基本的に社内での利用を前提としています。
MCPサーバーを外部販売・提供する場合のアプローチについては、別の記事でまとめる予定です。

### AWS側の修正
**1. IAMユーザーの作成と権限設定**

必要な権限を持つIAMユーザーを作成します。
ナレッジベース用のカスタムポリシーは下記の通り、最小権限の原則に従う場合、必要に応じてknowledge-baseの部分をより絞り込むことができます。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:GetKnowledgeBase",
                "bedrock:Retrieve"
            ],
            "Resource": "arn:aws:bedrock:${Region}:${Account}:knowledge-base/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:ListDataSources",
                "bedrock:ListTagsForResource",
                "bedrock:ListKnowledgeBases",
                "bedrock:Rerank"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "bedrock:InvokeModel",
            "Resource": "arn:aws:bedrock:${Region}::foundation-model/amazon.rerank-v1:0"
        }
    ]
}
```

Lambda用の権限設定は`AWSLambda_FullAccess`を付与していますが、セキュリティ要件に応じてより限定的な権限に絞り込むことも可能です。

![A824B8AF-0489-476D-ACF6-49E681959E50_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/62417916-d1e6-4970-8c49-b7d82b7d72b5.jpeg)

**2. リランクモデルのアクセス権限設定**

リランク機能で使用するモデルのアクセスリクエストを事前に完了しておきます。

![DCA1D57A-A8CB-4EC0-8883-9DE7934109D2_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/54cce46e-2233-4d78-a705-17a4e2919aa4.jpeg)

**3. ナレッジベースのタグ設定**

使用したいナレッジベースに以下のタグを付与します：

- タグキー：`mcp-multirag-kb`
- タグ値：`true`

![180579CD-BF15-43A8-8C9B-816B650455B5_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/1b372ea4-9e20-4185-8fae-0b7357590b34.jpeg)

*トラブルシューティング*
ナレッジベースへのアクセス時にエラーが発生した場合は、一時的にナレッジベースのサービスロールにAmazonBedrockFullAccessをアタッチして動作確認を行ってください。権限問題が解決されれば、以下のドキュメントを参照してより適切な権限に絞り込んでください。

https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-prereq-permissions-general.html

**4. AWS認証情報の設定**

ローカル環境で以下のコマンドを実行し、作成したIAMユーザーを登録します。

```bash
aws configure
```

### Claude Desktopの設定

設定ファイルの編集
`claude_desktop_config.json`ファイルを以下のように設定します：

```json:claude_desktop_config.json
{
  "mcpServers": {
    "awslabs.lambda-tool-mcp-server": {
      "command": "path/to/uvx",
      "args": ["awslabs.lambda-tool-mcp-server@latest"],
      "env": {
        "AWS_PROFILE": "IAMユーザーネーム",
        "AWS_REGION": "you-region",
        "FUNCTION_TAG_KEY": "application",
        "FUNCTION_TAG_VALUE": "mcp-tool"
      }
    },
    "github.com/awslabs/mcp/tree/main/src/core-mcp-server": {
      "command": "path/to/uvx",
      "args": ["awslabs.core-mcp-server@latest"],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR",
        "MCP_SETTINGS_PATH": "/Users/username/Library/Application Support/Claude/claude_desktop_config.json"
      },
      "autoApprove": [],
      "disabled": false
    },
    "awslabs.bedrock-kb-retrieval-mcp-server": {
      "command": "path/to/uvx",
      "args": ["awslabs.bedrock-kb-retrieval-mcp-server@latest"],
      "env": {
        "AWS_PROFILE": "IAMユーザーネーム",
        "AWS_REGION": "you-region",
        "FASTMCP_LOG_LEVEL": "ERROR"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}
```

**Lambda関数の指定方法**
Lambda関数を追加する際には、以下のいずれかのアプローチを選択できます：

**1. タグによる指定**
キーとバリューのペアでタグを指定する方法：

```bash
        "FUNCTION_TAG_KEY": "KEY",
        "FUNCTION_TAG_VALUE": "VALUE"
```

**2. 関数名のリスト指定**
使用したいLambda関数を直接リストで指定する方法：

```bash
"FUNCTION_LIST": "your-first-function, your-second-function",
```

**3. プレフィックスによる指定**
関数名のプレフィックスで一括指定する方法：

```bash
"FUNCTION_PREFIX": "your-function-prefix",
```

高度な設定：EventBridgeスキーマレジストリの活用

Lambda関数の呼び出しに必要なスキーマが複雑な場合、EventBridgeのスキーマレジストリを指定することで、より詳細なスキーマ情報を取得できます。
`FUNCTION_INPUT_SCHEMA_ARN_TAG_KEY`という環境変数を設定することで実現可能です。

![9AEA842F-FDE7-4F46-8D42-3C17BB63F192.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/7c83eb04-36b1-4adb-81eb-cbe2b7d4369a.jpeg)

Lambdaツールクライアントから呼び出された際、説明文書も表示されるため、クライアントが仕様を理解しやすくなります。

スキーマレジストリがなくても十分な精度を得られていますが、より詳細な情報が必要な場合は有効です。

![C5FEEFC4-713A-46C4-9967-F7C1E05557F5.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/978996df-7aa0-4e4d-91f0-3546685bc218.jpeg)

**個人設定の修正**

Claudeの設定画面にある「クロードの応答において、どのような個人設定を考慮すべきですか？」という項目に、実際の利用シーンを記入します。

例えば弊社では、商品調査タスクを実行する際に、まずナレッジベースから商品IDと構造を取得し、その後用途に応じて適切なLambda関数を呼び出し、必要なパラメーターを設定するワークフローを記載しています。


設定完了したら、ナレッジベースとLambdaが繋いでることが確認できます。

![837C009B-AFC8-4F2A-98A4-099549D8E3D5_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/e977d82a-c737-4d2c-a0ca-738ca090b378.jpeg)

Claude Opus4で下記のプロンプトで実行してみます

```
oo市場で今後ヒットしそうなルームエアコンのモデルを検討してください。
MCPサーバーなどを活用して情報を収集し、収集したデータを基に、デザイン性と機能性を兼ね備えたレポートの作成をお願いします。

遠慮せずに、全力を尽くしてください。
```

![68F18D1D-23A9-4D56-A276-4250F3838B4E.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/9fa0688b-9a9e-48d6-8ded-fe2e5fd27928.jpeg)

レポートの一部の抜粋ですが、推奨モデルの考案と販売戦略まで考えてくれました。

![30878ADD-2B65-4467-8CB3-03D356A7A4FC.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/162e9016-767c-4626-92a7-91a21805857b.jpeg)

## 最後

データをモデルがアクセスしやすい場所に配置することで、活用の可能性が大きく広がるのではないでしょうか。

また、ビジネス側向けにMCP導入の資料を作成してみましたが、これまで環境構築は日常的に行ってきたものの、プログラミング経験のない方に実施していただくには、導入を推進する側に相当な推進力が求められます。

## 参考資料

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

https://awslabs.github.io/mcp/servers/lambda-mcp-server/

Amazon Bedrock Agentを学びたい方はこちらの記事を読んでみてください

https://qiita.com/minorun365/items/edc8bc7808840b308b5c