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.
| Herramienta | Argumentos | Resultado |
|---|---|---|
cedulon_spend | amount (cadena), currency, payee, nonce, tool opcional | Permitir → JSON de recibo firmado. Denegar → { ok: false, reason } (por ejemplo limit-amount). |
cedulon_audit | extract 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_receipt | objeto receipt, o coseHex + publicKeyPem, campos de contrafirma opcionales | { ok, receipt, countersignature } |
cedulon_export_ledger | ninguno | Recibos + punto de control + extracto en la forma JSON demo:export |
cedulon_status | ninguno | { 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