appshots mcp
  ](https://crates.io/crates/appshots-mcp)   
MCP服务器,用于生成ASO优化的App Store屏幕截图。生成最多 780最终图像 每个应用程序(39个地区x 5-10个屏幕截图x 1-2个设备)。
人工智能逻辑存在于克劳德代码中;服务器提供工具、渲染和验证。
为什么选择appshots mcp?
| 当前解决方案 | 问题 |
|---|---|
| 手动Figma | 工作天数,每次更新时重复 |
| AppScreens/Screenshots.pro | 付费,供应商锁定 |
| fastlane frameit+ImageMagick | 平面PNG帧,约10%的布局精度,RTL/neneneba表情中断 |
核心问题: 屏幕截图标题与ASO关键字断开连接。标题必须加强关键字的覆盖范围,而不是随机的营销文本。appshots-mcp通过将ASO关键字分析直接集成到屏幕截图生成管道中来解决这个问题。
特性
- 24个MCP工具 完整的截图流程
- 3个MCP提示 指导应用程序准备、模板设计和批量生成
- 模拟器状态管理 --预热、种子用户默认值、捕获前滚动/点击
- 干净的捕捉+Typst合成 --在模板中添加了设备帧的帧缓冲区屏幕截图
- 典型渲染 --原生RTL/CJK支持,精确布局,亚秒级渲染
- OKLCH颜色空间 排他性——感知一致,无十六进制/RGB
- 39个ASO地区 带有后备链
- 颗粒再生 --修复一个屏幕截图而不重新渲染全部780
- 关键字感知字幕 --AI将ASO关键字整合到每个地区的字幕中
- 并行渲染 具有可配置的并发性(默认为4并发)
- 自动字体发现 从
appshots/fonts/目录 - 编译超时 (30s)防止无限循环模板
- 原子文件写入 带咨询锁定
- 路径遏制 防止符号链接逃逸攻击
快速开始
安装
自制(macOS/Linux):
brew install Murzav/tap/appshots-mcp货物:
cargo install appshots-mcp货仓(预构建二进制):
cargo binstall appshots-mcp配置
克劳德代码:
claude mcp add appshots-mcp -- appshots-mcp --project-dir /path/to/your/app通用MCP客户端(stdio):
{
"mcpServers": {
"appshots-mcp": {
"command": "appshots-mcp",
"args": ["--project-dir", "/path/to/your/app"]
}
}
}CLI选项
| 标志 | 默认值 | 描述 |
|---|---|---|
--project-dir | . | 应用程序项目根目录的路径 |
--glossary-path | glossary.json | 共享术语表文件的路径 |
--config-path | appshots.json | 截图配置路径 |
用法
典型工作流程
- 准备你的应用程序 --使用
prepare-app提示创建ScreenshotModeSwift中的枚举 - 设计模板 --使用
design-template提示创建Typst模板preview_design - 生成所有屏幕截图 --使用
generate-screenshots完整管道提示:
scan_project → analyze_keywords → plan_screens → save_captions (en-US)
→ translate captions (38 locales) → validate_layout
→ warm_simulator → seed_defaults → capture_screenshots
→ compose_screenshots → run_deliver工具
捕获和设置
| 工具 | 说明 |
|---|---|
list_simulators | 列出可用的iOS模拟器(UDID、运行时、状态) |
warm_simulator | 预引导模拟器,授予权限,设置Apple规范状态栏(9:41) |
seed_defaults | 通过plist导入种子用户默认值(安装后运行,启动前运行) |
interact_simulator | 通过CGEvent鼠标拖动模拟在iOS模拟器中滚动或点击 |
capture_screenshots | 从模拟器帧缓冲区捕获干净的屏幕截图(无设备边框) |
发现与分析
| 工具 | 说明 |
|---|---|
scan_project | 解析 fastlane/metadata/ 在所有39个地区 |
analyze_keywords | 查找某个地区的关键字覆盖率差距 |
get_project_status | 检查配置、模板、标题、捕获准备情况 |
策略
| 工具 | 说明 |
|---|---|
plan_screens | 保存模式->关键字->消息映射 |
get_plans | 检索当前屏幕平面图 |
save_captions | 保存区域设置的字幕(按模式追加播放) |
get_captions | 使用区域设置/模式过滤器获取字幕 |
get_locale_keywords | 阅读区域设置的keywords.txt |
get_caption_coverage | 覆盖矩阵:区域设置x模式 |
review_captions | 按标题进行关键字覆盖率分析 |
设计与渲染
| 工具 | 说明 |
|---|---|
save_template | 保存Typst模板源 |
get_template | 使用解析链读取模板 |
preview_design | 渲染单个设计预览 |
validate_layout | 检查所有模板是否有错误/警告 |
suggest_font | 为区域设置脚本建议系统字体 |
compose_screenshots | 通过Typst渲染最终PNG |
管道和术语表
| 工具 | 说明 |
|---|---|
run_deliver | 快跑 fastlane deliver 上传截图 |
get_glossary | 获取术语表条目(与xcstrings mcp共享) |
update_glossary | 更新术语表条目 |
提示
| 提示 | 描述 |
|---|---|
prepare-app | 指南:在Swift中创建ScreenshotMode枚举+ScreenshotDataProvider;文件 defaults import 用于播种模拟数据 |
design-template | 指南:设计具有OKLCH颜色、自动缩放文本、RTL支持的Typst模板;包括设备帧合成方法 |
generate-screenshots | 指南:从扫描到交付的完整10步流程;涵盖了预热/播种/交互准备步骤和内部构造 |
颗粒再生
所有渲染工具都接受可选 modes 和 locales 过滤器。省略=全部处理。
"Fix screenshot 3" → compose_screenshots(modes: [3])
"Fix German text on #5" → compose_screenshots(modes: [5], locales: ["de-DE"])
"Re-capture stats screen" → capture_screenshots(modes: [4])关键规则
- 仅限OKLCH:所有颜色使用
oklch(L%, C, Hdeg)。没有十六进制、RGB或HSL。 - 模板分辨率:
templates/template-{mode}.typ->templates/template.typ->template.typ - 区域设置回退:es MX->es es,fr CA->fr fr,en AU/CA/GB->en US,pt pt->pt BR,zh-Hant->zh-Hans
- 所需尺寸: iPhone 6.9" (1320x2868), iPad 13" (2064x2752).最多10个地方。
屏幕截图模式如何工作
每个应用程序屏幕都分配了一个数字 模式 (1-10).应用程序的 ScreenshotMode Swift枚举将模式映射到特定的UI状态:
- 该应用程序通过以下方式启动
xcrun simctl launch --screenshot-N其中N是模式号 ScreenshotDataProvider在应用程序中检查ProcessInfo.processInfo.arguments为了--screenshot-N并相应地配置模拟数据- 对于复杂状态(例如,连胜计数、职业状态),请使用
seed_defaults写入UserDefaults 之前 启动应用程序 capture_screenshots每种模式都能捕获干净的帧缓冲区图像——没有设备边框compose_screenshots通过Typst渲染最终的PNG,叠加字幕,并可选择添加设备帧
项目目录结构
project-root/
├── fastlane/
│ ├── metadata/{locale}/ ← keywords.txt, name.txt, subtitle.txt
│ └── screenshots/{locale}/ ← final output
├── appshots.json ← project config (plan, captions, template)
├── appshots/
│ ├── template.typ ← single template
│ ├── templates/ ← per-screen templates
│ ├── fonts/ ← custom fonts (.ttf, .otf, .woff2)
│ ├── captures/ ← simulator captures (clean framebuffer)
│ ├── previews/ ← design iteration previews
│ └── .seed-defaults.plist ← temporary plist for defaults import
├── examples/ ← reference Typst templates
└── glossary.json ← shared with xcstrings-mcp设备帧合成
capture_screenshots 生成没有设备边框的干净帧缓冲区图像。在以下过程中添加设备帧 compose_screenshots 通过Typst模板。三种方法:
- 原始屏幕截图 --没有边框,只有带有字幕叠加的截图
- 圆形卡片 --类型
rect(radius: ...)和clip: true模拟设备角 - Png覆盖层 --在屏幕截图顶部放置一个透明的设备框架PNG(像素完美的苹果边框)
看 examples/template-with-frame.typ 参考模板,演示具有RTL支持、自动缩放文本和OKLCH颜色的方法#2。
建筑
main.rs → CLI (clap), tokio current_thread, stdio transport
server.rs → #[tool_router] (24 tools) + #[prompt_router] (3 prompts)
tools/ → capture, scan, analyze, plan, captions, design, render,
deliver, validate, glossary — all I/O via FileStore trait
service/ → metadata_parser, locale, keyword_matcher, font_resolver,
template_resolver, typst_renderer, typst_world, validator,
config_parser — pure functions, NO I/O
model/ → ProjectConfig, Caption, OklchColor, AsoLocale, Device,
TemplateConfig — data types with serde + JsonSchema
io/ → FileStore trait + FsFileStore (atomic writes, flock)
error.rs → AppShotsError enum (thiserror)
prompts.rs → prompt content generators图层规则: server -> tools -> service -> model。服务没有I/O。
演出
| 操作 | 目标 |
|---|---|
scan_project (39个地区) | \<50ms |
compose_screenshots (1) | \<100ms |
compose_screenshots (全部,平行) | \<20s |
capture_screenshots (1x1) | ~3s |
相关
- MCP协议 --模型上下文协议规范
- xcstrings mcp --.xcstring本地化的姊妹项目
- 类型 --用于渲染的排版系统
- 快车道 --应用商店自动化
许可证
根据以下任一方式获得许可:
- Apache许可证,版本2.0(特许通行证)
- MIT许可证(许可证-麻省理工学院)
由您选择。
贡献
欢迎投稿!请打开问题或提交PR。
