{
  "markdown": "[![npm version](https://img.shields.io/npm/v/pop-pay.svg)](https://www.npmjs.com/package/pop-pay) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![CI](https://github.com/100xPercent/pop-pay/actions/workflows/ci.yml/badge.svg)](https://github.com/100xPercent/pop-pay/actions/workflows/ci.yml) [![Node.js](https://img.shields.io/badge/Node.js-%3E%3D18-339933?logo=node.js&logoColor=white)](https://nodejs.org/)\n\n<p align=\"center\">\n    <picture>\n        <img src=\"https://raw.githubusercontent.com/100xPercent/pop-pay-python/main/project_banner.png\" alt=\"Point One Percent (AgentPay)\" width=\"800\">\n    </picture>\n</p>\n\n# Point One Percent — pop-pay\n<p align=\"left\"><i>it only takes <b>0.1%</b> of Hallucination to drain <b>100%</b> of your wallet.</i></p>\n\nThe runtime security layer for AI agent commerce. Drop-in CLI + MCP server. Card credentials are injected directly into the browser DOM via CDP — they never enter the agent's context window. One hallucinated prompt can't drain a wallet it can't see.\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/100xPercent/pop-pay-python/main/assets/runtime_demo.gif\" alt=\"Point One Percent — live CDP injection demo\" width=\"800\">\n</p>\n\n> 📄 **Research Dataset & Reproduction** — this repository hosts the open dataset and reproduction harness for *\"The Illusion of Single-Attacker Rankings\"*. research: jump to [Research Dataset & Reproduction](#research-dataset--reproduction).\n\n## Install\n\nChoose your preferred method:\n\n<details>\n<summary>Homebrew (macOS)</summary>\n\n```bash\nbrew install 100xpercent/tap/pop-pay\n```\n\n</details>\n\n<details>\n<summary>curl (Linux / macOS) — bootstraps via npm; requires Node.js 18+</summary>\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/100xPercent/pop-pay/main/install.sh | sh\n```\n\n</details>\n\n<details>\n<summary>npm (global)</summary>\n\n```bash\nnpm install -g pop-pay\n```\n\n</details>\n\n<details>\n<summary>npx (no install — one-off runs)</summary>\n\n```bash\nnpx -y pop-pay <command>\n```\n\n</details>\n\nAll install paths expose the same binaries: `pop-pay`, `pop-launch`, `pop-init-vault`, `pop-unlock`.\n\n> Also available as `@100xpercent/mcp-server-pop-pay` — identical package under the MCP `@scope/mcp-server-<name>` convention. Tracks the same version on every release.\n\n> **Using Python?** Check out [pop-pay-python](https://github.com/100xPercent/pop-pay-python) — `pip install pop-pay`. Same security model, same vault format, independent release cycle — safe to switch between runtimes.\n\n## Quick Start (CLI)\n\n### 1. Initialize the encrypted credential vault\n```bash\npop-pay init-vault\n```\n\nThis encrypts your card credentials into `~/.config/pop-pay/vault.enc` (AES-256-GCM). For stronger protection (blocks agents with shell access):\n\n```bash\npop-pay init-vault --passphrase   # one-time setup\npop-pay unlock                     # run once per session\n```\n\n### 2. Launch Chrome with CDP remote debugging\n```bash\npop-pay launch\n```\n\nThis opens a Chromium instance on `http://localhost:9222` that pop-pay injects credentials into. Your agent (via MCP, browser automation, or x402) then drives the checkout flow — card details never leave the browser process.\n\n### 3. Plug into your agent\nThe CLI launches infrastructure; the actual payment tool calls come from your agent. Two supported paths:\n\n- **MCP server** — add pop-pay to any MCP-compatible client (Claude Code, Cursor, Windsurf, OpenClaw). See [MCP Server](#mcp-server-optional) below.\n- **x402 HTTP** — pay for API calls via the [x402 payment protocol](docs/INTEGRATION_GUIDE.md#x402).\n\nFull CLI reference: `pop-pay --help`.\n\n## MCP Server (optional)\n\n### Add to your MCP client\n\nStandard config for any MCP-compatible client:\n\n```json\n{\n  \"mcpServers\": {\n    \"pop-pay\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"pop-pay\", \"launch-mcp\"],\n      \"env\": {\n        \"POP_CDP_URL\": \"http://localhost:9222\"\n      }\n    }\n  }\n}\n```\n\n[<img src=\"https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square&label=Install%20MCP%20Server&color=0098FF\" alt=\"Install in VS Code\">](https://insiders.vscode.dev/redirect?url=vscode%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522pop-pay%2522%252C%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522-y%2522%252C%2522pop-pay%2522%252C%2522launch-mcp%2522%255D%252C%2522env%2522%253A%257B%2522POP_CDP_URL%2522%253A%2522http%253A%252F%252Flocalhost%253A9222%2522%257D%257D) [<img alt=\"Install in VS Code Insiders\" src=\"https://img.shields.io/badge/VS_Code_Insiders-VS_Code_Insiders?style=flat-square&label=Install%20MCP%20Server&color=24bfa5\">](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522pop-pay%2522%252C%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522-y%2522%252C%2522pop-pay%2522%252C%2522launch-mcp%2522%255D%252C%2522env%2522%253A%257B%2522POP_CDP_URL%2522%253A%2522http%253A%252F%252Flocalhost%253A9222%2522%257D%257D) [<img src=\"https://img.shields.io/badge/Cursor-Cursor?style=flat-square&label=Install%20MCP%20Server&color=5C2D91\" alt=\"Install in Cursor\">](cursor://anysphere.cursor-deeplink/mcp/install?name=pop-pay&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsInBvcC1wYXkiLCJsYXVuY2gtbWNwIl0sImVudiI6eyJQT1BfQ0RQX1VSTCI6Imh0dHA6Ly9sb2NhbGhvc3Q6OTIyMiJ9fQ==)\n\n<details>\n<summary>Claude Code</summary>\n\nClaude Code uses its own CLI — the JSON config above is not needed.\n\n```bash\nclaude mcp add --scope user pop-pay -- npx -y pop-pay launch-mcp\n```\n\n`--scope user` makes it available across all projects. To remove: `claude mcp remove pop-pay`\n\n</details>\n\n<details>\n<summary>Cursor / Windsurf / VS Code</summary>\n\nAdd the JSON config above to:\n- **Cursor**: `~/.cursor/mcp.json`\n- **Windsurf**: `~/.codeium/windsurf/mcp_config.json`\n- **VS Code (Copilot)**: `.vscode/mcp.json` in project root\n\n</details>\n\n<details>\n<summary>OpenClaw / NemoClaw</summary>\n\nOpenClaw has its own CLI — the JSON config above is not needed.\n\n```bash\nopenclaw mcp add pop-pay -- npx -y pop-pay launch-mcp\n```\n\nOr add to `~/.openclaw/mcp_servers.json` using the JSON config above.\n\nFor System Prompt templates and NemoClaw sandbox setup, see [Integration Guide §4](./docs/INTEGRATION_GUIDE.md).\n\n</details>\n\n<details>\n<summary>Docker</summary>\n\n```bash\ndocker-compose up -d\n```\n\nRuns the MCP server + headless Chromium with CDP. Mount your encrypted vault from the host.\n\n</details>\n\n## MCP Tools\n\n| Tool | Description |\n|:---|:---|\n| `request_virtual_card` | Issue a virtual card and inject credentials into the checkout page via CDP. Automatically scans the page for hidden prompt injections. |\n| `request_purchaser_info` | Auto-fill billing/contact info (name, address, email, phone). Automatically scans the page for hidden prompt injections. |\n| `request_x402_payment` | Pay for API calls via the x402 HTTP payment protocol. |\n\n> **Tip for Claude Code users:** Add the following to your project's `CLAUDE.md` to help the agent know when to call pop-pay:\n> *\"When you encounter a payment form or checkout page, use the `request_virtual_card` tool. For billing/contact info forms, use `request_purchaser_info` first.\"*\n\n## Configuration\n\nCore variables in `~/.config/pop-pay/.env`. See [ENV_REFERENCE.md](./docs/ENV_REFERENCE.md) for the full list.\n\n| Variable | Default | Description |\n|---|---|---|\n| `POP_ALLOWED_CATEGORIES` | `[\"aws\",\"cloudflare\"]` | Approved vendor categories — see [Categories Cookbook](./docs/CATEGORIES_COOKBOOK.md) |\n| `POP_MAX_PER_TX` | `100.0` | Max USD per transaction |\n| `POP_MAX_DAILY` | `500.0` | Max USD per day |\n| `POP_BLOCK_LOOPS` | `true` | Block hallucination/retry loops |\n| `POP_AUTO_INJECT` | `true` | Enable CDP card injection |\n| `POP_GUARDRAIL_ENGINE` | `keyword` | `keyword` (zero-cost) or `llm` (semantic) |\n\n### Guardrail Mode\n\n| | `keyword` (default) | `llm` |\n|---|---|---|\n| **Mechanism** | Keyword matching on reasoning string | Semantic analysis via LLM |\n| **Cost** | Zero — no API calls | One LLM call per request |\n| **Best for** | Development, low-risk workflows | Production, high-value transactions |\n\n> To enable LLM mode, see [Integration Guide §1](./docs/INTEGRATION_GUIDE.md#guardrail-mode-configuration).\n\n## Providers\n\n| Provider | Description |\n|:---|:---|\n| **BYOC** (default) | Bring Your Own Card — encrypted vault credentials, local CDP injection. |\n| **Stripe Issuing** | Real virtual cards via Stripe API. Requires `POP_STRIPE_KEY`. |\n| **Lithic** | Multi-issuer adapter (Stripe Issuing / Lithic). |\n| **Mock** | Test mode with generated card numbers for development. |\n\n**Priority:** Stripe Issuing → BYOC Local → Mock.\n\n## Security\n\n| Layer | Defense |\n|---|---|\n| **Context Isolation** | Card credentials never enter the agent's context window or logs |\n| **Encrypted Vault** | AES-256-GCM with XOR-split salt and native scrypt key derivation (Rust) |\n| **TOCTOU Guard** | Domain verified at the moment of CDP injection — blocks redirect attacks |\n| **Repr Redaction** | Automatic masking (`****-4242`) in all MCP responses, logs, and tracebacks |\n\nSee [THREAT_MODEL.md](./docs/THREAT_MODEL.md) for the full STRIDE analysis and [COMPLIANCE_FAQ.md](./docs/COMPLIANCE_FAQ.md) for enterprise details.\n\n## Architecture\n\n- **TypeScript** — MCP server, CDP injection engine, guardrails, CLI\n- **Rust (napi-rs)** — Native security layer: XOR-split salt storage, scrypt key derivation\n- **Node.js crypto** — AES-256-GCM vault encryption (OpenSSL binding)\n- **Chrome DevTools Protocol** — Direct DOM injection via raw WebSocket\n\n## Documentation\n\n- [Threat Model](docs/THREAT_MODEL.md) — STRIDE analysis, 5 security primitives, 10 attack scenarios\n- [Guardrail Benchmark](docs/GUARDRAIL_BENCHMARK.md) — Cross-model evaluation (Anthropic / OpenAI / Gemini) across 585 payloads, 11 attack categories\n- [Compliance FAQ](docs/COMPLIANCE_FAQ.md) — PCI DSS, SOC 2, GDPR details\n- [Environment Reference](docs/ENV_REFERENCE.md) — All POP_* environment variables\n- [Integration Guide](docs/INTEGRATION_GUIDE.md) — Setup for Claude Code, Node.js SDK, and browser agents\n- [Categories Cookbook](docs/CATEGORIES_COOKBOOK.md) — POP_ALLOWED_CATEGORIES patterns and examples\n\n## Research Dataset & Reproduction\n\nThis repository hosts the open-source dataset and harness for the cross-vendor attacker-stability methodology described in the corresponding research paper. Reviewer/researcher reproduction artifacts:\n\n- **Corpus** (585 attack payloads, 11 categories): [`tests/redteam/corpus/`](tests/redteam/corpus/)\n  - `attacks.json` — full payload set with category labels\n  - `GENERATION.md` — corpus generation protocol\n  - `schema.json` — payload schema\n- **Run JSONLs** (26,325 rows, 9 models × 585 payloads × N=5): [`tests/redteam/runs/`](tests/redteam/runs/)\n  - PRIMARY whitebox-no-feedback runs: `runs/adaptive/2026-04-28T19-50-*`\n  - Static panel runs: `runs/static/`\n  - Prompt-ablation (v3 / strict / paranoid): `runs/ablation/`\n- **Manifest hashes**: [`tests/redteam/runs/MANIFEST.sha256`](tests/redteam/runs/MANIFEST.sha256) — byte-level integrity for all artifacts\n- **Croissant 1.0 metadata** (Core + RAI fields): [`paper-artifacts/croissant.json`](paper-artifacts/croissant.json)\n- **Reproduction scripts** (regenerate paper tables/figures from JSONL):\n  - `python3 paper-artifacts/gen-tables.py --table all` — Tab.~bypassk / threat-ablation / cross-vendor\n  - `python3 paper-artifacts/gen-taxonomy-map.py` — Fig.~taxonomy-map\n- **License**: corpus CC BY-SA 4.0, harness MIT.\n\nFor dataset schema, statistical methodology (bootstrap CI, Holm-Bonferroni, McNemar), full from-scratch re-collection instructions, JSONL row data dictionary, and responsible-disclosure policy, see **[docs/PAPER_REPRODUCTION.md](docs/PAPER_REPRODUCTION.md)**.\n\n## License\n\nMIT\n",
  "bytes": 11776,
  "sha": "d09fcf720e237cd0f7d6a461b772030091bdc5e4265119ac491f2322fbd0d698",
  "repo_slug": "100xpercent/pop-pay",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_100xpercent_pop_pay_d127e503/readme"
}