
PassNinja
io.github.flomio由 GitHub 账号 flomio 发布v0.4.0更新于 Oct 24, 2026
Issue and manage Apple Wallet & Google Wallet passes from any MCP-aware AI client.
概览
PassNinja 让助手通过 PassNinja API 签发和管理 Apple Wallet 与 Google Wallet 卡券,以及卡券模板、Webhook 和扫码事件读取器。
- 可以做什么
- 列出、查看、创建、更新和删除卡券模板,包括必填字段与读取器配置(模板创建和删除仅限企业版)。签发、列出、读取、更新、删除和解密单张卡券,并获取卡券原始数据。管理 Webhook:创建、列出、查看、删除并读取投递结果。管理扫码事件应用与读取器,包括读取器令牌和合并后的读取器配置。通过 whoami 工具查看当前凭证和账户。
- 适用场景
- 适合在聊天客户端中直接操作 PassNinja 钱包卡券流程,例如列出模板、统计每张模板已安装的卡券数量,或为指定邮箱签发一张卡券,无需切换到命令行或控制台。
- 运行要求
- 以 stdio 本地进程运行,可作为桌面 .mcpb 安装包安装(macOS、Linux amd64、Windows amd64),也可由任意 MCP 客户端启动 passninja mcp 命令。需要 PassNinja API key 和 account ID,可通过安装对话框、PASSNINJA_API_KEY 与 PASSNINJA_ACCOUNT_ID 环境变量、命令行参数或已保存的认证文件提供。需要访问 PassNinja API 的网络连接。
安装
在 SourceWeft 中
- 打开 控制台中的 PassNinja,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
passninja
Command-line interface for the PassNinja REST API.
Wraps /v1/pass_templates, /v1/passes, and /v1/webhooks so you can
manage Apple Wallet and Google Wallet passes from the shell.
Install
macOS / Linux (Homebrew)
Windows (PowerShell)
From cmd.exe:
The script detects your CPU (amd64, arm64, or 386), downloads the matching
binary from the latest GitHub release, verifies its SHA256, drops it in
%LOCALAPPDATA%\Programs\passninja\, and adds that directory to your user
PATH. No admin needed; re-running upgrades in place.
Pin a specific version, or override the install directory:
Windows (Scoop)
If you already use Scoop:
Claude Desktop (one-click .mcpb install)
For chat-driven pass workflows, install the PassNinja MCP server into Claude Desktop:
-
Download
passninja.mcpbfrom the latest release. -
Double-click the file. Claude Desktop opens an install dialog showing the 31 tools the server exposes (pass templates, issued passes, webhooks, scan-event applications and readers).
-
The dialog prompts for your API key and account ID — get them at https://www.passninja.com/settings → API key.
-
Hit Install, restart Claude Desktop, then ask Claude things like:
List my passninja pass templates and tell me how many passes are installed on each.
Issue a new pass on ptk_0x002 for [email protected].
The bundled binary is code-signed with Apple Developer ID and notarized, so
macOS Gatekeeper accepts it without prompts. Same .mcpb works on macOS
(universal), Linux (amd64), and Windows (amd64).
The server is also listed in the official MCP Registry
as io.github.flomio/passninja-cli, so any MCP client that consumes the
registry can discover and install it automatically.
Authenticate
Or pass credentials via env / flags:
Flag > env > ~/.passninja-auth.json > ~/.passninja.yaml > defaults.
The same precedence applies to the MCP server: passninja mcp (started by
Claude Desktop and other MCP clients) reads PASSNINJA_API_KEY /
PASSNINJA_ACCOUNT_ID from its environment, falling back to the auth file.
Stdio MCP server
The CLI also doubles as a Model Context Protocol
server. The .mcpb install above wires this into Claude Desktop, but you can
hook it into any MCP client (Cursor, Cline, Zed, etc.) by configuring the
client to launch:
Tool surface (snake_case names mirror the CLI subcommands):
Each tool's input schema, destructive-hint annotations, and rich descriptions let the LLM self-discover correct usage without external documentation.
Commands
Output formats
Set a session-wide default via ~/.passninja.yaml:
Webhook events
The CloudEvents 1.0 type taxonomy emitted by passninja-site:
Reserved for future use: pn.pass.issued, pn.pass.deleted,
pn.pass_template.created, pn.pass_template.updated,
pn.pass_template.deleted.
Running a reader host
Cloud-connected readers (VTAP Cloud, Famoco Tap&Go) post scans to PassNinja
themselves. A simple reader — Reyax RYRR30D, ACS WalletMate, Elatec TWN4 —
has no cloud connection of its own, so reader serve supplies one: it takes
the values the reader captures, submits them as scan events, and applies the
LED/beep instruction the server returns.
Setup is three steps, and only the last one runs on the reader host:
serve authenticates as that one reader with its bearer token — a reader
host never needs, and should never hold, your account API key.
Tap values arrive from one of three sources:
--pcscdrives an attached PC/SC contactless reader (ACS WalletMate / WalletMate II, incl. the Mini module) directly — no separate daemon. The host runs the wallet flows itself: on an Apple tap it captures the VAS cryptogram; on an Android tap it has the server pre-sign the Smart Tap session mid-tap (the collector key never leaves PassNinja), negotiates the secure channel, and captures the encrypted bundle. Both are submitted for server-side decryption — the host holds no key material. First-generation WalletMates ship with RF polling disabled;serveenables it automatically when the vendor CCID driver is installed. Needs a native (cgo) build on macOS/Linux —go installand Homebrew builds qualify.- stdin (one value per line) — pipe any reader daemon's output in.
--listen 127.0.0.1:8080— a loopback HTTP endpoint a driver POSTs to.
For stdin/HTTP, a value that looks like raw captured APDUs is forwarded for server-side decryption; anything else is treated as an already-decrypted pass serial.
Each result is one JSON object on stdout:
To drive a physical LED, use the outcome hooks — they receive $PN_RESULT,
$PN_LED, $PN_MESSAGE, $PN_PASS, $PN_SCAN_ID, and — when a forward
application answered — $PN_FORWARD_BODY (the endpoint's JSON reply). On a
forward application, $PN_MESSAGE is the endpoint's message verbatim and
the printed scan JSON carries the reply under forwardResponse:
Heartbeats (default every 5m) report liveness plus the hardware identity you
pass with --serial / --manufacturer / --model / --firmware, which is
what fills in the reader's Hardware panel in the dashboard. Readers whose
vendor MDM already tracks them should use --no-heartbeat.
passninja webhook create returns the bearer token once on creation.
Save it — it will not be shown again.
Build from source
Release flow
Tag-driven. Push a vX.Y.Z tag on master; the GitHub Actions workflow at
.github/workflows/release.yml matrix-builds darwin/linux × arm64/amd64,
packages a code-signed + Apple-notarized passninja.mcpb on a macOS runner,
publishes both the binaries and the .mcpb on the GitHub Release, and opens
a PR against flomio/homebrew-passninja bumping the formula url and
sha256.
Apple credentials live in repo secrets (APPLE_TEAM_ID,
APPLE_API_KEY_ID, APPLE_API_ISSUER_ID, APPLE_SIGN_IDENTITY,
APPLE_CERTIFICATE_PASSWORD, plus the base64-encoded APPLE_API_KEY_P8
and APPLE_CERTIFICATE_P12).
After each tagged release, the MCP Registry entry needs a refresh. Bump
packages[0].identifier, packages[0].version, packages[0].fileSha256,
and the top-level version in server.json to match the new release, then:
来源:README.md,提交 026b860
工具
0版本历史
1- v0.4.0最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分