Voltar as noticias
Como Construir um Servidor MCP Pay-Per-Call com x402 e USDC
MCP ProtocolMediaEN

Como Construir um Servidor MCP Pay-Per-Call com x402 e USDC

Dev.to - MCP·30 de abril de 2026

Se você construiu servidores MCP para Claude Code, você conhece o problema de distribuição: qualquer um que instala seu servidor tem acesso ilimitado e gratuito. Não há uma maneira limpa de cobrar por chamada sem criar sua própria autenticação + cobrança.

x402 resolve isso na camada HTTP. Aqui está como construir um servidor MCP pay-per-call onde cada chamada de ferramenta custa USDC — liquidado instantaneamente na Base.

O que é x402?

x402 é um protocolo de pagamento HTTP que revive o código de status 402 Payment Required, que foi abandonado. O fluxo:

  1. O cliente solicita um recurso
  2. O servidor retorna 402 com um cabeçalho PAYMENT-REQUIRED contendo detalhes de pagamento (preço, carteira, rede)
  3. O cliente assina uma transferência de USDC usando EIP-3009 (sem gás necessário do cliente)
  4. O cliente tenta novamente com um cabeçalho PAYMENT-SIGNATURE
  5. O facilitador Coinbase valida e liquida na cadeia
  6. O servidor retorna o recurso

Sem chaves de API. Sem infraestrutura de cobrança. Sem assinaturas. Apenas HTTP + cripto.

A Pilha

@modelcontextprotocol/sdk  — servidor MCP
@x402/core                 — protocolo cliente x402
@x402/evm                  — assinatura de pagamento EVM
viem                       — gerenciamento de carteira/conta

Construindo o Cliente de Pagamento

A chave é conectar corretamente o cliente x402. A API v2 (atual a partir de @x402/core 2.11) se parece com isso:

const { x402Client, x402HTTPClient } = require("@x402/core/client");
const { ExactEvmScheme } = require("@x402/evm/exact/client");
const { toClientEvmSigner } = require("@x402/evm");
const { privateKeyToAccount } = require("viem/accounts");

function buildHttpClient() {
  const key = process.env.WALLET_PRIVATE_KEY;
  const pk = key.startsWith("0x") ? key : "0x" + key;
  const account = privateKeyToAccount(pk);
  const signer = toClientEvmSigner(account);
  const coreClient = new x402Client().register("eip155:*", new ExactEvmScheme(signer));
  return new x402HTTPClient(coreClient);
}

Importante: passe account para toClientEvmSigner, não walletClient. No viem v2, walletClient.address é indefinido — o endereço está em account.address.

Fazendo uma Solicitação Paga

O cliente http não tem um método .fetch() na v2. Você lida com o fluxo 402 manualmente:

async function paidFetch(httpClient, url) {
  const res = await fetch(url);

  if (res.status !== 402) {
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    return res.json();
  }

  // Extraia os requisitos de pagamento do cabeçalho
  let body;
  try { body = await res.clone().json(); } catch (_) {}
  const paymentRequired = httpClient.getPaymentRequiredResponse(
    (name) => res.headers.get(name),
Contexto Triplo Up

A implementação de servidores MCP com cobrança por chamada pode transformar a forma como empresas brasileiras monetizam serviços digitais. O uso de protocolos como x402 pode facilitar a integração de pagamentos em sistemas existentes, aumentando a eficiência e a receita.

Noticias relacionadas

Gostou do conteudo?

Receba toda semana as principais novidades sobre WebMCP.