# Agent Wormhole

Проверяет, совпадает ли платёж, который агент собирается подписать, с тем, что было в счёте. Работает офлайн, без обращения к сети.

- MCP-сервер · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 5
- Автор: runningoffcode
- Лицензия: Apache-2.0 · policy=link-only · показываем только описание, файл — у автора
- Исходник: https://github.com/runningoffcode/agent-wormhole/tree/HEAD/x402-guard
- Обновлён: 2026-09-25
- HTML: https://affpapa.org/nevibecode/mcp/agent-wormhole

## Что делает

Агент получил счёт и уже готов подписать транзакцию. Agent Wormhole сравнивает получателя, актив и сумму с тем, что было в исходном счёте, и выдаёт один вердикт: allow, refuse или abstain. Смысл в том, что платёж на адрес атакующего симулируется идеально — балансы сходятся, ошибок нет, транзакция валидна. Просто это не та транзакция, которую запрашивали.

Внутри — функция `verify()`, которая сама определяет сеть по строке network и сначала сканирует текст счёта: если в описании от мерчанта спрятана инструкция, её отклонят раньше, чем её числа примут за достоверные. Есть отдельные точки входа: `guardedPay()` и `guardedFetch()` ставятся перед `sign()`, `verifyReceipt()` и `replayMatches()` проверяют квитанцию офлайн, `createVerifyHandler()` позволяет поднять проверяющий сервер у себя. Время передаётся аргументом, а не берётся с часов, поэтому вердикт воспроизводится один в один при повторе.

Вердикт, полученный по сети, — это утверждение, а не ответ. Поэтому `guardedPay` и `guardedFetch` требуют опцию `integrity` без значения по умолчанию: подставлять что-то своё здесь означало бы тихо ослабить проверку. При `mode: "required"` решающий вердикт проходит только если квитанция есть, её подпись сходится с вашим ключом и решение в квитанции совпадает с решением в конверте. Всё остальное становится abstain.

## Требования
- Нужно: Node.js (команды через npx)
- Переменные окружения: `WORMHOLE_API_KEY`, `WORMHOLE_VERIFY_URL`, `WORMHOLE_ADDRESS_LEDGER` — это ключи и токены: значения спроси у человека, в репозиторий и общие файлы не записывай.

## Установка

### Claude Code (родная платформа)

**Командой платформы**
```bash
claude mcp add --env WORMHOLE_API_KEY=<WORMHOLE_API_KEY> --env WORMHOLE_VERIFY_URL=<WORMHOLE_VERIFY_URL> --env WORMHOLE_ADDRESS_LEDGER=<WORMHOLE_ADDRESS_LEDGER> --transport stdio x402-guard -- npx -y wormhole-x402
```
Вместо <…> подставьте свои значения

### Codex

**Командой платформы**
```bash
codex mcp add x402-guard --env WORMHOLE_API_KEY=<WORMHOLE_API_KEY> --env WORMHOLE_VERIFY_URL=<WORMHOLE_VERIFY_URL> --env WORMHOLE_ADDRESS_LEDGER=<WORMHOLE_ADDRESS_LEDGER> -- npx -y wormhole-x402
```
Вместо <…> подставьте свои значения

### Cursor

**Файл настроек**
Файл `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "x402-guard": {
            "command": "npx",
            "args": [
                "-y",
                "wormhole-x402"
            ],
            "env": {
                "WORMHOLE_API_KEY": "<WORMHOLE_API_KEY>",
                "WORMHOLE_VERIFY_URL": "<WORMHOLE_VERIFY_URL>",
                "WORMHOLE_ADDRESS_LEDGER": "<WORMHOLE_ADDRESS_LEDGER>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения

### GitHub Copilot

**Файл настроек**
Файл `.vscode/mcp.json`:
```json
{
    "servers": {
        "x402-guard": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "wormhole-x402"
            ],
            "env": {
                "WORMHOLE_API_KEY": "<WORMHOLE_API_KEY>",
                "WORMHOLE_VERIFY_URL": "<WORMHOLE_VERIFY_URL>",
                "WORMHOLE_ADDRESS_LEDGER": "<WORMHOLE_ADDRESS_LEDGER>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения

### Gemini CLI

**Командой платформы**
```bash
gemini mcp add -e WORMHOLE_API_KEY=<WORMHOLE_API_KEY> -e WORMHOLE_VERIFY_URL=<WORMHOLE_VERIFY_URL> -e WORMHOLE_ADDRESS_LEDGER=<WORMHOLE_ADDRESS_LEDGER> x402-guard npx -y wormhole-x402
```
Вместо <…> подставьте свои значения

## Когда брать
- поймать подмену адреса получателя до подписи
- сверить сумму платежа с той, что была в счёте
- заметить скрытый Approve, дающий доступ к тратам по счёту
- отличить «не смог проверить» от «всё в порядке»
- проверить квитанцию о платеже без обращения к сети

## Примеры запросов агенту
- Проверь этот x402-платёж через wormhole-x402 перед подписью
- Сравни получателя и сумму в транзакции с тем, что было в счёте
- Проверь квитанцию по этому запросу офлайн

## Похожие
- [agentwallet](https://affpapa.org/nevibecode/skills/agentwallet.md) — скилл · 2600 установок
- [mpp32-mcp-server](https://affpapa.org/nevibecode/mcp/mpp32-mcp-server.md) — MCP-сервер · ★ 221
- [x402 Universal Payer](https://affpapa.org/nevibecode/mcp/x402-universal-payer.md) — MCP-сервер · ★ 250
- [TollWarden](https://affpapa.org/nevibecode/mcp/tollwarden.md) — MCP-сервер · ★ 2
- [SAP MCP Server](https://affpapa.org/nevibecode/mcp/sap-mcp-server.md) — MCP-сервер · ★ 3
- [Onchain Agent Wallets](https://affpapa.org/nevibecode/mcp/onchain-agent-wallets.md) — MCP-сервер · ★ 9

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
