Blockchain0x MCP üzerinden.
Herhangi bir MCP ana bilgisayarına - Claude Desktop, Cursor, VS Code - bir yapılandırma bloğu ile ajan cüzdan araçları verin. Kendi araçlarınız için ücret almak istediğinizde, gerçek requirePayment x402 oluşturucusunu kullanın.
The @blockchain0x/mcp sunucusu, bir MCP ana bilgisayarına beş ajan-cüzdan aracı verir: bir cüzdanı oku, cüzdanları listele, bir işlemi kontrol et, bir USDC ödemesi gönder ve bir x402 faturasını kesin. Bunu npx @blockchain0x/mcp ile çalıştırın (anahtarınız makinenizde kalır) veya barındırılan URL'ye işaret edin. Ayrı olarak, paket requirePayment'i dışa aktarır, böylece kendi MCP araçlarınıza bir x402 402 zorluğu ile bir fiyat koyabilirsiniz.
MCP üzerinden harcama yapın. MCP üzerinden ücretlendirin.
İş bir: bir ajanın ev sahibi içinden bir cüzdan KULLANMASINA izin verin. @blockchain0x/mcp sunucusu, @blockchain0x/node SDK'sının ince, durumsuz bir proxy'sidir. Claude Desktop, Cursor veya VS Code'a beş cüzdan aracı sunar ve API anahtarınızın kapsamı, izni ve dönem başına limitleri, diğer API çağrılarında olduğu gibi arka uç tarafından uygulanır. Sunucu hiçbir anahtar tutmaz ve hiçbir şey depolamaz.
İş iki: ajansları SİZİN araçlarını çağırmaları için ücretlendirin. MCP, araç çağrısını sorunsuz hale getirdi, bu harika, ta ki sunucunuz dışa çıkış, tokenler ve üçüncü taraf API maliyetlerini ücretsiz olarak yemeye başlayana kadar. 402 Ödeme Gereklidir deseni tam burada geçerlidir. requirePayment, barındırılan bir ödeme URL'si ile yapılandırılmış bir x402 zorluğu oluşturur; bir araç ödenmediğinde bunu geri döndürürsünüz ve ödeme yerleştiğinde çağrıyı geçersiniz. x402'yi konuşan istemciler otomatik olarak ödeme yapar; geri kalanları URL'yi bir insana gösterir.
İkisini çalıştırmanın iki yolu. Barındırılan için kurulum yok.
Bunu yerel olarak stdio üzerinden npx ile çalıştırın (anahtarınız makinenizde kalır), veya herhangi bir MCP sunucusunu barındırılan Streamable HTTP URL'sine yönlendirin ve anahtarı Bearer token olarak geçirin. Her ikisi de sunucunun MCP yapılandırmasına doğrudan düşer. Yerel yol için Node 20+.
{ "mcpServers": { "blockchain0x": { "command": "npx", "args": ["-y", "@blockchain0x/mcp"], "env": { "BLOCKCHAIN0X_API_KEY": "sk_live_...", "BLOCKCHAIN0X_API_BASE_URL": "https://api.blockchain0x.com" } } } }
{ "mcpServers": { "blockchain0x": { "url": "https://mcp.blockchain0x.com/mcp", "headers": { "Authorization": "Bearer sk_live_..." } } } }
BLOCKCHAIN0X_API_KEY, kontrol panelinizden alınan bir sk_test_ testnet veya sk_live_ mainnet anahtarıdır; BLOCKCHAIN0X_API_BASE_URL varsayılan olarak https://api.blockchain0x.com'dur. Sunucu anahtarınızı arka uca iletir ve hiçbir şey saklamaz, bu nedenle bu anahtar üzerindeki kapsam ve limitler tam olarak ajanın yapabileceği şeylerdir. Beş aracı şunlardır: get_wallet, list_wallets, get_transaction, send_payment ve settle_payment_request.
Gerçek requirePayment oluşturucusu ile bir aracı kapatın.
requirePayment, @blockchain0x/mcp'den saf bir fonksiyondur. Bir araç ödenmediğinde çağırırsınız, bir x402 402 zorluğu (fiyat, cüzdanınız, barındırılan bir ödeme URL'si) oluşturur ve bu gövdeyi standart MCP hata biçiminde geri verirsiniz. Handler'ınızı sarmalar ve kimin ödediğini takip etmez - bu kısım sizin, bu da yardımcıyı küçük ve dürüst tutar.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { requirePayment } from "@blockchain0x/mcp"; import { z } from "zod"; const server = new McpServer({ name: "docs-search-mcp", version: "1.0.0" }); server.tool( "search_docs", "Semantic search across our private docs", { query: z.string() }, async ({ query }, extra) => { if (!hasPaid(extra)) { // Mint an x402 402 challenge and hand it back to the caller. const { body } = requirePayment({ amountUsdc: "0.10", payTo: "0xYourWallet", hostedUrl: "https://pay.blockchain0x.com/checkout/abc", }); return { content: [{ type: "text", text: JSON.stringify(body) }], isError: true }; } const results = await runVectorSearch(query); return { content: [{ type: "text", text: JSON.stringify(results) }] }; }, );
Agent search_docs unpaid çağırdığında 402 body'sini alır. x402 konuşan istemciler bunu otomatik öder; Claude Desktop ve Cursor, bir insan için checkout URL'sini gösterir. Ödeme settle olduktan sonra o çağıranı paid olarak işaretlersiniz (bir sonraki bölüm) ve çağrı geçer. MCP yerine düz bir HTTP server mı tercih ediyorsunuz? Receive-side x402 adapter - Express için createX402Middleware, Fastify için createX402Plugin - aynı gating'i framework katmanında yapar.
Webhook geldiğinde çağrıyı ödenmiş olarak işaretleyin.
Bir ödeme yerleştiğinde, Blockchain0x imzalı bir payment.received olayını webhook URL'nize POST eder. Bunu Node SDK'dan webhooks.verify ile doğrulayın, ardından arayanın ödeme yaptığını zaten çalıştığınız herhangi bir mağazada kaydedin. Yapılandırılacak gönderilmiş bir makbuz önbelleği yoktur - o kısmın sahibi sizsiniz, bu da sürpriz bir altyapı olmadığı anlamına gelir.
import express from "express"; import { webhooks } from "@blockchain0x/node"; const app = express(); // Capture the RAW body. The HMAC is over the exact bytes on the wire. app.use(express.raw({ type: "application/json" })); app.post("/webhooks/payment", (req, res) => { const result = webhooks.verify({ headers: req.headers, rawBody: req.body, // Buffer, raw bytes secret: process.env.BLOCKCHAIN0X_WEBHOOK_SECRET!, }); if (!result.ok) return res.status(400).json({ code: result.code }); if (result.eventType === "payment.received") { // Mark this payer paid however you like - a DB row, a Redis key, your call. markPaid(result.eventId); } res.status(200).send("ok"); });
webhooks.verify, sabit zamanda HMAC-SHA256 yapar ve ayrıştırılmış bir birleşim döndürür, bu nedenle result.ok üzerinde try/catch olmadan dallanırsınız. Ham gövdeyi okuyun, ayrıştırılmış bir kopyayı değil, çünkü imza tam baytları kapsar. Gönderilen olaylar payment.received, payment.sent, wallet.deployed ve webhook.test'tir; cüzdanınıza yapılan bir ödeme payment.received'dır. 'Bu çağrıcı ödedi' ifadesini nerede saklayacağınız - bir veritabanı satırı, bir Redis anahtarı, tek bir işlem için bir bellek içi harita - sizin çağrınızdır.
Sunucu açıktır ve durum bilgisi taşımamaktadır. Okuyun.
MCP server ve requirePayment builder, veritabanı ve volume olmadan Node SDK üzerinde ince bir pass-through katmanıdır, bu yüzden denetlenecek çok fazla şey yok - amaç da bu. Native MCP OAuth 2.1 planlanan bir sonraki adımdır; yapıştırılan anahtar yolu önce çıkar çünkü mevcut API-key trust model'ini yeniden kullanır.
github.com/tosh-labs/blockchain0x-nodeTam tool listesi, scope'lar ve hosted environment URL'leri the docs içinde belgelenmiştir. Gerçek bir anahtarı bağlamadan önce test etmek için staging ve dev hosted endpoint'ler production ile birlikte mevcuttur.
Beş MCP'ye özgü kaçınılması gereken tuzak.
Bunlar, üretimde ücretli MCP sunucuları çalıştıran operatörlerden gelmektedir. Çoğu, önbellek mimarisi ve MCP protokolünün belirli hata formatıyla ilgilidir.
requirePayment bir yapıcıdır, ara katman değildir.
requirePayment saf bir fonksiyondur: onu çağırırsınız, { status: 402, body } döner ve bir araç ödenmediğinde o gövdeyi geri verirsiniz. Handler'ınızı sarmaz, kimin ödediğini takip etmez ve hiçbir neden veya önbellek penceresi seçeneği almaz - sadece amountUsdc, payTo, hostedUrl ve isteğe bağlı bir ağ ve açıklama. Ödeme durumunu takip etmek sizin işinizdir: veritabanınızdaki bir satır, kendi Redis'inizdeki bir anahtar, ne uygunsa. Blockchain0x, zorluk oluşturucu ve yerleşim webhook'unu gönderir, bir makbuz önbelleği değil.
stdio, anahtarınızı makinenizde tutar.
Sunucuyu npx ile çalıştırın ve ortamda BLOCKCHAIN0X_API_KEY ile anahtarınız asla kutunuzdan çıkmaz - yerel olarak okunur, ağ başlığı olarak gönderilmez. Barındırılan URL, ters bir ticarettir: sıfır kurulum, ancak anahtarı mcp.blockchain0x.com'a Bearer token olarak yapıştırırsınız. Geliştiricinin kendi makinesi için stdio'yu seçin, paylaşımlı bir dağıtım için barındırılanı seçin.
Sadece kontrol paneli yüzeyleri açığa çıkarılmamıştır
Sunucu, @blockchain0x/node üzerinde ince, durum bilgisi taşımayan bir proxy'dir. Tam olarak beş aracı yüzeye çıkarır: get_wallet, list_wallets, get_transaction, send_payment, settle_payment_request. Kimlik değişiklikleri, API anahtarı ve webhook CRUD, çekimler ve faturalama, API anahtarı kimlik doğrulaması altında sert bir şekilde engellenmiştir ve sunucu asla SDK'nın ötesine geçmez. Bunlar için bir araç beklemeyin - tasarım gereği kontrol panelinde yer alırlar.
send_payment idempotent'tir ve yeniden deneme yapmaz.
The send_payment tool wraps payments.create: it auto-mints an Idempotency-Key so a retried call collapses to one transfer, and it does not retry on its own. It can also answer 503 until the chain adapter is wired for your network. If the model gets a 503, do not let it hammer the tool - surface the state and move on. amountWei is USDC base units (6 decimals), so 0.01 USDC is the string "10000".
requirePayment içindeki amountUsdc, 6 ondalıklı bir string'dir
requirePayment validates amountUsdc as a USDC decimal with at most six fractional digits, so "0.10" is fine and "0.1234567" throws. payTo and hostedUrl are required; network defaults to mainnet. Keep the hostedUrl pointing at a real checkout you control (the pattern is https://pay.blockchain0x.com/checkout/<id>). A malformed amount fails fast rather than minting a broken challenge.