100+ integrations are ready to connect to your AI.Connect your first MCP

Sanity MCP server for your AI

Read your content model, find documents with GROQ or plain filters, write changes as drafts the way Sanity Studio does, add images from a link, and publish now or as part of a release, in the project you connect.

PopMCPSanity

Show me the document types in our dataset, then list the blog posts with unpublished changes

Supported Sanity tools

Sanity's whole HTTP API for your agent, pinned to the project you connect, with tools that write drafts instead of changing the live site, plus releases, assets, datasets and webhooks.

250 tools in the full catalog: 119 read and 131 write. 45 load by default, and the rest are found with tool search.

sanity_access_list_users

List all users of a resource and their assigned roles.

sanity_create_cors_origin

Create a CORS entry.

sanity_create_dataset

Create a dataset.

sanity_get_project

Retrieve a project.

sanity_list_cors_origins

List all CORS entries.

sanity_list_datasets

List all datasets available to the project.

sanity_list_my_project_permissions

List your permissions for the project.

sanity_add_document_to_release

Puts a document into a release as its own version; the draft and live site stay as they are until the release publishes.

sanity_attach_image_from_url

Uploads an image from a public URL and sets it on a document's image field, as a draft change.

sanity_create_document

Creates a new document as a draft, the way Sanity Studio does; nothing goes live unless publish is true.

sanity_create_release

Creates a content release: a set of changes that goes live together.

sanity_delete_document

Deletes a document and its draft, including from the live site.

sanity_discard_draft

Throws away a document's unpublished draft; the published version stays as it is.

sanity_get_content_model

Call this first.

sanity_list_documents

Lists documents of one type, newest change first, with no GROQ to write.

sanity_list_releases

Lists content releases, newest first, with state, title, type, intended publish time and how many documents each holds.

sanity_publish_documents

Publishes drafts so they go live, in one all-or-nothing transaction.

sanity_publish_release

Publishes everything in a release, now or at a set time.

sanity_read_document

Reads one document's published and draft versions side by side, always the latest write.

sanity_unpublish_document

Takes a document off the live site and keeps its content as a draft.

sanity_update_document

Changes named fields and leaves the rest alone.

sanity_export_documents

Export documents in a dataset.

sanity_get_document_revision

Get a document revision.

sanity_get_documents

Get one or more documents.

sanity_list_transactions

Get all transactions.

sanity_listen_document_changes

Stream document mutation events.

sanity_mutate_documents

Mutate documents.

sanity_perform_actions

Dispatch one or more actions.

sanity_query_documents

Query using POST method.

sanity_query_documents_cdn

Same as query_documents, answered from Sanity's API CDN: fast, and cached answers are not rate limited.

sanity_create_webhook

Create a webhook.

sanity_delete_webhook

Delete a webhook.

sanity_list_webhooks

List all webhooks.

sanity_update_webhook

Update a webhook.

sanity_create_comment

Create a comment.

sanity_query_comments

Query comments with a request body.

sanity_agent_transform

Transform a document.

sanity_create_schedule

Create schedule.

sanity_list_schedules

List schedules.

sanity_copy_dataset

Copy.

sanity_upload_file_from_url

Upload a file asset from a URL.

sanity_upload_image_from_url

Upload an image asset from a URL.

sanity_get_job

Job status.

sanity_list_activity

Get activity log events.

sanity_purge_query_cache

Purge cached query responses for one dataset.

sanity_check_application_embeddable

Check whether an application can be embedded.

sanity_check_studio_host_availability

Get appHost availability.

sanity_create_application

Create an application.

sanity_create_project_user_application

Create an user application for a project.

sanity_create_user_application

Create an user application.

sanity_create_user_application_data

Create user application data.

sanity_delete_all_project_user_applications

Delete all user applications.

sanity_delete_application

Delete an application.

sanity_delete_installation_config

Delete an installation configuration.

sanity_delete_project_user_application

Delete an user application for a project.

sanity_delete_user_application

Delete an user application.

sanity_delete_user_application_data

Delete user application data.

sanity_deploy_application

Deploy an application.

sanity_deploy_installation_config

Deploy installation configuration.

sanity_deploy_project_user_application

Deploy an user application for a project.

sanity_deploy_user_application

Deploy an user application.

sanity_get_application

Get an application by ID.

sanity_get_application_access

Get resource access for an application.

sanity_get_application_interfaces

Get interfaces by type for an application.

sanity_get_application_workspaces

Get workspaces for an application.

sanity_get_installation

Get an installation by ID.

sanity_get_installation_access

Get resource access for an installation.

sanity_get_installation_interfaces

Get interfaces by type for an installation.

sanity_get_organization_application

Get an application in an organization by ID or slug.

sanity_get_project_user_application

Get an user application for a project.

sanity_get_studio_auto_update_version

Get studio auto-updating version status.

sanity_get_user_application

Get an user application.

sanity_get_user_application_workspaces

Get workspaces for an user application.

sanity_install_application

Install a singleton application.

sanity_install_default_applications

Install the default singletons for an organization.

sanity_list_application_deployments

List deployments for an application.

sanity_list_applications

List applications for an organization.

sanity_list_installation_catalog

List the singleton catalog for an organization.

sanity_list_installation_configs

List configs for an installation.

sanity_list_installations

List installations for an organization.

sanity_list_project_user_application_deployments

Get user application deployments for a project.

sanity_list_project_user_applications

Get all user applications for a project.

sanity_list_studio_workspaces

Get workspaces for studio applications.

sanity_list_user_application_deployments

Get user application deployments.

sanity_list_user_applications

Get all user applications.

sanity_reconcile_ai_applications

Reconcile an organization's AI singletons with its AI features status.

sanity_register_project_user_application_config

Register an user application config for a project.

sanity_register_user_application_config

Register an user application config.

sanity_resolve_application_by_host

Get application by host.

sanity_resolve_project_by_host

Get project by application.

sanity_uninstall_application

Uninstall a singleton application.

sanity_update_application

Update an application.

sanity_update_project_user_application

Update an user application for a project.

sanity_update_user_application

Update an user application.

sanity_access_accept_invite

Accept invite.

sanity_access_accept_request

Accept request.

sanity_access_add_user_role

Add a role to an user.

sanity_access_apply_default_role

Apply organization default role to all users.

sanity_access_check_invite_eligibility

Check invite eligibility.

sanity_access_check_my_permissions

Check if current user has specified permissions.

sanity_access_create_invite

Create invite.

sanity_access_create_permission

Create a permission.

sanity_access_create_request

Create a new Request.

sanity_access_create_role

Create a role.

sanity_access_decline_request

Decline request.

sanity_access_delete_permission

Delete a permission.

sanity_access_delete_robot

Revoke robot token and delete robot.

sanity_access_delete_role

Delete a role.

sanity_access_get_invite

Get invite.

sanity_access_get_permission

Get a permission.

sanity_access_get_request_state

Get access request state.

sanity_access_get_robot

Get robot metadata.

sanity_access_get_role

Get a role.

sanity_access_get_user

Get user and roles.

sanity_access_leave_resource

Remove own user from a resource.

sanity_access_list_invites

Get invites.

sanity_access_list_my_invites

Get current user's invites filtered by status/resource.

sanity_access_list_my_permissions

Get current user permissions.

sanity_access_list_my_requests

List all request for current user.

sanity_access_list_permissions

Get Permissions.

sanity_access_list_requests

List all requests for given project/organization.

sanity_access_list_robots

Get robots with access to this resource.

sanity_access_list_roles

List roles assignable to an user on this resource.

sanity_access_remove_user

Remove an user from a resource.

sanity_access_remove_user_role

Remove a role from an user in a resource.

sanity_access_replace_user_roles

Replace the role set for an user.

sanity_access_revoke_invite

Revoke invite.

sanity_access_set_robot_expiry

Update robot token.

sanity_access_update_permission

Update a permission.

sanity_access_update_role

Update a role.

sanity_create_attribute_definition

Create Attribute Definition.

sanity_delete_attribute_definition

Delete Attribute Definition.

sanity_delete_user_attributes

Delete User Attributes.

sanity_get_my_attributes

Get My Attributes.

sanity_get_user_attributes

Get User Attributes.

sanity_list_attribute_definitions

List Attribute Definitions.

sanity_update_user_attributes

Update User Attributes.

sanity_add_organization_member_role

Give an organization member a role.

sanity_add_project_member_role

Add a role to an user.

sanity_create_organization_grant

Create an organization grant.

sanity_create_permission_resource

Create a permission resource.

sanity_create_project_grant

Create a grant.

sanity_create_project_role

Create a role.

sanity_delete_organization_grant

Remove an organization grant.

sanity_delete_permission_resource

Delete a permission resource.

sanity_delete_project_grant

Remove a grant.

sanity_delete_project_role

Delete a role.

sanity_delete_project_role_mappings

Delete project role mappings.

sanity_get_dataset_acl

Get dataset ACL.

sanity_get_dataset_grants

Get dataset grants.

sanity_get_organization_member_roles

Get the roles of a single organization member.

sanity_get_permission_resource

Get a permission resource.

sanity_get_project_member_roles

Get an user's roles.

sanity_get_project_role

Get a role.

sanity_list_my_organization_grants

Get all grants for current user.

sanity_list_my_project_grants

List grants for the current user.

sanity_list_organization_members

List organization members.

sanity_list_permission_resource_schemas

List permission resource schemas.

sanity_list_permission_resources

List permission resources.

sanity_list_project_member_grants

List grants for a project member.

sanity_list_project_members

List users with roles.

sanity_list_project_roles

List all roles.

sanity_remove_organization_member_role

Remove a role from an organization member.

sanity_remove_project_member_role

Delete a role from an user.

sanity_set_project_role_mappings

Create/update project role mappings.

sanity_update_permission_resource

Update a permission resource.

sanity_update_project_role

Update a role.

sanity_assign_dataset_tag

Assign a tag to a dataset.

sanity_create_project

Create a project.

sanity_create_project_tag

Create a new tag for the project.

sanity_delete_cors_origin

Delete a CORS entry.

sanity_delete_dataset

Delete a dataset.

sanity_delete_project

Delete a project.

sanity_delete_project_tag

Delete a tag by identifier.

sanity_delete_project_token

Delete a token for the project.

sanity_get_dataset_embeddings_settings

Get embeddings index settings for a dataset.

sanity_get_project_tag

Retrieve a tag.

sanity_get_project_user

Retrieve an user.

sanity_list_dataset_tags

List tags for a dataset.

sanity_list_project_features

List active features for the project.

sanity_list_project_tags

List tags for the project.

sanity_list_project_tokens

List tokens for the project.

sanity_list_projects

List all projects.

sanity_remove_dataset_tag

Remove a tag from a dataset.

sanity_update_dataset

Update a dataset.

sanity_update_dataset_embeddings_settings

Update embeddings index settings for a dataset.

sanity_update_project

Update a project.

sanity_update_project_tag

Update a tag by identifier.

sanity_media_create_signing_key

Create a new signing key.

sanity_media_delete_signing_key

Delete a signing key.

sanity_media_delete_subtitle

Delete a subtitle.

sanity_media_generate_subtitles

Generate subtitles using AI.

sanity_media_get_signing_key

Get a specific signing key.

sanity_media_get_video_playback_info

Get video playback information.

sanity_media_get_video_playback_url

Redirect to video playback URL.

sanity_media_get_video_rendition_url

Redirect to video rendition URL.

sanity_media_list_asset_references

List references to an asset.

sanity_media_list_signing_keys

List all signing keys.

sanity_media_mutate

Mutate media in the Media Library.

sanity_media_query

Query media in the Media Library with a request body.

sanity_media_query_get

Query media in the Media Library.

sanity_media_search

Search for assets and references.

sanity_media_upload

Upload an asset to the media library.

sanity_media_upload_from_url

Upload an asset to the media library from a URL.

sanity_media_upload_subtitles

Upload a subtitle file.

sanity_list_document_transactions

Get the transactions for a list of documents.

sanity_listen_live_events

Stream sync tag invalidation events.

sanity_query_documents_cdn_get

Same as query_documents_get, answered from Sanity's API CDN.

sanity_query_documents_get

Query using GET method.

sanity_delete_function_env_var

Delete an environment variable.

sanity_delete_function_logs

Delete logs for a function.

sanity_get_function

Read a function.

sanity_get_function_logs

Retrieve function logs.

sanity_get_webhook

Get a webhook by ID.

sanity_get_webhook_attempt

Get a webhook attempt by ID.

sanity_invoke_function

Invoke a function.

sanity_list_function_env_vars

List environment variable keys.

sanity_list_functions

List functions.

sanity_list_webhook_attempts

List webhook attempts.

sanity_list_webhook_message_attempts

List attempts for a webhook message.

sanity_list_webhook_messages

List webhook messages.

sanity_stream_function_logs

Stream function logs.

sanity_update_function_env_var

Update an environment variable.

sanity_add_comment_reaction

Add a reaction to a comment.

sanity_delete_comment

Delete a comment and all its replies.

sanity_listen_comments

Listen for comment changes.

sanity_query_comments_get

Query comments.

sanity_remove_comment_reaction

Remove a reaction from a comment.

sanity_update_comment

Update a comment.

sanity_agent_generate

Send an instruction to Generate.

sanity_agent_patch

Make a schema-aware patch to a document.

sanity_agent_prompt

Prompt the LLM for a response.

sanity_agent_translate

Translate a document.

sanity_content_agent_chat

Send a chat message.

sanity_content_agent_prompt

Send an one-shot prompt.

sanity_get_schedule

Get schedule by ID.

sanity_run_schedule

Run schedule.

sanity_scheduling_publish_documents

Publish documents.

sanity_scheduling_unpublish_documents

Unpublish documents.

sanity_update_schedule

Update schedule.

sanity_get_dataset_backup

Get a backup.

sanity_link_media_library_asset

Link a Media Library asset to a dataset.

sanity_list_dataset_backups

List backups.

sanity_list_dataset_copy_jobs

List copy jobs.

sanity_set_dataset_backups

Enable or disable backups.

sanity_upload_file

Upload a file asset.

sanity_upload_image

Upload an image asset.

sanity_export_activity_csv

Export activity log events as CSV.

sanity_listen_job

Listen for job updates.

sanity_purge_asset_cache

Purge one dataset image or file.

Connect Sanity to Claude, ChatGPT and Claude Code

Credentials off one Sanity screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.

In sanity.io/manage, open your project, go to Settings, then API, then Tokens, and click Add new token. Name it, pick a role (Editor for content, Developer on paid plans for datasets and webhooks), save it and copy the token, which Sanity shows once. Paste it into PopMCP, then pick the project to connect and the PopMCP workspace it goes into.

API token••••••••••••3f7a
Project IDabc12def
Default datasetproduction
ConnectionVerified

Then just ask for the work

  • “Show me the document types in our dataset, then list the blog posts with unpublished changes”

    • get_content_model
    • list_documents
  • “Fix the typo in the Pricing page title and publish it”

    • list_documents
    • update_document
  • “Add this image from our CDN as the main image of the launch post, and leave it as a draft”

    • list_documents
    • attach_image_from_url
  • “Gather the three launch posts into a release and schedule it for Friday at 9am UTC”

    • create_release
    • add_document_to_release
    • publish_release
  • “Which articles written in the last month mention our new pricing, as the live site shows them?”

    • query_documents
    • query_documents_cdn
  • “Who changed the About page last week, and what did it say before?”

    • list_transactions
    • get_document_revision
  • “Set up a webhook that tells our build service whenever a post is published”

    • list_webhooks
    • create_webhook

Use Sanity from the assistant you already open

One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.

Claude DesktopCustom connector

Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.

Claude WebCustom connector

The same endpoint, registered in the browser. Nothing to install on the machine you are working from.

ChatGPTCustom connector

Register PopMCP as a custom connector, then let ChatGPT read and update the account.

CodexDesktop & CLI

Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.

OpenCodeCoding agent

Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.

ZCodeDesktop app

Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.

Sanity MCP server questions

What teams ask before putting Sanity behind an AI client.

What does the Sanity MCP server need to connect?

One API token. In sanity.io/manage, open your project, go to Settings, then API, then Tokens, add a token and copy it right away, because Sanity shows it once. You need the Developer or Administrator role in the project to make one. There is no app to register. PopMCP checks the token, stores it encrypted and sends it from the server, so your AI client never sees it.

Which role should the token have?

Editor reads and writes content, and Viewer only reads. On paid plans, Developer also manages datasets, webhooks and CORS origins. The token's role is the ceiling: when it does not allow something, the tool says so and names what to change. You can also keep the connection read-only in PopMCP whatever role the token has.

Will the AI change my live site by accident?

The everyday tools work like Sanity Studio: creating and updating leave a draft, and nothing goes live until something publishes it. Only the low-level mutate tool writes exactly what it is given, and its description tells the AI to use it only when asked. Publishing and deleting are still real actions, so keep the connection read-only for clients that should only look.

Can it read drafts and content releases?

Yes. Queries can use the drafts perspective to see unpublished changes, the published perspective for what is live, or a release id to see a release as it will look. A public dataset's published content can be read by anyone, but drafts always need the token.

How is this different from Sanity's own MCP server?

Sanity's server at mcp.sanity.io focuses on editing content and working with schemas, and it can deploy schemas, which PopMCP cannot because that is not in Sanity's HTTP API. PopMCP covers the HTTP API itself, including webhooks, roles and access, activity logs, scheduling, Functions and Media Library, and it connects alongside your other tools under one sign-in. You can use both.

Does it work with more than one project or dataset?

Each project you pick becomes its own connection, so the AI cannot reach a project mapped to another workspace. Inside a project, tools use the production dataset by default and can name any other dataset in that project. An organization token can reach several projects, and a project token reaches one.

Do I have to run or host the Sanity MCP server myself?

No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.

Which AI clients can use this MCP server?

Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.

How do I connect Sanity to Claude Code?

Connect Sanity in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking Sanity on the consent screen. The Sanity tools are then available in that session, and no Sanity credential is stored on your machine.

Why do only 45 of the 250 tools load by default?

Loading 250 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 45-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.

What is the difference between a tool and a trigger?

A tool is something your AI calls, and there are 250 here. A trigger is something PopMCP watches for you: 8 Sanity events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Sanity.

Connect Sanity to your AI in minutes

Launch a hosted MCP endpoint for Sanity, keep tool access under control, and start testing real workflow prompts right away.

Connect your first MCP