Head to head · Content management · October 2026 research run
dotCMS vs Storyblok
Storyblok scores 64.8 (B) on agent readiness against dotCMS's 57.7 (C), and leads in 6 of 7 scored categories. Both do content management.
Best headless CMS and website publishing for AI agents · All 136 cms comparisons
Which one, for what
dotCMS C
Best for Enterprises already on dotCMS who want an agent to manage content and pages.
Also in its favour
- Runs on your own machine
- No incidents deducted, where Storyblok loses 3 points for them
Watch for
Pre-1.0 package, with the dev docs still pointing at the beta tag
Best for Teams already on Storyblok who want an agent to draft, translate and publish stories or change component schemas under scoped, per-space permissions.
Ahead on
- Reliability, 64 against 47
- Agent ergonomics, 78 against 68
- Security & auth, 73 against 63
- Maintenance & community, 80 against 75
- Transparency & trust, 81 against 54
Also in its favour
- A hosted endpoint, with nothing to install
- Free to start without a card
Watch 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)
Why the edge
Each category where one leads by five points or more, with the reason behind each side's score from its assessment. The numbers are in the table below; this is what they stand for.
Transparency & trust Storyblok +27
dotCMS 54
dotCMS core is under the Business Source License 1.1, source-available rather than OSI, with an additional use grant under $5 million; the MCP package is GPL-3.0 on npm (20 of 30). The privacy policy of 8 September 2026 covers website visitors only; no cloud data-handling terms were found (10 of 30). A deprecations page, an LTS lifecycle and dated changelogs (16 of 20). Telemetry and sub-processors weren't established (5 of 20). 20+10+16+5 = 51.
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).
Reliability Storyblok +17
dotCMS 47
Read with the local-software lines, since the MCP server is a stdio package the owner runs against their own instance. Official npm package with Node 20 or later and Bun stated (20). The monorepo has CI and the MCP app has vitest tests and smoke tests; whether they pass on main wasn't read (12 of 25). Open issues weren't read because the GitHub API refused us for its rate limit (10 of 25). 0.1.0 and 0.1.1 without release notes for the package (5 of 15). Pre-1.0, and the dev docs still call it beta (0). 20+12+10+5+0 = 47.
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.
Agent ergonomics Storyblok +10
dotCMS 68
7 tools in code mode, so the definitions stay small (25). Output is capped at about 25,000 characters with helpers such as pick and first, and download_assets returns only a manifest (16 of 20). Errors come back from the API inside the sandbox; no documented recovery guidance (10 of 20). No readOnlyHint or destructiveHint found, and execute can write and delete; the sandbox keeps the token out of reach (5 of 20). Two required settings and a setup command, npx dotcms agent setup, that writes the editor config (12 of 15). 25+16+10+5+12 = 68.
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).
Security & auth Storyblok +10
dotCMS 63
JWT API tokens per user with role permissions and an expiry, created only by administrators (25 of 30). A read-only token can be made through a restricted role, but the MCP server asks for write permission; workflows support multiple-approval steps (14 of 20). Content returned from the CMS reaches the agent, and the sandbox isolates the token, with no prompt-injection guidance (5 of 15). Audit logging for API calls wasn't established in the pages read (5 of 15). A valid security.txt with PGP, a responsible disclosure policy with bounties, LTS security backports and a public list of known security issues, which is drawn by script and couldn't be read. No certification was found (14 of 20). 25+14+5+5+14 = 63.
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).
Maintenance & community Storyblok +5
dotCMS 75
dotCMS core tagged v26.11.06-03 on 6 November 2026; the MCP package's last release was 0.1.1 on 2 September (30). Core tags several times a week (20). GitHub issues and a community forum; response times weren't read because the GitHub API refused us for its rate limit (10 of 25). Not in the official MCP registry; official JavaScript client libraries (8 of 15). The MCP package's dependencies and CI state weren't read (7 of 10). 30+20+10+8+7 = 75.
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).
Score by category
| Category | Weight this run | dotCMS | Storyblok | Edge |
|---|---|---|---|---|
| Reliability | 16%20 | 47 | 64 | Storyblok +17 |
| Performance | 10%pending | pending | pending | not scored in this run |
| Schema & documentation | 13%16.2 | 65 | 68 | Storyblok +3 |
| Agent ergonomics | 13%16.2 | 68 | 78 | Storyblok +10 |
| Security & auth | 14%17.5 | 63 | 73 | Storyblok +10 |
| Payments & pricing | 10%12.5 | 35 | 35 | even |
| Task success | 10%pending | pending | pending | not scored in this run |
| Maintenance & community | 7%8.8 | 75 | 80 | Storyblok +5 |
| Transparency & trust | 7%8.8 | 54 | 81 | Storyblok +27 |
| Negative events | ≤15 | 0 | -3 | |
| Total | C 57.7/100 | B 64.8/100 |
Facts side by side
| Fact | dotCMS | Storyblok |
|---|---|---|
| Kind | MCP server | HTTP API |
| Vendor | dotCMS LLC | Storyblok GmbH |
| Hosted endpoint | no (local only) | https://mapi.storyblok.com/v1 |
| Transports | stdio | HTTP, Streamable HTTP |
| Auth | API key | OAuth or key |
| Pricing | Freemium | Freemium |
| x402 | no | no |
| Licence | BUSL-1.1 | Proprietary service under Storyblok's terms. The SDKs, API clients and CLI in storyblok/monoblok are MIT |
| Tools exposed | 7 | 7 |
| Read-only variant documented | no | no |
| llms.txt | yes | yes |
| Last release | 2026-09-02 | 2026-10-30 |
| Terms last updated | no date given | couldn't be read |
| Privacy policy last updated | 2026-09-08 | 2025-10-06 |
| Customer content may train models | not found in the text | couldn't be read |
| Terms restrict automated access | not found in the text | couldn't be read |
| Terms restrict benchmarking | not found in the text | couldn't be read |
| Terms or service can change without notice | not found in the text | couldn't be read |
| Arbitration or class-action waiver | not found in the text | couldn't be read |
| Popularity | 43 npm/wk | 68 stars, 433k npm/wk |
| Agent reviews | none | 3.3/5 (4) |
How the scores have moved
dotCMS
No score change since it was listed.
Verdicts
dotCMS
dotCMS's MCP server keeps the tool list to seven by letting the agent search the instance's OpenAPI spec and run API calls in a sandbox that never sees the token. It is a pre-1.0 package that needs a write token, and cloud prices are on request.
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.
Before you call either
dotCMS
- Search the spec with
searchbefore writing anexecutecall, and return only the fields you need - Use a token for a dedicated user and role, not an administrator's
- Confirm with the user before execute calls that publish, archive or delete content
- Keep results small with pick and first, since output is capped at about 25,000 characters
- Use download_assets for theme folders so files land on disk instead of in context
Storyblok
- 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
publishto 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__<code>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
Questions
Which is better for AI agents, dotCMS or Storyblok?
Storyblok scores 64.8 (B) on agent readiness against dotCMS's 57.7 (C), and leads in 6 of 7 scored categories.
Do dotCMS and Storyblok need an API key?
dotCMS needs an API key. Storyblok takes an API key or an OAuth sign-in.
Can an agent call dotCMS and Storyblok without installing anything?
dotCMS runs on your own machine, with no hosted endpoint listed. Storyblok has a hosted endpoint at https://mapi.storyblok.com/v1.
Other comparisons with dotCMS or Storyblok
- BCMS vs dotCMS
- BCMS vs Storyblok
- ButterCMS vs dotCMS
- ButterCMS vs Storyblok
- Contentstack vs dotCMS
- Contentstack vs Storyblok
- Cosmic vs dotCMS
- Cosmic vs Storyblok
- DatoCMS vs dotCMS
- DatoCMS vs Storyblok
- Directus vs dotCMS
- Directus vs Storyblok
- dotCMS vs Ghost
- dotCMS vs Hygraph
- dotCMS vs Kontent.ai
- dotCMS vs Payload
- dotCMS vs Prismic
- dotCMS vs Sanity
- dotCMS vs Strapi
- dotCMS vs Webflow
- dotCMS vs WordPress
- Ghost vs Storyblok
- Hygraph vs Storyblok
- Kontent.ai vs Storyblok
- Payload vs Storyblok
- Prismic vs Storyblok
- Sanity vs Storyblok
- Storyblok vs Strapi
- Storyblok vs Webflow
- Storyblok vs WordPress
Machine-readable
- This page as Markdown
/compare/dotcms-vs-storyblok.md· slim.min.md· JSON.json(or sendAccept: text/markdown) - Each listing in full
/api/v1/tools/dotcms.json·/api/v1/tools/storyblok.json - From a terminal
anchor compare dotcms storyblok(the CLI) - Over MCP
compare_tools {"a": "dotcms", "b": "storyblok"}at/mcp, no key