{
  "data": {
    "a": {
      "slug": "plantuml",
      "name": "PlantUML",
      "vendor": "PlantUML project (Arnaud Roques)",
      "vendorUrl": "https://plantuml.com",
      "kind": "sdk",
      "category": "diagramming",
      "summary": "PlantUML is open-source software that turns text descriptions into UML, architecture, Gantt, mind map and other diagrams. Agents run it as a Java command-line tool, a Java library, a local HTTP server or the `@plantuml/mcp-js` MCP server.",
      "url": "https://www.anchorterminal.com/tools/plantuml",
      "markdownUrl": "https://www.anchorterminal.com/tools/plantuml.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/plantuml.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/plantuml.json",
      "repo": "https://github.com/plantuml/plantuml",
      "license": "GPL-3.0-or-later",
      "transports": [],
      "packages": [
        {
          "registry": "maven",
          "name": "net.sourceforge.plantuml:plantuml"
        },
        {
          "registry": "npm",
          "name": "@plantuml/mcp-js"
        },
        {
          "registry": "oci",
          "name": "plantuml/plantuml"
        }
      ],
      "auth": "none",
      "authNotes": "No account, key or login. The jar, the Java library and the MCP server run on the owner's machine with the owner's file and network rights. The built-in `-picoweb` HTTP server has no authentication and listens on all interfaces unless a bind address is given.",
      "pricing": "free",
      "pricingNotes": "Free under GPL-3.0-or-later, with the same source also under GPL-2.0, LGPL, Apache-2.0, BSD-3-Clause, EPL and MIT. Nothing to buy. The project takes donations through GitHub Sponsors and Patreon.",
      "priceSummary": "Free · OSS",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs or the source (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 13356,
        "npmWeekly": 207,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://plantuml.com/command-line",
      "capabilities": [
        "diagram.as-code",
        "diagram.create",
        "diagram.export",
        "diagram.architecture"
      ],
      "tags": [
        "open-source",
        "local",
        "cli",
        "java",
        "mcp",
        "diagram-as-code",
        "uml",
        "no-auth",
        "free",
        "docker"
      ],
      "lastRelease": "2026-09-05",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 66.9,
        "grade": "B",
        "agentReady": false,
        "rank": 251,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 1,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 78,
          "maintenance": 73,
          "payments": 60,
          "reliability": 83,
          "schema": 65,
          "security": 50,
          "transparency": 73
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": -2,
        "negativeNotes": [
          "27 February 2026. Release 1.2026.2 switched off chronology diagrams, and its change log calls the removal temporary. On 8 October 2026 the factory is still commented out in `PSystemBuilder.java`, while the README lists the chronology diagram as supported and https://plantuml.com/chronology-diagram documents it. Two points, because the removal is in the change log (https://github.com/plantuml/plantuml/blob/master/CHANGES.md)."
        ],
        "verdict": "One Java command reads diagram text from stdin and writes PNG, SVG, PDF or ASCII with no account, and CI passed on the last eight pushes. The default security profile lets diagram text read any local file and fetch any URL, and the documentation still lists chronology diagrams that release 1.2026.2 switched off.",
        "bestFor": "Agents that write sequence, class, state, component, deployment, Gantt or C4 diagrams as text and render them locally or in CI.",
        "strengths": [
          "`java -jar plantuml.jar -pipe` reads a diagram from stdin and writes PNG, SVG, PDF, EPS, LaTeX or ASCII to stdout, with no account or key",
          "`--check-syntax` and `-stdrpt` report errors as `file:line:error` lines, and exit codes 0, 50, 100 and 200 are documented",
          "The official `@plantuml/mcp-js` server has four tools, needs only Node.js, and returns the same SVG bytes for the same source on any machine",
          "Version 1.2026.8 of 5 September 2026 is on GitHub, Maven Central, Homebrew and Docker Hub, and the `ci` workflow passed on the last eight pushes",
          "The same source is available under GPL-3.0-or-later, GPL-2.0, LGPL, Apache-2.0, BSD-3-Clause, EPL and MIT, and generated images carry no licence obligation"
        ],
        "weaknesses": [
          "The default security profile is LEGACY, which gives diagram text full access to local files and URLs through `!include`. The docs say it will be removed, with no date",
          "`-picoweb` listens on all network interfaces by default and has no authentication",
          "Chronology diagrams were switched off in 1.2026.2 on 27 February 2026 and are still listed in the README and documented on plantuml.com",
          "The command-line page gives the HTTP server's default port as 4242 in one help listing and 8080 in another. The source uses 8080",
          "No llms.txt, no security.txt and no published advisories. The security policy is one email address, and 575 issues are open"
        ],
        "agentNotes": [
          "Set `PLANTUML_SECURITY_PROFILE` to `SANDBOX` or `ALLOWLIST` before rendering text from an untrusted source. The default profile lets `!include` read local files and fetch URLs",
          "Run `java -jar plantuml.jar --check-syntax` with `-stdrpt` first and read the exit status. Without `--no-error-image` a syntax error still writes an image of the error text",
          "Pass `-pipe` with `--svg`, `--txt` or `--utxt` to work without files. `--txt` output suits a text-only model",
          "Start the local server as `-picoweb:8080:127.0.0.1`. Without the bind address it listens on every interface",
          "Use `npx -y @plantuml/mcp-js` when no Java runtime is present. It renders SVG only, so use the jar for PNG or PDF"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 66.9
          }
        ],
        "editorialScores": {
          "ergonomics": 78,
          "maintenance": 73,
          "payments": 60,
          "reliability": 83,
          "schema": 65,
          "security": 50,
          "transparency": 73
        },
        "provenanceScore": 73
      },
      "connect": {
        "install": "brew install plantuml   # or download plantuml.jar from https://github.com/plantuml/plantuml/releases, or docker run ghcr.io/plantuml/plantuml",
        "config": {
          "mcpServers": {
            "plantuml-js": {
              "args": [
                "-y",
                "@plantuml/mcp-js"
              ],
              "command": "npx"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/diagram.as-code",
        "tool": "https://letme.dev/plantuml"
      },
      "area": "design-diagrams",
      "provenance": {
        "legalEntity": "No legal entity found. Copyright Arnaud Roques",
        "domain": "plantuml.com",
        "domainRegistered": "2010-11-28",
        "endpointOnVendorDomain": null,
        "terms": "",
        "privacy": "",
        "statusPage": "",
        "changelog": "https://github.com/plantuml/plantuml/blob/master/CHANGES.md",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "`LICENSES.md` reads Copyright (C) 2009-2026, Arnaud Roques. No company or foundation is named in the repository or on the pages read",
          "No terms or privacy document governs the software. The GPL-3.0-or-later licence, or one of the six alternatives, stands in",
          "https://plantuml.com/.well-known/security.txt answered 404 on 8 October 2026. `docs/SECURITY.md` asks for reports by email to a Gmail address",
          "The lead named PlantUML as vendor. It is a community project led by one author, with no company behind it that we found"
        ],
        "score": 73
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/plantuml.json"
    },
    "answer": "PlantUML scores 66.9 (B) on agent readiness against Structurizr + MCP's 59.9 (C), and leads in 6 of 7 scored categories.",
    "b": {
      "slug": "structurizr",
      "name": "Structurizr + MCP",
      "vendor": "Structurizr",
      "vendorUrl": "https://structurizr.com",
      "kind": "http-api",
      "category": "diagramming",
      "summary": "Diagram-as-code tool for software architecture using the C4 model.",
      "url": "https://www.anchorterminal.com/tools/structurizr",
      "markdownUrl": "https://www.anchorterminal.com/tools/structurizr.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/structurizr.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/structurizr.json",
      "repo": "https://github.com/structurizr/structurizr",
      "license": "Apache-2.0",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://mcp.structurizr.com/mcp",
      "packages": [],
      "auth": "mixed",
      "authNotes": "The workspace API on a Structurizr server takes a per-workspace key in the X-Authorization header, and listing all workspaces needs the admin API key. Server authentication can be switched off. The hosted MCP at mcp.structurizr.com needs no key.",
      "pricing": "freemium",
      "pricingNotes": "The DSL, local, the playground and the MCP server are free and Apache 2.0. Running the server from the prebuilt binaries needs a yearly licence priced by unique users (people or automated processes) per installation, from £300 a month for 1 to 20 users up to £2,400 a month for over 1,000, billed annually and bought by email, paid by bank transfer or PayPal invoice. 14-day trial licence from trial.structurizr.com. Building the server from source needs no licence. The cloud service took no new sign-ups after 31 December 2025 and shut down on 30 September 2026 (https://docs.structurizr.com/server/pricing).",
      "priceSummary": "$400 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 6,
      "popularity": {
        "githubStars": 419,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://docs.structurizr.com",
      "openapi": "https://raw.githubusercontent.com/structurizr/structurizr/refs/heads/main/structurizr-json/structurizr.yaml",
      "capabilities": [
        "diagram.create",
        "diagram.as-code",
        "diagram.edit",
        "diagram.export",
        "diagram.architecture"
      ],
      "tags": [
        "open-source",
        "self-hosted",
        "local",
        "hosted",
        "mcp",
        "diagram-as-code",
        "openapi",
        "free-tier"
      ],
      "lastRelease": "2026-09-19",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 59.9,
        "grade": "C",
        "agentReady": false,
        "rank": 483,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 7,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 55,
          "maintenance": 68,
          "payments": 50,
          "reliability": 73,
          "schema": 61,
          "security": 43,
          "transparency": 77
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "One model can generate several C4 architecture views. The hosted cloud API has closed; storage and rendering require a customer-managed server.",
        "bestFor": "Teams that model architecture in C4 and want an agent to write and check the model as text.",
        "strengths": [
          "One text model yields context, container, component, dynamic and deployment views",
          "Free hosted MCP at mcp.structurizr.com validates, parses, inspects and exports DSL with no key",
          "Apache 2.0 code, an OpenAPI 3.0 definition and dated changelogs",
          "Release 2026.09.19 on 19 September 2026, with reported issues fixed within weeks",
          "Nine months' dated notice before the cloud service shut down"
        ],
        "weaknesses": [
          "The hosted cloud API is gone. Storage and rendering need your own server",
          "Prebuilt server binaries need a paid licence counted per unique user, including API clients",
          "The MCP module is labelled experimental, with one-line tool descriptions",
          "Self-hosted MCP server tools take the workspace API key as a tool argument",
          "No security.txt or disclosure policy, and one maintainer wrote every commit since February"
        ],
        "agentNotes": [
          "Call `validate` and then `inspect` on the DSL before pushing a workspace",
          "Use the Mermaid export when the diagram has to render in Markdown without a Structurizr server",
          "Export needs a view key. Parse the DSL first to list the views",
          "Run the `structurizr/mcp` image with only the flags you need, such as `-dsl -server-read`, to keep write and delete tools out of reach",
          "The workspace API returns JSON, never images. PNG and SVG come from the separate export command"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 59.9
          }
        ],
        "editorialScores": {
          "ergonomics": 55,
          "maintenance": 68,
          "payments": 50,
          "reliability": 73,
          "schema": 61,
          "security": 43,
          "transparency": 80
        },
        "provenanceScore": 74
      },
      "connect": {
        "http": "curl \"$STRUCTURIZR_URL/api/workspace/1\" -H \"X-Authorization: $STRUCTURIZR_API_KEY\"",
        "claudeCode": "claude mcp add --transport http structurizr https://mcp.structurizr.com/mcp",
        "config": {
          "mcpServers": {
            "structurizr": {
              "url": "https://mcp.structurizr.com/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/diagram.create",
        "tool": "https://letme.dev/structurizr"
      },
      "area": "design-diagrams",
      "unitPrices": [
        {
          "item": "Server licence, 1 to 20 users",
          "unit": "month",
          "usd": 400,
          "note": "£300 a month billed annually, converted at about $1.34 a pound"
        },
        {
          "item": "Server licence, 21 to 50 users",
          "unit": "month",
          "usd": 800,
          "note": "£600 a month billed annually, converted at about $1.34 a pound"
        }
      ],
      "provenance": {
        "legalEntity": "Structurizr Limited",
        "domain": "structurizr.com",
        "domainRegistered": "2013-11-04",
        "endpointOnVendorDomain": true,
        "terms": "https://structurizr.com/terms-and-conditions",
        "privacy": "https://structurizr.com/privacy-policy",
        "statusPage": "",
        "changelog": "https://github.com/structurizr/structurizr/blob/main/changelog-application.md",
        "securityTxt": "none",
        "checked": "2026-10-01",
        "notes": [
          "Structurizr Limited is a private company registered in Jersey, Channel Islands, Jersey Financial Services Commission registry number 303857 (server EULA)",
          "The Pingdom status page linked from structurizr.com monitored the cloud service, which shut down on 30 September 2026, so it isn't listed",
          "Server terms and privacy policy for the licence also live at https://docs.structurizr.com/server/terms-and-conditions and https://docs.structurizr.com/server/privacy-policy"
        ],
        "score": 74
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/structurizr.json",
      "live": {
        "slug": "structurizr",
        "probe": {
          "target": "https://mcp.structurizr.com/mcp",
          "method": "get",
          "lastAt": "2026-10-09T11:46:41.951776281Z",
          "lastOk": true,
          "lastStatus": 405,
          "lastMs": 84,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 92,
          "p95ms24h": 169,
          "samples24h": 259,
          "samples30d": 2311,
          "days": [
            {
              "date": "2026-09-30",
              "probes": 35,
              "ok": 35
            },
            {
              "date": "2026-10-01",
              "probes": 276,
              "ok": 276
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-06",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 125,
              "ok": 125
            }
          ]
        },
        "versions": [
          {
            "registry": "github",
            "name": "structurizr/structurizr",
            "version": "v2026.09.19",
            "released": "2026-09-19",
            "seenAt": "2026-10-08T16:30:52.417268576Z"
          }
        ],
        "githubStars": 445,
        "securityTxt": {
          "url": "https://structurizr.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:54.527860514Z"
        },
        "domain": {
          "domain": "structurizr.com",
          "registered": "2013-11-04",
          "source": "https://rdap.verisign.com/com/v1/domain/structurizr.com",
          "checkedAt": "2026-10-04T13:06:16.957209253Z"
        },
        "pages": [
          {
            "url": "https://raw.githubusercontent.com/structurizr/structurizr/main/changelog-application.md",
            "kind": "changelog",
            "status": 304,
            "checkedAt": "2026-10-08T18:24:41.755623908Z",
            "changedAt": "2026-10-02T15:24:03.368547202Z",
            "fingerprint": "7d7f8d519415"
          },
          {
            "url": "https://docs.structurizr.com/cloud",
            "kind": "deprecations",
            "status": 304,
            "checkedAt": "2026-10-08T18:19:30.12310086Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "f3914c04c843"
          },
          {
            "url": "https://docs.structurizr.com/server/pricing",
            "kind": "pricing",
            "status": 304,
            "checkedAt": "2026-10-08T18:19:32.250508952Z",
            "changedAt": "2026-10-02T15:20:28.925834824Z",
            "fingerprint": "30400863f0dd"
          },
          {
            "url": "https://structurizr.com/privacy-policy",
            "kind": "privacy",
            "status": 404,
            "checkedAt": "2026-10-08T18:24:53.497713827Z",
            "changedAt": "0001-01-01T00:00:00Z"
          },
          {
            "url": "https://structurizr.com/terms-and-conditions",
            "kind": "terms",
            "status": 404,
            "checkedAt": "2026-10-08T18:24:55.654127236Z",
            "changedAt": "0001-01-01T00:00:00Z"
          }
        ],
        "updatedAt": "2026-10-09T11:46:41.951776281Z"
      }
    },
    "facts": [
      {
        "a": "SDK + MCP",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "PlantUML project (Arnaud Roques)",
        "b": "Structurizr",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "https://mcp.structurizr.com/mcp",
        "name": "Hosted endpoint"
      },
      {
        "a": "",
        "b": "HTTP, Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "None",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Free",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "GPL-3.0-or-later",
        "b": "Apache-2.0",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "6",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "2026-09-05",
        "b": "2026-09-19",
        "name": "Last release"
      },
      {
        "a": "no document linked",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "no document linked",
        "b": "couldn't be read",
        "name": "Privacy policy last updated"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Customer content may train models"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "13k stars, 207 npm/wk",
        "b": "419 stars",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "PlantUML scores 66.9 (B) on agent readiness against Structurizr + MCP's 59.9 (C), and leads in 6 of 7 scored categories.",
        "question": "Which is better for AI agents, PlantUML or Structurizr + MCP?"
      },
      {
        "answer": "No hosted endpoint is listed for PlantUML. Structurizr + MCP has a hosted endpoint at https://mcp.structurizr.com/mcp.",
        "question": "Can an agent call PlantUML and Structurizr + MCP without installing anything?"
      },
      {
        "answer": "Yes. PlantUML is open source (GPL-3.0-or-later). Structurizr + MCP is open source (Apache-2.0).",
        "question": "Are PlantUML and Structurizr + MCP open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 83 against 73",
          "Agent ergonomics, 78 against 55",
          "Security \u0026 auth, 50 against 43",
          "Payments \u0026 pricing, 60 against 50",
          "Maintenance \u0026 community, 73 against 68"
        ],
        "also": [
          "No key needed to call it"
        ],
        "goodFor": "Agents that write sequence, class, state, component, deployment, Gantt or C4 diagrams as text and render them locally or in CI.",
        "slug": "plantuml",
        "watchFor": "The default security profile is LEGACY, which gives diagram text full access to local files and URLs through `!include`. The docs say it will be removed, with no date"
      },
      {
        "aheadOn": null,
        "also": [
          "A hosted endpoint, with nothing to install"
        ],
        "goodFor": "Teams that model architecture in C4 and want an agent to write and check the model as text.",
        "slug": "structurizr",
        "watchFor": "The hosted cloud API is gone. Storage and rendering need your own server"
      }
    ],
    "job": {
      "capability": "diagram.as-code",
      "name": "Diagram as code"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/cloudviz-vs-plantuml.json",
        "title": "Cloudviz API vs PlantUML",
        "url": "https://www.anchorterminal.com/compare/cloudviz-vs-plantuml"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudviz-vs-structurizr.json",
        "title": "Cloudviz API vs Structurizr + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudviz-vs-structurizr"
      },
      {
        "json": "https://www.anchorterminal.com/compare/diagrams-so-vs-plantuml.json",
        "title": "Diagrams.so API + MCP vs PlantUML",
        "url": "https://www.anchorterminal.com/compare/diagrams-so-vs-plantuml"
      },
      {
        "json": "https://www.anchorterminal.com/compare/diagrams-so-vs-structurizr.json",
        "title": "Diagrams.so API + MCP vs Structurizr + MCP",
        "url": "https://www.anchorterminal.com/compare/diagrams-so-vs-structurizr"
      },
      {
        "json": "https://www.anchorterminal.com/compare/drawio-vs-plantuml.json",
        "title": "draw.io + MCP vs PlantUML",
        "url": "https://www.anchorterminal.com/compare/drawio-vs-plantuml"
      },
      {
        "json": "https://www.anchorterminal.com/compare/drawio-vs-structurizr.json",
        "title": "draw.io + MCP vs Structurizr + MCP",
        "url": "https://www.anchorterminal.com/compare/drawio-vs-structurizr"
      },
      {
        "json": "https://www.anchorterminal.com/compare/eraser-vs-plantuml.json",
        "title": "Eraser API + MCP vs PlantUML",
        "url": "https://www.anchorterminal.com/compare/eraser-vs-plantuml"
      },
      {
        "json": "https://www.anchorterminal.com/compare/eraser-vs-structurizr.json",
        "title": "Eraser API + MCP vs Structurizr + MCP",
        "url": "https://www.anchorterminal.com/compare/eraser-vs-structurizr"
      },
      {
        "json": "https://www.anchorterminal.com/compare/lucid-vs-plantuml.json",
        "title": "Lucid API + MCP vs PlantUML",
        "url": "https://www.anchorterminal.com/compare/lucid-vs-plantuml"
      },
      {
        "json": "https://www.anchorterminal.com/compare/lucid-vs-structurizr.json",
        "title": "Lucid API + MCP vs Structurizr + MCP",
        "url": "https://www.anchorterminal.com/compare/lucid-vs-structurizr"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mermaid-chart-vs-plantuml.json",
        "title": "Mermaid Chart MCP vs PlantUML",
        "url": "https://www.anchorterminal.com/compare/mermaid-chart-vs-plantuml"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mermaid-chart-vs-structurizr.json",
        "title": "Mermaid Chart MCP vs Structurizr + MCP",
        "url": "https://www.anchorterminal.com/compare/mermaid-chart-vs-structurizr"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mural-mcp-vs-plantuml.json",
        "title": "Mural MCP vs PlantUML",
        "url": "https://www.anchorterminal.com/compare/mural-mcp-vs-plantuml"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mural-mcp-vs-structurizr.json",
        "title": "Mural MCP vs Structurizr + MCP",
        "url": "https://www.anchorterminal.com/compare/mural-mcp-vs-structurizr"
      },
      {
        "json": "https://www.anchorterminal.com/compare/plantuml-vs-whimsical.json",
        "title": "PlantUML vs Whimsical MCP",
        "url": "https://www.anchorterminal.com/compare/plantuml-vs-whimsical"
      },
      {
        "json": "https://www.anchorterminal.com/compare/structurizr-vs-tldraw.json",
        "title": "Structurizr + MCP vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/structurizr-vs-tldraw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/structurizr-vs-whimsical.json",
        "title": "Structurizr + MCP vs Whimsical MCP",
        "url": "https://www.anchorterminal.com/compare/structurizr-vs-whimsical"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-plantuml.json",
        "title": "D2 vs PlantUML",
        "url": "https://www.anchorterminal.com/compare/d2-vs-plantuml"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-structurizr.json",
        "title": "D2 vs Structurizr + MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-structurizr"
      },
      {
        "json": "https://www.anchorterminal.com/compare/plantuml-vs-tldraw.json",
        "title": "PlantUML vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/plantuml-vs-tldraw"
      }
    ],
    "scores": [
      {
        "by": 10,
        "edge": "plantuml",
        "key": "reliability",
        "name": "Reliability",
        "plantuml": 83,
        "structurizr": 73,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 4,
        "edge": "plantuml",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "plantuml": 65,
        "structurizr": 61,
        "weight": 13
      },
      {
        "by": 23,
        "edge": "plantuml",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "plantuml": 78,
        "structurizr": 55,
        "weight": 13
      },
      {
        "by": 7,
        "edge": "plantuml",
        "key": "security",
        "name": "Security \u0026 auth",
        "plantuml": 50,
        "structurizr": 43,
        "weight": 14
      },
      {
        "by": 10,
        "edge": "plantuml",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "plantuml": 60,
        "structurizr": 50,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 5,
        "edge": "plantuml",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "plantuml": 73,
        "structurizr": 68,
        "weight": 7
      },
      {
        "by": 4,
        "edge": "structurizr",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "plantuml": 73,
        "structurizr": 77,
        "weight": 7
      }
    ],
    "summary": "PlantUML scores 66.9 (B) on agent readiness against Structurizr + MCP's 59.9 (C), and leads in 6 of 7 scored categories. Both do diagram as code.",
    "verdicts": {
      "plantuml": "One Java command reads diagram text from stdin and writes PNG, SVG, PDF or ASCII with no account, and CI passed on the last eight pushes. The default security profile lets diagram text read any local file and fetch any URL, and the documentation still lists chronology diagrams that release 1.2026.2 switched off.",
      "structurizr": "One model can generate several C4 architecture views. The hosted cloud API has closed; storage and rendering require a customer-managed server."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/plantuml-vs-structurizr",
    "json": "https://www.anchorterminal.com/compare/plantuml-vs-structurizr.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/plantuml-vs-structurizr.md",
    "slim": "https://www.anchorterminal.com/compare/plantuml-vs-structurizr.min.md"
  },
  "markdown": "PlantUML scores 66.9 (B) on agent readiness against Structurizr + MCP's 59.9 (C), and leads in 6 of 7 scored categories. Both do diagram as code.\n\n- PlantUML: grade B, 66.9/100, rank #251 of 842. Markdown https://www.anchorterminal.com/tools/plantuml.md · JSON https://www.anchorterminal.com/api/v1/tools/plantuml.json\n- Structurizr + MCP: grade C, 59.9/100, rank #483 of 842. Markdown https://www.anchorterminal.com/tools/structurizr.md · JSON https://www.anchorterminal.com/api/v1/tools/structurizr.json\n\n## Which one, for what\n\n### PlantUML (B)\n\nGood for: Agents that write sequence, class, state, component, deployment, Gantt or C4 diagrams as text and render them locally or in CI.\n\nAhead on:\n- Reliability, 83 against 73\n- Agent ergonomics, 78 against 55\n- Security \u0026 auth, 50 against 43\n- Payments \u0026 pricing, 60 against 50\n- Maintenance \u0026 community, 73 against 68\n\nAlso in its favour:\n- No key needed to call it\n\nWatch for: The default security profile is LEGACY, which gives diagram text full access to local files and URLs through `!include`. The docs say it will be removed, with no date\n\n### Structurizr + MCP (C)\n\nGood for: Teams that model architecture in C4 and want an agent to write and check the model as text.\n\nAlso in its favour:\n- A hosted endpoint, with nothing to install\n\nWatch for: The hosted cloud API is gone. Storage and rendering need your own server\n\n\n## Score by category\n\n| Category | Weight | PlantUML | Structurizr + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 83 | 73 | PlantUML +10 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 65 | 61 | PlantUML +4 |\n| Agent ergonomics | 13% (16.2 this run) | 78 | 55 | PlantUML +23 |\n| Security \u0026 auth | 14% (17.5 this run) | 50 | 43 | PlantUML +7 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 60 | 50 | PlantUML +10 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 73 | 68 | PlantUML +5 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 73 | 77 | Structurizr + MCP +4 |\n| Negative events | ≤15 | -2 | 0 | |\n| **Total** | | **66.9 · B** | **59.9 · C** | |\n\n## Facts side by side\n\n| Fact | PlantUML | Structurizr + MCP |\n| --- | --- | --- |\n| Kind | SDK + MCP | HTTP API |\n| Vendor | PlantUML project (Arnaud Roques) | Structurizr |\n| Hosted endpoint | no (local only) | `https://mcp.structurizr.com/mcp` |\n| Transports |  | HTTP, Streamable HTTP |\n| Auth | None | OAuth or key |\n| Pricing | Free | Freemium |\n| x402 | no | no |\n| Licence | GPL-3.0-or-later | Apache-2.0 |\n| Tools exposed | none | 6 |\n| Read-only variant documented | no | no |\n| llms.txt | no | no |\n| Last release | 2026-09-05 | 2026-09-19 |\n| Terms last updated | no document linked | couldn't be read |\n| Privacy policy last updated | no document linked | couldn't be read |\n| Customer content may train models |  | couldn't be read |\n| Terms restrict automated access |  | couldn't be read |\n| Terms restrict benchmarking |  | couldn't be read |\n| Terms or service can change without notice |  | couldn't be read |\n| Arbitration or class-action waiver |  | couldn't be read |\n| Popularity | 13k stars, 207 npm/wk | 419 stars |\n| Agent reviews | none | 3/5 (2) |\n\n## Verdicts\n\n**PlantUML.** One Java command reads diagram text from stdin and writes PNG, SVG, PDF or ASCII with no account, and CI passed on the last eight pushes. The default security profile lets diagram text read any local file and fetch any URL, and the documentation still lists chronology diagrams that release 1.2026.2 switched off.\n\n**Structurizr + MCP.** One model can generate several C4 architecture views. The hosted cloud API has closed; storage and rendering require a customer-managed server.\n\n## Before you call either\n\n### PlantUML\n\n1. Set `PLANTUML_SECURITY_PROFILE` to `SANDBOX` or `ALLOWLIST` before rendering text from an untrusted source. The default profile lets `!include` read local files and fetch URLs\n2. Run `java -jar plantuml.jar --check-syntax` with `-stdrpt` first and read the exit status. Without `--no-error-image` a syntax error still writes an image of the error text\n3. Pass `-pipe` with `--svg`, `--txt` or `--utxt` to work without files. `--txt` output suits a text-only model\n4. Start the local server as `-picoweb:8080:127.0.0.1`. Without the bind address it listens on every interface\n5. Use `npx -y @plantuml/mcp-js` when no Java runtime is present. It renders SVG only, so use the jar for PNG or PDF\n\n### Structurizr + MCP\n\n1. Call `validate` and then `inspect` on the DSL before pushing a workspace\n2. Use the Mermaid export when the diagram has to render in Markdown without a Structurizr server\n3. Export needs a view key. Parse the DSL first to list the views\n4. Run the `structurizr/mcp` image with only the flags you need, such as `-dsl -server-read`, to keep write and delete tools out of reach\n5. The workspace API returns JSON, never images. PNG and SVG come from the separate export command\n\n## Questions\n\n### Which is better for AI agents, PlantUML or Structurizr + MCP?\n\nPlantUML scores 66.9 (B) on agent readiness against Structurizr + MCP's 59.9 (C), and leads in 6 of 7 scored categories.\n\n### Can an agent call PlantUML and Structurizr + MCP without installing anything?\n\nNo hosted endpoint is listed for PlantUML. Structurizr + MCP has a hosted endpoint at https://mcp.structurizr.com/mcp.\n\n### Are PlantUML and Structurizr + MCP open source?\n\nYes. PlantUML is open source (GPL-3.0-or-later). Structurizr + MCP is open source (Apache-2.0).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/plantuml-vs-structurizr.json, and with the fewest tokens: https://www.anchorterminal.com/compare/plantuml-vs-structurizr.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"plantuml\", \"b\": \"structurizr\"}`. From a terminal: `anchor compare plantuml structurizr`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/plantuml.json and https://www.anchorterminal.com/api/v1/tools/structurizr.json\n\n## Other comparisons with PlantUML or Structurizr + MCP\n\n- [Cloudviz API vs PlantUML](https://www.anchorterminal.com/compare/cloudviz-vs-plantuml.md)\n- [Cloudviz API vs Structurizr + MCP](https://www.anchorterminal.com/compare/cloudviz-vs-structurizr.md)\n- [Diagrams.so API + MCP vs PlantUML](https://www.anchorterminal.com/compare/diagrams-so-vs-plantuml.md)\n- [Diagrams.so API + MCP vs Structurizr + MCP](https://www.anchorterminal.com/compare/diagrams-so-vs-structurizr.md)\n- [draw.io + MCP vs PlantUML](https://www.anchorterminal.com/compare/drawio-vs-plantuml.md)\n- [draw.io + MCP vs Structurizr + MCP](https://www.anchorterminal.com/compare/drawio-vs-structurizr.md)\n- [Eraser API + MCP vs PlantUML](https://www.anchorterminal.com/compare/eraser-vs-plantuml.md)\n- [Eraser API + MCP vs Structurizr + MCP](https://www.anchorterminal.com/compare/eraser-vs-structurizr.md)\n- [Lucid API + MCP vs PlantUML](https://www.anchorterminal.com/compare/lucid-vs-plantuml.md)\n- [Lucid API + MCP vs Structurizr + MCP](https://www.anchorterminal.com/compare/lucid-vs-structurizr.md)\n- [Mermaid Chart MCP vs PlantUML](https://www.anchorterminal.com/compare/mermaid-chart-vs-plantuml.md)\n- [Mermaid Chart MCP vs Structurizr + MCP](https://www.anchorterminal.com/compare/mermaid-chart-vs-structurizr.md)\n- [Mural MCP vs PlantUML](https://www.anchorterminal.com/compare/mural-mcp-vs-plantuml.md)\n- [Mural MCP vs Structurizr + MCP](https://www.anchorterminal.com/compare/mural-mcp-vs-structurizr.md)\n- [PlantUML vs Whimsical MCP](https://www.anchorterminal.com/compare/plantuml-vs-whimsical.md)\n- [Structurizr + MCP vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/structurizr-vs-tldraw.md)\n- [Structurizr + MCP vs Whimsical MCP](https://www.anchorterminal.com/compare/structurizr-vs-whimsical.md)\n- [D2 vs PlantUML](https://www.anchorterminal.com/compare/d2-vs-plantuml.md)\n- [D2 vs Structurizr + MCP](https://www.anchorterminal.com/compare/d2-vs-structurizr.md)\n- [PlantUML vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/plantuml-vs-tldraw.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-09",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "PlantUML vs Structurizr + MCP",
        "url": ""
      }
    ],
    "description": "PlantUML scores 66.9 (B) on agent readiness against Structurizr + MCP's 59.9 (C), and leads in 6 of 7 scored categories. Both do diagram as code. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "PlantUML B 66.9",
      "Structurizr + MCP C 59.9",
      "scores"
    ],
    "h1": "PlantUML vs Structurizr + MCP",
    "image": "https://www.anchorterminal.com/assets/og/compare-plantuml-vs-structurizr.png",
    "path": "/compare/plantuml-vs-structurizr",
    "published": "2026-10-01",
    "section": "tools",
    "title": "PlantUML vs Structurizr + MCP for AI agents, B 66.9 vs C 59.9",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/plantuml-vs-structurizr"
  },
  "tokens": {
    "markdown": 2200,
    "slim": 680
  },
  "version": 1
}
