ASO优化应用截图生成工具

基于MCP协议的服务,通过AI生成应用商店优化(ASO)的应用截图,支持多语言和多设备,提高关键词覆盖率。

  • by Murzav
  • Rust
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 Murzav/appshots-mcp

使用说明

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 截图配置路径

用法

典型工作流程

  1. 准备你的应用程序 --使用 prepare-app 提示创建 ScreenshotMode Swift中的枚举
  2. 设计模板 --使用 design-template 提示创建Typst模板 preview_design
  3. 生成所有屏幕截图 --使用 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状态:

  1. 该应用程序通过以下方式启动 xcrun simctl launch --screenshot-N <udid> <bundle_id> 其中N是模式号
  2. ScreenshotDataProvider 在应用程序中检查 ProcessInfo.processInfo.arguments 为了 --screenshot-N 并相应地配置模拟数据
  3. 对于复杂状态(例如,连胜计数、职业状态),请使用 seed_defaults 写入UserDefaults 之前 启动应用程序
  4. capture_screenshots 每种模式都能捕获干净的帧缓冲区图像——没有设备边框
  5. 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模板。三种方法:

  1. 原始屏幕截图 --没有边框,只有带有字幕叠加的截图
  2. 圆形卡片 --类型 rect(radius: ...) 和 clip: true 模拟设备角
  3. 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

相关

许可证

根据以下任一方式获得许可:

由您选择。

贡献

欢迎投稿!请打开问题或提交PR。