{
  "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 Eraser API + MCP's 38.6 (E), and leads in 6 of 7 scored categories. Eraser API + MCP leads on security \u0026 auth.",
    "b": {
      "slug": "eraser",
      "name": "Eraser API + MCP",
      "vendor": "Eraser",
      "vendorUrl": "https://www.eraser.io",
      "kind": "http-api",
      "category": "diagramming",
      "summary": "Docs and diagrams workspace for engineers.",
      "url": "https://www.anchorterminal.com/tools/eraser",
      "markdownUrl": "https://www.anchorterminal.com/tools/eraser.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/eraser.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/eraser.json",
      "transports": [
        "http",
        "streamable-http",
        "stdio"
      ],
      "remoteUrl": "https://app.eraser.io/api",
      "packages": [
        {
          "registry": "npm",
          "name": "@eraserlabs/eraser-mcp"
        }
      ],
      "auth": "mixed",
      "authNotes": "REST API takes a team API token as a Bearer header, and tokens are only issued to paid teams. The hosted MCP uses OAuth by default (billed to the signed-in user's AI credits) or the same token as a Bearer header (billed to team credits). The local npm server reads ERASER_API_KEY.",
      "pricing": "freemium",
      "pricingNotes": "Free plan $0 with 3 AI diagrams. Starter $15 a member a month billed yearly ($20 monthly) with 40 AI credits, Business $45 billed yearly ($60 monthly) with 250, Enterprise custom. The API needs a paid plan with usage-based pricing switched on. /render/prompt costs $80 per 100 calls, /render/elements $20 per 100 calls, extra AI credits $60 per 100. The MCP server is free within plan limits (https://www.eraser.io/pricing).",
      "priceSummary": "$20 / seat-mo",
      "where": "both",
      "x402": {
        "level": "no",
        "evidence": "No x402 support in docs or pricing (checked 2026-09-30).",
        "endpoints": []
      },
      "toolCount": 42,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 76,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://docs.eraser.io/reference/getting-started",
      "llmsTxt": "https://docs.eraser.io/llms.txt",
      "registryName": "io.eraser/eraser",
      "capabilities": [
        "diagram.create",
        "diagram.as-code",
        "diagram.edit",
        "diagram.export",
        "diagram.architecture"
      ],
      "tags": [
        "hosted",
        "freemium",
        "mcp",
        "llms-txt",
        "diagram-as-code",
        "closed-source",
        "enterprise",
        "typescript"
      ],
      "lastRelease": "2026-05-22",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 38.6,
        "grade": "E",
        "agentReady": false,
        "rank": 811,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 10,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 34,
          "maintenance": 33,
          "payments": 35,
          "reliability": 15,
          "schema": 52,
          "security": 57,
          "transparency": 50
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Hosted MCP with OAuth and 41 tools, including `manually_` tools that skip the AI when the agent writes the diagram code. No status page, rate limits, SLA or changelog.",
        "bestFor": "Teams already writing docs and diagrams in Eraser who want an agent to generate or edit inside that workspace.",
        "strengths": [
          "Hosted MCP with OAuth and 41 tools, including `manually_` tools that skip the AI when the agent writes the diagram code",
          "Diagram-as-code for architecture, flowchart, ERD, sequence and BPMN diagrams",
          "Per-call API prices published, $0.80 per AI render and $0.20 per code render",
          "SOC 2 Type 2 report, and an audit log API with ECS and Splunk formats on Enterprise"
        ],
        "weaknesses": [
          "No status page, rate limits, SLA or changelog",
          "No OpenAPI file, and the hosted tool definitions aren't public",
          "REST API needs a paid team plus usage-based billing, with one unscoped token per team",
          "41 tools load at once with no subset",
          "Newest dated change found is 22 May 2026"
        ],
        "agentNotes": [
          "Use `manually_create_diagram` with your own Eraser code when you know the structure. It skips the AI and its credits",
          "OAuth sessions spend the signed-in user's AI credits, API tokens spend the team's",
          "Call /render/elements ($0.20) when you already have diagram code; /render/prompt costs $0.80",
          "Set a spend limit before running in CI. At 100 per cent the API stops until the next calendar month"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "E",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 38.6
          }
        ],
        "editorialScores": {
          "ergonomics": 34,
          "maintenance": 33,
          "payments": 35,
          "reliability": 15,
          "schema": 52,
          "security": 57,
          "transparency": 31
        },
        "provenanceScore": 68
      },
      "connect": {
        "http": "curl -X POST https://app.eraser.io/api/render/prompt -H \"Authorization: Bearer $ERASER_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{\"text\":\"Draw a data model for a Twitter clone\"}'",
        "claudeCode": "claude mcp add --transport http eraser https://app.eraser.io/api/mcp",
        "config": {
          "mcpServers": {
            "eraser": {
              "args": [
                "-y",
                "@eraserlabs/eraser-mcp"
              ],
              "command": "npx",
              "env": {
                "ERASER_API_KEY": "${ERASER_API_KEY}"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/diagram.create",
        "tool": "https://letme.dev/eraser"
      },
      "area": "design-diagrams",
      "unitPrices": [
        {
          "item": "Starter plan",
          "unit": "seat-month",
          "usd": 20,
          "note": "billed monthly, $15 billed yearly. First plan with API access"
        },
        {
          "item": "Business plan",
          "unit": "seat-month",
          "usd": 60,
          "note": "billed monthly, $45 billed yearly"
        },
        {
          "item": "API /render/prompt",
          "unit": "call",
          "usd": 0.8,
          "note": "$80 per 100 calls, AI generation"
        },
        {
          "item": "API /render/elements",
          "unit": "call",
          "usd": 0.2,
          "note": "$20 per 100 calls, renders your own diagram code"
        },
        {
          "item": "Extra AI credits",
          "unit": "credit",
          "usd": 0.6,
          "note": "$60 per 100 credits beyond the plan"
        }
      ],
      "provenance": {
        "legalEntity": "Eraser Labs, Inc.",
        "domain": "eraser.io",
        "domainRegistered": "2014-10-03",
        "endpointOnVendorDomain": true,
        "terms": "https://www.eraser.io/terms",
        "privacy": "https://www.eraser.io/privacy",
        "statusPage": "",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-10-01",
        "notes": [
          "Eraser Labs, Inc., 548 Market St, PMB 47670, San Francisco, CA 94104 (privacy policy)",
          "SOC 2 Type 2 report available through the trust portal at eraser.trustshare.com",
          "status.eraser.io doesn't resolve and eraser.io/changelog returns 404",
          "security.txt not rechecked on 2026-10-01; none per the 30 September check"
        ],
        "score": 68
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/eraser.json",
      "live": {
        "slug": "eraser",
        "probe": {
          "target": "https://app.eraser.io/api",
          "method": "get",
          "lastAt": "2026-10-09T10:14:14.085202072Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 140,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 146,
          "p95ms24h": 282,
          "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
            }
          ]
        },
        "versions": [
          {
            "registry": "mcp-registry",
            "name": "io.eraser/eraser",
            "version": "0.2.0",
            "seenAt": "2026-10-09T02:57:46.004536428Z"
          },
          {
            "registry": "npm",
            "name": "@eraserlabs/eraser-mcp",
            "version": "0.8.0",
            "seenAt": "2026-10-08T16:10:57.390983956Z"
          }
        ],
        "npmWeekly": 89,
        "securityTxt": {
          "url": "https://eraser.io/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:32.627742553Z"
        },
        "llmsTxt": {
          "url": "https://docs.eraser.io/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-08T14:00:23.860428562Z"
        },
        "domain": {
          "domain": "eraser.io",
          "checkedAt": "2026-10-04T13:07:10.744092154Z"
        },
        "pages": [
          {
            "url": "https://www.eraser.io/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-08T18:27:38.687101529Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "308b8025c589"
          },
          {
            "url": "https://www.eraser.io/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:27:40.758565016Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "0a831aeafaf4"
          },
          {
            "url": "https://www.eraser.io/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:27:42.749010422Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "45be14fec815"
          }
        ],
        "updatedAt": "2026-10-09T10:14:14.085202072Z"
      }
    },
    "facts": [
      {
        "a": "SDK + MCP",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "D2 project (The Hack Foundation)",
        "b": "Eraser",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "https://app.eraser.io/api",
        "name": "Hosted endpoint"
      },
      {
        "a": "",
        "b": "HTTP, Streamable HTTP, stdio",
        "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": "none",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "42",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "not listed",
        "b": "io.eraser/eraser",
        "name": "MCP registry"
      },
      {
        "a": "2026-09-07",
        "b": "2026-05-22",
        "name": "Last release"
      },
      {
        "a": "no document linked",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "no document linked",
        "b": "no date given",
        "name": "Privacy policy last updated"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "26k stars, 22k npm/wk",
        "b": "76 npm/wk",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "D2 scores 65.3 (B) on agent readiness against Eraser API + MCP's 38.6 (E), and leads in 6 of 7 scored categories. Eraser API + MCP leads on security \u0026 auth.",
        "question": "Which is better for AI agents, D2 or Eraser API + MCP?"
      },
      {
        "answer": "No hosted endpoint is listed for D2. Eraser API + MCP has a hosted endpoint at https://app.eraser.io/api.",
        "question": "Can an agent call D2 and Eraser API + MCP without installing anything?"
      },
      {
        "answer": "D2 is open source (MPL-2.0). No open-source release is listed for Eraser API + MCP.",
        "question": "Are D2 and Eraser API + MCP open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 68 against 15",
          "Schema \u0026 documentation, 65 against 52",
          "Agent ergonomics, 78 against 34",
          "Payments \u0026 pricing, 60 against 35",
          "Maintenance \u0026 community, 74 against 33",
          "Transparency \u0026 trust, 69 against 50"
        ],
        "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": [
          "Security \u0026 auth, 57 against 48"
        ],
        "also": [
          "A hosted endpoint, with nothing to install",
          "Runs on your own machine"
        ],
        "goodFor": "Teams already writing docs and diagrams in Eraser who want an agent to generate or edit inside that workspace.",
        "slug": "eraser",
        "watchFor": "No status page, rate limits, SLA or changelog"
      }
    ],
    "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-eraser.json",
        "title": "Cloudviz API vs Eraser API + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudviz-vs-eraser"
      },
      {
        "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-eraser.json",
        "title": "Diagrams.so API + MCP vs Eraser API + MCP",
        "url": "https://www.anchorterminal.com/compare/diagrams-so-vs-eraser"
      },
      {
        "json": "https://www.anchorterminal.com/compare/drawio-vs-eraser.json",
        "title": "draw.io + MCP vs Eraser API + MCP",
        "url": "https://www.anchorterminal.com/compare/drawio-vs-eraser"
      },
      {
        "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/eraser-vs-mermaid-chart.json",
        "title": "Eraser API + MCP vs Mermaid Chart MCP",
        "url": "https://www.anchorterminal.com/compare/eraser-vs-mermaid-chart"
      },
      {
        "json": "https://www.anchorterminal.com/compare/eraser-vs-mural-mcp.json",
        "title": "Eraser API + MCP vs Mural MCP",
        "url": "https://www.anchorterminal.com/compare/eraser-vs-mural-mcp"
      },
      {
        "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/eraser-vs-tldraw.json",
        "title": "Eraser API + MCP vs tldraw SDK + MCP",
        "url": "https://www.anchorterminal.com/compare/eraser-vs-tldraw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/eraser-vs-whimsical.json",
        "title": "Eraser API + MCP vs Whimsical MCP",
        "url": "https://www.anchorterminal.com/compare/eraser-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-lucid.json",
        "title": "D2 vs Lucid API + MCP",
        "url": "https://www.anchorterminal.com/compare/d2-vs-lucid"
      },
      {
        "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": 53,
        "d2": 68,
        "edge": "d2",
        "eraser": 15,
        "key": "reliability",
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 13,
        "d2": 65,
        "edge": "d2",
        "eraser": 52,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 44,
        "d2": 78,
        "edge": "d2",
        "eraser": 34,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 9,
        "d2": 48,
        "edge": "eraser",
        "eraser": 57,
        "key": "security",
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 25,
        "d2": 60,
        "edge": "d2",
        "eraser": 35,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 41,
        "d2": 74,
        "edge": "d2",
        "eraser": 33,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 19,
        "d2": 69,
        "edge": "d2",
        "eraser": 50,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "D2 scores 65.3 (B) on agent readiness against Eraser API + MCP's 38.6 (E), and leads in 6 of 7 scored categories. Eraser API + MCP leads on 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.",
      "eraser": "Hosted MCP with OAuth and 41 tools, including `manually_` tools that skip the AI when the agent writes the diagram code. No status page, rate limits, SLA or changelog."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/d2-vs-eraser",
    "json": "https://www.anchorterminal.com/compare/d2-vs-eraser.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/d2-vs-eraser.md",
    "slim": "https://www.anchorterminal.com/compare/d2-vs-eraser.min.md"
  },
  "markdown": "D2 scores 65.3 (B) on agent readiness against Eraser API + MCP's 38.6 (E), and leads in 6 of 7 scored categories. Eraser API + MCP leads on 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- Eraser API + MCP: grade E, 38.6/100, rank #811 of 842. Markdown https://www.anchorterminal.com/tools/eraser.md · JSON https://www.anchorterminal.com/api/v1/tools/eraser.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- Reliability, 68 against 15\n- Schema \u0026 documentation, 65 against 52\n- Agent ergonomics, 78 against 34\n- Payments \u0026 pricing, 60 against 35\n- Maintenance \u0026 community, 74 against 33\n- Transparency \u0026 trust, 69 against 50\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### Eraser API + MCP (E)\n\nGood for: Teams already writing docs and diagrams in Eraser who want an agent to generate or edit inside that workspace.\n\nAhead on:\n- Security \u0026 auth, 57 against 48\n\nAlso in its favour:\n- A hosted endpoint, with nothing to install\n- Runs on your own machine\n\nWatch for: No status page, rate limits, SLA or changelog\n\n\n## Score by category\n\n| Category | Weight | D2 | Eraser API + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 68 | 15 | D2 +53 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 65 | 52 | D2 +13 |\n| Agent ergonomics | 13% (16.2 this run) | 78 | 34 | D2 +44 |\n| Security \u0026 auth | 14% (17.5 this run) | 48 | 57 | Eraser API + MCP +9 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 60 | 35 | D2 +25 |\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 | 50 | D2 +19 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **65.3 · B** | **38.6 · E** | |\n\n## Facts side by side\n\n| Fact | D2 | Eraser API + MCP |\n| --- | --- | --- |\n| Kind | SDK + MCP | HTTP API |\n| Vendor | D2 project (The Hack Foundation) | Eraser |\n| Hosted endpoint | no (local only) | `https://app.eraser.io/api` |\n| Transports |  | HTTP, Streamable HTTP, stdio |\n| Auth | None | OAuth or key |\n| Pricing | Free | Freemium |\n| x402 | no | no |\n| Licence | MPL-2.0 | none |\n| Tools exposed | none | 42 |\n| Read-only variant documented | no | no |\n| llms.txt | no | yes |\n| MCP registry | not listed | `io.eraser/eraser` |\n| Last release | 2026-09-07 | 2026-05-22 |\n| Terms last updated | no document linked | no date given |\n| Privacy policy last updated | no document linked | no date given |\n| Customer content may train models |  | not found in the text |\n| Terms restrict automated access |  | not found in the text |\n| Terms restrict benchmarking |  | not found in the text |\n| Terms or service can change without notice |  | not found in the text |\n| Arbitration or class-action waiver |  | not found in the text |\n| Popularity | 26k stars, 22k npm/wk | 76 npm/wk |\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**Eraser API + MCP.** Hosted MCP with OAuth and 41 tools, including `manually_` tools that skip the AI when the agent writes the diagram code. No status page, rate limits, SLA or changelog.\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### Eraser API + MCP\n\n1. Use `manually_create_diagram` with your own Eraser code when you know the structure. It skips the AI and its credits\n2. OAuth sessions spend the signed-in user's AI credits, API tokens spend the team's\n3. Call /render/elements ($0.20) when you already have diagram code; /render/prompt costs $0.80\n4. Set a spend limit before running in CI. At 100 per cent the API stops until the next calendar month\n\n## Questions\n\n### Which is better for AI agents, D2 or Eraser API + MCP?\n\nD2 scores 65.3 (B) on agent readiness against Eraser API + MCP's 38.6 (E), and leads in 6 of 7 scored categories. Eraser API + MCP leads on security \u0026 auth.\n\n### Can an agent call D2 and Eraser API + MCP without installing anything?\n\nNo hosted endpoint is listed for D2. Eraser API + MCP has a hosted endpoint at https://app.eraser.io/api.\n\n### Are D2 and Eraser API + MCP open source?\n\nD2 is open source (MPL-2.0). No open-source release is listed for Eraser API + MCP.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/d2-vs-eraser.json, and with the fewest tokens: https://www.anchorterminal.com/compare/d2-vs-eraser.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"d2\", \"b\": \"eraser\"}`. From a terminal: `anchor compare d2 eraser`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/d2.json and https://www.anchorterminal.com/api/v1/tools/eraser.json\n\n## Other comparisons with D2 or Eraser API + MCP\n\n- [Cloudviz API vs D2](https://www.anchorterminal.com/compare/cloudviz-vs-d2.md)\n- [Cloudviz API vs Eraser API + MCP](https://www.anchorterminal.com/compare/cloudviz-vs-eraser.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 Eraser API + MCP](https://www.anchorterminal.com/compare/diagrams-so-vs-eraser.md)\n- [draw.io + MCP vs Eraser API + MCP](https://www.anchorterminal.com/compare/drawio-vs-eraser.md)\n- [Eraser API + MCP vs Lucid API + MCP](https://www.anchorterminal.com/compare/eraser-vs-lucid.md)\n- [Eraser API + MCP vs Mermaid Chart MCP](https://www.anchorterminal.com/compare/eraser-vs-mermaid-chart.md)\n- [Eraser API + MCP vs Mural MCP](https://www.anchorterminal.com/compare/eraser-vs-mural-mcp.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- [Eraser API + MCP vs tldraw SDK + MCP](https://www.anchorterminal.com/compare/eraser-vs-tldraw.md)\n- [Eraser API + MCP vs Whimsical MCP](https://www.anchorterminal.com/compare/eraser-vs-whimsical.md)\n- [D2 vs draw.io + MCP](https://www.anchorterminal.com/compare/d2-vs-drawio.md)\n- [D2 vs Lucid API + MCP](https://www.anchorterminal.com/compare/d2-vs-lucid.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 Eraser API + MCP",
        "url": ""
      }
    ],
    "description": "D2 scores 65.3 (B) on agent readiness against Eraser API + MCP's 38.6 (E), and leads in 6 of 7 scored categories. Eraser API + MCP leads on security \u0026 auth. Both do diagram as code. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "D2 B 65.3",
      "Eraser API + MCP E 38.6",
      "scores"
    ],
    "h1": "D2 vs Eraser API + MCP",
    "image": "https://www.anchorterminal.com/assets/og/compare-d2-vs-eraser.png",
    "path": "/compare/d2-vs-eraser",
    "published": "2026-10-01",
    "section": "tools",
    "title": "D2 vs Eraser API + MCP for AI agents, B 65.3 vs E 38.6",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/d2-vs-eraser"
  },
  "tokens": {
    "markdown": 2150,
    "slim": 730
  },
  "version": 1
}
