Skip to main content
Glama

License

Phonebook превращает скриншоты, которые уже есть у вашей команды, в галерею компонентов в стиле Storybook. Не нужно писать новый тестовый код или вручную поддерживать дизайн-токены — Phonebook рендерит в статический сайт то, что уже находится в вашей кодовой базе, и дизайнеры могут открыть его без установки чего-либо. Каждый репозиторий запускает Phonebook независимо; v1 поддерживает одну платформу, поэтому один Android-репозиторий (или один iOS-репозиторий) создаёт один бандл и один сайт.

Возможности

  • Ноль нового тестового кода — переиспользует уже написанные вами @Preview / #Preview

  • Без аккаунта SaaS — разворачивается у вас, полностью работает в вашем CI или локально

  • MCP в приоритете — агент разработки может проверить настройку, проанализировать покрытие, добавить недостающие превью и собрать галерею за вас

  • Умная группировка компонентов — карточки component / state выводятся из имён превью, аннотации не обязательны

  • Кроссплатформенность — Android (Roborazzi + ComposablePreviewScanner, работает на JVM без эмулятора) и iOS (SnapshotPreviews, работает на симуляторе)

  • Настройка с учётом версий — init/doctor подбирают версии библиотек под версию Kotlin в вашем проекте и ловят несоответствия метаданных Kotlin/Roborazzi до того, как они приведут к неочевидным сбоям компилятора

Related MCP server: DesignPort

Демо

Смотрите промо-ролик Phonebook

Скриншот галереи Phonebook

Галерея, сгенерированная из samples/ios, — карточки component / state, сгруппированные на основе собственных #Previews приложения, без дополнительной аннотации.

Посмотреть живую галерею →

Как это работает

  1. phonebook generate запускает механизм рендеринга превью вашей платформы и собирает результат в бандл (manifest.json + images/).

    • Android: Roborazzi + ComposablePreviewScanner, запуск на JVM через Robolectric. Без эмулятора, работает на Linux CI.

    • iOS: SnapshotPreviews, запуск через xcodebuild test на симуляторе. Требуется macOS.

  2. phonebook build превращает этот бандл в статический сайт. По умолчанию он записывает index.html прямо в директорию бандла (переиспользуя уже находящиеся там изображения без копирования), так что сайт оказывается по пути <bundle>/index.html. Передайте -o <dir>, чтобы вместо этого скопировать всё в отдельную автономную директорию сайта (для публикации в другом месте или последующего объединения нескольких бандлов). Обычные HTML/CSS/JS, работает из file:// или на любом статическом хостинге.

Установка

npm install -g @stag-build/phonebook
brew install stag-build/phonebook/phonebook

Или сделайте tap репозитория и затем установите:

brew tap stag-build/phonebook
brew install phonebook

Исходный код формулы: stag-build/homebrew-phonebook.

npx @stag-build/phonebook <cmd>

Использование с агентом разработки (рекомендуется)

Большинство людей не будут запускать CLI напрямую — Phonebook создан для управления агентом разработки (Claude Code, Codex и т. д.) через MCP-сервер. Агент добавляет превью, выполняет проверки настройки и собирает галерею за вас; CLI под капотом — это движок, который он вызывает.

Сервер запускается via npx @stag-build/phonebook mcp — устанавливать ничего не нужно. Выберите своего клиента ниже.

claude mcp add phonebook -- npx -y @stag-build/phonebook mcp

Добавьте в ~/.codex/config.toml:

[mcp_servers.phonebook]
command = "npx"
args = ["-y", "@stag-build/phonebook", "mcp"]

Добавьте в конфигурацию Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json на macOS):

{
  "mcpServers": {
    "phonebook": {
      "command": "npx",
      "args": ["-y", "@stag-build/phonebook", "mcp"]
    }
  }
}

Добавьте в .cursor/mcp.json (для проекта) или в ~/.cursor/mcp.json (глобально):

{
  "mcpServers": {
    "phonebook": {
      "command": "npx",
      "args": ["-y", "@stag-build/phonebook", "mcp"]
    }
  }
}

Добавьте в .codex/config.toml в корне рабочей области проекта. Агент Xcode работает с минимально усечённым PATH, поэтому команда оборачивает npx в оболочку, которая сначала добавляет стандартные местоположения Homebrew/nvm:

[mcp_servers.phonebook]
command = "/bin/zsh"
args = [
  "-lc",
  "PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin; npx -y @stag-build/phonebook mcp"
]
enabled = true

Добавьте блок mcpServers в ~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/.claude.json:

{
  "mcpServers": {
    "phonebook": {
      "command": "/bin/zsh",
      "args": [
        "-lc",
        "PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin; npx -y @stag-build/phonebook mcp"
      ]
    }
  }
}

Android Studio (Gemini Agent Mode): пока не поддреживается — его MCP-интеграция подключается только к удалённым httpUrl-серверам, а не к локальным stdio-процессам, как Phonebook. Используйте одного из терминальных клиентов выше (Claude Code, Codex CLI) из Android-репозитория.

Затем в чате в вашем Android- или iOS-репозитории просто попросите:

«Воспользуйся MCP от phonebook и создай каталог для моего дизайнера.»

Агент разберётся с остальным — проверит настройку, добавит недостающие превью, сгенерит и соберёт сайт. Для более строгих задач доступны: check_setup (диагностика настройки, то же, что и phonebook doctor), analyze_coverage (компоненты без превью или тёмных вариантов), get_preview_guidance, run_generate и run_build.

Быстрый старт: Android

Сначала запустите phonebook init — он определит версию Kotlin в проекте и выведет эту инструкцию с версиями библиотек, разрешёнными под совместимость с ней (например, проекты с Kotlin 2.0 получают Roborazzi 1.60.0; Kotlin 2.2+ — последнюю). Версии ниже соответствуют проекту с актуальной версией Kotlin (полный рабочий пример см. в samples/android/app/build.gradle.kts):

// app/build.gradle.kts
plugins {
    id("io.github.takahirom.roborazzi") // root build.gradle.kts: version "1.72.0" apply false
}

roborazzi {
    generateComposePreviewRobolectricTests {
        enable = true
        packages = listOf("dev.stag.phonebook.sample") // your app's package
    }
}

dependencies {
    testImplementation("org.robolectric:robolectric:4.14.1")
    testImplementation("io.github.takahirom.roborazzi:roborazzi:1.72.0")
    testImplementation("io.github.takahirom.roborazzi:roborazzi-compose:1.72.0")
    testImplementation("io.github.sergio-sastre.ComposablePreviewScanner:android:0.9.3")
    testImplementation("io.github.takahirom.roborazzi:roborazzi-compose-preview-scanner-support:1.72.0")
    testImplementation("androidx.compose.ui:ui-test-junit4") // version from your Compose BOM, or pin one
}

Добавьте phonebook.config.json рядом с settings.gradle.kts:

{
  "appName": "My Android App",
  "platform": "android",
  "android": { "modules": [":app"], "variant": "debug" }
}

Затем из корня вашего проекта:

npx @stag-build/phonebook generate -C /path/to/your/android/repo
npx @stag-build/phonebook build -C /path/to/your/android/repo

Откройте phonebook-out/index.html.

Быстрый старт: iOS

Добавьте в проект SPM-пакет SnapshotPreviews и небольшой XCTest-таргет, наследующийся от SnapshotTest (полный рабочий пример — в samples/ios):

// PhonebookSnapshotTests.swift
import SnapshottingTests

final class PhonebookSnapshotTests: SnapshotTest {
    override class func snapshotPreviews() -> [String]? {
        return nil // record every #Preview
    }
}

Добавьте phonebook.config.json рядом с вашим .xcodeproj:

{
  "appName": "My iOS App",
  "platform": "ios",
  "ios": {
    "project": "MyApp.xcodeproj",
    "scheme": "MyApp",
    "simulator": "iPhone 17 Pro"
  }
}

Ваша схема должна собирать и тестировать тест снитка — см. PhonebookSample.xcscheme в примере. Затем:

npx @stag-build/phonebook generate -C /path/to/your/ios/repo
npx @stag-build/phonebook build -C /path/to/your/ios/repo

Откройте phonebook-out/index.html.

Соглашение об именовании

Phonebook группирует скриншоты в карточки component / state, используя уже существующие имена превью, — аннотации не требуются. Полные правила и примеры см. в docs/naming-convention.md.

Настройка

phonebook.config.json:

Ключ

Тип

По умолчанию

Примечания

appName

string

—

Обязательно. Показывается в шапке галереи.

platform

"android"|"ios"

—

Обязательно.

output

string

"phonebook-out"

Директория вывода бандла, относитен файла конфигурации.

android.modules

string[]

[":app"]

Gradle-модули для записи.

android.variant

string

"debug"

Вариант сборки; Phonebook вызывает <module>:recordRoborazzi<Variant>.

ios.project

string

—

Путь к .xcodeproj относительно файла конфига. Требуется указать один из project/workspace.

ios.workspace

string

—

Путь к .xcworkspace относительно файла конфига.

ios.scheme

string

—

При наличии. Схема, включающая тестовый таргет SnapshotPreviews.

ios.simulator

string

"iPhone 17 Pro"

Имя устройства симулятора для параметра -destination.

ios.onlyTesting

string

автоопределяется

Фильтр -only-testing:, чтобы generate запускал только класс снепшотов, а не весь тестовый набор приложения. Автоматически определяется из подкласса SnapshotTest; укажите "", чтобы выполнить весь.

И generate, и build принимают -C <dir> (каталог проекта с phonebook.config.json). generate принимает -o <dir> для переопределения вывода бандла и --allow-empty, чтобы разрешать запуск без сохранённых превью. build принимает опциональный путь к бандлу — без него он берёт каталог бандла проекта — и -o <dir> для директории сайта; без -o build пишет index.html прямо в каталог бандла и переиспользует его images/ на месте (без копирования), а это именно то, что делают быстрые старты выше. Передав -o <dir>, вы получите копирование изображений бандла в отдельную автономную директорию сайта.

phonebook init и phonebook doctor

phonebook init определяет платформу и выводит phonebook.config.json и необходимые фрагменты зависимостей и настроек. Версии библиотек при этом разрешаются на основе версии Kotlin в вашем проекте, а имя вашего приложения подставляется автоматически. При этом init никогда не редактирует ваши сборочные файлы за вас.

phonebook doctor проверяет, что всё, что нужно generate, уже настроено: плагин и тестовые зависимости (резолятся через каталоги версий Gradle, если вы их используете), значение packages в сканере, совместимость Kotlin/Roborazzi и тулчейн (JDK/Xcode/симулятор). Добавьте --deep, чтобы также скомпилировать тестовые исходники — это медленнее, но даёт точный результат, если статическая проверка и реальность расходятся. На iOS, если SnapshotPreviews подключён, но подкласса SnapshotTest ещё нет, doctor называет точный таргет и папку, куда его стоит положить (извлекается из .pbxproj), поэтому вам не просто говорят «добавьте класс» без указанного места.

phonebook init --write-snapshot-class — это единственное исключение из принципа невмешательства init: если iOS-проверка доктора определяет связанный таргет и его папка с исходниками является filesystem-synchronized группой Xcode, init напрямую пишет файл <folder>/PhonebookSnapshots.swift — это безопасно, потому что Xcode сам найдёт такую синхронизированную папку и не потребуется редактировать project.pbxproj. Во всех остальных случаях он отказывается (и сообщает причину): нет подлюченного SnapshotPreviews, не синхронизированная группа проекта или уже существующий подкласс.

phonebook mcp запускает MCP-сервер — настройку и примеры запросов см. в разделе «Использование с агентом разработки» выше.

Требования

Android: JDK 17+. Эмулятор не нужен — Roborazzi рендерит на JVM через Robolectric, поэтому generate запускается в Linux CI.

iOS: macOS с установленным Xcode, а также запущенный или готовый к запуску симулятор (generate запускает xcodebuild test для указанного симулятора). Требуется runner на macOS в CI.

См. рецепты CI в docs/ci.md и правила именования в docs/naming-convention.md.

Дорожная карта

После v1 (M5), ещё не реализовано:

  • Поиск и фильтры в сгенерированной галерее

  • Объединение нескольких бандлов с просмотром бок о бок (кросс-платформенные сайты)

  • Сравнение версий между двумя запусками (манифест уже содержит хэши коммитов и изображений, чтобы это обеспечить)

  • Дополнительная документация с рецептами CI

Лицензия

MIT — см. LICENSE.

Available Tools

5 tools
analyze_coverageA

Scan the codebase for UI components and the previews that cover them, and report what each component is missing: states implied by its parameters, environment objects no preview supplies, dark theme, large text, and localization when the project ships one. Read-only — it reports the gaps, it does not write previews. After editing, pass changed: true (or paths) to hear only about what you touched; the whole project is always scanned either way, so the answers stay correct.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirNoProject directory containing phonebook.config.json.
pathsNoReport only components declared in these files or directories, relative to the project directory. The whole project is still scanned.
changedNoReport only components in files with uncommitted git changes — what you just edited. Ignored outside a git repository. Combined with paths when both are given.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states 'Read-only — it reports the gaps, it does not write previews,' and clarifies that the entire project is scanned even when filters are applied, ensuring the answers stay correct. This is honest and thorough for a read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense paragraph but each sentence serves a purpose: purpose, behavioral safety, and usage guidance. It is front-loaded with the main objective, and the filtering instructions are kept concise. Slightly long but no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with 3 optional parameters and no output schema, the description adequately explains what is analyzed, what is reported, and how filters behave. It does not specify the exact return format, but that is a minor gap given the clarity of the rest. The tool is fully callable correctly from the description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds valuable context beyond the schema: it explains that paths restrict reporting but not scanning, that changed is ignored outside a git repo, and that both combine when given together. This clarifies edge cases and adds meaning to each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Scan'), resource ('codebase'), and a precise objective: report what each UI component is missing in preview coverage (states, environment objects, dark theme, large text, localization). It clearly distinguishes itself from sibling tools like get_preview_guidance (which presumably offers guidance) and run_build/run_generate/check_setup (which are operational, not analytical).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the changed and paths parameters ('After editing, pass changed: true (or paths) to hear only about what you touched'), and notes that the whole project is always scanned regardless. It doesn't explicitly contrast with get_preview_guidance, but the analytical vs. guidance nature is implied, and the filtering usage is well covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_setupA

Check that the project is correctly set up for phonebook generate (same checks as phonebook doctor): libraries wired, test target present, JDK/Xcode/simulator available.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirNoProject directory containing phonebook.config.json.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does communicate that the tool performs checks, names the checks (libraries, test target, JDK/Xcode/simulator), and implies a read-only nature. However, it does not describe failure behavior, exit codes, output format, or whether the tool attempts any fixes, leaving some behavioral ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one tight, well-structured sentence. It front-loads the purpose, gives the equivalence to `phonebook doctor`, and lists the main checks without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter check tool with no output schema and no annotations, the description covers the essential context: what is checked and why. It could be slightly more complete by stating what a successful or failed check returns, but the current level is adequate for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter `dir` is fully documented in the schema with a clear description and default value, so schema coverage is 100%. The tool description adds no additional parameter semantics, which is acceptable given the schema already handles it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Check') and resource ('project setup'), names the exact command it supports (`phonebook generate`), and enumerates the concrete checks performed. It clearly distinguishes itself from generation/build tools like `run_generate` and `run_build`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this is a precondition check for `phonebook generate`, and the reference to `phonebook doctor` provides an equivalence that helps the agent understand behavior. It does not explicitly state 'use before run_generate' or list when not to use it, so it falls just short of full explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_preview_guidanceA

Return the preview naming convention plus a ready-to-paste preview code template for a component, so any agent writes consistent previews.

ParametersJSON Schema
NameRequiredDescriptionDefault
statesNoState names, e.g. ["Enabled", "Disabled"]
platformYesTarget platform
componentNoComponent name, e.g. "Button"

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the behavioral disclosure burden. It clearly discloses a non-mutating return ('Return') and the output type (naming convention + template), but it does not describe output format, failure behavior, or prerequisites. For a simple getter this is adequate but incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with no filler, and the key deliverable is front-loaded before the outcome clause. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Only three parameters with 100% schema coverage reduce the burden on the description. However, with no annotations and no output schema, the description could usefully state how platform, states, and component are handled, or when this guidance should be fetched relative to run_generate and run_build. These are gaps but not fatal ones.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline for this dimension is 3. The description's 'for a component' aligns with the 'component' parameter but adds no value beyond the schema's documented parameters; nothing is said about how states or platform affect the returned template.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Return') and identifies a concrete resource ('preview naming convention plus a ready-to-paste preview code template'), with the desired outcome 'so any agent writes consistent previews.' It clearly separates itself from execution-oriented siblings like run_generate and run_build, though it does not explicitly name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'so any agent writes consistent previews' implies this tool should be consulted before writing a preview, but there is no explicit statement of when to use it versus siblings or when not to use it. It lists no alternatives and no exclusion conditions, leaving agents to infer its place in the workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_buildA

Build the static gallery site from a bundle, same as phonebook build <bundle>.

ParametersJSON Schema
NameRequiredDescriptionDefault
bundleYesBundle directory produced by run_generate / `phonebook generate`
outputNoSite output directory (default: the bundle directory itself, reusing its images)

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description only states the core action; it does not disclose side effects such as writing into the bundle directory, overwriting output, or requirements. The output default noted in the schema is useful but outside the description, so the description itself carries too little behavioral burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler, and the CLI-equivalent note is a compact way to anchor expected behavior. It is appropriately sized for a simple build command.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with full schema coverage, the inputs are adequately specified, but the missing usage routing and side-effect disclosure leave the agent to infer workflow and safety. With no annotations or output schema, a bit more context would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both 'bundle' and 'output' documented, so the baseline applies. The description adds no parameter semantics beyond the schema other than echoing 'bundle'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with an explicit verb ('Build') and resource ('static gallery site'), and identifies the input ('from a bundle'), which clearly separates it from the sibling generation/analysis/check tools. The CLI alias reinforces the exact operation without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'from a bundle' wording and the schema's 'produced by run_generate' hint imply a build-after-generate workflow, but the description does not explicitly say when to use this tool versus siblings like run_generate or analyze_coverage. No when-not or alternative conditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_generateA

Run the platform engine to render all previews and produce a bundle (manifest + images), same as phonebook generate. When previews crash, keeps what rendered and says which previews did not, by file and line. Pass changed or files to render only the previews declared in those files, for a faster loop while iterating.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirNoProject directory containing phonebook.config.json.
filesNoRender only previews declared in these files, relative to the project directory.
changedNoRender only previews declared in files with uncommitted git changes. Ignored outside a git repository.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full burden of behavioral disclosure. It does disclose crash handling (keeps what rendered, reports failures by file and line) and the bundle output, which is valuable. However, it omits other behavioral traits like side effects, idempotency, and prerequisites, leaving significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. It front-loads the core purpose, then adds crash behavior and usage tips. Every sentence earns its place and the structure is clean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema and no annotations, so the description should clarify return values and side effects. It mentions the bundle output but does not specify what the tool returns to the agent. It also does not state prerequisites like the config file beyond the dir parameter, leaving completeness gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters are fully described in the schema (100% coverage), so the description adds little beyond what is already structured. It mentions passing files or changed but does not elaborate on their semantics beyond the schema's descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs the platform engine to render previews and produce a bundle, referencing 'phonebook generate' for familiarity. It does not explicitly distinguish from sibling tools like run_build, but the core action is unambiguous and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear guidance on using the files and changed parameters to limit rendering to specific files for a faster iteration loop. However, it does not mention when to use this tool over siblings or any exclusions, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.1.7
    • Changedanalyze_coverage2 fields changed
      • addedInput schema / properties / changed
        Added value: +{
        +  "description": "Report only components in files with uncommitted git changes — what you just edited. Ignored outside a git repository. Combined with paths when both are given.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / paths
        Added value: +{
        +  "description": "Report only components declared in these files or directories, relative to the project directory. The whole project is still scanned.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedrun_generate2 fields changed
      • addedInput schema / properties / changed
        Added value: +{
        +  "description": "Render only previews declared in files with uncommitted git changes. Ignored outside a git repository.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / files
        Added value: +{
        +  "description": "Render only previews declared in these files, relative to the project directory.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  2. 5 tool updatesv0.1.2
    • First observedanalyze_coverage
    • First observedcheck_setup
    • First observedget_preview_guidance
    • First observedrun_build
    • First observedrun_generate

TDQS

A4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool addresses a distinct step in the preview workflow: guidance, setup, coverage analysis, generation, and building. The only adjacent pair (run_generate and run_build) is clearly separated by bundle output versus static-site output.

Naming Consistency4/5

Most names are imperative snake_case with a clear object (get_preview_guidance, analyze_coverage, check_setup). run_build and run_generate are a minor deviation because they use a run_ prefix around CLI command names rather than a pure verb_noun structure.

Tool Count5/5

Five tools is well-scoped for a focused preview-generation workflow. Each tool earns its place by covering a separate phase from setup to final build, with no redundant or padding tools.

Completeness5/5

The tool set covers the full core loop: check setup, get authoring guidance, analyze coverage gaps, generate previews, and build the gallery site. The absence of a write-preview tool is fine because editing code happens outside the server, and the guidance plus coverage tools support that workflow.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to render and screenshot isolated UI components instantly across multiple browsers without a dev server or Storybook.
    22
    660 npm
    1
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    Enables coding agents to read, render, and normalize design documents from Figma and Adobe XD, providing visual context plus structured design data and generating starter code for web, React, Vue, Flutter, SwiftUI, and Jetpack Compose.
    13
    1
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI coding assistants to inspect frontend projects, search a curated design and motion recipe catalog, prepare and preview structured design plans, apply changes with backups and rollback, capture previews, audit UI accessibility and performance, and monitor activity via a web dashboard.
    16 npm
    MIT