# Sanity — MCP server on mcp.ai > Connect your Sanity account and use 21 tools for developer tools straight from your AI agent. Connect with your own API key. Sanity is a headless CMS platform that provides structured content storage and APIs for modern applications. By: mcp.ai · official Page: https://mcp.ai/sanity ## Connect (MCP protocol) Remote MCP endpoint (HTTP, streamable): https://api.mcp.ai/p_sanity?ms=1787293560000 Add it as a custom/remote MCP connector, then authenticate when prompted. ## REST API (no MCP client required) Every tool is also a REST endpoint, authed with a workspace API key. Discover: GET https://api.mcp.ai/api/sanity/_endpoints # public; lists every endpoint Call: POST https://api.mcp.ai/api/sanity/ Authorization: Bearer sk_live_… # create one at https://mcp.ai/settings/api-keys Content-Type: application/json Body: { …args } → { "ok": true, "tool": "", "result": { … } } ## Developer docs How to use (MCP or REST), markdown: https://mcp.ai/sanity/skill.md Postman collection (v2.1): https://mcp.ai/sanity/postman.json ## Tools - sanity_add_default_role_to_users(resource_id: string) — Apply organization default role to all users. Use when you need to assign the organization's default role to all existing users in the organization. Requires the resource ID of the organization. - sanity_create_attr_definition(key: string, list?: boolean, type: string, read_only?: boolean, description?: string, resource_id: string, resource_type: string) — Tool to create a new user attribute definition in Sanity. Use when you need to define a custom attribute (like 'customer-tier' or 'subscription-level') that can be attached to resources. The key must - sanity_create_prompt_post(config?: object, format?: string, message: string, instructions?: string, organizationId: string) — Send a one-shot prompt to the Sanity Content Agent. Stateless one-shot prompt endpoint. No thread management or message persistence. Ideal for simple, single-turn interactions. Use when you need to se - sanity_delete_attr_definition(resource_id: string, definition_id: string, resource_type: string) — Delete a user attribute definition. Use when you need to remove a custom attribute definition from an organization or project in Sanity. The attribute definition controls how user attributes are struc - sanity_delete_document(purge?: boolean, query?: string, params?: object, dataset: string, dry_run?: boolean, project_id: string, return_ids?: boolean, document_id?: string, return_documents?: boolean) — Delete a document from Sanity by ID or query. This action is irreversible when purge is true — the document cannot be recovered once permanently deleted. Use when you need to remove a specific documen - sanity_delete_user_attributes(attributes: object[], sanity_user_id: string, organization_id: string) — Delete custom attributes from a Sanity user within an organization. Use this tool when you need to remove specific custom attributes from a user account. The action deletes the attributes specified in - sanity_get_document(dataset: string, project_id: string, document_id: string) — Fetch a single document by its ID from Sanity. Use this action when you need to retrieve a specific document using its unique identifier rather than running a GROQ query. Returns the complete document - sanity_get_invite_by_token(resourceId: string, inviteToken: string, resourceType: string) — Retrieve an invite by its public token. Use this action when you need to fetch details about an invite using the invite token that was shared with the invitee. Returns invite information including sta - sanity_get_org_role(roleId: string, organizationId: string) — Retrieve a specific organization role by its ID. Use this action when you need to fetch details about an organization role including its permissions, title, description, and whether it applies to user - sanity_get_permission(resource_id: string, resource_type: string, permission_name: string) — Get a permission for a specific resource. Use when you need to retrieve details about a particular permission including its actions, parameters, and scope. The action retrieves permission information - sanity_get_project(project_id: string) — Retrieve full details for a specific Sanity project by its ID. Returns comprehensive project information including display name, organization, studio host, and timestamps. Use this action when you nee - sanity_get_robots(limit?: integer, next_cursor?: string, resource_id: string, resource_type: string, include_children?: boolean) — Tool to get robots with access to a resource. Use when you need to retrieve a list of robots (service accounts) that have been granted access to a specific resource along with their assigned roles. Th - sanity_get_role(roleName: string, resourceId: string, resourceType: string) — Retrieve a specific role for a given resource type and resource ID. Use this action when you need to fetch details about a role including its permissions, title, description, and whether it applies to - sanity_get_users(limit?: integer, next_cursor?: string, resource_id: string, resource_type: string) — List all users of a resource and their assigned roles. Use when you need to retrieve user information and role assignments for a specific project or organization. Supports pagination via cursor. - sanity_list_org_roles(organization_id: string) — List all roles available for an organization. Use this action to retrieve all available roles that can be assigned to users within a specific Sanity organization. The organization_id is required to id - sanity_list_user_attributes(limit?: integer, cursor?: string, sanity_user_id: string, organization_id: string) — Tool to retrieve user attributes from a Sanity organization. Use when you need to get the attributes (such as roles, permissions, or custom properties) associated with a specific user in a Sanity orga - sanity_query_all_screening(query?: string, params?: object, dataset?: string, explain?: boolean, resultSourceMap?: boolean) — Execute a GROQ query to fetch all screening documents from Sanity. Uses the Sanity HTTP query API endpoint. Default query retrieves all documents of type 'screening'. Supports optional query parameter - sanity_query_documents(query: string, params?: object, useCdn?: boolean, dataset: string, project_id: string, perspective?: string) — Execute an arbitrary GROQ query against a Sanity dataset. GROQ is Sanity's query language for fetching and transforming content. This is a general-purpose query action distinct from any screening-spec - sanity_update_org_acl(role_name: string, sanity_user_id: string, organization_id: string) — Tool to assign a role to a member in a Sanity organization. Use when adding or modifying user roles within an organization. - sanity_update_user_attributes_values(userId: string, attributes: object, resourceId: string, resourceType: string) — Update user attribute values for a resource. Use this action to set or update custom attributes for a user within an organization or project. When setting a value for an attribute key that also exists - sanity_validate_credential() — Validate Sanity API credentials by fetching the authenticated user's information. Use this action when you need to verify that an API token is valid and has proper authentication. This action returns ## Example prompts - "What can I do in Sanity?" - "Show me a summary of my Sanity account" ## Links Docs: https://mcp.ai/docs/mcps/sanity Website: https://mcp.ai/mcps/sanity