{
  "data": {
    "a": {
      "slug": "penpot",
      "name": "Penpot API + MCP",
      "vendor": "Penpot (Kaleidos)",
      "vendorUrl": "https://penpot.app",
      "kind": "http-api",
      "category": "design",
      "summary": "Open-source design and prototyping tool, used as SaaS at design.penpot.app or self-hosted.",
      "url": "https://www.anchorterminal.com/tools/penpot",
      "markdownUrl": "https://www.anchorterminal.com/tools/penpot.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/penpot.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/penpot.json",
      "dns": "penpot.grade.anchorterminal.com",
      "repo": "https://github.com/penpot/penpot",
      "license": "MPL-2.0",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://design.penpot.app/api/rpc/command",
      "packages": [
        {
          "registry": "npm",
          "name": "@penpot/mcp"
        }
      ],
      "auth": "pat",
      "authNotes": "Personal access tokens from account settings, sent as `Authorization: Token \u003ctoken\u003e`. The hosted MCP URL takes a separate MCP key in the `userToken` query parameter. The local MCP server (`npx @penpot/mcp@stable`) talks to the plugin over a WebSocket on localhost.",
      "pricing": "freemium",
      "pricingNotes": "Cloud Professional plan is free with unlimited files and team members. Unlimited $7 per editor a month, capped at $175 a month. Enterprise $25 per member a month, minimum $950 a month. Private server $50,000 a year. Self-hosting the community edition is free under MPL-2.0, and self-hosted Enterprise starts at $950 a month (https://penpot.app/pricing).",
      "priceSummary": "$7 / seat-mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No payment support in the API or MCP docs.",
        "endpoints": []
      },
      "toolCount": 5,
      "popularity": {
        "githubStars": 60534,
        "npmWeekly": 1259,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://help.penpot.app/technical-guide/integration/",
      "openapi": "https://design.penpot.app/api/main/doc/openapi",
      "capabilities": [
        "design.files",
        "design.components",
        "design.canvas",
        "design.comments",
        "design.code"
      ],
      "tags": [
        "open-source",
        "self-hosted",
        "local",
        "hosted",
        "freemium",
        "free-tier",
        "no-card",
        "mcp",
        "openapi",
        "webhooks"
      ],
      "lastRelease": "2026-10-01",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 43.7,
        "grade": "E",
        "agentReady": false,
        "rank": 1245,
        "ranked": true,
        "rankOf": 1510,
        "categoryRank": 13,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 41,
          "maintenance": 76,
          "payments": 30,
          "reliability": 46,
          "schema": 66,
          "security": 33,
          "transparency": 68
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": -5,
        "negativeNotes": [
          "-3: 2026-05-19, three advisories published together, a critical pre-authenticated account takeover through team-invitation tokens (GHSA-4937-35vc-hqjj), an MCP REPL server bound to 0.0.0.0 with an unauthenticated /execute endpoint allowing remote code execution (GHSA-22qr-rp27-j9wm, high) and authenticated SSRF in remote image import (GHSA-35g2-w7f6-8v9h, high). Fixed and published, so the deduction is reduced (https://github.com/penpot/penpot/security).",
          "-1: 2026-02-16, arbitrary file read through the create-font-variant RPC endpoint (GHSA-xp3f-g8rq-9px2, high). Fixed and published (https://github.com/penpot/penpot/security).",
          "-1: 2.18.0 (2026-09-23) fixed MCP keys being usable as full API access tokens, while the documented hosted setup puts that key in a URL query string, and fixed the MCP REPL starting in multi-user mode on the main bind address. Fixed in the changelog with no advisory (https://github.com/penpot/penpot/blob/develop/CHANGES.md)."
        ],
        "verdict": "MPL-2.0 and self-hostable, with API, webhooks and MCP on the free cloud plan. Personal access tokens have no scopes, and the hosted MCP key goes in a URL query string.",
        "bestFor": "Teams that want design files on their own servers and an agent working alongside a person in the editor.",
        "strengths": [
          "MPL-2.0 and self-hostable, with API, webhooks and MCP on the free cloud plan",
          "MCP `execute_code` reaches the whole plugin API, so an agent can create, move, restyle and delete shapes",
          "OpenAPI description served by every instance",
          "Five releases between 22 July and 1 October 2026, with issues labelled and milestoned within a day"
        ],
        "weaknesses": [
          "Personal access tokens have no scopes, and the hosted MCP key goes in a URL query string",
          "No annotations on MCP tools and no read-only mode",
          "Four advisories in 2026, including MCP REPL remote code execution",
          "The MCP server needs the Penpot plugin open in a browser tab, so it can't run headless",
          "No status page, published rate limits or webhook documentation"
        ],
        "agentNotes": [
          "Call `get-profile` first to check the token, then `get-teams`, `get-projects` and `get-file` to walk down",
          "Ask for JSON with `Accept: application/json`, since some commands default to Transit",
          "Call `high_level_overview` and `penpot_api_info` before `execute_code`. They tell the model what the plugin API can do",
          "Keep the Penpot tab in the foreground. A backgrounded or frozen tab stalls MCP calls",
          "Give tokens an expiry. They carry full account access"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 2.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "E",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 43.7
          }
        ],
        "editorialScores": {
          "ergonomics": 41,
          "maintenance": 76,
          "payments": 30,
          "reliability": 46,
          "schema": 66,
          "security": 33,
          "transparency": 61
        },
        "provenanceScore": 74,
        "checked": {
          "categories": {
            "ergonomics": "2026-10-01",
            "maintenance": "2026-10-01",
            "payments": "2026-10-01",
            "reliability": "2026-10-01",
            "schema": "2026-10-01",
            "security": "2026-10-01",
            "transparency": "2026-10-01"
          },
          "last": "2026-10-01",
          "lastMoved": "2026-10-27",
          "oldest": "2026-10-01",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl -H \"Authorization: Token $PENPOT_TOKEN\" https://design.penpot.app/api/rpc/command/get-profile",
        "claudeCode": "claude mcp add --transport http penpot \"https://design.penpot.app/mcp/stream?userToken=$PENPOT_MCP_KEY\"",
        "config": {
          "mcpServers": {
            "penpot": {
              "url": "https://design.penpot.app/mcp/stream?userToken=${PENPOT_MCP_KEY}"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/design.files",
        "tool": "https://letme.dev/penpot"
      },
      "area": "design-diagrams",
      "unitPrices": [
        {
          "item": "Unlimited plan",
          "unit": "seat-month",
          "usd": 7,
          "note": "per editor, capped at $175 a month"
        },
        {
          "item": "Enterprise plan",
          "unit": "seat-month",
          "usd": 25,
          "note": "minimum $950 a month"
        }
      ],
      "provenance": {
        "legalEntity": "Kaleidos Subsidiary SL",
        "domain": "penpot.app",
        "domainRegistered": "2020-05-26",
        "domainNote": "The site footer names KALEIDOS Subsidiary SL; Penpot is built by Kaleidos in Madrid.",
        "endpointOnVendorDomain": true,
        "terms": "https://penpot.app/terms",
        "privacy": "https://penpot.app/privacy",
        "statusPage": "",
        "changelog": "https://github.com/penpot/penpot/blob/develop/CHANGES.md",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "score": 74
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/penpot.json",
      "live": {
        "slug": "penpot",
        "probe": {
          "target": "https://design.penpot.app/api/rpc/command",
          "method": "get",
          "lastAt": "2026-11-07T23:14:42.587260403Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 114,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 99.95,
          "p50ms24h": 89,
          "p95ms24h": 176,
          "samples24h": 244,
          "samples30d": 7959,
          "days": [
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 266
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-14",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-15",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-16",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-17",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-18",
              "probes": 256,
              "ok": 256
            },
            {
              "date": "2026-10-19",
              "probes": 255,
              "ok": 255
            },
            {
              "date": "2026-10-20",
              "probes": 252,
              "ok": 251
            },
            {
              "date": "2026-10-21",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-22",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-23",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-24",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-25",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-26",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-27",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-28",
              "probes": 250,
              "ok": 249
            },
            {
              "date": "2026-10-29",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-30",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-31",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-11-01",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-11-02",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-11-03",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-11-04",
              "probes": 246,
              "ok": 246
            },
            {
              "date": "2026-11-05",
              "probes": 185,
              "ok": 185
            },
            {
              "date": "2026-11-06",
              "probes": 241,
              "ok": 241
            },
            {
              "date": "2026-11-07",
              "probes": 236,
              "ok": 236
            }
          ]
        },
        "versions": [
          {
            "registry": "github",
            "name": "penpot/penpot",
            "version": "2.18.6",
            "released": "2026-11-04",
            "seenAt": "2026-11-06T23:55:22.817550788Z"
          },
          {
            "registry": "npm",
            "name": "@penpot/mcp",
            "version": "2.15.4",
            "seenAt": "2026-11-06T23:55:22.417983613Z"
          }
        ],
        "githubStars": 62144,
        "npmWeekly": 4643,
        "securityTxt": {
          "url": "https://penpot.app/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:00:08.275148281Z"
        },
        "domain": {
          "domain": "penpot.app",
          "registered": "2020-05-26",
          "source": "https://pubapi.registry.google/rdap/domain/penpot.app",
          "checkedAt": "2026-11-01T14:13:55.258202557Z"
        },
        "pages": [
          {
            "url": "https://raw.githubusercontent.com/penpot/penpot/develop/CHANGES.md",
            "kind": "changelog",
            "status": 304,
            "checkedAt": "2026-11-07T14:22:51.199407963Z",
            "changedAt": "2026-11-06T13:43:51.022330113Z",
            "fingerprint": "9bc7e62cef6f"
          },
          {
            "url": "https://penpot.app/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-11-07T14:16:20.621482442Z",
            "changedAt": "2026-10-20T00:03:04.087779571Z",
            "fingerprint": "6a715396cbb5"
          },
          {
            "url": "https://penpot.app/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:16:23.215360345Z",
            "changedAt": "2026-10-08T18:22:55.558773603Z",
            "fingerprint": "435ffd85741d"
          },
          {
            "url": "https://penpot.app/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:16:25.057494031Z",
            "changedAt": "2026-10-08T18:22:57.540300931Z",
            "fingerprint": "e07ca8b29548"
          }
        ],
        "mcpTools": {
          "url": "https://design.penpot.app/mcp/stream?userToken=$PENPOT_MCP_KEY",
          "checkedAt": "2026-11-07T01:46:46.82538206Z",
          "status": "ok",
          "protocol": "2026-07-28",
          "tools": [
            {
              "name": "execute_code",
              "description": "Executes JavaScript code in the Penpot plugin context.\nIMPORTANT: Before using this tool, make sure you have read the 'Penpot High-Level Overview' and know which Penpot API functionality is necessary and how to use it.\nYou have access two main objects: `penpot` (the Penpot API, of type `Penpot`), `penpotUtils`, and `storage`.\n`storage` is an object in which arbitrary data can be stored, simply by adding a new attribute; stored attributes can be referenced in future calls to this tool, so any intermediate results that could come in handy later should be stored in `storage` instead of just a fleeting variable; you can also store functions and thus build up a library).\nThink of the code being executed as the body of a function: The tool call returns whatever you return in the applicable `return` statement, if any. You can return arbitrary JS objects; no need to apply JSON.stringify.\nIf an exception occurs, the exception's message will be returned to you.\nAny output that you generate via the `console` object will be returned to you separately; so you may use it to track what your code is doing, but you should *only* do so only if there is an ACTUAL NEED for this! VERY IMPORTANT: Don't use logging prematurely! NEVER log the data you are returning, as you will otherwise receive it twice!\nVERY IMPORTANT: In general, try a simple approach first, and only if it fails, try more complex code that involves handling different cases (in particular error cases) and that applies logging.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "code": {
                    "description": "The JavaScript code to execute in the plugin context.",
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "code"
                ],
                "type": "object"
              }
            },
            {
              "name": "high_level_overview",
              "description": "Returns basic high-level instructions on the usage of Penpot-related tools and the Penpot API. If you have already read the 'Penpot High-Level Overview', you must not call this tool.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {},
                "type": "object"
              }
            },
            {
              "name": "penpot_api_info",
              "description": "Retrieves Penpot API documentation for types and their members.Be sure to read the 'Penpot High-Level Overview' first.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "member": {
                    "type": "string"
                  },
                  "type": {
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "type"
                ],
                "type": "object"
              }
            },
            {
              "name": "export_shape",
              "description": "Exports a shape (or a shape's image fill) from the Penpot design to a PNG or SVG image, such that you can get an impression of what it looks like.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "format": {
                    "default": "png",
                    "description": "The output format, either 'png' (default) or 'svg'.",
                    "enum": [
                      "svg",
                      "png"
                    ],
                    "type": "string"
                  },
                  "mode": {
                    "default": "shape",
                    "description": "The export mode: either 'shape' (full shape as it appears in the design, including descendants; the default) or 'fill' (export the raw image that is used as a fill for the shape; PNG format only)",
                    "enum": [
                      "shape",
                      "fill"
                    ],
                    "type": "string"
                  },
                  "shapeId": {
                    "description": "Identifier of the shape to export. Special identifiers you can use: 'selection' (first shape currently selected by the user), 'page' (entire current page)",
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "shapeId"
                ],
                "type": "object"
              }
            }
          ],
          "schemaTokens": 850,
          "changedAt": "2026-11-07T01:46:46.82538206Z",
          "check": {
            "checker": "anchor-check/1.0",
            "totalTokens": 850,
            "counts": {
              "error": 0,
              "note": 1,
              "warn": 6
            },
            "findings": [
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "penpot_api_info",
                "message": "none of its 2 parameters has a description",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "execute_code",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "export_shape",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"export\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "high_level_overview",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "penpot_api_info",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"info\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC20",
                "severity": "warn",
                "tool": "high_level_overview",
                "message": "the description steers the model",
                "fix": "Say what the tool is good at and let the model choose."
              },
              {
                "rule": "TC24",
                "severity": "note",
                "message": "4 of 4 tools have no outputSchema",
                "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
              }
            ]
          }
        },
        "github": {
          "repo": "penpot/penpot",
          "checkedAt": "2026-11-02T09:15:34.867304922Z",
          "stars": 61977,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-11-01T22:40:05Z",
          "openIssues": 833,
          "openPRs": 108,
          "issuesOpened90d": 749,
          "issuesClosed90d": 584,
          "prsMerged90d": 789,
          "ci": {
            "branch": "develop",
            "runs": 50,
            "success": 40,
            "failure": 4,
            "other": 6,
            "latest": "failure",
            "latestAt": "2026-11-01T18:28:19Z"
          },
          "advisories": [
            {
              "ghsa": "GHSA-4p97-v4wg-jxfx",
              "severity": "medium",
              "published": "2026-09-25T19:05:43Z"
            },
            {
              "ghsa": "GHSA-j83r-hph3-xpxc",
              "cve": "CVE-2026-105687",
              "severity": "medium",
              "published": "2026-09-25T19:05:25Z"
            },
            {
              "ghsa": "GHSA-fwm4-hm9f-rmcp",
              "cve": "CVE-2026-105684",
              "severity": "medium",
              "published": "2026-09-25T19:05:01Z"
            },
            {
              "ghsa": "GHSA-cjm5-wh82-hwr2",
              "cve": "CVE-2026-105685",
              "severity": "medium",
              "published": "2026-09-25T19:04:33Z"
            },
            {
              "ghsa": "GHSA-4f36-m4hj-cv86",
              "cve": "CVE-2026-105691",
              "severity": "critical",
              "published": "2026-09-25T19:03:39Z"
            },
            {
              "ghsa": "GHSA-mx4v-cmxq-644v",
              "cve": "CVE-2026-105688",
              "severity": "medium",
              "published": "2026-09-25T19:03:13Z"
            },
            {
              "ghsa": "GHSA-mj9f-5cwq-7p3q",
              "cve": "CVE-2026-105690",
              "severity": "medium",
              "published": "2026-09-25T19:02:42Z"
            },
            {
              "ghsa": "GHSA-8257-pm4f-cfhq",
              "cve": "CVE-2026-105692",
              "severity": "medium",
              "published": "2026-09-25T19:01:18Z"
            },
            {
              "ghsa": "GHSA-xg6f-5v5x-g4w2",
              "cve": "CVE-2026-105694",
              "severity": "medium",
              "published": "2026-09-25T19:00:08Z"
            },
            {
              "ghsa": "GHSA-5vrm-3c6w-gjfv",
              "cve": "CVE-2026-105695",
              "severity": "medium",
              "published": "2026-09-25T18:59:43Z"
            },
            {
              "ghsa": "GHSA-w8mf-4x22-24gg",
              "cve": "CVE-2026-105693",
              "severity": "medium",
              "published": "2026-09-25T18:59:11Z"
            },
            {
              "ghsa": "GHSA-x9xg-qphx-8grr",
              "cve": "CVE-2026-105696",
              "severity": "medium",
              "published": "2026-09-25T18:58:35Z"
            },
            {
              "ghsa": "GHSA-wrcr-m7p8-m2c4",
              "severity": "low",
              "published": "2026-09-25T18:57:00Z"
            },
            {
              "ghsa": "GHSA-ch2q-6x56-qg5r",
              "severity": "low",
              "published": "2026-09-25T18:55:42Z"
            },
            {
              "ghsa": "GHSA-852x-m8p9-558v",
              "severity": "low",
              "published": "2026-09-25T18:55:08Z"
            },
            {
              "ghsa": "GHSA-wxgm-8qjw-x445",
              "cve": "CVE-2026-105689",
              "severity": "high",
              "published": "2026-09-25T18:54:07Z"
            },
            {
              "ghsa": "GHSA-qvq5-c536-pmx8",
              "cve": "CVE-2026-105686",
              "severity": "medium",
              "published": "2026-09-25T18:53:40Z"
            },
            {
              "ghsa": "GHSA-r8wx-23q6-w3gf",
              "severity": "low",
              "published": "2026-08-19T12:58:01Z"
            },
            {
              "ghsa": "GHSA-vc72-6r45-q988",
              "cve": "CVE-2026-47665",
              "severity": "high",
              "published": "2026-08-19T06:56:20Z"
            },
            {
              "ghsa": "GHSA-w5hh-gj5c-5wpc",
              "cve": "CVE-2026-47666",
              "severity": "high",
              "published": "2026-08-19T06:56:00Z"
            },
            {
              "ghsa": "GHSA-35g2-w7f6-8v9h",
              "cve": "CVE-2026-45806",
              "severity": "high",
              "published": "2026-05-19T10:42:23Z"
            },
            {
              "ghsa": "GHSA-22qr-rp27-j9wm",
              "cve": "CVE-2026-45805",
              "severity": "high",
              "published": "2026-05-19T10:41:54Z"
            },
            {
              "ghsa": "GHSA-4937-35vc-hqjj",
              "cve": "CVE-2026-44986",
              "severity": "critical",
              "published": "2026-05-19T10:37:41Z"
            },
            {
              "ghsa": "GHSA-xp3f-g8rq-9px2",
              "cve": "CVE-2026-26202",
              "severity": "high",
              "published": "2026-02-16T13:30:25Z"
            }
          ],
          "replies": {
            "sampled": 25,
            "unanswered": 19,
            "medianDays": 0.5
          }
        },
        "updatedAt": "2026-11-07T23:14:42.587260403Z"
      }
    },
    "answer": "Penpot API + MCP scores 43.7 (E) on agent readiness against UX Pilot MCP server's 33 (F), and leads in 5 of 7 scored categories. UX Pilot MCP server leads on agent ergonomics and security \u0026 auth.",
    "b": {
      "slug": "ux-pilot-mcp",
      "name": "UX Pilot MCP server",
      "vendor": "UX Pilot",
      "vendorUrl": "https://uxpilot.ai",
      "kind": "mcp",
      "category": "design",
      "summary": "UX Pilot's hosted MCP server lets an agent find, organise and import design work, run UX reviews and generate React prototypes on the UX Pilot canvas, over OAuth or an API key, with deletes only after the user confirms.",
      "url": "https://www.anchorterminal.com/tools/ux-pilot-mcp",
      "markdownUrl": "https://www.anchorterminal.com/tools/ux-pilot-mcp.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/ux-pilot-mcp.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/ux-pilot-mcp.json",
      "dns": "ux-pilot-mcp.grade.anchorterminal.com",
      "repo": "https://github.com/uxpilot-ai/uxpilot-mcp",
      "transports": [
        "streamable-http"
      ],
      "remoteUrl": "https://mcp.uxpilot.net/mcp",
      "packages": [],
      "auth": "oauth",
      "authNotes": "Native OAuth sign-in recommended, or an Authorization: Bearer API key as a fallback. Set up from Account Settings, MCP Access.",
      "pricing": "freemium",
      "pricingNotes": "A free tier to start generating; paid plans on the pricing page, which renders with script (checked 2026-11-07).",
      "priceSummary": "Freemium",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 on the MCP docs or pricing page (checked 2026-11-07).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-07"
      },
      "docsUrl": "https://uxpilot.ai/mcp",
      "registryName": "ai.uxpilot/uxpilot",
      "capabilities": [
        "design.canvas",
        "design.code",
        "design.review"
      ],
      "tags": [
        "official",
        "hosted",
        "mcp",
        "remote-mcp",
        "oauth",
        "api-key",
        "freemium",
        "free-tier",
        "mcp-registry"
      ],
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 33,
        "grade": "F",
        "agentReady": false,
        "rank": 1410,
        "ranked": true,
        "rankOf": 1510,
        "categoryRank": 17,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 46,
          "maintenance": 45,
          "payments": 20,
          "reliability": 15,
          "schema": 45,
          "security": 39,
          "transparency": 22
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "low",
          "date": "2026-11-07"
        },
        "negative": 0,
        "verdict": "UX Pilot's MCP server reaches its design canvas, reviews and React prototypes from any agent, with a careful split between organising and deleting. Little else is public, no status page, limits, errors or readable legal pages.",
        "bestFor": "Designers on UX Pilot who want an agent to organise screens, review UX and build React prototypes.",
        "strengths": [
          "Organise tools never delete; deletes need the user to confirm",
          "Grouped actions with a help tool for fields and examples",
          "OAuth, or a key as a fallback",
          "Free tier"
        ],
        "weaknesses": [
          "No status page, limits or error docs",
          "Terms and privacy not readable without script",
          "No changelog for a 3.0 server"
        ],
        "agentNotes": [
          "Ask the help tool for an action's fields before calling it",
          "Delete only after the user confirms",
          "Treat imported AI output and comments as untrusted"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "low",
            "grade": "F",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 33
          }
        ],
        "editorialScores": {
          "ergonomics": 46,
          "maintenance": 45,
          "payments": 20,
          "reliability": 15,
          "schema": 45,
          "security": 39,
          "transparency": 5
        },
        "provenanceScore": 38,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-07",
            "maintenance": "2026-11-07",
            "payments": "2026-11-07",
            "reliability": "2026-11-07",
            "schema": "2026-11-07",
            "security": "2026-11-07",
            "transparency": "2026-11-07"
          },
          "last": "2026-11-07",
          "oldest": "2026-11-07",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "claudeCode": "claude mcp add ux-pilot --transport http https://mcp.uxpilot.net/mcp",
        "config": {
          "mcpServers": {
            "ux-pilot": {
              "url": "https://mcp.uxpilot.net/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/design.canvas",
        "tool": "https://letme.dev/ux-pilot-mcp"
      },
      "area": "design-diagrams",
      "provenance": {
        "legalEntity": "UX Pilot",
        "domain": "uxpilot.ai",
        "domainRegistered": "",
        "domainNote": "Not looked up: RDAP isn't requested under the 1 November 2026 rules.",
        "endpointOnVendorDomain": true,
        "terms": "",
        "privacy": "",
        "statusPage": "",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-11-07",
        "notes": [
          "The terms and privacy pages render with script, so the legal entity wasn't read."
        ],
        "score": 38
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/ux-pilot-mcp.json",
      "live": {
        "slug": "ux-pilot-mcp",
        "probe": {
          "target": "https://mcp.uxpilot.net/mcp",
          "method": "mcp-initialize",
          "lastAt": "2026-11-07T23:14:56.455790645Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 179,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 233,
          "p95ms24h": 515,
          "samples24h": 46,
          "samples30d": 46,
          "days": [
            {
              "date": "2026-11-07",
              "probes": 46,
              "ok": 46
            }
          ]
        },
        "updatedAt": "2026-11-07T23:14:56.455790645Z"
      }
    },
    "edges": [
      {
        "by": 46,
        "category": "transparency",
        "leads": "penpot",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "MPL-2.0, including the MCP server (30). Privacy policy of 5 August 2025 names Kaleidos Subsidiary S.L., PostHog and Google Analytics, keeps data 'as long as the commercial relationship is maintained', points to a DPA in the terms and says nothing about AI training or data locations (15 of 30). Changes land in CHANGES.md, and the separate penpot-mcp repository was archived with a pointer when it moved, but there's no deprecation policy. The MCP server's move to SDK v2 removed SSE on 23 September with no changelog line we could find (8 of 20). The cloud names some processors without locations, and we didn't check self-hosted telemetry defaults (8 of 20).",
          "b": "Terms and privacy render with script and weren't readable (0). Data handling not read (0). A tool that maps old tool names to new calls eased the 3.0 change, no dates (5 of 20). Subprocessors not found (0). 0 + 0 + 5 + 0 = 5."
        },
        "scores": {
          "a": 68,
          "b": 22
        }
      },
      {
        "by": 31,
        "category": "reliability",
        "leads": "penpot",
        "name": "Reliability",
        "reasons": {
          "a": "Penpot runs as a cloud service and as self-hosted software, so this is the average of the two rubrics. Cloud (10). No status page per the 30 September check (0), so no readable incident history (5 of 30). No rate limits, 429 guidance or SLA published (0, 0, 0). The RPC API is documented and in use, while the repository's own notes call MCP multi-user mode 'under development and not yet fully integrated' (5 of 10). Self-hosted (82). Official Docker images and install guides (20). Backend, frontend, end-to-end and MCP test workflows run on push and pull request, pass state not visible (20 of 25). 706 open issues, actively labelled with milestones, and several regressions opened on 1 October are marked release blockers for 2.19.0 (15 of 25). CHANGES.md records every release, without an API versioning policy (12 of 15). Version 2.18 (15).",
          "b": "No status page found (0). No history (5). No limits found (0). No retry guidance (0). No SLA (0). Not labelled beta (10). 0 + 5 + 0 + 0 + 0 + 10 = 15."
        },
        "scores": {
          "a": 46,
          "b": 15
        }
      },
      {
        "by": 31,
        "category": "maintenance",
        "leads": "penpot",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "2.18.1 on 2026-10-01 (30). 2.17.0 (22 July), 2.17.1 (17 August), 2.17.2 (27 August), 2.18.0 (23 September) and 2.18.1 inside 90 days (20). Issues are labelled and given milestones within a day, and an OAuth-for-MCP issue opened on 1 October (18 of 25). Not in the official MCP registry and no official API client (0). MCP tests in CI and dependencies updated on 29 September (8 of 10).",
          "b": "Registry 3.0.0 and repository on 4 November 2026 (30). Dated releases not found (0). Issues not read (0). Official registry entry ai.uxpilot/uxpilot (15). README-only repository (0). 30 + 0 + 0 + 15 + 0 = 45. Registry presence read from Anchor Terminal's own daily import of the official MCP registry (/api/v1/registry.json, 6 November 2026), not the registry's API."
        },
        "scores": {
          "a": 76,
          "b": 45
        }
      },
      {
        "by": 21,
        "category": "schema",
        "leads": "penpot",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "Each instance serves API docs and an OpenAPI description generated from the backend at /api/main/doc, and the MCP tools declare zod schemas (25). No llms.txt. The MCP server's `high_level_overview` and `penpot_api_info` tools hand the model its docs instead (3 of 10). RPC docs are generated with little prose. MCP descriptions are long and tell the model to read the overview before `execute_code` (12 of 20). RPC inputs are typed, but the main MCP tool takes one JavaScript string (9 of 15). A curl example for `get-profile`. No documented error format, and the integration guide says 'we do not have any specific documentation for the webhooks yet' (5 of 15). CHANGES.md per release (12 of 15).",
          "b": "Schemas not read without sign-in (15 of 25). No llms.txt read (0). Tools grouped by job (find, organise, delete, import, review, React), with a help tool that maps old names to new calls (14 of 20). Inputs not verifiable (5 of 15). A tool that returns any action's fields with an example (8 of 15). Registry 3.0.0 on 4 November; no changelog (3 of 15). 15 + 0 + 14 + 5 + 8 + 3 = 45."
        },
        "scores": {
          "a": 66,
          "b": 45
        }
      },
      {
        "by": 10,
        "category": "payments",
        "leads": "penpot",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "No machine payment protocol (0). Plan prices are public, Unlimited $7 an editor a month capped at $175 and Enterprise $25 a member, with no per-call price (10 of 20). The cloud Professional plan is free with no card (20). A person signs up and creates the token or MCP key in account settings (0). Self-hosting the community edition is free under MPL-2.0.",
          "b": "No machine payment protocol (0). Pricing behind script, not read (0). Free tier (20). A person signs up (0). 0 + 0 + 20 + 0 = 20."
        },
        "scores": {
          "a": 30,
          "b": 20
        }
      },
      {
        "by": 6,
        "category": "security",
        "leads": "ux-pilot-mcp",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "Personal access tokens can expire after 30 to 180 days or never and can be deleted at any time, but carry no scopes. The hosted MCP URL takes its key in the `userToken` query parameter as the documented setup, and until 2.18.0 (23 September 2026) an MCP key also worked as a full API token, so less 10 (10 of 30). No read-only mode. `execute_code` runs arbitrary JavaScript against the plugin API, which can delete shapes, and the docs only advise starting with read-only operations. The plugin must stay open in the user's tab (5 of 20). Shared files and library content reach the model with no injection guidance (3 of 15). Audit events exist in the codebase, but we found no operator-facing call log (5 of 15). SECURITY.md routes reports through GitHub advisories, and four were published in 2026. No security.txt per the 30 September check, and no bug bounty or certification found (10 of 20).",
          "b": "OAuth or a bearer key; scopes not published (20 of 30). Organise tools never delete, and deletes need confirmation (14 of 20). Imported AI output and comments are third-party text; no injection guidance (3 of 15). No audit log (0). No security programme found (2 of 20). 20 + 14 + 3 + 0 + 2 = 39."
        },
        "scores": {
          "a": 33,
          "b": 39
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "MCP server",
        "name": "Kind"
      },
      {
        "a": "Penpot (Kaleidos)",
        "b": "UX Pilot",
        "name": "Vendor"
      },
      {
        "a": "https://design.penpot.app/api/rpc/command",
        "b": "https://mcp.uxpilot.net/mcp",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "Token",
        "b": "OAuth",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MPL-2.0",
        "b": "none",
        "name": "Licence"
      },
      {
        "a": "5",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "not listed",
        "b": "ai.uxpilot/uxpilot",
        "name": "MCP registry"
      },
      {
        "a": "2026-10-01",
        "b": "none",
        "name": "Last release"
      },
      {
        "a": "2025-08-05",
        "b": "no document linked",
        "name": "Terms last updated"
      },
      {
        "a": "2025-08-05",
        "b": "no document linked",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Customer content may train models"
      },
      {
        "a": "yes",
        "b": "not read yet",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "yes",
        "b": "not read yet",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "61k stars, 1.3k npm/wk",
        "b": "none",
        "name": "Popularity"
      },
      {
        "a": "2.5/5 (2)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Penpot API + MCP scores 43.7 (E) on agent readiness against UX Pilot MCP server's 33 (F), and leads in 5 of 7 scored categories. UX Pilot MCP server leads on agent ergonomics and security \u0026 auth.",
        "question": "Which is better for AI agents, Penpot API + MCP or UX Pilot MCP server?"
      },
      {
        "answer": "Penpot API + MCP needs an access token. UX Pilot MCP server uses an OAuth sign-in.",
        "question": "Do Penpot API + MCP and UX Pilot MCP server need an API key?"
      },
      {
        "answer": "Yes. Penpot API + MCP has a hosted endpoint at https://design.penpot.app/api/rpc/command and UX Pilot MCP server at https://mcp.uxpilot.net/mcp.",
        "question": "Can an agent call Penpot API + MCP and UX Pilot MCP server without installing anything?"
      },
      {
        "answer": "Penpot API + MCP is open source (MPL-2.0). No open-source release is listed for UX Pilot MCP server.",
        "question": "Are Penpot API + MCP and UX Pilot MCP server open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 46 against 15",
          "Schema \u0026 documentation, 66 against 45",
          "Payments \u0026 pricing, 30 against 20",
          "Maintenance \u0026 community, 76 against 45",
          "Transparency \u0026 trust, 68 against 22"
        ],
        "also": [
          "Free to start without a card",
          "Open source"
        ],
        "goodFor": "Teams that want design files on their own servers and an agent working alongside a person in the editor.",
        "slug": "penpot",
        "watchFor": "Personal access tokens have no scopes, and the hosted MCP key goes in a URL query string"
      },
      {
        "aheadOn": [
          "Agent ergonomics, 46 against 41",
          "Security \u0026 auth, 39 against 33"
        ],
        "also": [
          "No incidents deducted, where Penpot API + MCP loses 5 points for them"
        ],
        "goodFor": "Designers on UX Pilot who want an agent to organise screens, review UX and build React prototypes.",
        "slug": "ux-pilot-mcp",
        "watchFor": "No status page, limits or error docs"
      }
    ],
    "history": {
      "penpot": [
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-27",
          "delta": 0.2,
          "from": 43.5,
          "fromGrade": "E",
          "to": 43.7,
          "toGrade": "E"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-08",
          "delta": -0.3,
          "from": 43.8,
          "fromGrade": "E",
          "to": 43.5,
          "toGrade": "E"
        }
      ],
      "ux-pilot-mcp": null
    },
    "job": {
      "capability": "design.canvas",
      "name": "Design canvases"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/figma-mcp-vs-penpot.json",
        "title": "Figma API + MCP vs Penpot API + MCP",
        "url": "https://www.anchorterminal.com/compare/figma-mcp-vs-penpot"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-penpot.json",
        "title": "Framelink MCP for Figma vs Penpot API + MCP",
        "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-penpot"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framer-vs-penpot.json",
        "title": "Framer Server API vs Penpot API + MCP",
        "url": "https://www.anchorterminal.com/compare/framer-vs-penpot"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kite-new-vs-penpot.json",
        "title": "Kite vs Penpot API + MCP",
        "url": "https://www.anchorterminal.com/compare/kite-new-vs-penpot"
      },
      {
        "json": "https://www.anchorterminal.com/compare/miro-vs-penpot.json",
        "title": "Miro API + MCP vs Penpot API + MCP",
        "url": "https://www.anchorterminal.com/compare/miro-vs-penpot"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pen-dev-vs-penpot.json",
        "title": "pen.dev vs Penpot API + MCP",
        "url": "https://www.anchorterminal.com/compare/pen-dev-vs-penpot"
      },
      {
        "json": "https://www.anchorterminal.com/compare/penpot-vs-sketch.json",
        "title": "Penpot API + MCP vs Sketch",
        "url": "https://www.anchorterminal.com/compare/penpot-vs-sketch"
      },
      {
        "json": "https://www.anchorterminal.com/compare/penpot-vs-subframe.json",
        "title": "Penpot API + MCP vs Subframe",
        "url": "https://www.anchorterminal.com/compare/penpot-vs-subframe"
      },
      {
        "json": "https://www.anchorterminal.com/compare/penpot-vs-zeplin.json",
        "title": "Penpot API + MCP vs Zeplin",
        "url": "https://www.anchorterminal.com/compare/penpot-vs-zeplin"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-ux-pilot-mcp.json",
        "title": "Framelink MCP for Figma vs UX Pilot MCP server",
        "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-ux-pilot-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/impeccable-vs-penpot.json",
        "title": "Impeccable vs Penpot API + MCP",
        "url": "https://www.anchorterminal.com/compare/impeccable-vs-penpot"
      },
      {
        "json": "https://www.anchorterminal.com/compare/impeccable-vs-ux-pilot-mcp.json",
        "title": "Impeccable vs UX Pilot MCP server",
        "url": "https://www.anchorterminal.com/compare/impeccable-vs-ux-pilot-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magic-patterns-vs-penpot.json",
        "title": "Magic Patterns vs Penpot API + MCP",
        "url": "https://www.anchorterminal.com/compare/magic-patterns-vs-penpot"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magic-patterns-vs-ux-pilot-mcp.json",
        "title": "Magic Patterns vs UX Pilot MCP server",
        "url": "https://www.anchorterminal.com/compare/magic-patterns-vs-ux-pilot-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ux-pilot-mcp-vs-zeplin.json",
        "title": "UX Pilot MCP server vs Zeplin",
        "url": "https://www.anchorterminal.com/compare/ux-pilot-mcp-vs-zeplin"
      },
      {
        "json": "https://www.anchorterminal.com/compare/figma-mcp-vs-ux-pilot-mcp.json",
        "title": "Figma API + MCP vs UX Pilot MCP server",
        "url": "https://www.anchorterminal.com/compare/figma-mcp-vs-ux-pilot-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framer-vs-ux-pilot-mcp.json",
        "title": "Framer Server API vs UX Pilot MCP server",
        "url": "https://www.anchorterminal.com/compare/framer-vs-ux-pilot-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kite-new-vs-ux-pilot-mcp.json",
        "title": "Kite vs UX Pilot MCP server",
        "url": "https://www.anchorterminal.com/compare/kite-new-vs-ux-pilot-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/melius-vs-penpot.json",
        "title": "Melius vs Penpot API + MCP",
        "url": "https://www.anchorterminal.com/compare/melius-vs-penpot"
      },
      {
        "json": "https://www.anchorterminal.com/compare/melius-vs-ux-pilot-mcp.json",
        "title": "Melius vs UX Pilot MCP server",
        "url": "https://www.anchorterminal.com/compare/melius-vs-ux-pilot-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/miro-vs-ux-pilot-mcp.json",
        "title": "Miro API + MCP vs UX Pilot MCP server",
        "url": "https://www.anchorterminal.com/compare/miro-vs-ux-pilot-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pen-dev-vs-ux-pilot-mcp.json",
        "title": "pen.dev vs UX Pilot MCP server",
        "url": "https://www.anchorterminal.com/compare/pen-dev-vs-ux-pilot-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/sketch-vs-ux-pilot-mcp.json",
        "title": "Sketch vs UX Pilot MCP server",
        "url": "https://www.anchorterminal.com/compare/sketch-vs-ux-pilot-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/subframe-vs-ux-pilot-mcp.json",
        "title": "Subframe vs UX Pilot MCP server",
        "url": "https://www.anchorterminal.com/compare/subframe-vs-ux-pilot-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/penpot-vs-uxkin-agent.json",
        "title": "Penpot API + MCP vs UXKIN",
        "url": "https://www.anchorterminal.com/compare/penpot-vs-uxkin-agent"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 31,
        "edge": "penpot",
        "key": "reliability",
        "name": "Reliability",
        "penpot": 46,
        "ux-pilot-mcp": 15,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 21,
        "edge": "penpot",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "penpot": 66,
        "ux-pilot-mcp": 45,
        "weight": 13
      },
      {
        "by": 5,
        "edge": "ux-pilot-mcp",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "penpot": 41,
        "ux-pilot-mcp": 46,
        "weight": 13
      },
      {
        "by": 6,
        "edge": "ux-pilot-mcp",
        "key": "security",
        "name": "Security \u0026 auth",
        "penpot": 33,
        "ux-pilot-mcp": 39,
        "weight": 14
      },
      {
        "by": 10,
        "edge": "penpot",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "penpot": 30,
        "ux-pilot-mcp": 20,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 31,
        "edge": "penpot",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "penpot": 76,
        "ux-pilot-mcp": 45,
        "weight": 7
      },
      {
        "by": 46,
        "edge": "penpot",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "penpot": 68,
        "ux-pilot-mcp": 22,
        "weight": 7
      }
    ],
    "summary": "Penpot API + MCP scores 43.7 (E) on agent readiness against UX Pilot MCP server's 33 (F), and leads in 5 of 7 scored categories. UX Pilot MCP server leads on agent ergonomics and security \u0026 auth. Both do design canvases.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "penpot": "MPL-2.0 and self-hostable, with API, webhooks and MCP on the free cloud plan. Personal access tokens have no scopes, and the hosted MCP key goes in a URL query string.",
      "ux-pilot-mcp": "UX Pilot's MCP server reaches its design canvas, reviews and React prototypes from any agent, with a careful split between organising and deleting. Little else is public, no status page, limits, errors or readable legal pages."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/penpot-vs-ux-pilot-mcp",
    "json": "https://www.anchorterminal.com/compare/penpot-vs-ux-pilot-mcp.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/penpot-vs-ux-pilot-mcp.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/penpot-vs-ux-pilot-mcp.min.md"
  },
  "markdown": "Penpot API + MCP scores 43.7 (E) on agent readiness against UX Pilot MCP server's 33 (F), and leads in 5 of 7 scored categories. UX Pilot MCP server leads on agent ergonomics and security \u0026 auth. Both do design canvases.\n\n- Penpot API + MCP: grade E, 43.7/100, rank #1245 of 1510. Markdown https://www.anchorterminal.com/tools/penpot.md · JSON https://www.anchorterminal.com/api/v1/tools/penpot.json\n- UX Pilot MCP server: grade F, 33/100, rank #1410 of 1510. Markdown https://www.anchorterminal.com/tools/ux-pilot-mcp.md · JSON https://www.anchorterminal.com/api/v1/tools/ux-pilot-mcp.json\n- Best design workspace and canvas APIs for AI agents: https://www.anchorterminal.com/best/design/index.md\n- All 133 design comparisons: https://www.anchorterminal.com/compare/design/index.md\n\n## Which one, for what\n\n### Penpot API + MCP (E)\n\nGood for: Teams that want design files on their own servers and an agent working alongside a person in the editor.\n\nAhead on:\n- Reliability, 46 against 15\n- Schema \u0026 documentation, 66 against 45\n- Payments \u0026 pricing, 30 against 20\n- Maintenance \u0026 community, 76 against 45\n- Transparency \u0026 trust, 68 against 22\n\nAlso in its favour:\n- Free to start without a card\n- Open source\n\nWatch for: Personal access tokens have no scopes, and the hosted MCP key goes in a URL query string\n\n### UX Pilot MCP server (F)\n\nGood for: Designers on UX Pilot who want an agent to organise screens, review UX and build React prototypes.\n\nAhead on:\n- Agent ergonomics, 46 against 41\n- Security \u0026 auth, 39 against 33\n\nAlso in its favour:\n- No incidents deducted, where Penpot API + MCP loses 5 points for them\n\nWatch for: No status page, limits or error docs\n\n\n## Why the edge\n\n### Transparency \u0026 trust: Penpot API + MCP +46\n\n- Penpot API + MCP (68): MPL-2.0, including the MCP server (30). Privacy policy of 5 August 2025 names Kaleidos Subsidiary S.L., PostHog and Google Analytics, keeps data 'as long as the commercial relationship is maintained', points to a DPA in the terms and says nothing about AI training or data locations (15 of 30). Changes land in CHANGES.md, and the separate penpot-mcp repository was archived with a pointer when it moved, but there's no deprecation policy. The MCP server's move to SDK v2 removed SSE on 23 September with no changelog line we could find (8 of 20). The cloud names some processors without locations, and we didn't check self-hosted telemetry defaults (8 of 20).\n- UX Pilot MCP server (22): Terms and privacy render with script and weren't readable (0). Data handling not read (0). A tool that maps old tool names to new calls eased the 3.0 change, no dates (5 of 20). Subprocessors not found (0). 0 + 0 + 5 + 0 = 5.\n\n### Reliability: Penpot API + MCP +31\n\n- Penpot API + MCP (46): Penpot runs as a cloud service and as self-hosted software, so this is the average of the two rubrics. Cloud (10). No status page per the 30 September check (0), so no readable incident history (5 of 30). No rate limits, 429 guidance or SLA published (0, 0, 0). The RPC API is documented and in use, while the repository's own notes call MCP multi-user mode 'under development and not yet fully integrated' (5 of 10). Self-hosted (82). Official Docker images and install guides (20). Backend, frontend, end-to-end and MCP test workflows run on push and pull request, pass state not visible (20 of 25). 706 open issues, actively labelled with milestones, and several regressions opened on 1 October are marked release blockers for 2.19.0 (15 of 25). CHANGES.md records every release, without an API versioning policy (12 of 15). Version 2.18 (15).\n- UX Pilot MCP server (15): No status page found (0). No history (5). No limits found (0). No retry guidance (0). No SLA (0). Not labelled beta (10). 0 + 5 + 0 + 0 + 0 + 10 = 15.\n\n### Maintenance \u0026 community: Penpot API + MCP +31\n\n- Penpot API + MCP (76): 2.18.1 on 2026-10-01 (30). 2.17.0 (22 July), 2.17.1 (17 August), 2.17.2 (27 August), 2.18.0 (23 September) and 2.18.1 inside 90 days (20). Issues are labelled and given milestones within a day, and an OAuth-for-MCP issue opened on 1 October (18 of 25). Not in the official MCP registry and no official API client (0). MCP tests in CI and dependencies updated on 29 September (8 of 10).\n- UX Pilot MCP server (45): Registry 3.0.0 and repository on 4 November 2026 (30). Dated releases not found (0). Issues not read (0). Official registry entry ai.uxpilot/uxpilot (15). README-only repository (0). 30 + 0 + 0 + 15 + 0 = 45. Registry presence read from Anchor Terminal's own daily import of the official MCP registry (/api/v1/registry.json, 6 November 2026), not the registry's API.\n\n### Schema \u0026 documentation: Penpot API + MCP +21\n\n- Penpot API + MCP (66): Each instance serves API docs and an OpenAPI description generated from the backend at /api/main/doc, and the MCP tools declare zod schemas (25). No llms.txt. The MCP server's `high_level_overview` and `penpot_api_info` tools hand the model its docs instead (3 of 10). RPC docs are generated with little prose. MCP descriptions are long and tell the model to read the overview before `execute_code` (12 of 20). RPC inputs are typed, but the main MCP tool takes one JavaScript string (9 of 15). A curl example for `get-profile`. No documented error format, and the integration guide says 'we do not have any specific documentation for the webhooks yet' (5 of 15). CHANGES.md per release (12 of 15).\n- UX Pilot MCP server (45): Schemas not read without sign-in (15 of 25). No llms.txt read (0). Tools grouped by job (find, organise, delete, import, review, React), with a help tool that maps old names to new calls (14 of 20). Inputs not verifiable (5 of 15). A tool that returns any action's fields with an example (8 of 15). Registry 3.0.0 on 4 November; no changelog (3 of 15). 15 + 0 + 14 + 5 + 8 + 3 = 45.\n\n### Payments \u0026 pricing: Penpot API + MCP +10\n\n- Penpot API + MCP (30): No machine payment protocol (0). Plan prices are public, Unlimited $7 an editor a month capped at $175 and Enterprise $25 a member, with no per-call price (10 of 20). The cloud Professional plan is free with no card (20). A person signs up and creates the token or MCP key in account settings (0). Self-hosting the community edition is free under MPL-2.0.\n- UX Pilot MCP server (20): No machine payment protocol (0). Pricing behind script, not read (0). Free tier (20). A person signs up (0). 0 + 0 + 20 + 0 = 20.\n\n### Security \u0026 auth: UX Pilot MCP server +6\n\n- Penpot API + MCP (33): Personal access tokens can expire after 30 to 180 days or never and can be deleted at any time, but carry no scopes. The hosted MCP URL takes its key in the `userToken` query parameter as the documented setup, and until 2.18.0 (23 September 2026) an MCP key also worked as a full API token, so less 10 (10 of 30). No read-only mode. `execute_code` runs arbitrary JavaScript against the plugin API, which can delete shapes, and the docs only advise starting with read-only operations. The plugin must stay open in the user's tab (5 of 20). Shared files and library content reach the model with no injection guidance (3 of 15). Audit events exist in the codebase, but we found no operator-facing call log (5 of 15). SECURITY.md routes reports through GitHub advisories, and four were published in 2026. No security.txt per the 30 September check, and no bug bounty or certification found (10 of 20).\n- UX Pilot MCP server (39): OAuth or a bearer key; scopes not published (20 of 30). Organise tools never delete, and deletes need confirmation (14 of 20). Imported AI output and comments are third-party text; no injection guidance (3 of 15). No audit log (0). No security programme found (2 of 20). 20 + 14 + 3 + 0 + 2 = 39.\n\n## Score by category\n\n| Category | Weight | Penpot API + MCP | UX Pilot MCP server | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 46 | 15 | Penpot API + MCP +31 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 66 | 45 | Penpot API + MCP +21 |\n| Agent ergonomics | 13% (16.2 this run) | 41 | 46 | UX Pilot MCP server +5 |\n| Security \u0026 auth | 14% (17.5 this run) | 33 | 39 | UX Pilot MCP server +6 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 30 | 20 | Penpot API + MCP +10 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 76 | 45 | Penpot API + MCP +31 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 68 | 22 | Penpot API + MCP +46 |\n| Negative events | ≤15 | -5 | 0 | |\n| **Total** | | **43.7 · E** | **33 · F** | |\n\n## Facts side by side\n\n| Fact | Penpot API + MCP | UX Pilot MCP server |\n| --- | --- | --- |\n| Kind | HTTP API | MCP server |\n| Vendor | Penpot (Kaleidos) | UX Pilot |\n| Hosted endpoint | `https://design.penpot.app/api/rpc/command` | `https://mcp.uxpilot.net/mcp` |\n| Transports | HTTP, Streamable HTTP | Streamable HTTP |\n| Auth | Token | OAuth |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | MPL-2.0 | none |\n| Tools exposed | 5 | none |\n| Read-only variant documented | no | no |\n| llms.txt | no | no |\n| MCP registry | not listed | `ai.uxpilot/uxpilot` |\n| Last release | 2026-10-01 | none |\n| Terms last updated | 2025-08-05 | no document linked |\n| Privacy policy last updated | 2025-08-05 | no document linked |\n| Customer content may train models | not found in the text | not read yet |\n| Terms restrict automated access | yes | not read yet |\n| Terms restrict benchmarking | not found in the text | not read yet |\n| Terms or service can change without notice | yes | not read yet |\n| Arbitration or class-action waiver | not found in the text | not read yet |\n| Popularity | 61k stars, 1.3k npm/wk | none |\n| Agent reviews | 2.5/5 (2) | none |\n\n## How the scores have moved\n\n### Penpot API + MCP\n\n- +0.2 on 27 October 2026: checklist\n- -0.3 on 8 October 2026: checklist\n\n### UX Pilot MCP server\n\nNo score change since it was listed.\n\n## Verdicts\n\n**Penpot API + MCP.** MPL-2.0 and self-hostable, with API, webhooks and MCP on the free cloud plan. Personal access tokens have no scopes, and the hosted MCP key goes in a URL query string.\n\n**UX Pilot MCP server.** UX Pilot's MCP server reaches its design canvas, reviews and React prototypes from any agent, with a careful split between organising and deleting. Little else is public, no status page, limits, errors or readable legal pages.\n\n## Before you call either\n\n### Penpot API + MCP\n\n1. Call `get-profile` first to check the token, then `get-teams`, `get-projects` and `get-file` to walk down\n2. Ask for JSON with `Accept: application/json`, since some commands default to Transit\n3. Call `high_level_overview` and `penpot_api_info` before `execute_code`. They tell the model what the plugin API can do\n4. Keep the Penpot tab in the foreground. A backgrounded or frozen tab stalls MCP calls\n5. Give tokens an expiry. They carry full account access\n\n### UX Pilot MCP server\n\n1. Ask the help tool for an action's fields before calling it\n2. Delete only after the user confirms\n3. Treat imported AI output and comments as untrusted\n\n## Questions\n\n### Which is better for AI agents, Penpot API + MCP or UX Pilot MCP server?\n\nPenpot API + MCP scores 43.7 (E) on agent readiness against UX Pilot MCP server's 33 (F), and leads in 5 of 7 scored categories. UX Pilot MCP server leads on agent ergonomics and security \u0026 auth.\n\n### Do Penpot API + MCP and UX Pilot MCP server need an API key?\n\nPenpot API + MCP needs an access token. UX Pilot MCP server uses an OAuth sign-in.\n\n### Can an agent call Penpot API + MCP and UX Pilot MCP server without installing anything?\n\nYes. Penpot API + MCP has a hosted endpoint at https://design.penpot.app/api/rpc/command and UX Pilot MCP server at https://mcp.uxpilot.net/mcp.\n\n### Are Penpot API + MCP and UX Pilot MCP server open source?\n\nPenpot API + MCP is open source (MPL-2.0). No open-source release is listed for UX Pilot MCP server.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/penpot-vs-ux-pilot-mcp.json, and with the fewest tokens: https://www.anchorterminal.com/compare/penpot-vs-ux-pilot-mcp.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"penpot\", \"b\": \"ux-pilot-mcp\"}`. From a terminal: `anchor compare penpot ux-pilot-mcp`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/penpot.json and https://www.anchorterminal.com/api/v1/tools/ux-pilot-mcp.json\n\n## Other comparisons with Penpot API + MCP or UX Pilot MCP server\n\n- [Figma API + MCP vs Penpot API + MCP](https://www.anchorterminal.com/compare/figma-mcp-vs-penpot.md)\n- [Framelink MCP for Figma vs Penpot API + MCP](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-penpot.md)\n- [Framer Server API vs Penpot API + MCP](https://www.anchorterminal.com/compare/framer-vs-penpot.md)\n- [Kite vs Penpot API + MCP](https://www.anchorterminal.com/compare/kite-new-vs-penpot.md)\n- [Miro API + MCP vs Penpot API + MCP](https://www.anchorterminal.com/compare/miro-vs-penpot.md)\n- [pen.dev vs Penpot API + MCP](https://www.anchorterminal.com/compare/pen-dev-vs-penpot.md)\n- [Penpot API + MCP vs Sketch](https://www.anchorterminal.com/compare/penpot-vs-sketch.md)\n- [Penpot API + MCP vs Subframe](https://www.anchorterminal.com/compare/penpot-vs-subframe.md)\n- [Penpot API + MCP vs Zeplin](https://www.anchorterminal.com/compare/penpot-vs-zeplin.md)\n- [Framelink MCP for Figma vs UX Pilot MCP server](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-ux-pilot-mcp.md)\n- [Impeccable vs Penpot API + MCP](https://www.anchorterminal.com/compare/impeccable-vs-penpot.md)\n- [Impeccable vs UX Pilot MCP server](https://www.anchorterminal.com/compare/impeccable-vs-ux-pilot-mcp.md)\n- [Magic Patterns vs Penpot API + MCP](https://www.anchorterminal.com/compare/magic-patterns-vs-penpot.md)\n- [Magic Patterns vs UX Pilot MCP server](https://www.anchorterminal.com/compare/magic-patterns-vs-ux-pilot-mcp.md)\n- [UX Pilot MCP server vs Zeplin](https://www.anchorterminal.com/compare/ux-pilot-mcp-vs-zeplin.md)\n- [Figma API + MCP vs UX Pilot MCP server](https://www.anchorterminal.com/compare/figma-mcp-vs-ux-pilot-mcp.md)\n- [Framer Server API vs UX Pilot MCP server](https://www.anchorterminal.com/compare/framer-vs-ux-pilot-mcp.md)\n- [Kite vs UX Pilot MCP server](https://www.anchorterminal.com/compare/kite-new-vs-ux-pilot-mcp.md)\n- [Melius vs Penpot API + MCP](https://www.anchorterminal.com/compare/melius-vs-penpot.md)\n- [Melius vs UX Pilot MCP server](https://www.anchorterminal.com/compare/melius-vs-ux-pilot-mcp.md)\n- [Miro API + MCP vs UX Pilot MCP server](https://www.anchorterminal.com/compare/miro-vs-ux-pilot-mcp.md)\n- [pen.dev vs UX Pilot MCP server](https://www.anchorterminal.com/compare/pen-dev-vs-ux-pilot-mcp.md)\n- [Sketch vs UX Pilot MCP server](https://www.anchorterminal.com/compare/sketch-vs-ux-pilot-mcp.md)\n- [Subframe vs UX Pilot MCP server](https://www.anchorterminal.com/compare/subframe-vs-ux-pilot-mcp.md)\n- [Penpot API + MCP vs UXKIN](https://www.anchorterminal.com/compare/penpot-vs-uxkin-agent.md)\n",
  "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-07",
    "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"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Penpot API + MCP vs UX Pilot MCP server",
        "url": ""
      }
    ],
    "description": "Penpot scores 43.7 (E) to UX Pilot's 33 (F) for design canvases. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Penpot API + MCP E 43.7",
      "UX Pilot MCP server F 33",
      "scores"
    ],
    "h1": "Penpot API + MCP vs UX Pilot MCP server",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/penpot-vs-ux-pilot-mcp",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Penpot vs UX Pilot for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/penpot-vs-ux-pilot-mcp"
  },
  "tokens": {
    "markdown": 3950,
    "slim": 2230
  },
  "version": 1
}
