mcpField
A
Architecture Diagrams

Architecture Diagrams

本地服务
github.com云与基础设施12 天前更新

关于 Architecture Diagrams

Architecture Diagrams 是面向云架构师和开发者的 MCP 服务,可创建、审查并导入 AWS、Azure 和 Google Cloud 架构图。它使用官方图标,并支持从 Terraform 或 Google Cloud 资源清单生成图表。

主要功能

  1. 01生成多种格式的架构图
  2. 02搜索云服务官方图标
  3. 03验证图表规格并给出建议
  4. 04按规则审查架构并列出发现
  5. 05从 Terraform 导入资源
  6. 06从 Google Cloud 清单导入资源

适用场景

  1. 01绘制新的云平台架构
  2. 02将 Terraform 计划或状态转为图表
  3. 03可视化运行中的 Google Cloud 资源
  4. 04检查设计中的可靠性与安全问题

MCP 相关

作为 MCP 服务,它向客户端提供图标与模板查询、图表验证、生成、审查及 Terraform 和 Google Cloud 清单导入工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"apatilgtn-architecture-diagrams": {
"command": "npx",
"args": [
"-y",
"arch-diagram-mcp"
],
"env": {
"ARCH_DIAGRAM_OUTPUT_DIR": "<ARCH_DIAGRAM_OUTPUT_DIR>",
"ARCH_DIAGRAM_INPUT_ROOTS": "<ARCH_DIAGRAM_INPUT_ROOTS>"
}
}
}
}
启动命令npx -y arch-diagram-mcp
需要配置的环境变量
ARCH_DIAGRAM_OUTPUT_DIRFolder for rendered diagrams (default: ~/architecture-diagrams)
ARCH_DIAGRAM_INPUT_ROOTSFolders the server may read Terraform or inventory files from, separated by the OS path separator

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiarch-diagram-mcp1.2.0
npmarch-diagram-mcp1.2.0

工具

10

收录的工具列表 · 更新于 2 天前

参数类型必填说明
limitinteger否
querystring是
providerany否

详细介绍

架构图 MCP 服务

arch-diagram-mcp 是一个 MCP 服务,可生成、审查和导入 AWS、Azure 和 Google Cloud 的云架构图。它使用官方提供商图标,约有 1,800 个,涵盖 Kubernetes、本地部署以及 PostgreSQL、Redis、Kafka 和 Nginx 等 SaaS 服务。图表通过 Graphviz 渲染为 PNG、独立 SVG、PDF 或 JPG。

你可以设计新的架构,也可以将现有架构绘制成图:既可以从 Terraform 绘制,也可以直接从正在运行的 Google Cloud 项目自带的资源清单绘制,并保留真实的资源名称,无论这些资源是如何创建的。

快速开始。 安装 Graphviz,然后通过以下任一方式将服务添加到 MCP 客户端:

来源命令
PyPI,使用 uvuvx arch-diagram-mcp
PyPI,使用 pipxpipx install arch-diagram-mcp,然后运行 arch-diagram-mcp
npm(通过 uv 或 pipx 启动 PyPI 软件包)npx -y arch-diagram-mcp

例如,在 Claude Code 中:claude mcp add architecture-diagrams -s user -- uvx arch-diagram-mcp。 它也已收录在 MCP Registry 中,名称为 io.github.apatilgtn/architecture-diagrams。

作为开发者使用? 请从开发者指南开始。指南介绍了如何在你的计算机上或连接到共享团队服务时,连接 Claude Code、VS Code、Cursor 或 Claude Desktop,并提供示例提示词。本 README 的其余部分介绍如何运行和配置服务。

示例

这些是捆绑的模板和 Terraform 示例,呈现效果与服务端生成的完全一致。 评分来自 review_architecture。点击图表可查看全尺寸图片。

Azure Web 应用,中心辐射式
Azure Web 应用,中心辐射式,带温备灾备
azure_webapp_hub_spoke,评分 94(A)
Azure AKS 微服务
Azure AKS 微服务
azure_aks_microservices,评分 97(A)
AWS 三层架构
AWS 三层 Web 应用
aws_three_tier,评分 86(B)
AWS 无服务器事件驱动架构
AWS 无服务器事件驱动架构
aws_serverless_event_driven,评分 100(A)
GCP GKE 微服务
GCP GKE 微服务
gcp_gke_microservices,评分 97(A)
GCP 无服务器与数据
GCP 无服务器与数据平台
gcp_serverless_data,评分 81(B)
从 Terraform 计划导入的图表
从 Terraform 导入
diagram_from_terraform,基于 examples/aws_plan.json,评分 73(C)
根据 Cloud Asset Inventory 绘制的运行中 GCP 平台图表
根据清单绘制的运行中 GCP 平台
diagram_from_inventory,基于真实导出数据(已替换标识符),评分 67(C)

如需重新生成,请运行 python scripts/render_samples.py。

该服务还在 Google Cloud 上通过端到端测试:使用带签名 URL 的私有存储桶,以及带两层身份验证的私有 Cloud Run 服务。请参阅 docs/CLOUD_TESTING.md,了解测试方法、检查内容以及发现的 bug。

工具

工具功能
search_icons(query, provider?, limit?)按服务名称或别名(ecs、s3、aks、cloud run、redis)搜索图标并排序
list_icon_categories(provider)列出某个提供商的所有类别和服务
list_templates(provider?) / get_template(id)以可编辑规格的形式返回内置参考架构
validate_diagram(spec)无需渲染即可检查规格:图标 ID(含建议)、引用、嵌套循环和限制
generate_architecture_diagram(spec)渲染图表;返回文件路径、JSON 摘要和内嵌 PNG 预览
review_architecture(spec)执行基于启发式规则的 Well-Architected 评审,并返回 0–100 分的评分、等级,以及包含建议的发现
diagram_from_terraform(title, terraform_json | path, ...)根据 terraform show -json 输出(计划或状态)或原始 .tfstate 文件生成图表
diagram_from_inventory(title, inventory_json | path, projects?, regions?, labels?, ...)根据 Cloud Asset Inventory 导出文件,绘制 Google Cloud 中已在运行的资源,并显示实际名称
server_info()报告版本、Graphviz 状态、图标数量、输出目录和限制

此外还有一个提示词:design_architecture(provider, workload, requirements)。它会引导模型选择模板、搜索图标、验证、渲染和评审。

内置模板
  • aws_three_tier
  • aws_serverless_event_driven
  • azure_webapp_hub_spoke
  • azure_aks_microservices
  • gcp_serverless_data
  • gcp_gke_microservices

每个模板都经过测试,可通过验证和渲染,且评审结果中没有严重或高严重性发现。

图表规格
{
  "title": "My App",
  "direction": "LR",
  "theme": "light",
  "output_formats": ["png", "svg"],
  "clusters": [{"id": "vpc", "label": "VPC 10.0.0.0/16"}, {"id": "app", "label": "Private subnet", "parent": "vpc"}],
  "nodes": [{"id": "api", "type": "aws.compute.ECS", "label": "orders-api", "cluster": "app"}],
  "edges": [{"source": "alb", "target": "api", "label": "HTTPS", "style": "dashed"}]
}
评审规则
支柱规则
安全性互联网 → 数据存储(严重);互联网 → 无网关的计算资源(高);没有 WAF;没有密钥/KMS;没有身份提供商;数据存储位于网络边界之外;没有出口控制
可靠性VM 没有负载均衡器;单一区域;没有备份;同步调用链过深
卓越运营没有监控;没有 CI/CD;组件未连接
性能效率公共流量没有 CDN;没有缓存层

这些规则只能识别图表中显示的内容。请将评审发现视为评审提示,而非配置错误的证明。

Terraform 导入

terraform show -json plan.out > plan.json 的效果最佳,因为计划包含配置中的引用。

  • 已映射资源: 约 140 种 AWS、Azure 和 GCP 资源类型会转换为节点。
  • 边界: VPC/VNet、子网、资源组和 Container Apps 环境资源会转换为嵌套集群。节点会放置在它们所引用的最具体边界中,可以是直接引用,也可以通过 NIC 引用。
  • 边: 资源之间的引用会转换为边,并解析模块输出。
  • 推断的边: 经过管线资源的链接会转换为虚线边,方向为 edge → compute → messaging → data。管线资源包括侦听器、目标组、NIC、角色分配、Front Door 来源和后端服务。
  • 未映射类型: 结果会列出这些类型,方便你查看哪些内容未纳入。
库存导入(Google Cloud)

对于已经运行的基础设施,无论它是通过何种方式创建的(控制台、gcloud、脚本、 Terraform、Pulumi),都可以导出项目的库存并传递给 diagram_from_inventory:

gcloud asset list --project <project-id> --content-type resource \
  --asset-types "$(arch-diagram-mcp --gcp-asset-types)" --format json > assets.json

--gcp-asset-types 会列出导入器使用的 54 种资产类型。只请求这些类型可以缩小导出文件:某个测试项目的导出文件从 4.4 MB 缩减到 535 KB,生成的图表保持不变。调用方需要具备 roles/cloudasset.viewer 角色,并启用 Cloud Asset API。

  • **名称:**每个节点都会保留其真实名称。第二行会补充详细信息,例如数据库版本、 机器类型、入口设置、副本数或 cron 计划。
  • **边界:**项目 › VPC › 子网 › GKE 集群 › Namespace。由其他项目拥有的共享 VPC 网络会绘制在该项目下。使用直接 VPC 出口的 Cloud Run 会显示在其子网中。
  • 根据配置生成的边:
    • 注释和环境变量中引用的 Cloud SQL、密钥、KMS、Pub/Sub、存储桶和 Redis;
    • 与其所属 Cloud Run 服务或函数匹配的 URL(推送订阅、Scheduler 目标、环境变量);
    • 负载均衡器链(转发规则 › 代理 › URL 映射 › 后端 › NEG、存储桶或 MIG),以及路径规则、CDN 和 Cloud Armor;
    • Eventarc 触发器、死信主题、BigQuery 和 Cloud Storage 订阅、VPC 连接器。
  • **省略的杂项:**GKE 系统 Namespace 和节点、MIG 成员 VM(绘制为一个 MIG)、Cloud Functions 自带的 Run 服务、构建和暂存存储桶、路由、防火墙和 RBAC 对象。
  • 筛选器:projects 和 regions 是硬性限制。labels(例如 {"app": "payments"}) 会筛选资源及其关联资源(默认启用 include_neighbors)。
  • **限制:**无法识别仅存在于应用代码中的调用。结果会返回规范,因此你可以添加这些边并重新渲染。环境变量中发现的外部主机会列在 external_hosts 中。

接受的格式:gcloud asset list JSON(推荐)、gcloud asset export 换行分隔的 JSON,以及 gcloud asset search-all-resources --read-mask='*' JSON。Azure Resource Graph 和 AWS 库存支持计划中。

安装

需要 Python 3.11+ 和 Graphviz。

winget install Graphviz.Graphviz        # Linux: apt install graphviz   macOS: brew install graphviz
python -m venv .venv
.venv\Scripts\python -m pip install -e ".[dev]"
.venv\Scripts\python -m pytest            # 85 tests
注册到 Claude Code(stdio)
claude mcp add architecture-diagrams -s user `
  -e ARCH_DIAGRAM_OUTPUT_DIR=C:\Devops-Projects\Architecture-diagram-mcp\output `
  -- C:\Devops-Projects\Architecture-diagram-mcp\.venv\Scripts\python.exe -m arch_diagram_mcp
作为共享 HTTP 服务运行
docker build -t arch-diagram-mcp:1.2.0 .
docker run -d -p 8000:8000 -v diagrams:/data \
  -e ARCH_DIAGRAM_AUTH_TOKENS="ci=$(openssl rand -hex 32),platform-team=$(openssl rand -hex 32)" \
  -e ARCH_DIAGRAM_PUBLIC_BASE_URL=https://diagrams.internal.example.com \
  -e ARCH_DIAGRAM_URL_SIGNING_KEY=$(openssl rand -hex 32) \
  -e ARCH_DIAGRAM_ALLOWED_HOSTS="diagrams.internal.example.com:*" \
  arch-diagram-mcp:1.2.0

客户端使用 Authorization: Bearer <token> 连接到 https://<host>/mcp。GET /healthz 无需身份验证,可用作探测端点。服务以无状态方式运行,因此可以在负载均衡器后水平扩展。所有副本必须共用 ARCH_DIAGRAM_URL_SIGNING_KEY,这样任何副本都可以提供任何链接。

身份验证
模式设置审计日志中的身份角色
tokenARCH_DIAGRAM_AUTH_TOKENS="name=secret,..."令牌名称完全访问权限
oidcARCH_DIAGRAM_OIDC_ISSUER + ARCH_DIAGRAM_OIDC_AUDIENCEpreferred_username / upn / email,以 oid/sub 为键ARCH_DIAGRAM_READER_ROLE、ARCH_DIAGRAM_AUTHOR_ROLE

令牌模式。 可同时启用多个命名令牌。轮换令牌时,先添加新令牌、部署客户端,然后移除旧令牌。每个令牌必须至少包含 16 个字符。

OIDC 模式。 服务会根据签发方发布的签名密钥(JWKS,可通过发现机制查找,或使用 ARCH_DIAGRAM_OIDC_JWKS_URI 设置)验证 JWT。它会检查:

  • 签名(仅限非对称算法:不允许 HS*,也不允许 none);
  • iss 和 aud;
  • exp 和 nbf,允许 60 s 的误差;
  • 可选的 ARCH_DIAGRAM_OIDC_REQUIRED_SCOPES。

角色取自 roles 声明(Entra 应用角色)和 scp 范围声明:

  • 读取者: 搜索、模板、验证、审核。
  • 作者: 还可以渲染,以及导入 Terraform 或云资源清单。作者角色包含读取者权限。
  • 如果未设置这两个角色变量中的任何一个,则任何有效令牌都拥有完全访问权限。

服务会在 /.well-known/oauth-protected-resource 发布 RFC 9728 元数据,并在每个 401 响应中提供该地址,以便 MCP 客户端发现授权服务器。

Entra ID 示例:

  1. 注册一个 API 应用,其应用程序 ID URI 为 api://arch-diagrams。
  2. 在其清单中设置 accessTokenAcceptedVersion: 2。
  3. 添加应用角色 Diagrams.Reader 和 Diagrams.Author,并将它们分配给组。
  4. 配置服务:
ARCH_DIAGRAM_OIDC_ISSUER=https://login.microsoftonline.com/<tenant-id>/v2.0
ARCH_DIAGRAM_OIDC_AUDIENCE=api://arch-diagrams      # v2 tokens may carry the app's client id instead; list both
ARCH_DIAGRAM_READER_ROLE=Diagrams.Reader
ARCH_DIAGRAM_AUTHOR_ROLE=Diagrams.Author

Entra ID 不支持动态客户端注册。客户端可以使用预先注册的客户端应用,也可以传入已有令牌,例如 az account get-access-token --resource api://arch-diagrams。

构件存储

通过 HTTP 访问时,响应中包含下载链接,而不是服务端文件路径:

ARCH_DIAGRAM_STORAGE链接凭据
local(默认)https://<PUBLIC_BASE_URL>/artifacts/<file>?exp=..&sig=..,由此服务提供并使用 HMAC 签名ARCH_DIAGRAM_URL_SIGNING_KEY
s3SigV4 预签名 GET;对象使用 SSE-S3 加密,或在设置 ARCH_DIAGRAM_S3_KMS_KEY_ID 时使用 SSE-KMS 加密标准 AWS 凭据链(IRSA、实例角色、环境变量、配置文件)
azure只读、仅限 HTTPS 的 SAS。通过 Entra ID 和 ARCH_DIAGRAM_AZURE_ACCOUNT_URL 使用用户委托密钥,或通过 AZURE_STORAGE_CONNECTION_STRING 使用帐户密钥托管身份 / 工作负载身份需要 Storage Blob Data Contributor
gcsV4 签名 URL。使用服务帐户密钥在本地签名,或通过工作负载身份使用 IAM signBlob需要 Storage Object Creator 和 Service Account Token Creator
  • 对象键: <prefix>/<yyyy>/<mm>/<dd>/<sha256(caller)[:16]>/<file>。文件按调用方隔离,对象键中绝不包含用户名。
  • 链接有效期: 由 ARCH_DIAGRAM_URL_TTL_S 设置,默认为 1 h,最长为 7 天。
  • 清理: 设置 ARCH_DIAGRAM_DELETE_LOCAL_AFTER_UPLOAD=true 后,云端上传成功时会删除本地副本。对于云对象,请使用存储桶生命周期规则。
  • 提供的 SVG: 使用 Content-Security-Policy: sandbox 和 nosniff 发送。
  • Terraform 路径: diagram_from_terraform(path=...) 在 HTTP 访问时处于禁用状态,因此远程调用方无法读取服务端文件。

配置(环境变量)

变量默认值用途
ARCH_DIAGRAM_OUTPUT_DIR~/architecture-diagrams图表的写入位置
ARCH_DIAGRAM_INPUT_ROOTScwd + 输出目录以 os.pathsep 分隔的目录,diagram_from_terraform(path=...) 可从中读取
ARCH_DIAGRAM_MAX_NODES / _MAX_EDGES / _MAX_CLUSTERS300 / 800 / 100规格大小限制
ARCH_DIAGRAM_RENDER_TIMEOUT_S60Graphviz 运行超过此秒数后会被终止
ARCH_DIAGRAM_MAX_TERRAFORM_BYTES25 MBTerraform 输入大小限制
ARCH_DIAGRAM_RETENTION_DAYS0(永久保留)删除早于 N 天的生成文件
ARCH_DIAGRAM_KEEP_DOT_SOURCEtrue保留 .dot 文件以供手动编辑
ARCH_DIAGRAM_INLINE_PNG_MAX_BYTES4 MB超出此大小的 PNG 仅返回路径
ARCH_DIAGRAM_FONTauto字体系列;auto 在 Windows 上选择 Segoe UI,在 macOS 上选择 Helvetica Neue,在 Linux 上选择 DejaVu Sans
ARCH_DIAGRAM_PNG_DPI144PNG/JPG 分辨率(72–300)
ARCH_DIAGRAM_LOG_LEVELINFOJSON 日志写入 stderr,每次工具调用记录一行审计日志
ARCH_DIAGRAM_HTTP_HOST / _HTTP_PORT127.0.0.1 / 8000HTTP 绑定地址和端口
ARCH_DIAGRAM_AUTH_MODEautonone / token / oidc;根据下方变量推断
ARCH_DIAGRAM_AUTH_TOKENS–命名的 bearer token,格式为 name=secret,...(仍支持旧版单一变量 ARCH_DIAGRAM_AUTH_TOKEN)
ARCH_DIAGRAM_OIDC_ISSUER / _OIDC_AUDIENCE / _OIDC_JWKS_URI / _OIDC_REQUIRED_SCOPES–OIDC 验证
ARCH_DIAGRAM_READER_ROLE / _AUTHOR_ROLE–RBAC 的角色名称(OIDC)
ARCH_DIAGRAM_PUBLIC_BASE_URL–外部 URL;用于下载链接和 OAuth 元数据
ARCH_DIAGRAM_STORAGElocallocal / s3 / azure / gcs
ARCH_DIAGRAM_STORAGE_BUCKET / _STORAGE_PREFIX– / diagrams/存储桶或容器,以及键前缀
ARCH_DIAGRAM_S3_REGION / _S3_KMS_KEY_ID / _AZURE_ACCOUNT_URL–后端特定配置
ARCH_DIAGRAM_URL_TTL_S3600下载链接有效期(60 s–7 天)
ARCH_DIAGRAM_URL_SIGNING_KEY每个进程随机生成本地链接的 HMAC 密钥;至少 32 个字符;多个副本之间应共享
ARCH_DIAGRAM_DELETE_LOCAL_AFTER_UPLOADfalse云端上传后删除本地文件
ARCH_DIAGRAM_ALLOWED_HOSTS / _ALLOWED_ORIGINS–以逗号分隔的 Host/Origin 允许列表(防范 DNS 重绑定)
ARCH_DIAGRAM_ALLOW_UNAUTHENTICATEDfalse允许在没有 token 的情况下绑定到非环回地址(仅限位于具有身份验证功能的代理之后)

安全模型

  • 规格验证: 对 ID、颜色和样式进行模式检查,并应用大小限制。
  • 文本转义: 标题、节点标签和集群标签始终作为字面字符串写入, 从不作为 Graphviz HTML 标签。边标签会进行 HTML 转义。因此,标签无法注入 DOT 语句,例如读取本地文件的 image= 属性。
  • 渲染: Graphviz 作为子进程运行,并设有硬性超时;失败时会删除部分输出。
  • 输出文件: 文件名经过清理,带有时间戳并附加唯一后缀。保留策略清理只会处理服务器生成的文件。
  • Terraform 输入: 文件读取范围限制在 ARCH_DIAGRAM_INPUT_ROOTS 内,并受大小限制。
  • HTTP:
    • 每个已配置 token 都会参与静态 token 的恒定时间比较。
    • OIDC JWT 会经过完整验证,并拒绝密钥混淆和 alg: none token(两者均经过测试)。
    • 每种工具均应用 RBAC,且每条审计日志都会记录调用方。
    • 未启用身份验证时,服务器拒绝绑定到公共地址。
    • DNS 重绑定防护使用 Host/Origin 允许列表。
    • 容器以非 root 用户身份运行。
  • SVG 输出: 图标会嵌入文件,因此文件不会泄露本地路径,并且可在任何地方渲染。

目录结构

src/arch_diagram_mcp/
  server.py        MCP tools, prompt, error mapping, audit logging
  catalog.py       icon index, alias resolution, ranked search, suggestions
  models.py        spec schema + semantic validation
  renderer.py      Graphviz source build, timed subprocess render, themes, SVG inlining, retention
  review.py        Well-Architected heuristic rules and scoring
  terraform.py     Terraform plan/state -> spec
  gcp_inventory.py Cloud Asset Inventory export of running GCP resources -> spec
  template_library.py + templates/*.json   reference architectures
  auth.py          principals, static-token + OIDC authenticators, RBAC
  storage.py       local signed links, S3 / Azure Blob / GCS uploads with signed URLs
  http_app.py      streamable-HTTP app, auth middleware, OAuth resource metadata, /artifacts, /healthz
  config.py, logs.py, __main__.py
tests/             85 tests: catalog, validation, rendering, label injection, review, Terraform, GCP
                   inventory (real export fixture), MCP tools, HTTP auth, OIDC (incl. attack tokens), RBAC,
                   signed links, S3 (moto), Azure SAS, GCS V4
docs/USER_GUIDE.md      developer guide: connecting clients, example prompts, troubleshooting
docs/CLOUD_TESTING.md   how the server was tested on real Google Cloud
docs/samples/      rendered sample diagrams shown above
scripts/render_samples.py   regenerates docs/samples/
scripts/e2e_cloud.py, run_impersonated.py   real-cloud end-to-end test tools

许可证

Apache-2.0。捆绑的提供商图标来自 diagrams 库,仍受其所有者的条款约束。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。