Sanity MCP自托管服务器

Sanity MCP自托管服务器提供完整的CRUD操作、原子事务、引用跟踪以及官方服务器不具备的工具,适用于需要离线使用和自我托管的环境。

  • by Purple-Horizons
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Purple-Horizons/sanity-mcp

使用说明

🔮 Sanity MCP服务器

Sanity弃用的自托管Sanity MCP。 完整的CRUD、原子事务、引用跟踪和官方服务器没有的工具。


为什么存在

Sanity的官方MCP服务器(@sanity/mcp-server)是 归档。他们希望您在以下位置使用他们的托管解决方案 mcp.sanity.io 使用OAuth。

如果你愿意,那很好:

  • 每个AI工具的OAuth流程
  • 对Sanity基础设施的依赖
  • 无离线或气隙使用
  • 无论他们决定公开什么工具

此MCP为您提供:

  • 🔑 简单令牌认证——一个环境变量,完成
  • 🏠 自托管——可在任何地方运行,无外部依赖
  • 🛠️ 更多工具——参考跟踪、差异、历史、批量操作
  • ⚡ 离线工作——无需OAuth舞蹈,无需托管服务

快速开始

npx @purple-horizons/sanity-mcp

或全局安装:

npm install -g @purple-horizons/sanity-mcp

MCP配置

添加到您的Claude桌面、光标或VS代码配置中:

{
  "mcpServers": {
    "sanity": {
      "command": "npx",
      "args": ["@purple-horizons/sanity-mcp"],
      "env": {
        "SANITY_PROJECT_ID": "your-project-id",
        "SANITY_DATASET": "production",
        "SANITY_TOKEN": "sk-your-token"
      }
    }
  }
}

工具

📖 读取操作

工具 说明
sanity_query 执行任何GROQ查询
sanity_get_document 按ID获取单个文档
sanity_list_documents 按类型列出文档并分页
sanity_search 跨内容的全文搜索
sanity_get_types 发现所有文档类型
sanity_get_type_info 获取类型的架构信息
sanity_count 统计与筛选器匹配的文档

✏️ 写入操作

工具 说明
sanity_create 创建新文档
sanity_update 替换整个文档
sanity_patch 部分更新特定字段
sanity_delete 删除文档
sanity_publish 发布草稿
sanity_unpublish 将已发布内容移至草稿

🚀 独特的工具(不在Sanity的官方MCP中)

工具 说明
sanity_references 查找引用给定文档的所有文档 --删除前必须
sanity_diff 比较两个文档 --草稿与已发布的,或任意两份文档
sanity_history 获取修订历史记录 --看看谁改变了什么
sanity_bulk 原子批处理操作 --要么全部成功,要么全部失败
sanity_draft_status 检查发布状态 --草稿、出版或两者兼有

是什么让这更好

1.参考跟踪

在删除该图像资源之前,您可能想知道它的用途:

sanity_references id="image-abc123"
→ Shows all 47 blog posts using that image

Sanity的官方MCP没有这个。你会发现困难的方式。

2.文件困难

内容编辑器进行了更改。发生了什么变化?

sanity_diff idA="drafts.post-xyz" idB="post-xyz"
→ Shows exactly which fields differ

发布前请查看差异。或者比较任何两份文件。

3.原子散装操作

更新50个文档,它们都需要一起成功吗?一笔交易:

sanity_bulk operations=[
  { "patch": { "id": "post-1", "set": { "featured": true }}},
  { "patch": { "id": "post-2", "set": { "featured": false }}},
  ...
]
→ All or nothing. No partial states.

随着 dryRun: true,执行前验证。

4.草案状态概览

有草稿吗?它出版了吗?两者都有?

sanity_draft_status id="post-abc123"
→ { status: "both", hasUnpublishedChanges: true }

不再手动检查 drafts.{id} 对比 {id}.


环境变量

变量 必填 默认 描述
SANITY_PROJECT_ID ✅ — 您的Sanity项目ID
SANITY_DATASET ❌ production 数据集名称
SANITY_TOKEN ❌ — API令牌(写入时需要)
SANITY_API_VERSION ❌ 2024-01-20 API版本

获取您的令牌

  1. 首选 卫生/管理
  2. 选择您的项目→ API → 代币
  3. 使用编辑器或更高权限添加新令牌
  4. 复制并设置为 SANITY_TOKEN

GROQ示例

// All posts, newest first
*[_type == "post"] | order(_createdAt desc)

// Specific post by slug
*[_type == "post" && slug.current == "hello-world"][0]

// Posts with expanded author
*[_type == "post"]{
  title,
  slug,
  "author": author->name,
  "category": category->title
}

// Count by category
{
  "total": count(*[_type == "post"]),
  "published": count(*[_type == "post" && !(_id in path("drafts.**"))])
}

// Full-text search
*[_type == "post" && title match "AI*"]

发展

# Clone
git clone https://github.com/Purple-Horizons/sanity-mcp.git
cd sanity-mcp

# Install
npm install

# Build
npm run build

# Test
npm test

# Run locally
npm run dev

比较

专题 这位MCP Sanity官员
自托管 ✅ ❌ (已存档)
简单令牌身份验证 ✅ 仅限OAuth
脱机工作 ✅ ❌
参考跟踪 ✅ ❌
文档差异 ✅ ❌
批量交易 ✅ ❌
草稿状态 ✅ ❌
修订历史 ✅ ❌
架构发现 ✅ ✅
完整CRUD ✅ ✅
GROQ查询 ✅ ✅
发布管理 ❌ ✅
语义搜索 ❌ ✅

太长,读不下去了 我们更适合自托管、开发人员工具和内容运营。如果你需要发布和带有嵌入的语义搜索,它们会更好。


许可证

MIT© 紫色地平线


链接