# MPP

エージェントからの支払いを受け付けるには、MPP (Machine Payments Protocol) を使用します。

Stripe と Tempo が共同開発した [MPP (Machine Payments Protocol)](https://mpp.dev) は、決済 UI を使用することなく、エージェントがプログラムから API やサービスの決済を行えるようにするオープンプロトコルです。

エージェントがお客様の API またはサービスをリクエストすると、サーバーは HTTP `402` レスポンスと決済の詳細を返します。エージェントは支払いを承認し、リクエストを再試行して、領収書とともに有料リソースへのアクセス権を取得します。

エージェント、サーバー、Stripe の間の MPP 決済フローを示す図 (See full diagram at https://docs.stripe.com/payments/machine/mpp)

```text
[エージェント] -- 支払いなしで有料リソースをリクエスト --> [サーバー]
[サーバー] -- 支払い要件を含む HTTP 402 レスポンス --> [エージェント]
[エージェント] -- 決済認証情報を使用してリクエストを再試行 --> [サーバー]
[サーバー] -- POST /v1/payment_intents で支払いを記録 --> [Stripe]
[サーバー] -- リクエストされたリソースを返す --> [エージェント]
```

## Before you begin

1. Stripe ダッシュボードで [Stripe プロフィールを作成](https://docs.stripe.com/get-started/account/profile.md)します。
2. プロフィールの `profile_` ID を保存します。この値は、[エンドポイントを作成する](https://docs.stripe.com/payments/machine/mpp.md#create-your-endpoint)ための `networkId` として使用します。

## コーディングエージェントを使用する

コーディングエージェントへの単一のプロンプトで、MPP を使用する API を構築できます:

```bash
Read https://docs.stripe.com/payments/machine/mpp.md?lang=node, and monetize my API using MPP to charge 0.50 USD per API call.

Run `npx mppx@latest validate http://localhost:4242` to iteratively validate the implementation as you develop.
```

ご自身で実装するには、このガイドの手順に従って依存関係をインストールし、HTTP `402` チャレンジを返して決済を検証するエンドポイントを作成した上で、カードやステーブルコインなどの決済手段を追加し、一連のフローをテストします。

サーバー実装をより詳細に制御する場合や、実装の各部分を理解したい場合は、このアプローチを使用します。

GitHub でアプリの[完全なソースコード](https://github.com/stripe-samples/machine-payments)を確認することもできます。

## 依存関係をインストール

必要な依存関係をインストールします。

```bash
npm install mppx stripe
```

## エンドポイントを作成する

リクエストごとに 0.50 米ドルの決済を確認し、決済がない場合は HTTP `402` チャレンジを返すエンドポイントを作成します。決済が検証された場合は、領収書を返します。

#### Node.js

```node
import crypto from 'crypto';
import StripeClient from 'stripe';
import { Mppx, stripe } from 'mppx/server';

// Secret used to secure payment challenges
// https://mpp.dev/protocol/challenges#challenge-binding
const mppSecretKey = crypto.createHmac("sha256", process.env.STRIPE_SECRET_KEY!).update("mpp-challenge-signing").digest("base64");

const stripeClient = new StripeClient(process.env.STRIPE_SECRET_KEY!);

const stripeMachinePayments = stripe.create({
  client: stripeClient,
  networkId: process.env.STRIPE_PROFILE_ID!,
  livemode: !process.env.STRIPE_SECRET_KEY!.includes('_test_')
});

const mppx = Mppx.create({
  methods: stripeMachinePayments.defaultMethods(),
  secretKey: mppSecretKey,
});

export async function handler(request: Request) {
  const response = await mppx.charge({ amount: '0.50' })(request);

  if (response.status === 402) return response.challenge;

  return response.withReceipt(Response.json({ data: '...' }));
}
```

## 決済受付を開始

MPP を使用すると、[共有決済トークン (SPT)](https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens.md) を介したカードや[ステーブルコイン決済](https://docs.stripe.com/payments/stablecoin-payments.md)など、多様な決済手段を利用するエージェントからの支払いを受け付けることができます。

詳細については、[SPT とステーブルコイン決済の利用要件](https://docs.stripe.com/payments/machine.md#availability)をご覧ください。

デフォルトでは、作成したエンドポイントは SPT に対応しています。暗号資産ウォレットを持つエージェントに対応するため、ステーブルコイン決済への対応も必ず追加してください。これにより、わずか 0.01 USDC からの決済の請求が可能になります。

##### 入金アドレスを作成

ステーブルコインを保有するエージェントは、Tempo などのサポート対象ブロックチェーン上にあるこのオンチェーンアドレスに決済を送信します。Stripe では、これらの決済を自動的にオフランプし、Stripe 残高に反映します。

```bash
curl https://api.stripe.com/v1/crypto/deposit_addresses \
  -u "$STRIPE_SECRET_KEY:" \
  -H "Stripe-Version: 2026-05-27.preview" \
  -d network=tempo
```

入金アドレスを作成し、返されたアドレスをサーバーの環境変数に `TEMPO_DEPOSIT_ADDRESS` として保存します。

入金アドレスは何度でも作成できますが、これらの呼び出しをコアリクエストパスから除外することをお勧めします。

##### エンドポイントを更新

入金アドレスを `stripeMachinePayments` 設定に追加します。

#### Node.js

```node
const stripeMachinePayments = stripe.create({
  client: stripeClient,
  networkId: process.env.STRIPE_PROFILE_ID!,
  livemode: !process.env.STRIPE_SECRET_KEY!.includes('_test_'),
  depositAddresses: {
    tempo: process.env.TEMPO_DEPOSIT_ADDRESS!
  },
});
```

既存のコードは他の変更なしで機能します。`defaultMethods()` によって Tempo が追加され、既存の `mppx.charge()` ハンドラーにより、SPT と Tempo の両方の決済が同じ 0.50 USD の金額で提供されます。`mppx.compose()` を使用すると、決済手段ごとに異なる金額を請求できます。

## エンドポイントをテストする

### mppx validate を使用したテスト

`mppx validate` を実行し、エンドツーエンドの実装を自動的に検証します。このコマンドでは、検出、課題フォーマット、エラー処理、完全な決済フローがテストされます。

```bash
npx mppx@latest validate http://localhost:4242
```

サーバーのサンドボックスと本番環境の両バージョンで`検証`することをお勧めします。サンドボックスでは、CLI がサーバーに対する往復テスト取引を自動的に完了します。本番環境では、CLI で実際の資金を使って往復取引を完了することもできます。

### 手動でテストする

各ステップを個別にテストすることもできます。まず、サーバーから支払い要件とともに `402` が返されることを確認します。

#### SPT

> Stripe では、SPT で行われるカード決済に対して、最低 0.50 USD (または同等額) の請求が必要です。

[link-cli](https://link.com/agents) を使用して、お客様のアカウントのテスト SPT を発行できます。`link-cli` は、Link アカウントを使用してワンタイムの Shared Payment Token 認証情報をプロビジョニングできるツールです。[link.com/agents](https://link.com/agents) に記載されている手順に従って、`link-cli` スキルをインストールするか、希望するエージェントで MCP サーバーとして登録してください。

`link-cli` を使って手動でテストするには、そのコマンドを直接実行します。

```bash
npx @stripe/link-cli auth login
```

```bash
npx @stripe/link-cli mpp pay http://localhost:4242/paid \
  -X POST \
  -d '{}' \
  --context "Testing machine payments integration on Stripe MPP using the link-cli on http://localhost:4242/paid"
```

[ダッシュボード](https://dashboard.stripe.com)で **Payments** に移動すると、取引を確認できます。

#### 暗号資産

コマンドラインから決済を行うには、[Tempo CLI](https://tempo.xyz/developers/docs/cli) を使用します。サーバーで本番環境の入金アドレスを使用している場合、このコマンドによって実際の資金が移動します。

```bash
curl -fsSL https://tempo.xyz/install | bash
tempo wallet login
tempo wallet fund
tempo request -X POST --json '{}' http://localhost:4242/paid
```

決済が完了すると、サーバーがコンテンツを返します。[ダッシュボード](https://dashboard.stripe.com)で **Payments** に移動して取引を確認します。

### Stripe サンドボックスを使用したテスト

サンドボックスでのテスト方法:

1. サンドボックスの Stripe API キーを使用するようにサーバーを設定します。
2. サンドボックス用の Stripe プロフィールを作成し、`profile_test_` ID を使用します。
3. サンドボックスアカウントで Tempo の入金アドレスを作成します:

```bash
curl https://api.stripe.com/v1/crypto/deposit_addresses \
  -u "$STRIPE_SECRET_KEY:" \
  -H "Stripe-Version: 2026-05-27.preview" \
  -d network=tempo
```

返されたアドレスを `TEMPO_DEPOSIT_ADDRESS` 環境変数として保存します。前述の構成により、サンドボックス API キーが検出され、`livemode` が `false` に設定されます。mppx の `stripe.create` により、Tempo テストネットが自動的に構成されます。
