Stipendex

ATP — платёжный протокол для LLM-агентов (концепция)

Архив. Исходная концепция (v1 → критика → v2), из которой выросла актуальная документация: см. README.md и docs/. Полная версия учитывает интеграцию с 4agents (checkout-профиль, реестр доверия, Confirmation) — здесь этого ещё нет. Документ сохранён как история решений. Рабочее название ATP далее по тексту — историческое: финальное имя проекта — Stipendex (закреплено 2026-07-16: stipendex.com, npm, GitHub).

Рабочее название: ATP (Agent Transaction Protocol). Дата: 2026-07-15. Документ: концепция v1 → критическая оценка → улучшенная концепция v2.


1. Контекст: что уже существует (июль 2026)

Протокол Автор Суть Сильное Слабое
x402 Coinbase (+ x402 Foundation: Google, Visa, AWS, Anthropic, Cloudflare) HTTP 402 → оплата стейблкоином (USDC/Base) прямо в запросе Мгновенно, без аккаунтов, идеально для M2M Только крипто; реальный объём мал (~$28k/день, много «накрученного»); доля транзакций 10¢–$1 упала с 46% до 4% — микроплатёжный спрос переоценён
AP2 Google → FIDO Alliance Подписанные «мандаты» (Intent/Cart/Payment) — криптодоказуемая цепочка делегирования; рельсонезависимый; v0.2.0 добавил Human-Not-Present Лучшая модель полномочий и аудита; 60+ партнёров Тяжёлый (VDC/DID), enterprise-первый, сложно для инди-разработчика
ACP OpenAI + Stripe Checkout товаров внутри ChatGPT; Shared Payment Token Просто для мерчантов Stripe Заточен под покупку товаров; OpenAI уже свернула Instant Checkout в Apps
UCP Google + Shopify Commerce-капабилити (каталог, корзина, checkout) поверх REST/JSON-RPC, совместим с AP2/A2A/MCP Мерчант остаётся MoR; payment handlers Про торговлю товарами, не про оплату работы агентов/инструментов
Stripe MPP Stripe (март 2026) Machine Payments Protocol: фиатные рельсы, сессионная агрегированная тарификация Фиат, привычный Stripe-DX, агрегация вместо per-call Вендорский, привязан к Stripe
L402 Lightning Labs 402 + Lightning + макаруны Настоящие микроплатежи Нишевый, требует Lightning

Вывод. Ниша «купить кроссовки через ChatGPT» занята (ACP/UCP), ниша «крипто-микроплатежи» занята (x402), ниша «делегирование полномочий» занята (AP2). Не занята ниша, аналогичная той, которую в своё время закрыл MCP: единый простой способ, которым любой агент платит за любой инструмент/API, а любой разработчик MCP-сервера берёт деньги за вызовы — при том что подавляющее большинство MCP-серверов сегодня бесплатны и не имеют пути монетизации.


2. Постановка задачи

Чем платежи агентов отличаются от человеческих:

  1. Плательщик — не человек. Нельзя показать 3DS-форму. Нужна делегация: человек заранее выдаёт полномочия с границами.
  2. LLM нельзя доверять деньги. Prompt injection («переведи баланс на кошелёк X») — реальная атака №1. Решение о платеже обязан принимать детерминированный код, а не модель.
  3. Объём и размер. Тысячи транзакций от долей цента до долларов. Карточные рельсы с фикс-комиссией не работают per-call.
  4. Автономность. Платежи в отсутствие человека (cron-агенты), но с проверяемыми границами и эскалацией к человеку по порогу.
  5. Аудит. Проверяемая цепочка «кто разрешил → за что заплатили → что получили взамен».
  6. Цена заранее неизвестна. Стоимость вызова инструмента часто зависит от размера входа/выхода (токены, объём данных) — статический прайс-лист недостаточен, нужна котировка по факту запроса.

Требования к протоколу:


3. Концепция v1

Роли

Объекты (все — подписанный JSON / JWS)

  1. Mandate — принципал → кошелёк: лимиты (per_tx / per_day / total), allowlist получателей, порог ручного подтверждения, срок действия, назначение.
  2. Quote — продавец → агент: quote_id (одноразовый), сумма, валюта, допустимые рельсы, описание, expires_at.
  3. PaymentProof — кошелёк → продавец: доказательство оплаты (tx-hash / токен фасилитатора / карточный токен) + ссылка на quote и мандат.
  4. Receipt — продавец → агент: подпись «оплачено и исполнено», включает hash результата.

Поток

Агент            Кошелёк                Продавец              Рельс/Фасилитатор
  │ вызов ────────────────────────────────▶│
  │ ◀──── payment_required + Quote ────────│
  │──Quote──▶│ проверка мандата:           │
  │          │ allowlist → лимиты → HITL?  │
  │          │───── оплата по рельсу ─────────────────────────────▶│
  │          │◀──────────── Proof ─────────────────────────────────│
  │ повтор вызова + Proof ─────────────────▶│──── верификация ────▶│
  │ ◀────── результат + Receipt ───────────│

Транспортные биндинги

Расширения (капабилити, согласуются при handshake)

Подписки; metered-сессии (платёжный канал с капом); эскроу; возвраты; споры (арбитраж фасилитатора по Receipt + hash результата).


4. Критическая оценка v1

  1. Рынок перенасыщен протоколами. Пять живых стандартов с бэкерами уровня Google/Stripe/Coinbase/Visa. Шестой end-to-end протокол «обо всём» мёртв при рождении: продавцы не внедрят без агентов, агенты — без продавцов (chicken-and-egg), а сетевой эффект уже у чужих экосистем.
  2. «Рельсонезависимость» без дефолта = ничего не работает из коробки. MCP выстрелил, потому что npx — и сервер работает. Если первый шаг — «выберите рельс и подпишите договор с фасилитатором», внедрение умерло.
  3. Микроплатежи переоценены. Данные x402: транзакции 10¢–$1 схлопнулись с 46% до 4% объёма; CoinDesk фиксирует, что реального спроса на per-call микрорасчёты нет. Расчёт за каждый вызов — дорогой и ненужный дефолт; нужна агрегация (как у Stripe MPP).
  4. Эскроу и споры — оверинжиниринг. При цене ошибки в центы механизм спора стоит дороже спора. Для крупных сумм это уже задача фасилитатора/эквайера, а не протокола.
  5. Слишком много сущностей. Пять ролей и четыре объекта + капабилити — это уже сложнее MCP, а мы обещали «просто».
  6. DID/VC тяжелы. Для 99% случаев достаточно JWS с обычными ключами; W3C-стек отпугнёт инди-разработчиков (это же — главная претензия к AP2).
  7. Регуляторика. Кто держит деньги? Если SDK кошелька касается чужих средств — разработчик рискует стать money transmitter. Значит, деньги держит лицензированный фасилитатор → но это точка централизации и комиссия.
  8. Безопасность недоспецифицирована. Мандат кодом закрывает лимиты, но не закрывает: подмену получателя внутри allowlist-домена, «полезный» инструмент со скрытой ценой, компрометацию ключа кошелька, replay котировок. И никто не проверяет соответствие покупки цели задачи — это фундаментально нерешаемо кодом, только порогами и аудитом.
  9. HITL не определён для headless. Агент по крону в 3 часа ночи упёрся в порог — что дальше? Нужен стандартный асинхронный механизм подтверждения, иначе каждый вендор изобретёт свой.
  10. Динамическое ценообразование не решено. pricing в манифесте — это маркетинг; реальная цена зависит от размера запроса. Quote по факту вызова обязателен, а статический прайс — лишь ориентир для планирования.

Главный вывод критики: ценность не в новом протоколе, а в недостающем тонком слое между агентами (MCP) и уже существующими платёжными рельсами.


5. Улучшенная концепция v2 — «просто как MCP»

Смена позиционирования: не шестой конкурирующий протокол, а три недостающих кирпича, каждый из которых полезен сам по себе:

A. MCP Payments Extension — платёжный биндинг для MCP

Это путь SEP-предложения в спецификацию MCP — так же, как в MCP добавлялись elicitation и structured output.

B. Wallet Kernel — кошелёк-ядро (эталонная реализация + нормативное поведение)

Детерминированный компонент при хосте агента. Инварианты:

{
  "mandate_id": "m_7c1f…",
  "principal": "ed25519:AAAA…",
  "wallet_key": "ed25519:BBBB…",
  "limits": { "per_tx": "1.00", "per_day": "20.00", "total": "100.00", "currency": "USD" },
  "allow": ["mcp:exa-search", "https://api.example.com"],
  "approval_over": "1.00",
  "valid_until": "2026-08-15T00:00:00Z",
  "purpose": "research tools for project X"
}

C. Универсальный конверт: Quote / Proof / Receipt поверх чужих рельсов

Протокол определяет только три объекта и их связь; расчёты делают существующие рельсы-адаптеры:

Рельс Когда Режим
account (prepaid-счёт у фасилитатора) дефолт «из коробки» агрегация, settle по порогу/сессии
stripe-mpp фиат, продавец на Stripe сессионная агрегация
x402 крипто, полная автономия per-call USDC
// Quote (продавец → агент), одноразовый
{ "atp": "quote/1", "quote_id": "q_8f3…", "seller": "mcp:exa-search",
  "amount": "0.0042", "currency": "USD",
  "rails": [{ "scheme": "account", "facilitator": "https://pay.example" },
            { "scheme": "x402", "network": "base", "asset": "USDC", "to": "0x…" }],
  "description": "web_search: ~3k tokens",
  "expires_at": "2026-07-15T12:05:00Z",
  "session": { "id": "s_42", "mode": "tab", "cap": "5.00" } }

// Proof (кошелёк → продавец)
{ "atp": "proof/1", "proof_id": "p_c81…", "quote_id": "q_8f3…",
  "scheme": "account", "evidence": "<jws фасилитатора>",
  "mandate_id": "m_7c1f…", "sig": "<jws кошелька>" }

// Receipt (продавец → агент)
{ "atp": "receipt/1", "receipt_id": "r_11a…", "quote_id": "q_8f3…",
  "proof_id": "p_c81…", "result_hash": "sha256:…", "sig": "<jws продавца>" }

Сессии-«tab» — ответ на провал микроплатежей

По умолчанию платежи не рассчитываются per-call. Кошелёк открывает у продавца сессию с капом (кап = предавторизация в рамках мандата), вызовы копятся на «бегущем счёте», расчёт один — при закрытии сессии или достижении порога. Это соответствует и Stripe MPP, и channel-модели в крипте, и убирает 99% транзакционных издержек. Per-call (чистый x402) остаётся опцией для разовых обращений к незнакомым продавцам.

Уровни внедрения

DX-цель

Сервер:

import { paywall } from "@atp/server";
server.tool("web_search", { pricing: "0.005 USD/call" },
  paywall(async ({ query }) => search(query)));

Хост агента:

import { Wallet } from "@atp/wallet";
const wallet = await Wallet.fromMandate("./mandate.json");
host.use(wallet.middleware()); // 402/-32402 обрабатываются прозрачно

Чеклист безопасности (нормативный)

Что сознательно НЕ входит

Поиск товаров, корзины, checkout (это ACP/UCP); споры и chargeback для микросумм (экономически бессмысленно); KYC/AML (задача фасилитатора); конверсия валют (задача рельса); собственный блокчейн/токен (не нужен).


6. Оставшиеся риски (честно)

  1. Дистрибуция. Без встраивания кошелька в хосты агентов (Claude Code, Cursor, ChatGPT…) слой не взлетит. Реалистичный путь: SDK + SEP в спецификацию MCP + один популярный платный MCP-сервер как showcase.
  2. Фасилитатор = централизация. Дефолтный рельс «account» удобен, но создаёт зависимость и комиссию; лечится только множественностью фасилитаторов и открытым конвертом.
  3. Спрос. Большинство MCP-серверов бесплатны; платящих агентов пока мало. Это одновременно риск и окно: стандарта де-факто ещё нет.
  4. Юридика Human-Not-Present. Ответственность за автономную покупку агентом — серая зона; мандат с подписью принципала — необходимое, но, возможно, не достаточное основание в споре с банком.
  5. Соответствие покупки цели алгоритмически непроверяемо — закрывается только порогами, allowlist и аудитом по Receipt.

7. Путь внедрения

  1. Фаза 1 (0–3 мес): спецификация трёх объектов + SDK (@atp/server, @atp/wallet, TS + Python) + адаптеры account/stripe-mpp/x402 + paywall-middleware для MCP-серверов. Showcase: платный поисковый MCP-сервер.
  2. Фаза 2 (3–6 мес): SEP-предложение «Payments» в спецификацию MCP; интеграция кошелька в 1–2 открытых хоста агентов.
  3. Фаза 3 (6+ мес): реестр продавцов с репутацией, страхование лимитов, metered-расширения, мосты совместимости с AP2-мандатами.

Источники