🔮 Sanity MCP服务器
Sanity弃用的自托管Sanity MCP。 完整的CRUD、原子事务、引用跟踪和官方服务器没有的工具。
](https://www.npmjs.com/package/@purple-horizons/sanity-mcp) 
______________________________________________________________________
为什么存在
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-mcpMCP配置
添加到您的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 imageSanity的官方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版本 |
获取您的令牌
- 首选 卫生/管理
- 选择您的项目→ API → 代币
- 使用编辑器或更高权限添加新令牌
- 复制并设置为
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© 紫色地平线
______________________________________________________________________
