🐙

CDK, DynamoDB, Diagram MCP サーバーを使ってみる

に公開

はじめに

みなさん MCP サーバー使ってますか?
毎日のように新たな MCP サーバーが生まれていますね。

AWS の公式で出ている MCP サーバーの種類も、気づいたらかなり増えていました。

https://github.com/awslabs/mcp/tree/main

今回はその中でも、以下の 3 つ使って簡単な在庫管理アプリを構築してみました。

特に Diagram MCP サーバーでは、作成するアプリケーションのアーキテクチャ図を出してくれるのはありがたいです。
また、DynamoDB とのやり取りを自然言語でできるのはありがたいですね。

作成されたアプリ自体は適当に考えたものですのであまり重要ではなく、3 つの MCP サーバーを用いると非常に簡単にアプリが構築できること、データを扱えることが伝わると嬉しいです。

Amazon Developer Q CLI に MCP サーバーを設定する

MCPサーバーの設定方法について、mcp.json ファイルを用意します。

mcp.json
{
"mcpServers": {
    "awslabs.core-mcp-server": {
        "command": "uvx",
        "args": [
            "awslabs.core-mcp-server@latest"
        ],
        "env": {
            "FASTMCP_LOG_LEVEL": "ERROR"
        },
        "autoApprove": [],
        "disabled": false
    },
    "awslabs.aws-diagram-mcp-server": {
        "command": "uvx",
        "args": [
            "awslabs.aws-diagram-mcp-server"
        ],
        "env": {
            "FASTMCP_LOG_LEVEL": "ERROR"
        },
        "autoApprove": [],
        "disabled": false
    },
    "awslabs.dynamodb-mcp-server": {
        "command": "uvx",
        "args": [
            "awslabs.dynamodb-mcp-server@latest"
        ],
        "env": {
            "AWS_PROFILE": "default",
            "AWS_REGION": "us-west-2",
            "FASTMCP_LOG_LEVEL": "ERROR"
        },
        "disabled": false,
        "autoApprove": []
    },
    "awslabs.cdk-mcp-server": {
        "command": "uvx",
        "args": ["awslabs.cdk-mcp-server@latest"],
        "env": {
        "FASTMCP_LOG_LEVEL": "ERROR"
        },
        "disabled": false,
        "autoApprove": []
    }
}}

アプリの要件書を準備する

REQUIREMENTS.md というファイルを用意してアプリ要件を記述して、Q CLI に作成を依頼します。

REQUIREMENTS.md
# 実施する内容
1. 在庫管理システムを AWS CDK を用いて作成する
2. aws-diagram-mcp-server を用いて、アーキテクチャ図をアウトプットする

## 1. 在庫管理システムを AWS CDK を用いて作成する
- Profile: default を使用し、ap-northeast-1 にて作成してください。
- CDK は Typescript を使用してください。

### システム構成
1. DynamoDB テーブル
   • 商品テーブル: 商品情報を管理
   • 在庫テーブル: 在庫数や在庫状況を管理
   • 取引履歴テーブル: 入出庫の履歴を記録

2. Lambda 関数(ランタイムは python を使うこと)
   • 商品管理関数: 商品の登録・更新・削除
   • 在庫管理関数: 在庫の確認・更新
   • 入出庫処理関数: 入庫・出庫処理と履歴記録
   • 在庫アラート関数: 在庫が閾値を下回った際の通知

3. API Gateway
   • RESTful APIエンドポイントを提供
   • Lambda関数との連携

## 主要機能
1. 商品管理
   • 商品の登録・更新・削除
   • 商品情報(ID、名前、カテゴリ、説明、価格など)の管理
   • 商品検索・フィルタリング

2. 在庫管理
   • 現在の在庫数の確認
   • 在庫状況の更新(入庫・出庫)
   • 在庫閾値の設定と通知

3. 入出庫処理
   • 入庫処理(仕入れ、返品など)
   • 出庫処理(販売、廃棄など)

4. 在庫アラート機能
   • 1日1回、在庫状況を確認
   • 在庫が3個を下回った時に「sample@mail.com」までメールを通知
   
### DynamoDBテーブル設計

#### 商品テーブル
• パーティションキー: productId
• 属性: productName, category, description, price, supplier, minimumStockLevel

#### 在庫テーブル
• パーティションキー: productId
• 属性: quantity, lastUpdated, location, status

#### 取引履歴テーブル
• パーティションキー: transactionId
• ソートキー: timestamp
• 属性: productId, quantity, transactionType (入庫/出庫), reason, userId

### Lambda関数の役割

#### 商品管理関数
• 新商品の登録
• 商品情報の更新
• 商品の削除・非アクティブ化

#### 在庫管理関数
• 在庫レベルの確認
• 在庫情報の更新
• 在庫検索・フィルタリング

#### 入出庫処理関数
• 入庫処理と在庫テーブル更新
• 出庫処理と在庫テーブル更新
• 取引履歴の記録


### その他
初期投入用のデータを用意し、DynamoDBへインポートすること

## 2. aws-diagram-mcp-server を用いて、アーキテクチャ図をアウトプットする
create_diagram.py というファイルを「/generated-diagrams」下に作成し、このファイルをもとに aws-diagram-mcp-server を用いて、アーキテクチャ図を作成する

Q にアプリ構築を依頼する

あとは Q CLI にアプリ構築を依頼するだけです。

REQUIREMENTS.md に従ってアプリを作成してください。

簡易的な在庫管理システムをサーバーレスに構築しました。

アーキテクチャ

アーキテクチャ図を生成するには、以下のコマンドを実行します:

cd generated-diagrams
python create_diagram.py

これにより、以下の図が生成されます。
在庫管理システム - 完全アーキテクチャ

実装されたコンポーネント

アーキテクチャ図にあるように、以下のコンポーネントが作成されます。
今回はアプリ内容自体は重要でないため詳細は割愛しますが、同様のアプリ要件定義書を使えば同じようなものができると思います。

1. DynamoDB テーブル

  • 商品テーブル (Products)
  • 在庫テーブル (Inventory)
  • 取引履歴テーブル (Transactions)

2. Lambda 関数

  • 商品管理関数 (ProductManagementFunction)
  • 在庫管理関数 (InventoryManagementFunction)
  • 入出庫処理関数 (TransactionProcessingFunction)
  • 在庫アラート関数 (InventoryAlertFunction)

3. API Gateway

  • RESTful API エンドポイントを提供
  • 以下のエンドポイントを実装:
    • /products - 商品管理
    • /inventory - 在庫管理
    • /transactions - 取引履歴管理

4. SNS トピック

  • 在庫アラート通知用のトピック

5. CloudWatch Events

  • 毎日在庫チェックを実行するスケジュールイベント

Q CLI とのやりとりの様子

Dynamo DB を自然言語でやりとりできて便利です。
実際にやり取りをした会話を掲載しておきます。

DynamoDB MCP を使用して自然言語でデータを操作する
% q chat
    ⢠⣶⣶⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⣿⣶⣦⡀⠀
 ⠀⠀⠀⣾⡿⢻⣿⡆⠀⠀⠀⢀⣄⡄⢀⣠⣤⣤⡀⢀⣠⣤⣤⡀⠀⠀⢀⣠⣤⣤⣤⣄⠀⠀⢀⣤⣤⣤⣤⣤⣤⡀⠀⠀⣀⣤⣤⣤⣀⠀⠀⠀⢠⣤⡀⣀⣤⣤⣄⡀⠀⠀⠀⠀⠀⠀⢠⣿⣿⠋⠀⠀⠀⠙⣿⣿⡆
 ⠀⠀⣼⣿⠇⠀⣿⣿⡄⠀⠀⢸⣿⣿⠛⠉⠻⣿⣿⠛⠉⠛⣿⣿⠀⠀⠘⠛⠉⠉⠻⣿⣧⠀⠈⠛⠛⠛⣻⣿⡿⠀⢀⣾⣿⠛⠉⠻⣿⣷⡀⠀⢸⣿⡟⠛⠉⢻⣿⣷⠀⠀⠀⠀⠀⠀⣼⣿⡏⠀⠀⠀⠀⠀⢸⣿⣿
 ⠀⢰⣿⣿⣤⣤⣼⣿⣷⠀⠀⢸⣿⣿⠀⠀⠀⣿⣿⠀⠀⠀⣿⣿⠀⠀⢀⣴⣶⣶⣶⣿⣿⠀⠀⠀⣠⣾⡿⠋⠀⠀⢸⣿⣿⠀⠀⠀⣿⣿⡇⠀⢸⣿⡇⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀⢹⣿⣇⠀⠀⠀⠀⠀⢸⣿⡿
 ⢀⣿⣿⠋⠉⠉⠉⢻⣿⣇⠀⢸⣿⣿⠀⠀⠀⣿⣿⠀⠀⠀⣿⣿⠀⠀⣿⣿⡀⠀⣠⣿⣿⠀⢀⣴⣿⣋⣀⣀⣀⡀⠘⣿⣿⣄⣀⣠⣿⣿⠃⠀⢸⣿⡇⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀⠈⢿⣿⣦⣀⣀⣀⣴⣿⡿⠃
 ⠚⠛⠋⠀⠀⠀⠀⠘⠛⠛⠀⠘⠛⠛⠀⠀⠀⠛⠛⠀⠀⠀⠛⠛⠀⠀⠙⠻⠿⠟⠋⠛⠛⠀⠘⠛⠛⠛⠛⠛⠛⠃⠀⠈⠛⠿⠿⠿⠛⠁⠀⠀⠘⠛⠃⠀⠀⠘⠛⠛⠀⠀⠀⠀⠀⠀⠀⠀⠙⠛⠿⢿⣿⣿⣋⠀⠀
 ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠿⢿⡧

╭─────────────────────────────── Did you know? ────────────────────────────────╮
│                                                                              │
│     You can resume the last conversation from your current directory by      │
│                        launching with q chat --resume                        │
│                                                                              │
╰──────────────────────────────────────────────────────────────────────────────╯

/help all commands  •  ctrl + j new lines  •  ctrl + s fuzzy search
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
> Profile: defaultで、ap-northeast-1 の DynamoDBについて質問です。Products テーブルの中身はいくつありますか?10個未満の場合、全て出力してください。

I'll help you check the DynamoDB table "Products" in the ap-northeast-1 region and see how many items it 
contains. Let me first understand what's in the table.

...

Products テーブルには5つのアイテムがあります。10個未満なので、全てのアイテムを表示します:

1. ノートパソコン
   • 製品ID: c3c37e5e-8219-4a5a-a881-15c24c37da7c
   • カテゴリ: 電子機器
   • 価格: 120,000円
   • 説明: 高性能ノートPC
   • サプライヤー: Tech Inc.
   • 最小在庫レベル: 5
   • 作成日時: 2025-05-19T22:28:26.086349

2. スマートフォン
   • 製品ID: 117028a0-2b7f-445d-8856-7ccce3c31cea
   • カテゴリ: 電子機器
   • 価格: 80,000円
   • 説明: 最新モデルスマートフォン
   • サプライヤー: Mobile Corp
   • 最小在庫レベル: 10
   • 作成日時: 2025-05-19T22:28:26.510970

3. デスクチェア
   • 製品ID: 77be1588-caee-4e05-bd02-952572d47be3
   • カテゴリ: 家具
   • 価格: 35,000円
   • 説明: 人間工学に基づいたオフィスチェア
   • サプライヤー: Furniture Co.
   • 最小在庫レベル: 3
   • 作成日時: 2025-05-19T22:28:26.631567

4. コーヒーメーカー
   • 製品ID: 8174d083-d78c-439c-88e7-c42692539c36
   • カテゴリ: キッチン家電
   • 価格: 15,000円
   • 説明: 全自動コーヒーメーカー
   • サプライヤー: Kitchen Appliances Ltd.
   • 最小在庫レベル: 7
   • 作成日時: 2025-05-19T22:28:26.751049

5. ワイヤレスイヤホン
   • 製品ID: 87d8133d-65d4-4132-bac5-fe13cc174c4e
   • カテゴリ: 電子機器
   • 価格: 25,000円
   • 説明: ノイズキャンセリング機能付きイヤホン
   • サプライヤー: Audio Tech
   • 最小在庫レベル: 8
   • 作成日時: 2025-05-19T22:28:26.884405

合計で5つのアイテムがあり、電子機器が3つ、家具が1つ、キッチン家電が1つです。


> 新しく、「キッチン家電」として「電子レンジ」を追加します。価格:10,000円、説明:サンプル電子レンジ、サプライやー:SampleKichen, 最小在庫レベル:10 とします。在庫は20個として在庫も追加してください。

了解しました。「キッチン家電」カテゴリに「電子レンジ」を追加し、在庫も20個登録します。まず、Productsテーブルに新しい商品を追加し、次にInventoryテーブルに在庫情報を登録します。

...

商品と在庫の追加が完了しました!

「電子レンジ」を以下の情報で正常に追加しました:

Products テーブル:
• 製品ID: e7c9a4b5-3d2f-4e8c-9a1b-5c6d7e8f9a0b
• 製品名: 電子レンジ
• カテゴリ: キッチン家電
• 価格: 10,000円
• 説明: サンプル電子レンジ
• サプライヤー: SampleKichen
• 最小在庫レベル: 10
• 作成日時: 2025-05-20T03:00:00.000000

Inventory テーブル:
• 製品ID: e7c9a4b5-3d2f-4e8c-9a1b-5c6d7e8f9a0b
• 製品名: 電子レンジ
• 数量: 20
• 最終更新日時: 2025-05-20T03:00:00.000000

これで Products テーブルには合計6つの商品が登録され、Inventory テーブルにも対応する在庫情報が登録されました。

おわり

CDK MCP サーバーでベストプラクティスに沿ってCDKコードを構築してくれる & Diagram MCP サーバーでそのアーキテクチャ図を出してくれるのは非常に便利です。
プロトタイプ制作などには重宝するのではないでしょうか。

ぜひこれからも新たな MCP サーバーが出たら触ってみたいと思います!

Discussion