{
  "data": {
    "a": {
      "slug": "bcms",
      "name": "BCMS",
      "vendor": "Becomes tech, LLC",
      "vendorUrl": "https://www.thebcms.com",
      "kind": "http-api",
      "category": "cms",
      "summary": "BCMS is a hosted headless CMS from Becomes tech, LLC. People edit structured content in a dashboard, and agents work with templates, entries, media and languages through a REST API, a JavaScript client, a CLI and a remote MCP server.",
      "url": "https://www.anchorterminal.com/tools/bcms",
      "markdownUrl": "https://www.anchorterminal.com/tools/bcms.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/bcms.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/bcms.json",
      "dns": "bcms.grade.anchorterminal.com",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://app.thebcms.com/api/v3/mcp",
      "packages": [
        {
          "registry": "npm",
          "name": "@thebcms/client"
        }
      ],
      "auth": "api-key",
      "authNotes": "Three-part keys (keyId.secret.instanceId) created in the dashboard and scoped to templates and media, with schema tools only for keys allowed them. The MCP endpoint takes the key only as the `mcpKey` query parameter, and the REST examples pass `apiKey` in the query string. The docs advise a key per person, client and environment and regular rotation.",
      "pricing": "paid",
      "pricingNotes": "Hobby $5 a month ($4 billed yearly) with 2 seats, 100 entries and 500 MB of media; Pro $50 a month ($33 yearly) with 5 seats, then $15 a seat a month, and unlimited entries; Enterprise by quote. Every plan starts with a 14-day free trial with no card. No self-hosted edition.",
      "priceSummary": "$5 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in llms.txt, the docs, the MCP page or pricing.md (checked 2026-11-06).",
        "endpoints": []
      },
      "toolCount": 45,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 396,
        "pypiWeekly": null,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://www.thebcms.com/docs",
      "llmsTxt": "https://www.thebcms.com/llms.txt",
      "capabilities": [
        "cms.content",
        "cms.assets",
        "cms.localisation",
        "cms.schema",
        "cms.publish"
      ],
      "tags": [
        "hosted",
        "mcp",
        "remote-mcp",
        "llms-txt",
        "no-card",
        "closed-source",
        "webhooks",
        "typescript",
        "cli"
      ],
      "lastRelease": "2026-03-16",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 33.5,
        "grade": "F",
        "agentReady": false,
        "rank": 1383,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 17,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 36,
          "maintenance": 16,
          "payments": 30,
          "reliability": 15,
          "schema": 50,
          "security": 39,
          "transparency": 52
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "low",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "BCMS gives agents 45 MCP tools over templates, entries, statuses, history and media, with keys scoped per template and agent guidance in llms.txt, from $5 a month. The MCP key can only travel in the URL, and no status page, rate limits, changelog or security policy were found.",
        "bestFor": "Small sites and agencies that want a cheap hosted CMS an agent can edit.",
        "strengths": [
          "Remote MCP server covering templates, entries, statuses, entry history, media, languages and trash",
          "Keys scoped to the templates and media an agent needs, with schema tools gated separately",
          "llms.txt that says when to use BCMS and when not to, plus a public SKILL.md",
          "Entry history and trash readable through MCP, so an agent can trace and recover changes",
          "14-day trial with no card, then plans from $5 a month"
        ],
        "weaknesses": [
          "The MCP key is accepted only as a URL query parameter",
          "No status page, documented rate limits, SLA or changelog found",
          "No security.txt, disclosure policy or certification found",
          "The JavaScript client hasn't been released since March 2026",
          "No self-hosted edition; the open-source repository has been unmaintained since October 2024"
        ],
        "agentNotes": [
          "Keep the MCP URL out of logs and shared config, since the key is inside it",
          "Call get-all-templates first and mutate only once you have template and entry ids",
          "Ask for a key scoped to the templates the task needs, without schema permission unless it changes the model",
          "List and confirm entry ids with the user before calling delete-entries",
          "Use the bcms-content CLI for scripted runs that need JSON output and exit codes"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "low",
            "grade": "F",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 33.5
          }
        ],
        "editorialScores": {
          "ergonomics": 36,
          "maintenance": 16,
          "payments": 30,
          "reliability": 15,
          "schema": 50,
          "security": 39,
          "transparency": 48
        },
        "provenanceScore": 56,
        "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": "npm install @thebcms/client",
        "claudeCode": "claude mcp add --transport http bcms \"https://app.thebcms.com/api/v3/mcp?mcpKey=YOUR_MCP_KEY_HERE\"",
        "config": {
          "mcpServers": {
            "bcms": {
              "url": "https://app.thebcms.com/api/v3/mcp?mcpKey=YOUR_MCP_KEY_HERE"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/cms.content",
        "tool": "https://letme.dev/bcms"
      },
      "area": "business",
      "unitPrices": [
        {
          "item": "Hobby plan",
          "unit": "month",
          "usd": 5,
          "note": "$4 a month billed yearly; 2 seats, 100 entries"
        },
        {
          "item": "Pro plan",
          "unit": "month",
          "usd": 50,
          "note": "$33 a month billed yearly; 5 seats"
        },
        {
          "item": "Extra Pro seat",
          "unit": "seat-month",
          "usd": 15,
          "note": "$120 a year on yearly billing"
        }
      ],
      "provenance": {
        "legalEntity": "Becomes tech, LLC",
        "domain": "thebcms.com",
        "domainRegistered": "",
        "endpointOnVendorDomain": true,
        "terms": "https://www.thebcms.com/terms-of-use/",
        "privacy": "https://www.thebcms.com/privacy-policy/",
        "statusPage": "",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-11-06",
        "notes": [
          "The terms and privacy policy, both effective 30 July 2026, name Becomes tech, LLC, a Delaware LLC. The terms forbid scraping or crawling that burdens or abuses the services, except through the documented APIs within rate limits.",
          "www.thebcms.com/robots.txt allows all. app.thebcms.com/robots.txt disallows all paths.",
          "www.thebcms.com/.well-known/security.txt returned 404 and no status page was found.",
          "RDAP gave no registration date for thebcms.com through rdap.org."
        ],
        "score": 56
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/bcms.json",
      "live": {
        "slug": "bcms",
        "probe": {
          "target": "https://app.thebcms.com/api/v3/mcp",
          "method": "get",
          "lastAt": "2026-11-07T18:20:13.025269198Z",
          "lastOk": true,
          "lastStatus": 400,
          "lastMs": 197,
          "authRequired": false,
          "uptime24h": 99.5,
          "uptime30d": 99.5,
          "p50ms24h": 141,
          "p95ms24h": 393,
          "samples24h": 200,
          "samples30d": 200,
          "days": [
            {
              "date": "2026-11-06",
              "probes": 13,
              "ok": 13
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 186
            }
          ]
        },
        "versions": [
          {
            "registry": "npm",
            "name": "@thebcms/client",
            "version": "2.0.3",
            "seenAt": "2026-11-06T23:10:32.023184196Z"
          }
        ],
        "npmWeekly": 396,
        "securityTxt": {
          "url": "https://thebcms.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:00:49.817334601Z"
        },
        "llmsTxt": {
          "url": "https://www.thebcms.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:31:42.21650798Z"
        },
        "pages": [
          {
            "url": "https://www.thebcms.com/privacy-policy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:35:35.490295236Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "abae80fa615e"
          },
          {
            "url": "https://www.thebcms.com/terms-of-use/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:35:37.777884178Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "58d8ef9074aa"
          }
        ],
        "mcpTools": {
          "url": "https://app.thebcms.com/api/v3/mcp?mcpKey=YOUR_MCP_KEY_HERE",
          "checkedAt": "2026-11-07T01:42:42.874889438Z",
          "status": "error",
          "note": "initialize: no JSON-RPC answer",
          "changedAt": "2026-11-07T01:42:42.874889438Z"
        },
        "updatedAt": "2026-11-07T18:20:13.025269198Z"
      }
    },
    "answer": "Storyblok scores 64.8 (B) on agent readiness against BCMS's 33.5 (F), and leads in every scored category.",
    "b": {
      "slug": "storyblok",
      "name": "Storyblok",
      "vendor": "Storyblok GmbH",
      "vendorUrl": "https://www.storyblok.com",
      "kind": "http-api",
      "category": "cms",
      "summary": "Storyblok is a hosted headless CMS with a visual editor. Agents write to it through the Management API (stories, components, assets, releases, workflows) or the official hosted MCP server, which wraps that API in seven tools.",
      "url": "https://www.anchorterminal.com/tools/storyblok",
      "markdownUrl": "https://www.anchorterminal.com/tools/storyblok.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/storyblok.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/storyblok.json",
      "dns": "storyblok.grade.anchorterminal.com",
      "repo": "https://github.com/storyblok/monoblok",
      "license": "Proprietary service under Storyblok's terms. The SDKs, API clients and CLI in storyblok/monoblok are MIT",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://mapi.storyblok.com/v1",
      "packages": [
        {
          "registry": "npm",
          "name": "@storyblok/management-api-client"
        },
        {
          "registry": "npm",
          "name": "storyblok-js-client"
        },
        {
          "registry": "npm",
          "name": "storyblok"
        }
      ],
      "auth": "mixed",
      "authNotes": "Self-serve. The Management API takes a personal access token or an OAuth token in the request header. A person creates the token in account settings and picks scopes (16 groups such as stories, assets and components, on a read, write and publish hierarchy), the spaces it covers and an expiry date. The MCP server uses browser OAuth with PKCE and dynamic client registration, where the person picks permissions and spaces on a consent screen, or the same token as a Bearer header. No app review or sales approval is needed. The changelog describes OAuth scoped grants for custom integrations as a Premium and Enterprise feature. Content Delivery API tokens are read-only and travel in the `token` query parameter.",
      "pricing": "freemium",
      "pricingNotes": "Starter is free with no card and includes the Management API, 100,000 API requests a month, 1 seat and 2 locales. Growth is $99 a month and Growth Plus $349 a month billed monthly. Premium and Elite are sold through sales. New spaces start with a 45-day Growth Plus trial. On Growth, extra API requests cost $10 per million and extra seats $15 each (https://www.storyblok.com/pricing, checked 2026-10-07).",
      "priceSummary": "$99 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the Management API docs, the MCP server docs or the pricing page (checked 2026-10-07).",
        "endpoints": []
      },
      "toolCount": 7,
      "popularity": {
        "githubStars": 68,
        "npmWeekly": 432535,
        "pypiWeekly": null,
        "asOf": "2026-10-07"
      },
      "docsUrl": "https://www.storyblok.com/docs/api/management",
      "llmsTxt": "https://www.storyblok.com/llms.txt",
      "openapi": "https://www.storyblok.com/docs/openapi-spec/cdn-v2.openapi.yaml",
      "capabilities": [
        "cms.content",
        "cms.publish",
        "cms.assets",
        "cms.localisation",
        "cms.schema"
      ],
      "tags": [
        "official",
        "hosted",
        "mcp",
        "oauth",
        "closed-source",
        "no-card",
        "free-tier",
        "llms-txt",
        "webhooks",
        "typescript",
        "php",
        "status-page",
        "iso27001"
      ],
      "lastRelease": "2026-10-30",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 64.8,
        "grade": "B",
        "agentReady": false,
        "rank": 451,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 9,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 78,
          "maintenance": 80,
          "payments": 35,
          "reliability": 64,
          "schema": 68,
          "security": 73,
          "transparency": 81
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-01"
        },
        "negative": -3,
        "negativeNotes": [
          "8 April 2026. Storyblok fixed a flaw where the Webhook and Webhook Logs endpoints of the Management API didn't enforce the Admin and Owner restriction the UI applies, so Editor and Restricted roles could manage webhooks by API. It was fixed and disclosed in the changelog, so the deduction is small (https://www.storyblok.com/cl/2026-april-security-fix-webhook-api-now-aligned-with-ui-access-controls)."
        ],
        "verdict": "The hosted MCP server covers the whole Management API with seven tools, OAuth scopes split into read, write and publish per space, and a confirmation step on deletes. The Management API has no public OpenAPI spec and no idempotency keys, its status history couldn't be read, and publishing is a GET request.",
        "bestFor": "Teams already on Storyblok who want an agent to draft, translate and publish stories or change component schemas under scoped, per-space permissions.",
        "strengths": [
          "Official hosted MCP server at mcp.storyblok.com/mcp with seven tools (search, describe, three execute tools, two for asset upload) and a `fields` filter that trims responses",
          "OAuth with PKCE, dynamic client registration and 29 scopes on a read, write and publish hierarchy, chosen per space on a consent screen",
          "Personal access tokens take scopes, a space list and an expiry date since 27 May 2026, and unscoped tokens are revoked on 7 December 2026",
          "Free Starter plan with no card, 100,000 API requests a month and Management API access on every plan",
          "Every docs page is served as Markdown by adding .md, with request examples in nine languages"
        ],
        "weaknesses": [
          "The Management API's OpenAPI spec sits in a private repository. Only the Content Delivery API has a public spec (OpenAPI 3.1, 14 operations)",
          "Management API limit is 3 requests a second on Starter and 6 on paid plans, with no idempotency keys in the reviewed documentation",
          "The status page's monitors and history load from paths its robots.txt closes to readers like ours, and on 7 October it showed no Management API or MCP monitor",
          "On 8 April 2026 Storyblok fixed webhook endpoints that had let Editor and Restricted roles manage webhooks through the API",
          "Version history is kept for 1 day on Starter and 30 days on Growth, so a rollback depends on the plan"
        ],
        "agentNotes": [
          "Pick the base URL by the space's region (mapi.storyblok.com for the EU, api-us, api-ca or api-ap otherwise). A token sent to the wrong region fails",
          "Create stories without `publish` to keep them as drafts, then call the publish endpoint. It is a GET, so never prefetch or blindly retry it",
          "Write translations as `field__i18n__\u003ccode\u003e` keys inside the same content object, and set the component field to translatable first",
          "Upload an asset in three steps (signed response, POST to S3, finish upload). Through MCP the S3 step needs shell access for curl",
          "Stay under 3 calls a second on Starter and 6 on paid plans, and back off exponentially on 429. Saves that break a field's max_length return 422",
          "Replace unscoped personal access tokens with scoped ones before 7 December 2026, when Storyblok revokes them"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 4,
        "avgRating": 3.3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 64.8
          }
        ],
        "editorialScores": {
          "ergonomics": 78,
          "maintenance": 80,
          "payments": 35,
          "reliability": 64,
          "schema": 68,
          "security": 73,
          "transparency": 73
        },
        "provenanceScore": 89,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-01",
            "maintenance": "2026-11-01",
            "payments": "2026-11-01",
            "reliability": "2026-11-01",
            "schema": "2026-11-01",
            "security": "2026-11-01",
            "transparency": "2026-11-01"
          },
          "last": "2026-11-01",
          "lastMoved": "2026-11-01",
          "oldest": "2026-11-01",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npm install @storyblok/management-api-client",
        "http": "curl \"https://mapi.storyblok.com/v1/spaces/$SPACE_ID/stories/\" \\\n  -H \"Authorization: $STORYBLOK_PERSONAL_ACCESS_TOKEN\"",
        "claudeCode": "claude mcp add --transport http Storyblok https://mcp.storyblok.com/mcp",
        "config": {
          "mcpServers": {
            "Storyblok": {
              "type": "http",
              "url": "https://mcp.storyblok.com/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/cms.content",
        "tool": "https://letme.dev/storyblok"
      },
      "area": "business",
      "unitPrices": [
        {
          "item": "Growth",
          "unit": "month",
          "usd": 99,
          "note": "billed monthly, $90.75 billed yearly, 5 seats and 1M API requests included"
        },
        {
          "item": "Growth Plus",
          "unit": "month",
          "usd": 349,
          "note": "billed monthly, $319.91 billed yearly, 15 seats and 4M API requests included"
        },
        {
          "item": "Additional seat",
          "unit": "seat-month",
          "usd": 15,
          "note": "Starter (up to 2 seats) and Growth (up to 10)"
        },
        {
          "item": "Additional API requests on Growth",
          "unit": "1k-requests",
          "usd": 0.01,
          "note": "sold as $10 per 1M, up to 5M a month"
        }
      ],
      "provenance": {
        "legalEntity": "Storyblok GmbH",
        "domain": "storyblok.com",
        "domainRegistered": "2015-08-15",
        "endpointOnVendorDomain": true,
        "terms": "https://www.storyblok.com/legal/terms",
        "privacy": "https://www.storyblok.com/legal/privacy-policy",
        "statusPage": "https://uptime.storyblok.com",
        "changelog": "https://www.storyblok.com/changelog",
        "securityTxt": "none",
        "checked": "2026-10-07",
        "notes": [
          "The legal notice names Storyblok GmbH, Peter-Behrens-Platz 2, 4020 Linz, Austria, company register number FN 479743 f, Regional Court Linz.",
          "The Management API answers on storyblok.com subdomains and the MCP server at mcp.storyblok.com. Spaces in China use app.storyblokchina.cn.",
          "security.txt returns 404 on www.storyblok.com, storyblok.com and mapi.storyblok.com. The privacy policy gives security@storyblok.com for security matters.",
          "The terms page was last updated on 2 October 2026 and links separate self-service and enterprise terms. The self-service terms are governed by Austrian law.",
          "RDAP for storyblok.com gives a registration date of 2015-08-15.",
          "The status page runs on UptimeRobot with four monitors (Content Delivery API v1 and v2, GraphQL API, Image Service)."
        ],
        "score": 89
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/storyblok.json",
      "live": {
        "slug": "storyblok",
        "probe": {
          "target": "https://mapi.storyblok.com/v1",
          "method": "get",
          "lastAt": "2026-11-07T18:20:57.214480129Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 116,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 63,
          "p95ms24h": 152,
          "samples24h": 239,
          "samples30d": 7463,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 93,
              "ok": 93
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-14",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-15",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-16",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-17",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-18",
              "probes": 256,
              "ok": 256
            },
            {
              "date": "2026-10-19",
              "probes": 255,
              "ok": 255
            },
            {
              "date": "2026-10-20",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-21",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-22",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-23",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-24",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-25",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-26",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-27",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-28",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-29",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-30",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-31",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-11-01",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-11-02",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-11-03",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-11-04",
              "probes": 246,
              "ok": 246
            },
            {
              "date": "2026-11-05",
              "probes": 185,
              "ok": 185
            },
            {
              "date": "2026-11-06",
              "probes": 241,
              "ok": 241
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 187
            }
          ]
        },
        "vendorStatus": {
          "page": "https://uptime.storyblok.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-11-07T04:48:49.270430147Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "storyblok/monoblok",
            "version": "@storyblok/richtext@5.5.1",
            "released": "2026-11-06",
            "seenAt": "2026-11-07T00:08:37.693861514Z"
          },
          {
            "registry": "npm",
            "name": "@storyblok/management-api-client",
            "version": "0.12.0",
            "seenAt": "2026-11-07T00:08:33.503154686Z"
          },
          {
            "registry": "npm",
            "name": "storyblok",
            "version": "4.26.1",
            "seenAt": "2026-11-07T00:08:35.690390215Z"
          },
          {
            "registry": "npm",
            "name": "storyblok-js-client",
            "version": "7.9.0",
            "seenAt": "2026-11-07T00:08:34.342464654Z"
          }
        ],
        "githubStars": 69,
        "npmWeekly": 93933,
        "securityTxt": {
          "url": "https://storyblok.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:01:06.571128432Z"
        },
        "llmsTxt": {
          "url": "https://www.storyblok.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:34:03.230141419Z"
        },
        "domain": {
          "domain": "storyblok.com",
          "registered": "2015-08-15",
          "source": "https://rdap.verisign.com/com/v1/domain/storyblok.com",
          "checkedAt": "2026-11-01T14:10:55.025375688Z"
        },
        "pages": [
          {
            "url": "https://www.storyblok.com/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:35:07.437531453Z",
            "changedAt": "2026-11-07T14:35:07.437531453Z",
            "fingerprint": "1fd2db66b080"
          },
          {
            "url": "https://www.storyblok.com/cl/unscoped-pat-sunset-moved-to-december-7",
            "kind": "deprecations",
            "status": 200,
            "checkedAt": "2026-11-07T14:35:09.715540756Z",
            "changedAt": "2026-11-07T14:35:09.715540756Z",
            "fingerprint": "afb883d6444f"
          },
          {
            "url": "https://www.storyblok.com/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-11-07T14:35:16.297239101Z",
            "changedAt": "2026-10-30T06:01:08.396438441Z",
            "fingerprint": "6e34a25a7226"
          },
          {
            "url": "https://www.storyblok.com/legal/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:35:11.770605762Z",
            "changedAt": "2026-10-29T05:28:17.978465711Z",
            "fingerprint": "97ef6a1f8854"
          },
          {
            "url": "https://www.storyblok.com/legal/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:35:13.841692406Z",
            "changedAt": "2026-10-29T05:28:22.626867158Z",
            "fingerprint": "e5291834da3d"
          }
        ],
        "mcpTools": {
          "url": "https://mcp.storyblok.com/mcp",
          "checkedAt": "2026-11-07T01:48:08.962974424Z",
          "status": "auth",
          "note": "asks for credentials before listing its tools",
          "changedAt": "2026-11-07T01:48:08.962974424Z"
        },
        "github": {
          "repo": "storyblok/monoblok",
          "checkedAt": "2026-11-02T09:28:16.153767092Z",
          "stars": 69,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-11-02T08:53:17Z",
          "openIssues": 34,
          "openPRs": 41,
          "issuesOpened90d": 23,
          "issuesClosed90d": 32,
          "prsMerged90d": 111,
          "ci": {
            "branch": "main",
            "runs": 50,
            "success": 50,
            "failure": 0,
            "other": 0,
            "latest": "success",
            "latestAt": "2026-11-02T08:00:53Z"
          },
          "replies": {
            "sampled": 25,
            "unanswered": 9,
            "medianDays": 6.5
          }
        },
        "updatedAt": "2026-11-07T18:20:57.214480129Z"
      }
    },
    "edges": [
      {
        "by": 64,
        "category": "maintenance",
        "leads": "storyblok",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "@thebcms/client 2.0.3 was published on 16 March 2026, more than 180 days ago, and no dated API or MCP change was found. The terms of 30 July 2026 and the 3.0.0 server card show the product is current, so 5 of 30. No dated releases or changelog entries in the last 90 days (0). No public changelog; support by contact form (4 of 25). Not in the official MCP registry; one current JavaScript client (4 of 15). The client hasn't been released since March (3 of 10). 5+0+4+4+3 = 16.",
          "b": "The changelog has an entry on 26 October 2026 and the Management API client 0.11.0 and CLI 4.26.0 were tagged on 30 October 2026 (30). 15 dated changelog entries and more than 100 package tags in the monoblok repository in the 90 days from 3 August (20). Public changelog with RSS, a help centre and a Discord community. Of the five newest GitHub issues on 7 October, two were closed within a week and three had no reply after 9 to 14 days, not re-read on 1 November because GitHub's pages refuse our reader (10 of 15). Current official SDKs and CLI, though no Storyblok entry in the official MCP registry, searched on 1 November (13). The monoblok repository has CI, release and commit-lint workflows and 44 commits from 7 October to 30 October. We didn't check that CI passes (7)."
        },
        "scores": {
          "a": 16,
          "b": 80
        }
      },
      {
        "by": 49,
        "category": "reliability",
        "leads": "storyblok",
        "name": "Reliability",
        "reasons": {
          "a": "Graded on BCMS Cloud with the hosted lines. No status page was found (0) and no incident history could be read (5). The terms refer to rate limits, but no numbers were found in the docs (0). No 429 or retry guidance was found (0). No SLA; Enterprise is by quote (0). The MCP server card says version 3.0.0 and nothing is labelled beta (10). 0+5+0+0+0+10 = 15.",
          "b": "Graded on the Management API and the hosted MCP server. Public UptimeRobot status page at uptime.storyblok.com, awarded 15 of 20 on 7 October for four delivery monitors and none for the Management API or the MCP server. Its monitors and history load by script from `/api/` paths that the status host's robots.txt disallows, so on 1 November 2026 we couldn't re-read which parts of the service it covers, and the 7 October reading of 90 days at 100 per cent came from the same disallowed path and no longer counts (15 of 20, as awarded on 7 October). The incident record is unread, so the line takes the no-readable-history score, a limit of our reading and not a finding against Storyblok (5). Rate limits published, 3 requests a second on Starter and 6 on paid plans (15). The docs advise slowing down on 429 and retrying with exponential backoff, and the official client retries on 429. No Retry-After header in the API docs and no idempotency keys found (9). SLA of 97 per cent on Growth and Growth Plus, 99.9 on Premium and 99.99 on Elite, stated for the Content Delivery API (10). Management API v1 is generally available and the MCP docs carry no beta label (10). 15 + 5 + 15 + 9 + 10 + 10 = 64."
        },
        "scores": {
          "a": 15,
          "b": 64
        }
      },
      {
        "by": 42,
        "category": "ergonomics",
        "leads": "storyblok",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "45 MCP tools, more than 30 (5). We added 3 because keys without schema permission hide the schema tools (8 of 25). No pagination or filter parameters were found in the docs read (6 of 20). Error guidance covers 403 and permission errors only (8 of 20). Annotations weren't readable; entry history and trash give a way back, and the docs say to list and confirm ids before deletes (6 of 20). One JavaScript client and a CLI (8 of 15). 8+6+8+6+8 = 36.",
          "b": "Seven MCP tools cover the whole Management API through search, describe and execute, and a `fields` filter trims responses before they return (25). `page` and `per_page` up to 1,000 with a `total` header, and about 30 filters on the story list (20). Error bodies aren't documented beyond HTTP status codes. Validation failures return 422 with the limit and the current value (8). No idempotency keys. Publish, unpublish and restore are GET requests that change state. MCP splits calls into read-only, mutating and destructive tools, and we couldn't read the tool annotations (10). Few required parameters, and official Management API clients for JavaScript and PHP plus universal clients for Swift and Kotlin (15)."
        },
        "scores": {
          "a": 36,
          "b": 78
        }
      },
      {
        "by": 34,
        "category": "security",
        "leads": "storyblok",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "Keys are scoped per template and media and can be revoked and rotated (25), less 10 because the MCP key is accepted only as `?mcpKey=` in the URL and REST examples pass `apiKey` the same way (15 of 30). Scoped keys, schema tools gated by key, and scoped delete permission; no approval step (12 of 20). Entries hold text written by people and no prompt-injection guidance was found (3 of 15). Entry history and log history (2 days on Hobby, 30 on Pro) let the operator see what an agent changed (9 of 15). No security.txt, disclosure policy or certification was found (0). 15+12+3+9+0 = 39.",
          "b": "OAuth with PKCE S256, dynamic client registration, refresh tokens, revocation and 29 scopes on a read, write and publish hierarchy, or personal access tokens with scopes, a space list and an expiry date (30). Less 5 because Content Delivery API tokens travel in the `token` query parameter. That is a judgement call. Those tokens are read-only and not the graded surface, so we took half the checklist's 10. Scopes separate read, write and publish per space, and `execute_destructive` needs explicit user confirmation. Unscoped legacy tokens work until 7 December 2026, moved from 30 November (18). The changelog names prompt-injected tokens as a risk that scoping limits, and the MCP page asks users to read plans back before writes. No guidance on treating stored content as untrusted (8). Activity log on every plan with an Activities endpoint, kept 1 day on Starter and 30 days on Growth (11). ISO 27001, TISAX, third-party penetration tests and a security contact address. No security.txt, bug bounty or SOC 2 report found (11)."
        },
        "scores": {
          "a": 39,
          "b": 73
        }
      },
      {
        "by": 29,
        "category": "transparency",
        "leads": "storyblok",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "A closed service with terms of 30 July 2026; the old open-source edition is MIT but unmaintained (15 of 30). Terms and privacy policy of 30 July 2026 agree, name providers such as Stripe and OAuth sign-in, and describe retention in general terms with backups rotating out (18 of 30). The open-source repository's end of maintenance is dated; no API deprecation policy (5 of 20). Providers are named by purpose without data locations (10 of 20). 15+18+5+10 = 48.",
          "b": "Closed service with published self-service and enterprise terms, and MIT client libraries (17). DPA effective 22 April 2026, privacy policy effective 6 October 2025, customer content kept up to 90 days after termination, log files 30 days, and AI terms saying input isn't used for training. We found no contradiction between them (25). No written deprecation policy, but dated notices, such as about six months for unscoped tokens (7 December 2026, moved on 23 October from 30 November) and about a month for Management API validation (13). Sub-processors with locations in DPA Annex 3 and data residency in the EU, US, Canada and Australia (18)."
        },
        "scores": {
          "a": 52,
          "b": 81
        }
      },
      {
        "by": 18,
        "category": "schema",
        "leads": "storyblok",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "The docs link an OpenAPI reference at app.thebcms.com/open-api-docs, but that host's robots.txt disallows every path, so it wasn't read. The MCP tool schemas need a session (10 of 25). llms.txt, docs llms.txt, llms-full.txt, Markdown pages and a public SKILL.md (10). llms.txt says when to use BCMS and when not to, and the MCP page gives each tool group's purpose (12 of 20). Input typing couldn't be checked (5 of 15). Curl and JavaScript examples, and troubleshooting for 403 and permission errors (7 of 15). API v3 paths and a 3.0.0 server card, with no changelog found (6 of 15). 10+10+12+5+7+6 = 50.",
          "b": "The only public OpenAPI spec is for the Content Delivery API (3.1, 14 operations). The Management API spec that the official client is generated from sits in the private storyblok/openapi-wdx repository, per the monoblok README. The MCP `describe` tool returns parameter and body schemas per operation to a signed-in client, which we couldn't read (12 of 25). A root llms.txt and a Markdown copy of every docs page at the same URL plus .md (10). The MCP page says when to use the server and when to use the CLI, and names each tool's purpose (16). The reference types every parameter and marks required ones, but story content is a free-form object checked against the space's component schemas (8). Request examples in nine languages on each endpoint. Errors are covered by one line on standard HTTP codes (9). The /v1 path, a dated changelog with an RSS feed, and changes to v1 made in place (13)."
        },
        "scores": {
          "a": 50,
          "b": 68
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Becomes tech, LLC",
        "b": "Storyblok GmbH",
        "name": "Vendor"
      },
      {
        "a": "https://app.thebcms.com/api/v3/mcp",
        "b": "https://mapi.storyblok.com/v1",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "HTTP, Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Paid",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "none",
        "b": "Proprietary service under Storyblok's terms. The SDKs, API clients and CLI in storyblok/monoblok are MIT",
        "name": "Licence"
      },
      {
        "a": "45",
        "b": "7",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-03-16",
        "b": "2026-10-30",
        "name": "Last release"
      },
      {
        "a": "2026-07-30",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "2026-07-30",
        "b": "2025-10-06",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Customer content may train models"
      },
      {
        "a": "yes",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "396 npm/wk",
        "b": "68 stars, 433k npm/wk",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3.3/5 (4)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Storyblok scores 64.8 (B) on agent readiness against BCMS's 33.5 (F), and leads in every scored category.",
        "question": "Which is better for AI agents, BCMS or Storyblok?"
      },
      {
        "answer": "BCMS needs an API key. Storyblok takes an API key or an OAuth sign-in.",
        "question": "Do BCMS and Storyblok need an API key?"
      },
      {
        "answer": "Yes. BCMS has a hosted endpoint at https://app.thebcms.com/api/v3/mcp and Storyblok at https://mapi.storyblok.com/v1.",
        "question": "Can an agent call BCMS and Storyblok without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": null,
        "also": [
          "No incidents deducted, where Storyblok loses 3 points for them"
        ],
        "goodFor": "Small sites and agencies that want a cheap hosted CMS an agent can edit.",
        "slug": "bcms",
        "watchFor": "The MCP key is accepted only as a URL query parameter"
      },
      {
        "aheadOn": [
          "Reliability, 64 against 15",
          "Schema \u0026 documentation, 68 against 50",
          "Agent ergonomics, 78 against 36",
          "Security \u0026 auth, 73 against 39",
          "Payments \u0026 pricing, 35 against 30",
          "Maintenance \u0026 community, 80 against 16",
          "Transparency \u0026 trust, 81 against 52"
        ],
        "also": null,
        "goodFor": "Teams already on Storyblok who want an agent to draft, translate and publish stories or change component schemas under scoped, per-space permissions.",
        "slug": "storyblok",
        "watchFor": "The Management API's OpenAPI spec sits in a private repository. Only the Content Delivery API has a public spec (OpenAPI 3.1, 14 operations)"
      }
    ],
    "history": {
      "bcms": null,
      "storyblok": [
        {
          "causes": [
            "correction"
          ],
          "date": "2026-11-01",
          "delta": -3,
          "from": 67.8,
          "fromGrade": "B",
          "to": 64.8,
          "toGrade": "B"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-27",
          "delta": 0.1,
          "from": 67.7,
          "fromGrade": "B",
          "to": 67.8,
          "toGrade": "B"
        }
      ]
    },
    "job": {
      "capability": "cms.content",
      "name": "Content management"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-buttercms.json",
        "title": "BCMS vs ButterCMS",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-buttercms"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-contentstack.json",
        "title": "BCMS vs Contentstack",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-contentstack"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-cosmic.json",
        "title": "BCMS vs Cosmic",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-cosmic"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-datocms.json",
        "title": "BCMS vs DatoCMS",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-datocms"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-directus.json",
        "title": "BCMS vs Directus",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-directus"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-dotcms.json",
        "title": "BCMS vs dotCMS",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-dotcms"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-ghost.json",
        "title": "BCMS vs Ghost",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-ghost"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-hygraph.json",
        "title": "BCMS vs Hygraph",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-hygraph"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-kontent-ai.json",
        "title": "BCMS vs Kontent.ai",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-kontent-ai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-payload.json",
        "title": "BCMS vs Payload",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-payload"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-prismic.json",
        "title": "BCMS vs Prismic",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-prismic"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-sanity.json",
        "title": "BCMS vs Sanity",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-sanity"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-strapi.json",
        "title": "BCMS vs Strapi",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-strapi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-webflow.json",
        "title": "BCMS vs Webflow",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-webflow"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bcms-vs-wordpress.json",
        "title": "BCMS vs WordPress",
        "url": "https://www.anchorterminal.com/compare/bcms-vs-wordpress"
      },
      {
        "json": "https://www.anchorterminal.com/compare/buttercms-vs-storyblok.json",
        "title": "ButterCMS vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/buttercms-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/contentstack-vs-storyblok.json",
        "title": "Contentstack vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/contentstack-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cosmic-vs-storyblok.json",
        "title": "Cosmic vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/cosmic-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/datocms-vs-storyblok.json",
        "title": "DatoCMS vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/datocms-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/directus-vs-storyblok.json",
        "title": "Directus vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/directus-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dotcms-vs-storyblok.json",
        "title": "dotCMS vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/dotcms-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ghost-vs-storyblok.json",
        "title": "Ghost vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/ghost-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hygraph-vs-storyblok.json",
        "title": "Hygraph vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/hygraph-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kontent-ai-vs-storyblok.json",
        "title": "Kontent.ai vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/kontent-ai-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/payload-vs-storyblok.json",
        "title": "Payload vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/payload-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/prismic-vs-storyblok.json",
        "title": "Prismic vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/prismic-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/sanity-vs-storyblok.json",
        "title": "Sanity vs Storyblok",
        "url": "https://www.anchorterminal.com/compare/sanity-vs-storyblok"
      },
      {
        "json": "https://www.anchorterminal.com/compare/storyblok-vs-strapi.json",
        "title": "Storyblok vs Strapi",
        "url": "https://www.anchorterminal.com/compare/storyblok-vs-strapi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/storyblok-vs-webflow.json",
        "title": "Storyblok vs Webflow",
        "url": "https://www.anchorterminal.com/compare/storyblok-vs-webflow"
      },
      {
        "json": "https://www.anchorterminal.com/compare/storyblok-vs-wordpress.json",
        "title": "Storyblok vs WordPress",
        "url": "https://www.anchorterminal.com/compare/storyblok-vs-wordpress"
      }
    ],
    "panel": null,
    "scores": [
      {
        "bcms": 15,
        "by": 49,
        "edge": "storyblok",
        "key": "reliability",
        "name": "Reliability",
        "storyblok": 64,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "bcms": 50,
        "by": 18,
        "edge": "storyblok",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "storyblok": 68,
        "weight": 13
      },
      {
        "bcms": 36,
        "by": 42,
        "edge": "storyblok",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "storyblok": 78,
        "weight": 13
      },
      {
        "bcms": 39,
        "by": 34,
        "edge": "storyblok",
        "key": "security",
        "name": "Security \u0026 auth",
        "storyblok": 73,
        "weight": 14
      },
      {
        "bcms": 30,
        "by": 5,
        "edge": "storyblok",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "storyblok": 35,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "bcms": 16,
        "by": 64,
        "edge": "storyblok",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "storyblok": 80,
        "weight": 7
      },
      {
        "bcms": 52,
        "by": 29,
        "edge": "storyblok",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "storyblok": 81,
        "weight": 7
      }
    ],
    "summary": "Storyblok scores 64.8 (B) on agent readiness against BCMS's 33.5 (F), and leads in every scored category. Both do content management.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "bcms": "BCMS gives agents 45 MCP tools over templates, entries, statuses, history and media, with keys scoped per template and agent guidance in llms.txt, from $5 a month. The MCP key can only travel in the URL, and no status page, rate limits, changelog or security policy were found.",
      "storyblok": "The hosted MCP server covers the whole Management API with seven tools, OAuth scopes split into read, write and publish per space, and a confirmation step on deletes. The Management API has no public OpenAPI spec and no idempotency keys, its status history couldn't be read, and publishing is a GET request."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/bcms-vs-storyblok",
    "json": "https://www.anchorterminal.com/compare/bcms-vs-storyblok.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/bcms-vs-storyblok.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/bcms-vs-storyblok.min.md"
  },
  "markdown": "Storyblok scores 64.8 (B) on agent readiness against BCMS's 33.5 (F), and leads in every scored category. Both do content management.\n\n- BCMS: grade F, 33.5/100, rank #1383 of 1486. Markdown https://www.anchorterminal.com/tools/bcms.md · JSON https://www.anchorterminal.com/api/v1/tools/bcms.json\n- Storyblok: grade B, 64.8/100, rank #451 of 1486. Markdown https://www.anchorterminal.com/tools/storyblok.md · JSON https://www.anchorterminal.com/api/v1/tools/storyblok.json\n- Best headless CMS and website publishing for AI agents: https://www.anchorterminal.com/best/cms/index.md\n- All 136 cms comparisons: https://www.anchorterminal.com/compare/cms/index.md\n\n## Which one, for what\n\n### BCMS (F)\n\nGood for: Small sites and agencies that want a cheap hosted CMS an agent can edit.\n\nAlso in its favour:\n- No incidents deducted, where Storyblok loses 3 points for them\n\nWatch for: The MCP key is accepted only as a URL query parameter\n\n### Storyblok (B)\n\nGood for: Teams already on Storyblok who want an agent to draft, translate and publish stories or change component schemas under scoped, per-space permissions.\n\nAhead on:\n- Reliability, 64 against 15\n- Schema \u0026 documentation, 68 against 50\n- Agent ergonomics, 78 against 36\n- Security \u0026 auth, 73 against 39\n- Payments \u0026 pricing, 35 against 30\n- Maintenance \u0026 community, 80 against 16\n- Transparency \u0026 trust, 81 against 52\n\nWatch for: The Management API's OpenAPI spec sits in a private repository. Only the Content Delivery API has a public spec (OpenAPI 3.1, 14 operations)\n\n\n## Why the edge\n\n### Maintenance \u0026 community: Storyblok +64\n\n- BCMS (16): @thebcms/client 2.0.3 was published on 16 March 2026, more than 180 days ago, and no dated API or MCP change was found. The terms of 30 July 2026 and the 3.0.0 server card show the product is current, so 5 of 30. No dated releases or changelog entries in the last 90 days (0). No public changelog; support by contact form (4 of 25). Not in the official MCP registry; one current JavaScript client (4 of 15). The client hasn't been released since March (3 of 10). 5+0+4+4+3 = 16.\n- Storyblok (80): The changelog has an entry on 26 October 2026 and the Management API client 0.11.0 and CLI 4.26.0 were tagged on 30 October 2026 (30). 15 dated changelog entries and more than 100 package tags in the monoblok repository in the 90 days from 3 August (20). Public changelog with RSS, a help centre and a Discord community. Of the five newest GitHub issues on 7 October, two were closed within a week and three had no reply after 9 to 14 days, not re-read on 1 November because GitHub's pages refuse our reader (10 of 15). Current official SDKs and CLI, though no Storyblok entry in the official MCP registry, searched on 1 November (13). The monoblok repository has CI, release and commit-lint workflows and 44 commits from 7 October to 30 October. We didn't check that CI passes (7).\n\n### Reliability: Storyblok +49\n\n- BCMS (15): Graded on BCMS Cloud with the hosted lines. No status page was found (0) and no incident history could be read (5). The terms refer to rate limits, but no numbers were found in the docs (0). No 429 or retry guidance was found (0). No SLA; Enterprise is by quote (0). The MCP server card says version 3.0.0 and nothing is labelled beta (10). 0+5+0+0+0+10 = 15.\n- Storyblok (64): Graded on the Management API and the hosted MCP server. Public UptimeRobot status page at uptime.storyblok.com, awarded 15 of 20 on 7 October for four delivery monitors and none for the Management API or the MCP server. Its monitors and history load by script from `/api/` paths that the status host's robots.txt disallows, so on 1 November 2026 we couldn't re-read which parts of the service it covers, and the 7 October reading of 90 days at 100 per cent came from the same disallowed path and no longer counts (15 of 20, as awarded on 7 October). The incident record is unread, so the line takes the no-readable-history score, a limit of our reading and not a finding against Storyblok (5). Rate limits published, 3 requests a second on Starter and 6 on paid plans (15). The docs advise slowing down on 429 and retrying with exponential backoff, and the official client retries on 429. No Retry-After header in the API docs and no idempotency keys found (9). SLA of 97 per cent on Growth and Growth Plus, 99.9 on Premium and 99.99 on Elite, stated for the Content Delivery API (10). Management API v1 is generally available and the MCP docs carry no beta label (10). 15 + 5 + 15 + 9 + 10 + 10 = 64.\n\n### Agent ergonomics: Storyblok +42\n\n- BCMS (36): 45 MCP tools, more than 30 (5). We added 3 because keys without schema permission hide the schema tools (8 of 25). No pagination or filter parameters were found in the docs read (6 of 20). Error guidance covers 403 and permission errors only (8 of 20). Annotations weren't readable; entry history and trash give a way back, and the docs say to list and confirm ids before deletes (6 of 20). One JavaScript client and a CLI (8 of 15). 8+6+8+6+8 = 36.\n- Storyblok (78): Seven MCP tools cover the whole Management API through search, describe and execute, and a `fields` filter trims responses before they return (25). `page` and `per_page` up to 1,000 with a `total` header, and about 30 filters on the story list (20). Error bodies aren't documented beyond HTTP status codes. Validation failures return 422 with the limit and the current value (8). No idempotency keys. Publish, unpublish and restore are GET requests that change state. MCP splits calls into read-only, mutating and destructive tools, and we couldn't read the tool annotations (10). Few required parameters, and official Management API clients for JavaScript and PHP plus universal clients for Swift and Kotlin (15).\n\n### Security \u0026 auth: Storyblok +34\n\n- BCMS (39): Keys are scoped per template and media and can be revoked and rotated (25), less 10 because the MCP key is accepted only as `?mcpKey=` in the URL and REST examples pass `apiKey` the same way (15 of 30). Scoped keys, schema tools gated by key, and scoped delete permission; no approval step (12 of 20). Entries hold text written by people and no prompt-injection guidance was found (3 of 15). Entry history and log history (2 days on Hobby, 30 on Pro) let the operator see what an agent changed (9 of 15). No security.txt, disclosure policy or certification was found (0). 15+12+3+9+0 = 39.\n- Storyblok (73): OAuth with PKCE S256, dynamic client registration, refresh tokens, revocation and 29 scopes on a read, write and publish hierarchy, or personal access tokens with scopes, a space list and an expiry date (30). Less 5 because Content Delivery API tokens travel in the `token` query parameter. That is a judgement call. Those tokens are read-only and not the graded surface, so we took half the checklist's 10. Scopes separate read, write and publish per space, and `execute_destructive` needs explicit user confirmation. Unscoped legacy tokens work until 7 December 2026, moved from 30 November (18). The changelog names prompt-injected tokens as a risk that scoping limits, and the MCP page asks users to read plans back before writes. No guidance on treating stored content as untrusted (8). Activity log on every plan with an Activities endpoint, kept 1 day on Starter and 30 days on Growth (11). ISO 27001, TISAX, third-party penetration tests and a security contact address. No security.txt, bug bounty or SOC 2 report found (11).\n\n### Transparency \u0026 trust: Storyblok +29\n\n- BCMS (52): A closed service with terms of 30 July 2026; the old open-source edition is MIT but unmaintained (15 of 30). Terms and privacy policy of 30 July 2026 agree, name providers such as Stripe and OAuth sign-in, and describe retention in general terms with backups rotating out (18 of 30). The open-source repository's end of maintenance is dated; no API deprecation policy (5 of 20). Providers are named by purpose without data locations (10 of 20). 15+18+5+10 = 48.\n- Storyblok (81): Closed service with published self-service and enterprise terms, and MIT client libraries (17). DPA effective 22 April 2026, privacy policy effective 6 October 2025, customer content kept up to 90 days after termination, log files 30 days, and AI terms saying input isn't used for training. We found no contradiction between them (25). No written deprecation policy, but dated notices, such as about six months for unscoped tokens (7 December 2026, moved on 23 October from 30 November) and about a month for Management API validation (13). Sub-processors with locations in DPA Annex 3 and data residency in the EU, US, Canada and Australia (18).\n\n### Schema \u0026 documentation: Storyblok +18\n\n- BCMS (50): The docs link an OpenAPI reference at app.thebcms.com/open-api-docs, but that host's robots.txt disallows every path, so it wasn't read. The MCP tool schemas need a session (10 of 25). llms.txt, docs llms.txt, llms-full.txt, Markdown pages and a public SKILL.md (10). llms.txt says when to use BCMS and when not to, and the MCP page gives each tool group's purpose (12 of 20). Input typing couldn't be checked (5 of 15). Curl and JavaScript examples, and troubleshooting for 403 and permission errors (7 of 15). API v3 paths and a 3.0.0 server card, with no changelog found (6 of 15). 10+10+12+5+7+6 = 50.\n- Storyblok (68): The only public OpenAPI spec is for the Content Delivery API (3.1, 14 operations). The Management API spec that the official client is generated from sits in the private storyblok/openapi-wdx repository, per the monoblok README. The MCP `describe` tool returns parameter and body schemas per operation to a signed-in client, which we couldn't read (12 of 25). A root llms.txt and a Markdown copy of every docs page at the same URL plus .md (10). The MCP page says when to use the server and when to use the CLI, and names each tool's purpose (16). The reference types every parameter and marks required ones, but story content is a free-form object checked against the space's component schemas (8). Request examples in nine languages on each endpoint. Errors are covered by one line on standard HTTP codes (9). The /v1 path, a dated changelog with an RSS feed, and changes to v1 made in place (13).\n\n## Score by category\n\n| Category | Weight | BCMS | Storyblok | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 15 | 64 | Storyblok +49 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 50 | 68 | Storyblok +18 |\n| Agent ergonomics | 13% (16.2 this run) | 36 | 78 | Storyblok +42 |\n| Security \u0026 auth | 14% (17.5 this run) | 39 | 73 | Storyblok +34 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 30 | 35 | Storyblok +5 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 16 | 80 | Storyblok +64 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 52 | 81 | Storyblok +29 |\n| Negative events | ≤15 | 0 | -3 | |\n| **Total** | | **33.5 · F** | **64.8 · B** | |\n\n## Facts side by side\n\n| Fact | BCMS | Storyblok |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Becomes tech, LLC | Storyblok GmbH |\n| Hosted endpoint | `https://app.thebcms.com/api/v3/mcp` | `https://mapi.storyblok.com/v1` |\n| Transports | HTTP, Streamable HTTP | HTTP, Streamable HTTP |\n| Auth | API key | OAuth or key |\n| Pricing | Paid | Freemium |\n| x402 | no | no |\n| Licence | none | Proprietary service under Storyblok's terms. The SDKs, API clients and CLI in storyblok/monoblok are MIT |\n| Tools exposed | 45 | 7 |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| Last release | 2026-03-16 | 2026-10-30 |\n| Terms last updated | 2026-07-30 | couldn't be read |\n| Privacy policy last updated | 2026-07-30 | 2025-10-06 |\n| Customer content may train models | not found in the text | couldn't be read |\n| Terms restrict automated access | yes | couldn't be read |\n| Terms restrict benchmarking | not found in the text | couldn't be read |\n| Terms or service can change without notice | not found in the text | couldn't be read |\n| Arbitration or class-action waiver | not found in the text | couldn't be read |\n| Popularity | 396 npm/wk | 68 stars, 433k npm/wk |\n| Agent reviews | none | 3.3/5 (4) |\n\n## How the scores have moved\n\n### BCMS\n\nNo score change since it was listed.\n\n### Storyblok\n\n- -3.0 on 1 November 2026: correction\n- +0.1 on 27 October 2026: checklist\n\n## Verdicts\n\n**BCMS.** BCMS gives agents 45 MCP tools over templates, entries, statuses, history and media, with keys scoped per template and agent guidance in llms.txt, from $5 a month. The MCP key can only travel in the URL, and no status page, rate limits, changelog or security policy were found.\n\n**Storyblok.** The hosted MCP server covers the whole Management API with seven tools, OAuth scopes split into read, write and publish per space, and a confirmation step on deletes. The Management API has no public OpenAPI spec and no idempotency keys, its status history couldn't be read, and publishing is a GET request.\n\n## Before you call either\n\n### BCMS\n\n1. Keep the MCP URL out of logs and shared config, since the key is inside it\n2. Call get-all-templates first and mutate only once you have template and entry ids\n3. Ask for a key scoped to the templates the task needs, without schema permission unless it changes the model\n4. List and confirm entry ids with the user before calling delete-entries\n5. Use the bcms-content CLI for scripted runs that need JSON output and exit codes\n\n### Storyblok\n\n1. Pick the base URL by the space's region (mapi.storyblok.com for the EU, api-us, api-ca or api-ap otherwise). A token sent to the wrong region fails\n2. Create stories without `publish` to keep them as drafts, then call the publish endpoint. It is a GET, so never prefetch or blindly retry it\n3. Write translations as `field__i18n__\u003ccode\u003e` keys inside the same content object, and set the component field to translatable first\n4. Upload an asset in three steps (signed response, POST to S3, finish upload). Through MCP the S3 step needs shell access for curl\n5. Stay under 3 calls a second on Starter and 6 on paid plans, and back off exponentially on 429. Saves that break a field's max_length return 422\n6. Replace unscoped personal access tokens with scoped ones before 7 December 2026, when Storyblok revokes them\n\n## Questions\n\n### Which is better for AI agents, BCMS or Storyblok?\n\nStoryblok scores 64.8 (B) on agent readiness against BCMS's 33.5 (F), and leads in every scored category.\n\n### Do BCMS and Storyblok need an API key?\n\nBCMS needs an API key. Storyblok takes an API key or an OAuth sign-in.\n\n### Can an agent call BCMS and Storyblok without installing anything?\n\nYes. BCMS has a hosted endpoint at https://app.thebcms.com/api/v3/mcp and Storyblok at https://mapi.storyblok.com/v1.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/bcms-vs-storyblok.json, and with the fewest tokens: https://www.anchorterminal.com/compare/bcms-vs-storyblok.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"bcms\", \"b\": \"storyblok\"}`. From a terminal: `anchor compare bcms storyblok`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/bcms.json and https://www.anchorterminal.com/api/v1/tools/storyblok.json\n\n## Other comparisons with BCMS or Storyblok\n\n- [BCMS vs ButterCMS](https://www.anchorterminal.com/compare/bcms-vs-buttercms.md)\n- [BCMS vs Contentstack](https://www.anchorterminal.com/compare/bcms-vs-contentstack.md)\n- [BCMS vs Cosmic](https://www.anchorterminal.com/compare/bcms-vs-cosmic.md)\n- [BCMS vs DatoCMS](https://www.anchorterminal.com/compare/bcms-vs-datocms.md)\n- [BCMS vs Directus](https://www.anchorterminal.com/compare/bcms-vs-directus.md)\n- [BCMS vs dotCMS](https://www.anchorterminal.com/compare/bcms-vs-dotcms.md)\n- [BCMS vs Ghost](https://www.anchorterminal.com/compare/bcms-vs-ghost.md)\n- [BCMS vs Hygraph](https://www.anchorterminal.com/compare/bcms-vs-hygraph.md)\n- [BCMS vs Kontent.ai](https://www.anchorterminal.com/compare/bcms-vs-kontent-ai.md)\n- [BCMS vs Payload](https://www.anchorterminal.com/compare/bcms-vs-payload.md)\n- [BCMS vs Prismic](https://www.anchorterminal.com/compare/bcms-vs-prismic.md)\n- [BCMS vs Sanity](https://www.anchorterminal.com/compare/bcms-vs-sanity.md)\n- [BCMS vs Strapi](https://www.anchorterminal.com/compare/bcms-vs-strapi.md)\n- [BCMS vs Webflow](https://www.anchorterminal.com/compare/bcms-vs-webflow.md)\n- [BCMS vs WordPress](https://www.anchorterminal.com/compare/bcms-vs-wordpress.md)\n- [ButterCMS vs Storyblok](https://www.anchorterminal.com/compare/buttercms-vs-storyblok.md)\n- [Contentstack vs Storyblok](https://www.anchorterminal.com/compare/contentstack-vs-storyblok.md)\n- [Cosmic vs Storyblok](https://www.anchorterminal.com/compare/cosmic-vs-storyblok.md)\n- [DatoCMS vs Storyblok](https://www.anchorterminal.com/compare/datocms-vs-storyblok.md)\n- [Directus vs Storyblok](https://www.anchorterminal.com/compare/directus-vs-storyblok.md)\n- [dotCMS vs Storyblok](https://www.anchorterminal.com/compare/dotcms-vs-storyblok.md)\n- [Ghost vs Storyblok](https://www.anchorterminal.com/compare/ghost-vs-storyblok.md)\n- [Hygraph vs Storyblok](https://www.anchorterminal.com/compare/hygraph-vs-storyblok.md)\n- [Kontent.ai vs Storyblok](https://www.anchorterminal.com/compare/kontent-ai-vs-storyblok.md)\n- [Payload vs Storyblok](https://www.anchorterminal.com/compare/payload-vs-storyblok.md)\n- [Prismic vs Storyblok](https://www.anchorterminal.com/compare/prismic-vs-storyblok.md)\n- [Sanity vs Storyblok](https://www.anchorterminal.com/compare/sanity-vs-storyblok.md)\n- [Storyblok vs Strapi](https://www.anchorterminal.com/compare/storyblok-vs-strapi.md)\n- [Storyblok vs Webflow](https://www.anchorterminal.com/compare/storyblok-vs-webflow.md)\n- [Storyblok vs WordPress](https://www.anchorterminal.com/compare/storyblok-vs-wordpress.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": "BCMS vs Storyblok",
        "url": ""
      }
    ],
    "description": "Storyblok scores 64.8 (B) to BCMS's 33.5 (F) for content management. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "BCMS F 33.5",
      "Storyblok B 64.8",
      "scores"
    ],
    "h1": "BCMS vs Storyblok",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/bcms-vs-storyblok",
    "published": "2026-10-01",
    "section": "tools",
    "title": "BCMS vs Storyblok for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/bcms-vs-storyblok"
  },
  "tokens": {
    "markdown": 4650,
    "slim": 2830
  },
  "version": 1
}
