Cedulon

Una capa de auditoría para el comercio entre agentes: manifiestos comerciales firmados, política de gasto con denegación por defecto, recibos COSE_Sign1, puntos de control por época y conciliación de extracción ferroviaria. Especificado en borradores de Internet del IETF. El servidor MCP liquida en un ferrocarril simulado y no posee billetera.

Documentación

Cedulon

Mantenido por VERAX Teknoloji. Comience con el cuerpo de VERAX: verax-ai/verax. Proyectos relacionados: Conarium · Tugra.

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

Capa de auditoría para el gasto de agente a agente: manifiesto de comercio firmado, política de cierre ante fallos, recibo de gasto firmado (anclable a SCITT).

Cedulon no es un riel de pago. Se sitúa por encima de x402 y AP2.

Los paquetes están en npm y el servidor MCP está en el MCP Registry, pero nada aquí toca dinero: sin billeteras reales y sin rieles de red, solo accesorios simulados. cedulon_spend se liquida en un riel simulado y lo indica en su propia descripción.

Los paquetes principales no tienen dependencias en tiempo de ejecución; el paquete del servidor MCP depende únicamente del SDK oficial de MCP.

Requisitos

  • Node.js 22 o más reciente (20+ para las bibliotecas; los scripts usan eliminación de tipos de Node)
  • npm 10 o más reciente

Instalar y ejecutar (clon limpio)

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

Se espera que npm run tamper salga con código distinto de cero (los bytes manipulados fallan la verificación).

npm run demo:unguarded muestra el agujero sin protección: 100/100 permisos.

npm run audit debe salir con 0 (audit: balanced).

npm run demo:bypass debe salir con código distinto de cero: audit: 1 settlement without receipt → FAIL.

npm run demo:bypasses imprime cuatro líneas de FALLO (recibo faltante, monto incorrecto, referencia nula, cabeza de cadena basura) y sale con 0 solo cuando cada evasión es detectada; una evasión no detectada hace que salga con código distinto de cero.

npm run demo:live concilia una ventana real de USDC en Base Sepolia en lugar de un accesorio. Solo lectura: necesita una URL RPC en CEDULON_RPC_URL y no requiere billetera, clave ni transacción. Contra una cuenta cuyos recibos no posee, cada liquidación que la cadena reporta vuelve como una brecha.

Un tercero puede reproducir esto sin confiar en nosotros: docs/RUN_AS_VERIFIER.md.

Ruta de cinco minutos, incluida la configuración del host MCP: docs/QUICKSTART.md.

Servidor MCP

Cedulon puede ejecutarse como un servidor MCP local de stdio. El host habla JSON-RPC en stdin/stdout. Las cinco herramientas son envoltorios delgados sobre los paquetes existentes; no reimplementan política, recibos ni auditoría.

HerramientaArgumentosResultado
cedulon_spendamount (cadena), currency, payee, nonce, tool opcionalPermitir → JSON de recibo firmado. Denegar → { ok: false, reason } (por ejemplo limit-amount).
cedulon_auditextract opcional (un extracto de riel firmado que se le presentó: body, signature, publicKeyPem), las raíces de confianza (trust, issuerTrust, witnessTrust, payeeTrust, manifest, manifestTrust), extraSettlements[] opcional (ref, amount, currency, timestampMs; rechazado junto a extract){ ok, summary, findings, warnings, guarantee, counts }, más scope cuando la auditoría se ejecutó sobre un extracto presentado; counts es la clase en la que aterrizaron cada recibo y fila. Los libros equilibrados imprimen audit: balanced.
cedulon_verify_receiptobjeto receipt, o coseHex + publicKeyPem, campos de contrafirma opcionales{ ok, receipt, countersignature }
cedulon_export_ledgerningunoRecibos + punto de control + extracto en la forma JSON demo:export
cedulon_statusninguno{ version, policy, receiptCount, chainHead }

Claude Desktop / Claude Code / Cursor. Nada que clonar y nada que construir:

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

En Claude Code esa configuración es un solo comando:

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

Los límites de política provienen del entorno: CEDULON_MAX_AMOUNT, CEDULON_MAX_CUMULATIVE, CEDULON_MAX_PAYMENTS, CEDULON_WINDOW_MS, CEDULON_ALLOWED_PAYEES, CEDULON_ALLOWED_CURRENCIES, CEDULON_ALLOWED_TOOLS, CEDULON_PAYER. Establezca CEDULON_STATE_PATH para mantener la cadena de recibos entre reinicios; sin él, el libro mayor vive en memoria.

Trabajando dentro de este repositorio en su lugar, contra las fuentes:

npm run mcp

El servidor está listado en el MCP Registry como io.github.dogrucanemek-alt/cedulon; server.json es la entrada desde la que se publica.

npm run mcpb construye un paquete .mcpb — un zip que contiene el servidor y sus dependencias, que un host de escritorio instala con un clic, con los límites de política expuestos como configuraciones. Instala el paquete npm publicado en lugar de empaquetar el árbol de trabajo, por lo que el paquete contiene lo que npm le habría dado, y la versión ya debe estar publicada. El resultado aterriza en build/ y es un artefacto de lanzamiento, no fuente. Los paquetes publicados se adjuntan al lanzamiento de GitHub correspondiente, con el SHA-256 del paquete en las notas del lanzamiento; v0.13.0 lleva cedulon-0.13.0.mcpb, y v0.12.0 el anterior.

smithery.yaml es el formato de ecosistema más antiguo y no se envía; las instrucciones actuales de Smithery toman un endpoint HTTPS o un paquete .mcpb.

También hay un Dockerfile, para hosts y directorios que construyen el repositorio en lugar de instalar el paquete:

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

El protocolo es el stdin/stdout del contenedor, por lo que necesita -i. No necesita credenciales: el servidor se liquida en un riel simulado y no tiene billetera.

Diseño

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

Los nombres de marca provienen solo de packages/core/src/brand.ts.

Cómo citar

Los metadatos de citación están en CITATION.cff. El lanzamiento archivado -00 se publica como https://doi.org/10.5281/zenodo.22099792. El perfil de decisión, publicado en draft-dogru-cedulon-decision-profile-04, se deposita por sí solo como https://doi.org/10.5281/zenodo.22337734 (todas las versiones; el texto -04 publicado es https://doi.org/10.5281/zenodo.23155667)

Política de privacidad

https://cedulon.com/privacy.html

El servidor MCP se ejecuta en su máquina y no realiza solicitudes de red. No recopila nada, porque no hay ningún endpoint nuestro que lo recopile. packages/mcp-server/README.md indica lo que mantiene mientras se ejecuta y lo que escribe si se lo pide.

Licencia

Apache-2.0