
Como Construir um Servidor MCP Pay-Per-Call com x402 e USDC
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:
- O cliente solicita um recurso
- O servidor retorna
402com um cabeçalhoPAYMENT-REQUIREDcontendo detalhes de pagamento (preço, carteira, rede) - O cliente assina uma transferência de USDC usando EIP-3009 (sem gás necessário do cliente)
- O cliente tenta novamente com um cabeçalho
PAYMENT-SIGNATURE - O facilitador Coinbase valida e liquida na cadeia
- 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),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

Construir vs. Comprar para Infraestrutura de Conhecimento em IA: Capacidade Primeiro, Custo Depois
O artigo discute a escolha entre construir ou comprar uma infraestrutura de conhecimento em IA, destacando a importância da arquitetura e das necessidades específicas do caso de uso em vez de apenas comparar recursos.

O Padrão MCP Empresarial: Proxy, Agregação, Hospedagem
O artigo explora como o padrão MCP empresarial melhora a eficiência no uso de servidores, reduzindo o consumo de tokens e centralizando a gestão de ferramentas em ambientes de desenvolvimento.

O papel da 'liquidação' nas camadas da economia de agentes
O termo 'liquidação' é utilizado de maneiras distintas na economia de agentes, com diferentes implicações e modelos de confiança. Este artigo explora quatro significados e suas aplicações práticas.
Gostou do conteudo?
Receba toda semana as principais novidades sobre WebMCP.