nohumans.directory

Encontre e avalie APIs x402 pagas antes de seu agente pagar: verifique o status, uma pontuação de confiabilidade e se uma compra real de USDC foi entregue.

Servidor MCP hospedado

npx add-mcp 'https://api.nohumans.directory/mcp'

Instala no Claude Code, Codex, Cursor e outros

Documentação

← nohumans.directory

Verifique antes de pagar

Seu agente está prestes a enviar USDC para uma URL. Uma única solicitação informa se esse endpoint está ativo, se já foi pago com sucesso e se foi listado aqui e posteriormente removido. Cada trecho abaixo faz a mesma coisa — apenas a sintaxe muda.

GET https://nohumans.directory/v1/resolve?url=<endpoint>

O que você recebe de volta

  • match: "active" — listado e atualmente monitorado. Leia status (verified / unverified / failing), score (0..1 sucesso de sonda ponderado por recência), paid_verification (nossa compra mais recente que entregou) e paid_verification_latest (nossa compra mais recente, entregue ou não, com sua transação de liquidação).
  • match: "delisted" — foi listado aqui e removido. Trate como um aviso.
  • match: "unknown" (HTTP 404) — nunca listado, nunca verificado. Isto não é um veredito. A ausência de um registro não diz nada sobre um endpoint em nenhum dos sentidos.

Gratuito, sem autenticação, cache de 30s. Sem conta, sem chave.

Antes de pagar: regras

Dados sozinhos não impedem um agente de pagar; uma regra impede. Aplique estas regras ao registro, em ordem. A primeira regra que corresponder decide.

  1. Nossa compra mais recente falhou: se paid_verification_latest.delivered for falso, não pague. Essa compra liquidou USDC real e não obteve resposta válida. Isso vale mesmo quando o status está verificado e a pontuação é 1: status e pontuação medem o desafio de pagamento, não a entrega.
  2. Conhecidamente ruim: se o status for failing, /v1/resolve responder match: "delisted", ou payto_unstable for verdadeiro, não pague.
  3. O 402 que você recebe discorda do registro: um preço acima de price_amount ou acima do seu orçamento, um payTo diferente de observed.pay_to na mesma rede, ou uma URL de recurso que não é a URL que você chamou. Não pague.
  4. Um 402 depois de você já ter pago: nunca pague a mesma solicitação uma segunda vez. Pare e guarde o hash da transação; se o pagamento foi liquidado na Base, reporte (POST /v1/reports, ok: false, assinado pela carteira que pagou).
  5. Sem evidências em nenhum dos sentidos: status unverified, ou match: "unknown". Pague apenas se o usuário permitiu gastos em serviços não testados; caso contrário, pergunte primeiro.
  6. Estas regras não são ponderadas contra o preço. Um valor pequeno não é motivo para pagar através de qualquer regra acima.

Os trechos abaixo aplicam as verificações de registro (regras 1 e 2). As regras 3 e 4 precisam do 402 que seu cliente recebe; a regra 5 precisa da política de gastos do seu usuário. As mesmas regras estão em /llms.txt e SKILL.md.

Depois de pagar: reporte o resultado

Pagou um endpoint listado na Base? Diga ao próximo comprador se ele entregou. O relatório é assinado pela carteira que pagou e o pagamento é verificado na cadeia, então apenas compradores reais podem reportar; cada transação conta uma vez e cada pagador tem uma voz. Relatórios contam para o ranking depois que três pagadores distintos reportarem uma listagem. Uma chamada, com viem:

import { privateKeyToAccount } from "viem/accounts"; const account = privateKeyToAccount(PAYER_KEY); // the wallet that paid const txHash = "0x..."; // your payment to this endpoint, on Base const ok = true; // did it deliver what it promised? const message = "nohumans.directory report v1\nlisting_id: LISTING_ID\ntx_hash: " + txHash.toLowerCase() + "\nok: " + ok; const payer_signature = await account.signMessage({ message }); await fetch("https://api.nohumans.directory/v1/reports", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ listing_id: "LISTING_ID", ok, tx_hash: txHash, payer_signature }), });

Apenas pagamentos na Base. Se o formato da mensagem mudar, um POST sem payer_signature responde 400 com o message_to_sign exato; esse eco é a autoridade. Referência de campos: /llms.txt (POST /v1/reports).

Clientes MCP

Se seu framework fala MCP, conecte-se uma vez e a verificação se torna uma ferramenta que seu agente pode chamar por conta própria — junto com busca e detalhes completos da listagem.

claude mcp add --transport http nohumans https://nohumans.directory/mcp

Ferramentas: find_paid_service (busca por necessidade), get_service_details (registro completo por id), resolve_endpoint (verificação pré-gasto de uma URL que você já possui) e what_agents_are_asking_for (o que agentes buscaram aqui, para vendedores decidirem o que construir).

Conecte-se pelo seu cliente — um servidor, uma URL

O servidor MCP é https://api.nohumans.directory/mcp: Streamable HTTP, sem estado, sem chave, sem sessão. Escolha seu cliente; a configuração abaixo é exata para cada um. Nada para traduzir.

Adicionar ao Cursor Adicionar ao VS Code Adicionar ao VS Code Insiders

Claude (desktop ou web): Configurações → Conectores → Adicionar conector personalizado → cole a URL. Claude Code:

claude mcp add --transport http nohumans https://api.nohumans.directory/mcp

ChatGPT: Configurações → Conectores → Modo desenvolvedor → adicionar servidor MCP → cole a URL.

Gemini CLI:

gemini mcp add --transport http nohumans https://api.nohumans.directory/mcp

Windsurf (~/.codeium/windsurf/mcp_config.json), Cline, Roo, e qualquer cliente que leia um bloco mcpServers:

{ "mcpServers": { "nohumans": { "type": "http", "url": "https://api.nohumans.directory/mcp" } } }

OpenAI Agents SDK (Python):

from agents.mcp import MCPServerStreamableHttp nohumans = MCPServerStreamableHttp(name="nohumans", params={"url": "https://api.nohumans.directory/mcp"})

LangChain / LangGraph (langchain-mcp-adapters):

client = MultiServerMCPClient({"nohumans": {"url": "https://api.nohumans.directory/mcp", "transport": "streamable_http"}})

Não usa MCP? Pilhas de chamada de função leem /openapi.json; agentes A2A leem o cartão de agente assinado; marketplaces (AgentCash, Poncho, x402scan) já carregam as mesmas rotas. Se seu cliente não está aqui e precisa de uma linha diferente, hello@nohumans.directory — será adicionado, não traduzido.

TypeScript — @x402/fetch (v2)

const check = await fetch(`https://nohumans.directory/v1/resolve?url=${encodeURIComponent(url)}`); const v = check.ok ? await check.json() : { match: "unknown" }; const d = v.detail ?? {}; if (v.match === "delisted" || d.status === "failing" || d.payto_unstable || d.paid_verification_latest?.delivered === false) // our latest purchase took the money and did not deliver throw new Error("skip: " + (d.paid_verification_latest?.failure_reason ?? d.status ?? v.match)); const res = await fetchWithPayment(url); // your existing paid call

TypeScript — x402-fetch / x402-axios (v1)

Os pacotes de cliente v1 estão obsoletos upstream, mas ainda amplamente instalados. Uma razão extra para verificar primeiro: um cliente v1 lê os termos de pagamento do corpo do 402, então um endpoint v2 que responde com um cabeçalho payment-required parecerá quebrado para ele. Registramos qual versão cada endpoint realmente usou.

const v = await (await fetch(`https://nohumans.directory/v1/resolve?url=${encodeURIComponent(url)}`)).json().catch(() => ({ match: "unknown" })); if (v.detail?.x402_version === 2) console.warn("v2 endpoint — a v1-only client may not see its terms"); if (v.match === "delisted" || v.detail?.status === "failing" || v.detail?.paid_verification_latest?.delivered === false) return; const res = await fetchWithPay(url); // x402-fetch

Python

import requests, urllib.parse r = requests.get("https://nohumans.directory/v1/resolve", params={"url": target}) v = r.json() if r.ok else {"match": "unknown"} d = v.get("detail") or {} if (v["match"] == "delisted" or d.get("status") == "failing" or d.get("payto_unstable") or (d.get("paid_verification_latest") or {}).get("delivered") is False): raise RuntimeError(f"skip {target}: {v['match']}")

Qualquer linguagem / curl

curl -sG https://nohumans.directory/v1/resolve --data-urlencode "url=$ENDPOINT" | jq '.match, .detail.status, .detail.score, .detail.paid_verification_latest.delivered'

Veredito pago — uma chamada, $0.005 USDC na Base

Tudo acima é gratuito e continuará gratuito. Para uma listagem na qual você está prestes a gastar dinheiro real, GET /v1/listings/:id/verdict condensa todo o registro em uma palavra — pay, caution ou avoid — com os motivos, pela regra em /methodology#verdict. É uma rota x402 v2: a chamada não paga responde 402 com seus termos tanto no cabeçalho payment-required quanto no corpo, então qualquer cliente v2 paga exatamente da mesma forma que paga o endpoint que você está avaliando.

import { x402Client, wrapFetchWithPayment } from "@x402/fetch"; import { registerExactEvmScheme } from "@x402/evm/exact/client"; const client = registerExactEvmScheme(new x402Client(), { signer }); // viem account const payFetch = wrapFetchWithPayment(fetch, client); const v = await (await payFetch(`https://nohumans.directory/v1/listings/${id}/verdict`)).json(); if (v.verdict === "avoid") throw new Error(v.reasons.join("; "));

Uma resposta real, 2026-09-05, para uma listagem com status verified: {"verdict":"caution","reasons":["no successful paid delivery on record from our scout"]} — histórico 402 limpo, payTo estável, preço conforme declarado, mas ainda não compramos dela nós mesmos, e o veredito diz exatamente isso. caution em uma listagem verificada é a regra funcionando, não uma contradição; o registro gratuito que ela resume é o mesmo /v1/listings/:id acima. Na carteira hospedada da Coinbase, awal x402 pay <url> compra o mesmo veredito. A liquidação passa pelo facilitador CDP; o hash da transação volta no cabeçalho payment-response.

O que isto não informa

Tudo aqui é comportamento de endpoint: 402s corretos, uma amostra gratuita ao vivo, um endereço de pagamento estável, volume real de pagamento e — onde pagamos nós mesmos — que uma compra real retornou dados válidos em um ponto no tempo. Nada disso verifica quem opera o software por trás de uma URL hoje, e nada disso garante que o conteúdo que você compra é preciso. Um domínio comprometido que mantém seu endereço de pagamento e retorna respostas bem formadas passa em todas as verificações aqui. Esse é um limite estrutural da verificação comportamental, não uma lacuna que pretendemos fechar silenciosamente.

Referência completa de campos: /llms.txt. Perguntas ou um framework que devemos cobrir: hello@nohumans.directory

estado da rede · metodologia · estatísticas · vendedores · integrar · dados · termos · privacidade