{
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "tool": {
    "slug": "zoo",
    "name": "Zoo",
    "vendor": "Zoo Corporation",
    "vendorUrl": "https://zoo.dev",
    "kind": "http-api",
    "category": "cad",
    "summary": "Zoo is a hosted CAD platform from Zoo Corporation with a REST API, the Zookeeper design agent over a websocket, file conversion and analysis endpoints, a CLI and a local MCP server, all built on its KCL modelling language.",
    "url": "https://www.anchorterminal.com/tools/zoo",
    "markdownUrl": "https://www.anchorterminal.com/tools/zoo.md",
    "slimMarkdownUrl": "https://www.anchorterminal.com/tools/zoo.min.md",
    "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/zoo.json",
    "dns": "zoo.grade.anchorterminal.com",
    "repo": "https://github.com/KittyCAD/mcp",
    "transports": [
      "stdio",
      "streamable-http"
    ],
    "packages": [
      {
        "registry": "pypi",
        "name": "zoo-mcp"
      },
      {
        "registry": "pypi",
        "name": "kittycad"
      }
    ],
    "auth": "mixed",
    "authNotes": "Bearer API token minted at zoo.dev/account/developer after a browser sign-in (SSO by OAuth 2.0, OpenID Connect or email; Zoo uses no passwords). Tokens are listed, created and deleted at /user/api-tokens; no scopes were found. Team and Enterprise plans add organisation-wide service accounts, and OAuth 2.0 apps with PKCE and a device grant exist for apps. The MCP server reads ZOO_API_TOKEN (ZOO_TOKEN in the registry manifest). Websockets authenticate before the first message.",
    "pricing": "freemium",
    "pricingNotes": "Free plan with $10 of monthly usage (1,205 seconds) and no plan fee; Plus $20 a month with $200 of usage, Pro $99 with $1,245, Team $399 per user with $4,980, Enterprise by contract. Zookeeper reasoning and billable API calls (direct or through MCP) are metered per second at $0.0083, about $0.50 a minute, rounded up to the next second. Failed calls are not charged; GET, /user, /org and /oauth2 calls are free. Pay-as-you-go beyond the allowance is off by default and needs a payment method.",
    "priceSummary": "$0.0083 / credit",
    "where": "local",
    "x402": {
      "level": "no",
      "evidence": "No x402, MPP or L402 in the OpenAPI document (226 operations), the API pricing page, the FAQ or the MCP server source (checked 2026-11-03). Payment runs through Stripe-hosted pages and subscription endpoints.",
      "endpoints": []
    },
    "toolCount": 42,
    "popularity": {
      "githubStars": 11,
      "npmWeekly": null,
      "pypiWeekly": null,
      "asOf": "2026-11-03"
    },
    "docsUrl": "https://zoo.dev/docs/developer-tools/agent-api",
    "openapi": "https://api.zoo.dev/",
    "registryName": "io.github.KittyCAD/zoo-mcp",
    "capabilities": [
      "cad.generate",
      "cad.edit",
      "cad.export"
    ],
    "tags": [
      "hosted",
      "official",
      "closed-source",
      "freemium",
      "usage-priced",
      "free-tier",
      "mcp",
      "mcp-registry",
      "openapi",
      "cli",
      "python",
      "typescript",
      "rust",
      "go",
      "status-page",
      "soc2",
      "security-txt",
      "bug-bounty"
    ],
    "lastRelease": "2026-10-30",
    "graded": true,
    "anchor": {
      "graded": true,
      "score": 58.7,
      "grade": "C",
      "agentReady": false,
      "rank": 669,
      "ranked": true,
      "rankOf": 1349,
      "categoryRank": 2,
      "methodology": "0.7",
      "run": "2026-10-01",
      "scores": {
        "ergonomics": 44,
        "maintenance": 90,
        "payments": 35,
        "reliability": 55,
        "schema": 65,
        "security": 67,
        "transparency": 69
      },
      "pending": [
        "performance",
        "tasks"
      ],
      "breakdown": [
        {
          "key": "reliability",
          "name": "Reliability",
          "weight": 16,
          "effectiveWeight": 20,
          "score": 55,
          "points": 11,
          "reason": "Read with the hosted lines on api.zoo.dev. A Better Stack status page at status.zoo.dev lists public and internal components with uptime figures (20). Its incident pages show no incidents for September, October and November 2026; the June to August archive didn't render for our reader, so about three weeks of the 90-day window are unread (25 of 30). No rate limit with a number was found in the OpenAPI document, the API docs, the FAQ or the MCP source (0). No Retry-After or backoff guidance and no idempotency keys; the document says only that cancellation is idempotent (3 of 15). No SLA on any plan, and the terms disclaim uninterrupted service (0). The REST API and Zookeeper are not labelled beta, while POST /ml/kcl/completions carries the `beta` tag and zoo-mcp declares the Beta classifier (7 of 10). 20 + 25 + 0 + 3 + 0 + 7 = 55.",
          "checked": "2026-11-03"
        },
        {
          "key": "performance",
          "name": "Performance",
          "weight": 10,
          "effectiveWeight": 0,
          "pending": true,
          "points": 0,
          "reason": "Pending. Latency is measured per call by our probes, which haven't run yet, so this run doesn't score it. Its weight is shared across the assessed categories until the first probe window closes."
        },
        {
          "key": "schema",
          "name": "Schema \u0026 documentation",
          "weight": 13,
          "effectiveWeight": 16.25,
          "score": 65,
          "points": 10.56,
          "reason": "OpenAPI 3.0.3 served at the root of api.zoo.dev, 174 paths and 226 operations each with a summary, and MCP tools whose inputs are typed Python signatures that the SDK turns into JSON Schema (25). No llms.txt (404) and no Markdown twin of the docs (0). The MCP docstrings average about 725 characters and say what each tool is for and when to use another, with snapshot at 3,500 characters; the OpenAPI summaries are one line and the websocket page lists one client message type (14 of 20). 583 schemas with 976 enum lists and required fields, and the file conversion path takes typed format parameters (12 of 15). Each docs endpoint page carries a request example, but errors are one generic object with request_id and message, and the websocket's server messages are not enumerated in the docs (9 of 15). The document reports version 0.1.0, there is no API changelog page, and changes are announced per repository release or on the blog, as the per-second billing change of 30 September 2025 was (5 of 15). 25 + 0 + 14 + 12 + 9 + 5 = 65.",
          "checked": "2026-11-03"
        },
        {
          "key": "ergonomics",
          "name": "Agent ergonomics",
          "weight": 13,
          "effectiveWeight": 16.25,
          "score": 44,
          "points": 7.15,
          "reason": "zoo-mcp lists 42 tools in one process with no toolset switch, read-only subset or dynamic loading, and their docstrings total about 30,000 characters (5 of 25). List endpoints take `limit`, `page_token` and `sort_by` (31 paginated operations), with no field selection or filtering (15 of 20). Errors are a generic object with a message and request_id, no error codes, and MCP tools return a string on failure (8 of 20). No idempotency keys, no readOnlyHint or destructiveHint in the tool source, and the websocket needs a ping every 5 seconds to stay open (4 of 20). Few required parameters, official SDKs in Python, TypeScript, Rust and Go, but one modeling session per MCP process and a websocket protocol an agent has to drive by hand (12 of 15). 5 + 15 + 8 + 4 + 12 = 44.",
          "checked": "2026-11-03"
        },
        {
          "key": "security",
          "name": "Security \u0026 auth",
          "weight": 14,
          "effectiveWeight": 17.5,
          "score": 67,
          "points": 11.73,
          "reason": "Bearer API tokens minted in the account, several per user, listed and deleted at /user/api-tokens, organisation service accounts on Team and Enterprise, and OAuth 2.0 apps with PKCE and a device grant; no scopes were found on tokens and no rotation guidance (22 of 30). No read-only token or MCP subset; the Team plan's admin console and auditing give oversight after the fact, and the MCP client's own file permissions govern writes to main.kcl (8 of 20). Zookeeper carries a web_search tool and the MCP server returns KCL samples and docs, with no prompt-injection guidance found (5 of 15). Organisation admins get an API activity log and /user/api-calls lists each call with its cost (12 of 15). security.txt with a GitHub advisory contact and a policy committing to a 72-hour reply and severity-based rewards, SOC 2 Type II on the trust centre, and two Trail of Bits reviews published in 2024 and 2026 (20 of 20). 22 + 8 + 5 + 12 + 20 = 67.",
          "checked": "2026-11-03"
        },
        {
          "key": "payments",
          "name": "Payments \u0026 pricing",
          "weight": 10,
          "effectiveWeight": 12.5,
          "score": 35,
          "points": 4.38,
          "reason": "No x402, MPP or L402 (0). The per-second rate ($0.0083) and plan allowances are public in the pricing JSON the site loads and on the blog, with the FAQ stating rounding and free GETs (20). The Free plan carries $10 of usage a month with no plan fee; whether sign-up asks for a card was not established, and pay-as-you-go needs a payment method (15 of 20). A person signs in with SSO in a browser and mints the token; service accounts come only after an organisation exists (0). 0 + 20 + 15 + 0 = 35.",
          "checked": "2026-11-03"
        },
        {
          "key": "tasks",
          "name": "Task success",
          "weight": 10,
          "effectiveWeight": 0,
          "pending": true,
          "points": 0,
          "reason": "Pending. Task success needs the category task suites run through each tool, which haven't run yet, so this run doesn't score it. Its weight is shared across the assessed categories until then. A data provider's data-quality score is published on its listing now and becomes half of this category when it's scored."
        },
        {
          "key": "maintenance",
          "name": "Maintenance \u0026 community",
          "weight": 7,
          "effectiveWeight": 8.75,
          "score": 90,
          "points": 7.88,
          "reason": "Read for a hosted service with open-source clients. zoo-mcp v0.33.0 on 30 October 2026, the CLI v0.2.209 on 28 October and kittycad 1.8.0 on 15 October (30). Nine zoo-mcp tags from 24 to 30 October alone, with CLI and SDK releases through October (20). Commits land daily across the KittyCAD organisation, with a Discord and a community forum; issue response times were not read because GitHub's issue pages refused us (15 of 25). io.github.KittyCAD/zoo-mcp is in the official MCP registry under a GitHub-verified namespace, though at version 0.10.0 of 27 January 2026 (15). pytest across Python 3.11 to 3.14, ruff, ty, a security workflow and Dependabot, with the scheduled run on main passing on 3 November (10). 30 + 20 + 15 + 15 + 10 = 90.",
          "checked": "2026-11-03"
        },
        {
          "key": "transparency",
          "name": "Transparency \u0026 trust",
          "weight": 7,
          "effectiveWeight": 8.75,
          "score": 69,
          "points": 6.04,
          "note": "editorial 57, provenance 80",
          "reason": "The API is closed, with terms last updated 15 April 2026 under California law; the MCP server, CLI, SDKs and Design Studio are MIT (22 of 30). The terms licence inputs and outputs for model training with an opt-out only where the tier allows it, the pricing JSON states the behaviour per plan, and the security page says team and enterprise data is excluded by default; the privacy policy of 9 September 2026 is silent on training and gives no retention periods, and the enterprise page says Zoo trains on customer CAD data without naming the opt-out (15 of 30). No deprecation policy; billing changes were announced on the blog with dates (6 of 20). The trust centre names OpenAI, Cockroach Labs, Google Cloud and AWS as subprocessors, the security page names a US Regulated region, and the privacy policy says data may be processed anywhere in the world (14 of 20). 22 + 15 + 6 + 14 = 57.",
          "checked": "2026-11-03"
        }
      ],
      "assessment": {
        "date": "2026-11-03",
        "basis": "public evidence",
        "confidence": "medium",
        "notes": {
          "ergonomics": "zoo-mcp lists 42 tools in one process with no toolset switch, read-only subset or dynamic loading, and their docstrings total about 30,000 characters (5 of 25). List endpoints take `limit`, `page_token` and `sort_by` (31 paginated operations), with no field selection or filtering (15 of 20). Errors are a generic object with a message and request_id, no error codes, and MCP tools return a string on failure (8 of 20). No idempotency keys, no readOnlyHint or destructiveHint in the tool source, and the websocket needs a ping every 5 seconds to stay open (4 of 20). Few required parameters, official SDKs in Python, TypeScript, Rust and Go, but one modeling session per MCP process and a websocket protocol an agent has to drive by hand (12 of 15). 5 + 15 + 8 + 4 + 12 = 44.",
          "maintenance": "Read for a hosted service with open-source clients. zoo-mcp v0.33.0 on 30 October 2026, the CLI v0.2.209 on 28 October and kittycad 1.8.0 on 15 October (30). Nine zoo-mcp tags from 24 to 30 October alone, with CLI and SDK releases through October (20). Commits land daily across the KittyCAD organisation, with a Discord and a community forum; issue response times were not read because GitHub's issue pages refused us (15 of 25). io.github.KittyCAD/zoo-mcp is in the official MCP registry under a GitHub-verified namespace, though at version 0.10.0 of 27 January 2026 (15). pytest across Python 3.11 to 3.14, ruff, ty, a security workflow and Dependabot, with the scheduled run on main passing on 3 November (10). 30 + 20 + 15 + 15 + 10 = 90.",
          "payments": "No x402, MPP or L402 (0). The per-second rate ($0.0083) and plan allowances are public in the pricing JSON the site loads and on the blog, with the FAQ stating rounding and free GETs (20). The Free plan carries $10 of usage a month with no plan fee; whether sign-up asks for a card was not established, and pay-as-you-go needs a payment method (15 of 20). A person signs in with SSO in a browser and mints the token; service accounts come only after an organisation exists (0). 0 + 20 + 15 + 0 = 35.",
          "reliability": "Read with the hosted lines on api.zoo.dev. A Better Stack status page at status.zoo.dev lists public and internal components with uptime figures (20). Its incident pages show no incidents for September, October and November 2026; the June to August archive didn't render for our reader, so about three weeks of the 90-day window are unread (25 of 30). No rate limit with a number was found in the OpenAPI document, the API docs, the FAQ or the MCP source (0). No Retry-After or backoff guidance and no idempotency keys; the document says only that cancellation is idempotent (3 of 15). No SLA on any plan, and the terms disclaim uninterrupted service (0). The REST API and Zookeeper are not labelled beta, while POST /ml/kcl/completions carries the `beta` tag and zoo-mcp declares the Beta classifier (7 of 10). 20 + 25 + 0 + 3 + 0 + 7 = 55.",
          "schema": "OpenAPI 3.0.3 served at the root of api.zoo.dev, 174 paths and 226 operations each with a summary, and MCP tools whose inputs are typed Python signatures that the SDK turns into JSON Schema (25). No llms.txt (404) and no Markdown twin of the docs (0). The MCP docstrings average about 725 characters and say what each tool is for and when to use another, with snapshot at 3,500 characters; the OpenAPI summaries are one line and the websocket page lists one client message type (14 of 20). 583 schemas with 976 enum lists and required fields, and the file conversion path takes typed format parameters (12 of 15). Each docs endpoint page carries a request example, but errors are one generic object with request_id and message, and the websocket's server messages are not enumerated in the docs (9 of 15). The document reports version 0.1.0, there is no API changelog page, and changes are announced per repository release or on the blog, as the per-second billing change of 30 September 2025 was (5 of 15). 25 + 0 + 14 + 12 + 9 + 5 = 65.",
          "security": "Bearer API tokens minted in the account, several per user, listed and deleted at /user/api-tokens, organisation service accounts on Team and Enterprise, and OAuth 2.0 apps with PKCE and a device grant; no scopes were found on tokens and no rotation guidance (22 of 30). No read-only token or MCP subset; the Team plan's admin console and auditing give oversight after the fact, and the MCP client's own file permissions govern writes to main.kcl (8 of 20). Zookeeper carries a web_search tool and the MCP server returns KCL samples and docs, with no prompt-injection guidance found (5 of 15). Organisation admins get an API activity log and /user/api-calls lists each call with its cost (12 of 15). security.txt with a GitHub advisory contact and a policy committing to a 72-hour reply and severity-based rewards, SOC 2 Type II on the trust centre, and two Trail of Bits reviews published in 2024 and 2026 (20 of 20). 22 + 8 + 5 + 12 + 20 = 67.",
          "transparency": "The API is closed, with terms last updated 15 April 2026 under California law; the MCP server, CLI, SDKs and Design Studio are MIT (22 of 30). The terms licence inputs and outputs for model training with an opt-out only where the tier allows it, the pricing JSON states the behaviour per plan, and the security page says team and enterprise data is excluded by default; the privacy policy of 9 September 2026 is silent on training and gives no retention periods, and the enterprise page says Zoo trains on customer CAD data without naming the opt-out (15 of 30). No deprecation policy; billing changes were announced on the blog with dates (6 of 20). The trust centre names OpenAI, Cockroach Labs, Google Cloud and AWS as subprocessors, the security page names a US Regulated region, and the privacy policy says data may be processed anywhere in the world (14 of 20). 22 + 15 + 6 + 14 = 57."
        },
        "sources": [
          {
            "what": "OpenAPI document (226 operations)",
            "url": "https://api.zoo.dev/",
            "seen": "2026-11-03"
          },
          {
            "what": "plan pricing JSON",
            "url": "https://api.zoo.dev/pricing/subscriptions",
            "seen": "2026-11-03"
          },
          {
            "what": "Agent API overview",
            "url": "https://zoo.dev/docs/developer-tools/agent-api",
            "seen": "2026-11-03"
          },
          {
            "what": "Zookeeper websocket reference",
            "url": "https://zoo.dev/docs/developer-tools/api/ml/open-a-websocket-to-a-zookeeper-agent-instance",
            "seen": "2026-11-03"
          },
          {
            "what": "Python quickstart",
            "url": "https://zoo.dev/docs/developer-tools/tutorials/beginner-onboarding-py",
            "seen": "2026-11-03"
          },
          {
            "what": "MCP docs page",
            "url": "https://zoo.dev/docs/developer-tools/mcp",
            "seen": "2026-11-03"
          },
          {
            "what": "API reference index and authentication",
            "url": "https://zoo.dev/docs/developer-tools/api/authentication",
            "seen": "2026-11-03"
          },
          {
            "what": "API calls and file endpoint pages",
            "url": "https://zoo.dev/docs/developer-tools/api/file",
            "seen": "2026-11-03"
          },
          {
            "what": "CLI manual, zoo ml kcl copilot",
            "url": "https://zoo.dev/docs/developer-tools/cli/manual/zoo_ml_kcl_copilot",
            "seen": "2026-11-03"
          },
          {
            "what": "FAQ (billing, usage, MCP)",
            "url": "https://zoo.dev/docs/faq",
            "seen": "2026-11-03"
          },
          {
            "what": "API pricing page",
            "url": "https://zoo.dev/api-pricing",
            "seen": "2026-11-03"
          },
          {
            "what": "per-second billing post, 30 September 2025",
            "url": "https://zoo.dev/blog/per-second-billing",
            "seen": "2026-11-03"
          },
          {
            "what": "Zookeeper announcement, 5 February 2026",
            "url": "https://zoo.dev/blog/announcing-zookeeper",
            "seen": "2026-11-03"
          },
          {
            "what": "Text-to-CAD launch, 18 December 2023",
            "url": "https://zoo.dev/blog/introducing-text-to-cad",
            "seen": "2026-11-03"
          },
          {
            "what": "terms and conditions, 15 April 2026",
            "url": "https://zoo.dev/terms-and-conditions",
            "seen": "2026-11-03"
          },
          {
            "what": "privacy policy, 9 September 2026",
            "url": "https://zoo.dev/privacy-policy",
            "seen": "2026-11-03"
          },
          {
            "what": "security page",
            "url": "https://zoo.dev/security",
            "seen": "2026-11-03"
          },
          {
            "what": "trust centre",
            "url": "https://trust.zoo.dev/",
            "seen": "2026-11-03"
          },
          {
            "what": "Trail of Bits reviews post, 23 June 2026",
            "url": "https://zoo.dev/blog/security-trail-of-bits",
            "seen": "2026-11-03"
          },
          {
            "what": "security.txt",
            "url": "https://zoo.dev/.well-known/security.txt",
            "seen": "2026-11-03"
          },
          {
            "what": "security policy",
            "url": "https://raw.githubusercontent.com/KittyCAD/.github/main/SECURITY.md",
            "seen": "2026-11-03"
          },
          {
            "what": "status page",
            "url": "https://status.zoo.dev/",
            "seen": "2026-11-03"
          },
          {
            "what": "status incidents by month",
            "url": "https://status.zoo.dev/incidents",
            "seen": "2026-11-03"
          },
          {
            "what": "enterprise page",
            "url": "https://zoo.dev/enterprise",
            "seen": "2026-11-03"
          },
          {
            "what": "zoo-mcp repository, shallow clone (42 tools, CI, server.json)",
            "url": "https://github.com/KittyCAD/mcp",
            "seen": "2026-11-03"
          },
          {
            "what": "zoo-mcp releases",
            "url": "https://api.github.com/repos/KittyCAD/mcp/releases?per_page=10",
            "seen": "2026-11-03"
          },
          {
            "what": "CLI releases",
            "url": "https://api.github.com/repos/KittyCAD/cli/releases?per_page=10",
            "seen": "2026-11-03"
          },
          {
            "what": "zoo-mcp CI runs on main",
            "url": "https://api.github.com/repos/KittyCAD/mcp/actions/runs?per_page=8\u0026branch=main",
            "seen": "2026-11-03"
          },
          {
            "what": "PyPI zoo-mcp",
            "url": "https://pypi.org/project/zoo-mcp/",
            "seen": "2026-11-03"
          },
          {
            "what": "PyPI kittycad",
            "url": "https://pypi.org/project/kittycad/",
            "seen": "2026-11-03"
          },
          {
            "what": "MCP registry entry",
            "url": "https://registry.modelcontextprotocol.io/v0/servers?search=zoo",
            "seen": "2026-11-03"
          },
          {
            "what": "robots.txt",
            "url": "https://zoo.dev/robots.txt",
            "seen": "2026-11-03"
          }
        ],
        "openQuestions": [
          "unchecked: the status page's June to August 2026 archive, which did not render for our reader; the 90-day window is read from 1 September",
          "unchecked: the live tools/list of zoo-mcp and its annotations; the tool count of 42 is from the server source at v0.33.0",
          "unchecked: whether sign-up for the Free plan asks for a card, and the enterprise plan's contract terms",
          "unchecked: the npm package name of the TypeScript client (kittycad.ts) and weekly download counts; githubStars is the zoo-mcp repository's count, the Design Studio app has 1,329",
          "The enterprise page says Zoo trains its AI on customer CAD data while the pricing JSON marks Team and Enterprise data as excluded by default and the terms allow an opt-out by tier. Read as marketing against policy, not a deduction",
          "firstReleased is 18 December 2023, the Text-to-CAD alpha, the earliest dated first-hand page for the ML surface; the kittycad Python client's first release was 8 December 2021 and Zookeeper was announced on 5 February 2026",
          "Judgement call on kind. Listed as http-api because the OpenAPI surface and the Zookeeper websocket are what the docs lead with; the MCP server is a local wrapper over the same API"
        ]
      },
      "negative": 0,
      "verdict": "A public OpenAPI document, SDKs in four languages, a 42-tool MCP server and a $10 monthly allowance let an agent generate KCL geometry and export STEP without a contract. No rate limits, retry guidance or scoped tokens are documented, the MCP server has no read-only subset, and the Free plan's data trains Zoo's models with no opt-out.",
      "bestFor": "Agents that need to produce or iterate editable mechanical geometry as code and export STEP, with a hosted engine and no desktop.",
      "strengths": [
        "OpenAPI 3.0.3 served at api.zoo.dev with 226 described operations, and SDKs in Python, TypeScript, Rust and Go generated from it",
        "Zookeeper returns editable KCL rather than a mesh, and the CLI or zoo-kcl package exports it to STEP",
        "Public per-second pricing ($0.0083 a second) with $10 of monthly usage on the Free plan and no charge for failed calls",
        "SOC 2 Type II, a disclosure policy with a 72-hour response commitment, and two published Trail of Bits reviews",
        "Status page with component history and no incidents reported for September to November 2026"
      ],
      "weaknesses": [
        "No rate limits, 429 handling or idempotency keys documented for the REST API or the websocket",
        "API tokens carry no scopes and the MCP server has no read-only subset or tool annotations",
        "Free plan data is always used for training; Plus and Pro opt out manually, by the terms of 15 April 2026",
        "The 42 MCP tools and 30,000 characters of docstrings load into every session; the registry entry is at 0.10.0 while PyPI is at 0.33.0",
        "No llms.txt or Markdown docs, no API changelog, and no SLA on any plan"
      ],
      "agentNotes": [
        "Send `{\"type\":\"ping\"}` every 5 seconds on the Zookeeper websocket and expect only KCL back; run the KCL through evaluate_kcl, the CLI or zoo-kcl to get STEP or STL",
        "Budget usage in seconds, since every billable call rounds up to the next second at $0.0083, and the monthly allowance resets at the account anniversary without rollover",
        "Use one modeling session per zoo-mcp process, start it with start_modeling_session and stop it when done; get_modeling_sessions recovers the id after a reconnect",
        "Put the token in ZOO_API_TOKEN, never in a URL; there are no read-only tokens, so use a service account on a Team plan when the owner wants separate credentials",
        "Paginate list endpoints with `limit`, `page_token` and `sort_by`; nothing documents a rate limit, so back off on any 429 or 5xx yourself"
      ],
      "metrics": {
        "kind": "remote",
        "measured": false
      },
      "reviewCount": 0,
      "avgRating": 0,
      "history": [
        {
          "basis": "public evidence",
          "confidence": "medium",
          "grade": "C",
          "methodology": "0.7",
          "pending": [
            "performance",
            "tasks"
          ],
          "run": "2026-10-01",
          "runLabel": "October 2026 research run",
          "score": 58.7
        }
      ],
      "editorialScores": {
        "ergonomics": 44,
        "maintenance": 90,
        "payments": 35,
        "reliability": 55,
        "schema": 65,
        "security": 67,
        "transparency": 57
      },
      "provenanceScore": 80,
      "checked": {
        "categories": {
          "ergonomics": "2026-11-03",
          "maintenance": "2026-11-03",
          "payments": "2026-11-03",
          "reliability": "2026-11-03",
          "schema": "2026-11-03",
          "security": "2026-11-03",
          "transparency": "2026-11-03"
        },
        "last": "2026-11-03",
        "oldest": "2026-11-03",
        "stale": false,
        "staleAfterDays": 90
      },
      "scoreHistory": [
        {
          "date": "2026-11-03",
          "grade": "C",
          "kind": "listed",
          "method": "0.7",
          "score": 58.7
        }
      ]
    },
    "connect": {
      "install": "uvx zoo-mcp",
      "http": "curl -H \"Authorization: Bearer $ZOO_API_TOKEN\" https://api.zoo.dev/user",
      "claudeCode": "claude mcp add zoo -e ZOO_API_TOKEN=$ZOO_API_TOKEN -- uvx zoo-mcp",
      "config": {
        "mcpServers": {
          "zoo": {
            "args": [
              "zoo-mcp"
            ],
            "command": "uvx",
            "env": {
              "ZOO_API_TOKEN": "YOUR_ZOO_API_TOKEN"
            }
          }
        }
      }
    },
    "letme": {
      "capability": "https://letme.dev/cad.generate",
      "tool": "https://letme.dev/zoo"
    },
    "notable": [
      "The OpenAPI 3.0.3 document is served at the root of api.zoo.dev, 174 paths and 226 operations, every one with a summary, generated from the server code so the SDKs follow it (https://api.zoo.dev/)",
      "Zookeeper, the CAD agent, is reached over a websocket at /ws/ml/copilot that returns only KCL; STEP or STL come from executing that KCL with the engine, the zoo-kcl package or the CLI (https://zoo.dev/docs/developer-tools/api/ml/open-a-websocket-to-a-zookeeper-agent-instance)",
      "zoo-mcp 0.33.0 on PyPI (MIT, 30 October 2026) defines 42 tools in src/zoo_mcp/server.py, run with `uvx zoo-mcp` over stdio or Streamable HTTP on localhost; it is in the official MCP registry as io.github.KittyCAD/zoo-mcp at version 0.10.0 of 27 January 2026 (https://github.com/KittyCAD/mcp)",
      "Plan allowances and the per-second rate are public in JSON at /pricing/subscriptions, which the pricing page loads; the Free plan's training_data_behavior is `always`, Plus and Pro `default_on`, Team and Enterprise `default_off` (https://api.zoo.dev/pricing/subscriptions)",
      "The terms of 15 April 2026 licence Customer Materials, inputs and outputs included, to train Zoo's models, with an opt-out only where the subscription tier allows it; customers own their outputs (https://zoo.dev/terms-and-conditions)",
      "Two Trail of Bits reviews (2024 and March 2026) are published, the 2026 one finding a path traversal in /file/conversion uploads that Zoo fixed and sandboxed (https://zoo.dev/blog/security-trail-of-bits)",
      "Status page on Better Stack reports no incidents for September, October and November 2026, with API uptime shown as 99.989 per cent (https://status.zoo.dev/)",
      "No rate limits, Retry-After guidance or idempotency keys were found in the OpenAPI document or the docs; only cancellation is described as idempotent (https://api.zoo.dev/)"
    ],
    "area": "design-diagrams",
    "details": [
      {
        "label": "Surface listed",
        "value": "The hosted API at api.zoo.dev (OpenAPI document, Zookeeper websocket, file endpoints), the zoo-mcp server read from a shallow clone of KittyCAD/mcp and PyPI, the Zoo CLI manual, zoo.dev docs, pricing JSON, terms, privacy policy, security page, trust centre, status page and the MCP registry on 3 November 2026. No account was made, no token minted and no tool called"
      },
      {
        "label": "Where it runs",
        "value": "Zoo's cloud on AWS, GCP and Cockroach Labs, with a US Regulated region for ITAR work. The MCP server runs on the agent's machine and calls the hosted API; it serves stdio by default or Streamable HTTP on 127.0.0.1:8000"
      },
      {
        "label": "Agent API",
        "value": "GET /ws/ml/copilot opens a Zookeeper session: send `{\"type\":\"user\",\"content\":...}`, stream deltas and tool_output messages until end_of_stream, replay a conversation with `replay=true\u0026conversation_id=`. /ml/conversations lists past sessions, /user/text-to-cad lists generated parts, POST /ml/kcl/completions is tagged beta"
      },
      {
        "label": "MCP tools",
        "value": "42 in zoo-mcp 0.33.0, among them execute_kcl, evaluate_kcl (measurements and multi-format export), mock_execute_kcl, lint_and_fix_kcl, format_kcl, convert_cad_file, mass, volume, surface area, centre of mass, bounding box, snapshot, modeling sessions and import, sketch constraint status, selection and camera tools, entity queries, org datasets and skills, KCL docs lookup and KCL sample search. The public KCL sample tools need no token"
      },
      {
        "label": "File endpoints",
        "value": "POST /file/conversion/{src_format}/{output_format}, plus mass, volume, density, surface-area, center-of-mass and bounding-box on uploaded files. The CLI mirrors them as `zoo file convert` and `zoo kcl export`"
      },
      {
        "label": "SDKs and CLI",
        "value": "kittycad on PyPI (1.8.0, 15 October 2026), kittycad.ts, kittycad.rs and kittycad.go on GitHub, all MIT. Zoo CLI v0.2.209 of 28 October 2026 by Homebrew tap kittycad/kittycad or a release binary, with `zoo ml kcl copilot` for an interactive Zookeeper session"
      },
      {
        "label": "Plans",
        "value": "Free $0 with $10 usage; Plus $20 with $200; Pro $99 with $1,245; Team $399 per user with $4,980, service accounts, admin console and auditing; Enterprise by contract with SAML SSO, custom ML models and the ml and file endpoint groups. Annual billing is discounted"
      },
      {
        "label": "Training on data",
        "value": "Free plan always, with no opt out. Plus and Pro on by default, with a manual opt out. Team and Enterprise excluded by default. /user/privacy and /org/privacy read and set `can_train_on_data`"
      },
      {
        "label": "Legal entity",
        "value": "Zoo Corporation, 8701 Aviation Blvd, Inglewood, California, named in the terms (15 April 2026) and privacy policy (9 September 2026). Formerly KittyCAD, founded in 2021 and incubated at Embedded Ventures"
      }
    ],
    "unitPrices": [
      {
        "item": "Billable API second (Zookeeper, modeling, ML, file)",
        "unit": "credit",
        "usd": 0.0083,
        "note": "one credit is one second of a billable call, about $0.50 a minute, rounded up to the next second; GET, /user, /org and /oauth2 calls are free"
      },
      {
        "item": "Plus plan",
        "unit": "month",
        "usd": 20,
        "note": "includes $200 of usage (24,096 seconds); the Free plan includes $10"
      },
      {
        "item": "Pro plan",
        "unit": "month",
        "usd": 99,
        "note": "includes $1,245 of usage (150,000 seconds)"
      },
      {
        "item": "Team plan",
        "unit": "seat-month",
        "usd": 399,
        "note": "includes $4,980 of usage per month, service accounts, admin console and auditing"
      }
    ],
    "provenance": {
      "legalEntity": "Zoo Corporation",
      "domain": "zoo.dev",
      "domainRegistered": "",
      "endpointOnVendorDomain": true,
      "terms": "https://zoo.dev/terms-and-conditions",
      "privacy": "https://zoo.dev/privacy-policy",
      "statusPage": "https://status.zoo.dev/",
      "changelog": "https://github.com/KittyCAD/mcp/releases",
      "securityTxt": "valid",
      "checked": "2026-11-03",
      "notes": [
        "Zoo Corporation is named in the terms (last updated 15 April 2026) and the privacy policy (9 September 2026), with an Inglewood, California address. California law.",
        "Section 3(a)(vii) of the terms forbids accessing the Services with spiders, robots, crawlers or similar data mining tools unless Zoo supplies the tool. Recorded as a fact; zoo.dev/robots.txt allows all crawlers and api.zoo.dev has no robots.txt.",
        "security.txt at zoo.dev/.well-known/security.txt names the GitHub advisory form, security@zoo.dev and a policy, with no Expires line.",
        "No llms.txt (404) and no API changelog page (docs/changelog 404). Releases are tracked per repository on GitHub.",
        "The domain registration date was not checked (no RDAP lookup made)."
      ],
      "score": 80,
      "checks": [
        {
          "check": "Legal entity named",
          "value": "Zoo Corporation",
          "points": 20,
          "max": 20,
          "state": "ok"
        },
        {
          "check": "Domain age",
          "value": "zoo.dev, no registry record we could read",
          "points": 0,
          "max": 15,
          "state": "no"
        },
        {
          "check": "Endpoint on the vendor's domain",
          "value": "zoo.dev",
          "points": 15,
          "max": 15,
          "state": "ok"
        },
        {
          "check": "Terms of service",
          "value": "read, states 5 of the 7 things a reader expects, and has 2 clauses that cost points",
          "points": 4.3,
          "max": 10,
          "state": "part"
        },
        {
          "check": "Privacy policy",
          "value": "read, states 8 of the 8 things a reader expects",
          "points": 10,
          "max": 10,
          "state": "ok"
        },
        {
          "check": "Status page",
          "value": "status.zoo.dev",
          "points": 10,
          "max": 10,
          "state": "ok"
        },
        {
          "check": "Changelog",
          "value": "published",
          "points": 10,
          "max": 10,
          "state": "ok"
        },
        {
          "check": "security.txt",
          "value": "valid",
          "points": 10,
          "max": 10,
          "state": "ok"
        },
        {
          "check": "People named",
          "value": "3 named with their role, none with a public profile",
          "points": 7,
          "max": 10,
          "state": "part"
        },
        {
          "check": "Support route",
          "value": "a support address, help pages, a community",
          "points": 5,
          "max": 5,
          "state": "ok"
        }
      ],
      "policies": [
        {
          "kind": "terms",
          "url": "https://zoo.dev/terms-and-conditions",
          "state": "read",
          "readAt": "2026-11-03",
          "statedDate": "2026-04-15",
          "words": 6509,
          "points": 4.3,
          "max": 10,
          "expected": [
            {
              "key": "terms.date",
              "label": "Gives the date it was last updated",
              "found": true,
              "quote": "Last updated: 15 Apr 2026.",
              "says": "Last updated 2026-04-15"
            },
            {
              "key": "terms.law",
              "label": "Names the governing law or courts",
              "found": true,
              "quote": "These Terms will be governed by and construed in accordance with the laws of the State of California without giving effect to any principles of conflict of laws that would lead to the application of the laws of another jurisdiction.",
              "says": "The law of the State of California"
            },
            {
              "key": "terms.liability",
              "label": "States a limit on its liability",
              "found": true,
              "quote": "IN NO EVENT WILL ZOO’S TOTAL LIABILITY TO YOU OR YOUR AUTHORIZED USERS IN CONNECTION WITH THESE TERMS, THE ZOO IP OR THE PROVISION OF THE SERVICES EXCEED THE FEES ACTUALLY PAID BY YOU TO ZOO IN THE SIX (6) MONTH PERIOD PRECEDING THE EVENT GIVING RISE TO THE CLAIM, REGARDLESS OF THE LEGAL OR EQUITABLE THEORY ON WHICH T…",
              "says": "Capped at the fees paid in the 6 months before the claim"
            },
            {
              "key": "terms.termination",
              "label": "Says how the agreement or account can be ended",
              "found": true,
              "quote": "If you fail to make any payment when due, late charges will accrue at the rate of 1.5% per month or, if lower, the highest rate permitted by applicable law and Zoo may suspend Services until all payments are made in full."
            },
            {
              "key": "terms.changes",
              "label": "Says how changes to the terms are announced",
              "found": false
            },
            {
              "key": "terms.use",
              "label": "Lists what users may not do",
              "found": true,
              "quote": "You may not use the Services if you do not agree to the Terms of Use."
            },
            {
              "key": "terms.sla",
              "label": "Refers to a service level or uptime commitment",
              "found": false
            }
          ],
          "toKnow": [
            {
              "key": "training.optout",
              "label": "Says it may use customer content to train or improve models, and gives an opt-out",
              "found": true,
              "quote": "If you do not want Zoo to use your Customer Materials to train our artificial intelligence and machine learning models, and only if your subscription tier allows, you may opt out by specifying as such using your account settings within the Services or by submitting a request through our support form"
            },
            {
              "key": "terms.automated",
              "label": "Restricts automated access",
              "found": true,
              "quote": "access or search the Services (or download any data or content contained therein or transmitted thereby) through the use of any engine, software, tool, agent, device or mechanism (including spiders, robots, crawlers or any other similar data mining tools)",
              "costsPoints": true
            },
            {
              "key": "terms.benchmark",
              "label": "Restricts benchmarking or competitive use",
              "found": true,
              "quote": "for benchmarking or competitive analysis with respect to competitive or related products or services, or to develop, commercialize, license or sell any product, service or technology that could, directly or indirectly, compete with the Services.",
              "costsPoints": true
            }
          ],
          "notes": [
            {
              "date": "2026-11-03",
              "text": "Customer materials, including inputs and outputs, are licensed to the vendor to train its AI models, and the opt-out is available only on subscription tiers that allow it.",
              "quote": "If you do not want Zoo to use your Customer Materials to train our artificial intelligence and machine learning models, and only if your subscription tier allows, you may opt out by specifying as such using your account settings within the Services or by submitting a request through our support form"
            },
            {
              "date": "2026-11-03",
              "text": "The vendor gives no warranty that generative AI outputs are accurate, do not infringe third party rights, or differ from outputs produced for other customers.",
              "quote": "ZOO MAKES NO REPRESENTATIONS OR WARRANTIES THAT: (I) ANY OUTPUTS OR OTHER ASPECTS OF THE GAI PROGRAM (A) ARE NOT FALSE, MISLEADING, OR INACCURATE, OR (B) DO NOT INFRINGE THE INTELLECTUAL PROPERTY RIGHTS OF THIRD PARTIES OR ANY OTHER APPLICABLE LAW"
            },
            {
              "date": "2026-11-03",
              "text": "During the term the vendor may use the customer's name, trademarks and logos on its website and in marketing materials to identify the customer as a Zoo customer.",
              "quote": "In addition, during the term of your Use of the Services, Zoo may use your name, trademarks, and logos (collectively, “Customer’s Marks”) on Zoo’s website and in its marketing materials to identify you as Zoo’s customer, and for the purpose of providing the Services to you"
            }
          ]
        },
        {
          "kind": "privacy",
          "url": "https://zoo.dev/privacy-policy",
          "state": "read",
          "readAt": "2026-11-03",
          "statedDate": "2026-09-09",
          "words": 3529,
          "points": 10,
          "max": 10,
          "expected": [
            {
              "key": "privacy.date",
              "label": "Gives the date it was last updated",
              "found": true,
              "quote": "Last updated: September 9, 2026",
              "says": "Last updated 2026-09-09"
            },
            {
              "key": "privacy.collected",
              "label": "Says what personal data is collected",
              "found": true,
              "quote": "We collect personal information that you provide to us, personal information we collect automatically when you use the Services, and personal information from third-party sources, as described below."
            },
            {
              "key": "privacy.retention",
              "label": "Says how long data is kept",
              "found": true,
              "quote": "We retain personal information for as long as reasonably necessary to provide the Services, fulfill the purposes described in this Privacy Notice, comply with legal obligations, resolve disputes, enforce agreements, and protect the Services and our users.",
              "says": "For as long as needed, with no period named"
            },
            {
              "key": "privacy.processors",
              "label": "Says who else receives the data",
              "found": true,
              "quote": "We, and our service providers, may collect the information you communicate to us, such as through email."
            },
            {
              "key": "privacy.sale",
              "label": "Says whether personal data is sold or shared for advertising",
              "found": true,
              "quote": "This practice is commonly referred to as “interest-based advertising”, “personalized advertising”, or “targeted advertising.”"
            },
            {
              "key": "privacy.rights",
              "label": "Says what rights people have over their data",
              "found": true,
              "quote": "If you have any questions about our privacy practices or this Privacy Notice, or to exercise your rights as detailed in this Privacy Notice, please email us at support@zoo.dev."
            },
            {
              "key": "privacy.contact",
              "label": "Gives a privacy contact",
              "found": true,
              "quote": "If you have any questions about our privacy practices or this Privacy Notice, or to exercise your rights as detailed in this Privacy Notice, please email us at support@zoo.dev.",
              "says": "support@zoo.dev"
            },
            {
              "key": "privacy.transfers",
              "label": "Says where data is transferred or stored",
              "found": true,
              "quote": "All personal information processed by us may be transferred, processed, and stored anywhere in the world, including, but not limited to, the United States or other countries, which may have data protection laws that are different from the laws where you live.",
              "says": "Data goes to the United States"
            }
          ],
          "toKnow": [
            {
              "key": "privacy.sells",
              "label": "Says it sells personal data or shares it for advertising",
              "found": true,
              "quote": "We may share your personal information with third-party advertising partners."
            }
          ]
        }
      ]
    },
    "humans": {
      "slug": "zoo",
      "checked": "2026-11-03",
      "company": "Zoo Corporation",
      "people": [
        {
          "name": "Jessie Frazelle",
          "role": "Co-founder and CEO",
          "founder": true,
          "bio": "Jessie Frazelle co-founded KittyCAD, now Zoo, in 2021 with Jenna Bryant and Jordan Noone, and became its CEO in December 2022, taking over from Noone. She wrote the launch post for Text-to-CAD in December 2023.",
          "bioSources": [
            "https://zoo.dev/blog/introducing-kittycad",
            "https://zoo.dev/blog/stepping-into-ceo",
            "https://zoo.dev/blog/introducing-text-to-cad"
          ],
          "page": "/people/jessie-frazelle/"
        },
        {
          "name": "Jordan Noone",
          "role": "Co-founder and Executive Chairman",
          "founder": true,
          "bio": "Jordan Noone co-founded KittyCAD in 2021 and led it as CEO until December 2022, when he became Executive Chairman with responsibility for financing and corporate development. He is a founder of Embedded Ventures, the firm that incubated the company.",
          "bioSources": [
            "https://zoo.dev/blog/introducing-kittycad",
            "https://zoo.dev/blog/stepping-into-ceo"
          ],
          "page": "/people/jordan-noone/"
        },
        {
          "name": "Jenna Bryant",
          "role": "Co-founder",
          "founder": true,
          "bio": "Jenna Bryant co-founded KittyCAD in 2021 with Jordan Noone and Jessie Frazelle. She is the byline on Zoo's press release introducing Zookeeper of 5 February 2026.",
          "bioSources": [
            "https://zoo.dev/blog/introducing-kittycad",
            "https://zoo.dev/press"
          ],
          "page": "/people/jenna-bryant/"
        }
      ],
      "peopleNote": "The founding post of 17 May 2021 is signed by Jenna Bryant, Jordan Noone and Jessie Frazelle and says KittyCAD was incubated at Embedded Ventures. The post of 11 January 2023 records Frazelle stepping into the CEO role and Noone becoming Executive Chairman. Zoo has no about or team page; the press page carries one release. None of the three has a personal LinkedIn, X or GitHub account linked from zoo.dev, so none is listed. Investors were looked for on zoo.dev (blog, press, enterprise page, sitemap) and on Embedded Ventures' site, which lists Zoo in its portfolio without a round. A $5 million seed round led by Venrex in October 2023 appears only in press and aggregator pages, which were not used, and Venrex's own site does not name Zoo.",
      "companySocial": {
        "linkedin": "https://www.linkedin.com/company/zoodotdev",
        "x": "https://x.com/zoodotdev",
        "github": "https://github.com/KittyCAD"
      },
      "support": {
        "emails": [
          "support@zoo.dev"
        ],
        "urls": [
          "https://community.zoo.dev/",
          "https://zoo.dev/docs"
        ],
        "community": [
          {
            "label": "Discord",
            "url": "https://discord.gg/JQEpHR7Nt2",
            "kind": "discord"
          },
          {
            "label": "Community forum",
            "url": "https://community.zoo.dev/",
            "kind": "forum"
          },
          {
            "label": "zoo-mcp issues",
            "url": "https://github.com/KittyCAD/mcp/issues",
            "kind": "github"
          }
        ],
        "contactEmails": [
          "security@zoo.dev"
        ]
      },
      "sources": [
        "https://zoo.dev/blog/introducing-kittycad",
        "https://zoo.dev/blog/stepping-into-ceo",
        "https://zoo.dev/blog/introducing-text-to-cad",
        "https://zoo.dev/press",
        "https://zoo.dev/terms-and-conditions",
        "https://zoo.dev/",
        "https://raw.githubusercontent.com/KittyCAD/.github/main/profile/README.md",
        "https://status.zoo.dev/",
        "https://zoo.dev/.well-known/security.txt",
        "https://www.embedded.ventures/"
      ],
      "ownership": {
        "status": "private",
        "checked": "2026-11-03",
        "sources": [
          "https://zoo.dev/terms-and-conditions",
          "https://zoo.dev/blog/introducing-kittycad",
          "https://www.embedded.ventures/"
        ]
      },
      "investors": [
        {
          "name": "Embedded Ventures",
          "kind": "vc",
          "rounds": [
            "Incubation, 2021"
          ],
          "url": "https://www.embedded.ventures",
          "source": "https://zoo.dev/blog/introducing-kittycad",
          "quote": "Embedded Ventures' purpose is to fund hard tech founders, naturally a tool to help people building hard tech would also have a very happy home there as an incubated company",
          "page": "/investors/embedded-ventures/"
        }
      ]
    },
    "pageJsonUrl": "https://www.anchorterminal.com/tools/zoo.json",
    "live": {
      "slug": "zoo",
      "vendorStatus": {
        "page": "https://status.zoo.dev",
        "indicator": "unknown",
        "summary": "no machine-readable status found",
        "checkedAt": "2026-11-04T15:32:45.470053997Z"
      },
      "versions": [
        {
          "registry": "mcp-registry",
          "name": "io.github.KittyCAD/zoo-mcp",
          "version": "0.33.0",
          "seenAt": "2026-11-04T17:11:44.552009456Z"
        }
      ],
      "securityTxt": {
        "url": "https://zoo.dev/.well-known/security.txt",
        "state": "valid",
        "checkedAt": "2026-11-04T15:53:22.312502342Z"
      },
      "updatedAt": "2026-11-04T17:11:44.552009456Z"
    }
  }
}
