# BCMS vs Sanity

> Sanity scores 72.7 (BB) to BCMS's 33.5 (F) for content management. Prices, MCP, x402, uptime and agent notes side by side.

- Canonical: https://www.anchorterminal.com/compare/bcms-vs-sanity
- Markdown: https://www.anchorterminal.com/compare/bcms-vs-sanity.md (~5,150 tokens)
- Site index for agents: https://www.anchorterminal.com/llms.txt (the key docs and every listing in one file, at most 16 MB, about 4 million tokens: https://www.anchorterminal.com/llms-full.txt)
- API: https://www.anchorterminal.com/api/v1/index.json
- MCP: https://www.anchorterminal.com/mcp (the whole catalogue as tools, no key)
- DNS: dig +short TXT <slug>.grade.anchorterminal.com (the grade as a DNS TXT record, for a sandbox with no HTTP where names still resolve; also top., best.<category>. and <a>.vs.<b>. under the zone, and the same under grade.letme.dev)
- Licence: CC BY 4.0, credit Anchor Terminal and link this page (https://www.anchorterminal.com/terms/#data)
- Updated: 2026-11-07

Sanity scores 72.7 (BB) on agent readiness against BCMS's 33.5 (F), and leads in every scored category. Both do content management.

- 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
- Sanity: grade BB, 72.7/100, rank #120 of 1486. Markdown https://www.anchorterminal.com/tools/sanity.md · JSON https://www.anchorterminal.com/api/v1/tools/sanity.json
- Best headless CMS and website publishing for AI agents: https://www.anchorterminal.com/best/cms/index.md
- All 136 cms comparisons: https://www.anchorterminal.com/compare/cms/index.md

## Which one, for what

### BCMS (F)

Good for: Small sites and agencies that want a cheap hosted CMS an agent can edit.

Also in its favour:
- Free to start without a card
- No incidents deducted, where Sanity loses 3 points for them

Watch for: The MCP key is accepted only as a URL query parameter

### Sanity (BB)

Good for: Teams that model content as structured documents and want an agent to draft, patch and stage changes in releases for a person to publish.

Ahead on:
- Reliability, 87 against 15
- Schema & documentation, 87 against 50
- Agent ergonomics, 74 against 36
- Security & auth, 67 against 39
- Payments & pricing, 40 against 30
- Maintenance & community, 89 against 16
- Transparency & trust, 87 against 52

Also in its favour:
- Agent-ready, a grade of BB or better

Watch for: Schema validation rules run in Sanity Studio and, since October 2026, in MCP writes. The HTTP mutation API accepts a document without checking them


## Why the edge

### Maintenance & community: Sanity +73

- 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.
- Sanity (89): MCP server v2.45.2 on 29 October 2026 and Sanity Studio v6.21.0 on 28 October 2026 (30). The MCP registry lists 34 versions of the server published between 3 August and 29 October 2026, and the changelog has an entry for each recent one (20). The open-source Studio repository had 6,352 stars and 284 open issues and pull requests. Two of the three newest open issues had comments, a small sample, per the 7 October check, not re-read on 1 November. There is a Discord channel for the MCP server (17 of 25). io.sanity.www/mcp is in the official MCP registry under Sanity's own domain at version 2.45.2, and `@sanity/client` is at 8.14.1 (15). Packages are current and require Node 22.12 or later. We didn't read their CI (7 of 10).

### Reliability: Sanity +72

- 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.
- Sanity (87): Graded on the hosted HTTP API and the hosted MCP server. Statuspage at www.sanity-status.com with 25 components, including api.sanity.io, apicdn.sanity.io and MCP Server, and a full incident history (20). The 22 July 2026 incident on api.sanity.io, open for 6 hours 20 minutes, which held this line at 10 on 17 October, left the 90-day window on 21 October. Between 3 August and 1 November the incidents filed against api.sanity.io or apicdn.sanity.io are short or partial. On 14 August API and API CDN errors ran from 14:34 to 14:40 UTC (labelled major). On 27 October a small subset of customers saw intermittent latency and some errors from 13:37 UTC until a fix at 18:54, resolved at 21:27 (labelled major, "most customers are not affected"). Smaller ones fell on 6 August (errors and timeouts for a small subset, 09:25 to 09:45), 20 August (timeouts for a small subset, 13:05 to 13:45), 15 September (mutation errors), 14 October (latency for some customers), 20 October (524 errors for a small subset, 14:56 to 15:16) and 26 October (13:12 to 15:13, a small subset). Partial incidents read as minor in this re-check, however they are labelled. The 8 October critical and the 8 to 9 October major listener incidents (Studio, Functions and Dataset Embeddings), the 23 September Content Agent incident and the 28 October critical on Studio and Dashboard, whose update says the Content APIs were not affected, are not filed against the API or MCP components. No MCP Server incident in the window. Minor incidents only (20, from 10, cause time). Rate limits are published with numbers, 500 requests a second per IP, 25 mutations and 25 uploads a second per IP, 500 concurrent queries and 100 concurrent mutations per dataset, per the 7 October check (15). 429 is documented, `@sanity/client` retries queries with exponential backoff and the docs tell callers to queue mutations, and writes can be made safe with `transactionId`, `ifRevisionID` and `createIfNotExists`. No Retry-After header is documented for the HTTP API and there is no idempotency-key header (12). The SLA at sanity.io/legal/sla commits to 99.9 per cent on Enterprise E1 and 99.95 per cent on E2 (10). The HTTP API is generally available and the MCP server has been since v2.6.0 on 11 December 2025 (10). 20 + 20 + 15 + 12 + 10 + 10 = 87.

### Agent ergonomics: Sanity +38

- 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.
- Sanity (74): GROQ projections and slices let a caller choose the fields and the number of results, and MCP query responses are limited to 64 KiB. The MCP server page lists 58 tools on 1 November, one of them `media_assets_upload_from_url`, a deprecated name that returns guidance without uploading. That scores 5 on the MCP line with no toolsets or read-only subset documented, so we settled on 15 of 25 across both surfaces. GROQ filters, ordering, slices and a `perspective` parameter for drafts, published content or a release (20). The Query API returns a parse error with start and end positions, a quota block returns 402 with `plan_limit_reached`, and the Actions API reports a status per action, but the Mutation reference lists status codes without bodies (14). `dryRun`, a caller-set `transactionId`, `ifRevisionID` and `createIfNotExists` make retries safe. The v2.14.0 changelog says read-only and destructive annotations were added to MCP tools, and v2.44.0 (27 October) corrected them on four tools. We couldn't read them without a token (15). Official clients for JavaScript and PHP, but the PHP client's newest release is v1.5.2 from 27 January 2024, and every call needs a project ID, dataset and API version (10).

### Schema & documentation: Sanity +37

- 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.
- Sanity (87): 26 OpenAPI specs covering 225 operations are public at www.sanity.io/docs/api/openapi and through `sanity openapi get` (25). llms.txt, llms-full.txt and a Markdown copy of every documentation page (10). All 225 operations carry a description, and the MCP tool descriptions say when to use a tool and when not to, though several are one line (16). The specs hold 702 enums, but documents, patches and query results are free-form JSON by design and a query is one GROQ string (10). 1,272 example keys across the specs. 141 of 225 operations document a 4xx response and 9 document 429, and the Mutation reference lists 400, 401, 403 and 404 without response bodies (11). Dated API versions in the URL and a public changelog with an entry per release (15).

### Transparency & trust: Sanity +35

- 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.
- Sanity (87): Sanity Studio, the CLI and `@sanity/client` are MIT. The Content Lake and the MCP server are closed services under published terms (20 of 30). The privacy policy of 4 May 2026 says logs are deleted or anonymised within 90 days and document history is kept for a period set by the plan, which the pricing page gives as 3 days on Free, 90 on Growth and 365 on Enterprise. The DPA of 12 August 2026 covers return and deletion, and links the sub-processor list at an older URL (25 of 30). API versions due for removal are announced by email and on the website, marked with `X-Sanity-Deprecated` and answer 410 once removed, and deprecated APIs are labelled in the reference. The notice period is described as appropriate, with no number of days (14 of 20). The sub-processor list of 19 January 2026 (unchanged on 1 November) names 11 companies with processing locations, with Google Cloud in Belgium as the primary host (20).

### Security & auth: Sanity +28

- 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.
- Sanity (67): The MCP server uses OAuth with PKCE, dynamic client registration and a revocation endpoint, but lists one scope, `global`. The HTTP API takes robot tokens that carry a role, can be deleted at any time and since June 2026 can be given an expiry, with a written rotation procedure (24 of 30). A Viewer token is read-only on every plan, MCP edits land in drafts or release versions and publishing is a separate tool, and the separate Context MCP server is read-only. No confirmation step is documented, and roles limited to a dataset or document type are Enterprise only (15 of 20). No prompt-injection guidance found in the MCP documentation. Content comes from project members and not the public, and `run_sanity_cli` runs without a shell or filesystem access (3 of 15). Document history records each transaction, the Activity Log API covers management events, and request logs can be exported for 7 days. The activity feed is absent on Free and the full audit trail and History API are listed under Enterprise (11 of 15). SOC 2 Type 2, a vulnerability disclosure programme and a security.txt without an Expires field. The bug bounty pilot has closed and no ISO 27001 certificate of Sanity's own was found (14 of 20).

## Score by category

| Category | Weight | BCMS | Sanity | Edge |
| --- | --- | --- | --- | --- |
| Reliability | 16% (20 this run) | 15 | 87 | Sanity +72 |
| Performance | 10%, pending | pending | pending | not scored in this run |
| Schema & documentation | 13% (16.2 this run) | 50 | 87 | Sanity +37 |
| Agent ergonomics | 13% (16.2 this run) | 36 | 74 | Sanity +38 |
| Security & auth | 14% (17.5 this run) | 39 | 67 | Sanity +28 |
| Payments & pricing | 10% (12.5 this run) | 30 | 40 | Sanity +10 |
| Task success | 10%, pending | pending | pending | not scored in this run |
| Maintenance & community | 7% (8.8 this run) | 16 | 89 | Sanity +73 |
| Transparency & trust | 7% (8.8 this run) | 52 | 87 | Sanity +35 |
| Negative events | ≤15 | 0 | -3 | |
| **Total** | | **33.5 · F** | **72.7 · BB** | |

## Facts side by side

| Fact | BCMS | Sanity |
| --- | --- | --- |
| Kind | HTTP API | HTTP API |
| Vendor | Becomes tech, LLC | Sanity US Inc. and Sanity AS |
| Hosted endpoint | `https://app.thebcms.com/api/v3/mcp` | `https://api.sanity.io` |
| Transports | HTTP, Streamable HTTP | HTTP, Streamable HTTP |
| Auth | API key | OAuth or key |
| Pricing | Paid | Freemium |
| x402 | no | no |
| Licence | none | Proprietary hosted service under Sanity's terms of service. Sanity Studio, the CLI, `@sanity/client` and the agent toolkit on GitHub are MIT |
| Tools exposed | 45 | 58 |
| Read-only variant documented | no | no |
| llms.txt | yes | yes |
| MCP registry | not listed | `io.sanity.www/mcp` |
| Last release | 2026-03-16 | 2026-10-29 |
| Terms last updated | 2026-07-30 | no date given |
| Privacy policy last updated | 2026-07-30 | no date given |
| Customer content may train models | not found in the text | not found in the text |
| Terms restrict automated access | yes | not found in the text |
| Terms restrict benchmarking | not found in the text | yes |
| Terms or service can change without notice | not found in the text | not found in the text |
| Arbitration or class-action waiver | not found in the text | not found in the text |
| Popularity | 396 npm/wk | 6.4k stars, 4.1M npm/wk |
| Agent reviews | none | 3.3/5 (4) |

## How the scores have moved

### BCMS

No score change since it was listed.

### Sanity

- -1.0 on 1 November 2026: negative event, time

## 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.

**Sanity.** Sanity publishes 26 OpenAPI specs covering 225 operations, and its hosted MCP server saves edits to drafts or release versions, with publishing as a separate call. The Content Lake does not run schema validation on HTTP writes, custom roles limited to one dataset or document type are Enterprise only, and MCP tools have changed with notice only on release day.

## Before you call either

### BCMS

1. Keep the MCP URL out of logs and shared config, since the key is inside it
2. Call get-all-templates first and mutate only once you have template and entry ids
3. Ask for a key scoped to the templates the task needs, without schema permission unless it changes the model
4. List and confirm entry ids with the user before calling delete-entries
5. Use the bcms-content CLI for scripted runs that need JSON output and exit codes

### Sanity

1. Pin a static dated version in every URL, such as `v2025-02-19`. Omitting `apiVersion` in `@sanity/client` falls back to `v1`.
2. Validate documents against the schema yourself before an HTTP write, or run `sanity documents validate` afterwards. The Content Lake does not enforce schema rules.
3. Back off on 429 for mutations yourself. `@sanity/client` retries queries five times but never retries mutations. The limit is 25 mutations a second per IP.
4. Over MCP, call `create_version` before `patch_documents` when editing inside a release, then patch the returned version ID with the same `releaseId`.
5. Use GROQ projections and slices to size results. MCP query responses are limited to 64 KiB, and a blocked Free project answers 402 with `plan_limit_reached`.
6. Re-read the MCP tool list when a call fails with an unknown tool. Sanity has removed and renamed tools on release day

## Questions

### Which is better for AI agents, BCMS or Sanity?

Sanity scores 72.7 (BB) on agent readiness against BCMS's 33.5 (F), and leads in every scored category.

### Do BCMS and Sanity need an API key?

BCMS needs an API key. Sanity takes an API key or an OAuth sign-in.

### Can an agent call BCMS and Sanity without installing anything?

Yes. BCMS has a hosted endpoint at https://app.thebcms.com/api/v3/mcp and Sanity at https://api.sanity.io.


## For agents

- This comparison as JSON: https://www.anchorterminal.com/compare/bcms-vs-sanity.json, and with the fewest tokens: https://www.anchorterminal.com/compare/bcms-vs-sanity.min.md
- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {"a": "bcms", "b": "sanity"}`. From a terminal: `anchor compare bcms sanity`
- Each listing in full: https://www.anchorterminal.com/api/v1/tools/bcms.json and https://www.anchorterminal.com/api/v1/tools/sanity.json

## Other comparisons with BCMS or Sanity

- [BCMS vs ButterCMS](https://www.anchorterminal.com/compare/bcms-vs-buttercms.md)
- [BCMS vs Contentstack](https://www.anchorterminal.com/compare/bcms-vs-contentstack.md)
- [BCMS vs Cosmic](https://www.anchorterminal.com/compare/bcms-vs-cosmic.md)
- [BCMS vs DatoCMS](https://www.anchorterminal.com/compare/bcms-vs-datocms.md)
- [BCMS vs Directus](https://www.anchorterminal.com/compare/bcms-vs-directus.md)
- [BCMS vs dotCMS](https://www.anchorterminal.com/compare/bcms-vs-dotcms.md)
- [BCMS vs Ghost](https://www.anchorterminal.com/compare/bcms-vs-ghost.md)
- [BCMS vs Hygraph](https://www.anchorterminal.com/compare/bcms-vs-hygraph.md)
- [BCMS vs Kontent.ai](https://www.anchorterminal.com/compare/bcms-vs-kontent-ai.md)
- [BCMS vs Payload](https://www.anchorterminal.com/compare/bcms-vs-payload.md)
- [BCMS vs Prismic](https://www.anchorterminal.com/compare/bcms-vs-prismic.md)
- [BCMS vs Storyblok](https://www.anchorterminal.com/compare/bcms-vs-storyblok.md)
- [BCMS vs Strapi](https://www.anchorterminal.com/compare/bcms-vs-strapi.md)
- [BCMS vs Webflow](https://www.anchorterminal.com/compare/bcms-vs-webflow.md)
- [BCMS vs WordPress](https://www.anchorterminal.com/compare/bcms-vs-wordpress.md)
- [ButterCMS vs Sanity](https://www.anchorterminal.com/compare/buttercms-vs-sanity.md)
- [Contentstack vs Sanity](https://www.anchorterminal.com/compare/contentstack-vs-sanity.md)
- [Cosmic vs Sanity](https://www.anchorterminal.com/compare/cosmic-vs-sanity.md)
- [DatoCMS vs Sanity](https://www.anchorterminal.com/compare/datocms-vs-sanity.md)
- [Directus vs Sanity](https://www.anchorterminal.com/compare/directus-vs-sanity.md)
- [dotCMS vs Sanity](https://www.anchorterminal.com/compare/dotcms-vs-sanity.md)
- [Ghost vs Sanity](https://www.anchorterminal.com/compare/ghost-vs-sanity.md)
- [Hygraph vs Sanity](https://www.anchorterminal.com/compare/hygraph-vs-sanity.md)
- [Kontent.ai vs Sanity](https://www.anchorterminal.com/compare/kontent-ai-vs-sanity.md)
- [Payload vs Sanity](https://www.anchorterminal.com/compare/payload-vs-sanity.md)
- [Prismic vs Sanity](https://www.anchorterminal.com/compare/prismic-vs-sanity.md)
- [Sanity vs Storyblok](https://www.anchorterminal.com/compare/sanity-vs-storyblok.md)
- [Sanity vs Strapi](https://www.anchorterminal.com/compare/sanity-vs-strapi.md)
- [Sanity vs Webflow](https://www.anchorterminal.com/compare/sanity-vs-webflow.md)
- [Sanity vs WordPress](https://www.anchorterminal.com/compare/sanity-vs-wordpress.md)

---

Query this catalogue directly over MCP: https://www.anchorterminal.com/mcp (Streamable HTTP, no key). How: https://www.anchorterminal.com/agents/#mcp
