🎨

awslabs/diagram-as-code が提供する mcp 実装を導入する

に公開

AWS のアーキテクチャ図を定義から生成する awslabs/diagram-as-code ですが、最近ツール側で MCP 対応したので、今回はこれをローカル環境に導入して使い勝手を確認してみます。

導入手順確認

https://github.com/awslabs/diagram-as-code/tree/main?tab=readme-ov-file#mcp-server-integration

README に新しいセクションが追加されているので、基本的にはこれに従えば問題ありません。
MCP server の機能は追加された新しいバイナリが提供するため、go 経由でインストールする場合は注意が必要です。

brew install awsdac

Homebrew 経由の場合は一度のインストールで awsdac / awsdac-mcp-server の二つが同時にインストールされるため、基本的には Homebrew が推奨です。

which awsdac
> /opt/homebrew/bin/awsdac

which awsdac-mcp-server
> /opt/homebrew/bin/awsdac-mcp-server

せっかくなので生レスポンスを確認してみます。まずは起動します。

/opt/homebrew/bin/awsdac-mcp-server 

実行すると入力待ちになるので以下を入力します。
入力

{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{"roots":{"listChanged":true},"sampling":{},"elicitation":{}},"clientInfo":{"name":"ExampleClient","title":"Example Client Display Name","version":"1.0.0"}}}

出力

{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-03-26","capabilities":{"logging":{},"resources":{"subscribe":true,"listChanged":true},"tools":{"listChanged":true}},"serverInfo":{"name":"awsdac-mcp-server","version":"0.0.1"},"instructions":"AWS Diagram-as-Code MCP Server\n\nPURPOSE:\nGenerate professional AWS architecture diagrams from YAML-based specifications.\n\nRECOMMENDED WORKFLOW:\n1. Call 'getDiagramAsCodeFormat' first to understand the format and get examples\n2. Use the format guide to create proper YAML content\n3. Call 'generateDiagram' with the complete YAML specification\n4. Receive a base64-encoded PNG diagram\n\nCAPABILITIES:\n- Generate PNG diagrams with AWS resource icons and relationships\n- Support hierarchical layouts with Canvas → Cloud → Region → VPC → Subnets → Resources\n- Create network connections with Links (straight or orthogonal lines)\n- Handle complex layouts using VerticalStack and HorizontalStack groupings\n\nOUTPUT: Base64-encoded PNG images suitable for embedding in responses"}}

パースした結果も確認します。

{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "protocolVersion": "2025-03-26",
        "capabilities": {
            "logging": {},
            "resources": {
                "subscribe": true,
                "listChanged": true
            },
            "tools": {
                "listChanged": true
            }
        },
        "serverInfo": {
            "name": "awsdac-mcp-server",
            "version": "0.0.1"
        },
        "instructions": "AWS Diagram-as-Code MCP Server\n\nPURPOSE:\nGenerate professional AWS architecture diagrams from YAML-based specifications.\n\nRECOMMENDED WORKFLOW:\n1. Call 'getDiagramAsCodeFormat' first to understand the format and get examples\n2. Use the format guide to create proper YAML content\n3. Call 'generateDiagram' with the complete YAML specification\n4. Receive a base64-encoded PNG diagram\n\nCAPABILITIES:\n- Generate PNG diagrams with AWS resource icons and relationships\n- Support hierarchical layouts with Canvas → Cloud → Region → VPC → Subnets → Resources\n- Create network connections with Links (straight or orthogonal lines)\n- Handle complex layouts using VerticalStack and HorizontalStack groupings\n\nOUTPUT: Base64-encoded PNG images suitable for embedding in responses"
    }
}

MCP Client (Cline)への導入

クライアント側の setting.json に以下を記述します。

{
  "mcpServers": {
    "awsdac-mcp-server": {
      "command": "/opt/homebrew/bin/awsdac-mcp-server",
      "args": [],
      "type": "stdio"
    }
  }
}

ただし、実際はすでに MCP を設定している人も多いので以下を追記することになると思います。

    "awsdac-mcp-server": {
      "command": "/opt/homebrew/bin/awsdac-mcp-server",
      "args": [],
      "type": "stdio"
    }

評価用Terraform プロジェクト探し

そこそこの規模かつ、できれば結果が確認できるタイプを選んでいきます。

ケース 1

aws-samples/aws-network-firewall-terraform: This repository contains terraform code to deploy the necessary resources to get started to test AWS Network Firewall.
https://github.com/aws-samples/aws-network-firewall-terraform

トップの図を見る限りそれなりのリソース数があり、ネットワーク構成の確認もできそうに見える
スターもありそれなりに使われている様子に見えるので選びました。

ケース2

aws-samples/aws-waf-automation-terraform-samples
https://github.com/aws-samples/aws-waf-automation-terraform-samples

ユーザー起点でのアクセスであり、リソース数も多いことからこの図で精度が出るかどうか確認できそうに見えるので選びました。

実行結果確認

ケース 1

利用環境としては以下を利用します。

  • IDE: Cline (VSCode)
  • Model: Anthropic Claude Sonnet 4
git clone https://github.com/aws-samples/aws-network-firewall-terraform.git
cd aws-network-firewall-terraform
code .

VS CODE 上から Cline 経由で指示を実施

今のディレクトリを確認し、Terraform で定義されたアーキテクチャを整理して、図にしてください。

結果

Github page で表示していた図
repoImage

生成させた図
generatedImage

ケース 2

利用環境としては以下を利用します。

  • IDE: Claude Code with Amazon Bedrock
  • Model: Anthropic Claude Sonnet 4
git clone https://github.com/aws-samples/aws-waf-automation-terraform-samples.git
cd aws-waf-automation-terraform-samples
claude --mcp-config=../mcp.json

ちなみに、mcp.json は以下のように記述しています。

cat mcp.json
{
  "mcpServers": {
    "awsdac-mcp-server": {
      "command": "/opt/homebrew/bin/awsdac-mcp-server",
      "args": [],
      "type": "stdio"
    }
  }
}

Claude Code 上から CLINE 経由で指示を実施

今のディレクトリを確認し、Terraform で定義されたアーキテクチャを整理して、図にしてください。

結果

Github page で表示していた図
repoImage

生成させた図
generatedImage

結果の改善

せっかくなので追記してみます。今の図は直線的になっているので、以下を参考に Orthogonal な link を使えば見やすくなりそうです。また、リソースの数が足りていないですが、これは指示が不足していた可能性もあります。

diagram-as-code/doc/links.md at main · awslabs/diagram-as-code
https://github.com/awslabs/diagram-as-code/blob/main/doc/links.md

改善指示

生成された図は直線が多く見づらかったので改善してください。以下のような Orthogonal なLink を使えば視認性が上がりそうです。

  Links:
      # Orthogonal (single-arm)
    - Source: Orthogonal1Lambda
      SourcePosition: N
      Target: Orthogonal1Bucket
      TargetPosition: W
      TargetArrowHead:
        Type: Open
      Type: orthogonal

また、WAF が重要なので WAF のリソースは全て詳細に表示してください。

改善結果

指示によって大きく改善したことがわかりました。

考察

今回は殆ど工夫していないシンプルな指示ですが、それでもかなり正確な図が出てきたと感じています。
MCP 対応以前は、Python で自前でリソース情報を渡す仕組みを実装していましたが、MCP 対応で非常に簡単になった上、肌感ですが精度も向上したように見えます。

精度に関しては、IaC 定義であるテンプレート以外にも README の情報も読み取っているなどでリソースの意味的なつながりや意義が整理された状態で渡されるのが大きのではないかと考察しています。
本題からはそれますが、IaC と一緒にシステムの情報を保存しておくことは今後一層必要になってきそうですね。

今回の MCP 対応により、CI への組み込みやローカルでの利用が非常に簡単にできるようになったのではないでしょうか。今後は CI で実行してアーティファクトを自動で表示するようなそういった具体の実装がどんどん出てくると期待しています。

アマゾン ウェブ サービス ジャパン (有志)

Discussion