Cedulon

Uma camada de auditoria para comércio entre agentes: manifestos de troca assinados, política de gastos com negação padrão, recibos COSE_Sign1, checkpoints de época e reconciliação de extração de trilhos. Especificado em Internet-Drafts da IETF. O servidor MCP liquida em um trilho simulado e não mantém carteira.

Documentação

Cedulon

Mantido pela VERAX Teknoloji. Comece pelo corpo VERAX: verax-ai/verax. Projetos relacionados: Conarium · Tugra.

Listado em: npm · Glama · MCP Registry · MCP Market · LobeHub · Zenodo

Camada de auditoria para gastos entre agentes: manifesto de transação assinado, política com falha fechada (fail-closed), recibo de gasto assinado (ancorável via SCITT).

O Cedulon não é um trilho de pagamento. Ele fica acima do x402 e do AP2.

Os pacotes estão no npm e o servidor MCP está no MCP Registry, mas nada aqui toca em dinheiro: sem carteiras reais e sem trilhos de rede, apenas fixtures simuladas. cedulon_spend liquida em um trilho simulado e declara isso em sua própria descrição.

Os pacotes principais têm zero dependências em tempo de execução; o pacote do servidor MCP depende apenas do SDK oficial do MCP.

Requisitos

  • Node.js 22 ou mais recente (20+ para as bibliotecas; scripts usam type stripping do Node)
  • npm 10 ou mais recente

Instalação e execução (clone limpo)

npm install
npx tsc --noEmit
npm run test:all
npm run demo

Espera-se que npm run tamper saia com código não zero (bytes adulterados falham na verificação).

npm run demo:unguarded mostra a brecha desprotegida: 100/100 permitidos.

npm run audit deve sair com código 0 (audit: balanced).

npm run demo:bypass deve sair com código não zero: audit: 1 settlement without receipt → FAIL.

npm run demo:bypasses imprime quatro linhas de FAIL (recibo ausente, valor incorreto, referência nula, cabeça de cadeia corrompida) e sai com código 0 somente quando cada bypass é capturado; um bypass perdido faz com que ele saia com código não zero.

npm run demo:live reconcilia uma janela real de USDC na Base Sepolia em vez de uma fixture. Somente leitura: precisa de uma URL RPC em CEDULON_RPC_URL e nenhuma carteira, chave ou transação. Contra uma conta cujos recibos você não possui, cada liquidação que a cadeia reporta volta como uma lacuna.

Um terceiro pode reproduzir isso sem confiar em nós: docs/RUN_AS_VERIFIER.md.

Caminho de cinco minutos, incluindo a configuração do host MCP: docs/QUICKSTART.md.

Servidor MCP

O Cedulon pode rodar como um servidor MCP local via stdio. O host conversa via JSON-RPC em stdin/stdout. As cinco ferramentas são wrappers finos sobre os pacotes existentes; elas não reimplementam política, recibos ou auditoria.

FerramentaArgumentosResultado
cedulon_spendamount (string), currency, payee, nonce, tool opcionalPermitir → JSON de recibo assinado. Negar → { ok: false, reason } (por exemplo, limit-amount).
cedulon_auditextract opcional (um extrato de trilho assinado que lhe foi apresentado: body, signature, publicKeyPem), as raízes de confiança (trust, issuerTrust, witnessTrust, payeeTrust, manifest, manifestTrust), extraSettlements[] opcional (ref, amount, currency, timestampMs; recusado junto a extract){ ok, summary, findings, warnings, guarantee, counts }, além de scope quando a auditoria rodou sobre um extrato apresentado; counts é a classe na qual cada recibo e linha caiu. Livros equilibrados imprimem audit: balanced.
cedulon_verify_receiptobjeto receipt, ou coseHex + publicKeyPem, campos opcionais de contrafirma{ ok, receipt, countersignature }
cedulon_export_ledgernenhumRecibos + checkpoint + extrato no formato JSON demo:export
cedulon_statusnenhum{ version, policy, receiptCount, chainHead }

Claude Desktop / Claude Code / Cursor. Nada para clonar e nada para compilar:

{
  "mcpServers": {
    "cedulon": {
      "command": "npx",
      "args": ["-y", "@cedulon/mcp-server"]
    }
  }
}

No Claude Code, essa configuração é um único comando:

claude mcp add cedulon -- npx -y @cedulon/mcp-server

Os limites de política vêm do ambiente: CEDULON_MAX_AMOUNT, CEDULON_MAX_CUMULATIVE, CEDULON_MAX_PAYMENTS, CEDULON_WINDOW_MS, CEDULON_ALLOWED_PAYEES, CEDULON_ALLOWED_CURRENCIES, CEDULON_ALLOWED_TOOLS, CEDULON_PAYER. Defina CEDULON_STATE_PATH para manter a cadeia de recibos entre reinicializações; sem ele, o livro-razão fica na memória.

Trabalhando dentro deste repositório, contra as fontes:

npm run mcp

O servidor está listado no MCP Registry como io.github.dogrucanemek-alt/cedulon; server.json é a entrada pela qual ele é publicado.

npm run mcpb constrói um pacote .mcpb — um zip contendo o servidor e suas dependências, que um host de desktop instala com um clique, com os limites de política expostos como configurações. Ele instala o pacote npm publicado em vez de empacotar a árvore de trabalho, então o pacote contém o que o npm teria lhe dado, e a versão já deve estar publicada. O resultado vai para build/ e é um artefato de release, não fonte. Pacotes publicados são anexados ao release correspondente no GitHub, com o SHA-256 do pacote nas notas do release; v0.13.0 carrega cedulon-0.13.0.mcpb, e v0.12.0 o anterior.

smithery.yaml é o formato de ecossistema mais antigo e não é submetido; as instruções atuais do Smithery exigem um endpoint HTTPS ou um pacote .mcpb.

Há também um Dockerfile, para hosts e diretórios que compilam o repositório em vez de instalar o pacote:

docker build -t cedulon .
docker run -i --rm cedulon

O protocolo é o stdin/stdout do contêiner, então ele precisa de -i. Não precisa de credenciais: o servidor liquida em um trilho simulado e não possui carteira.

Estrutura

packages/core           policy engine + Decision Token (workspace dep on @cedulon/cose)
packages/cose           deterministic CBOR + COSE_Sign1 (Ed25519)
packages/manifest       signed trade manifest
packages/receipts       spend receipt (COSE default, JSON legacy)
packages/checkpoint     epoch checkpoints + in-process transparency log
packages/audit          rail-extract completeness checker
packages/mcp-guard      MCP tools/call wrapper (mock)
packages/mcp-server     stdio MCP server (official SDK)
packages/x402-adapter   HTTP 402 adapter + mock rail extract
packages/base-extract   read-only Base Sepolia USDC → RailExtract
examples/demo           runaway, dispute, bypass, audit CLI
spec/                   draft-dogru-cedulon-10 (latest here; in preparation,
                        not posted), -09 (posted 6 September 2026), -08,
                        -07, -06, -05, -04, -03, -02, -01, -00;
                        draft-dogru-cedulon-decision-profile-04 (posted
                        5 October 2026), -03, -02, -01, -00: decisions against effects
                        on the same reconciler; and the direction seeds
                        draft-dogru-cedulon-reattestation-00 and
                        draft-dogru-cedulon-streaming-00
THREAT_MODEL.md
docs/RUN_AS_VERIFIER.md

Os nomes de marcas vêm apenas de packages/core/src/brand.ts.

Como citar

Os metadados de citação estão em CITATION.cff. O release arquivado -00 é publicado como https://doi.org/10.5281/zenodo.22099792.. O perfil de decisão, postado em draft-dogru-cedulon-decision-profile-04, está depositado separadamente como https://doi.org/10.5281/zenodo.22337734 (todas as versões; o texto -04 postado é https://doi.org/10.5281/zenodo.23155667)

Política de Privacidade

https://cedulon.com/privacy.html

O servidor MCP roda na sua máquina e não faz requisições de rede. Ele não coleta nada, porque não há endpoint nosso para coletar. packages/mcp-server/README.md declara o que ele mantém enquanto roda e o que ele grava se você pedir.

Licença

Apache-2.0