pop-pay について
pop-payは、AIエージェントの決済を制御するコマンドラインツール兼MCPサーバーです。CDPでカード情報を決済ページに注入し、エージェントのコンテキストから隔離します。取引上限やガードレールも設定できます。
主な機能
- 01CDPによるカード情報の注入
- 02暗号化された認証情報ボルト
- 03プロンプトインジェクションの検査
- 04取引額と日次上限の設定
- 05x402によるAPI決済
活用シーン
- 01カード情報を見せずにエージェントで決済
- 02エージェントの購入額を制限
- 03x402でAPI利用料を支払う
MCP 対応
MCPサーバーは、バーチャルカードの発行、購入者情報の入力、x402決済のツールを提供します。カード情報はCDP経由でブラウザーに注入され、エージェントには返されません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y pop-payPOP_CDP_URLChrome DevTools Protocol endpoint for credential injection (default: http://localhost:9222)POP_ALLOWED_CATEGORIESJSON array of allowed vendor categories (e.g. '["aws","cloudflare"]')POP_MAX_PER_TXPer-transaction spending limit in USDPOP_MAX_DAILYDaily spending limit in USDPOP_GUARDRAIL_ENGINEGuardrail engine: 'keyword' (offline, default) or 'llm' (requires API key)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Point One Percent — pop-pay
ウォレットを空にするのに必要なのは、たった0.1%の幻覚だけです。100%の残高が消えてしまいます。
AI エージェントによるコマースのランタイムセキュリティレイヤーです。すぐに使える CLI と MCP サーバーを提供します。カード認証情報は CDP を介してブラウザーの DOM に直接注入されるため、エージェントのコンテキストウィンドウに入ることはありません。エージェントから見えないウォレットを、たった一つの幻覚プロンプトで空にすることはできません。
📄 研究データセットと再現 — このリポジトリでは、「The Illusion of Single-Attacker Rankings」 のオープンデータセットと再現用ハーネスを公開しています。研究については、研究データセットと再現をご覧ください。
インストール
お好みの方法を選択してください。
Homebrew(macOS)
brew install 100xpercent/tap/pop-pay
curl(Linux / macOS)— npm 経由でセットアップします。Node.js 18 以降が必要です
curl -fsSL https://raw.githubusercontent.com/100xPercent/pop-pay/main/install.sh | sh
npm(グローバル)
npm install -g pop-pay
npx(インストール不要 — 1 回限りの実行)
npx -y pop-pay <command>
どの方法でインストールしても、同じバイナリ(pop-pay、pop-launch、pop-init-vault、pop-unlock)が利用できます。
@100xpercent/mcp-server-pop-payとしても利用できます。MCP の@scope/mcp-server-<name>規約に準拠した同一パッケージです。リリースごとに同じバージョンが適用されます。
Python をお使いですか? pop-pay-python をご覧ください。
pip install pop-payでインストールできます。同じセキュリティモデルと同じボールト形式を採用しており、リリースサイクルは独立しているため、ランタイムを安全に切り替えられます。
クイックスタート(CLI)
1. 暗号化された認証情報ボールトを初期化する
pop-pay init-vault
カード認証情報は暗号化され、~/.config/pop-pay/vault.enc に保存されます(AES-256-GCM)。より強力な保護が必要な場合(シェルアクセス権を持つエージェントをブロックする場合)は、次を実行してください。
pop-pay init-vault --passphrase # one-time setup
pop-pay unlock # run once per session
2. CDP リモートデバッグを有効にして Chrome を起動する
pop-pay launch
これにより、pop-pay が認証情報を注入する Chromium インスタンスが http://localhost:9222 で開きます。エージェントは MCP、ブラウザー自動化、または x402 を介してチェックアウトのフローを進めます。カード情報がブラウザープロセスの外に出ることはありません。
3. エージェントに接続する
CLI はインフラストラクチャを起動します。実際の決済ツール呼び出しはエージェントが行います。次の 2 つの方法に対応しています。
- MCP サーバー — pop-pay を、MCP 対応の任意のクライアント(Claude Code、Cursor、Windsurf、OpenClaw)に追加します。以下の MCP サーバー(任意)をご覧ください。
- x402 HTTP — x402 決済プロトコルを介して API 呼び出しの料金を支払います。
CLI の全リファレンス:pop-pay --help。
MCP サーバー(任意)
MCP クライアントに追加
MCP 対応クライアントで使用できる標準設定:
{
"mcpServers": {
"pop-pay": {
"command": "npx",
"args": ["-y", "pop-pay", "launch-mcp"],
"env": {
"POP_CDP_URL": "http://localhost:9222"
}
}
}
}
Claude Code
Claude Code は独自の CLI を使用するため、上記の JSON 設定は不要です。
claude mcp add --scope user pop-pay -- npx -y pop-pay launch-mcp
--scope user を指定すると、すべてのプロジェクトで使用できます。削除するには、claude mcp remove pop-pay を実行します。
Cursor / Windsurf / VS Code
上記の JSON 設定を次のファイルに追加します。
- Cursor:
~/.cursor/mcp.json - Windsurf:
~/.codeium/windsurf/mcp_config.json - VS Code(Copilot):プロジェクトのルートにある
.vscode/mcp.json
OpenClaw / NemoClaw
OpenClaw は独自の CLI を使用するため、上記の JSON 設定は不要です。
openclaw mcp add pop-pay -- npx -y pop-pay launch-mcp
または、上記の JSON 設定を使用して ~/.openclaw/mcp_servers.json に追加します。
システムプロンプトのテンプレートと NemoClaw のサンドボックス設定については、Integration Guide §4 を参照してください。
Docker
docker-compose up -d
MCP サーバーと CDP 対応のヘッドレス Chromium を起動します。ホストから暗号化された保管庫をマウントしてください。
MCP ツール
| ツール | 説明 |
|---|---|
request_virtual_card | 仮想カードを発行し、CDP 経由で認証情報をチェックアウトページに入力します。ページに隠されたプロンプトインジェクションがないか自動的にスキャンします。 |
request_purchaser_info | 請求先/連絡先情報(名前、住所、メールアドレス、電話番号)を自動入力します。ページに隠されたプロンプトインジェクションがないか自動的にスキャンします。 |
request_x402_payment | x402 HTTP 支払いプロトコルを介して API 呼び出しの料金を支払います。 |
Claude Code ユーザーへのヒント: エージェントが pop-pay を呼び出すタイミングを判断できるよう、次の内容をプロジェクトの
CLAUDE.mdに追加してください。 「支払いフォームまたはチェックアウトページが表示されたら、request_virtual_cardツールを使用してください。請求先/連絡先情報のフォームでは、まずrequest_purchaser_infoを使用してください。」
設定
主要な変数は ~/.config/pop-pay/.env にあります。全項目については、ENV_REFERENCE.md を参照してください。
| 変数 | デフォルト | 説明 |
|---|---|---|
POP_ALLOWED_CATEGORIES | ["aws","cloudflare"] | 承認済みのベンダーカテゴリ。詳しくは Categories Cookbook を参照してください |
POP_MAX_PER_TX | 100.0 | 1 回の取引あたりの最大 USD 額 |
POP_MAX_DAILY | 500.0 | 1 日あたりの最大 USD 額 |
POP_BLOCK_LOOPS | true | ハルシネーション/再試行ループをブロックします |
POP_AUTO_INJECT | true | CDP によるカード入力を有効にします |
POP_GUARDRAIL_ENGINE | keyword | keyword(コストゼロ)または llm(セマンティック) |
ガードレールモード
keyword(デフォルト) | llm | |
|---|---|---|
| 仕組み | 推論文字列に対するキーワードマッチング | LLM によるセマンティック分析 |
| コスト | ゼロ — API 呼び出しなし | リクエストごとに LLM を 1 回呼び出し |
| 最適な用途 | 開発、リスクの低いワークフロー | 本番環境、高価値の取引 |
LLM モードを有効にするには、Integration Guide §1を参照してください。
プロバイダー
| プロバイダー | 説明 |
|---|---|
| BYOC(デフォルト) | 独自のカードを持ち込む方式 — 認証情報を暗号化されたボールトに保存し、ローカルで CDP に注入します。 |
| Stripe Issuing | Stripe API を介した実際のバーチャルカードです。POP_STRIPE_KEY が必要です。 |
| Lithic | 複数の発行元に対応するアダプター(Stripe Issuing / Lithic)です。 |
| Mock | 開発用に生成したカード番号を使用するテストモードです。 |
優先順位: Stripe Issuing → BYOC Local → Mock。
セキュリティ
| レイヤー | 防御 |
|---|---|
| コンテキストの分離 | カードの認証情報がエージェントのコンテキストウィンドウやログに入ることはありません |
| 暗号化されたボールト | XOR 分割ソルトとネイティブな scrypt 鍵導出(Rust)を使用した AES-256-GCM |
| TOCTOU ガード | CDP 注入時にドメインを検証し、リダイレクト攻撃をブロックします |
| 表示文字列のマスキング | すべての MCP 応答、ログ、トレースバックで自動的にマスキングします(****-4242) |
STRIDE 分析の詳細はTHREAT_MODEL.md、エンタープライズ向けの詳細はCOMPLIANCE_FAQ.mdを参照してください。
アーキテクチャ
- TypeScript — MCP サーバー、CDP 注入エンジン、ガードレール、CLI
- Rust(napi-rs) — XOR 分割ソルトの保存、scrypt 鍵導出を担うネイティブセキュリティレイヤー
- Node.js crypto — AES-256-GCM によるボールトの暗号化(OpenSSL バインディング)
- Chrome DevTools Protocol — 生の WebSocket による直接的な DOM 注入
ドキュメント
- 脅威モデル — STRIDE 分析、5 つのセキュリティプリミティブ、10 の攻撃シナリオ
- ガードレールのベンチマーク — 585 件のペイロード、11 の攻撃カテゴリを対象としたモデル横断評価(Anthropic / OpenAI / Gemini)
- コンプライアンス FAQ — PCI DSS、SOC 2、GDPR の詳細
- 環境変数リファレンス — すべての POP_* 環境変数
- 統合ガイド — Claude Code、Node.js SDK、ブラウザーエージェントのセットアップ
- カテゴリのクックブック — POP_ALLOWED_CATEGORIES のパターンと例
研究データセットと再現方法
このリポジトリでは、対応する研究論文で説明されているベンダー横断の攻撃者安定性手法のための、オープンソースのデータセットとハーネスを公開しています。査読者・研究者向けの再現用アーティファクト:
- コーパス(585 件の攻撃ペイロード、11 カテゴリ):
tests/redteam/corpus/attacks.json— カテゴリラベル付きの全ペイロードセットGENERATION.md— コーパス生成プロトコルschema.json— ペイロードのスキーマ
- 実行 JSONL(26,325 行、9 モデル × 585 ペイロード × N=5):
tests/redteam/runs/- PRIMARY ホワイトボックス・フィードバックなしの実行:
runs/adaptive/2026-04-28T19-50-* - 固定パネルの実行:
runs/static/ - プロンプト除去テスト(v3 / strict / paranoid):
runs/ablation/
- PRIMARY ホワイトボックス・フィードバックなしの実行:
- マニフェストハッシュ:
tests/redteam/runs/MANIFEST.sha256— すべてのアーティファクトのバイト単位の完全性 - Croissant 1.0 メタデータ(Core + RAI フィールド):
paper-artifacts/croissant.json - 再現スクリプト(JSONL から論文の表・図を再生成):
python3 paper-artifacts/gen-tables.py --table all— Tab.~bypassk / threat-ablation / cross-vendorpython3 paper-artifacts/gen-taxonomy-map.py— Fig.~taxonomy-map
- ライセンス:コーパスは CC BY-SA 4.0、ハーネスは MIT です。
データセットのスキーマ、統計手法(ブートストラップ CI、Holm-Bonferroni、McNemar)、最初からの完全な再収集手順、JSONL 行データ辞書、責任ある情報開示ポリシーについては、**docs/PAPER_REPRODUCTION.md**を参照してください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。