Ana içeriğe atla
ÖğrenKılavuzlarMCP sunucunuzu para kazanın
KILAVUZ

MCP sunucunuzu 10 dakikada para kazanın.

10 dakika
KISA CEVAP

@blockchain0x/mcp'yi kurun ve bir premium araç içinde, arayan ödemediğinde requirePayment çağrısını yapın - bu, barındırılan bir ödeme URL'si ile bir x402 402 zorluğu oluşturur, bunu geri döndürürsünüz. payment.received webhook'u uzlaşmayı onayladığında, arayanı kendi mağazanızda ödenmiş olarak işaretlersiniz ve araç çalışır. Ücretsiz araçlar ücretsiz kalır. Basit bir HTTP sunucusu için, alma tarafındaki x402 adaptörü aynı işi yapar.

ÖN KOŞULLAR

Başlamadan önce.

  • Node veya Python'da resmi Model Context Protocol SDK'sını kullanan çalışan bir MCP sunucusu. Henüz bir tane yoksa, önce yukarı akış şablonuyla bir tane oluşturun.
  • Bir Blockchain0x hesabı ve bir ajan profili (5 dakikalık kurulum için add-payments-to-agent kılavuzuna bakın).
  • Bir API anahtarı (bu kılavuz için sk_test_ kullanın).
  • Kimlerin ödeme yaptığını hatırlamak için küçük bir depo (bir veritabanı satırı veya bir Redis anahtarı) - kodunuz buna sahiptir, ödeme webhook'u tarafından güncellenir.
  • Hangi araçlar için ücret almak istediğinizi ve çağrı başına fiyatı net bir şekilde belirleyin. Tasarım kalıpları için ücretli MCP araç sözlüğü girişi'ne bakın.
ADIM 1 / 4

Paketi kurun.

@blockchain0x/mcp exports requirePayment, a pure function that mints an x402 402 challenge for a tool. It is npm (TypeScript) only. If you run a plain HTTP server instead of an MCP one, install the receive-side x402 adapter and gate routes with it.

Kurulum
# Gate your own MCP tools with the requirePayment 402 builder:
npm install @blockchain0x/mcp

# Or gate a plain HTTP server with the receive-side x402 adapter + SDK:
npm install @blockchain0x/x402 @blockchain0x/node
ADIM 2 / 4

requirePayment ile bir aracı kapatın.

Inside the tool, check your own paid-state for the caller. If they have not paid, call requirePayment and return the resulting 402 body; if they have, run the work. requirePayment is a pure builder - it does not wrap the handler and does not track payment, so the gating policy stays in your code.

MCP aracı (TypeScript)
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { requirePayment } from "@blockchain0x/mcp";
import { z } from "zod";

const server = new McpServer({ name: "premium-data-mcp", version: "1.0.0" });

server.tool(
  "get_quote_realtime",
  "Real-time quote (paid)",
  { ticker: z.string() },
  async ({ ticker }, extra) => {
    if (!hasPaid(extra)) {
      // Pure function: mint an x402 402 challenge and hand the body back.
      const { body } = requirePayment({
        amountUsdc: "0.005",
        payTo: "0xYourWallet",
        hostedUrl: "https://pay.blockchain0x.com/checkout/abc",
      });
      return { content: [{ type: "text", text: JSON.stringify(body) }], isError: true };
    }
    const quote = await fetchLiveQuote(ticker);
    return { content: [{ type: "text", text: JSON.stringify(quote) }] };
  },
);
Düz HTTP sunucusu (alma tarafı x402)
import express from "express";
import { createX402Middleware } from "@blockchain0x/x402/server/express";
import { createClient } from "@blockchain0x/node";

const sdk = createClient({ apiKey: process.env.BLOCKCHAIN0X_API_KEY! });
const app = express();

// Not an MCP server? Gate a plain HTTP route the same way. The middleware
// answers unpaid requests with a 402 and lets paid ones through.
// Configure the price and recipient per the x402 docs.
app.use("/quote", createX402Middleware({ sdk }));

402 gövdesi requirePayment, ödenmemiş bir çağrıcıya döner:

// requirePayment returns { status: 402, body }. The body an unpaid caller sees:
{
  "error": "payment_required",
  "amountUsdc": "0.005",
  "payTo": "0xYourWallet",
  "hostedUrl": "https://pay.blockchain0x.com/checkout/abc",
  "network": "mainnet"
}
ADIM 3 / 4

Ödemeyi onaylayın, ardından kimin ödediğini hatırlayın.

When a caller pays the checkout, Blockchain0x POSTs a signed payment.received event to your webhook. Verify it with webhooks.verify from @blockchain0x/node, then write the paid state to a store you control - a database row, a Redis key, your call. That store is what the tool checks in Step 2. There is no shipped receipt cache; you own where paid-state lives and how long it lasts.

Webhook işleyici (TypeScript)
import express from "express";
import { webhooks } from "@blockchain0x/node";

const app = express();
app.use(express.raw({ type: "application/json" }));

app.post("/webhooks/payment", (req, res) => {
  const result = webhooks.verify({
    headers: req.headers,
    rawBody: req.body, // RAW bytes
    secret: process.env.BLOCKCHAIN0X_WEBHOOK_SECRET!,
  });
  if (!result.ok) return res.status(400).json({ code: result.code });

  if (result.eventType === "payment.received") {
    // Remember the payer however you like - a DB row, a Redis key, your call.
    markPaid(result.eventId);
  }
  res.status(200).send("ok");
});

Bir ödemenin erişim süresi sizin kararınızdır - tek bir çağrı, bir oturum, bir saat. Araç için fiyatlandırmanıza uygun bir süre sonu ayarlayın. Normal bir oturumun bir ödemeyi yeniden kullanacak kadar uzun, kötüye kullanımın sınırlı kalacak kadar kısa olmalıdır.

ADIM 4 / 4

Dağıtım yapın ve doğrulayın.

Sunucuyu gönderin. Ücretsiz araçlar sonuçlarını hemen döndürmelidir; kapalı araçlar, yeni bir istemciden yapılan ilk çağrıda 402 gövdesini döndürmeli, ardından o çağrıyı ödenmiş olarak işaretledikten sonra çalışmalıdır. Canlıya geçmeden önce her iki yolu da Base Sepolia'ya karşı bir sk_test_ anahtarıyla doğrulayın.

İlk günde izlenecek iki sinyal: dönen 402 sayısı (funnel'ın en üstü) ve bir 402'den sonraki başarılı araç çalıştırma sayısı (dönüşümünüz). Dönüşüm beklenenden çok daha düşükse, fiyat muhtemelen yanlıştır. Ücretli durum mağazanızın hit oranını da izleyin - eğer sıfıra yakınsa, erişim pencereniz çok kısa ve ödeme yapan arayanlardan tekrar ödeme isteniyor.

YAYGIN TUZAKLAR

İlk kez MCP gelir elde edenleri zor durumda bırakan beş şey.

Ücretsiz araçları yanlışlıkla kapatmak

Her aracı 'her ihtimale karşı' kapatmak cazip geliyor. Yapmayın. Ücretli MCP sunucularının tüm değeri, ücretsiz araçların aynı sunucuda ücretli araçlarla bir arada bulunmasıdır, böylece istemci ücretsiz keşif ve meta veri araçlarını ödemeden kullanabilir. Gerçekten premium kaynakları tüketen araçlar için yalnızca bir 402 oluşturun; geri kalanını düz sonuçlar olarak bırakın.

requirePayment bir yapıcıdır, ara katman değildir.

requirePayment saf bir fonksiyondur: bir araç ödenmediğinde çağırırsınız, { status: 402, body } döner ve gövdeyi geri verirsiniz. Handler'ınızı sarmalar ve kimin ödediğini takip etmez. amountUsdc, payTo, hostedUrl ve isteğe bağlı bir ağ ve açıklama alır - başka bir şey yok. Bir çağrıcının ödeme yapıp yapmadığı, kendi mağazanıza karşı yaptığınız bir kontroldür.

Gönderilmiş bir makbuz önbelleği yoktur.

Blockchain0x, 402 oluşturucusunu ve yerleşim webhook'unu gönderir, bir makbuz deposu yardımcısı değil. 'Bu arayan ödedi' ifadesinin nerede bulunacağına siz karar verirsiniz - bir veritabanı satırı, bir Redis anahtarı, tek bir işlem için bir bellek içi harita - ve ödeme.received webhook'u geldiğinde bunu değiştirirsiniz. Bu, politikanın (bir ödemenin ne kadar süreyle erişim sağladığı) tamamen sizin elinizde kalmasını sağlar.

Müşterinin sahip olduğunu iddia ettiği bir makbuzu güvenilir bulmak

Arayanın ödeme yaptığını iddia etmesine izin vermeyin. Gerçekliğin kaynağı, webhooks.verify (veya belgelenmiş HMAC) ile webhook gizlinizle doğrulanan payment.received webhook'udur. Ödeyeni yalnızca doğrulanmış bir olaydan sonra ödenmiş olarak işaretleyin ve aracı o sunucu tarafı durumuna göre engelleyin - asla istemcinin gönderdiği bir şeye göre değil.

Ücretli araç gecikmesi hakkında metrik yok

Müşteri ile araç yürütmesi arasında bir ödeme adımı koymak, çağrıcının ilk çağrıda ödeme yapması ve yerleşmesi için aldığı süreyi ekler, ardından onları ödenmiş olarak işaretlediğinizde neredeyse sıfıra düşer. Her iki dalı da alet edin, böylece bir müşteri şikayet ettiğinde 'araç yavaş' ile 'ödeme yavaş' arasında ayırt edebilirsiniz. Ölçü olmadan darboğazı yanlış teşhis edersiniz.

SONRAKİ ADIMLAR

Bir kez ödenen trafik akmaya başladığında.

Monetizasyon yerindeyken, en faydalı sonraki adımlar güvenilir webhook handling'dir (payment event'lerini kaçırmamak için), spend controls'dur (diğer agent'lara da ödeme yapan bir MCP server'ın bounded kalması için) ve testnet-first flow'dur (fiyatlandırma değişikliklerini gerçek para yakmadan yayına alabilmek için).

Tam API referansı docs.blockchain0x.com'da. İlgili ürün yüzeyi: MCP entegrasyonu.

Son gözden geçirme: 2026-05-15. CC BY 4.0 altında yayımlanmıştır.

Araç çağrısı başına ücret alın.

402 döndür, fiyatını belirle, USDC kabul et. Başlamak ücretsiz.