← Vytvářejte agenty na Cloudflare / agents / tools / payments / mpp
Přijímání plateb pomocí MPP
Pomocí Cloudflare Workers přijímejte platby přes Machine Payments Protocol (MPP). Zvolte integraci podle služby, kterou chcete chránit:
mpp-proxy↗ : Účtujte za HTTP obsah bez úprav kódu na vašem origin serveru. Více informací najdete v Zpoplatnění obsahu HTTP.- Worker route : Přidejte
mppxplatební middleware do aplikace Worker. - Nástroj MCP : Vyžadujte platbu před tím, než nástroj MCP vrátí výsledek.
Předpoklady
Vytvořte účet Cloudflare. Budete také potřebovat příjemce platby a tajný klíč MPP.
Příklady používají platební metodu stablecoin na testnetu. Pro ostatní metody viz Platební metody MPP ↗.
Zpoplatnění trasy Workeru
Přidejte mppx middleware, pokud máte kontrolu nad aplikací Worker:
-
Nainstalujte Hono a
mppxv projektu Workeru:npm i hono mppx -
Uložte podpisový klíč MPP jako Tajný klíč Workeru:
npx wrangler secret put MPP_SECRET_KEY -
Přidejte platební middleware před handler placené route:
src/index.jsimport { env } from "cloudflare:workers"; import { Hono } from "hono"; import { Mppx, tempo } from "mppx/hono"; const workerEnv = env; const app = new Hono(); const mppx = Mppx.create({ methods: [tempo.charge({ testnet: true })], secretKey: workerEnv.MPP_SECRET_KEY, }); app.get( "/premium", mppx.charge({ amount: "0.01", currency: "0x20c0000000000000000000000000000000000000", description: "Premium API access", recipient: "<YOUR_WALLET_ADDRESS>", }), (c) => c.json({ access: "paid" }), ); export default app;src/index.tsimport { env } from "cloudflare:workers"; import { Hono } from "hono"; import { Mppx, tempo } from "mppx/hono"; const workerEnv = env as Env & { MPP_SECRET_KEY: string }; const app = new Hono(); const mppx = Mppx.create({ methods: [tempo.charge({ testnet: true })], secretKey: workerEnv.MPP_SECRET_KEY, }); app.get( "/premium", mppx.charge({ amount: "0.01", currency: "0x20c0000000000000000000000000000000000000", description: "Premium API access", recipient: "<YOUR_WALLET_ADDRESS>", }), (c) => c.json({ access: "paid" }), ); export default app; -
Nasaďte Worker:
npx wrangler deploy -
Vyžádejte placenou trasu bez platby:
curl -i https://<YOUR_WORKER>.workers.dev/premiumWorker vrátí
402 Payment RequiredaWWW-Authenticate: Paymenthlavička. Placené opakování dosáhne handleru a vrátíPayment-Receipthlavička.
Zpoplatnění nástroje MCP
Přidejte transport MPP do McpAgent:
-
Nainstalujte potřebné balíčky v projektu Agents:
npm i agents mppx @modelcontextprotocol/sdk zod -
Navažte
McpAgentDurable Object v konfiguraci Wrangler:{ "$schema": "./node_modules/wrangler/config-schema.json", "name": "mpp-server", "main": "src/index.ts", // Set this to today's date "compatibility_date": "2026-08-28", "compatibility_flags": [ "nodejs_compat" ], "durable_objects": { "bindings": [ { "name": "MCP_OBJECT", "class_name": "PaidMCP" } ] }, "migrations": [ { "tag": "v1", "new_sqlite_classes": [ "PaidMCP" ] } ] }name = "mpp-server" main = "src/index.ts" # Set this to today's date compatibility_date = "2026-08-28" compatibility_flags = ["nodejs_compat"] [[durable_objects.bindings]] name = "MCP_OBJECT" class_name = "PaidMCP" [[migrations]] tag = "v1" new_sqlite_classes = ["PaidMCP"] -
Uložte
MPP_SECRET_KEYjako tajný klíč Workeru:npx wrangler secret put MPP_SECRET_KEY -
Před vrácením výsledku nástroje zkontrolujte platbu:
src/index.jsimport { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { McpAgent } from "agents/mcp"; import { Mppx, tempo, Transport } from "mppx/server"; import { z } from "zod"; export class PaidMCP extends McpAgent { server = new McpServer({ name: "paid-search", version: "1.0.0" }); async init() { const mppx = Mppx.create({ methods: [tempo.charge({ testnet: true })], secretKey: this.env.MPP_SECRET_KEY, transport: Transport.mcpSdk(), }); this.server.tool( "premium_search", "Search premium content", { query: z.string() }, async ({ query }, extra) => { const payment = await mppx.charge({ amount: "0.01", currency: "0x20c0000000000000000000000000000000000000", description: "Premium search", recipient: "<YOUR_WALLET_ADDRESS>", })(extra); if (payment.status === 402) throw payment.challenge; return payment.withReceipt({ content: [{ type: "text", text: `Results for: ${query}` }], }); }, ); } } export default PaidMCP.serve("/mcp");src/index.tsimport { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { McpAgent } from "agents/mcp"; import { Mppx, tempo, Transport } from "mppx/server"; import { z } from "zod"; type PaymentEnv = Env & { MPP_SECRET_KEY: string }; export class PaidMCP extends McpAgent<PaymentEnv> { server = new McpServer({ name: "paid-search", version: "1.0.0" }); async init() { const mppx = Mppx.create({ methods: [tempo.charge({ testnet: true })], secretKey: this.env.MPP_SECRET_KEY, transport: Transport.mcpSdk(), }); this.server.tool( "premium_search", "Search premium content", { query: z.string() }, async ({ query }, extra) => { const payment = await mppx.charge({ amount: "0.01", currency: "0x20c0000000000000000000000000000000000000", description: "Premium search", recipient: "<YOUR_WALLET_ADDRESS>", })(extra); if (payment.status === 402) throw payment.challenge; return payment.withReceipt({ content: [{ type: "text", text: `Results for: ${query}` }], }); }, ); } } export default PaidMCP.serve("/mcp"); -
Nasaďte Worker:
npx wrangler deployNeuhrazená
premium_searchvolání vrátí MPP Challenge. Placené opakování vrátí výsledek nástroje a MPP Receipt v_meta.
Chcete-li z Cloudflare Agenta otestovat oba platební toky, přejděte na Platba z Agents SDK. Pro vzory fakturace v produkčním prostředí si přečtěte Platební záměry MPP ↗.