{
  "data": {
    "a": {
      "slug": "framelink-figma-mcp",
      "name": "Framelink MCP for Figma",
      "vendor": "Framelink (Graham Lipsman)",
      "vendorUrl": "https://www.framelink.ai",
      "kind": "mcp",
      "category": "design",
      "summary": "Framelink MCP for Figma is an open-source MCP server, run locally with npx, that reads Figma files through the Figma REST API and returns simplified layout and style data and image assets to coding agents.",
      "url": "https://www.anchorterminal.com/tools/framelink-figma-mcp",
      "markdownUrl": "https://www.anchorterminal.com/tools/framelink-figma-mcp.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/framelink-figma-mcp.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/framelink-figma-mcp.json",
      "dns": "framelink-figma-mcp.grade.anchorterminal.com",
      "repo": "https://github.com/GLips/Figma-Context-MCP",
      "license": "MIT",
      "transports": [
        "stdio",
        "streamable-http"
      ],
      "packages": [
        {
          "registry": "npm",
          "name": "figma-developer-mcp"
        }
      ],
      "auth": "pat",
      "authNotes": "Needs the user's own Figma credential. A Figma personal access token (`FIGMA_API_KEY` or `--figma-api-key`, sent as `X-Figma-Token`) where `file_content:read` is the one scope the server strictly needs, or a Figma OAuth access token the user already holds (`FIGMA_OAUTH_TOKEN`), which the server neither obtains nor refreshes. In HTTP mode each request can carry its own token in `X-Figma-Token` or `Authorization: Bearer`. The local HTTP server has no authentication of its own and binds 127.0.0.1 by default.",
      "pricing": "free",
      "pricingNotes": "Free and MIT-licensed, run on your own machine. Calls go to the Figma REST API under the user's Figma plan and its rate limits. The site advertises a coming team product only as early access, with no price.",
      "priceSummary": "Free · OSS",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "A free local server with nothing to buy. No x402, MPP or L402 in the repository or the docs (checked 2026-11-06).",
        "endpoints": []
      },
      "toolCount": 2,
      "popularity": {
        "githubStars": 16173,
        "npmWeekly": 162432,
        "pypiWeekly": null,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://docs.framelink.ai",
      "llmsTxt": "https://docs.framelink.ai/llms.txt",
      "registryName": "io.github.GLips/Figma-Context-MCP",
      "capabilities": [
        "design.files",
        "design.code",
        "design.components"
      ],
      "tags": [
        "open-source",
        "local",
        "mcp",
        "stdio",
        "mcp-registry",
        "llms-txt",
        "typescript",
        "community",
        "free",
        "telemetry"
      ],
      "lastRelease": "2026-06-18",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 66.1,
        "grade": "B",
        "agentReady": false,
        "rank": 386,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 2,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 83,
          "maintenance": 41,
          "payments": 60,
          "reliability": 68,
          "schema": 87,
          "security": 55,
          "transparency": 47
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "Two compact, typed tools return Figma layout and styles in a token-saving tree format and save image assets, with a read-only hint and a flag that removes the writing tool. There has been no release since 18 June 2026, issues and outside pull requests since July have gone unanswered, and telemetry is on by default.",
        "bestFor": "Reading a Figma frame into a coding agent to build matching UI.",
        "strengths": [
          "Two tools with zod input schemas and regex checks on file keys, node IDs and file names",
          "Compact `tree` output that deduplicates repeated styles and subtrees, with `nodeId` and `depth` to narrow a read",
          "Uses a Figma personal access token that needs only `file_content:read`, or a per-request token in HTTP mode",
          "MIT, in the official MCP registry under the maintainer's GitHub namespace, with a release-please changelog",
          "Docs publish llms.txt and a Markdown copy of each page, including a full tool reference"
        ],
        "weaknesses": [
          "Last release 0.13.2 on 18 June 2026, and still below 1.0",
          "The three open issues filed since May 2026 and seven outside pull requests since July have no reply",
          "PostHog telemetry is on by default, the README doesn't mention it, and an open issue says error messages can carry file keys and node IDs",
          "Read-only on Figma, so an agent cannot change a design through it",
          "No privacy policy, terms or named company on framelink.ai"
        ],
        "agentNotes": [
          "Pass the `node-id` from the Figma link as `nodeId` so the call returns one frame, not the whole file",
          "Leave `depth` unset unless the user asks, as the tool description says",
          "Set `--image-dir` to the project folder in stdio mode, or `--skip-image-downloads` when the task only reads",
          "Set `FRAMELINK_TELEMETRY=off` or `DO_NOT_TRACK=1` in the server's env if the user's policy forbids usage reporting",
          "On a 429 from Figma, wait and retry later; the limit is the user's Figma plan, not the server's"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 66.1
          }
        ],
        "editorialScores": {
          "ergonomics": 83,
          "maintenance": 41,
          "payments": 60,
          "reliability": 68,
          "schema": 87,
          "security": 55,
          "transparency": 57
        },
        "provenanceScore": 37,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-06",
            "maintenance": "2026-11-06",
            "payments": "2026-11-06",
            "reliability": "2026-11-06",
            "schema": "2026-11-06",
            "security": "2026-11-06",
            "transparency": "2026-11-06"
          },
          "last": "2026-11-06",
          "oldest": "2026-11-06",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npx -y figma-developer-mcp --stdio",
        "config": {
          "mcpServers": {
            "Framelink_Figma_MCP": {
              "args": [
                "-y",
                "figma-developer-mcp",
                "--stdio"
              ],
              "command": "npx",
              "env": {
                "FIGMA_API_KEY": "YOUR-KEY"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/design.files",
        "tool": "https://letme.dev/framelink-figma-mcp"
      },
      "area": "design-diagrams",
      "provenance": {
        "legalEntity": "",
        "domain": "framelink.ai",
        "domainRegistered": "2025-03-22",
        "endpointOnVendorDomain": true,
        "terms": "",
        "privacy": "",
        "statusPage": "",
        "changelog": "https://github.com/GLips/Figma-Context-MCP/blob/main/CHANGELOG.md",
        "securityTxt": "none",
        "checked": "2026-11-06",
        "notes": [
          "No company is named on www.framelink.ai, whose footer reads only a copyright line. The repository, the npm package and the X account linked from the site belong to Graham Lipsman (GitHub GLips, npm glips, X glipsman).",
          "No terms of service or privacy policy linked from www.framelink.ai or docs.framelink.ai.",
          "www.framelink.ai/robots.txt sets no Disallow rules for our crawler. docs.framelink.ai/robots.txt allows all paths but /_next/ and /cdn-cgi/, with Content-Signal ai-train=yes, search=yes, ai-input=yes.",
          "RDAP gives framelink.ai a registration date of 22 March 2025.",
          "/.well-known/security.txt returns 404. SECURITY.md in the repository asks for private reports through GitHub security advisories, with acknowledgement within 48 hours."
        ],
        "score": 37
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/framelink-figma-mcp.json",
      "live": {
        "slug": "framelink-figma-mcp",
        "versions": [
          {
            "registry": "github",
            "name": "GLips/Figma-Context-MCP",
            "version": "v0.13.2",
            "released": "2026-06-18",
            "seenAt": "2026-11-06T23:26:50.051758823Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.GLips/Figma-Context-MCP",
            "version": "0.13.2",
            "seenAt": "2026-11-07T18:16:28.95801333Z"
          },
          {
            "registry": "npm",
            "name": "figma-developer-mcp",
            "version": "0.13.2",
            "seenAt": "2026-11-06T23:26:49.765537974Z"
          }
        ],
        "githubStars": 16175,
        "npmWeekly": 162432,
        "securityTxt": {
          "url": "https://framelink.ai/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:01:33.444843239Z"
        },
        "llmsTxt": {
          "url": "https://docs.framelink.ai/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:32:32.515548222Z"
        },
        "pages": [
          {
            "url": "https://raw.githubusercontent.com/GLips/Figma-Context-MCP/main/CHANGELOG.md",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:18:23.302835389Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "fd50fd2f5316"
          }
        ],
        "updatedAt": "2026-11-07T18:16:28.95801333Z"
      }
    },
    "answer": "Framelink MCP for Figma scores 66.1 (B) on agent readiness against Penpot API + MCP's 43.7 (E), and leads in 5 of 7 scored categories. Penpot API + MCP leads on maintenance \u0026 community and transparency \u0026 trust.",
    "b": {
      "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": 1228,
        "ranked": true,
        "rankOf": 1486,
        "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-07T18:20:46.437647222Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 130,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 99.95,
          "p50ms24h": 88,
          "p95ms24h": 189,
          "samples24h": 239,
          "samples30d": 7910,
          "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": 187,
              "ok": 187
            }
          ]
        },
        "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-07T18:20:46.437647222Z"
      }
    },
    "edges": [
      {
        "by": 42,
        "category": "ergonomics",
        "leads": "framelink-figma-mcp",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "Two compact tools (25). Output is sized by `nodeId` and `depth`, and the default `tree` format drops default values and auto-generated layer names and deduplicates repeated styles and subtrees. No pagination, which a single-file read rarely needs (16 of 20). Errors are written for a model to recover from, with Figma's 403 body surfaced and guidance for wrong node IDs from prototype, branch and FigJam links, per the 0.12.0 changelog (16 of 20). `get_figma_data` carries readOnlyHint and `download_figma_images` openWorldHint, with no destructiveHint on the tool that writes files and no note on overwriting (14 of 20). Only `fileKey` is required and one npx line starts it, but there is no SDK, which a two-tool local server doesn't need (12 of 15). 25 + 16 + 16 + 14 + 12 = 83.",
          "b": "Five MCP tools locally and four on the hosted URL, though `execute_code`'s description is long. Over RPC, `get-file` returns a whole file (18 of 25). We found no documented pagination or field selection for RPC commands (8 of 20). No documented error codes for the API (8 of 20). No readOnlyHint, destructiveHint or other annotations on any MCP tool, and no idempotency keys (2 of 20). No official API client. The Plugin API is typed TypeScript (5 of 15)."
        },
        "scores": {
          "a": 83,
          "b": 41
        }
      },
      {
        "by": 35,
        "category": "maintenance",
        "leads": "penpot",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "Last release 0.13.2 on 18 June 2026, 141 days before this check (10). No release in the 90 days since 8 August (0). The maintainer merged his own pull requests through June and closed four outside pull requests between July and September, but the three open issues filed since May have no reply and seven outside pull requests from July to October are open without one (8 of 25). In the official MCP registry under the GitHub-verified namespace io.github.GLips, with 0.13.2 as the latest entry (15). CI and tests exist, and the MCP SDK is pinned at 1.29.0 with current dependencies (8 of 10). 10 + 0 + 8 + 15 + 8 = 41.",
          "b": "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)."
        },
        "scores": {
          "a": 41,
          "b": 76
        }
      },
      {
        "by": 30,
        "category": "payments",
        "leads": "framelink-figma-mcp",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "By the self-hosted rule. A free MIT package with nothing to buy (20 + 20 + 20), and no payment protocol (0). Figma API use falls under the user's own Figma plan. 60.",
          "b": "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."
        },
        "scores": {
          "a": 60,
          "b": 30
        }
      },
      {
        "by": 22,
        "category": "reliability",
        "leads": "framelink-figma-mcp",
        "name": "Reliability",
        "reasons": {
          "a": "Read with the local-software lines, because the server runs on the user's machine and calls the Figma REST API. Installs from the official npm package figma-developer-mcp, with Node 20.20 or later stated in package.json (20). A CI workflow runs prettier, eslint, a type check and the vitest suite, but only on pull requests, and the five newest runs (outside pull requests from 22 August to 2 October) all failed, so passing on the default branch couldn't be confirmed (15). Eight open issues, the oldest open one a 429 rate-limit thread from November 2025 with 30 comments, and nothing open that reports a crash in the current release (18). Release-please changelog with semver tags and breaking defaults called out, such as the switch to `tree` output in 0.13.0 (15). Version 0.13.2, below 1.0 and not declared stable (0). 20 + 15 + 18 + 15 + 0 = 68.",
          "b": "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)."
        },
        "scores": {
          "a": 68,
          "b": 46
        }
      },
      {
        "by": 22,
        "category": "security",
        "leads": "framelink-figma-mcp",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "The credential is the user's own Figma token. Figma personal access tokens are scoped and revocable, and the docs say `file_content:read` is the one scope the server needs. OAuth tokens are accepted but not refreshed, and the token is passed in the client config's args or env, not a URL (25 of 30). The server only reads Figma. Its one write is image files, confined to `--image-dir`, and `--skip-image-downloads` removes that tool; the local HTTP mode has no authentication of its own and binds 127.0.0.1 by default (16 of 20). Layer names and text written by collaborators reach the model as they are, and no prompt-injection guidance was found (3 of 15). Logs go to the local console only, with no per-call audit record (3 of 15). SECURITY.md asks for private reports through GitHub security advisories with a 48-hour acknowledgement. No security.txt, bug bounty or certification (8 of 20). 25 + 16 + 3 + 3 + 8 = 55.",
          "b": "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)."
        },
        "scores": {
          "a": 55,
          "b": 33
        }
      },
      {
        "by": 21,
        "category": "schema",
        "leads": "framelink-figma-mcp",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "Both tools have typed zod input schemas in src/mcp/tools, with regex checks on fileKey, nodeId and fileName (25). docs.framelink.ai serves llms.txt and a Markdown copy of each page (10). The tool reference explains what each tool returns and how the two chain through `imageDownloadArguments`, and the `depth` parameter says not to use it unless the user asks. The `get_figma_data` description itself is one line and says nothing about when not to call it (14 of 20). Required fields and patterns are typed, and `fileName` must end in .png, .svg or .gif, with no enum for output format at call time (13 of 15). Config and request examples in the docs, a documented `Error fetching file:` prefix and purpose-built 403 and 429 messages, but no list of error cases (10 of 15). Semver releases and a public changelog (15). 25 + 10 + 14 + 13 + 10 + 15 = 87.",
          "b": "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)."
        },
        "scores": {
          "a": 87,
          "b": 66
        }
      }
    ],
    "facts": [
      {
        "a": "MCP server",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Framelink (Graham Lipsman)",
        "b": "Penpot (Kaleidos)",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "https://design.penpot.app/api/rpc/command",
        "name": "Hosted endpoint"
      },
      {
        "a": "stdio, Streamable HTTP",
        "b": "HTTP, Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "Token",
        "b": "Token",
        "name": "Auth"
      },
      {
        "a": "Free",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MIT",
        "b": "MPL-2.0",
        "name": "Licence"
      },
      {
        "a": "2",
        "b": "5",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "io.github.GLips/Figma-Context-MCP",
        "b": "not listed",
        "name": "MCP registry"
      },
      {
        "a": "2026-06-18",
        "b": "2026-10-01",
        "name": "Last release"
      },
      {
        "a": "no document linked",
        "b": "2025-08-05",
        "name": "Terms last updated"
      },
      {
        "a": "no document linked",
        "b": "2025-08-05",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not read yet",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "not read yet",
        "b": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not read yet",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not read yet",
        "b": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not read yet",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "16k stars, 162k npm/wk",
        "b": "61k stars, 1.3k npm/wk",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "2.5/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Framelink MCP for Figma scores 66.1 (B) on agent readiness against Penpot API + MCP's 43.7 (E), and leads in 5 of 7 scored categories. Penpot API + MCP leads on maintenance \u0026 community and transparency \u0026 trust.",
        "question": "Which is better for AI agents, Framelink MCP for Figma or Penpot API + MCP?"
      },
      {
        "answer": "Both need an access token.",
        "question": "Do Framelink MCP for Figma and Penpot API + MCP need an API key?"
      },
      {
        "answer": "Framelink MCP for Figma runs on your own machine, with no hosted endpoint listed. Penpot API + MCP has a hosted endpoint at https://design.penpot.app/api/rpc/command.",
        "question": "Can an agent call Framelink MCP for Figma and Penpot API + MCP without installing anything?"
      },
      {
        "answer": "Yes. Framelink MCP for Figma is open source (MIT). Penpot API + MCP is open source (MPL-2.0).",
        "question": "Are Framelink MCP for Figma and Penpot API + MCP open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 68 against 46",
          "Schema \u0026 documentation, 87 against 66",
          "Agent ergonomics, 83 against 41",
          "Security \u0026 auth, 55 against 33",
          "Payments \u0026 pricing, 60 against 30"
        ],
        "also": [
          "Runs on your own machine",
          "No incidents deducted, where Penpot API + MCP loses 5 points for them"
        ],
        "goodFor": "Reading a Figma frame into a coding agent to build matching UI.",
        "slug": "framelink-figma-mcp",
        "watchFor": "Last release 0.13.2 on 18 June 2026, and still below 1.0"
      },
      {
        "aheadOn": [
          "Maintenance \u0026 community, 76 against 41",
          "Transparency \u0026 trust, 68 against 47"
        ],
        "also": [
          "A hosted endpoint, with nothing to install",
          "Free to start without a card"
        ],
        "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"
      }
    ],
    "history": {
      "framelink-figma-mcp": null,
      "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"
        }
      ]
    },
    "job": {
      "capability": "design.files",
      "name": "Design files"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/figma-mcp-vs-framelink-figma-mcp.json",
        "title": "Figma API + MCP vs Framelink MCP for Figma",
        "url": "https://www.anchorterminal.com/compare/figma-mcp-vs-framelink-figma-mcp"
      },
      {
        "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-framer.json",
        "title": "Framelink MCP for Figma vs Framer Server API",
        "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-framer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-kite-new.json",
        "title": "Framelink MCP for Figma vs Kite",
        "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-kite-new"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-magic-patterns.json",
        "title": "Framelink MCP for Figma vs Magic Patterns",
        "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-magic-patterns"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-melius.json",
        "title": "Framelink MCP for Figma vs Melius",
        "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-melius"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-miro.json",
        "title": "Framelink MCP for Figma vs Miro API + MCP",
        "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-miro"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-pen-dev.json",
        "title": "Framelink MCP for Figma vs pen.dev",
        "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-pen-dev"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-sketch.json",
        "title": "Framelink MCP for Figma vs Sketch",
        "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-sketch"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-subframe.json",
        "title": "Framelink MCP for Figma vs Subframe",
        "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-subframe"
      },
      {
        "json": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-zeplin.json",
        "title": "Framelink MCP for Figma vs Zeplin",
        "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-zeplin"
      },
      {
        "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-impeccable.json",
        "title": "Framelink MCP for Figma vs Impeccable",
        "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-impeccable"
      },
      {
        "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/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/framelink-figma-mcp-vs-uxkin-agent.json",
        "title": "Framelink MCP for Figma vs UXKIN",
        "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-uxkin-agent"
      },
      {
        "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"
      },
      {
        "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"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 22,
        "edge": "framelink-figma-mcp",
        "framelink-figma-mcp": 68,
        "key": "reliability",
        "name": "Reliability",
        "penpot": 46,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 21,
        "edge": "framelink-figma-mcp",
        "framelink-figma-mcp": 87,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "penpot": 66,
        "weight": 13
      },
      {
        "by": 42,
        "edge": "framelink-figma-mcp",
        "framelink-figma-mcp": 83,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "penpot": 41,
        "weight": 13
      },
      {
        "by": 22,
        "edge": "framelink-figma-mcp",
        "framelink-figma-mcp": 55,
        "key": "security",
        "name": "Security \u0026 auth",
        "penpot": 33,
        "weight": 14
      },
      {
        "by": 30,
        "edge": "framelink-figma-mcp",
        "framelink-figma-mcp": 60,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "penpot": 30,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 35,
        "edge": "penpot",
        "framelink-figma-mcp": 41,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "penpot": 76,
        "weight": 7
      },
      {
        "by": 21,
        "edge": "penpot",
        "framelink-figma-mcp": 47,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "penpot": 68,
        "weight": 7
      }
    ],
    "summary": "Framelink MCP for Figma scores 66.1 (B) on agent readiness against Penpot API + MCP's 43.7 (E), and leads in 5 of 7 scored categories. Penpot API + MCP leads on maintenance \u0026 community and transparency \u0026 trust. Both do design files.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "framelink-figma-mcp": "Two compact, typed tools return Figma layout and styles in a token-saving tree format and save image assets, with a read-only hint and a flag that removes the writing tool. There has been no release since 18 June 2026, issues and outside pull requests since July have gone unanswered, and telemetry is on by default.",
      "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."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-penpot",
    "json": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-penpot.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-penpot.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-penpot.min.md"
  },
  "markdown": "Framelink MCP for Figma scores 66.1 (B) on agent readiness against Penpot API + MCP's 43.7 (E), and leads in 5 of 7 scored categories. Penpot API + MCP leads on maintenance \u0026 community and transparency \u0026 trust. Both do design files.\n\n- Framelink MCP for Figma: grade B, 66.1/100, rank #386 of 1486. Markdown https://www.anchorterminal.com/tools/framelink-figma-mcp.md · JSON https://www.anchorterminal.com/api/v1/tools/framelink-figma-mcp.json\n- Penpot API + MCP: grade E, 43.7/100, rank #1228 of 1486. Markdown https://www.anchorterminal.com/tools/penpot.md · JSON https://www.anchorterminal.com/api/v1/tools/penpot.json\n- Best design workspace and canvas APIs for AI agents: https://www.anchorterminal.com/best/design/index.md\n- All 120 design comparisons: https://www.anchorterminal.com/compare/design/index.md\n\n## Which one, for what\n\n### Framelink MCP for Figma (B)\n\nGood for: Reading a Figma frame into a coding agent to build matching UI.\n\nAhead on:\n- Reliability, 68 against 46\n- Schema \u0026 documentation, 87 against 66\n- Agent ergonomics, 83 against 41\n- Security \u0026 auth, 55 against 33\n- Payments \u0026 pricing, 60 against 30\n\nAlso in its favour:\n- Runs on your own machine\n- No incidents deducted, where Penpot API + MCP loses 5 points for them\n\nWatch for: Last release 0.13.2 on 18 June 2026, and still below 1.0\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- Maintenance \u0026 community, 76 against 41\n- Transparency \u0026 trust, 68 against 47\n\nAlso in its favour:\n- A hosted endpoint, with nothing to install\n- Free to start without a card\n\nWatch for: Personal access tokens have no scopes, and the hosted MCP key goes in a URL query string\n\n\n## Why the edge\n\n### Agent ergonomics: Framelink MCP for Figma +42\n\n- Framelink MCP for Figma (83): Two compact tools (25). Output is sized by `nodeId` and `depth`, and the default `tree` format drops default values and auto-generated layer names and deduplicates repeated styles and subtrees. No pagination, which a single-file read rarely needs (16 of 20). Errors are written for a model to recover from, with Figma's 403 body surfaced and guidance for wrong node IDs from prototype, branch and FigJam links, per the 0.12.0 changelog (16 of 20). `get_figma_data` carries readOnlyHint and `download_figma_images` openWorldHint, with no destructiveHint on the tool that writes files and no note on overwriting (14 of 20). Only `fileKey` is required and one npx line starts it, but there is no SDK, which a two-tool local server doesn't need (12 of 15). 25 + 16 + 16 + 14 + 12 = 83.\n- Penpot API + MCP (41): Five MCP tools locally and four on the hosted URL, though `execute_code`'s description is long. Over RPC, `get-file` returns a whole file (18 of 25). We found no documented pagination or field selection for RPC commands (8 of 20). No documented error codes for the API (8 of 20). No readOnlyHint, destructiveHint or other annotations on any MCP tool, and no idempotency keys (2 of 20). No official API client. The Plugin API is typed TypeScript (5 of 15).\n\n### Maintenance \u0026 community: Penpot API + MCP +35\n\n- Framelink MCP for Figma (41): Last release 0.13.2 on 18 June 2026, 141 days before this check (10). No release in the 90 days since 8 August (0). The maintainer merged his own pull requests through June and closed four outside pull requests between July and September, but the three open issues filed since May have no reply and seven outside pull requests from July to October are open without one (8 of 25). In the official MCP registry under the GitHub-verified namespace io.github.GLips, with 0.13.2 as the latest entry (15). CI and tests exist, and the MCP SDK is pinned at 1.29.0 with current dependencies (8 of 10). 10 + 0 + 8 + 15 + 8 = 41.\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\n### Payments \u0026 pricing: Framelink MCP for Figma +30\n\n- Framelink MCP for Figma (60): By the self-hosted rule. A free MIT package with nothing to buy (20 + 20 + 20), and no payment protocol (0). Figma API use falls under the user's own Figma plan. 60.\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\n### Reliability: Framelink MCP for Figma +22\n\n- Framelink MCP for Figma (68): Read with the local-software lines, because the server runs on the user's machine and calls the Figma REST API. Installs from the official npm package figma-developer-mcp, with Node 20.20 or later stated in package.json (20). A CI workflow runs prettier, eslint, a type check and the vitest suite, but only on pull requests, and the five newest runs (outside pull requests from 22 August to 2 October) all failed, so passing on the default branch couldn't be confirmed (15). Eight open issues, the oldest open one a 429 rate-limit thread from November 2025 with 30 comments, and nothing open that reports a crash in the current release (18). Release-please changelog with semver tags and breaking defaults called out, such as the switch to `tree` output in 0.13.0 (15). Version 0.13.2, below 1.0 and not declared stable (0). 20 + 15 + 18 + 15 + 0 = 68.\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\n### Security \u0026 auth: Framelink MCP for Figma +22\n\n- Framelink MCP for Figma (55): The credential is the user's own Figma token. Figma personal access tokens are scoped and revocable, and the docs say `file_content:read` is the one scope the server needs. OAuth tokens are accepted but not refreshed, and the token is passed in the client config's args or env, not a URL (25 of 30). The server only reads Figma. Its one write is image files, confined to `--image-dir`, and `--skip-image-downloads` removes that tool; the local HTTP mode has no authentication of its own and binds 127.0.0.1 by default (16 of 20). Layer names and text written by collaborators reach the model as they are, and no prompt-injection guidance was found (3 of 15). Logs go to the local console only, with no per-call audit record (3 of 15). SECURITY.md asks for private reports through GitHub security advisories with a 48-hour acknowledgement. No security.txt, bug bounty or certification (8 of 20). 25 + 16 + 3 + 3 + 8 = 55.\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\n### Schema \u0026 documentation: Framelink MCP for Figma +21\n\n- Framelink MCP for Figma (87): Both tools have typed zod input schemas in src/mcp/tools, with regex checks on fileKey, nodeId and fileName (25). docs.framelink.ai serves llms.txt and a Markdown copy of each page (10). The tool reference explains what each tool returns and how the two chain through `imageDownloadArguments`, and the `depth` parameter says not to use it unless the user asks. The `get_figma_data` description itself is one line and says nothing about when not to call it (14 of 20). Required fields and patterns are typed, and `fileName` must end in .png, .svg or .gif, with no enum for output format at call time (13 of 15). Config and request examples in the docs, a documented `Error fetching file:` prefix and purpose-built 403 and 429 messages, but no list of error cases (10 of 15). Semver releases and a public changelog (15). 25 + 10 + 14 + 13 + 10 + 15 = 87.\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\n## Score by category\n\n| Category | Weight | Framelink MCP for Figma | Penpot API + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 68 | 46 | Framelink MCP for Figma +22 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 87 | 66 | Framelink MCP for Figma +21 |\n| Agent ergonomics | 13% (16.2 this run) | 83 | 41 | Framelink MCP for Figma +42 |\n| Security \u0026 auth | 14% (17.5 this run) | 55 | 33 | Framelink MCP for Figma +22 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 60 | 30 | Framelink MCP for Figma +30 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 41 | 76 | Penpot API + MCP +35 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 47 | 68 | Penpot API + MCP +21 |\n| Negative events | ≤15 | 0 | -5 | |\n| **Total** | | **66.1 · B** | **43.7 · E** | |\n\n## Facts side by side\n\n| Fact | Framelink MCP for Figma | Penpot API + MCP |\n| --- | --- | --- |\n| Kind | MCP server | HTTP API |\n| Vendor | Framelink (Graham Lipsman) | Penpot (Kaleidos) |\n| Hosted endpoint | no (local only) | `https://design.penpot.app/api/rpc/command` |\n| Transports | stdio, Streamable HTTP | HTTP, Streamable HTTP |\n| Auth | Token | Token |\n| Pricing | Free | Freemium |\n| x402 | no | no |\n| Licence | MIT | MPL-2.0 |\n| Tools exposed | 2 | 5 |\n| Read-only variant documented | no | no |\n| llms.txt | yes | no |\n| MCP registry | `io.github.GLips/Figma-Context-MCP` | not listed |\n| Last release | 2026-06-18 | 2026-10-01 |\n| Terms last updated | no document linked | 2025-08-05 |\n| Privacy policy last updated | no document linked | 2025-08-05 |\n| Customer content may train models | not read yet | not found in the text |\n| Terms restrict automated access | not read yet | yes |\n| Terms restrict benchmarking | not read yet | not found in the text |\n| Terms or service can change without notice | not read yet | yes |\n| Arbitration or class-action waiver | not read yet | not found in the text |\n| Popularity | 16k stars, 162k npm/wk | 61k stars, 1.3k npm/wk |\n| Agent reviews | none | 2.5/5 (2) |\n\n## How the scores have moved\n\n### Framelink MCP for Figma\n\nNo score change since it was listed.\n\n### Penpot API + MCP\n\n- +0.2 on 27 October 2026: checklist\n- -0.3 on 8 October 2026: checklist\n\n## Verdicts\n\n**Framelink MCP for Figma.** Two compact, typed tools return Figma layout and styles in a token-saving tree format and save image assets, with a read-only hint and a flag that removes the writing tool. There has been no release since 18 June 2026, issues and outside pull requests since July have gone unanswered, and telemetry is on by default.\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## Before you call either\n\n### Framelink MCP for Figma\n\n1. Pass the `node-id` from the Figma link as `nodeId` so the call returns one frame, not the whole file\n2. Leave `depth` unset unless the user asks, as the tool description says\n3. Set `--image-dir` to the project folder in stdio mode, or `--skip-image-downloads` when the task only reads\n4. Set `FRAMELINK_TELEMETRY=off` or `DO_NOT_TRACK=1` in the server's env if the user's policy forbids usage reporting\n5. On a 429 from Figma, wait and retry later; the limit is the user's Figma plan, not the server's\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## Questions\n\n### Which is better for AI agents, Framelink MCP for Figma or Penpot API + MCP?\n\nFramelink MCP for Figma scores 66.1 (B) on agent readiness against Penpot API + MCP's 43.7 (E), and leads in 5 of 7 scored categories. Penpot API + MCP leads on maintenance \u0026 community and transparency \u0026 trust.\n\n### Do Framelink MCP for Figma and Penpot API + MCP need an API key?\n\nBoth need an access token.\n\n### Can an agent call Framelink MCP for Figma and Penpot API + MCP without installing anything?\n\nFramelink MCP for Figma runs on your own machine, with no hosted endpoint listed. Penpot API + MCP has a hosted endpoint at https://design.penpot.app/api/rpc/command.\n\n### Are Framelink MCP for Figma and Penpot API + MCP open source?\n\nYes. Framelink MCP for Figma is open source (MIT). Penpot API + MCP is open source (MPL-2.0).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-penpot.json, and with the fewest tokens: https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-penpot.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"framelink-figma-mcp\", \"b\": \"penpot\"}`. From a terminal: `anchor compare framelink-figma-mcp penpot`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/framelink-figma-mcp.json and https://www.anchorterminal.com/api/v1/tools/penpot.json\n\n## Other comparisons with Framelink MCP for Figma or Penpot API + MCP\n\n- [Figma API + MCP vs Framelink MCP for Figma](https://www.anchorterminal.com/compare/figma-mcp-vs-framelink-figma-mcp.md)\n- [Figma API + MCP vs Penpot API + MCP](https://www.anchorterminal.com/compare/figma-mcp-vs-penpot.md)\n- [Framelink MCP for Figma vs Framer Server API](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-framer.md)\n- [Framelink MCP for Figma vs Kite](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-kite-new.md)\n- [Framelink MCP for Figma vs Magic Patterns](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-magic-patterns.md)\n- [Framelink MCP for Figma vs Melius](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-melius.md)\n- [Framelink MCP for Figma vs Miro API + MCP](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-miro.md)\n- [Framelink MCP for Figma vs pen.dev](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-pen-dev.md)\n- [Framelink MCP for Figma vs Sketch](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-sketch.md)\n- [Framelink MCP for Figma vs Subframe](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-subframe.md)\n- [Framelink MCP for Figma vs Zeplin](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-zeplin.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 Impeccable](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-impeccable.md)\n- [Impeccable vs Penpot API + MCP](https://www.anchorterminal.com/compare/impeccable-vs-penpot.md)\n- [Magic Patterns vs Penpot API + MCP](https://www.anchorterminal.com/compare/magic-patterns-vs-penpot.md)\n- [Framelink MCP for Figma vs UXKIN](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-uxkin-agent.md)\n- [Penpot API + MCP vs UXKIN](https://www.anchorterminal.com/compare/penpot-vs-uxkin-agent.md)\n- [Melius vs Penpot API + MCP](https://www.anchorterminal.com/compare/melius-vs-penpot.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": "Framelink MCP for Figma vs Penpot API + MCP",
        "url": ""
      }
    ],
    "description": "Framelink MCP for Figma scores 66.1 (B) to Penpot's 43.7 (E) for design files. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Framelink MCP for Figma B 66.1",
      "Penpot API + MCP E 43.7",
      "scores"
    ],
    "h1": "Framelink MCP for Figma vs Penpot API + MCP",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/framelink-figma-mcp-vs-penpot",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Framelink MCP for Figma vs Penpot for AI agents (2026)",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-penpot"
  },
  "tokens": {
    "markdown": 4750,
    "slim": 2880
  },
  "version": 1
}
