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.
| Ferramenta | Argumentos | Resultado |
|---|---|---|
cedulon_spend | amount (string), currency, payee, nonce, tool opcional | Permitir → JSON de recibo assinado. Negar → { ok: false, reason } (por exemplo, limit-amount). |
cedulon_audit | extract 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_receipt | objeto receipt, ou coseHex + publicKeyPem, campos opcionais de contrafirma | { ok, receipt, countersignature } |
cedulon_export_ledger | nenhum | Recibos + checkpoint + extrato no formato JSON demo:export |
cedulon_status | nenhum | { 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