原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

Phonebook

作者:stag-build版本 0.1.13i★ –i在你的电脑上运行
注册名称io.github.stag-build/phonebook

安装

概览

作者提供的说明(英文原文)

Self-hosted gallery of your SwiftUI #Preview and Jetpack Compose @Preview screens.

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 其他

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 注册中心没有列出需要填写的密钥。

你需要

  • npm已安装 Node.js(用于 npx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

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

在终端中运行这条命令

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

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

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

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

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

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月9日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 stag-build 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“其他”中的其他服务器比较i

  • 星标数多于此分类中其他 18697 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 18697 个服务器的 69% 更新
  • 基础检查结果等于或优于此分类中其他 18697 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

Phonebook 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.1.13)于19天前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。

有什么可以替代它?

同一分类中有:Spec Driven Development, Remote Desktop Commander, phylokit-mcp

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Spec Driven Development

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

作者:formulahendry起步阶段↓ 66/周★ 44014个月前更新

在你的电脑上运行

Remote Desktop Commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

作者:desktop-commander正在增长★ 2114天前更新

在云端运行✓ desktopcommander.app

phylokit-mcp

Phylogenetic inference via IQ-TREE 3 — never returns a topology without its support

作者:musharna非常新↓ 150/周今天更新

在你的电脑上运行

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

A self-hosted, open-source alternative to Emerge Tools Snapshots: harvest your existing Compose @Preview s and SwiftUI #Preview s into a browsable, static HTML gallery — no SaaS account required.

Phonebook turns screenshots your team already has into a Storybook-style component gallery. No new test code, no design tokens to maintain by hand — it renders what's already in your codebase into a static site designers can open without installing anything. Each repo runs Phonebook independently; v1 is single-platform, so one Android repo (or one iOS repo) produces one bundle and one site.

Features

  • Zero new test code — reuses @Preview / #Preview you've already written
  • No SaaS account — self-hosted, runs entirely in your CI or locally
  • MCP-first — a coding agent can check setup, analyze coverage, add missing previews, and build the gallery for you
  • Smart component grouping — component / state cards inferred from preview names, no required annotation
  • Cross-platform — Android (Roborazzi + ComposablePreviewScanner, runs on the JVM, no emulator) and iOS (SnapshotPreviews, runs on a simulator)
  • Version-aware setup — init/doctor resolve library versions against your project's Kotlin version and catch Kotlin/Roborazzi metadata mismatches before they cause opaque compiler crashes

Demo

A gallery generated from samples/ios — component / state cards grouped from the app's own #Previews, no extra annotation.

[Browse the live gallery →](https://stag-build.github.io/phonebook/)

How it works

  1. phonebook generate runs your platform's preview-rendering engine and harvests the output into a bundle (manifest.json + images/).
  1. phonebook build turns that bundle into a static site — by default it writes index.html directly into the bundle directory (reusing the images already there, no copying), so the site lands at /index.html. Pass -o to instead copy everything into a standalone site directory (for publishing elsewhere, or later merging multiple bundles). Plain HTML/CSS/JS, works from file:// or any static host.

Installation

npm

npm install -g @stag-build/phonebook

Homebrew

brew install stag-build/phonebook/phonebook

Or tap first, then install:

brew tap stag-build/phonebook

brew install phonebook

Formula source: stag-build/homebrew-phonebook.

No install (npx)

npx @stag-build/phonebook <cmd>

Using it with a coding agent (recommended)

Most people won't run the CLI directly — Phonebook is built to be driven by a coding agent (Claude Code, Codex, etc.) through its MCP server. The agent adds previews, runs setup checks, and generates the gallery for you; the CLI underneath is the engine it calls.

The server runs via npx @stag-build/phonebook mcp — no install step needed. Pick your client below.

Claude Code

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

Codex CLI

Add to ~/.codex/config.toml:

[mcp_servers.phonebook]

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

Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{

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

Cursor

Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

{

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

Xcode (Codex Agent) — Xcode 26.3+

Add to .codex/config.toml at your project's workspace root. Xcode's agent runs with a minimal PATH, so the command wraps npx in a shell that adds the usual Homebrew/nvm locations first:

[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

Xcode (Claude Code Agent) — Xcode 26.3+

Add the mcpServers block to ~/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): not supported yet — its MCP integration only connects to remote httpUrl servers, not local stdio processes like Phonebook's. Use one of the terminal-based clients above (Claude Code, Codex CLI) from the Android repo instead.

Then, from a chat in your Android or iOS repo, just ask:

"Use the phonebook MCP and create a catalog for my designer."

The agent figures out the rest — checking setup, filling in missing previews, generating, and building the site. For more targeted asks, it also exposes: check_setup (setup diagnosis, same as phonebook doctor), analyze_coverage (components missing previews or dark variants), get_preview_guidance, run_generate, and run_build.

Quickstart: Android

Run phonebook init first — it detects your project's Kotlin version and prints these instructions with library versions resolved to be compatible with it (e.g. Kotlin 2.0 projects get Roborazzi 1.60.0; Kotlin 2.2+ gets the latest). The versions below are what a current-Kotlin project gets (see samples/android/app/build.gradle.kts for a full working example):

// 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 }

Add a phonebook.config.json next to settings.gradle.kts:

{

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

Then, from the repo containing Phonebook:

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

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

Open phonebook-out/index.html.

generate --changed (or --files A.kt,B.kt) renders only the previews declared in those files, with no extra setup. For that run only, Phonebook passes Gradle an init script that swaps in a preview tester which keeps the requested previews and scans only their packages. Both files are written under build/phonebook/, never into your sources. If your project configures its own testerQualifiedClassName, yours wins and the run renders every preview in the module.

Quickstart: iOS

Add the SnapshotPreviews SPM package to your project and a small XCTest target that subclasses SnapshotTest (see samples/ios for a full working example):

// PhonebookSnapshotTests.swift

import Foundation import SnapshottingTests

final class PhonebookSnapshotTests: SnapshotTest { override class func snapshotPreviews() -> [String]? { guard let raw = ProcessInfo.processInfo.environment["SNAPSHOTS_ONLY_FILTER"], !raw.isEmpty else { return nil // record every #Preview } return raw.components(separatedBy: "\n") } }

Reading SNAPSHOTS_ONLY_FILTER is what lets phonebook generate --changed (or --files A.swift,B.swift) render only the previews in the files you just edited; with the variable unset, every #Preview is recorded as before.

Add phonebook.config.json next to your .xcodeproj:

{

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

Your scheme must build and test the snapshot test target (see PhonebookSample.xcscheme in the sample). Then:

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

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

Open phonebook-out/index.html.

Naming convention

Phonebook groups screenshots into component / state cards from your existing preview names — no required annotation. See docs/naming-convention.md for the full rules and examples.

Configuration

phonebook.config.json:

KeyTypeDefaultNotes
appNamestring—Required. Shown in the gallery header.
platform"android" \"ios"—Required.
outputstring"phonebook-out"Bundle output directory, relative to the config file.
android.modulesstring[][":app"]Gradle modules to record.
android.variantstring"debug"Build variant; Phonebook runs :recordRoborazzi .
ios.projectstring—Path to .xcodeproj, relative to the config file. One of project/workspace required.
ios.workspacestring—Path to .xcworkspace, relative to the config file.
ios.schemestring—Required. Scheme that includes the SnapshotPreviews test target.
ios.simulatorstring"iPhone 17 Pro"Simulator device name used for -destination.
ios.onlyTestingstringauto-detected-only-testing: filter so generate runs just the snapshot class, not the app's whole test suite. Auto-derived from the SnapshotTest subclass; set "" to run everything.

Android previews render like Android Studio: a @Preview without its own size wraps its content, and full-screen (fillMaxSize) content fills the Robolectric screen, which Roborazzi defaults to a Pixel 4a. Setting robolectricConfig in the generateComposePreviewRobolectricTests block replaces that default, so include "qualifiers" to "RobolectricDeviceQualifiers.Pixel4a" (or `"\"w411dp-h891d

只显示了开头部分;其余内容请在仓库中阅读

问 PopNx