{
  "data": {
    "a": {
      "slug": "d2",
      "name": "D2",
      "vendor": "D2 project (The Hack Foundation)",
      "vendorUrl": "https://d2lang.com",
      "kind": "sdk",
      "category": "diagramming",
      "summary": "D2 is an open-source diagram scripting language that turns text into SVG, PNG, PDF, PPTX, GIF or ASCII diagrams. Agents run it as a local CLI, a Go library or the `@d2lang/d2` WebAssembly package.",
      "url": "https://www.anchorterminal.com/tools/d2",
      "markdownUrl": "https://www.anchorterminal.com/tools/d2.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/d2.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/d2.json",
      "repo": "https://github.com/d2lang/d2",
      "license": "MPL-2.0",
      "transports": [],
      "packages": [
        {
          "registry": "npm",
          "name": "@d2lang/d2"
        },
        {
          "registry": "go",
          "name": "github.com/d2lang/d2"
        },
        {
          "registry": "oci",
          "name": "d2lang/d2"
        }
      ],
      "auth": "none",
      "authNotes": "No account, key or login. The CLI, the Go library and the WebAssembly package run on the owner's machine with the owner's file and network rights. `d2 --watch` serves a preview on localhost.",
      "pricing": "free",
      "pricingNotes": "Free under MPL-2.0 with nothing to buy. The TALA layout engine, once a paid plugin with a licence key, has been bundled and open source since 0.9.0. The project takes donations through a public Hack Club fund (https://d2lang.com/sponsor/).",
      "priceSummary": "Free · OSS",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs or the source. The maintainer's 5 September 2026 post rules out any server-side service (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 25581,
        "npmWeekly": 21627,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://d2lang.com/tour/intro/",
      "capabilities": [
        "diagram.as-code",
        "diagram.create",
        "diagram.export",
        "diagram.edit",
        "diagram.architecture"
      ],
      "tags": [
        "open-source",
        "local",
        "cli",
        "go",
        "wasm",
        "diagram-as-code",
        "no-auth",
        "free",
        "non-profit",
        "docker"
      ],
      "lastRelease": "2026-09-07",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 65.3,
        "grade": "B",
        "agentReady": false,
        "rank": 295,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 2,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 78,
          "maintenance": 74,
          "payments": 60,
          "reliability": 68,
          "schema": 65,
          "security": 48,
          "transparency": 69
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "A single local command turns text into a diagram in six formats with no account, key or network call, and CI passes on the default branch. The language is at 0.9.0 with no stable release, its company sponsor has shut down, and one maintainer with limited time wrote every commit since July.",
        "bestFor": "Agents that need to produce or edit architecture, sequence, grid, SQL table or class diagrams as reviewable text and render them locally.",
        "strengths": [
          "One command reads D2 from stdin and writes SVG, PNG, PDF, PPTX, GIF or ASCII to stdout, with no account or key",
          "MPL-2.0 throughout, and the TALA layout engine has been open source and bundled since 0.9.0 on 7 September 2026",
          "`d2 validate` and `d2 fmt --check` let an agent test a diagram before rendering it",
          "The `d2oracle` Go package creates, sets, moves, renames and deletes shapes without mutating the input graph",
          "Release archives carry SHA-256 sums, signed provenance and SBOM attestations since 0.8.2"
        ],
        "weaknesses": [
          "No 1.0 release. The maintainer lists a stable 1.0 with a formal grammar as a goal, and 0.8.2 changed Dagre and ELK layout output",
          "Terrastruct, the company that built D2, is shutting down. The project is now donation-funded under The Hack Foundation",
          "All 317 commits since 8 July 2026 are by one maintainer, who says his time on D2 is limited",
          "A security hardening pass merged on 11 and 12 September 2026 is not in a release yet, and the repository has no security policy",
          "No llms.txt, no machine-readable grammar and no MCP server. The maintainer rules out an MCP server and a hosted API"
        ],
        "agentNotes": [
          "Check the exit status of `d2`, never the output file. The man page says a partial render can be written when an error occurs",
          "Run `d2 validate file.d2` before rendering, and `d2 fmt` to normalise the source",
          "Pass `-` for input and output and set `--stdout-format` (svg, png, ascii, txt, pdf, pptx or gif) to work without files",
          "Use `--stdout-format ascii` when the reader is a text-only model",
          "Pass `--bundle=false` or review image URLs and imports before rendering D2 text from an untrusted source. Release 0.9.0 fetches remote images when bundling"
        ],
        "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": 65.3
          }
        ],
        "editorialScores": {
          "ergonomics": 78,
          "maintenance": 74,
          "payments": 60,
          "reliability": 68,
          "schema": 65,
          "security": 48,
          "transparency": 74
        },
        "provenanceScore": 63
      },
      "connect": {
        "install": "curl -fsSL https://d2lang.com/install.sh | sh -s --   # or: brew install d2, go install github.com/d2lang/d2@latest, npm install @d2lang/d2"
      },
      "letme": {
        "capability": "https://letme.dev/diagram.as-code",
        "tool": "https://letme.dev/d2"
      },
      "area": "design-diagrams",
      "provenance": {
        "legalEntity": "The Hack Foundation (Hack Club), fiscal sponsor of the D2 project",
        "domain": "d2lang.com",
        "domainRegistered": "2022-10-24",
        "endpointOnVendorDomain": null,
        "terms": "",
        "privacy": "",
        "statusPage": "",
        "changelog": "https://d2lang.com/releases/intro/",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The sponsor page says D2 is fiscally sponsored by The Hack Foundation, the 501(c)(3) nonprofit behind Hack Club, after the lead maintainer donated the project in August 2026 (https://d2lang.com/sponsor/)",
          "LICENSE.txt still reads Copyright 2022 Terrastruct Inc. The 5 September 2026 post says that company is shutting down, and terrastruct.com now redirects to d2lang.com",
          "No terms or privacy document governs the software. The MPL-2.0 licence stands in",
          "https://d2lang.com/.well-known/security.txt answered 404 on 8 October 2026, and the repository has no SECURITY.md",
          "The repository moved from github.com/terrastruct/d2, which redirects, to github.com/d2lang/d2"
        ],
        "score": 63
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/d2.json"
    },
    "answer": "D2 scores 65.3 (B) on agent readiness against Lucid API + MCP's 60.6 (C), and leads in 5 of 7 scored categories. Lucid API + MCP leads on schema \u0026 documentation and security \u0026 auth.",
    "b": {
      "slug": "lucid",
      "name": "Lucid API + MCP",
      "vendor": "Lucid Software",
      "vendorUrl": "https://lucid.co",
      "kind": "http-api",
      "category": "diagramming",
      "summary": "REST API and hosted MCP server for creating, reading and managing Lucidchart and Lucidspark diagrams.",
      "url": "https://www.anchorterminal.com/tools/lucid",
      "markdownUrl": "https://www.anchorterminal.com/tools/lucid.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/lucid.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/lucid.json",
      "license": "proprietary",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://api.lucid.co",
      "packages": [],
      "auth": "mixed",
      "authNotes": "API keys (Bearer, with grants such as DocumentEdit) from the developer portal once developer tools are enabled in user settings or an admin assigns the developer role. OAuth 2.0 with scopes such as lucidchart.document.content, which sharing and embed endpoints require. Every call needs a `Lucid-Api-Version` header. The MCP server uses OAuth with dynamic client registration, and account admins can switch it on for the whole account.",
      "pricing": "freemium",
      "pricingNotes": "Free plan with limited editable documents. Individual $9 a month and Team $10 per user a month with a 3-user minimum, billed yearly. Enterprise custom. Lucid doesn't publish API or MCP limits by plan (https://lucid.app/pricing/lucidchart).",
      "priceSummary": "$9 / seat-mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No payment support in the REST or MCP docs.",
        "endpoints": []
      },
      "toolCount": 9,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://lucid.readme.io/reference/overview",
      "llmsTxt": "https://lucid.readme.io/llms.txt",
      "registryName": "app.lucid.mcp/lucid",
      "capabilities": [
        "diagram.create",
        "diagram.as-code",
        "diagram.edit",
        "diagram.export",
        "design.files",
        "design.canvas",
        "design.comments"
      ],
      "tags": [
        "hosted",
        "freemium",
        "free-tier",
        "closed-source",
        "mcp",
        "llms-txt",
        "diagram-as-code",
        "async-jobs",
        "enterprise"
      ],
      "lastRelease": "2026-06-15",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 60.6,
        "grade": "C",
        "agentReady": false,
        "rank": 455,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 5,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 62,
          "maintenance": 33,
          "payments": 25,
          "reliability": 67,
          "schema": 73,
          "security": 80,
          "transparency": 60
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "OAuth 2.0 scopes with `:readonly` variants, and audit log endpoints in the REST API. No public changelog for the API or the MCP server.",
        "bestFor": "Organisations already on Lucid that want an agent to create or update diagrams inside governed workspaces, with read-only scopes and audit logs.",
        "strengths": [
          "OAuth 2.0 scopes with `:readonly` variants, and audit log endpoints in the REST API",
          "Mermaid in through REST, PlantUML sequence diagrams through MCP, both editable afterwards",
          "Per-operation rate limits in each reference page's OpenAPI fragment, such as 60 a minute on Create Mermaid Diagram",
          "Nine compact MCP tools, listed in the official registry as app.lucid.mcp/lucid at 1.0.0",
          "SOC 2 Type II, ISO 27001, FedRAMP Moderate and a HackerOne bug bounty"
        ],
        "weaknesses": [
          "No public changelog for the API or the MCP server",
          "The status page doesn't monitor the API or the MCP server",
          "No single OpenAPI file and no official REST SDK",
          "Developer tools and MCP depend on user settings or admin approval",
          "No published price for API or MCP use beyond seat plans"
        ],
        "agentNotes": [
          "Always send `Lucid-Api-Version: 1`, or prefix the path with /v1",
          "For flowcharts and sequence diagrams, post Mermaid markup (up to 100,000 characters) instead of building Standard Import JSON",
          "Request `:readonly` scopes when the agent only reads documents",
          "On 429, wait 60 seconds or back off. Create Mermaid Diagram allows 60 calls a minute",
          "Sharing and embed endpoints need an OAuth token. An API key won't work there"
        ],
        "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": 60.6
          }
        ],
        "editorialScores": {
          "ergonomics": 62,
          "maintenance": 33,
          "payments": 25,
          "reliability": 67,
          "schema": 73,
          "security": 80,
          "transparency": 61
        },
        "provenanceScore": 59
      },
      "connect": {
        "http": "curl https://api.lucid.co/users/me/profile -H \"Authorization: Bearer $LUCID_API_KEY\" -H \"Lucid-Api-Version: 1\"",
        "claudeCode": "claude mcp add --transport http lucid https://mcp.lucid.app/mcp",
        "config": {
          "mcpServers": {
            "lucid": {
              "url": "https://mcp.lucid.app/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/diagram.create",
        "tool": "https://letme.dev/lucid"
      },
      "alsoIn": [
        "design"
      ],
      "area": "design-diagrams",
      "unitPrices": [
        {
          "item": "Individual plan",
          "unit": "seat-month",
          "usd": 9,
          "note": "billed yearly"
        },
        {
          "item": "Team plan",
          "unit": "seat-month",
          "usd": 10,
          "note": "billed yearly, 3-user minimum"
        }
      ],
      "provenance": {
        "legalEntity": "Lucid Software Inc.",
        "domain": "lucid.co",
        "domainRegistered": "",
        "domainNote": "The .co registry has no RDAP service we could query, so the registration date is blank. The MCP server runs on lucid.app, Lucid's product domain.",
        "endpointOnVendorDomain": true,
        "terms": "https://lucid.co/tos",
        "privacy": "https://lucid.co/privacy",
        "statusPage": "https://status.lucid.co",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-10-01",
        "notes": [
          "The status page has no API or MCP component",
          "security.txt not rechecked on 2026-10-01; none per the 30 September check"
        ],
        "score": 59
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/lucid.json",
      "live": {
        "slug": "lucid",
        "probe": {
          "target": "https://api.lucid.co",
          "method": "get",
          "lastAt": "2026-10-09T10:14:19.662487557Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 309,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 294,
          "p95ms24h": 519,
          "samples24h": 260,
          "samples30d": 2295,
          "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": 109,
              "ok": 109
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.lucid.co",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-09T10:11:03.88883212Z"
        },
        "versions": [
          {
            "registry": "mcp-registry",
            "name": "app.lucid.mcp/lucid",
            "version": "1.0.0",
            "seenAt": "2026-10-09T02:57:46.004536428Z"
          }
        ],
        "securityTxt": {
          "url": "https://lucid.co/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:42.979533854Z"
        },
        "llmsTxt": {
          "url": "https://lucid.readme.io/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-08T14:00:35.246797331Z"
        },
        "domain": {
          "domain": "lucid.co",
          "checkedAt": "2026-10-04T13:08:39.466296912Z"
        },
        "pages": [
          {
            "url": "https://lucid.app/pricing/lucidchart",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-08T18:21:43.882361402Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "ba6244b9a39a"
          },
          {
            "url": "https://lucid.co/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:21:45.635652242Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "42182e432bc9"
          },
          {
            "url": "https://lucid.co/tos",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:21:47.904961633Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "522f8449b0a1"
          }
        ],
        "updatedAt": "2026-10-09T10:14:19.662487557Z"
      }
    },
    "facts": [
      {
        "a": "SDK + MCP",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "D2 project (The Hack Foundation)",
        "b": "Lucid Software",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "https://api.lucid.co",
        "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": "MPL-2.0",
        "b": "proprietary",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "9",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "not listed",
        "b": "app.lucid.mcp/lucid",
        "name": "MCP registry"
      },
      {
        "a": "2026-09-07",
        "b": "2026-06-15",
        "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": "26k stars, 22k npm/wk",
        "b": "none",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "D2 scores 65.3 (B) on agent readiness against Lucid API + MCP's 60.6 (C), and leads in 5 of 7 scored categories. Lucid API + MCP leads on schema \u0026 documentation and security \u0026 auth.",
        "question": "Which is better for AI agents, D2 or Lucid API + MCP?"
      },
      {
        "answer": "No hosted endpoint is listed for D2. Lucid API + MCP has a hosted endpoint at https://api.lucid.co.",
        "question": "Can an agent call D2 and Lucid API + MCP without installing anything?"
      },
      {
        "answer": "D2 is open source (MPL-2.0). No open-source release is listed for Lucid API + MCP.",
        "question": "Are D2 and Lucid API + MCP open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Agent ergonomics, 78 against 62",
          "Payments \u0026 pricing, 60 against 25",
          "Maintenance \u0026 community, 74 against 33",
          "Transparency \u0026 trust, 69 against 60"
        ],
        "also": [
          "No key needed to call it",
          "Open source"
        ],
        "goodFor": "Agents that need to produce or edit architecture, sequence, grid, SQL table or class diagrams as reviewable text and render them locally.",
        "slug": "d2",
        "watchFor": "No 1.0 release. The maintainer lists a stable 1.0 with a formal grammar as a goal, and 0.8.2 changed Dagre and ELK layout output"
      },
      {
        "aheadOn": [
          "Schema \u0026 documentation, 73 against 65",
          "Security \u0026 auth, 80 against 48"
        ],
        "also": [
          "A hosted endpoint, with nothing to install"
        ],
        "goodFor": "Organisations already on Lucid that want an agent to create or update diagrams inside governed workspaces, with read-only scopes and audit logs.",
        "slug": "lucid",
        "watchFor": "No public changelog for the API or the MCP server"
      }
    ],
    "job": {
      "capability": "diagram.as-code",
      "name": "Diagram as code"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/cloudviz-vs-d2.json",
        "title": "Cloudviz API vs D2",
        "url": "https://www.anchorterminal.com/compare/cloudviz-vs-d2"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudviz-vs-lucid.json",
        "title": "Cloudviz API vs Lucid API + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudviz-vs-lucid"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-diagrams-so.json",
        "title": "D2 vs Diagrams.so API + MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-diagrams-so"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-mural-mcp.json",
        "title": "D2 vs Mural MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-mural-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-whimsical.json",
        "title": "D2 vs Whimsical MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-whimsical"
      },
      {
        "json": "https://www.anchorterminal.com/compare/diagrams-so-vs-lucid.json",
        "title": "Diagrams.so API + MCP vs Lucid API + MCP",
        "url": "https://www.anchorterminal.com/compare/diagrams-so-vs-lucid"
      },
      {
        "json": "https://www.anchorterminal.com/compare/drawio-vs-lucid.json",
        "title": "draw.io + MCP vs Lucid API + MCP",
        "url": "https://www.anchorterminal.com/compare/drawio-vs-lucid"
      },
      {
        "json": "https://www.anchorterminal.com/compare/eraser-vs-lucid.json",
        "title": "Eraser API + MCP vs Lucid API + MCP",
        "url": "https://www.anchorterminal.com/compare/eraser-vs-lucid"
      },
      {
        "json": "https://www.anchorterminal.com/compare/lucid-vs-mermaid-chart.json",
        "title": "Lucid API + MCP vs Mermaid Chart MCP",
        "url": "https://www.anchorterminal.com/compare/lucid-vs-mermaid-chart"
      },
      {
        "json": "https://www.anchorterminal.com/compare/lucid-vs-mural-mcp.json",
        "title": "Lucid API + MCP vs Mural MCP",
        "url": "https://www.anchorterminal.com/compare/lucid-vs-mural-mcp"
      },
      {
        "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/lucid-vs-tldraw.json",
        "title": "Lucid API + MCP vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/lucid-vs-tldraw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/lucid-vs-whimsical.json",
        "title": "Lucid API + MCP vs Whimsical MCP",
        "url": "https://www.anchorterminal.com/compare/lucid-vs-whimsical"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-drawio.json",
        "title": "D2 vs draw.io + MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-drawio"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-eraser.json",
        "title": "D2 vs Eraser API + MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-eraser"
      },
      {
        "json": "https://www.anchorterminal.com/compare/d2-vs-mermaid-chart.json",
        "title": "D2 vs Mermaid Chart MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-mermaid-chart"
      },
      {
        "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/d2-vs-tldraw.json",
        "title": "D2 vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-tldraw"
      }
    ],
    "scores": [
      {
        "by": 1,
        "d2": 68,
        "edge": "d2",
        "key": "reliability",
        "lucid": 67,
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 8,
        "d2": 65,
        "edge": "lucid",
        "key": "schema",
        "lucid": 73,
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 16,
        "d2": 78,
        "edge": "d2",
        "key": "ergonomics",
        "lucid": 62,
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 32,
        "d2": 48,
        "edge": "lucid",
        "key": "security",
        "lucid": 80,
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 35,
        "d2": 60,
        "edge": "d2",
        "key": "payments",
        "lucid": 25,
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 41,
        "d2": 74,
        "edge": "d2",
        "key": "maintenance",
        "lucid": 33,
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 9,
        "d2": 69,
        "edge": "d2",
        "key": "transparency",
        "lucid": 60,
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "D2 scores 65.3 (B) on agent readiness against Lucid API + MCP's 60.6 (C), and leads in 5 of 7 scored categories. Lucid API + MCP leads on schema \u0026 documentation and security \u0026 auth. Both do diagram as code.",
    "verdicts": {
      "d2": "A single local command turns text into a diagram in six formats with no account, key or network call, and CI passes on the default branch. The language is at 0.9.0 with no stable release, its company sponsor has shut down, and one maintainer with limited time wrote every commit since July.",
      "lucid": "OAuth 2.0 scopes with `:readonly` variants, and audit log endpoints in the REST API. No public changelog for the API or the MCP server."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/d2-vs-lucid",
    "json": "https://www.anchorterminal.com/compare/d2-vs-lucid.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/d2-vs-lucid.md",
    "slim": "https://www.anchorterminal.com/compare/d2-vs-lucid.min.md"
  },
  "markdown": "D2 scores 65.3 (B) on agent readiness against Lucid API + MCP's 60.6 (C), and leads in 5 of 7 scored categories. Lucid API + MCP leads on schema \u0026 documentation and security \u0026 auth. Both do diagram as code.\n\n- D2: grade B, 65.3/100, rank #295 of 842. Markdown https://www.anchorterminal.com/tools/d2.md · JSON https://www.anchorterminal.com/api/v1/tools/d2.json\n- Lucid API + MCP: grade C, 60.6/100, rank #455 of 842. Markdown https://www.anchorterminal.com/tools/lucid.md · JSON https://www.anchorterminal.com/api/v1/tools/lucid.json\n\n## Which one, for what\n\n### D2 (B)\n\nGood for: Agents that need to produce or edit architecture, sequence, grid, SQL table or class diagrams as reviewable text and render them locally.\n\nAhead on:\n- Agent ergonomics, 78 against 62\n- Payments \u0026 pricing, 60 against 25\n- Maintenance \u0026 community, 74 against 33\n- Transparency \u0026 trust, 69 against 60\n\nAlso in its favour:\n- No key needed to call it\n- Open source\n\nWatch for: No 1.0 release. The maintainer lists a stable 1.0 with a formal grammar as a goal, and 0.8.2 changed Dagre and ELK layout output\n\n### Lucid API + MCP (C)\n\nGood for: Organisations already on Lucid that want an agent to create or update diagrams inside governed workspaces, with read-only scopes and audit logs.\n\nAhead on:\n- Schema \u0026 documentation, 73 against 65\n- Security \u0026 auth, 80 against 48\n\nAlso in its favour:\n- A hosted endpoint, with nothing to install\n\nWatch for: No public changelog for the API or the MCP server\n\n\n## Score by category\n\n| Category | Weight | D2 | Lucid API + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 68 | 67 | D2 +1 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 65 | 73 | Lucid API + MCP +8 |\n| Agent ergonomics | 13% (16.2 this run) | 78 | 62 | D2 +16 |\n| Security \u0026 auth | 14% (17.5 this run) | 48 | 80 | Lucid API + MCP +32 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 60 | 25 | D2 +35 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 74 | 33 | D2 +41 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 69 | 60 | D2 +9 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **65.3 · B** | **60.6 · C** | |\n\n## Facts side by side\n\n| Fact | D2 | Lucid API + MCP |\n| --- | --- | --- |\n| Kind | SDK + MCP | HTTP API |\n| Vendor | D2 project (The Hack Foundation) | Lucid Software |\n| Hosted endpoint | no (local only) | `https://api.lucid.co` |\n| Transports |  | HTTP, Streamable HTTP |\n| Auth | None | OAuth or key |\n| Pricing | Free | Freemium |\n| x402 | no | no |\n| Licence | MPL-2.0 | proprietary |\n| Tools exposed | none | 9 |\n| Read-only variant documented | no | no |\n| llms.txt | no | yes |\n| MCP registry | not listed | `app.lucid.mcp/lucid` |\n| Last release | 2026-09-07 | 2026-06-15 |\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 | 26k stars, 22k npm/wk | none |\n| Agent reviews | none | 3/5 (2) |\n\n## Verdicts\n\n**D2.** A single local command turns text into a diagram in six formats with no account, key or network call, and CI passes on the default branch. The language is at 0.9.0 with no stable release, its company sponsor has shut down, and one maintainer with limited time wrote every commit since July.\n\n**Lucid API + MCP.** OAuth 2.0 scopes with `:readonly` variants, and audit log endpoints in the REST API. No public changelog for the API or the MCP server.\n\n## Before you call either\n\n### D2\n\n1. Check the exit status of `d2`, never the output file. The man page says a partial render can be written when an error occurs\n2. Run `d2 validate file.d2` before rendering, and `d2 fmt` to normalise the source\n3. Pass `-` for input and output and set `--stdout-format` (svg, png, ascii, txt, pdf, pptx or gif) to work without files\n4. Use `--stdout-format ascii` when the reader is a text-only model\n5. Pass `--bundle=false` or review image URLs and imports before rendering D2 text from an untrusted source. Release 0.9.0 fetches remote images when bundling\n\n### Lucid API + MCP\n\n1. Always send `Lucid-Api-Version: 1`, or prefix the path with /v1\n2. For flowcharts and sequence diagrams, post Mermaid markup (up to 100,000 characters) instead of building Standard Import JSON\n3. Request `:readonly` scopes when the agent only reads documents\n4. On 429, wait 60 seconds or back off. Create Mermaid Diagram allows 60 calls a minute\n5. Sharing and embed endpoints need an OAuth token. An API key won't work there\n\n## Questions\n\n### Which is better for AI agents, D2 or Lucid API + MCP?\n\nD2 scores 65.3 (B) on agent readiness against Lucid API + MCP's 60.6 (C), and leads in 5 of 7 scored categories. Lucid API + MCP leads on schema \u0026 documentation and security \u0026 auth.\n\n### Can an agent call D2 and Lucid API + MCP without installing anything?\n\nNo hosted endpoint is listed for D2. Lucid API + MCP has a hosted endpoint at https://api.lucid.co.\n\n### Are D2 and Lucid API + MCP open source?\n\nD2 is open source (MPL-2.0). No open-source release is listed for Lucid API + MCP.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/d2-vs-lucid.json, and with the fewest tokens: https://www.anchorterminal.com/compare/d2-vs-lucid.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"d2\", \"b\": \"lucid\"}`. From a terminal: `anchor compare d2 lucid`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/d2.json and https://www.anchorterminal.com/api/v1/tools/lucid.json\n\n## Other comparisons with D2 or Lucid API + MCP\n\n- [Cloudviz API vs D2](https://www.anchorterminal.com/compare/cloudviz-vs-d2.md)\n- [Cloudviz API vs Lucid API + MCP](https://www.anchorterminal.com/compare/cloudviz-vs-lucid.md)\n- [D2 vs Diagrams.so API + MCP](https://www.anchorterminal.com/compare/d2-vs-diagrams-so.md)\n- [D2 vs Mural MCP](https://www.anchorterminal.com/compare/d2-vs-mural-mcp.md)\n- [D2 vs Whimsical MCP](https://www.anchorterminal.com/compare/d2-vs-whimsical.md)\n- [Diagrams.so API + MCP vs Lucid API + MCP](https://www.anchorterminal.com/compare/diagrams-so-vs-lucid.md)\n- [draw.io + MCP vs Lucid API + MCP](https://www.anchorterminal.com/compare/drawio-vs-lucid.md)\n- [Eraser API + MCP vs Lucid API + MCP](https://www.anchorterminal.com/compare/eraser-vs-lucid.md)\n- [Lucid API + MCP vs Mermaid Chart MCP](https://www.anchorterminal.com/compare/lucid-vs-mermaid-chart.md)\n- [Lucid API + MCP vs Mural MCP](https://www.anchorterminal.com/compare/lucid-vs-mural-mcp.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- [Lucid API + MCP vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/lucid-vs-tldraw.md)\n- [Lucid API + MCP vs Whimsical MCP](https://www.anchorterminal.com/compare/lucid-vs-whimsical.md)\n- [D2 vs draw.io + MCP](https://www.anchorterminal.com/compare/d2-vs-drawio.md)\n- [D2 vs Eraser API + MCP](https://www.anchorterminal.com/compare/d2-vs-eraser.md)\n- [D2 vs Mermaid Chart MCP](https://www.anchorterminal.com/compare/d2-vs-mermaid-chart.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- [D2 vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/d2-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": "D2 vs Lucid API + MCP",
        "url": ""
      }
    ],
    "description": "D2 scores 65.3 (B) on agent readiness against Lucid API + MCP's 60.6 (C), and leads in 5 of 7 scored categories. Lucid API + MCP leads on schema \u0026 documentation and security \u0026 auth. Both do diagram as code. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "D2 B 65.3",
      "Lucid API + MCP C 60.6",
      "scores"
    ],
    "h1": "D2 vs Lucid API + MCP",
    "image": "https://www.anchorterminal.com/assets/og/compare-d2-vs-lucid.png",
    "path": "/compare/d2-vs-lucid",
    "published": "2026-10-01",
    "section": "tools",
    "title": "D2 vs Lucid API + MCP for AI agents, B 65.3 vs C 60.6",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/d2-vs-lucid"
  },
  "tokens": {
    "markdown": 2150,
    "slim": 730
  },
  "version": 1
}
