Task402 Agent Evidence Tools

Evidência pay-per-call para agentes de IA: indexação e ferramentas de citação de PDF em texto nativo, evidência web pública, análise de contratos OpenAPI e dados Base somente leitura via USDC x402.

Servidor MCP hospedado

npx add-mcp 'https://task402.xyz/mcp'

Instala no Claude Code, Codex, Cursor e outros

Documentação

Task402 Agent Evidence Tools

CI Live MCP endpoint x402 payments Smithery

Forneça evidências limitadas a agentes a partir de PDFs, páginas web públicas, contratos OpenAPI e dados da rede Base. Conecte-se ao serviço MCP hospedado com 20 ferramentas em https://task402.xyz/mcp; nenhum servidor local, chave de API ou carteira é necessário para descoberta. Chamadas pagas usam x402 v2 USDC na Base. Conectar um host MCP não concede automaticamente a ele um signatário de pagamento.

Conecte seu agente

Para Cursor, mescle examples/cursor.mcp.json em .cursor/mcp.json. Para VS Code, mescle examples/vscode.mcp.json em .vscode/mcp.json. Outros clientes Streamable HTTP podem usar:

{
  "mcpServers": {
    "task402": { "url": "https://task402.xyz/mcp" }
  }
}

Inicialize a conexão e execute tools/list para inspecionar esquemas executáveis. Com Node.js 24 e as dependências deste repositório instaladas, npm run discover realiza a descoberta por meio do SDK oficial do MCP e imprime apenas os nomes das ferramentas. Ele nunca chama uma ferramenta paga nem assina um pagamento.

Cada ferramenta hospedada anuncia um esquema de saída específico da ferramenta, descrições de parâmetros e anotações de segurança do MCP. Os agentes podem, portanto, planejar a forma do resultado e o comportamento de nova tentativa a partir de tools/list antes de aprovar qualquer pagamento x402.

FerramentasCobrança na verificação ao vivo de 12 de outubro de 2026
generate_pdfUS$ 0,01 por PDF
web_evidenceUS$ 0,005 por página HTTPS pública
inspect_openapiUS$ 0,001 por especificação
plan_api_request, diff_openapiUS$ 0,002 por chamada
get_chain_balance, get_chain_transaction, get_erc20_balanceUS$ 0,001 por leitura
get_pdf_jobIncluído na geração; requer o recurso de job
inspect_pdf, get_document_map, search_document, batch_search_document, prepare_document_context, extract_document_fields, read_document, verify_document_citation, compare_pdfs, validate_pdf_text, render_pdf_page_regionIncluído após indexação paga de PDF; requer recursos de documento

A indexação de PDF é a operação REST separada POST /v1/documents (US$ 0,01 por PDF); o upload binário não é uma ferramenta MCP. O download de PDF gerado também é somente REST. Leia /v1/pricing e o desafio de pagamento para os termos atuais antes de aprovar o pagamento. As ferramentas de PDF com texto nativo não fornecem OCR nem verificam a veracidade factual.

Comece com docs/FIRST-PAID-CALL.md para um fluxo de trabalho de desafio, nova tentativa assinada e resultado. Use docs/PUBLISHING.md para publicar o repositório e os metadados MCP remotos.

Arquitetura do serviço

Este projeto converte Markdown em arquivos PDF paginados por meio de um serviço compartilhado usado por REST e MCP. O executor local usa Playwright Chromium e SQLite; o adaptador Cloudflare Worker usa Browser Run Quick Actions, D1 e R2. O caminho de pagamento ao vivo usa o cliente facilitador oficial do SDK x402, verifica antes da renderização e liquida somente após um artefato PDF ser armazenado.

As operações pagas são generate_pdf, ingest_document, web_evidence, inspeção/planejamento/diff de OpenAPI e leituras de métodos fixos da cadeia Base. Recuperação, citação, busca em lote, preparação de contexto limitado e correspondência de campos com rótulos explícitos são incluídas após a indexação. Evidências web são apenas HTML/texto HTTPS público, as ferramentas OpenAPI aceitam apenas JSON fornecido pelo chamador e referências locais, e as ferramentas de cadeia nunca assinam nem enviam transações. O HTML de entrada não é executado, imagens remotas e outros recursos externos são omitidos ou bloqueados, e hiperlinks são preservados nos PDFs gerados, mas nunca buscados durante a renderização.

Metadados de distribuição, orientações de conversão e texto pronto para canais estão em docs/MARKETING.md e docs/LAUNCH-KIT.md; os metadados públicos do diretório MCP estão em server.json, glama.json e lhm.plugin.json para LobeHub.

O guia detalhado de agente, descoberta, operações, implantação, estatísticas do operador e segurança é docs/AGENT-GUIDE.md.

Use o servidor MCP hospedado

Nenhum processo local é necessário. Adicione o endpoint Streamable HTTP a um cliente compatível com MCP:

{
  "mcpServers": {
    "task402": {
      "type": "http",
      "url": "https://task402.xyz/mcp"
    }
  }
}

O servidor é detectável sem pagamento. Operações pagas retornam um desafio x402 v2; o cliente deve inspecionar a rede, o ativo USDC, o destinatário, o valor, o recurso e o tempo limite, obter aprovação explícita da carteira e então repetir a mesma solicitação com o pagamento assinado. A Task402 nunca recebe uma chave privada e nunca assina nem envia transações em nome do chamador. Comece com a primeira chamada paga e depois use examples/agent-flow.ts para um fluxo completo com signatário injetado.

O que está incluído

RecursoPagamentoInterface
Gerar um PDF paginado a partir de MarkdownUS$ 0,01REST, MCP
Indexar um PDF com texto nativoUS$ 0,01REST
Buscar, citar, comparar, validar, mapear, ler, extrair campos, preparar contexto e renderizarIncluído após indexaçãoREST, MCP
Evidência limitada de páginas públicasUS$ 0,005REST, MCP
Inspeção de OpenAPI, plano de solicitação e diffUS$ 0,001–US$ 0,002REST, MCP
Dados somente leitura de saldo, transação e ERC-20 da BaseUS$ 0,001REST, MCP

Preços, limites, esquemas e termos de pagamento são legíveis por máquina em /v1/pricing. O serviço não fornece OCR, renderização de páginas JavaScript, execução arbitrária de API, assinatura de transações ou anotação visual/legal de PDF.

Os metadados do servidor MCP remoto são a versão 0.3.2 em server.json. Na auditoria de 12/10/2026, o Registry oficial serviu 0.2.0; publicar os novos metadados exige a chave de prova do editor do domínio, que intencionalmente não está armazenada neste espaço de trabalho. Verifique novamente o registro ao vivo antes de afirmar que o lançamento foi publicado. Desafios REST e MCP pagos incluem metadados de descoberta do x402 Bazaar, e o facilitador de produção é https://facilitator.openx402.ai.

Páginas públicas de descoberta estão disponíveis em https://task402.xyz/, /docs#first-paid-call, /llms.txt, /demo, /v1/tools, /openapi.json, /v1/pricing, /.well-known/x402.json, /.well-known/mcp/server-card.json, /.well-known/ai-plugin.json e /sitemap.xml. Elas fornecem a agentes e rastreadores de diretórios um ponto de entrada claro sem exigir pagamento ou credencial de operador. A publicação no Registry melhora a detectabilidade para clientes que sincronizam o MCP Registry; ela não cria tráfego sintético nem garante chamadas.

O guia de início rápido público inclui fluxos de trabalho focados em verificação de citações, comparação de revisões de PDF e redução de contexto de PDF antes de chamadas de modelo. Arquivos de cliente para copiar e colar estão em examples/agent-flow.ts, examples/cursor.mcp.json e examples/vscode.mcp.json. O exemplo TypeScript obtém desafios de geração e indexação não assinados e expõe métodos explícitos de nova tentativa para um payload de carteira aprovado separadamente; ele nunca assina nem envia um pagamento automaticamente.

Quando estiver pronto para um pagamento ao vivo controlado, siga docs/TEST-TRANSACTION.md. Ele exige um signatário de carteira externo e nunca solicita uma chave privada.

Para uma carteira de teste local descartável, o repositório também inclui um auxiliar de terminal protegido: npm run test:live. Ele valida o desafio ao vivo Base/USDC antes de assinar, exige TASK402_CONFIRM=YES, baixa o PDF e nunca imprime o payload de pagamento ou o recurso. Consulte a seção de terminal do guia de teste para configuração e limpeza.

Para reproduzir exatamente um agente MCP, use npm run test:agent; ele realiza a descoberta, recebe o desafio x402 estruturado, assina por meio do cliente EVM oficial, tenta novamente com _meta["x402/payment"], verifica o job por meio de get_pdf_job e baixa o resultado.

Desenvolvimento local

Use Node.js 24 ou mais recente (verificado com Node 24.13; o estado durável local usa node:sqlite). A partir deste diretório:

npm ci
Copy-Item .dev.vars.example .dev.vars
npm run setup:browser
npm run dev

O servidor local vincula-se apenas a 127.0.0.1:8787 e aceita somente a autoridade de Host loopback/localhost correspondente (mais a autoridade pública configurada no modo ao vivo). O adaptador local de evidência web resolve cada nome de host antes de buscar e rejeita destinos DNS privados, de loopback, link-local e reservados; o Worker hospedado depende do limite de egresso da plataforma, além das mesmas verificações de URL. O exemplo .dev.vars habilita um bypass explícito de desenvolvimento sem pagamento, e o bypass existe apenas em src/local.ts; src/worker.ts o rejeita incondicionalmente. Se .dev.vars estiver ausente, o servidor inicia com pagamentos não configurados e a geração paga falha de forma segura. Jobs e artefatos locais são duráveis em .data/ e são ignorados pelo Git.

Se o Playwright não encontrar o download do Chromium fixado na sua máquina, aponte-o para um executável Chromium instalado antes de iniciar o processo local:

$env:BROWSER_EXECUTABLE_PATH = "C:\path\to\chrome.exe"
npm run dev

Gere e baixe um PDF de exemplo:

$body = @{ title = "Quarterly Report"; markdown = "# Summary`n`n| Metric | Value |`n| --- | ---: |`n| Revenue | 42 |" } | ConvertTo-Json
$job = Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8787/v1/pdf `
  -Headers @{ "Idempotency-Key" = "report-2026-q3-0001" } `
  -ContentType "application/json" -Body $body
$job | Format-List
Invoke-WebRequest -Uri $job.downloadUrl `
  -Headers @{ Authorization = "Bearer $($job.capability)" } `
  -OutFile .\report.pdf

O recurso é um segredo do tipo bearer. Mantenha-o em memória, não o registre em logs e envie-o apenas para as URLs de status/download retornadas. O acesso a status e download exige Authorization: Bearer <capability> (ou X-Job-Capability); um ID de job ou chave de idempotência sozinho não autoriza o acesso.

API e limites

RotaFinalidade
GET /v1/pricingOperação legível por máquina, preço, modo de pagamento e limites de tamanho/TTL
GET /.well-known/x402Mesmo documento de descoberta em um caminho bem conhecido
GET / e GET /docsVisão geral pública do serviço e início rápido do agente
GET /llms.txt e GET /sitemap.xmlMetadados compactos legíveis por agente e descoberta de rastreadores
POST /v1/pdfGerar um PDF; exige Idempotency-Key; o modo ao vivo usa x402 v2 PAYMENT-SIGNATURE
GET /v1/jobs/{jobId}Ler o estado autorizado do job
GET /v1/jobs/{jobId}/downloadBaixar um PDF concluído autorizado
GET /v1/admin/statsEstatísticas agregadas de ferramentas protegidas por senha; ?hours=24 opcional
GET /adminFormulário de senha compatível com dispositivos móveis para visualizar o endpoint de estatísticas protegido
POST /mcpEndpoint MCP Streamable HTTP com ferramentas de PDF, web, OpenAPI e leitura da Base
POST /v1/documentsIndexação paga de PDF bruto para operações determinísticas de texto nativo
GET /v1/documents/{documentId} e /mapInspecionar metadados do documento ou ler seu mapa de páginas
POST /v1/documents/{documentId}/search, /batch-search, /context, /fields, /read, /citation, /validateBuscar, construir contexto citado, ler páginas selecionadas, verificar uma citação de texto ou validar expectativas declaradas
POST /v1/documents/compareComparar dois PDFs autorizados separadamente por página e texto nativo normalizado
GET /v1/documents/{documentId}/pages/{page}/renderRenderizar um recorte limitado de página em PNG
POST /v1/web/evidenceExtração paga de página HTTPS pública com texto limitado, links, hash de origem e aviso de injeção de prompt
POST /v1/openapi/inspectInspeção paga de operação OpenAPI, parâmetro, corpo de solicitação, segurança e referência local
POST /v1/openapi/request-plan e /v1/openapi/diffPlanejamento seguro de solicitações e comparação determinística de contratos de API pagos; nenhuma solicitação é executada
POST /v1/chain/balance, /v1/chain/transaction, /v1/chain/erc20-balanceUtilitários pagos somente leitura de RPC da Base; sem assinatura ou movimentação de fundos

Os limites padrão são corpo de solicitação de 256 KiB, Markdown normalizado de 240 KiB, 160 caracteres de título, 20.000 linhas de Markdown, saída de PDF de 20 MiB, vida útil do artefato de 24 horas e prazo de renderização de 90 segundos. O PDF usa layout A4, repete cabeçalhos de tabela, mantém linhas juntas quando possível e inclui números de página. A limpeza é executada uma vez por hora no Cloudflare e na inicialização e a cada hora no processo local. Os lotes de limpeza são limitados; recursos expirados param de funcionar imediatamente, enquanto a exclusão física pode levar lotes adicionais. Liquidações incertas mantêm seus artefatos para reconciliação do operador.

Inspeção e recuperação local de PDF

O Worker implantado expõe as operações determinísticas de documentos PDF por meio de um parser isolado do Cloudflare Container. O Worker mantém capacidades, metadados D1, objetos de origem/índice R2, validação e limpeza; o Container executa extração nativa do PDF.js e renderização de páginas limitada, com Internet de saída desabilitada. O desenvolvimento local continua usando as mesmas operações diretamente por meio do parser Node.js.

Envie um PDF bruto com uma chave de idempotência gerada pelo chamador e um segredo de recuperação separado de alta entropia (o segredo de recuperação define o escopo dessa chave para o chamador). Salve a capacidade retornada e o segredo de recuperação no cofre de segredos do chamador; o servidor nunca retorna o segredo de recuperação. Reutilize ambas as chaves apenas para recuperar o mesmo upload após uma resposta perdida. A chave de idempotência sozinha não pode revelar uma capacidade de documento existente.

$recovery = [Convert]::ToHexString([Security.Cryptography.RandomNumberGenerator]::GetBytes(32)).ToLowerInvariant()
$doc = Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8787/v1/documents `
  -Headers @{ "Idempotency-Key" = "research-pdf-2026-0001"; "X-Document-Recovery-Key" = $recovery; "X-File-Name" = "research.pdf" } `
  -ContentType "application/pdf" -InFile .\research.pdf
$headers = @{ Authorization = "Bearer $($doc.capability)" }
Invoke-RestMethod -Uri $doc.inspectUrl -Headers $headers
Invoke-RestMethod -Method Post -Uri "$($doc.inspectUrl)/search" -Headers $headers `
  -ContentType "application/json" -Body '{"query":"revenue","limit":5}'
Invoke-RestMethod -Method Post -Uri "$($doc.inspectUrl)/read" -Headers $headers `
  -ContentType "application/json" -Body '{"pages":[1,2]}'

A capacidade retornada é um segredo de portador. Mantenha-o privado e envie-o apenas no cabeçalho Authorization para as URLs retornadas. O upload binário aceita no máximo 20 MiB e 100 páginas. O parsing constrói um índice local limitado contendo metadados, rótulos e tamanhos de página, marcadores, blocos de texto nativos com caixas delimitadoras normalizadas, nomes/tipos/valores de campos de formulário, contagens de anotações e nomes/tamanhos de anexos incorporados. O índice é limitado a 8 MiB e 50.000 blocos de texto. GET .../map?page=1 inclui até 500 blocos posicionados para essa página; o mapa padrão retorna resumos compactos de página. Os bytes do PDF de origem e o índice extraído são armazenados de forma durável em .data/document-objects/ e .data/documents.sqlite e removidos no vencimento; a retenção padrão é de 24 horas (DOCUMENT_TTL_SECONDS pode estendê-la para no máximo sete dias).

O endpoint MCP adiciona inspect_pdf, get_document_map, search_document, batch_search_document, prepare_document_context, extract_document_fields, read_document, verify_document_citation, compare_pdfs, validate_pdf_text e render_pdf_page_region quando o Container do parser implantado está configurado. O MCP não faz upload de conteúdo binário; primeiro use o upload REST e depois passe o ID do documento e a capacidade para as ferramentas.

A busca é correspondência exata sem diferenciar maiúsculas de minúsculas após a normalização de espaços em branco. A leitura é limitada a 10 páginas e 32.000 caracteres de saída. As verificações de citação estabelecem apenas que o texto normalizado aparece na página informada e retornam blocos de texto próximos e suas caixas delimitadoras; elas não estabelecem veracidade ou ordem visual de leitura. A comparação relata mudanças de texto normalizado no nível da página e não inspeciona diferenças de imagem, visuais, metadados ou assinaturas. A validação verifica apenas a legibilidade do parser, a contagem opcional de páginas e o texto obrigatório. Os recortes de página usam frações de página normalizadas e são limitados a quatro milhões de pixels raster e 4 MiB de saída PNG.

Não são fornecidos OCR, extração/consulta de estrutura de tabelas, preenchimento de formulários, download de anexos, teste de conformidade PDF/A ou validação criptográfica de assinaturas. Texto nativo esparso é relatado como um aviso; páginas escaneadas não recebem texto inventado. Links PDF são mantidos como texto e nunca são buscados. Um marcador de assinatura PDF é exibido apenas como metadados; confiança e validade não são verificadas.

O parsing e a renderização nativos de PDF são executados no Container do parser isolado. O Worker admite uma tarefa de parser por vez, impõe um prazo de 60 segundos para inicialização/processamento e destrói o Container após cada tarefa para redefinir o estado do processo e do sistema de arquivos. Uploads ou renderizações simultâneas recebem 503 e devem tentar novamente em breve com as mesmas chaves de recuperação/idempotência. Limites de memória de upload, página, texto, índice, saída e instância também se aplicam; o Container não tem acesso à Internet de saída e não recebe segredos de pagamento ou capacidade. OCR, comparação semântica visual, conformidade PDF/A e verificação criptográfica de assinaturas permanecem sem suporte e são relatados explicitamente pela ferramenta de validação.

A chave de idempotência tem escopo definido para o pagador verificado no modo ao vivo e está vinculada à entrada normalizada e ao payload de pagamento. Reutilizá-la com conteúdo ou pagamento diferente retorna 409; uma autorização de pagamento duplicada exata é rejeitada usando o nonce de autorização de rede/ativo/pagador EVM. Tombstones de replay de pagamento são retidos por pelo menos 30 dias após o vencimento do artefato e o vencimento da autorização. A mesma solicitação concluída pode recuperar sua capacidade original durante o tempo de vida do job sem outra renderização ou liquidação.

Clientes REST recebem termos x402 v2 em uma resposta 402 e um cabeçalho PAYMENT-REQUIRED padrão. Clientes MCP recebem o mesmo objeto PaymentRequired como resultado de ferramenta isError: true e enviam pagamento por meio de params._meta["x402/payment"]; um resultado de ferramenta liquidado inclui _meta["x402/payment-response"].

Cliente MCP com carteira protegida

examples/mcp-client.ts demonstra o cliente HTTP Streamable oficial do SDK MCP e os campos de transporte x402 MCP. Ele recebe um adaptador ApprovedWallet do chamador e não tem campo de chave privada, chave de ambiente ou implementação de assinatura. Implemente esse adaptador com uma carteira de hardware, HSM, KMS ou um serviço de carteira separadamente em sandbox; faça o assinante impor a rede esperada, o ativo USDC, o destinatário, o teto de valor e a política de nonce antes de assinar. Não adicione uma chave privada de longa duração ao cliente MCP ou ao repositório.

O exemplo executa uma chamada não paga para obter o desafio, pede ao assinante injetado um payload, tenta novamente com _meta["x402/payment"] e então retorna a capacidade do job para um download autenticado. Este é um exemplo mínimo de caminho feliz: um cliente de produção deve persistir a chave de idempotência e o payload de pagamento assinado exato com segurança para poder tentar a mesma solicitação novamente e deve reter os detalhes de recuperação retornados após uma liquidação incerta. O bypass de desenvolvimento local não cria ou liquida pagamentos em cadeia; use uma carteira de teste configurada corretamente e um facilitador de testnet para uma transferência x402 de ponta a ponta.

Implantação no Cloudflare

O ponto de entrada do Worker é src/worker.ts. O wrangler.toml verificado contém os bindings de produção D1, R2, Browser Run e Durable Object/Container do parser. Ao implantar em uma conta diferente, substitua esses identificadores de recursos e provisione recursos correspondentes. A construção da imagem do parser requer um mecanismo Docker em execução e uma CLI Docker no PATH. Provisione recursos usando sua conta Cloudflare:

npx wrangler login
npx wrangler d1 create x402-docs-mvp
npx wrangler r2 bucket create x402-docs-mvp

Copie o database_id D1 impresso pelo Wrangler para wrangler.toml e aplique o esquema verificado:

npx wrangler d1 migrations apply x402-docs-mvp --remote

O endpoint de estatísticas usa a tabela tool_stats_daily da migração 0002_tool_stats.sql. Instale sua senha como um segredo do Worker antes de servir tráfego:

npx wrangler secret put STATS_PASSWORD
npx wrangler secret put DOCUMENT_CONTAINER_TOKEN

Habilite o Browser Run para a conta e mantenha o binding [browser] em wrangler.toml. Este projeto chama a API BROWSER.quickAction("pdf", ...) documentada. O Browser Run está disponível para contas Workers Paid, mas o plano Paid não garante um teto rígido de cinco dólares: Browser Run, D1, R2 e uso do Worker podem incorrer em cobranças medidas. Revise o faturamento/preços atuais do Cloudflare e configure orçamentos/alertas de conta antes de implantar.

Para pré-visualização no lado do Worker, as Quick Actions do Browser Run exigem npx wrangler dev --remote (o wrangler dev local não implementa quickAction). O comando regular npm run dev permanece totalmente local e usa Playwright Chromium em vez disso.

Defina variáveis não secretas do Worker no painel ou nas variáveis do Wrangler:

PAYMENTS_MODE=live
PUBLIC_BASE_URL=https://task402.xyz
PRICE_USD=0.01
PRICE_DOCUMENT_USD=0.01
PRICE_WEB_EVIDENCE_USD=0.005
PRICE_OPENAPI_USD=0.001
PRICE_CHAIN_USD=0.001
X402_NETWORK=eip155:8453
X402_ASSET=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
X402_PAY_TO=0xAEA6fDF13ca10aD6B906884ffAcBb58a0e9E144A
X402_FACILITATOR_URL=https://facilitator.openx402.ai
MCP_ALLOWED_ORIGINS=https://<your-approved-mcp-client-origin>

STATS_PASSWORD é obrigatório em implantações do Worker e deve conter 20–256 caracteres. Use um segredo aleatório único de alta entropia. Não é uma credencial de pagamento e deve ser mantido separado dos segredos de carteira e facilitador. DOCUMENT_CONTAINER_TOKEN é um segredo interno separado usado apenas entre o Worker e o Container do parser. A rota protegida do operador é GET /v1/admin/stats; para acesso por telefone, abra a página móvel em /admin. Veja docs/AGENT-GUIDE.md.

A configuração implantada usa USDC Base mainnet (eip155:8453) e https://facilitator.openx402.ai. Sua resposta pública de capacidades suportadas anuncia pagamentos EVM exatos Base mainnet e a extensão de descoberta, que permite a catalogação Bazaar quando os clientes ecoam a extensão de pagamento. Trate o facilitador como uma dependência de pagamento: revise sua disponibilidade, termos, rede suportada, comportamento de descoberta e comportamento de liquidação antes de mudar o tráfego de produção. O serviço converte PRICE_USD em unidades USDC de seis casas decimais.

Instale o segredo HMAC de capacidade e, se exigido pelo seu facilitador, o token de portador como segredos do Worker. Gere um segredo aleatório de pelo menos 32 caracteres e não o envie ou cole no arquivo TOML:

npx wrangler secret put CAPABILITY_SECRET
npx wrangler secret put X402_FACILITATOR_BEARER_TOKEN

O token do facilitador é opcional para um facilitador que não exige autenticação. Execute as verificações locais e inspecione um pacote de implantação antes de escolher implantar:

npm ci
npm run typecheck
npm test
npm run deploy:dry-run
# npx wrangler deploy   # explicit operator action after reviewing account config and costs

Nenhuma credencial de carteira ou segredo de facilitador está incluída neste repositório. A configuração Wrangler verificada contém os identificadores de recursos de implantação necessários para este projeto; substitua-os ao implantar em outra conta. O Worker exige configuração de pagamento ao vivo e falha fechado se estiver ausente; não tem bypass de desenvolvimento. Defina o PUBLIC_BASE_URL do Worker para a origem HTTPS confiável exata, sem caminho, credenciais, consulta ou fragmento, para que os resultados MCP contenham URLs absolutos de status/download sem confiar em um cabeçalho Host controlado pelo chamador. A URL do facilitador pode conter um caminho, mas deve usar HTTPS sem credenciais de URL, consulta ou fragmento.

Recuperação de liquidação

Se a liquidação expirar ou o facilitador retornar um resultado pendente/ambíguo, o job se torna settlement_unknown. A resposta inclui o ID do job e a capacidade para que seu status permaneça observável. O serviço retém o PDF renderizado e não tentará automaticamente liquidar novamente com a mesma autorização. Verifique o status da transação do facilitador e a rede de destino antes de tomar uma ação de operador. Não reenvie a mesma autorização: um timeout pode significar que a transação em cadeia foi aceita mesmo quando a resposta foi perdida. Este MVP não inclui um endpoint de reconciliação/admin; um operador deve reconciliar contra o facilitador/rede e registrar o resultado por meio de um processo operacional auditado.

Verificações

npm test cobre limites de entrada, sanitização de HTML/script/URL, idempotência e tratamento de replay de pagamento, resultados de facilitador incertos e definitivos, parsing real de PDF, recuperação de documento com acesso por capacidade, mapa/busca/leitura/citação/comparação/validação, renderização de recorte limitada, limpeza de expiração e chamadas oficiais de initialize/list/tool do SDK MCP. Geração de PDF e paginação visual também foram exercitadas com Chromium local contra fixtures de tabelas longas/tokens longos. Esses testes não enviam um pagamento real em blockchain nem validam bindings Cloudflare específicos da conta.

Prontidão para distribuição

Os metadados de diretório verificados estão em server.json, glama.json e lhm.plugin.json; a evidência de descoberta e a lista de verificação de publicação estão em docs/DISTRIBUTION-AUDIT.md. Antes de reivindicar disponibilidade de diretório, verifique o registro MCP Registry ao vivo, o recurso Bazaar do facilitador e qualquer URL de listagem de terceiros contra o contrato /v1/pricing atual. Esses arquivos preparam a submissão; diretórios externos ainda exigem seu próprio fluxo de trabalho de editor ou repositório.

Agentes devem preferir /v1/pricing para preços atuais, /openapi.json para esquemas REST e MCP tools/list para esquemas de entrada executáveis. As páginas públicas /docs, /llms.txt e /sitemap.xml são intencionalmente livres de credenciais para que rastreadores possam entender o serviço antes de qualquer pagamento.