---
title: "Sanity MCP server for AI agents - actionlake"
description: "Give Claude 208 Sanity actions through one MCP server: applications, access, roles, projects. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/sanity
updated: 2026-10-23
---

Connectors · Marketing & media

# Sanity MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Sanity and the rest of your systems. It gives your agent 208 Sanity actions (100 reads, 66 writes and 42 that wait for a confirmation) and holds the Sanity credential itself, so the agent never does. It paces Sanity's limits and records every call.

[Connect Sanity free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "sanity.access.get_my_invites",
  intent: "check which Sanity account is connected"
}
# Get current user's invites filtered by status/resource · read · 1 upstream call
```

- 208 actions in one signed file
- 100 read look, never change
- 66 write create and update
- 42 wait for a yes destructive, confirmed first

Set up

## Connect Sanity in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect Sanity.
   Bearer token. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.
   - `token` Sanity API token (manage.sanity.io > your project > API > Tokens
   - `dataset` Your Sanity dataset
   - `project_id` Your Sanity project id
   ```
   account { op: "connections.requirements", service: "sanity" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "sanity.access.get_my_invites" }
   # get current user's invites filtered by status/resource · read · 1 upstream call
   check { action: "sanity.agent.prompt", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

Sanity at a glance

**Sign-in**

Bearer token. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.

**You provide**

`token`

**Setup fields**

`dataset` `project_id`

**Limits we pace to**

500 calls a second, per connection

**API covered**

Sanity HTTP API (data plane v2025-02-19; projects v2021-06-07; roles v2021-10-04; access v2025-07-11), at your own api.sanity.io address, set when you connect

**Built from**

Sanity's documentation, read 23 October 2026[sanity.io](https://www.sanity.io/docs/http-reference/access-api.json) [sanity.io](https://www.sanity.io/docs/http-reference/actions.json) [sanity.io](https://www.sanity.io/docs/http-reference/activity-log.json)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

95 of 100 reads, for up to an hour; a write clears what it affects

**Shared entities**

1, so ask can line Sanity up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in Sanity.

208 actions in 16 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

- **100** read look, never change
- **66** write create and update
- **42** destructive wait for a confirmation

1. ### Applications
   45
   26 read · 12 write · 7 destructive
   Create an application · Create a user application · Create user application data · Create a user application for a project
2. ### Access
   40
   17 read · 12 write · 11 destructive
   List all users of a resource and their assigned roles · Create invite · Create a permission · Create a new Request
3. ### Roles
   30
   14 read · 5 write · 11 destructive
   Create an organization grant · Create a permission resource · Create a grant · Create a role
4. ### Projects
   28
   12 read · 10 write · 6 destructive
   Create a CORS entry · Create a dataset · Create a project · Create a new tag for the project
5. ### Media library
   13
   7 read · 4 write · 2 destructive
   Create a new signing key · Generate subtitles using AI · List all signing keys · Query media in the Media Library with a request body
6. ### Webhooks
   9
   6 read · 2 write · 1 destructive
   Create a webhook · List webhook attempts · List attempts for a webhook message · List webhook messages
7. ### Functions
   8
   4 read · 2 write · 2 destructive
   Invoke a function · List environment variable keys · List functions · Read a function
8. ### Scheduling
   7
   2 read · 5 write · 0 destructive
   Create schedule · List schedules · Run schedule · Get schedule by ID

**8 more areas · 28 actions**

- User attributes **7**
- Data **6**
- Agent **5**
- Assets **3**
- Backups **3**
- Datasets **2**
- Activity **1**
- Jobs **1**

Top actions

## The Sanity API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `sanity.access.get_users` List all users of a resource and their assigned roles | Retrieve a list of all users of a resource along with their assigned roles. | read | this connector |
| `sanity.agent.prompt` Prompt the LLM for a response | Prompt the LLM for a response. | write | this connector |
| `sanity.agent.generate` Send an instruction to Generate | Sends an instruction request to Generate for a specific dataset. | write | this connector |
| `sanity.data.query_post` Query using POST method | Use POST for long queries or large parameter values. | read | this connector |
| `sanity.access.get_roles` List roles assignable to a user on this resource | Requires permission - `sanity.{resourceType}.roles.read`. | read | this connector |
| `sanity.roles.list_roles` List all roles | List all roles in a project, including built-in roles, ordered by name. | read | this connector |
| `sanity.roles.create_role` Create a role | Create a custom role in a project. | write | this connector |
| `sanity.projects.list_tags` List tags for a dataset | Returns a list of tags for the dataset. | read | this connector |
| `sanity.projects.create_tag` Create a new tag for the project | Creates a new tag for the project. | write | this connector |
| `sanity.backups.list_backups` List backups | List backups. | read | this connector |
| `sanity.datasets.copy_dataset` Copy | The Copy API, also known as Cloud Clone, lets you make a copy of an existing dataset. | write | this connector |
| `sanity.roles.create_project_grant` Create a grant | Add one or more grants to a custom role in a project. | destructive | this connector |

Try it

## Prompts to paste into Claude.

Each one names the Sanity actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Who has access in Sanity? List every user and their role.
   calls `sanity.access.get_users`
2. Write write
   Prompt the LLM for a response in Sanity. Show me exactly what you will send before you save it.
   calls `sanity.agent.prompt`

Governance for Sanity

## Destructive actions wait for a yes.

42 Sanity actions are destructive. The first 10:

- Create a grant `sanity.roles.create_project_grant`
- Create an organization grant `sanity.roles.create_organization_grant`
- Add a role to a user `sanity.access.add_role_to_user`
- Add a role to a user `sanity.roles.add_role_assignment`
- Apply organization default role to all users `sanity.access.add_default_role_to_users`
- Give an organization member a role `sanity.roles.add_organization_role_assignment`
- Delete a role `sanity.roles.delete_role`
- Delete a role `sanity.access.delete_role`
- Remove a user from a resource `sanity.access.remove_user`
- Revoke robot token and delete robot `sanity.access.delete_robot`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do sanity.roles.delete_role confirm_policy: **human**

Delete a role?

**intent:** the user asked me to delete a role

run suspended · waiting for a named person · key _sanity-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "sanity-agent",
  allowed_actions: ["sanity.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "sanity.roles.create_project_grant", approver: "lead@example.com" },
    { match: "sanity.roles.create_organization_grant", approver: "lead@example.com" },
    { match: "sanity.access.add_role_to_user", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to Sanity only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What Sanity costs on actionlake.

Every Sanity action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call Sanity refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 208 Sanity actions
- 208 actions page each page of a long list is one call
- 95 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every Sanity action.

208 actions by area: the id your agent calls, what it does, and its effect.

**Applications 45**

- `sanity.applications.check_whether_application_can_be_embedded` Check whether an application can be embedded read
- `sanity.applications.create_application` Create an application write
- `sanity.applications.create_user_application` Create a user application write
- `sanity.applications.create_user_application_data` Create user application data write
- `sanity.applications.create_user_application_for_project` Create a user application for a project write
- `sanity.applications.delete_all_user_applications` Delete all user applications destructive
- `sanity.applications.delete_application` Delete an application destructive
- `sanity.applications.delete_installation_configuration` Delete an installation configuration destructive
- `sanity.applications.delete_user_application` Delete a user application destructive
- `sanity.applications.delete_user_application_data` Delete user application data destructive
- `sanity.applications.delete_user_application_for_project` Delete a user application for a project destructive
- `sanity.applications.get_all_user_applications` Get all user applications read
- `sanity.applications.get_all_user_applications_for_project` Get all user applications for a project read
- `sanity.applications.get_app_host_availability` Get appHost availability read
- `sanity.applications.get_application_by_host` Get application by host read
- `sanity.applications.get_application_by_id` Get an application by ID read
- `sanity.applications.get_application_in_organization_by_id_or_slug` Get an application in an organization by ID or slug read
- `sanity.applications.get_installation_by_id` Get an installation by ID read
- `sanity.applications.get_interfaces_by_type_for_application` Get interfaces by type for an application read
- `sanity.applications.get_interfaces_by_type_for_installation` Get interfaces by type for an installation read
- `sanity.applications.get_project_by_application` Get project by application read
- `sanity.applications.get_resource_access_for_application` Get resource access for an application read
- `sanity.applications.get_resource_access_for_installation` Get resource access for an installation read
- `sanity.applications.get_studio_auto_updating_version_status` Get studio auto-updating version status read
- `sanity.applications.get_user_application` Get a user application read
- `sanity.applications.get_user_application_deployments` Get user application deployments read
- `sanity.applications.get_user_application_deployments_for_project` Get user application deployments for a project read
- `sanity.applications.get_user_application_for_project` Get a user application for a project read
- `sanity.applications.get_workspaces_for_application` Get workspaces for an application read
- `sanity.applications.get_workspaces_for_studio_applications` Get workspaces for studio applications read
- `sanity.applications.get_workspaces_for_user_application` Get workspaces for a user application read
- `sanity.applications.install_default_singletons_for_organization` Install the default singletons for an organization write
- `sanity.applications.install_singleton_application` Install a singleton application write
- `sanity.applications.list_applications_for_organization` List applications for an organization read
- `sanity.applications.list_configs_for_installation` List configs for an installation read
- `sanity.applications.list_deployments_for_application` List deployments for an application read
- `sanity.applications.list_installations_for_organization` List installations for an organization read
- `sanity.applications.list_singleton_catalog_for_organization` List the singleton catalog for an organization read
- `sanity.applications.reconcile_organization_s_ai_singletons_with_its_ai_features_status` Reconcile an organization's AI singletons with its AI features status write
- `sanity.applications.register_user_application_config` Register a user application config write
- `sanity.applications.register_user_application_config_for_project` Register a user application config for a project write
- `sanity.applications.uninstall_singleton_application` Uninstall a singleton application destructive
- `sanity.applications.update_application` Update an application write
- `sanity.applications.update_user_application` Update a user application write
- `sanity.applications.update_user_application_for_project` Update a user application for a project write

**Access 40**

- `sanity.access.accept_invite` Accept invite write
- `sanity.access.accept_request` Accept request write
- `sanity.access.add_default_role_to_users` Apply organization default role to all users destructive
- `sanity.access.add_role_to_user` Add a role to a user destructive
- `sanity.access.check_invite_eligibility` Check invite eligibility read
- `sanity.access.check_user_permissions` Check if current user has specified permissions read
- `sanity.access.create_invite` Create invite write
- `sanity.access.create_permission` Create a permission write
- `sanity.access.create_request` Create a new Request write
- `sanity.access.create_robot` Create robot and associated token write
- `sanity.access.create_role` Create a role write
- `sanity.access.decline_request` Decline request write
- `sanity.access.delete_permission` Delete a permission destructive
- `sanity.access.delete_robot` Revoke robot token and delete robot destructive
- `sanity.access.delete_role` Delete a role destructive
- `sanity.access.get_access_request_state` Get access request state read
- `sanity.access.get_invite_by_token` Get invite read
- `sanity.access.get_invites` Get invites read
- `sanity.access.get_my_invites` Get current user's invites filtered by status/resource read
- `sanity.access.get_my_requests` List all request for current user read
- `sanity.access.get_permission` Get a permission read
- `sanity.access.get_permissions` Get Permissions read
- `sanity.access.get_requests` List all requests for given project/organization read
- `sanity.access.get_robot` Get robot metadata read
- `sanity.access.get_robots` Get robots with access to this resource read
- `sanity.access.get_role` Get a role read
- `sanity.access.get_roles` List roles assignable to a user on this resource read
- `sanity.access.get_user` Get user and roles read
- `sanity.access.get_user_permissions` Get current user permissions read
- `sanity.access.get_users` List all users of a resource and their assigned roles read
- `sanity.access.remove_own_user` Remove own user from a resource destructive
- `sanity.access.remove_role_from_user` Remove a role from a user in a resource destructive
- `sanity.access.remove_user` Remove a user from a resource destructive
- `sanity.access.replace_roles_for_user` Replace the role set for a user write
- `sanity.access.revoke_current_robot_token` Revoke current robot token destructive
- `sanity.access.revoke_invite` Revoke invite destructive
- `sanity.access.rotate_current_robot_token` Rotate current robot token destructive
- `sanity.access.update_permission` Update a permission write
- `sanity.access.update_robot` Update robot token write
- `sanity.access.update_role` Update a role write

**Roles 30**

- `sanity.roles.add_organization_role_assignment` Give an organization member a role destructive
- `sanity.roles.add_role_assignment` Add a role to a user destructive
- `sanity.roles.create_organization_grant` Create an organization grant destructive
- `sanity.roles.create_permission_resource` Create a permission resource write
- `sanity.roles.create_project_grant` Create a grant destructive
- `sanity.roles.create_role` Create a role write
- `sanity.roles.delete_organization_grant` Remove an organization grant destructive
- `sanity.roles.delete_organization_role_assignment` Remove a role from an organization member destructive
- `sanity.roles.delete_permission_resource` Delete a permission resource destructive
- `sanity.roles.delete_project_grant` Remove a grant destructive
- `sanity.roles.delete_role` Delete a role destructive
- `sanity.roles.delete_role_assignment` Delete a role from a user destructive
- `sanity.roles.delete_role_mappings` Delete project role mappings destructive
- `sanity.roles.get_dataset_acl` Get dataset ACL read
- `sanity.roles.get_organization_role_assignment` Get the roles of a single organization member read
- `sanity.roles.get_permission_resource` Get a permission resource read
- `sanity.roles.get_role` Get a role read
- `sanity.roles.get_role_assignment` Get a user's roles read
- `sanity.roles.list_dataset_grants` Get dataset grants read
- `sanity.roles.list_organization_grants` Get all grants for current user read
- `sanity.roles.list_organization_role_assignments` List organization members read
- `sanity.roles.list_permission_resource_schemas` List permission resource schemas read
- `sanity.roles.list_permission_resources` List permission resources read
- `sanity.roles.list_project_grants` List grants for the current user read
- `sanity.roles.list_project_member_grants` List grants for a project member read
- `sanity.roles.list_project_role_assignments` List users with roles read
- `sanity.roles.list_roles` List all roles read
- `sanity.roles.update_permission_resource` Update a permission resource write
- `sanity.roles.update_role` Update a role write
- `sanity.roles.update_role_mappings` Create/update project role mappings write

**Projects 28**

- `sanity.projects.assign_tag_to_dataset` Assign a tag to a dataset write
- `sanity.projects.create_cors_entry` Create a CORS entry write
- `sanity.projects.create_dataset` Create a dataset write
- `sanity.projects.create_project` Create a project write
- `sanity.projects.create_tag` Create a new tag for the project write
- `sanity.projects.create_token` Create a new token for the project write
- `sanity.projects.delete_cors_entry` Delete a CORS entry destructive
- `sanity.projects.delete_dataset` Delete a dataset destructive
- `sanity.projects.delete_project` Delete a project destructive
- `sanity.projects.delete_tag` Delete a tag by identifier destructive
- `sanity.projects.delete_token` Delete a token for the project destructive
- `sanity.projects.get_embeddings_index_settings` Get embeddings index settings for a dataset read
- `sanity.projects.list_cors_entries` List all CORS entries read
- `sanity.projects.list_datasets` List all datasets available to the project read
- `sanity.projects.list_features` List active features for the project read
- `sanity.projects.list_permissions` List your permissions for the project read
- `sanity.projects.list_project_tags` List tags for the project read
- `sanity.projects.list_projects` List all projects read
- `sanity.projects.list_tags` List tags for a dataset read
- `sanity.projects.list_tokens` List tokens for the project read
- `sanity.projects.remove_tag_from_dataset` Remove a tag from a dataset destructive
- `sanity.projects.retrieve_project` Retrieve a project read
- `sanity.projects.retrieve_tag` Retrieve a tag read
- `sanity.projects.retrieve_user` Retrieve a user read
- `sanity.projects.update_dataset` Update a dataset write
- `sanity.projects.update_embeddings_index_settings` Update embeddings index settings for a dataset write
- `sanity.projects.update_project` Update a project write
- `sanity.projects.update_tag` Update a tag by identifier write

**Media library 13**

- `sanity.media_library.create_signing_key` Create a new signing key write
- `sanity.media_library.delete_signing_key` Revoke a signing key destructive
- `sanity.media_library.delete_subtitle` Delete a subtitle destructive
- `sanity.media_library.generate_subtitle` Generate subtitles using AI write
- `sanity.media_library.get_playback_info` Get video playback information read
- `sanity.media_library.get_references_to_asset` List references to an asset read
- `sanity.media_library.get_signing_key` Get a specific signing key read
- `sanity.media_library.list_signing_keys` List all signing keys read
- `sanity.media_library.mutate_media` Mutate media in the Media Library write
- `sanity.media_library.query` Query media in the Media Library read
- `sanity.media_library.query_post` Query media in the Media Library with a request body read
- `sanity.media_library.search_assets` Search for assets and references read
- `sanity.media_library.upload_asset_from_url` Upload an asset to the media library from a URL write

**Webhooks 9**

- `sanity.webhooks.create_webhook` Create a webhook write
- `sanity.webhooks.delete_webhook` Delete a webhook destructive
- `sanity.webhooks.get_webhook` Get a webhook by ID read
- `sanity.webhooks.get_webhook_attempt` Get a webhook attempt by ID read
- `sanity.webhooks.list_webhook_attempts` List webhook attempts read
- `sanity.webhooks.list_webhook_message_attempts` List attempts for a webhook message read
- `sanity.webhooks.list_webhook_messages` List webhook messages read
- `sanity.webhooks.list_webhooks` List all webhooks read
- `sanity.webhooks.update_webhook` Update a webhook write

**Functions 8**

- `sanity.functions.delete_env_var` Delete an environment variable destructive
- `sanity.functions.delete_function_logs` Delete logs for a function destructive
- `sanity.functions.get_function` Read a function read
- `sanity.functions.invoke_function` Invoke a function write
- `sanity.functions.list_env_vars` List environment variable keys read
- `sanity.functions.list_functions` List functions read
- `sanity.functions.retrieve_function_logs` Retrieve function logs read
- `sanity.functions.set_env_var` Update an environment variable write

**Scheduling 7**

- `sanity.scheduling.create_schedule` Create schedule write
- `sanity.scheduling.get_schedule` Get schedule by ID read
- `sanity.scheduling.list_schedules` List schedules read
- `sanity.scheduling.publish_documents` Publish documents write
- `sanity.scheduling.run_schedule` Run schedule write
- `sanity.scheduling.unpublish_documents` Unpublish documents write
- `sanity.scheduling.update_schedule` Update schedule write

**User attributes 7**

- `sanity.user_attributes.create_attribute_definition` Create Attribute Definition write
- `sanity.user_attributes.delete_attribute_definition` Delete Attribute Definition destructive
- `sanity.user_attributes.delete_user_attributes` Delete User Attributes destructive
- `sanity.user_attributes.get_my_attributes` Get My Attributes read
- `sanity.user_attributes.list_attribute_definitions` List Attribute Definitions read
- `sanity.user_attributes.list_user_attributes` Get User Attributes read
- `sanity.user_attributes.update_user_attributes` Update User Attributes write

**Data 6**

- `sanity.data.dispatch_actions` Dispatch one or more actions write
- `sanity.data.get_documents` Get one or more documents read
- `sanity.data.get_revision` Get a document revision read
- `sanity.data.mutate` Mutate documents write
- `sanity.data.query` Query using GET method read
- `sanity.data.query_post` Query using POST method read

**Agent 5**

- `sanity.agent.generate` Send an instruction to Generate write
- `sanity.agent.patch` Make a schema-aware patch to a document write
- `sanity.agent.prompt` Prompt the LLM for a response write
- `sanity.agent.transform` Transform a document write
- `sanity.agent.translate` Translate a document write

**Assets 3**

- `sanity.assets.link_media_library_asset` Link a Media Library asset to a dataset write
- `sanity.assets.upload_file_asset_from_url` Upload a file asset from a URL write
- `sanity.assets.upload_image_asset_from_url` Upload an image asset from a URL write

**Backups 3**

- `sanity.backups.get_backup` Get a backup read
- `sanity.backups.list_backups` List backups read
- `sanity.backups.set_backups_enabled` Enable or disable backups write

**Datasets 2**

- `sanity.datasets.copy_dataset` Copy write
- `sanity.datasets.list_copy_jobs` List copy jobs read

**Activity 1**

- `sanity.activity.get_activity_log_events` Get activity log events read

**Jobs 1**

- `sanity.jobs.job_status` Job status read

Questions

## The Sanity MCP server, answered.

**Is there a Sanity MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 208 Sanity actions across applications, access, roles and projects, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Sanity.

**What do I need to connect Sanity?**

Sanity API token (manage.sanity.io > your project > API > Tokens. Plus your dataset and your project id. The free call account { op: "connections.requirements", service: "sanity" } lists exactly what to paste.

**Can an AI agent delete or change things in Sanity?**

Only if its key allows it, and only with an explicit confirmation. 42 Sanity actions are destructive, including create a grant, create an organization grant and add a role to a user. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my Sanity API limit?**

actionlake paces every call to the limits in the Sanity service file: 500 calls a second per connection. Repeated reads are answered from cache (95 Sanity actions can be), which never reaches Sanity.

**What does a Sanity action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (208 Sanity actions page). Cache hits, searches, dry runs and calls Sanity refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which Sanity API does it cover?**

The Sanity HTTP API (data plane v2025-02-19; projects v2021-06-07; roles v2021-10-04; access v2025-07-11) at your own api.sanity.io address, set when you connect. It is built from Sanity's documentation as read on 23 October 2026. 208 actions in 16 areas, each one in the signed service file (version 1.0.0).

**Does actionlake keep my Sanity data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Sanity credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like Sanity

Joins with, on shared entities

- [HaloPSA 1](https://actionlake.com/connectors/halopsa)
- [Slack 1](https://actionlake.com/connectors/slack)
- [Gusto 1](https://actionlake.com/connectors/gusto)
- [Microsoft 365 Users 1](https://actionlake.com/connectors/microsoft-365-users)
- [NinjaOne 1](https://actionlake.com/connectors/ninjaone)
- [Salesforce Sales Cloud 1](https://actionlake.com/connectors/salesforce-sales-cloud)

Browse

- [All Marketing & media connectors](https://actionlake.com/connectors/category/marketing-and-media)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by Sanity; the name is the vendor's own. Counts are from the Sanity service file, version 1.0.0.

## Give your agent Sanity today.

[Connect Sanity free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/sanity
More: https://actionlake.com/llms.txt
