Training Example: Sanity – Review the Data, Give Your Score & Compare to the Real AI Evaluation

Industry Context — Common BS Fingerprints in Unclear / Mixed / Unclassifiable Industry
Generic Claims: trusted by leading companies, proven track record, the best in the industry, results that speak for themselves…
Red Flags: no verifiable business identity or registration, claims expertise in unrelated fields simultaneously, stock photography throughout, no physical address or contact phone number…
Semantic Drift Patterns: homepage makes grand claims but sub-pages are thin on detail, positioning suggests specialist but services are generic, hero section is ambitious but content does not support it, multiple service areas with no depth in any single one…
Proof Expectations: named clients or customers with verifiable identity, specific results with numbers, dates, and context, verifiable team credentials and professional backgrounds, third-party reviews on independent platforms…

Sanity

(https://sanity.io) 📸 Data Snapshot: June 19, 2026

Analyze the raw signals below. How would a machine score this business’s credibility?

Here are the exact signals captured from up to six pages of the site — the same raw inputs the evaluation engine analyzed. They are grouped by signal type so you can weigh each the way the machine does.

🏗️ Semantic Structure — heading hierarchy & page identity (Info Density · Commodity Fingerprint)
HOMEPAGE The Content Operating System for the AI era | Sanity (https://sanity.io)
Title

The Content Operating System for the AI era | Sanity

Meta

Sanity is the back-end built for AI content operations. Power web, mobile, and agentic applications at scale.

H1 Structure powers intelligence
H2 Mirror how your content operations team works
H2 Content Operations without the busywork
H2 Power anything. One API, every platform
H2 Everything your team needs in one place
H2 Enterprise-grade everything
H2 Less talk, more code
H3 Page title
H3 The database optimized for content operations
H3 Content workflows that mirror how you work
H3 An agent to run content operations at scale
H3 Programmable automation
H3 Power web, mobile, or your own agent
H3 CLI Install
H3 MCP Server
H3 Agent toolkit
H3 Products
H3 Resources
H3 Company
H3 Trust and compliance
H3 Keep in touch
NAV_HEADER_HEADING_REPEATED_BODY_FOOTER Sanity MCP server | Sanity Docs (https://sanity.io/docs/ai/mcp-server/)
Title

Sanity MCP server | Sanity Docs

Meta

Enable AI agents to interact with your Sanity workspace through the Model Context Protocol (MCP).

H1 Documentation
H2 Installation
H2 Run commands (or tools)
H2 Troubleshooting
H2 Support
H2 On this page
H3 Quick install via Sanity CLI
H3 Claude Code
H3 Cursor
H3 VS Code
H3 OpenCode
H3 v0
H3 Lovable
H3 Replit
H3 Other clients
H3 Authorization
H3 Available tools
H3 AI credit usage
H3 Authentication issues
H3 Tool availability
H3 Get started
H3 Agent Skills
H5 get_schema
H5 list_workspace_schemas
H5 deploy_schema
H5 deploy_studio
H5 create_documents
H5 create_version
H5 patch_documents
H5 query_documents
H5 generate_image
H5 transform_image
H5 get_document
H5 publish_documents
H5 unpublish_documents
H5 discard_drafts
H5 version_discard
H5 list_organizations
H5 list_projects
H5 get_project_studios
H5 create_project
H5 add_cors_origin
H5 whoami
H5 list_datasets
H5 create_dataset
H5 update_dataset
H5 create_release
H5 list_releases
H5 list_embeddings_indices
H5 semantic_search
H5 search_docs
H5 read_docs
H5 list_sanity_rules
H5 get_sanity_rules
H5 give_feedback
H6 Build with AI
NAV_HEADER_HEADING_REPEATED_FOOTER Blog | Sanity (https://sanity.io/blog/)
Title

Blog | Sanity

Meta

News, releases, tutorials, and musings from the team behind Sanity

H1 Blog
H3 Products
H3 Resources
H3 Company
H3 Trust and compliance
H3 Keep in touch
NAV_HEADER_HEADING_REPEATED_BODY_FOOTER Sanity Context: Connect agents to your content | Sanity (https://sanity.io/context/)
Title

Sanity Context: Connect agents to your content | Sanity

Meta

Ship agents that query your content with structured retrieval, not just semantic search.

H1 Sanity Context
H2 You bring the agent. Sanity gives it what it needs to answer.You bring the agent. Sanity gives it what it needs to answer.
H2 Set up by your coding agent. Powered by your model.Set up by your coding agent. Powered by your model.
H2 What people are buildingWhat people are building
H2 Shape what your agent sees by who's askingShape what your agent sees by who's asking
H2 Real-time. Reliable. Governed.Real-time. Reliable. Governed.
H2 Know how your agent is doingKnow how your agent is doing
H2 The building blocksThe building blocks
H2 FAQs
H2 The agent backend for structured content
H3 More resources
H3 What you don't have to run
H3 Starter kit
H3 Products
H3 Resources
H3 Company
H3 Trust and compliance
H3 Keep in touch
📝 The Narrative — clean text per page (Info Density · Semantic Coherence)
HOMEPAGE (https://sanity.io) The Content Operating System for the AI era | Sanity
[H1] Structure powers intelligence
The back-end built for AI content operations. Power web, mobile, and agentic applications at scale.Start buildingWatch demonpm create sanity@latestTrusted by leaders and innovators
[IMG: loveholiday]
[IMG: Mejuri]
[IMG: Redis]
[IMG: Replit]
[IMG: Arc]
[IMG: Brex]
[IMG: Figma]
[IMG: Just Eat Takeaway.com]
[IMG: Shopify]
[IMG: Tecovas]
[IMG: Unity]
[IMG: Linear]
[IMG: Skims]
[IMG: Spotify]
[IMG: Anthropic]
[IMG: MoMA]
[IMG: Complex]
[IMG: Lady Gaga]
[IMG: Nordstrom]
[IMG: Rona]
[IMG: Hunter Douglas]
[IMG: Baggu]
Trusted by leaders and innovators
[IMG: loveholiday]
[IMG: Mejuri]
[IMG: Redis]
[IMG: Replit]
[IMG: Arc]
[IMG: Brex]
[IMG: Figma]
[IMG: Just Eat Takeaway.com]
[IMG: Shopify]
[IMG: Tecovas]
[IMG: Unity]
[IMG: Linear]
[IMG: Skims]
[IMG: Spotify]
[IMG: Anthropic]
[IMG: MoMA]
[IMG: Complex]
[IMG: Lady Gaga]
[IMG: Nordstrom]
[IMG: Rona]
[IMG: Hunter Douglas]
[IMG: Baggu]
[H2] Mirror how your content operations team works
[H3] Page title
Page description goes herehero.tsterminalimport {defineField, defineType} from 'sanity'
export const heroType = defineType({
name: 'hero',
title: 'Hero',
type: 'document',
fields: [
defineField({
name: 'title',
title: 'Title',
type: 'string',
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'description',
title: 'Description',
type: 'text',
rows: 3,
}),
defineField({
name: 'image',
title: 'Image',
type: 'image',
options: {
hotspot: true,
},
fields: [
{
name: 'alt',
type: 'string',
title: 'Alternative text',
description: 'Important for SEO and accessibility.',
},
],
}),
],
preview: {
select: {
title: 'title',
subtitle: 'description',
media: 'image',
},
},
})npx create sanity@latest
npx sanity typegen generate
✓ Config loaded from ./sanity.cli.ts
✔ Schema loaded from ./node_modules/@repo/sanity-extracted-schema/schema.json
✔ Successfully generated types to /Users/knut/Sites/sanity-io/www-sanity-io/apps/studio/sanity.types.ts in 7827ms
└─ 1 query and 603 schema types
└─ found queries in 1 file after evaluating 229 files
└─ formatted the generated code with prettier
npx sanity dev
✓ Checking configuration files...
✓ Starting dev server
Sanity Studio using vite@7.3.1 ready in 687ms
and running at http://localhost:3333/Tap to interactClick to interactTap to interactClick to interactHistorySanity stores revisions for every document.No changes yetTap to interactClick to interactTap to interactClick to interact
[H2] Content Operations without the busywork
Agent actions, functions, and content agents automate manual work before and after hitting publish.Update ReferencesTranslate with AIDelegate from elsewhereLook up all productslook up all blog postsfind posts missing translationsfocus on content from the last 2 weeks
[IMG: Smiling Black man in a black and white headshot.]
Sanity StudioJust now@Jason published a new product: ST07 Winter JacketTriggerimport {documentEventHandler} from '@sanity/functions'
import {createClient} from '@sanity/client'
const STOREFRONT_WEBHOOK = process.env.STOREFRONT_WEBHOOK_URL
export const handler = documentEventHandler(async ({context, event}) => {
const {data} = event
if (!STOREFRONT_WEBHOOK) {
console.error('❌ STOREFRONT_WEBHOOK_URL not found in environment variables')
return
}
const client = createClient({
...context.clientOptions,
apiVersion: '2025-06-01',
})
// Find every document that references the published product
3448 chars
SUB-PAGE (https://sanity.io/docs/ai/mcp-server/) Sanity MCP server | Sanity Docs
Enable AI agents to interact with your Sanity workspace through the Model Context Protocol (MCP).Copy articleCopy articleThe Sanity Model Context Protocol (MCP) server enables AI assistants like Claude Code and Cursor to interact directly with your Sanity projects.With the MCP server, agents can go beyond code generation and perform advanced content management operations in your Sanity projects. Agents can execute GROQ queries, manage releases, and patch documents with full awareness of your schema, eliminating the need to manually supply context.
[H2] Installation
The Sanity MCP server is hosted on Sanity's own infrastructure on https://mcp.sanity.io. It follows Anthropic's official MCP specification and works with any MCP-compatible client. It supports authentication through both OAuth (default) and token-based authentication.Prerequisites:An MCP-compatible client, such as Claude Code, Cursor, VS Code, Lovable, Replit or v0A Sanity account
[H3] Quick install via Sanity CLI
The easiest way to get started is using the Sanity CLI. It detects the most common AI-powered editors (Cursor, VS Code, Claude Code) and automatically configures the MCP server for you.npmpnpmyarnbunnpx sanity@latest mcp configurepnpm dlx sanity@latest mcp configureyarn dlx sanity@latest mcp configurebunx sanity@latest mcp configureThis command uses your logged-in CLI user for authentication, so you don't need to manually authenticate or manage API tokens.Claude CodeCursorVS CodeOpenCodev0LovableReplitOther clients
[H3] Claude Code
Run the following command in your terminal to add the Sanity MCP server. The next time you run Claude Code, it will have access to the MCP and you can authenticate with OAuth.claude mcp add Sanity -t http https://mcp.sanity.io --scope user
[H3] Cursor
Use the link below to directly install the Sanity MCP server in Cursor. Once installed, you'll be prompted to authorize access.CursorYou can confirm the server is running by opening the Command Palette (Cmd+Shift+P / Ctrl+Shift+P) and running View: Open MCP Settings.Alternatively, you can manually update your configuration:Open the Command Palette and run View: Open MCP Settings.Select + New MCP Server in the settings pane. This will open your mcp.json file.Add the following configuration:mcp.json{
"mcpServers": {
"Sanity": {
"type": "http",
"url": "https://mcp.sanity.io"
}
}
}Once you save the file, Cursor detects the new server and prompts you to authenticate via OAuth to complete the connection.
[H3] VS Code
Open Visual Studio Code.In the Command Palette (Cmd+Shift+P / Ctrl+Shift+P), run: MCP: Open User Configuration.Update the mcp.json file with the following configuration and save the file:mcp.json{
"servers": {
"Sanity": {
"type": "http",
"url": "https://mcp.sanity.io"
}
}
}Once you save the file, VS Code detects the new server and prompts you to authenticate via OAuth to complete the connection.
[H3] OpenCode
You can add Sanity as a remote MCP server in your OpenCode configuration.Open your OpenCode config file.Add the following configuration to the mcp section:opencode.json{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sanity": {
"type": "remote",
"url": "https://mcp.sanity.io",
"oauth": {}
}
}
}Save the file and authenticate with Sanity by running: opencode mcp auth sanityOnce authenticated, you can use Sanity tools in your prompts by mentioning sanity. For more details, see the OpenCode MCP documentation.
[H3] v0
v0 is an AI agent from Vercel that helps anyone create real code and full-stack apps. Ship features, refine designs, update copy, and create live prototypes – all with a prompt. Here's how you add the Sanity MCP:In the v0 prompt input field, click Prompt Tools (bottom left).Select MCPs, then click Add New.Select Sanity.Click Authorize.Follow the prompt to authenticate with your Sanity account via OAuth.
[H3] Lovable
You can add Sanity as a "Personal connector" in Lovable.In Lovable, go to Settings > Connectors > Personal connectors.Click New MCP server.Enter Sanity as the name and https://mcp.sanity.io as the Server URL.Click Add & authorize.Follow the prompt to authenticate with your Sanity account via OAuth.For more details on managing connectors, see the Lovable MCP documentation.
[H3] Replit
You can add Sanity as a custom MCP server in Replit Agent.Go to the Integrations Page, then scroll down to MCP Servers for Replit Agent.Click Add MCP server.Enter Sanity as the name and https://mcp.sanity.io as the Server URL.Click Test & Save.Follow the prompt to authenticate with your Sanity account via OAuth.Once saved, you can ask Replit Agent to use Sanity by mentioning it in your chat. For more details, see the Replit MCP documentation.
[H3] Other clients
If your client does not support remote MCP servers, you may be able to use a proxy such as mcp-remote.{
"mcpServers": {
"Sanity": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.sanity.io",
"--transport",
"http-only"
]
}
}
}
[H3] Authorization
The Sanity MCP server uses OAuth by default to perform operations on your behalf. You may instead provide an API token by setting the Authorization header in your MCP config. When configured with the header, the server will not use OAuth. Tool calls will use the API token in accordance with its role and scoped to its permissions.mcp.json{
"mcpServers": {
"Sanity": {
"url": "https://mcp.sanity.io",
"headers": {
"Authorization": "Bearer sk..."
}
}
}
}You can create API tokens from sanity.io/manage or with the sanity CLI's tokens command. You can also provide a personal token, which will share your role and permissions, as well as link you to any changes in the revision history.
[H2] Run commands (or tools)
Once configured and started, authenticate with your Sanity credentials if prompted. You can then use natural language to work with Sanity development tasks, such as:Help me migrate this project to Sanity.Run a GROQ query for all articles written by Mark.Add localization to my article document type.Help me migrate existing content to a new schema shape.List all releases in this dataset.mcp.sanity.io provides both editorial and development-focused tools for content operations, schema exploration, GROQ query execution, project management tasks such as creating and managing resources like datasets and API keys, and migration assistance. These tools allow your AI assistant to interact with your Sanity data directly.
[H3] Available tools
The following is a list of available tools and their uses:
[H5] get_schema
Fetch the deployed schema for a workspace. Resolves the best available source automatically — MCP-managed first, then Studio-deployed, then a legacy `system.schema` document.
[H5] list_workspace_schemas
List the deployed schemas for a project and dataset.
[H5] deploy_schema
Directly deploy schema types to the cloud.
[H5] deploy_studio
Deploy a managed Sanity Studio bound to an MCP-managed schema. Creates a hosted Studio whose URL follows the current environment — `sanity.studio` on production, `studio.sanity.work` on staging — and returns the concrete `studioUrl` in the response.Requires an existing MCP-managed schema at the same `(projectId, dataset, workspaceName)` address — call `deploy_schema` first if none exists. Re-run after subsequent `deploy_schema` calls so the deployed Studio picks up the latest schema.
[H5] create_documents
Create one or more draft documents by directly providing structured content. Creates drafts (drafts.* prefix) unless releaseId is specified for version creation.
[H5] create_version
Create a version document (versions.{releaseId}.* prefix) for a specific release. Versions are separate from drafts and published documents, and are used for scheduled release workflows.
[H5] patch_documents
Apply precise modifications to one or more documents using @sanity/client patch() operations. Patches for each document are applied as a single transaction (all succeed or all fail). Edits are saved to the draft or release version; published content is never modified directly.
[H5] query_documents
Query documents from Sanity using GROQ query language
[H5] generate_image
Trigger async AI image generation for a document field.
[H5] transform_image
Trigger async AI transformation of an existing image.
[H5] get_document
Fetch a single document by its exact ID. This is a direct ID lookup only - it does not search, filter, or query. Use when you have a specific document ID and need its full content.
[H5] publish_documents
Publish one or more draft documents to make them live
[H5] unpublish_documents
Unpublish one or more published documents (moves them back to drafts)
[H5] discard_drafts
Discard one or more draft documents (deletes drafts while keeping published documents intact)
[H5] version_discard
Discard one or more document versions from a release
[H5] list_organizations
Lists all organizations the user has access to in Sanity
[H5] list_projects
Lists all Sanity projects associated with your account
[H5] get_project_studios
Retrieves all studio applications linked to a specific Sanity project
[H5] create_project
Creates a new Sanity project and initializes it with a dataset and API tokens
[H5] add_cors_origin
Adds CORS origin(s) to allow client-side requests to a Sanity project
[H5] whoami
Returns information about the currently authenticated Sanity user. Useful for verifying authentication and troubleshooting access issues.
[H5] list_datasets
Lists all datasets in your Sanity project
[H5] create_dataset
Creates a new dataset with specified name and access settings
[H5] update_dataset
Modifies a dataset's name or access control settings
[H5] create_release
Create a new release for grouping content changes. Releases are containers that hold versioned documents for coordinated publishing.
[H5] list_releases
List releases in a dataset. By default returns active and scheduled releases. Use the state filter to find published or archived releases.
[H5] list_embeddings_indices
List all available embeddings indices for a dataset
[H5] semantic_search
Perform a semantic search on an embeddings index
[H5] search_docs
Search Sanity docs
[H5] read_docs
Fetch a specific documentation article.
[H5] list_sanity_rules
List available best-practice development rules.
[H5] get_sanity_rules
Load specific best-practice development rules.
[H5] give_feedback
Submit feedback about the Sanity MCP tools when you encounter issues.Use this when:- A tool returned an unexpected error or confusing result- You needed a capability that doesn't exist- Tool descriptions or documentation were unclear- You had to use a workaround for something that should be simplerProvide a specific, detailed message about what you were trying to do,what happened, and what you expected instead.
[H3] AI credit usage
Most MCP tools are standard API calls and don't consume AI credits. The following tools invoke Sanity's AI inference endpoints and consume AI credits:generate_imagetransform_imagecreate_version – only when the instruction parameter is providedYou can disable these tools in your MCP client if you want to avoid credit usage.Learn more about pricing and quotas in How AI credits work.
[H2] Troubleshooting
[H3] Authentication issues
If you encounter authentication errors (e.g., 401 Unauthorized), the solution depends on how you installed the server:Installed via CLI (using token auth)If you installed the MCP via the Sanity CLI, your authentication relies on a generated token that may have expired or been revoked. To fix this, simply run the configuration command again and re-select your code editor with space:npmpnpmyarnbunnpx sanity@latest mcp configurepnpm dlx sanity@latest mcp configureyarn dlx sanity@latest mcp configurebunx sanity@latest mcp configureThis will generate a fresh auth token and update your editor's configuration file automatically.Manually configured (using OAuth)If you configured the server manually, you are likely using OAuth. Sessions typically expire after 7 days. Your client should prompt you to re-authenticate, but if it gets stuck:VS Code: Run Authentication: Remove Dynamic Authentication Providers from the Command Palette, select the Sanity provider, and restart the server.Cursor: Run Cursor: Clear All MCP Tokens from the Command Palette to reset your session.
[H3] Tool availability
If specific tools (like query_documents) are missing or failing, verify that your account has the correct permissions for the project and dataset you are trying to access. The set of available tools may also vary as we release updates to the MCP server.
[H2] Support
Join us in the Sanity community to ask questions and discuss our MCP server with other developers in the #mcp-server channel. Previous
[H3] Get started
Next
[H3] Agent Skills
Was this page helpful?Report issue
12812 chars
SUB-PAGE (https://sanity.io/blog/) Blog | Sanity
[H1] Blog
[IMG: Abstract blue background with overlapping black and halftone grey and blue rectangles.]
Content StrategyJun 15Agents leave receipts. We read 1.46 million of themWe analyzed what agents are actually doing with content. Here is what you can learn from teams succefully running AI content operations today.
[IMG: Hollie Aghajani]
Hollie Aghajani
[IMG: Knut Melvær]
Knut Melvær
[IMG: J.Requena]
J.Requena
[IMG: J.Requena]
[IMG: Knut Melvær]
[IMG: Hollie Aghajani]
Knut Melvær and 2 moreRead “Agents leave receipts. We read 1.46 million of them”engineeringJun 18How to get product feedback from agentsAgents are some of Sanity's heaviest users, but none of them report bugs. Here's how we've started gathering feedback from agents, and how you can do it too.
[IMG: Jon Eide Johnsen]
Jon Eide JohnsenRead “How to get product feedback from agents”engineeringJun 12We don't write code anymoreAn engineering manager’s field report from an AI-first engineering team
[IMG: Vincent Quigley]
Vincent QuigleyRead “We don't write code anymore”ProductengineeringJun 9Sanity Studio v6: A focused upgradeBuilds got 2–9× faster on Vite 8 in our testing. Improvements to default search and custom auth. Dropping end-of-life Node 20 support.
[IMG: John Siciliano]
[IMG: Jordan Lawrence]
[IMG: Bjørge Næss]
[IMG: Cody Olsen]
Bjørge Næss and 3 moreRead “Sanity Studio v6: A focused upgrade”ProductCommunityJun 8What’s New - June 2026From prompt to a hosted Studio in one chat, agents that know your users, Content Agent on Slack Marketplace, and more
[IMG: Evelina Wahlström]
Evelina WahlströmRead “What’s New - June 2026”engineeringGuideMay 26A Board Game agent built using Sanity Context and Vercel's AI SDKAn OpenAI Agent, a board game API, and Sanity Context walk into a bar… the result: a CLI agent that returns exact game recs with real-time data using queries
[IMG: Jarod Reyes]
Jarod ReyesRead “A Board Game agent built using Sanity Context and Vercel's AI SDK”GuideMay 13Build a prototype with Claude Code that your whole team can editYou built a compelling proof of concept using AI. Now, let’s fix it so every content change doesn’t need to go through you.
[IMG: Knut Melvær]
Knut MelværRead “Build a prototype with Claude Code that your whole team can edit”CommunityMay 11What’s New - May 2026An Olympian coding her own edge, GROQ-powered access control, Scheduled Functions, and more.
[IMG: Evelina Wahlström]
Evelina WahlströmRead “What’s New - May 2026”Apr 29I built a London pub guide with v0 and the Sanity MCP in six hours. Here's what I learned.From first prompt to pub crawl routes, quiz recommendations, and a printable map.
[IMG: Evelina Wahlström]
Evelina WahlströmRead “I built a London pub guide with v0 and the Sanity MCP in six hours. Here's what I learned.”engineeringGuideApr 22Build a conference concierge with Agent Context and AnthropicAgent Context gives you MCP tools for your content. Wire them into `streamText`. And now you have a chatbot.
[IMG: Knut Melvær]
Knut MelværRead “Build a conference concierge with Agent Context and Anthropic”engineeringGuideApr 22Build a content-aware Telegram agent with Vercel AI SDK and Chat SDKBuild a Telegram agent that lets your team query and update your CMS from their phones. About 100 lines of code, with real security boundaries.
[IMG: Knut Melvær]
Knut MelværRead “Build a content-aware Telegram agent with Vercel AI SDK and Chat SDK”ProductengineeringApr 8
How I used Agent API to generate photos for my family’s recipesLearn how to use Sanity's Agent API to generate images from your content - no schema changes, just a patch and a generate call.
[IMG: Jarod Reyes]
Jarod ReyesRead “
How I used Agent API to generate photos for my family’s recipes”CommunityApr 7What’s New April - 2026@Sanity in Slack, Content Agent API, AI ops guides, and the first Pioneers event, plus more.
[IMG: Evelina Wahlström]
Evelina WahlströmRead “What’s New April - 2026”Content StrategyGuideApr 6Better context, better matches: An AI love story (for dogs)Search filters force users to think in database terms. This AI-powered dog adoption app shows what happens when you let structured content do the work instead.
[IMG: Ken Jones]
Ken JonesRead “Better context, better matches: An AI love story (for dogs)”engineeringGuideMar 18How to write for an agentSpoiler: It’s not prompting
[IMG: Knut Melvær]
[IMG: Even Westvang]
Even Westvang, Knut MelværRead “How to write for an agent”ProductMar 12Content Agent, meet SlackContent Agent now works in Slack, Sanity Dashboard, and as a programmable API, bringing content operations where decisions already happen.
[IMG: Knut Melvær]
[IMG: Hollie Aghajani]
[IMG: Even Westvang]
Hollie Aghajani and 2 moreRead “Content Agent, meet Slack”Content StrategyDigital StrategyMar 3Structure powers intelligenceAI agents need structure, not scattered docs. Build the foundation now or clean up later.
[IMG: Magnus Hillestad]
Magnus HillestadRead “Structure powers intelligence”ProductMar 3Your agent needs better content. Here's how to give it.Your agent misses products, returns stale prices, and can’t filter a catalog. The problem is how the agent accesses your content.
[IMG: Knut Melvær]
[IMG: Even Westvang]
Even Westvang, Knut MelværRead “Your agent needs better content. Here's how to give it.”Digital StrategyGuideFeb 19How to serve content to agents (a field guide)“AI-ready content” means at least three different things. This field guide helps you tell them apart, then shows you what to actually build.
[IMG: Knut Melvær]
Knut MelværRead “How to serve content to agents (a field guide)”Load more
5597 chars
SUB-PAGE (https://sanity.io/context/) Sanity Context: Connect agents to your content | Sanity
Connect agents to your content
[H1] Sanity Context
An MCP endpoint that gives your agent structured retrieval and semantic search.Read the docs
[IMG: Abstract image of two soft, undulating grey forms with subtle lighting.]
[IMG: A mobile phone screen shows a shopping assistant chatbot answering a question about the durability of a trail runner shoe. Behind it, a desktop interface displays product details and an image of the shoe.]
Sanity Context gives your agent your schema and GROQ through one MCP endpoint. Filters, keyword match, and semantic ranking run in a single query.1Customer asks a question“Comfy hiking boots under $200, size 10?”2Agent generates a queryIt knows your schema, combines hard filters (price < 200, size == 10, inStock == true) with semantic ranking (“comfy").3Sanity returns precise resultsReal products. Filtered by your rules. Ranked by relevance. From your live dataset.Five minutes from npx to a working agent against your live data.Already have an agent? Skip the skill and point your MCP client at the Sanity Context URL.1Install the skillnpx skills add sanity-io/context --all2Run the prompt“Use the create-agent-with-sanity-context skill to help me build an agent in this project.”3Get a working agentYour coding assistant will ask you some questions then build a bespoke agent.Video: Build an agent that actually finds what customers ask forShopping"Find hiking boots under $200 in my size." Real products, retrieved and validated against live inventory. Increase CVR, reduce abandoned carts.
[H3]
Guide and starter codeSupport"How do I reset my password?" Real answers from your docs, instantly. Deflect tickets, cut support costs.SearchBM25, semantic, and your schema's business rules in one GROQ query. Hybrid relevance without a separate search service.InternalEncode how your team works. Classify, route, and process content with the logic that used to live in people's heads.Video: Make your AI agent smarter for logged-In usersThe agent decides what to fetch. You decide what it can see.Pass who they are in the system promptPass user identity, role, and language in the system prompt. The agent uses it to write smarter GROQ.Answers that know where you arePass the current page or product in the system prompt. The agent biases its query accordingly. Same MCP URL, different answer.Different jobs, different agentsA support bot, a shopping bot, an admin assistant. Each one is its own document in Studio, with its own MCP URL.
[IMG: A user interface displaying settings for a shopping assistant]
GROQ + keyword match + semantic search = agents that obey real constraints.Real-time syncUpdate a product or policy and agents know immediately. No reindexing. No drift.Logic, not vibesAgents can't recommend what you don't sell. Business rules enforced in the query, where it's deterministic, not the prompt.Scope what it seesPublished content is agent-accessible. Drafts aren't. Internal stays internal.No deploy to updateChange instructions, refine how the agent answers, fix what it gets wrong. All from Studio.
[IMG: Agent insights dashboard displaying conversations, scores, sentiment, and message counts, with]
[IMG: An]
Conversation telemetryEvery conversation logged as a Sanity document. Query it with GROQ, surface it in Studio, build dashboards your editors actually open.Automatic classificationSuccess score, sentiment, and content gaps written back onto each conversation. Powered by Sanity Functions, no separate pipeline.
[IMG: Terminal output of `pnpm i @sanity/context` showing successful installation of `@sanity/context` and `groq-js` in 11.4 seconds.]
Dataset EmbeddingsTurn it on, configure projections for which fields embed. No vector database to provision. No RAG pipeline to maintain. No reindexing schedule.MCP endpointAny agent connects in one line. Claude, GPT, Gemini, or your own. They all see your structured content through a single endpoint.GROQ with semanticsGROQ predicates narrow scope. Keyword match finds exact terms (specific SKU, API name). Embedding search handles conceptual queries.
[H3] What you don't have to run
A vector database, a RAG pipeline, a separate search service, a reindexing job, or a CMS-to-agent sync layer. Sanity Context has one MCP URL and one Studio document.
[H2] FAQs
Sanity Context vs. Content Agent. Which one do I need?Two different products for two different jobs.Content Agent lives in the Sanity Dashboard and runs content operations through conversation. Bulk edits, content audits, gap analysis, web research, schema-aware updates. It's for content teams who want to do days of work in minutes, on content that lives in Sanity.Sanity Context is the retrieval layer for agents outside Sanity. Your app, your model, your interface. Use it when you're building a shopping assistant, a support bot, a search experience, or any agent that needs to read your content to answer your users.Rule of thumb: content team doing operations on Sanity content, that's Content Agent. Your own app talking to your own agent, that's Sanity Context (which is read-only over MCP, by design).Does it work with my model?Yes. Sanity Context runs against whatever LLM you're already using, whether that's Anthropic, Gemini, Copilot, an internal model, or something else. It's an MCP server, not a model provider. You bring the LLM and the harness. Sanity provides the retrieval.We recommend frontier models for production. Tool-calling against a schema-aware MCP is the kind of work smaller models tend to get wrong. The choice is yours, and the bill is yours.What does it cost?Sanity Context tool calls cost like ordinary Sanity API calls. No AI tax. No per-token retrieval fee. No separate pricing surface.Dataset Embeddings (for semantic search) are optional and priced per dataset. They're off by default.A developer can build something like an internal sales-support agent in an afternoon, on Sanity's standard per-call pricing.What can my agent do with my content?Whatever you build it to do. The agent is yours, the model is yours, the application is yours. Sanity Context just gives the agent a way in.The MCP layer itself is read-only. Agents connected through the MCP URL can read your schema, follow references, and run GROQ queries against the dataset. They cannot write, update, or delete.If you want an agent that creates or updates content, that's a different product (Sanity MCP Server), which is write-enabled and meant for agents acting inside your content operations.How do I personalize per user?In your agent's system prompt. Your app already knows who's logged in, what page they're on, what they speak. Pass that into the system prompt and the agent will write GROQ queries that reflect it. Filtering by language, ranking by past behavior, scoping by region.For tool calls that need to act on behalf of a specific user, you can pass a bearer token with the request. This lets your agent authenticate as that user and perform work in their context.For different jobs (a support bot vs. a shopping bot), use a different Sanity Context document. Each one gets its own MCP URL, its own instructions, and its own scope. One Studio, many agents.Is there research behind hybrid retrieval?Yes. Anthropic's engineering team published a post on Contextual Retrieval showing that combining semantic embeddings with exact-match retrieval (BM25) reduces retrieval failures by up to 49% versus embeddings alone. The argument: traditional RAG chunks documents in a way that destroys context, and you need structured/exact-match retrieval alongside semantic similarity to get reliable results.Sanity Context starts from that conclusion. Your content lives in Sanity already structured by schema and queryable by GROQ. Add Dataset Embeddings and you get the full combination in a single query, with no chunking, no separate index, and no preprocessing pipeline to maintain.Read the docsRequest a demoApp SDKBuild custom AI-powered apps→Sanity StudioWhere humans and AI collaborate→Content AgentThe content agent it powers→Agent actionsTrigger AI workflows→
8061 chars
🛡️ Trust Signals — reviews, proof links, trust-theatre flag (Trust & Proof)
25Review mentions (all pages)
0External proof links (all pages)
PageReviewsProof links
/ (home) 22 0
/docs/ai/mcp-server/ 2 0
/blog/ 0 0
/context/ 1 0
🔗 Identity & Technical Layer — schema JSON-LD: identity chains, entity gaps (Identity & Authority)
Homepage — no schema detected (entity gap)
/docs/ai/mcp-server/
{
    "@context": "https://schema.org",
    "@type": "Article",
    "dateModified": "2026-06-17T21:33:03Z",
    "datePublished": "2025-05-14T20:43:08Z",
    "description": "Enable AI agents to interact with your Sanity workspace through the Model Context Protocol (MCP).",
    "headline": "Sanity MCP server",
    "publisher": {
        "@id": "https://www.sanity.io#organization",
        "@type": "Organization",
        "alternateName": [
            "Sanity.io",
            "Sanity CMS",
            "Sanity io"
        ],
        "contactPoint": [
            {
                "@type": "ContactPoint",
                "contactType": "customer service",
                "email": "support@sanity.io",
                "url": "https://snty.link/community"
            },
            {
                "@type": "ContactPoint",
                "contactType": "Sales",
                "email": "sales@sanity.io",
                "url": "https://www.sanity.io/contact/sales"
            }
        ],
        "description": "Headless CMS",
        "foundingDate": "1995",
        "foundingLocation": {
            "@type": "Place",
            "address": {
                "@type": "PostalAddress",
                "addressCountry": "Norway",
                "addressLocality": "Oslo"
            }
        },
        "location": [
            {
                "@type": "Place",
                "address": {
                    "@type": "PostalAddress",
                    "addressCountry": "Norway",
                    "addressLocality": "Oslo",
                    "postalCode": "0560",
                    "streetAddress": "Trondheimsveien"
                }
            },
            {
                "@type": "Place",
                "address": {
                    "@type": "PostalAddress",
                    "addressCountry": "United States",
                    "addressLocality": "San Francisco",
                    "postalCode": "CA 94103",
                    "streetAddress": "695 Minna St"
                }
            }
        ],
        "logo": "https://www.sanity.io/static/images/logo_ld_json.png",
        "name": "Sanity",
        "sameAs": [
            "https://www.facebook.com/sanityapi",
            "https://github.com/sanity-io",
            "https://twitter.com/sanity_io",
            "https://www.linkedin.com/company/sanity-io",
            "https://www.youtube.com/channel/UCGz69JwGRptteFAaX8hSKCQ",
            "https://www.wikidata.org/wiki/Q56242360"
        ],
        "url": "https://www.sanity.io"
    }
}
/blog/ — no schema detected (entity gap)
/context/ — no schema detected (entity gap)

Your Diagnosis

Before revealing the machine’s verdict, predict the BS score for each signal. Higher = more BS (more fluff, less verifiable substance). Drag each slider, then submit to compare your judgment against the engine.

Information Density 0 / 30
Read the Narrative & headings: do hard facts (prices, dates, numbers) outweigh fluff power-words?
Semantic Coherence 0 / 20
Compare the homepage promise against the sub-page reality. Do they hold the same line?
Trust & Proof 0 / 20
Weigh review mentions against actual external proof links. Claims without verification = theatre.
Commodity Fingerprint 0 / 15
Check headings & narrative against the industry clichés in the setup above.
Identity & Authority 0 / 15
Inspect the schema: is there real Organization/Person identity with sameAs links, or gaps?
Your predicted BS score 0 / 100
💡 Stuck? Reveal the heuristic lens — how the deterministic page-auditor reads each signal (no AI, pure pattern rules)

These are the structural rules a local, deterministic auditor applies — the same lens you can use to judge each signal. They describe what to look for, not this company’s result.

Information Density

Classify each sentence as substantive or hollow. Grounding markers — numbers, currencies, dates, technical units, named entities — outweigh marketing adjectives. When fluff sits right next to hard evidence, the fluff is forgiven.

Semantic Alignment

Pull the main entities out of the H1, then check whether they actually recur through the body. A page that announces one thing and then talks about another drifts. Headings with no real sentences underneath read as pseudo-substance.

Trust & Proof

Count trust words (review, testimonial, rating, verified) against real outbound proof links (Google, Trustpilot, Clutch, G2, Yelp). Lots of trust language with zero verification links is trust theatre. Unlinked logo galleries count against it.

Commodity Fingerprint

Look at how much sentence length varies. Natural writing varies its rhythm; templated or mass-produced copy is statistically uniform. Very low variation reads as commodity content — unless unique named entities break the pattern.

Identity & Authority

Inspect the JSON-LD. Is there an Organization or Person schema, and does it carry sameAs links to real external profiles (LinkedIn, socials)? Missing schema or no identity declaration signals an anonymous entity.

Want to apply this lens yourself? The free BS Indicator Chrome extension runs these heuristic checks live on any page. Bear in mind it is a single-page, deterministic tool — it relies only on pattern rules for the page in front of it and does not perform the cross-page semantic correlation this audit uses, so its readout is a starting lens, not the full verdict.

B
BS Level
Unclear / Mixed / Unclassifiable Industry
58.8 Avg BS

Based on 2385 businesses audited.

BS Detector

Unclear / Mixed / Unclassifiable Industry BS: Sanity (sanity.io)

https://sanity.io 📍 Industry: Unclear / Mixed / Unclassifiable Industry
12 BS / 100

Sanity is a rare example of a site that leads with a high-level marketing concept and immediately grounds it in raw code and technical protocol documentation. It successfully navigates the AI hype by offering concrete infrastructure (MCP) rather than just vibes. This is an elite technical site that respects the user’s intelligence by prioritizing npx commands over fluff.

Info Density Power-words vs. Substance ratio.
3
10% BS
Semantic Coherence Homepage promise vs. Sub-page reality.
0
0% BS
Trust & Proof Verifiable evidence vs. Trust Theatre.
6
30% BS
Commodity Fingerprint Detection of industry clichés/templates.
2
13% BS
Identity & Authority Expert verifiability & Schema depth.
1
7% BS

Provide direct outbound links to case studies for the 20+ listed enterprise logos to move proof_links_count from 0. Verify and update the foundingDate in the Organization schema if 1995 is inaccurate for the modern brand. Add Person schema for the named authors on the blog to link their specific professional expertise to the brand’s knowledge graph. Consider removing the ‘Enterprise-grade everything’ heading as it is the only generic fluff element in an otherwise high-substance hierarchy.

The website perfectly aligns with the Enterprise Content Management and AI Infrastructure sectors. The content consistently focuses on structured content, API-first architecture, and the Model Context Protocol (MCP), confirming its status as a highly specialized technical platform rather than a generic CMS.

“The score of 12 is driven primarily by the Trust and Proof pillar due to the trust_theatre_flag (logos and reviews without direct proof links). Minor points were added in Information Density for a few 'Enterprise' power words and in Identity for a minor schema discrepancy. Overall, the site has very low BS.”

Verified Analysis Date: June 19, 2026 © 1EuroSEO Independent Evaluator — Non-Sponsored Result
Brand AI Reputation