关于 mcp-sanity-images
mcp-sanity-images 是将本地图片传入 Sanity CMS 的 MCP 服务,支持单张或文件夹上传、将资源附加到文档,以及使用 GROQ 查询内容。
主要功能
- 01上传单张图片资源
- 02上传并附加到文档
- 03批量上传文件夹图片
- 04列出本地图片文件
- 05运行只读 GROQ 查询
适用场景
- 01将本地图片添加到 Sanity 文档
- 02上传目录中的图片资源
- 03附加图片前查找文档 ID
MCP 相关
向 MCP 客户端提供工具,用于将本地图片上传到 Sanity、修改文档字段、列出文件和运行 GROQ 查询。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
5收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| alt | string | 否 | |
| dataset | string | 否 | |
| filePath | string | 是 | |
| projectId | string | 否 |
详细介绍
用于将本地图片上传到 Sanity CMS 的 MCP 服务。
让 AI 助手能够直接将文件系统中的文件上传到 Sanity,作为图片资源。
快速开始
1. 获取 Sanity 令牌
设置 SANITY_TOKEN 环境变量,或直接使用 Sanity CLI 登录:
npx sanity login
服务会自动从 Sanity CLI 配置中读取令牌(所有平台上均为 ~/.config/sanity/config.json)。
2. 添加到 Claude Code
claude mcp add sanity-images --scope user --transport stdio \
-e SANITY_PROJECT_ID=your-project-id \
-- npx -y mcp-sanity-images@latest
就这么简单。重启 Claude Code 后即可使用这些工具。每次会话都会自动运行最新版本。
如果你安装了 Bun,也可以使用
bunx mcp-sanity-images@latest。
替代方案:独立二进制文件
从 Releases 下载预构建的二进制文件:
| 平台 | 文件 |
|---|---|
| macOS(Apple Silicon) | mcp-sanity-images-darwin-arm64 |
| macOS(Intel) | mcp-sanity-images-darwin-x64 |
| Linux | mcp-sanity-images-linux-x64 |
| Windows | mcp-sanity-images-windows-x64.exe |
macOS / Linux:
curl -Lo mcp-sanity-images https://github.com/pijusz/mcp-sanity-images/releases/latest/download/mcp-sanity-images-darwin-arm64
chmod +x mcp-sanity-images
sudo mv mcp-sanity-images /usr/local/bin/
claude mcp add sanity-images --scope user --transport stdio \
-e SANITY_PROJECT_ID=your-project-id \
-- /usr/local/bin/mcp-sanity-images
Windows(PowerShell):
Invoke-WebRequest -Uri "https://github.com/pijusz/mcp-sanity-images/releases/latest/download/mcp-sanity-images-windows-x64.exe" -OutFile "$env:LOCALAPPDATA\mcp-sanity-images.exe"
claude mcp add sanity-images --scope user --transport stdio -e SANITY_PROJECT_ID=your-project-id -- "%LOCALAPPDATA%\mcp-sanity-images.exe"
Claude Desktop
添加到你的 claude_desktop_config.json:
使用 npx(自动更新)
{
"mcpServers": {
"sanity-images": {
"command": "npx",
"args": ["-y", "mcp-sanity-images@latest"],
"env": {
"SANITY_PROJECT_ID": "your-project-id"
}
}
}
}
使用二进制文件(macOS / Linux)
{
"mcpServers": {
"sanity-images": {
"command": "/usr/local/bin/mcp-sanity-images",
"env": {
"SANITY_PROJECT_ID": "your-project-id"
}
}
}
}
使用二进制文件(Windows)
{
"mcpServers": {
"sanity-images": {
"command": "%LOCALAPPDATA%\\mcp-sanity-images.exe",
"env": {
"SANITY_PROJECT_ID": "your-project-id"
}
}
}
}
工具
| 工具 | 描述 |
|---|---|
upload_image | 将单张本地图片上传到 Sanity,作为资源 |
upload_and_set | 上传图片并将其设置到文档字段 |
batch_upload | 将文件夹中的所有图片上传为资源 |
list_images | 列出目录中的图片文件 |
groq_query | 执行 GROQ 查询(在附加图片前查找文档);可选 perspective(默认 raw、published、drafts) |
支持的格式:PNG、JPG/JPEG、WebP、GIF、SVG。
配置
| 环境变量 | 必需 | 默认值 | 描述 |
|---|---|---|---|
SANITY_PROJECT_ID | 是 | — | 你的 Sanity 项目 ID |
SANITY_DATASET | 否 | production | 数据集名称 |
SANITY_TOKEN | 否* | — | API 令牌(*缺省时使用 CLI 身份验证) |
所有工具也接受 projectId 和 dataset 参数,可在每次调用时覆盖环境变量。
工具详情
upload_image
上传单个文件并返回资源引用。
filePath: "/path/to/hero.png"
alt: "Hero banner" (optional — derived from filename)
返回 { assetId, url, alt, reference }——reference 可直接用于设置任何 Sanity 图片字段。
upload_and_set
一次调用即可完成上传和设置。
filePath: "/path/to/hero.png"
documentId: "product-123" # or "drafts.product-123" to patch the draft
fieldPath: "hero.image"
上传前,工具会检查 <id> 和 drafts.<id> 中哪些文档存在,因此 ID 错误时不会上传任何内容:
| 你传入的值 | 存在状态 | 设置到 |
|---|---|---|
product-123 | 仅已发布 | product-123 |
product-123 | 已发布 + 草稿 | product-123,并附带 note,说明草稿未被修改(Studio 会显示草稿,发布草稿会覆盖该字段) |
product-123 | 仅草稿(从未发布) | drafts.product-123,并附带 note 和 requestedDocumentId |
drafts.product-123 | 草稿 | drafts.product-123 |
| 任意值 | 均不存在 | 不做任何操作;返回 "Document not found" |
响应中的 documentId 是实际被设置的文档。变更会以 returnIds=true&visibility=sync 发送,因此后续的 groq_query 可以看到变更。
batch_upload
上传目录中的所有图片。
directory: "/path/to/images"
recursive: true
返回 { uploaded, assets }。如果部分文件上传失败,其余文件仍会继续上传,失败项会列在 failed 中(并附带 failedCount)。
list_images
列出图片文件但不上传——方便 AI 查看有哪些可用图片。
directory: "/path/to/images"
recursive: true
groq_query
运行任意 GROQ 查询(只读)。较长的查询会自动通过 POST 发送。可用于查找文档 ID,以便随后使用 upload_and_set。
query: "*[_type == 'product']{_id, title, slug}"
perspective: "raw" # optional: raw (default) | published | drafts
| Perspective | 查询可见的内容 |
|---|---|
raw(默认) | 已发布的文档和草稿并列显示,并使用其真实 ID(草稿的 ID 以 drafts. 为前缀)。可将这些 ID 直接传给 upload_and_set。 |
published | 仅显示已发布的文档;草稿不可见。 |
drafts | 将每个草稿视为已发布的文档。_id 始终是已发布文档的 ID(即使该文档从未发布过);存储的 ID 位于 _originalId 中。 |
服务器固定使用 Sanity API 版本 v2025-02-19。该版本将 published 设为 API 的默认 perspective。此工具会发送 raw,除非你另有要求,因此结果与早期版本(API v2021-10-21,默认值为 raw)返回的结果一致。
更新
使用 npx @latest(推荐):始终获取最新版本,无需手动更新。
使用二进制文件:服务器会在启动时检查是否有新版本,并在版本过旧时向 stderr 输出日志:
[mcp-sanity-images] WARN v0.5.0 available (current: v0.4.1). Download: https://github.com/pijusz/mcp-sanity-images/releases/latest
检查已安装的版本:
mcp-sanity-images --version
要更新,请下载新的二进制文件并替换旧文件。
开发
需要 Bun。
git clone https://github.com/pijusz/mcp-sanity-images.git
cd mcp-sanity-images
bun install
bun test
bun run lint # biome check
bun run build # compile standalone binary
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。