TerraVision
TerraVision is an MCP server that turns Terraform code or plain JSON graphs into professional AWS, Azure and GCP cloud architecture diagrams.
render_graph — draw a diagram from a plain JSON graph, with optional title, flows, attributes, edge labels, format (png/svg/pdf/dot/drawio) and styling.
generate_diagram — render a diagram directly from Terraform code (local dir, Git URL or tfdata.json), optionally using a pre-generated plan/graph file, varfiles, workspaces, annotations and simplified view.
generate_architecture_graph — extract a structured graph of resources, containers and connections from Terraform; can return just a deduplicated service list.
generate_interactive_html — produce a self-contained, clickable, searchable HTML diagram that works offline.
diagram_guide — fetch graph rules, node types, worked examples, patterns (EKS, AKS, GKE, etc.) and environment setup checks before drawing.
open_diagram_file — open a previously rendered diagram (or reveal its folder) on the user's machine.
diagram_file — load a rendered file's contents into the in-chat diagram view (used by the app, not agents).
Supports AWS, Azure and Google Cloud with official icons, VPC/subnet/zone/resource-group nesting, numbered flow annotations, draw.io export, and previews returned for verification.
Supports diagramming Google Cloud resources defined in Terraform, covering core GCP services such as compute and networking with official icon sets.
Provides optional AI-powered annotations, including labels, titles, and flow sequences, using local LLMs through Ollama without sending data off-machine.
Provides optional AI-powered annotations via any OpenAI-compatible REST API endpoint, including OpenAI, configured through environment variables.
Generates professional cloud architecture diagrams from Terraform configurations, supporting local directories, Git repositories, plan files, and Terragrunt projects with multiple output formats.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TerraVisionGenerate an architecture diagram from my Terraform code in ./infra"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TerraVision
Professional cloud architecture diagrams in official AWS, Azure and GCP style, from a description in Claude or ChatGPT or from your Terraform
TerraVision is a free, open-source cloud architecture diagram generator for AWS, Azure and Google Cloud that works in both directions: design to code (describe it to your AI assistant, get the diagram, then the Terraform) and code to diagram (draw what your Terraform deploys).
Ask your AI assistant for a cloud architecture diagram, in plain words, and get the diagram a cloud architect would draw: the official AWS, Azure and GCP icons, with every resource in its VPC, subnet, zone or resource group. From a description, from your Terraform code, or the other way round, with the Terraform written from the diagram. TerraVision runs on your own computer and needs no cloud access.
Watch the 90-Second Intro
![]()
Related MCP server: cloudwright-mcp
Gallery
The same three-tier design on each cloud, then a flagship for each. Every example comes with the prompt and the source file: see the full gallery of 12 →
More in the gallery: AWS serverless event-driven · AWS data lake · AWS multi-region failover · AWS multi-account network · Azure AKS · Google Cloud data pipeline
Get started in Claude or ChatGPT
TerraVision installs as an extension in Claude Desktop and a plugin in the ChatGPT desktop app, where the diagram appears right in the chat. It also works in Claude Code, Codex CLI, GitHub Copilot, Cursor and any other MCP client.
1. Install the prerequisites (once)
TerraVision needs Graphviz (to draw) and Git. uv runs TerraVision for Claude Code, Codex, Antigravity CLI and other MCP clients; Claude Desktop brings its own on Windows and macOS, so skip it there. Terraform is only needed to draw from Terraform code.
With Homebrew:
brew install graphviz git
brew install uv # not needed for Claude Desktop
brew install hashicorp/tap/terraform # optional: to draw from Terraform codeIn PowerShell:
winget install --id Graphviz.Graphviz -e
winget install --id Git.Git -e
winget install --id astral-sh.uv -e # not needed for Claude Desktop
winget install --id Hashicorp.Terraform -e # optional: to draw from Terraform codeThen open a new terminal, and restart your AI app, so they see the new programs.
sudo apt install graphviz git
# Ubuntu 26.04 and later only (also Debian 14 "forky"/testing).
# Skip on older releases such as Ubuntu 24.04: graphviz already includes it.
sudo apt install libgvplugin-neato-layout8
curl -LsSf https://astral.sh/uv/install.sh | sh # Claude Desktop on Linux needs uv pre-installed
# optionally install terraform, to draw from Terraform code: HashiCorp's apt repository
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraformOther distributions: HashiCorp's install guide.
Can't use a package manager? Without admin rights, or when your organisation's Artifactory or Nexus doesn't carry these packages, download each one from its own site instead: Graphviz (on Windows, the ZIP archive unpacks into any folder without admin rights; on macOS and Linux, build it from source into your home folder: steps), Git (Windows has a portable edition), uv (its installer needs no admin rights) and Terraform (a single program to unzip). Then add each one's folder to your PATH (how, on Windows) and restart your AI app, or ask your IT team to install them.
2. Connect your assistant
Claude Desktop:
Download terravision-<version>.mcpb from the latest release and open it (or drag it into Settings → Extensions). Diagrams appear right in the chat, with buttons to open the image, edit it in draw.io, show it in its folder and see its source.
Claude Code (terminal, VS Code or JetBrains):
claude plugin marketplace add patrickchugh/terravision
claude plugin install terravision-cloud-diagrams@terravisionThen start a new Claude Code session. Diagrams are saved in a diagrams folder in your project.
The very first start downloads and installs TerraVision, which can take longer than Claude Code waits. If /mcp shows TerraVision failed to connect, choose Reconnect. To avoid it, install it ahead of time: uvx --from "terravision[mcp]" terravision --version.
ChatGPT desktop app and OpenAI Codex CLI (the desktop app includes Codex and uses the same plugins):
In the desktop app, go to Settings, add the marketplace https://github.com/patrickchugh/terravision, then select terravision-cloud-diagrams. For the CLI:
codex plugin marketplace add https://github.com/patrickchugh/terravision
codex plugin add terravision-cloud-diagrams@terravisionGoogle Antigravity CLI (agy, which replaced Gemini CLI):
agy mcp add terravision -- uvx --from "terravision[mcp]" terravision mcp --output-dir /path/for/diagramsGemini CLI stopped working for personal Google accounts on 18 June 2026; with a Gemini Code Assist Standard or Enterprise licence or a paid API key it still runs, and installs TerraVision with gemini extensions install https://github.com/patrickchugh/terravision.
VS Code with GitHub Copilot, Cursor and other MCP clients:
Add TerraVision as an MCP server that runs uvx --from "terravision[mcp]" terravision mcp --output-dir <folder for diagrams>. The setup guide has the configuration for each.
Any other agent (Cursor, GitHub Copilot, Codex, Claude Code and more) with the skills CLI:
npx skills add patrickchugh/terravisionThis installs the skill only: the instructions that teach the assistant the TerraVision graph format. It does not install TerraVision itself. The assistant then runs the terravision command, so install TerraVision and the prerequisites first. It does not include the MCP server, so there is no diagram view in the chat; for that, use the Claude Desktop extension or the Claude Code / ChatGPT plugin above. The installer needs Node.js, which provides npx.
3. Ask for a diagram (or code)
You have | Ask something like | You get |
An idea | "Draw an AWS three-tier app: React on CloudFront, ECS Fargate behind an ALB in two AZs, SQL Server on RDS Multi-AZ" | The diagram (PNG, SVG, editable draw.io) and its graph. Refine it by asking: "add ElastiCache", "show how a request flows through it" |
A diagram you like generated from TerraVision | "Write the Terraform for this architecture" | Terraform for the resources, zones and connections, with the diagram's flows and labels kept (quality depends on model used) |
Terraform code, local or on GitHub but no VERIFIED diagram | "Draw the architecture of the Terraform in ./infra" or "Show me a cloud architecture diagram of https://github.com/patrickchugh/testcase-bastion//examples" | A diagram of what |
A TerraVision diagram of your Terraform that you want to publish in HTML documentation, or review resource by resource, for example in a security audit | "Make this diagram interactive" or "Give me an interactive version I can click through" | A single HTML page that works in any browser or docs site, no server needed: click any resource to see its settings (encryption, public access, ports, IAM), search and zoom. Built from |
Terraform with an existing TerraVision diagram in a repository | "Keep this diagram up to date in CI" | A workflow that redraws the diagram whenever the Terraform changes |
The first diagram takes a little longer while TerraVision installs itself. If anything is missing, the assistant says what to install. To check at any time, ask: "Is TerraVision set up correctly?"
The full guide, with more example prompts: Use TerraVision with AI assistants.
Keep diagrams current in CI/CD
Point the TerraVision GitHub Action at your Terraform, and the diagram redraws itself on every change:
- uses: hashicorp/setup-terraform@v3
- uses: patrickchugh/terravision-action@v2
with:
source: ./infrastructure
outfile: docs/architecture
format: bothA terravision.yml next to the Terraform adds the title, numbered flows and connection labels to every version. GitLab, Jenkins, Azure DevOps and others: CI/CD Integration.
Why TerraVision?
✅ Built for AI assistants — marketplace extensions and plugins for Claude, Codex, Gemini, Copilot and Cursor; diagrams appear right in the chat in Claude Desktop and the ChatGPT desktop app (guide)
✅ Provably Accurate diagrams — accurate diagrams generated directly from your Terraform code so your code is the source of truth - what you see is what you get
✅ MCP server and agent skill — let any AI agent, or an assistant in an IDE such as Visual Studio Code, generate diagrams from a JSON graph or your Terraform (guide)
✅ In Diagram flow annotations — labels, titles, and flow sequences supported via YAML or generated by AI models including Ollama (running local) and AWS Bedrock
✅ JSON graph input — describe an architecture in a few lines of JSON and render it, resources match Terraform names so no need to learn a custom DSL (Graph Format)
✅ 100% client-side — designed with security in mind; no cloud access required, runs locally, your code never leaves your machine
✅ CI/CD ready — automate diagram updates on every PR merge
✅ Free & open source — no expensive diagramming tool licenses
✅ Multi-cloud — AWS, Google Cloud (GCP) and Azure supported
✅ Interactive HTML output — clickable nodes, pan/zoom, search, animated data flow
✅ Editable draw.io export — open in draw.io, Lucidchart, or any mxGraph editor
✅ Terragrunt compatible — auto-detects single- and multi-module Terragrunt projects
How it compares
TerraVision | Manual tools(draw.io, Lucidchart, Visio) | AI workspaces(Eraser) | Diagram as code(Mermaid, D2, Python Diagrams) | Live cloud scanners(e.g. Cloudcraft) | |
Draw from a plain-English description | ✅ inside the assistant you already use (Claude, ChatGPT, Copilot) | only if your organisation approves third-party models | ✅ | ||
Draw from Terraform | ✅ built from | AI interprets the files you paste (potentially exposes code & secrets) | |||
Draw an environment you have no access to, or one not built yet | ✅ from the code and a variables file: | drawn by hand from documents | from code you paste | written by hand | draws only an account it can connect to |
Write the Terraform for a design | ✅ by your assistant, checked by redrawing the code AI writes | Lucidchart beta, AWS only, paid add-on | |||
Official icons and VPC, subnet, zone grouping conventions | ✅ built in | icon libraries; correct grouping is up to you | icons, generic groups | ||
Stays current automatically | ✅ redrawn from the code in CI | repository sync | ✅ follows the live account | ||
High Security - No access to your cloud account or upload of your code | ✅ | ✅ | ✅ | ||
Price | Free, open source | Free to paid | Free tier, paid plans | Free, open source | Paid |
Already draw by hand? Generate the first version with TerraVision, then polish the exported file in draw.io or Lucidchart. Full comparison: TerraVision vs draw.io, Lucidchart, Eraser, Mermaid and others.
Supported Cloud Providers
Provider | Status | Resource types |
AWS | ✅ Full support | 385 types |
Google Cloud | ✅ Full support | 264 types |
Azure | ✅ Full support | 245 types |
Full list: Node types.
Use it from the command line
TerraVision is also a command-line tool, for scripts and for people who prefer to write the graph themselves.
Install
pipx install terravision # or: uv tool install terravision
# or: pip install terravision in a virtual envYou also need Python 3.11+ (uv installs one for you), Graphviz and Git, plus Terraform 1.x (or OpenTofu) when drawing from Terraform code; JSON graphs don't need it. See the Installation Guide for platform-specific instructions, Docker, and Nix.
Diagram from JSON (no Terraform needed)
Describe the architecture as nodes and connections. AWS is shown here; expand the Azure and GCP examples below.
{
"tv_aws_users.users": ["aws_cloudfront_distribution.cdn"],
"aws_cloudfront_distribution.cdn": ["aws_s3_bucket.static_site", "aws_alb.api"],
"aws_vpc.main": ["aws_subnet.public~1", "aws_subnet.private~1"],
"aws_subnet.public~1": ["aws_alb.api"],
"aws_subnet.private~1": ["aws_lambda_function.orders"],
"aws_alb.api": ["aws_lambda_function.orders"],
"aws_lambda_function.orders": ["aws_dynamodb_table.orders", "aws_sqs_queue.events"]
}{
"tv_azurerm_users.users": ["azurerm_cdn_frontdoor_profile.edge"],
"azurerm_cdn_frontdoor_profile.edge": ["azurerm_linux_web_app.api"],
"azurerm_resource_group.app": ["azurerm_virtual_network.main", "azurerm_mssql_database.orders", "azurerm_servicebus_queue.events", "azurerm_key_vault.secrets"],
"azurerm_virtual_network.main": ["azurerm_subnet.app"],
"azurerm_subnet.app": ["azurerm_linux_web_app.api"],
"azurerm_linux_web_app.api": ["azurerm_mssql_database.orders", "azurerm_servicebus_queue.events", "azurerm_key_vault.secrets"]
}{
"tv_gcp_users_icon.users": ["google_compute_global_forwarding_rule.lb"],
"google_compute_global_forwarding_rule.lb": ["google_cloud_run_v2_service.api"],
"google_cloud_run_v2_service.api": ["google_sql_database_instance.orders", "google_pubsub_topic.events", "google_storage_bucket.assets"],
"google_pubsub_topic.events": ["google_cloudfunctions2_function.worker"]
}Render it:
terravision draw --source architecture.tvg.json --format svgEach key is <terraform_resource_type>.<name>; each value is what it connects to or contains. That is the whole format. Full spec, schema and more examples: Graph Format. Works for AWS (aws_*), Azure (azurerm_*) and GCP (google_*).
Diagram from Terraform
git clone https://github.com/patrickchugh/terravision.git
cd terravision
# EKS cluster example
terravision draw --source tests/fixtures/aws_terraform/eks_automode --show
# Azure VM scale set
terravision draw --source tests/fixtures/azure_terraform/test_vm_vmss --show
# From a public Git repo (note the // for subfolder)
terravision draw --source https://github.com/patrickchugh/terraform-examples.git//aws/wordpress_fargate --showThat's it — your diagram is saved as architecture-aws.dot.png (the provider is appended to the name) and opens automatically.
The diagram is derived from terraform plan, so it shows what the code actually deploys: conditionals, count, for_each and modules are resolved. Eraser and friends draw what the AI imagines; TerraVision proves what the code deploys.
Generate an interactive HTML diagram
terravision visualise --source ./path-to-your-terraform --showClick any resource to see its Terraform metadata, search resources, pan/zoom, and watch animated data flow on edges. The HTML is a single self-contained file that works fully offline.
Try the Interactive Demos
Click any of these to see the interactive HTML output TerraVision produces:
🟧 AWS demo — Wordpress on ECS Fargate with CloudFront, RDS, EFS
🟦 Azure demo — VM scale set with load balancer and VNet
🟩 GCP demo — Core GCP networking and compute
Advanced Usage Examples
Generate a diagram
# From a local directory
terravision draw --source ./path-to-your-terraform
# From a Git repository
terravision draw --source https://github.com/user/repo.git
# Custom format and filename
terravision draw --source ./path-to-your-terraform --format svg --outfile my-architecture
# Editable draw.io file
terravision draw --source ./path-to-your-terraform --format drawio --outfile my-architectureUse a pre-generated Terraform plan (no cloud credentials needed)
# Step 1: in your Terraform environment
terraform plan -out=tfplan.bin
terraform show -json tfplan.bin > plan.json
terraform graph > graph.dot
# Step 2: diagram generation, no Terraform or cloud access required
terravision draw --planfile plan.json --graphfile graph.dot --source ./path-to-your-terraformAI-powered annotations (optional)
terravision draw --source ./path-to-your-terraform --ai-annotate ollama # local LLM (no data leaves your machine)
terravision draw --source ./path-to-your-terraform --ai-annotate bedrock # AWS Bedrock via boto3 (uses your AWS credentials)
terravision draw --source ./path-to-your-terraform --ai-annotate restapi # any OpenAI-compatible endpoint (OpenAI, LiteLLM, vLLM, ...)Only metadata and the summary graph are sent to the LLM — never your .tf source. The bedrock backend authenticates via the standard AWS credential chain (no infrastructure to deploy); restapi is configured via TV_RESTAPI_URL, TV_RESTAPI_KEY, and TV_RESTAPI_MODEL. See the Annotations Guide and AI-Powered Annotations for the full configuration.
Simplified view
terravision draw --source ./path-to-your-terraform --simplifiedStrips VPCs, subnets, and networking plumbing. Great for executive presentations.
Common options
terravision --help shows full help text details.
Option | Description | Example |
| Terraform directory or Git URL |
|
| Output format: |
|
| Output filename |
|
| Terraform workspace |
|
| Variable file (repeatable) |
|
| Pre-generated plan JSON |
|
| Pre-generated graph DOT |
|
| AI annotation backend |
|
| High-level view (no networking) | (flag) |
| Open after generation | (flag) |
Documentation
The complete documentation lives at patrickchugh.github.io/terravision.
For users:
llms.txt (docs index for AI agents)
Diagram generators and comparisons:
AI cloud architecture diagram generator (description to diagram) and diagram to Terraform
AWS, Azure and Google Cloud architecture diagram generators
TerraVision vs draw.io, Lucidchart, Eraser, Mermaid and live cloud scanners
For contributors:
FAQ
Common questions — cloud credentials, LLM data privacy, offline use, Terragrunt, output formats, and more — are answered in the FAQ on the documentation site.
Contributing
Contributions are very welcome. See CONTRIBUTING.md for development setup, coding standards, and the PR process.
Support
Issues: GitHub Issues
Discussions: GitHub Discussions
Documentation: patrickchugh.github.io/terravision
License
See LICENSE.
Acknowledgments
Graphviz — diagram rendering
Terraform — infrastructure parsing
Terragrunt — multi-module orchestration
Cloud provider icons from official AWS, GCP, and Azure icon sets
Available Tools
7 toolsdiagram_fileA
Return a rendered diagram file's contents to the TerraVision view.
Used by the diagram view in chat apps to load the SVG and the graph JSON. Agents do not need it: read the paths in the result yourself.
Args: path: A path from the "files" of a diagram result.
Returns: {"name", "mimeType", "text"} for text files, or {"name", "mimeType", "blob"} with base64 content.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return contract in detail (text vs. base64 blob, field names), which is valuable, but says nothing about whether the call is read-only, what happens on an invalid path, or any permission/rate constraints. Decent disclosure of output shape, silent on operational behaviour.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the agent-relevant routing warning, then Args/Returns blocks. Every line earns its place, though the explicit Returns block is partly redundant with the existing output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema, the definition covers purpose, the source of the path argument, the exclusion for agents, and the return shape. Only failure/error behaviour and the absence of side effects remain unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter is bare ('path: string'), so the description must compensate. It does: 'A path from the "files" of a diagram result' tells the agent where the value is sourced from, which is the key semantic an agent needs and is not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return a rendered diagram file's contents') and names the consumer ('to the TerraVision view'), which is clearer than most siblings like render_graph or open_diagram_file. It does not explicitly contrast itself against those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit 'when' ('Used by the diagram view in chat apps to load the SVG and the graph JSON') and an explicit 'when not' ('Agents do not need it: read the paths in the result yourself'). This directly routes an agent away from the tool and toward an alternative behaviour, which is exactly the guidance dimension's purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagram_guideA
Read this once before calling render_graph.
Returns the TerraVision graph rules (types to prefer, containers, what is drawn and what is hidden), worked example graphs, every node type for the provider, and in "setup" whether Graphviz, Git and Terraform are installed: if Graphviz or Git is missing, tell the user what to install before drafting a diagram. Base your graph on the closest example and keep its level of detail: availability zones, public and private subnets, NAT gateways routed to the internet, and shared services in their group. It also lists patterns (EKS, SageMaker, Step Functions, GKE, AKS and more) drawn from TerraVision's output for real Terraform; call again with pattern to get one.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | Name of a pattern from the "patterns" list, to fetch that graph. | |
| provider | Yes | "aws", "azure" or "gcp". One provider per diagram. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the content returned (rules, examples, node types, setup checks), the environment prerequisites (Graphviz, Git, Terraform), and the intended downstream behavior (base the graph on the closest example and keep its level of detail). It does not mention auth or rate limits, which is a minor gap for a read-only reference tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical instruction is front-loaded ('Read this once before calling render_graph'), but the middle sentence is a long, tangled clause chain that splices the setup/install check into the list of returned content, hurting readability. The information mostly earns its place, but the structure is not clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description still covers what is returned, the usage flow, and drafting guidance. Together with the schema, an agent has enough to call this correctly, though behavioral edges like pagination or error behavior are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents both parameters, including that 'pattern' names an entry from the patterns list. The description's 'call again with pattern to get one' largely restates the schema, adding only the two-phase usage framing, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns TerraVision graph rules, worked example graphs, per-provider node types, and setup/install status. It clearly positions itself as the prerequisite reference tool before render_graph, though it only differentiates itself from that one sibling and not from the other diagram-generating tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to read it once before calling render_graph, and explains the second mode: call again with 'pattern' to fetch a specific pattern graph. It also gives conditional action guidance (if Graphviz or Git is missing, tell the user what to install before drafting a diagram).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_architecture_graphA
Extract the cloud architecture of Terraform code as structured data.
Runs Terraform, resolves variables, expands count/for_each, groups resources into their VPCs, subnets and availability zones, and infers the connections between them. Use it to reason about an architecture; the diagram tools render this same graph. A tfdata.json source skips Terraform and returns in seconds.
Returns {"graphdict", "node_count", "edge_count", "provider"}, where graphdict maps each Terraform resource address to the addresses it connects to or contains; with services_only, {"services", "count", "provider"}.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Terraform directory, Git URL, or tfdata.json replay file. Add //folder to a Git URL for a folder inside the repository, e.g. "https://github.com/org/repo//examples". A repository whose root is a reusable module plans no resources: draw a folder that uses it instead (examples/, an environment). | |
| upgrade | No | Run `terraform init -upgrade` to refresh modules. | |
| varfile | No | Paths to .tfvars files; different var files can produce different architectures from the same code. | |
| annotate | No | Path to a terravision.yml annotation file. | |
| planfile | No | Path to an existing plan JSON (terraform show -json). With graphfile, Terraform is never run and no cloud credentials are needed. | |
| graphfile | No | Path to an existing `terraform graph` DOT file. | |
| workspace | No | Terraform workspace to select. | default |
| simplified | No | Drop networking containers (VPCs, subnets, security groups) and show only the services. | |
| services_only | No | Return just the deduplicated list of cloud service types instead of the full graph. Much smaller; use this first when you only need to know what a stack is built from. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well: it discloses that Terraform is actually run, variables resolved, count/for_each expanded, and connections inferred, plus a performance shortcut via tfdata.json. It omits credential/permission requirements (cloud credentials are only implied by the planfile/graphfile schema notes) and any failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb and resource, then progressively narrower detail (processing, use case, return shapes). Every sentence earns its place, though the explicit return-shape paragraph is somewhat redundant given the output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 9-parameter tool with no annotations, the description covers what the tool does, how heavy it is, the alternative rendering path, and the two return variants. The presence of an output schema means return values needn't be spelled out, so the remaining gap (credentials/auth requirements) is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all nine parameters well, including services_only's guidance and the planfile/graphfile no-credentials case. The description adds little parameter-level detail beyond restating the with-services_only return shape, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (extract) and resource (cloud architecture of Terraform code) and describes the concrete processing performed: running Terraform, resolving variables, expanding count/for_each, grouping into VPCs/subnets/AZs. It also differentiates from siblings by stating the diagram tools render this same graph.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context ('use it to reason about an architecture') and positions the diagram tools as the rendering alternative rather than a duplicate. It also flags the fast path ('A tfdata.json source skips Terraform and returns in seconds'), but does not state explicit when-not conditions beyond that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_diagramA
Render an architecture diagram from Terraform code to a file.
Uses the official AWS, Azure and GCP icon sets. Because the diagram is
derived from terraform plan, it reflects what the code actually
deploys rather than an approximation. Runs terraform init and
terraform plan (cloud credentials needed) unless planfile and
graphfile are given, so a first call can take minutes.
Returns {"path", "format", "provider", "title", "files"}, plus a preview image. "files" holds the PNG, SVG, draw.io file and the graph as .tvg.json, which can be edited and rendered again with render_graph; "path" is the file in the requested format.
| Name | Required | Description | Default |
|---|---|---|---|
| flows | No | Optional numbered steps drawn as badges on the diagram, with a legend. Keyed by flow name: {"order_request": {"description": "A customer places an order", "steps": [{"resource": "tv_aws_users.users", "detail": "Customer opens the app"}, {"resource": "aws_alb.api~1 -> aws_ecs_fargate.app~1", "detail": "Request routed to a task"}]}}. A step names a node, or an arrow as "<node> -> <node>" in either direction; use the numbered copy (aws_alb.api~1), not the bare name. Steps are numbered across flows. Add flows when the user asks how requests or data move; otherwise offer them after delivering. Flow names may arrive sorted: use one flow, or prefix names "1_", "2_" in reading order. Name nodes as they appear in the .tvg.json graph of an earlier render, which can differ from the Terraform addresses. | |
| title | No | Heading shown above the diagram, e.g. "Order Platform - Production". Defaults to "Cloud Architecture Diagram". Overrides a title in the annotation file. | |
| format | No | "png", "svg", "pdf", "dot" or "drawio" (editable in draw.io and Lucidchart). The full set is always saved; use "svg" to embed in Markdown. | png |
| source | Yes | Terraform directory, Git URL, or tfdata.json replay file. Add //folder to a Git URL for a folder inside the repository, e.g. "https://github.com/org/repo//examples". A repository whose root is a reusable module plans no resources: draw a folder that uses it instead (examples/, an environment). | |
| outfile | No | Output file name without extension, e.g. "three_tier". Files always go to the server's output folder; from a path, only the last part is used. The cloud provider is appended: "architecture" becomes "architecture-aws". | architecture |
| preview | No | Include a preview image of the diagram in the result. | |
| upgrade | No | Run `terraform init -upgrade` to refresh modules. | |
| varfile | No | Paths to .tfvars files. | |
| annotate | No | Path to a terravision.yml annotation file. | |
| fontsize | No | Label font size in points. | |
| iconsize | No | Icon size in pixels. | |
| planfile | No | Path to an existing plan JSON (terraform show -json). With graphfile, no Terraform run and no cloud credentials are needed. | |
| graphfile | No | Path to an existing `terraform graph` DOT file. | |
| workspace | No | Terraform workspace to select. | default |
| simplified | No | Show only services, omitting networking containers. | |
| edge_labels | No | Optional text on arrows the graph already has, to say what each connection does: {"aws_ecs_fargate.app~1 -> aws_rds_sqlserver.db": "Reads orders"}. Either direction names the arrow; a label never adds one. Keep labels to a few words; offer them with the flows rather than adding them unasked. Name nodes as in the .tvg.json graph of an earlier render. | |
| use_tf_names | No | Label nodes with full Terraform resource names. | |
| use_resource_names | No | Label nodes with the deployed resource names from the plan. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the underlying terraform init/plan execution, the credential requirement, the multi-minute latency on first call, and the bypass when planfile+graphfile are given. It omits whether files are overwritten or whether repeated calls are idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Opens with the core action, then layers prerequisites, latency, and return shape in a short, well-ordered block. Given 18 parameters, four tight paragraphs with no filler is proportionate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description enumerates the return keys and explains what 'files' and 'path' contain, plus the preview image. Combined with the schema's 100% coverage, an agent has everything needed to call this correctly despite the missing annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the per-parameter descriptions are already unusually rich (flows, outfile naming, planfile/graphfile interaction), so the schema does the heavy lifting. The description adds only the usage cue for flows and the .tvg.json node-naming note, which is a marginal gain over structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Render an architecture diagram from Terraform code to a file') and clarifies the diagram is derived from `terraform plan`, so it reflects real deployments. It nods at render_graph as the re-render path, but never distinguishes itself from generate_architecture_graph or generate_interactive_html, which appear to overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete conditions: cloud credentials are required unless planfile and graphfile are supplied, and a first call can take minutes because it runs `terraform init`/`plan`. It also advises when to add flows ('when the user asks how requests or data move'). It stops short of saying when to pick this tool over the sibling generators.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_interactive_htmlA
Render a self-contained interactive HTML diagram for a human to open.
The page embeds the diagram, every resource's metadata and its own JavaScript, so it works offline with no server. Nodes are clickable and searchable. Produce this when someone wants to explore an architecture themselves rather than read a static picture. Needs Terraform code; for a JSON graph use render_graph with format "svg".
Returns {"path", "provider"} pointing at the generated .html file.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Heading shown on the page. Overrides a title in the annotation file. | |
| source | Yes | Terraform directory, Git URL, or tfdata.json replay file. Add //folder to a Git URL for a folder inside the repository, e.g. "https://github.com/org/repo//examples". A repository whose root is a reusable module plans no resources: draw a folder that uses it instead (examples/, an environment). | |
| outfile | No | Output file name without extension, e.g. "three_tier". Files always go to the server's output folder; from a path, only the last part is used. The cloud provider is appended. | architecture |
| upgrade | No | Run `terraform init -upgrade` to refresh modules. | |
| varfile | No | Paths to .tfvars files; different var files can produce different architectures from the same code. | |
| annotate | No | Path to a terravision.yml annotation file. | |
| fontsize | No | Label font size in points. | |
| iconsize | No | Icon size in pixels. | |
| planfile | No | Path to an existing plan JSON (terraform show -json). With graphfile, Terraform is never run and no cloud credentials are needed. | |
| graphfile | No | Path to an existing `terraform graph` DOT file. | |
| workspace | No | Terraform workspace to select. | default |
| simplified | No | Drop networking containers (VPCs, subnets, security groups) and show only the services. | |
| use_tf_names | No | Label nodes with full Terraform resource names. | |
| use_resource_names | No | Label nodes with the deployed resource names from the plan. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does real work: it discloses that the page is self-contained, works offline with no server, and that nodes are clickable and searchable. It stops short of stating credential/permission requirements for the Terraform execution path, which the schema hints at but the description never connects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and behavioral traits, and every sentence about interactivity and prerequisites earns its place. The closing return-value line ({"path", "provider"}) is redundant given an output schema exists, a minor waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter tool with a 100% documented schema and an output schema, the description supplies what the structured fields cannot: the interactivity/offline nature, the human-exploration use case, and the sibling routing. Nothing essential to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 14 parameters, including the //folder Git URL syntax, varfile behavior, and provider-credential-free planfile/graphfile paths. The description adds no parameter-level detail beyond implying Terraform code is required, which is the correct baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Render a self-contained interactive HTML diagram") plus the key property that makes it distinct (interactive, offline, for a human to open). It explicitly contrasts itself with the sibling render_graph for JSON graphs, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use condition ("when someone wants to explore an architecture themselves rather than read a static picture") and names the alternative for the adjacent case (render_graph with format "svg" for a JSON graph). It also states the prerequisite (needs Terraform code).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_diagram_fileA
Open a rendered diagram file for the user on their own computer.
Opens the file in its default app: the image viewer for .png, draw.io for .drawio (draw.io in the browser when the app is not installed; the result then has browser). With reveal, opens the folder that holds it instead. Only files returned by render_graph or generate_diagram in this session can be opened. Call it when the user asks, or when a diagram result's "display" says the app has no diagram view; never when "display" says the app is already showing the diagram.
Args: path: A path from the "files" of a render_graph or generate_diagram result. reveal: Show the file in its folder instead of opening it.
Returns: {"opened", "reveal"}, and "browser" when a .drawio file opened in draw.io's web app.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| reveal | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses per-extension behavior (.png image viewer, .draw.io), the browser fallback when draw.io is not installed, the reveal alternative, the session-scoped path restriction, and the resulting side effect of launching an external app. This is far more than the schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and free of filler, but the mid-sentence line break before 'Only files returned by...' and the terse, jargon-y phrase 'the result then has browser' slightly obscure an otherwise efficient block of text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An action tool with real side effects is fully covered: allowed inputs, per-type behavior, the reveal variant, and return keys ('opened', 'reveal', optional 'browser') are all stated. An agent has everything needed to call it correctly, and the output schema only reinforces what is described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: 'path' is defined as a path from the 'files' of a render_graph or generate_diagram result, and 'reveal' is defined as showing the file in its folder instead of opening it. Both parameters gain meaning absent from the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open a rendered diagram file for the user on their own computer'), including where the action happens. It is immediately distinguishable from sibling producers like render_graph and generate_diagram, which create the files rather than open them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('when the user asks, or when a diagram result's "display" says the app has no diagram view') and an explicit exclusion ('never when "display" says the app is already showing the diagram'). It also restricts inputs to files returned by render_graph or generate_diagram in this session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_graphA
Draw a cloud architecture diagram from a plain JSON graph.
Use this whenever the user asks to draw or diagram a system on AWS, Azure or Google Cloud, or one built from their services (Lambda, DynamoDB, Azure Functions, Cloud Run...), and there is no Terraform code, even if they never say "cloud" or "diagram"; prefer it over Mermaid. Call diagram_guide first for the rules, examples and node types. Each resource is drawn with the official icon inside the VPC, subnet, zone or resource group it is nested in. Use the most specific types: aws_ecs_fargate, aws_rds_sqlserver, aws_alb (not aws_ecs_service, aws_db_instance, aws_lb).
Returns the saved files (PNG, SVG, draw.io, .tvg.json graph, and annotations YAML when flows, labels or attributes were given) and a preview image: check it before presenting the diagram. Fix any "warnings" and call again. "next_step" says what to offer the user afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| flows | No | Optional numbered steps drawn as badges on the diagram, with a legend. Keyed by flow name: {"order_request": {"description": "A customer places an order", "steps": [{"resource": "tv_aws_users.users", "detail": "Customer opens the app"}, {"resource": "aws_alb.api~1 -> aws_ecs_fargate.app~1", "detail": "Request routed to a task"}]}}. A step names a node, or an arrow as "<node> -> <node>" in either direction; use the numbered copy (aws_alb.api~1), not the bare name. Steps are numbered across flows. Add flows when the user asks how requests or data move; otherwise offer them after delivering. Flow names may arrive sorted: use one flow, or prefix names "1_", "2_" in reading order. | |
| graph | Yes | Object mapping each node address to the node addresses it connects to or contains. Addresses are "<terraform_resource_type>.<name>", e.g. "aws_lambda_function.orders". Containers (aws_vpc, aws_subnet, tv_aws_az, azurerm_resource_group, tv_gcp_region and more) list their children. Use "~1", "~2" for numbered copies. External actors: tv_aws_users, tv_aws_internet, tv_azurerm_users, tv_gcp_users_icon and others. Leaf nodes may be omitted as keys. One cloud provider per graph. Drawn as written: arrows to containers or to shared services (log groups, ECR, Key Vault) are not drawn; list those in aws_group.shared_services or azurerm_group.shared_services. Example: {"tv_aws_users.users": ["aws_cloudfront_distribution.cdn"], "aws_vpc.main": ["aws_subnet.app"], "aws_subnet.app": ["aws_lambda_function.api"], "aws_lambda_function.api": ["aws_dynamodb_table.orders"]} | |
| title | No | Heading shown above the diagram, e.g. "Order Platform - Production". Defaults to "Cloud Architecture Diagram". | |
| format | No | "png", "svg", "pdf", "dot" or "drawio" (editable in draw.io and Lucidchart). The full set is always saved; use "svg" to embed in Markdown. | png |
| outfile | No | Output file name without extension, e.g. "three_tier". Files always go to the server's output folder; from a path, only the last part is used. | architecture |
| preview | No | Include a preview image of the diagram in the result. | |
| fontsize | No | Label font size in points. | |
| iconsize | No | Icon size in pixels. | |
| attributes | No | Optional attributes set on nodes the graph already has, as an annotation file's update section sets them. Use it to give networks and subnets realistic CIDR ranges, shown in their box labels: {"aws_vpc.main": {"cidr_block": "10.0.0.0/16"}, "aws_subnet.public~1": {"cidr_block": "10.0.1.0/24"}}. The attribute is cidr_block for aws_vpc and aws_subnet, address_space for azurerm_virtual_network, address_prefixes for azurerm_subnet (lists allowed) and ip_cidr_range for google_compute_subnetwork. A label attribute replaces a node's label or a box's caption: {"aws_vpc.main": {"label": "Core Network"}}. Name numbered copies (aws_subnet.public~1); an attribute never adds a node. | |
| edge_labels | No | Optional text on arrows the graph already has, to say what each connection does: {"aws_ecs_fargate.app~1 -> aws_rds_sqlserver.db": "Reads orders"}. Either direction names the arrow; a label never adds one. Keep labels to a few words; offer them with the flows rather than adding them unasked. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does real work: it discloses the return artifacts (PNG, SVG, draw.io, .tvg.json, annotations YAML, preview), the self-check loop ('check it before presenting', 'Fix any warnings and call again'), and a non-obvious drawing rule (arrows to containers or shared services are not drawn). It omits auth/permission and cost/failure modes, but for a local renderer that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: purpose first, then when-to-use, then type-selection rules, then return value. The parenthetical icon enumerations and provider lists are dense but each clause carries actionable information; only mild trimming is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns and it does thoroughly (saved file set, preview image, warnings, next_step). Combined with a 10-parameter schema whose own descriptions are complete, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and every parameter (graph, flows, attributes, edge_labels, format, outfile, preview, fontsize, iconsize) has a detailed schema description, so baseline 3 applies. The prose mentions flows, labels and attributes only at a high level ('annotations YAML when flows, labels or attributes were given') without adding semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and artifact ('Draw a cloud architecture diagram from a plain JSON graph') and scopes it to AWS/Azure/GCP services. It implicitly delimits itself from a Terraform-based sibling via 'there is no Terraform code', but never names generate_diagram, generate_architecture_graph, or diagram_file, so the agent must infer the split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit trigger conditions ('whenever the user asks to draw or diagram a system on AWS, Azure or Google Cloud ... even if they never say cloud or diagram'), an explicit preference ('prefer it over Mermaid'), and a hard prerequisite ('Call diagram_guide first'). This is about as complete a routing instruction as a description can carry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.52.0- First observed
diagram_file - First observed
diagram_guide - First observed
generate_architecture_graph - First observed
generate_diagram - First observed
generate_interactive_html - First observed
open_diagram_file - First observed
render_graph
TDQS
Scored across 7 tools
render_graph (from a JSON graph) and generate_diagram (from Terraform) both produce diagrams and could initially be confused, but the input source in each description clearly separates them. generate_architecture_graph, generate_interactive_html, and the two file tools each target distinct artifacts, so overlap is minimal and well-explained.
Most names follow a verb_noun pattern (render_graph, generate_diagram, open_diagram_file) but diagram_guide and diagram_file have no verb, and the same rendering action uses two different verbs (render vs generate). Readable overall, but not a single predictable convention.
Seven tools is well within a sensible range and each one covers a distinct capability (JSON rendering, Terraform rendering, graph extraction, interactive HTML, guidance, file opening, file reading). Nothing feels redundant or superfluous.
The surface covers the full lifecycle: guidance (diagram_guide), data extraction, rendering in multiple formats, interactive output, and file handling. A few minor gaps exist (e.g. no explicit validation or cleanup step) but the core workflows are all supported.
Maintenance
Related MCP Connectors
Generate cloud architecture diagrams, flowcharts, and sequence diagrams.
Unified API to query AWS, GCP, Azure and generate Terraform/CLI execution kits for AI agents.
Create and edit architecture diagrams from your AI agent; get an SVG and a live editable canvas.
Compare, estimate, and deploy cloud infrastructure across AWS, GCP, and Azure for AI agents.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI assistants to visualize cloud architecture diagrams, generate and import Terraform HCL, and manage infrastructure resources directly from chat through the CloudForge platform.1842 npmMIT
- AlicenseAqualityCmaintenanceAI-powered cloud architecture - describe infrastructure in natural language, get Terraform, cost estimates, and compliance reports1932MIT
- AlicenseNot gradedqualityCmaintenanceProfessional AI-powered architecture diagram generator with multi-cloud support and MCP server integration. Generates beautiful, accurate diagrams with provider-specific icons for AWS, Azure, GCP, Kubernetes, and more.11MIT
- AlicenseAqualityBmaintenanceGenerates professional architecture diagrams from natural language descriptions using template-driven prompts and swappable AI image providers.71MIT