{
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "tool": {
    "slug": "pdfmonkey",
    "name": "PDFMonkey",
    "vendor": "PDFMonkey",
    "vendorUrl": "https://pdfmonkey.io",
    "kind": "http-api",
    "category": "pdf-tools",
    "summary": "PDFMonkey is a hosted service from a Paris company that generates PDFs and images from Liquid or Builder templates and JSON data, through a REST API, a CLI, Ruby and Node.js SDKs, and a local MCP server.",
    "url": "https://www.anchorterminal.com/tools/pdfmonkey",
    "markdownUrl": "https://www.anchorterminal.com/tools/pdfmonkey.md",
    "slimMarkdownUrl": "https://www.anchorterminal.com/tools/pdfmonkey.min.md",
    "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/pdfmonkey.json",
    "dns": "pdfmonkey.grade.anchorterminal.com",
    "repo": "https://github.com/pdfmonkey/pdfmonkey-mcp",
    "license": "MIT (MCP server, CLI and SDKs)",
    "transports": [
      "stdio"
    ],
    "remoteUrl": "https://api.pdfmonkey.io/api/v1",
    "packages": [
      {
        "registry": "npm",
        "name": "pdfmonkey-mcp-server"
      },
      {
        "registry": "npm",
        "name": "@pdfmonkey/cli"
      },
      {
        "registry": "npm",
        "name": "pdfmonkey"
      },
      {
        "registry": "rubygems",
        "name": "pdfmonkey"
      }
    ],
    "auth": "api-key",
    "authNotes": "One secret API key per account, sent as `Authorization: Bearer`, found on the dashboard's API Key page after a browser signup. The key carries the whole account's privileges. Rotate API key issues a new key while the old one keeps working for 2 days, or is revoked at once. The MCP server and CLI read PDFMONKEY_API_KEY.",
    "pricing": "freemium",
    "pricingNotes": "Free plan with 20 documents a month and a 30-day Pro trial with 300 documents, no card. Starter €5 a month for 300 documents, Pro €15 for 3,000, Pro+ €60 for 5,000, Premium €300 for 60,000, 10 per cent off yearly. Pay-as-you-go overage from €0.008 to €0.005 a document, Boost Packs €5 per 1,000 documents (https://pdfmonkey.io/pricing/).",
    "priceSummary": "$5.59 / mo",
    "where": "both",
    "x402": {
      "level": "no",
      "evidence": "No x402, MPP or L402 in the docs, llms-full.txt, pricing page or MCP server source (checked 2026-11-03). Quota overruns are billed to the plan's card through the dashboard.",
      "endpoints": []
    },
    "toolCount": 11,
    "popularity": {
      "githubStars": null,
      "npmWeekly": 97,
      "pypiWeekly": null,
      "asOf": "2026-11-03"
    },
    "docsUrl": "https://pdfmonkey.io/docs/",
    "llmsTxt": "https://pdfmonkey.io/llms.txt",
    "registryName": "io.github.pdfmonkey/pdfmonkey-mcp",
    "capabilities": [
      "pdf.generate",
      "pdf.forms"
    ],
    "tags": [
      "hosted",
      "freemium",
      "no-card",
      "free-tier",
      "mcp",
      "mcp-registry",
      "llms-txt",
      "cli",
      "webhooks",
      "async-jobs",
      "typescript",
      "ruby",
      "eu",
      "mit",
      "closed-source"
    ],
    "lastRelease": "2026-10-26",
    "graded": true,
    "anchor": {
      "graded": true,
      "score": 59.3,
      "grade": "C",
      "agentReady": false,
      "rank": 634,
      "ranked": true,
      "rankOf": 1349,
      "categoryRank": 3,
      "methodology": "0.7",
      "run": "2026-10-01",
      "scores": {
        "ergonomics": 75,
        "maintenance": 81,
        "payments": 40,
        "reliability": 60,
        "schema": 61,
        "security": 36,
        "transparency": 78
      },
      "pending": [
        "performance",
        "tasks"
      ],
      "breakdown": [
        {
          "key": "reliability",
          "name": "Reliability",
          "weight": 16,
          "effectiveWeight": 20,
          "score": 60,
          "points": 12,
          "reason": "Read with the hosted lines. status.pdfmonkey.io is an updown.io page with six checks (API, dashboard, preview, website, generation latency, queue size) and one month of rolling uptime per check, but no incident write-ups (15). The readable record is the uptime figures (API 99.98 per cent and queue 99.97 per cent since 3 October 2026) and the one incident the vendor wrote up, a slowdown of a little under an hour on 29 September 2026 with a post-mortem on 1 October; the 90-day list itself isn't published, so minor incidents only (20). The docs say there is no hard rate limit, only the monthly quota, so no request-rate numbers (5 for the quota numbers). The Node.js SDK retries 408, 429 and 5xx with backoff and honours Retry-After, and the webhook docs say delivery is at least once and to make handlers idempotent, but document creation has no idempotency key (10). No SLA found in the terms or pricing (0). GA (10). 15 + 20 + 5 + 10 + 0 + 10 = 60.",
          "checked": "2026-11-03"
        },
        {
          "key": "performance",
          "name": "Performance",
          "weight": 10,
          "effectiveWeight": 0,
          "pending": true,
          "points": 0,
          "reason": "Pending. Latency is measured per call by our probes, which haven't run yet, so this run doesn't score it. Its weight is shared across the assessed categories until the first probe window closes."
        },
        {
          "key": "schema",
          "name": "Schema \u0026 documentation",
          "weight": 13,
          "effectiveWeight": 16.25,
          "score": 61,
          "points": 9.91,
          "reason": "No OpenAPI document was found on pdfmonkey.io, in llms-full.txt or in the repositories; the 11 MCP tools carry JSON Schema inputs from src/tools.ts (12). llms.txt and llms-full.txt, and every docs page has a Markdown twin (10). MCP tool descriptions are one line each and say what the tool does, and the MCP docs say what the server can't do (create or edit templates) and send that job to the CLI; the API docs explain async against sync and when to use each (12). Parameter tables give types and required fields, list_documents has a status enum, and `payload` is by nature a free JSON object matched to the template (10). Request examples in curl, Ruby, Node.js, Python and PHP on every endpoint, a 401 body, a 422 body with field names and a troubleshooting section for blank documents, empty and 403 download URLs (12). The API lives under /api/v1 and docs pages carry a last-updated date, but there is no changelog page, changes are announced in blog posts such as What We Shipped Since the Summer of 26 October 2026 (5). 12 + 10 + 12 + 10 + 12 + 5 = 61.",
          "checked": "2026-11-03"
        },
        {
          "key": "ergonomics",
          "name": "Agent ergonomics",
          "weight": 13,
          "effectiveWeight": 16.25,
          "score": 75,
          "points": 12.19,
          "reason": "11 compact MCP tools from a 17 KB tools.ts, and API responses are cards without payload or logs on list and sync endpoints, while a full template fetch is large and the SDK docs warn about it (22). `page[number]`, `q[status]`, `q[document_template_id]`, `q[updated_since]` and `q[search]` on document cards, `q[folders]` on templates and snippets, a `meta` block with pagination, and the CLI's `--json` (18). 401 and 422 bodies name the problem, 403 on an expired download URL is explained, and a quota overrun rejects the create rather than making a draft; the MCP server returns the API's error text (14). No idempotency key on create, so a retried create queues and bills a second document; webhooks are at least once with idempotency guidance; the MCP server sets no readOnlyHint or destructiveHint and `delete_document` is permanent, which the docs leave to the client to confirm (6). Only `document_template_id` and `payload` are needed, and official SDKs exist in two languages (Node.js and Ruby) plus the CLI (15). 22 + 18 + 14 + 6 + 15 = 75.",
          "checked": "2026-11-03"
        },
        {
          "key": "security",
          "name": "Security \u0026 auth",
          "weight": 14,
          "effectiveWeight": 17.5,
          "score": 36,
          "points": 6.3,
          "reason": "One secret key per account with the whole account's privileges, sent as a Bearer header; it can be rotated with a 2-day overlap and the old key revoked at once, but there are no scopes, no second key and no read-only key (12). No least-privilege mode; the MCP server exposes `delete_document`, the CLI asks before deletions unless `-y`, and the MCP docs say most clients ask before running a delete (6). The tools return the account's own templates, documents and quota, not third-party content (10). Each document carries generation logs and the dashboard shows usage, but no audit log or per-key activity view was found (3). No security.txt (404), no disclosure policy and no bug bounty; the compliance page says there is no SOC 2 or ISO 27001, and sets against that EU hosting, encrypted payloads and a DPA dated 15 October 2026 (5). 12 + 6 + 10 + 3 + 5 = 36.",
          "checked": "2026-11-03"
        },
        {
          "key": "payments",
          "name": "Payments \u0026 pricing",
          "weight": 10,
          "effectiveWeight": 12.5,
          "score": 40,
          "points": 5,
          "reason": "No x402, MPP or L402 (0). Plan prices in euros, per-document pay-as-you-go rates and the Boost Pack price are on the public pricing page and in the docs (20). A Free plan of 20 documents a month and a 30-day Pro trial of 300 documents, no card (20). Signup is a browser flow and the key is minted in the dashboard (0). 0 + 20 + 20 + 0 = 40.",
          "checked": "2026-11-03"
        },
        {
          "key": "tasks",
          "name": "Task success",
          "weight": 10,
          "effectiveWeight": 0,
          "pending": true,
          "points": 0,
          "reason": "Pending. Task success needs the category task suites run through each tool, which haven't run yet, so this run doesn't score it. Its weight is shared across the assessed categories until then. A data provider's data-quality score is published on its listing now and becomes half of this category when it's scored."
        },
        {
          "key": "maintenance",
          "name": "Maintenance \u0026 community",
          "weight": 7,
          "effectiveWeight": 8.75,
          "score": 81,
          "points": 7.09,
          "reason": "Read as a closed service with open-source clients. pdfmonkey-mcp-server 1.0.1 on 26 October 2026, @pdfmonkey/cli 2.1.0 on 15 October and docs pages updated 2 November (30). Node SDK 1.1.0 to 1.4.0 between 2 and 5 October, CLI 2.0.0 and 2.1.0 on 13 and 15 October, MCP 1.0.1 on 26 October (20). Blog posts announce changes, and support answers by in-app chat and email within a few hours in CET business hours per the docs; GitHub issue replies couldn't be read (10 of 15). io.github.pdfmonkey/pdfmonkey-mcp in the official registry, 1.0.1 latest (15). The MCP server has unit tests, a release workflow on tags and a prepublish test step, but no CI on pull requests and a loose `^1.0.4` pin on the MCP SDK (6). 30 + 20 + 10 + 15 + 6 = 81.",
          "checked": "2026-11-03"
        },
        {
          "key": "transparency",
          "name": "Transparency \u0026 trust",
          "weight": 7,
          "effectiveWeight": 8.75,
          "score": 78,
          "points": 6.83,
          "note": "editorial 70, provenance 86",
          "reason": "Closed service with iubenda terms that name the owner only as PDFMonkey at a Paris address, while the MCP server, CLI, Node SDK and Ruby gem are MIT (20). Retention statements agree across the plans page, the retention page and the data storage page (per-template TTL, 1 day, 7 days or unlimited by plan), the DPA and DsPA of 15 October 2026 are downloadable, and the privacy policy of 16 September 2026 names its processors, though it still lists Heroku where the docs name Fly.io (24). Engine deprecations were announced with a promised heads-up in 2023 and key rotation has a 2-day overlap, but there is no written deprecation policy with notice periods (8). Data locations are named (Paris and Frankfurt) and the DPA carries the approved sub-processor list (18). 20 + 24 + 8 + 18 = 70.",
          "checked": "2026-11-03"
        }
      ],
      "assessment": {
        "date": "2026-11-03",
        "basis": "public evidence",
        "confidence": "medium",
        "notes": {
          "ergonomics": "11 compact MCP tools from a 17 KB tools.ts, and API responses are cards without payload or logs on list and sync endpoints, while a full template fetch is large and the SDK docs warn about it (22). `page[number]`, `q[status]`, `q[document_template_id]`, `q[updated_since]` and `q[search]` on document cards, `q[folders]` on templates and snippets, a `meta` block with pagination, and the CLI's `--json` (18). 401 and 422 bodies name the problem, 403 on an expired download URL is explained, and a quota overrun rejects the create rather than making a draft; the MCP server returns the API's error text (14). No idempotency key on create, so a retried create queues and bills a second document; webhooks are at least once with idempotency guidance; the MCP server sets no readOnlyHint or destructiveHint and `delete_document` is permanent, which the docs leave to the client to confirm (6). Only `document_template_id` and `payload` are needed, and official SDKs exist in two languages (Node.js and Ruby) plus the CLI (15). 22 + 18 + 14 + 6 + 15 = 75.",
          "maintenance": "Read as a closed service with open-source clients. pdfmonkey-mcp-server 1.0.1 on 26 October 2026, @pdfmonkey/cli 2.1.0 on 15 October and docs pages updated 2 November (30). Node SDK 1.1.0 to 1.4.0 between 2 and 5 October, CLI 2.0.0 and 2.1.0 on 13 and 15 October, MCP 1.0.1 on 26 October (20). Blog posts announce changes, and support answers by in-app chat and email within a few hours in CET business hours per the docs; GitHub issue replies couldn't be read (10 of 15). io.github.pdfmonkey/pdfmonkey-mcp in the official registry, 1.0.1 latest (15). The MCP server has unit tests, a release workflow on tags and a prepublish test step, but no CI on pull requests and a loose `^1.0.4` pin on the MCP SDK (6). 30 + 20 + 10 + 15 + 6 = 81.",
          "payments": "No x402, MPP or L402 (0). Plan prices in euros, per-document pay-as-you-go rates and the Boost Pack price are on the public pricing page and in the docs (20). A Free plan of 20 documents a month and a 30-day Pro trial of 300 documents, no card (20). Signup is a browser flow and the key is minted in the dashboard (0). 0 + 20 + 20 + 0 = 40.",
          "reliability": "Read with the hosted lines. status.pdfmonkey.io is an updown.io page with six checks (API, dashboard, preview, website, generation latency, queue size) and one month of rolling uptime per check, but no incident write-ups (15). The readable record is the uptime figures (API 99.98 per cent and queue 99.97 per cent since 3 October 2026) and the one incident the vendor wrote up, a slowdown of a little under an hour on 29 September 2026 with a post-mortem on 1 October; the 90-day list itself isn't published, so minor incidents only (20). The docs say there is no hard rate limit, only the monthly quota, so no request-rate numbers (5 for the quota numbers). The Node.js SDK retries 408, 429 and 5xx with backoff and honours Retry-After, and the webhook docs say delivery is at least once and to make handlers idempotent, but document creation has no idempotency key (10). No SLA found in the terms or pricing (0). GA (10). 15 + 20 + 5 + 10 + 0 + 10 = 60.",
          "schema": "No OpenAPI document was found on pdfmonkey.io, in llms-full.txt or in the repositories; the 11 MCP tools carry JSON Schema inputs from src/tools.ts (12). llms.txt and llms-full.txt, and every docs page has a Markdown twin (10). MCP tool descriptions are one line each and say what the tool does, and the MCP docs say what the server can't do (create or edit templates) and send that job to the CLI; the API docs explain async against sync and when to use each (12). Parameter tables give types and required fields, list_documents has a status enum, and `payload` is by nature a free JSON object matched to the template (10). Request examples in curl, Ruby, Node.js, Python and PHP on every endpoint, a 401 body, a 422 body with field names and a troubleshooting section for blank documents, empty and 403 download URLs (12). The API lives under /api/v1 and docs pages carry a last-updated date, but there is no changelog page, changes are announced in blog posts such as What We Shipped Since the Summer of 26 October 2026 (5). 12 + 10 + 12 + 10 + 12 + 5 = 61.",
          "security": "One secret key per account with the whole account's privileges, sent as a Bearer header; it can be rotated with a 2-day overlap and the old key revoked at once, but there are no scopes, no second key and no read-only key (12). No least-privilege mode; the MCP server exposes `delete_document`, the CLI asks before deletions unless `-y`, and the MCP docs say most clients ask before running a delete (6). The tools return the account's own templates, documents and quota, not third-party content (10). Each document carries generation logs and the dashboard shows usage, but no audit log or per-key activity view was found (3). No security.txt (404), no disclosure policy and no bug bounty; the compliance page says there is no SOC 2 or ISO 27001, and sets against that EU hosting, encrypted payloads and a DPA dated 15 October 2026 (5). 12 + 6 + 10 + 3 + 5 = 36.",
          "transparency": "Closed service with iubenda terms that name the owner only as PDFMonkey at a Paris address, while the MCP server, CLI, Node SDK and Ruby gem are MIT (20). Retention statements agree across the plans page, the retention page and the data storage page (per-template TTL, 1 day, 7 days or unlimited by plan), the DPA and DsPA of 15 October 2026 are downloadable, and the privacy policy of 16 September 2026 names its processors, though it still lists Heroku where the docs name Fly.io (24). Engine deprecations were announced with a promised heads-up in 2023 and key rotation has a 2-day overlap, but there is no written deprecation policy with notice periods (8). Data locations are named (Paris and Frankfurt) and the DPA carries the approved sub-processor list (18). 20 + 24 + 8 + 18 = 70."
        },
        "sources": [
          {
            "what": "MCP server docs",
            "url": "https://pdfmonkey.io/docs/integrations/mcp/",
            "seen": "2026-11-03"
          },
          {
            "what": "CLI docs",
            "url": "https://pdfmonkey.io/docs/integrations/cli/",
            "seen": "2026-11-03"
          },
          {
            "what": "Documents API",
            "url": "https://pdfmonkey.io/docs/api/documents/",
            "seen": "2026-11-03"
          },
          {
            "what": "API authentication and key rotation",
            "url": "https://pdfmonkey.io/docs/api/authentication/",
            "seen": "2026-11-03"
          },
          {
            "what": "llms-full.txt (plans, trial, pay-as-you-go, boost packs, security, retention, DPA, webhooks, Node SDK)",
            "url": "https://pdfmonkey.io/llms-full.txt",
            "seen": "2026-11-03"
          },
          {
            "what": "pricing",
            "url": "https://pdfmonkey.io/pricing/",
            "seen": "2026-11-03"
          },
          {
            "what": "security measures",
            "url": "https://pdfmonkey.io/docs/account-and-security/security-measures/",
            "seen": "2026-11-03"
          },
          {
            "what": "compliance and DPA",
            "url": "https://pdfmonkey.io/docs/account-and-security/compliance-and-dpa/",
            "seen": "2026-11-03"
          },
          {
            "what": "support",
            "url": "https://pdfmonkey.io/docs/getting-started/support/",
            "seen": "2026-11-03"
          },
          {
            "what": "post-mortem of 29 September 2026",
            "url": "https://pdfmonkey.io/blog/2026-10-01-post-mortem-tiny-counter-froze-our-api/",
            "seen": "2026-11-03"
          },
          {
            "what": "CLI 2.0 announcement",
            "url": "https://pdfmonkey.io/blog/2026-10-13-pdfmonkey-cli-2.0/",
            "seen": "2026-11-03"
          },
          {
            "what": "What We Shipped Since the Summer",
            "url": "https://pdfmonkey.io/blog/2026-10-26-what-we-shipped-since-the-summer/",
            "seen": "2026-11-03"
          },
          {
            "what": "status page (updown.io)",
            "url": "https://status.pdfmonkey.io/",
            "seen": "2026-11-03"
          },
          {
            "what": "API check uptime",
            "url": "https://status.pdfmonkey.io/iwc2",
            "seen": "2026-11-03"
          },
          {
            "what": "terms (iubenda)",
            "url": "https://www.iubenda.com/terms-and-conditions/72376615",
            "seen": "2026-11-03"
          },
          {
            "what": "privacy policy (iubenda)",
            "url": "https://www.iubenda.com/privacy-policy/72376615",
            "seen": "2026-11-03"
          },
          {
            "what": "npm pdfmonkey-mcp-server",
            "url": "https://registry.npmjs.org/pdfmonkey-mcp-server",
            "seen": "2026-11-03"
          },
          {
            "what": "npm @pdfmonkey/cli",
            "url": "https://registry.npmjs.org/@pdfmonkey/cli",
            "seen": "2026-11-03"
          },
          {
            "what": "npm pdfmonkey (Node SDK)",
            "url": "https://registry.npmjs.org/pdfmonkey",
            "seen": "2026-11-03"
          },
          {
            "what": "RubyGems pdfmonkey",
            "url": "https://rubygems.org/api/v1/gems/pdfmonkey.json",
            "seen": "2026-11-03"
          },
          {
            "what": "MCP registry entry",
            "url": "https://registry.modelcontextprotocol.io/v0/servers?search=pdfmonkey",
            "seen": "2026-11-03"
          },
          {
            "what": "MCP server repository, shallow clone",
            "url": "https://github.com/pdfmonkey/pdfmonkey-mcp",
            "seen": "2026-11-03"
          },
          {
            "what": "RDAP for pdfmonkey.io",
            "url": "https://rdap.identitydigital.services/rdap/domain/pdfmonkey.io",
            "seen": "2026-11-03"
          },
          {
            "what": "security.txt (404)",
            "url": "https://pdfmonkey.io/.well-known/security.txt",
            "seen": "2026-11-03"
          },
          {
            "what": "ECB reference rates",
            "url": "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml",
            "seen": "2026-11-03"
          }
        ],
        "openQuestions": [
          "unchecked: replies on GitHub issues of the pdfmonkey repositories, which github.com's web pages refuse our reader; maintenance responsiveness rests on the blog and the support page",
          "unchecked: the live tools/list of the MCP server and whether its results carry annotations; the tool list and schemas are from src/tools.ts in the 1.0.1 tag",
          "The legal entity is recorded as PDFMonkey because the iubenda terms and privacy policy give only that name and a Paris address; the French register answered our reader with a loading page, so the company form and registration number are unread",
          "firstReleased is 9 December 2019, the date of the oldest blog post (Master Templates); the domain was registered on 7 May 2016 and the Zapier integration post is from 17 December 2019",
          "The privacy policy of 16 September 2026 still lists Heroku among hosting providers while the docs name Fly.io, AWS and Neon; recorded as a small disagreement, not a deduction",
          "Judgement call on reliability. The status page shows uptime per check for one month and no incident list, so the incident record is read from those figures and the vendor's own post-mortem of the 29 September 2026 slowdown"
        ]
      },
      "negative": 0,
      "verdict": "An agent gets 11 compact MCP tools, a scriptable CLI and a sync endpoint, with public euro prices and a free plan. The one account-wide key has no scopes, document creation has no idempotency key, and there is no OpenAPI document, SLA or security disclosure policy.",
      "bestFor": "Agents that fill known templates with JSON to produce invoices, reports, forms and images, and teams that want an agent to author templates through the CLI.",
      "strengths": [
        "11 compact MCP tools with typed inputs, and a CLI whose management commands all take `--json` and exit non-zero on error",
        "`POST /api/v1/documents/sync` returns the finished document in one request, waiting up to 6 minutes",
        "Plan prices, per-document overage rates and Boost Pack prices are public in euros, with a Free plan and a 30-day trial that need no card",
        "Key rotation keeps the old key alive for 2 days, and payloads are stored encrypted in EU data centres with a published DPA",
        "MCP server, CLI, Node.js SDK and Ruby gem are MIT and in the official MCP registry under a verified namespace"
      ],
      "weaknesses": [
        "One secret key with the whole account's privileges, no scopes and no read-only key",
        "No OpenAPI document, no changelog page and no written rate limits beyond the monthly quota",
        "No idempotency key on document creation, so a retried create queues and bills a second document",
        "No SLA, no security.txt, no disclosure policy and no SOC 2 or ISO 27001, which the docs state plainly",
        "The MCP server has no tool annotations and includes a permanent `delete_document`"
      ],
      "agentNotes": [
        "Use `POST /api/v1/documents/sync` or the MCP `generate_document` tool for one document; for batches create with `status: pending` and poll `document_cards` or take the webhook",
        "Fetch the template first (`get_template` or `pdfmonkey template get --json`) to learn the payload shape; a mismatched payload generates a blank or wrong document, not an error",
        "Download within the hour; `download_url` returns 403 after 60 minutes, and fetching the document again gives a fresh link",
        "Do not retry a create on a timeout without checking `list_documents` first; there is no idempotency key and each generation counts against the quota",
        "Expect a 422 with field names when a required field is missing, and a rejected create at 100 per cent of the monthly quota unless pay-as-you-go is on"
      ],
      "metrics": {
        "kind": "remote",
        "measured": false
      },
      "reviewCount": 0,
      "avgRating": 0,
      "history": [
        {
          "basis": "public evidence",
          "confidence": "medium",
          "grade": "C",
          "methodology": "0.7",
          "pending": [
            "performance",
            "tasks"
          ],
          "run": "2026-10-01",
          "runLabel": "October 2026 research run",
          "score": 59.3
        }
      ],
      "editorialScores": {
        "ergonomics": 75,
        "maintenance": 81,
        "payments": 40,
        "reliability": 60,
        "schema": 61,
        "security": 36,
        "transparency": 70
      },
      "provenanceScore": 86,
      "checked": {
        "categories": {
          "ergonomics": "2026-11-03",
          "maintenance": "2026-11-03",
          "payments": "2026-11-03",
          "reliability": "2026-11-03",
          "schema": "2026-11-03",
          "security": "2026-11-03",
          "transparency": "2026-11-03"
        },
        "last": "2026-11-03",
        "oldest": "2026-11-03",
        "stale": false,
        "staleAfterDays": 90
      },
      "scoreHistory": [
        {
          "date": "2026-11-03",
          "grade": "C",
          "kind": "listed",
          "method": "0.7",
          "score": 59.3
        }
      ]
    },
    "connect": {
      "install": "npm install -g @pdfmonkey/cli",
      "http": "curl https://api.pdfmonkey.io/api/v1/current_user -H \"Authorization: Bearer $PDFMONKEY_API_KEY\"",
      "claudeCode": "claude mcp add pdfmonkey -e PDFMONKEY_API_KEY=your-api-key -- npx -y pdfmonkey-mcp-server",
      "config": {
        "mcpServers": {
          "pdfmonkey": {
            "args": [
              "-y",
              "pdfmonkey-mcp-server"
            ],
            "command": "npx",
            "env": {
              "PDFMONKEY_API_KEY": "your-api-key"
            }
          }
        }
      }
    },
    "letme": {
      "capability": "https://letme.dev/pdf.generate",
      "tool": "https://letme.dev/pdfmonkey"
    },
    "notable": [
      "The official MCP server runs locally over stdio with 11 tools that list workspaces, templates and snippets, generate and delete documents and read the quota; it cannot create or edit templates, which the CLI does (https://pdfmonkey.io/docs/integrations/mcp/)",
      "CLI 2.0 of 13 October 2026 manages templates, folders, snippets and documents from the terminal, with `--json` on every management command, non-zero exit codes and `-y` for deletions outside a terminal, written for scripts and agents (https://pdfmonkey.io/blog/2026-10-13-pdfmonkey-cli-2.0/)",
      "Generation is asynchronous by default. `POST /api/v1/documents` with `status: pending` queues a document, `POST /api/v1/documents/sync` waits up to 6 minutes, and webhooks deliver at least once (https://pdfmonkey.io/docs/api/documents/)",
      "The docs say there is no hard rate limit on the API, only the plan's monthly quota; at 100 per cent of quota the API rejects creation requests with `status: pending` (https://pdfmonkey.io/docs/pricing-and-billing/our-plans/)",
      "On 29 September 2026 the API was slow for a little under an hour because a database trigger serialised writes per workspace; the post-mortem of 1 October 2026 explains the cause and the fix (https://pdfmonkey.io/blog/2026-10-01-post-mortem-tiny-counter-froze-our-api/)",
      "Hosting is in the EU (Fly.io and AWS in Paris, Neon in Frankfurt), payloads are stored encrypted, download URLs expire after one hour, and a DPA and DsPA dated 15 October 2026 are published; there is no SOC 2 or ISO 27001 (https://pdfmonkey.io/docs/account-and-security/compliance-and-dpa/)",
      "Published in the official MCP registry as io.github.pdfmonkey/pdfmonkey-mcp, 1.0.0 on 18 August 2026 and 1.0.1 on 26 October 2026 (https://registry.modelcontextprotocol.io/v0/servers?search=pdfmonkey)"
    ],
    "area": "web-data",
    "details": [
      {
        "label": "Surface listed",
        "value": "The REST API at api.pdfmonkey.io/api/v1 with the local MCP server (pdfmonkey-mcp-server 1.0.1) and the CLI (@pdfmonkey/cli 2.1.0), read from pdfmonkey.io/docs, llms-full.txt, the pricing page, the iubenda terms and privacy policy, status.pdfmonkey.io, npm, the MCP registry and a shallow clone of pdfmonkey/pdfmonkey-mcp on 3 November 2026. No account was made and no tool was called"
      },
      {
        "label": "MCP tools",
        "value": "list_workspaces, list_templates, get_template, generate_document (polls every 1.5 s for up to 3 minutes), get_document_status, list_documents, delete_document, list_snippets, get_snippet, get_quota, get_user_info, plus four prompts"
      },
      {
        "label": "Templates",
        "value": "Code templates in Liquid with HTML, SCSS and sample data, or Builder templates with blocks. Output as PDF, PNG, WebP or JPG. Fillable PDF forms, password protection, QR codes, electronic invoicing formats and share links on Pro+ and Premium"
      },
      {
        "label": "Limits",
        "value": "Generation time 30 seconds on Free and Starter, 2 minutes on Pro, 3 on Pro+, 5 on Premium. `meta` at most 200 KB. No hard request rate limit documented. Download URLs valid for one hour"
      },
      {
        "label": "Retention",
        "value": "Per-template TTL from 5 minutes to unlimited by plan. Documents kept 1 day on Free, Starter and the trial, 7 days on Pro, unlimited on Pro+ and Premium"
      },
      {
        "label": "Rate limits",
        "value": "The docs say there is no hard rate limit, only the monthly quota. The Node.js SDK retries 408, 429 and 5xx twice with backoff and honours Retry-After"
      },
      {
        "label": "SDKs and integrations",
        "value": "Node.js SDK `pdfmonkey` 1.4.0 (zero dependencies, Node 20+, Bun, Deno, Workers), Ruby gem `pdfmonkey` 1.0.0, CLI 2.1.0, plus Zapier, Make, n8n (verified node), Workato, Bubble and Glide"
      },
      {
        "label": "Hosting and compliance",
        "value": "Application on Fly.io and files on AWS in Paris, database on Neon in Frankfurt. Payloads encrypted at rest. DPA and DsPA dated 15 October 2026. No SOC 2 or ISO 27001"
      },
      {
        "label": "Legal entity",
        "value": "The terms and privacy policy name the owner as PDFMonkey, 49 rue de Ponthieu, Lot 41, 75008 Paris, with no company form or registration number"
      }
    ],
    "unitPrices": [
      {
        "item": "Starter",
        "unit": "month",
        "usd": 5.59,
        "note": "€5, 300 documents a month, converted at the ECB rate of 3 November 2026 (1.1179). €4.50 billed yearly"
      },
      {
        "item": "Pro",
        "unit": "month",
        "usd": 16.77,
        "note": "€15, 3,000 documents a month. €13.50 billed yearly"
      },
      {
        "item": "Pro+",
        "unit": "month",
        "usd": 67.07,
        "note": "€60, 5,000 documents a month. €54 billed yearly"
      },
      {
        "item": "Premium",
        "unit": "month",
        "usd": 335.37,
        "note": "€300, 60,000 documents a month. €270 billed yearly"
      },
      {
        "item": "Pay-as-you-go document on Starter",
        "unit": "tx",
        "usd": 0.0089,
        "note": "€0.008 a document beyond the quota. Pro €0.007, Pro+ €0.006, Premium €0.005"
      },
      {
        "item": "Boost Pack",
        "unit": "tx",
        "usd": 5.59,
        "note": "€5 for 1,000 extra documents, expiring at the monthly quota reset"
      }
    ],
    "provenance": {
      "legalEntity": "PDFMonkey",
      "domain": "pdfmonkey.io",
      "domainRegistered": "2016-05-07",
      "endpointOnVendorDomain": true,
      "terms": "https://pdfmonkey.io/terms-and-conditions",
      "privacy": "https://pdfmonkey.io/privacy-policy",
      "statusPage": "https://status.pdfmonkey.io",
      "changelog": "https://pdfmonkey.io/blog/",
      "securityTxt": "none",
      "checked": "2026-11-03",
      "notes": [
        "The terms and privacy policy are iubenda documents embedded on pdfmonkey.io (iubenda ids 72376615). They name the owner as PDFMonkey at 49 rue de Ponthieu, Lot 41, 75008 Paris, with no company form or registration number. The privacy policy was last updated 16 September 2026.",
        "The terms forbid accounts registered by bots or automated methods and contain no clause on automated reading of the website. pdfmonkey.io/robots.txt allows all crawlers.",
        "status.pdfmonkey.io is an updown.io page with six checks (API, dashboard, preview, website, generation latency, queue size) showing one month of rolling uptime per check and no incident write-ups.",
        "RDAP gives pdfmonkey.io a registration date of 7 May 2016. The oldest blog post is dated 9 December 2019, used for firstReleased.",
        "/.well-known/security.txt and /security.txt return 404. There is no changelog page; product changes are announced on the blog."
      ],
      "score": 86,
      "checks": [
        {
          "check": "Legal entity named",
          "value": "PDFMonkey",
          "points": 20,
          "max": 20,
          "state": "ok"
        },
        {
          "check": "Domain age",
          "value": "pdfmonkey.io, registered 2016-05-07 (10 years)",
          "points": 15,
          "max": 15,
          "state": "ok"
        },
        {
          "check": "Endpoint on the vendor's domain",
          "value": "api.pdfmonkey.io",
          "points": 15,
          "max": 15,
          "state": "ok"
        },
        {
          "check": "Terms of service",
          "value": "published, but our reader couldn't read it",
          "points": 7,
          "max": 10,
          "state": "part"
        },
        {
          "check": "Privacy policy",
          "value": "published, but our reader couldn't read it",
          "points": 7,
          "max": 10,
          "state": "part"
        },
        {
          "check": "Status page",
          "value": "status.pdfmonkey.io",
          "points": 10,
          "max": 10,
          "state": "ok"
        },
        {
          "check": "Changelog",
          "value": "published",
          "points": 10,
          "max": 10,
          "state": "ok"
        },
        {
          "check": "security.txt",
          "value": "not found",
          "points": 0,
          "max": 10,
          "state": "no"
        },
        {
          "check": "People named",
          "value": "1 named with their role, 1 with a public profile",
          "points": 10,
          "max": 10,
          "state": "ok"
        },
        {
          "check": "Support route",
          "value": "a support address, help pages, a community",
          "points": 5,
          "max": 5,
          "state": "ok"
        }
      ],
      "policies": [
        {
          "kind": "terms",
          "url": "https://pdfmonkey.io/terms-and-conditions",
          "state": "unreadable",
          "reason": "the page has 66 words of text without a browser, so the document is drawn by script or sits elsewhere",
          "readAt": "2026-11-03",
          "points": 7,
          "max": 10
        },
        {
          "kind": "privacy",
          "url": "https://pdfmonkey.io/privacy-policy",
          "state": "unreadable",
          "reason": "the page has 64 words of text without a browser, so the document is drawn by script or sits elsewhere",
          "readAt": "2026-11-03",
          "points": 7,
          "max": 10
        }
      ]
    },
    "humans": {
      "slug": "pdfmonkey",
      "checked": "2026-11-03",
      "company": "PDFMonkey",
      "people": [
        {
          "name": "Simon Courtois",
          "role": "CTO and Co-founder",
          "founder": true,
          "linkedin": "https://www.linkedin.com/in/simoncourtois/",
          "bio": "Simon Courtois is CTO and co-founder of PDFMonkey, where the blog's author note says he supervises the development and evolution of the platform. He wrote the post-mortem of the 29 September 2026 slowdown and the announcements of CLI 2.0 and the MCP server in October 2026.",
          "bioSources": [
            "https://pdfmonkey.io/blog/2026-10-01-post-mortem-tiny-counter-froze-our-api/",
            "https://pdfmonkey.io/blog/2026-10-13-pdfmonkey-cli-2.0/"
          ],
          "page": "/people/simon-courtois/"
        }
      ],
      "peopleNote": "Simon Courtois is the only person named on a first-hand page; every blog post read carries his author note as CTO and Co-founder, with a LinkedIn link. The docs describe a small team and the home page says the product is made in France. No other co-founder is named on pdfmonkey.io, the terms, the privacy policy or the contact page, so the roster is incomplete. Investors were looked for on the blog index, the docs, the terms, the contact page and llms.txt; nothing mentions funding or backers, and the French company register answered our reader with a loading page, so ownership is recorded as private on the docs' own description of a small, independent company.",
      "companySocial": {
        "linkedin": "https://www.linkedin.com/company/pdfmonkey/",
        "x": "https://x.com/pdfmonkey",
        "github": "https://github.com/pdfmonkey"
      },
      "support": {
        "emails": [
          "support@pdfmonkey.io",
          "tinymonkey@pdfmonkey.io"
        ],
        "urls": [
          "https://pdfmonkey.io/docs/getting-started/support/",
          "https://pdfmonkey.io/contact/"
        ],
        "community": [
          {
            "label": "MCP server issues",
            "url": "https://github.com/pdfmonkey/pdfmonkey-mcp/issues",
            "kind": "github"
          }
        ],
        "contactEmails": [
          "contact@pdfmonkey.io"
        ],
        "contactUrls": [
          "https://pdfmonkey.io/contact/"
        ]
      },
      "sources": [
        "https://pdfmonkey.io/blog/2026-10-01-post-mortem-tiny-counter-froze-our-api/",
        "https://pdfmonkey.io/blog/2026-10-13-pdfmonkey-cli-2.0/",
        "https://pdfmonkey.io/docs/getting-started/support/",
        "https://pdfmonkey.io/contact/",
        "https://pdfmonkey.io/docs/account-and-security/compliance-and-dpa/",
        "https://www.iubenda.com/terms-and-conditions/72376615",
        "https://github.com/pdfmonkey/pdfmonkey-mcp"
      ],
      "ownership": {
        "status": "private",
        "checked": "2026-11-03",
        "sources": [
          "https://pdfmonkey.io/docs/account-and-security/compliance-and-dpa/",
          "https://www.iubenda.com/terms-and-conditions/72376615"
        ]
      }
    },
    "pageJsonUrl": "https://www.anchorterminal.com/tools/pdfmonkey.json",
    "live": {
      "slug": "pdfmonkey",
      "probe": {
        "target": "https://api.pdfmonkey.io/api/v1",
        "method": "get",
        "lastAt": "2026-11-04T20:05:18.358197222Z",
        "lastOk": true,
        "lastStatus": 404,
        "lastMs": 162,
        "authRequired": false,
        "uptime24h": 100,
        "uptime30d": 100,
        "p50ms24h": 155,
        "p95ms24h": 714,
        "samples24h": 48,
        "samples30d": 48,
        "days": [
          {
            "date": "2026-11-04",
            "probes": 48,
            "ok": 48
          }
        ]
      },
      "vendorStatus": {
        "page": "https://status.pdfmonkey.io",
        "indicator": "unknown",
        "summary": "no machine-readable status found",
        "checkedAt": "2026-11-04T15:32:28.217450512Z"
      },
      "versions": [
        {
          "registry": "mcp-registry",
          "name": "io.github.pdfmonkey/pdfmonkey-mcp",
          "version": "1.0.1",
          "seenAt": "2026-11-04T17:11:44.552009456Z"
        }
      ],
      "securityTxt": {
        "url": "https://pdfmonkey.io/.well-known/security.txt",
        "state": "none",
        "checkedAt": "2026-11-04T15:54:14.692797875Z"
      },
      "updatedAt": "2026-11-04T20:05:18.358197222Z"
    }
  }
}
