{
  "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": 387,
        "ranked": true,
        "rankOf": 1510,
        "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 pen.dev's 43.3 (E), and leads in 5 of 7 scored categories. pen.dev leads on maintenance \u0026 community and transparency \u0026 trust.",
    "b": {
      "slug": "pen-dev",
      "name": "pen.dev",
      "vendor": "High Agency, Inc.",
      "vendorUrl": "https://pen.dev",
      "kind": "mcp",
      "category": "design",
      "summary": "Design canvas from High Agency, Inc. that stores designs as JSON `.pen` files. Agents edit them through a local MCP server in the desktop app or IDE extension, or through a headless CLI. It was called Pencil until 2026.",
      "url": "https://www.anchorterminal.com/tools/pen-dev",
      "markdownUrl": "https://www.anchorterminal.com/tools/pen-dev.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/pen-dev.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/pen-dev.json",
      "dns": "pen-dev.grade.anchorterminal.com",
      "repo": "https://github.com/highagency/pen-desktop-releases",
      "license": "Proprietary. The CLI package on npm carries a proprietary licence file, and the apps fall under the vendor's EULA",
      "transports": [
        "stdio"
      ],
      "packages": [
        {
          "registry": "npm",
          "name": "@pen.dev/cli"
        }
      ],
      "auth": "mixed",
      "authNotes": "A pen.dev account is required for the desktop app, the extension and the CLI. The MCP server takes no credential of its own and reaches the signed-in app over a local socket, after the owner enables each client in Settings, MCP. The CLI signs in with `pen login` (email with password or one-time code) or with `PEN_CLI_KEY`, an organisation-scoped key created in Developer Keys on the web app. No key scopes are documented. Access is self-serve.",
      "pricing": "freemium",
      "pricingNotes": "Free plan at $0 with 5 agent days and 25 image or SVG generations a month, including the CLI, MCP access and personal developer keys, so an agent's owner can start without a contract. Pro is $16 and Ultra $48 a user a month, and Enterprise is priced on request. Model usage on the user's own provider key is billed by that provider (https://pen.dev/pricing, checked 2026-10-08).",
      "priceSummary": "$16 / seat-mo",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs, the pricing page or the CLI reference (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": 6,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://docs.pen.dev",
      "capabilities": [
        "design.files",
        "design.canvas",
        "design.components",
        "design.code"
      ],
      "tags": [
        "local",
        "desktop",
        "cli",
        "headless",
        "mcp",
        "stdio",
        "closed-source",
        "freemium",
        "free-tier",
        "vscode",
        "design-to-code"
      ],
      "lastRelease": "2026-10-08",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 43.3,
        "grade": "E",
        "agentReady": false,
        "rank": 1253,
        "ranked": true,
        "rankOf": 1510,
        "categoryRank": 14,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 66,
          "maintenance": 59,
          "payments": 38,
          "reliability": 33,
          "schema": 36,
          "security": 31,
          "transparency": 55
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-05"
        },
        "negative": 0,
        "verdict": "An agent can create, edit and export `.pen` designs without a GUI through the `pen` CLI, with four compact MCP tools that carry annotations and a documented JSON format. The software is closed and needs a pen.dev account. Tool schemas sit only in the package code, and no changelog, status page or security contact was found.",
        "bestFor": "A coding agent that designs screens beside the code and keeps them in Git, including in CI.",
        "strengths": [
          "Headless CLI (`@pen.dev/cli`) runs the same editor engine as the desktop app and exports PNG, JPEG, WEBP, PDF and HTML",
          "Four standard MCP tools with typed inputs in the package and readOnlyHint and destructiveHint annotations, plus two conditional tools",
          "The `.pen` format is JSON with a published TypeScript schema, so designs sit in Git beside code",
          "Free plan includes the CLI, MCP access and personal developer keys, with five agent days a month",
          "Privacy policy has a retention table and says prompts sent with the user's own provider key never reach the vendor's servers"
        ],
        "weaknesses": [
          "No changelog. Desktop releases on GitHub had empty notes on 8 October, and the format docs reserve the right to make breaking changes",
          "MCP tool input schemas appear only in the package code, not in the docs",
          "14 issues opened between 28 July and 6 October 2026 in highagency/pen-desktop-releases had no comment or closure on 8 October",
          "No status page, security.txt, disclosure policy, bug bounty or certification was found",
          "`execute` takes one JavaScript snippet and carries destructiveHint true, with no read-only mode for an external MCP client",
          "Closed source under a proprietary licence that forbids reverse engineering, and every surface needs a pen.dev account"
        ],
        "agentNotes": [
          "Call `read_skill()`, then `read_skill({ path: \"pen-schema.md\" })` and `read_skill({ path: \"execute.md\" })` before the first `execute`. The tool description alone doesn't document the operations",
          "Call `get_app_state()` and confirm the active document before editing. The MCP server works on whichever `.pen` file is open in the app",
          "In headless `pen interactive`, call `save()` before `exit()`, and keep `--in` and `--out` on different paths to preserve the source",
          "Check that an export file exists. The docs say an export failure can print an error without a nonzero exit status",
          "In CI set `PEN_CLI_KEY` plus a provider key such as `ANTHROPIC_API_KEY`. Run `pen version`, since `pen --version` is not a flag"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 4,
        "avgRating": 2.8,
        "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.3
          }
        ],
        "editorialScores": {
          "ergonomics": 66,
          "maintenance": 59,
          "payments": 38,
          "reliability": 33,
          "schema": 36,
          "security": 31,
          "transparency": 54
        },
        "provenanceScore": 55,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-05",
            "maintenance": "2026-11-05",
            "payments": "2026-11-05",
            "reliability": "2026-11-05",
            "schema": "2026-11-05",
            "security": "2026-11-05",
            "transparency": "2026-11-05"
          },
          "last": "2026-11-05",
          "lastMoved": "2026-11-05",
          "oldest": "2026-11-05",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npm install -g @pen.dev/cli",
        "headless": {
          "command": "pen --out design.pen --prompt \"$TASK\"",
          "env": {
            "ANTHROPIC_API_KEY": "\u003ckey\u003e",
            "PEN_CLI_KEY": "\u003ckey starting pencil_cli_\u003e"
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/design.files",
        "tool": "https://letme.dev/pen-dev"
      },
      "area": "design-diagrams",
      "unitPrices": [
        {
          "item": "Pro plan",
          "unit": "seat-month",
          "usd": 16,
          "note": "unlimited agent days, 350 image or SVG generations a month, up to 3 agents in parallel"
        },
        {
          "item": "Ultra plan",
          "unit": "seat-month",
          "usd": 48,
          "note": "750 image or SVG generations a month, up to 6 agents in parallel"
        }
      ],
      "provenance": {
        "legalEntity": "High Agency, Inc.",
        "domain": "pen.dev",
        "domainRegistered": "2025-09-10",
        "endpointOnVendorDomain": true,
        "terms": "https://pen.dev/terms-of-use",
        "privacy": "https://pen.dev/privacy-policy",
        "statusPage": "",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-11-05",
        "notes": [
          "The terms of use are effective 26 October 2026; the EULA and privacy policy, per the 8 October check, are effective 6 October 2026. They name High Agency, Inc., 440 N Barranca Ave #2993, Covina, CA 91723, USA, and choose Delaware law.",
          "The terms of use cover the desktop app, web app, extensions and CLI and hold the billing terms. A separate EULA at https://pen.dev/eula governs the installed software and prevails for it where the two conflict.",
          "The MCP server is local. The CLI and app sign in against https://api.pen.dev, and the web app is app.pen.dev.",
          "The domain registration date was read from RDAP on 8 October, a data interface this method no longer reads. www.pencil.dev answered with the pen.dev site on 8 October.",
          "pen.dev/.well-known/security.txt and /security.txt, status.pen.dev, pen.dev/changelog and pen.dev/security returned 404 on 8 October. pen.dev redirects to www.pen.dev.",
          "The footer says the company is backed by a16z speedrun."
        ],
        "score": 55
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/pen-dev.json",
      "live": {
        "slug": "pen-dev",
        "versions": [
          {
            "registry": "github",
            "name": "highagency/pen-desktop-releases",
            "version": "v1.2.22",
            "released": "2026-11-05",
            "seenAt": "2026-11-06T23:55:15.615366199Z"
          },
          {
            "registry": "npm",
            "name": "@pen.dev/cli",
            "version": "0.3.15",
            "seenAt": "2026-11-06T23:55:14.788196494Z"
          }
        ],
        "githubStars": 2,
        "npmWeekly": 4927,
        "securityTxt": {
          "url": "https://pen.dev/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:01:14.663584453Z"
        },
        "domain": {
          "domain": "pen.dev",
          "registered": "2025-09-10",
          "source": "https://pubapi.registry.google/rdap/domain/pen.dev",
          "checkedAt": "2026-11-01T14:16:10.642958993Z"
        },
        "pages": [
          {
            "url": "https://pen.dev/pricing",
            "kind": "pricing",
            "status": 304,
            "checkedAt": "2026-11-07T14:16:14.385515813Z",
            "changedAt": "2026-11-06T13:37:54.37169744Z",
            "fingerprint": "baaa99388053"
          },
          {
            "url": "https://pen.dev/privacy-policy",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-11-07T14:16:16.557504648Z",
            "changedAt": "2026-11-04T08:29:34.817925027Z",
            "fingerprint": "f67367ab8fe0"
          },
          {
            "url": "https://pen.dev/terms-of-use",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-11-07T14:16:18.628642947Z",
            "changedAt": "2026-11-04T08:29:37.167689148Z",
            "fingerprint": "0c3e6c77ad3c"
          }
        ],
        "github": {
          "repo": "highagency/pen-desktop-releases",
          "checkedAt": "2026-11-02T08:54:35.81152907Z",
          "stars": 2,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-10-29T12:57:34Z",
          "openIssues": 20,
          "openPRs": 0,
          "issuesOpened90d": 18,
          "issuesClosed90d": 0,
          "prsMerged90d": 0,
          "replies": {
            "sampled": 18,
            "unanswered": 18
          }
        },
        "updatedAt": "2026-11-07T16:01:14.663584453Z"
      }
    },
    "edges": [
      {
        "by": 51,
        "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": "The MCP tool input schemas were read from the minified npm bundle, source code no docs page shows, so they aren't a published contract, as for other MCP servers whose schemas sit only in source. The `.pen` format's TypeScript schema on the docs site describes the file, not the tool inputs (0 of 25). No llms.txt. The package ships `SKILL.md` and Markdown reference files that `read_skill` hands to the model (6 of 10). The `execute` description is one line that points to `get_app_state`, with the operations documented only in the skill files, while `browser` states each action and when to use it (12 of 20). `execute` takes a JavaScript snippet as one string. `browser` has enums for action and target (7 of 15). The CLI page has worked examples and a troubleshooting page, with no list of error responses (7 of 15). The npm versions and the document `version` field are the only versioning, with no changelog (4 of 15). The other lines are per the 8 October check, not re-read on 5 November 2026."
        },
        "scores": {
          "a": 87,
          "b": 36
        }
      },
      {
        "by": 35,
        "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": "Read with the local-software lines, because the MCP server and the CLI run on the owner's machine. `@pen.dev/cli` installs from npm with Node.js 22.19 or later stated, and the desktop app has downloads for macOS, Windows and Linux (20). The source is closed, so no public CI or test suite can be seen (0 of 25). The public tracker highagency/pen-desktop-releases has 14 issues opened between 28 July and 6 October 2026, none closed or answered, one of them a report that headless `pen interactive` saved an empty document over a 1.4 MB file with exit status 0. These are users' reports that we did not reproduce (5 of 25). No changelog, empty release notes, and the format page reserves breaking changes (0 of 15). The desktop app is at 1.2.16 and the CLI at 0.3.11 (8 of 15). Sign-in and plan limits also depend on api.pen.dev, which has no status page. Held per the 8 October check, not re-read on 5 November 2026, because pen.dev's terms of 26 October 2026 bar crawling the Services and its hosts were paused. The GitHub issue tracker couldn't be read (github.com pages answer 403)."
        },
        "scores": {
          "a": 68,
          "b": 33
        }
      },
      {
        "by": 24,
        "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": "The CLI uses a stored session token or an organisation-scoped CLI key that the npm README says can be created and revoked in Developer Keys. No scopes, expiry or rotation are documented (18 of 30). The MCP server has no read-only mode, and `execute` is annotated destructive. The integrated agent asks permission for file and command actions, with a 'Dangerously skip permissions' switch, and an owner enables each external client by hand (6 of 20). The `browser` tool and web import bring live page content to the model, and we found no prompt-injection guidance (2 of 15). The Agent tab lists tool activity, `--usage` writes token use to JSON and Pro adds usage tracking, with no audit log documented (5 of 15). No security.txt, disclosure policy, bug bounty or certification was found. The privacy policy says stored data is encrypted in transit and at rest, and an encryption statement alone isn't a security programme (0 of 20). Held per the 8 October check, not re-read on 5 November 2026."
        },
        "scores": {
          "a": 55,
          "b": 31
        }
      },
      {
        "by": 22,
        "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": "Read with the hosted lines, because the software is free to install but needs a pen.dev account and paid plans lift its limits. No machine payment protocol (0). Plan prices are public, Pro $16 and Ultra $48 a user a month, with no per-call price (10 of 20). The Free plan includes the CLI, MCP access and personal developer keys, and sign-up takes an email address, a name and a username with no card step in the documented flow (20). The npm README documents `pen signup` with flags and `pen login --email --code`, so no browser is needed, but someone must open the verification email and read the code, and organisation keys for CI start at Pro (8 of 20). Held per the 8 October check, not re-read on 5 November 2026."
        },
        "scores": {
          "a": 60,
          "b": 38
        }
      },
      {
        "by": 18,
        "category": "maintenance",
        "leads": "pen-dev",
        "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": "`@pen.dev/cli` 0.3.11 and desktop v1.2.16 were published on 8 October 2026, 28 days before this check, and the release repository's clone on 5 November 2026 holds tags up to v1.2.21, five tags added since (30). The CLI had 13 versions between 9 July and 8 October, and desktop v1.2.17 to v1.2.21 were tagged between 8 October and 5 November (20). None of the 14 issues in the current tracker had a reply on 8 October, and one of 25 in the older pencil-desktop-releases tracker was closed; the trackers weren't re-read on 5 November (github.com pages answer 403), and the Discord server wasn't read (4 of 25). No readable registry page shows an entry from the vendor; the 8 October search used the registry's data API, which this method no longer reads (0). Dependencies in 0.3.11 are current major versions, with no public CI (5 of 10)."
        },
        "scores": {
          "a": 41,
          "b": 59
        }
      },
      {
        "by": 17,
        "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": "Four standard tools with short definitions and two conditional ones, though the model must load skill files before `execute` is usable (22 of 25). Output size is in the agent's hands through `Get` callbacks with `skipChildren` and `Print`, and screenshots of chosen nodes, with no documented paging (12 of 20). A failed `execute` returns an `editId` so the agent patches the snippet with `edits`, and `--verbose-mcp` prints full tool errors, but the docs warn that an export failure can exit with status 0 (10 of 20). All tools carry readOnlyHint, destructiveHint, idempotentHint and openWorldHint annotations in the 0.3.11 package, and `--in` with a separate `--out` leaves the source untouched. No idempotency keys (14 of 20). Few required parameters and a one-line headless command. No SDK in any language (8 of 15). Held per the 8 October check, not re-read on 5 November 2026."
        },
        "scores": {
          "a": 83,
          "b": 66
        }
      }
    ],
    "facts": [
      {
        "a": "MCP server",
        "b": "MCP server",
        "name": "Kind"
      },
      {
        "a": "Framelink (Graham Lipsman)",
        "b": "High Agency, Inc.",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "no (local only)",
        "name": "Hosted endpoint"
      },
      {
        "a": "stdio, Streamable HTTP",
        "b": "stdio",
        "name": "Transports"
      },
      {
        "a": "Token",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Free",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MIT",
        "b": "Proprietary. The CLI package on npm carries a proprietary licence file, and the apps fall under the vendor's EULA",
        "name": "Licence"
      },
      {
        "a": "2",
        "b": "6",
        "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-08",
        "name": "Last release"
      },
      {
        "a": "no document linked",
        "b": "2026-10-06",
        "name": "Terms last updated"
      },
      {
        "a": "no document linked",
        "b": "2026-10-06",
        "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": "yes",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not read yet",
        "b": "not found in the text",
        "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": "none",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "2.8/5 (4)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Framelink MCP for Figma scores 66.1 (B) on agent readiness against pen.dev's 43.3 (E), and leads in 5 of 7 scored categories. pen.dev leads on maintenance \u0026 community and transparency \u0026 trust.",
        "question": "Which is better for AI agents, Framelink MCP for Figma or pen.dev?"
      },
      {
        "answer": "Framelink MCP for Figma needs an access token. pen.dev takes an API key or an OAuth sign-in.",
        "question": "Do Framelink MCP for Figma and pen.dev need an API key?"
      },
      {
        "answer": "Framelink MCP for Figma runs on your own machine, with no hosted endpoint listed. pen.dev runs on your own machine, with no hosted endpoint listed.",
        "question": "Can an agent call Framelink MCP for Figma and pen.dev without installing anything?"
      },
      {
        "answer": "Framelink MCP for Figma is open source (MIT). No open-source release is listed for pen.dev.",
        "question": "Are Framelink MCP for Figma and pen.dev open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 68 against 33",
          "Schema \u0026 documentation, 87 against 36",
          "Agent ergonomics, 83 against 66",
          "Security \u0026 auth, 55 against 31",
          "Payments \u0026 pricing, 60 against 38"
        ],
        "also": [
          "Open source"
        ],
        "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, 59 against 41",
          "Transparency \u0026 trust, 55 against 47"
        ],
        "also": null,
        "goodFor": "A coding agent that designs screens beside the code and keeps them in Git, including in CI.",
        "slug": "pen-dev",
        "watchFor": "No changelog. Desktop releases on GitHub had empty notes on 8 October, and the format docs reserve the right to make breaking changes"
      }
    ],
    "history": {
      "framelink-figma-mcp": null,
      "pen-dev": [
        {
          "causes": [
            "correction"
          ],
          "date": "2026-11-05",
          "delta": -4.4,
          "from": 47.7,
          "fromGrade": "D",
          "to": 43.3,
          "toGrade": "E"
        },
        {
          "causes": [
            "correction"
          ],
          "date": "2026-10-28",
          "delta": -0.1,
          "from": 47.8,
          "fromGrade": "D",
          "to": 47.7,
          "toGrade": "D"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-27",
          "delta": 0.2,
          "from": 47.6,
          "fromGrade": "D",
          "to": 47.8,
          "toGrade": "D"
        }
      ]
    },
    "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-pen-dev.json",
        "title": "Figma API + MCP vs pen.dev",
        "url": "https://www.anchorterminal.com/compare/figma-mcp-vs-pen-dev"
      },
      {
        "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-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/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-pen-dev.json",
        "title": "Framer Server API vs pen.dev",
        "url": "https://www.anchorterminal.com/compare/framer-vs-pen-dev"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kite-new-vs-pen-dev.json",
        "title": "Kite vs pen.dev",
        "url": "https://www.anchorterminal.com/compare/kite-new-vs-pen-dev"
      },
      {
        "json": "https://www.anchorterminal.com/compare/miro-vs-pen-dev.json",
        "title": "Miro API + MCP vs pen.dev",
        "url": "https://www.anchorterminal.com/compare/miro-vs-pen-dev"
      },
      {
        "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/pen-dev-vs-sketch.json",
        "title": "pen.dev vs Sketch",
        "url": "https://www.anchorterminal.com/compare/pen-dev-vs-sketch"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pen-dev-vs-subframe.json",
        "title": "pen.dev vs Subframe",
        "url": "https://www.anchorterminal.com/compare/pen-dev-vs-subframe"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pen-dev-vs-zeplin.json",
        "title": "pen.dev vs Zeplin",
        "url": "https://www.anchorterminal.com/compare/pen-dev-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/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-pen-dev.json",
        "title": "Impeccable vs pen.dev",
        "url": "https://www.anchorterminal.com/compare/impeccable-vs-pen-dev"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magic-patterns-vs-pen-dev.json",
        "title": "Magic Patterns vs pen.dev",
        "url": "https://www.anchorterminal.com/compare/magic-patterns-vs-pen-dev"
      },
      {
        "json": "https://www.anchorterminal.com/compare/melius-vs-pen-dev.json",
        "title": "Melius vs pen.dev",
        "url": "https://www.anchorterminal.com/compare/melius-vs-pen-dev"
      },
      {
        "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/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/pen-dev-vs-uxkin-agent.json",
        "title": "pen.dev vs UXKIN",
        "url": "https://www.anchorterminal.com/compare/pen-dev-vs-uxkin-agent"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 35,
        "edge": "framelink-figma-mcp",
        "framelink-figma-mcp": 68,
        "key": "reliability",
        "name": "Reliability",
        "pen-dev": 33,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 51,
        "edge": "framelink-figma-mcp",
        "framelink-figma-mcp": 87,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "pen-dev": 36,
        "weight": 13
      },
      {
        "by": 17,
        "edge": "framelink-figma-mcp",
        "framelink-figma-mcp": 83,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "pen-dev": 66,
        "weight": 13
      },
      {
        "by": 24,
        "edge": "framelink-figma-mcp",
        "framelink-figma-mcp": 55,
        "key": "security",
        "name": "Security \u0026 auth",
        "pen-dev": 31,
        "weight": 14
      },
      {
        "by": 22,
        "edge": "framelink-figma-mcp",
        "framelink-figma-mcp": 60,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "pen-dev": 38,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 18,
        "edge": "pen-dev",
        "framelink-figma-mcp": 41,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "pen-dev": 59,
        "weight": 7
      },
      {
        "by": 8,
        "edge": "pen-dev",
        "framelink-figma-mcp": 47,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "pen-dev": 55,
        "weight": 7
      }
    ],
    "summary": "Framelink MCP for Figma scores 66.1 (B) on agent readiness against pen.dev's 43.3 (E), and leads in 5 of 7 scored categories. pen.dev 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.",
      "pen-dev": "An agent can create, edit and export `.pen` designs without a GUI through the `pen` CLI, with four compact MCP tools that carry annotations and a documented JSON format. The software is closed and needs a pen.dev account. Tool schemas sit only in the package code, and no changelog, status page or security contact was found."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-pen-dev",
    "json": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-pen-dev.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-pen-dev.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-pen-dev.min.md"
  },
  "markdown": "Framelink MCP for Figma scores 66.1 (B) on agent readiness against pen.dev's 43.3 (E), and leads in 5 of 7 scored categories. pen.dev 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 #387 of 1510. Markdown https://www.anchorterminal.com/tools/framelink-figma-mcp.md · JSON https://www.anchorterminal.com/api/v1/tools/framelink-figma-mcp.json\n- pen.dev: grade E, 43.3/100, rank #1253 of 1510. Markdown https://www.anchorterminal.com/tools/pen-dev.md · JSON https://www.anchorterminal.com/api/v1/tools/pen-dev.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### 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 33\n- Schema \u0026 documentation, 87 against 36\n- Agent ergonomics, 83 against 66\n- Security \u0026 auth, 55 against 31\n- Payments \u0026 pricing, 60 against 38\n\nAlso in its favour:\n- Open source\n\nWatch for: Last release 0.13.2 on 18 June 2026, and still below 1.0\n\n### pen.dev (E)\n\nGood for: A coding agent that designs screens beside the code and keeps them in Git, including in CI.\n\nAhead on:\n- Maintenance \u0026 community, 59 against 41\n- Transparency \u0026 trust, 55 against 47\n\nWatch for: No changelog. Desktop releases on GitHub had empty notes on 8 October, and the format docs reserve the right to make breaking changes\n\n\n## Why the edge\n\n### Schema \u0026 documentation: Framelink MCP for Figma +51\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- pen.dev (36): The MCP tool input schemas were read from the minified npm bundle, source code no docs page shows, so they aren't a published contract, as for other MCP servers whose schemas sit only in source. The `.pen` format's TypeScript schema on the docs site describes the file, not the tool inputs (0 of 25). No llms.txt. The package ships `SKILL.md` and Markdown reference files that `read_skill` hands to the model (6 of 10). The `execute` description is one line that points to `get_app_state`, with the operations documented only in the skill files, while `browser` states each action and when to use it (12 of 20). `execute` takes a JavaScript snippet as one string. `browser` has enums for action and target (7 of 15). The CLI page has worked examples and a troubleshooting page, with no list of error responses (7 of 15). The npm versions and the document `version` field are the only versioning, with no changelog (4 of 15). The other lines are per the 8 October check, not re-read on 5 November 2026.\n\n### Reliability: Framelink MCP for Figma +35\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- pen.dev (33): Read with the local-software lines, because the MCP server and the CLI run on the owner's machine. `@pen.dev/cli` installs from npm with Node.js 22.19 or later stated, and the desktop app has downloads for macOS, Windows and Linux (20). The source is closed, so no public CI or test suite can be seen (0 of 25). The public tracker highagency/pen-desktop-releases has 14 issues opened between 28 July and 6 October 2026, none closed or answered, one of them a report that headless `pen interactive` saved an empty document over a 1.4 MB file with exit status 0. These are users' reports that we did not reproduce (5 of 25). No changelog, empty release notes, and the format page reserves breaking changes (0 of 15). The desktop app is at 1.2.16 and the CLI at 0.3.11 (8 of 15). Sign-in and plan limits also depend on api.pen.dev, which has no status page. Held per the 8 October check, not re-read on 5 November 2026, because pen.dev's terms of 26 October 2026 bar crawling the Services and its hosts were paused. The GitHub issue tracker couldn't be read (github.com pages answer 403).\n\n### Security \u0026 auth: Framelink MCP for Figma +24\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- pen.dev (31): The CLI uses a stored session token or an organisation-scoped CLI key that the npm README says can be created and revoked in Developer Keys. No scopes, expiry or rotation are documented (18 of 30). The MCP server has no read-only mode, and `execute` is annotated destructive. The integrated agent asks permission for file and command actions, with a 'Dangerously skip permissions' switch, and an owner enables each external client by hand (6 of 20). The `browser` tool and web import bring live page content to the model, and we found no prompt-injection guidance (2 of 15). The Agent tab lists tool activity, `--usage` writes token use to JSON and Pro adds usage tracking, with no audit log documented (5 of 15). No security.txt, disclosure policy, bug bounty or certification was found. The privacy policy says stored data is encrypted in transit and at rest, and an encryption statement alone isn't a security programme (0 of 20). Held per the 8 October check, not re-read on 5 November 2026.\n\n### Payments \u0026 pricing: Framelink MCP for Figma +22\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- pen.dev (38): Read with the hosted lines, because the software is free to install but needs a pen.dev account and paid plans lift its limits. No machine payment protocol (0). Plan prices are public, Pro $16 and Ultra $48 a user a month, with no per-call price (10 of 20). The Free plan includes the CLI, MCP access and personal developer keys, and sign-up takes an email address, a name and a username with no card step in the documented flow (20). The npm README documents `pen signup` with flags and `pen login --email --code`, so no browser is needed, but someone must open the verification email and read the code, and organisation keys for CI start at Pro (8 of 20). Held per the 8 October check, not re-read on 5 November 2026.\n\n### Maintenance \u0026 community: pen.dev +18\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- pen.dev (59): `@pen.dev/cli` 0.3.11 and desktop v1.2.16 were published on 8 October 2026, 28 days before this check, and the release repository's clone on 5 November 2026 holds tags up to v1.2.21, five tags added since (30). The CLI had 13 versions between 9 July and 8 October, and desktop v1.2.17 to v1.2.21 were tagged between 8 October and 5 November (20). None of the 14 issues in the current tracker had a reply on 8 October, and one of 25 in the older pencil-desktop-releases tracker was closed; the trackers weren't re-read on 5 November (github.com pages answer 403), and the Discord server wasn't read (4 of 25). No readable registry page shows an entry from the vendor; the 8 October search used the registry's data API, which this method no longer reads (0). Dependencies in 0.3.11 are current major versions, with no public CI (5 of 10).\n\n### Agent ergonomics: Framelink MCP for Figma +17\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- pen.dev (66): Four standard tools with short definitions and two conditional ones, though the model must load skill files before `execute` is usable (22 of 25). Output size is in the agent's hands through `Get` callbacks with `skipChildren` and `Print`, and screenshots of chosen nodes, with no documented paging (12 of 20). A failed `execute` returns an `editId` so the agent patches the snippet with `edits`, and `--verbose-mcp` prints full tool errors, but the docs warn that an export failure can exit with status 0 (10 of 20). All tools carry readOnlyHint, destructiveHint, idempotentHint and openWorldHint annotations in the 0.3.11 package, and `--in` with a separate `--out` leaves the source untouched. No idempotency keys (14 of 20). Few required parameters and a one-line headless command. No SDK in any language (8 of 15). Held per the 8 October check, not re-read on 5 November 2026.\n\n## Score by category\n\n| Category | Weight | Framelink MCP for Figma | pen.dev | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 68 | 33 | Framelink MCP for Figma +35 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 87 | 36 | Framelink MCP for Figma +51 |\n| Agent ergonomics | 13% (16.2 this run) | 83 | 66 | Framelink MCP for Figma +17 |\n| Security \u0026 auth | 14% (17.5 this run) | 55 | 31 | Framelink MCP for Figma +24 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 60 | 38 | Framelink MCP for Figma +22 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 41 | 59 | pen.dev +18 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 47 | 55 | pen.dev +8 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **66.1 · B** | **43.3 · E** | |\n\n## Facts side by side\n\n| Fact | Framelink MCP for Figma | pen.dev |\n| --- | --- | --- |\n| Kind | MCP server | MCP server |\n| Vendor | Framelink (Graham Lipsman) | High Agency, Inc. |\n| Hosted endpoint | no (local only) | no (local only) |\n| Transports | stdio, Streamable HTTP | stdio |\n| Auth | Token | OAuth or key |\n| Pricing | Free | Freemium |\n| x402 | no | no |\n| Licence | MIT | Proprietary. The CLI package on npm carries a proprietary licence file, and the apps fall under the vendor's EULA |\n| Tools exposed | 2 | 6 |\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-08 |\n| Terms last updated | no document linked | 2026-10-06 |\n| Privacy policy last updated | no document linked | 2026-10-06 |\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 | yes |\n| Terms or service can change without notice | not read yet | not found in the text |\n| Arbitration or class-action waiver | not read yet | not found in the text |\n| Popularity | 16k stars, 162k npm/wk | none |\n| Agent reviews | none | 2.8/5 (4) |\n\n## How the scores have moved\n\n### Framelink MCP for Figma\n\nNo score change since it was listed.\n\n### pen.dev\n\n- -4.4 on 5 November 2026 (D to E): correction\n- -0.1 on 28 October 2026: correction\n- +0.2 on 27 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**pen.dev.** An agent can create, edit and export `.pen` designs without a GUI through the `pen` CLI, with four compact MCP tools that carry annotations and a documented JSON format. The software is closed and needs a pen.dev account. Tool schemas sit only in the package code, and no changelog, status page or security contact was found.\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### pen.dev\n\n1. Call `read_skill()`, then `read_skill({ path: \"pen-schema.md\" })` and `read_skill({ path: \"execute.md\" })` before the first `execute`. The tool description alone doesn't document the operations\n2. Call `get_app_state()` and confirm the active document before editing. The MCP server works on whichever `.pen` file is open in the app\n3. In headless `pen interactive`, call `save()` before `exit()`, and keep `--in` and `--out` on different paths to preserve the source\n4. Check that an export file exists. The docs say an export failure can print an error without a nonzero exit status\n5. In CI set `PEN_CLI_KEY` plus a provider key such as `ANTHROPIC_API_KEY`. Run `pen version`, since `pen --version` is not a flag\n\n## Questions\n\n### Which is better for AI agents, Framelink MCP for Figma or pen.dev?\n\nFramelink MCP for Figma scores 66.1 (B) on agent readiness against pen.dev's 43.3 (E), and leads in 5 of 7 scored categories. pen.dev leads on maintenance \u0026 community and transparency \u0026 trust.\n\n### Do Framelink MCP for Figma and pen.dev need an API key?\n\nFramelink MCP for Figma needs an access token. pen.dev takes an API key or an OAuth sign-in.\n\n### Can an agent call Framelink MCP for Figma and pen.dev without installing anything?\n\nFramelink MCP for Figma runs on your own machine, with no hosted endpoint listed. pen.dev runs on your own machine, with no hosted endpoint listed.\n\n### Are Framelink MCP for Figma and pen.dev open source?\n\nFramelink MCP for Figma is open source (MIT). No open-source release is listed for pen.dev.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-pen-dev.json, and with the fewest tokens: https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-pen-dev.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"framelink-figma-mcp\", \"b\": \"pen-dev\"}`. From a terminal: `anchor compare framelink-figma-mcp pen-dev`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/framelink-figma-mcp.json and https://www.anchorterminal.com/api/v1/tools/pen-dev.json\n\n## Other comparisons with Framelink MCP for Figma or pen.dev\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 pen.dev](https://www.anchorterminal.com/compare/figma-mcp-vs-pen-dev.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 Penpot API + MCP](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-penpot.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 pen.dev](https://www.anchorterminal.com/compare/framer-vs-pen-dev.md)\n- [Kite vs pen.dev](https://www.anchorterminal.com/compare/kite-new-vs-pen-dev.md)\n- [Miro API + MCP vs pen.dev](https://www.anchorterminal.com/compare/miro-vs-pen-dev.md)\n- [pen.dev vs Penpot API + MCP](https://www.anchorterminal.com/compare/pen-dev-vs-penpot.md)\n- [pen.dev vs Sketch](https://www.anchorterminal.com/compare/pen-dev-vs-sketch.md)\n- [pen.dev vs Subframe](https://www.anchorterminal.com/compare/pen-dev-vs-subframe.md)\n- [pen.dev vs Zeplin](https://www.anchorterminal.com/compare/pen-dev-vs-zeplin.md)\n- [Framelink MCP for Figma vs Impeccable](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-impeccable.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 pen.dev](https://www.anchorterminal.com/compare/impeccable-vs-pen-dev.md)\n- [Magic Patterns vs pen.dev](https://www.anchorterminal.com/compare/magic-patterns-vs-pen-dev.md)\n- [Melius vs pen.dev](https://www.anchorterminal.com/compare/melius-vs-pen-dev.md)\n- [pen.dev vs UX Pilot MCP server](https://www.anchorterminal.com/compare/pen-dev-vs-ux-pilot-mcp.md)\n- [Framelink MCP for Figma vs UXKIN](https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-uxkin-agent.md)\n- [pen.dev vs UXKIN](https://www.anchorterminal.com/compare/pen-dev-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": "Framelink MCP for Figma vs pen.dev",
        "url": ""
      }
    ],
    "description": "Framelink MCP for Figma scores 66.1 (B) to pen.dev's 43.3 (E) for design files. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Framelink MCP for Figma B 66.1",
      "pen.dev E 43.3",
      "scores"
    ],
    "h1": "Framelink MCP for Figma vs pen.dev",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/framelink-figma-mcp-vs-pen-dev",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Framelink MCP for Figma vs pen.dev for AI agents (2026)",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/framelink-figma-mcp-vs-pen-dev"
  },
  "tokens": {
    "markdown": 5300,
    "slim": 3280
  },
  "version": 1
}
