Cedulon

io.github.dogrucanemek-altPublished by GitHub account dogrucanemek-altv0.17.0Updated Nov 1, 2026

Policy-gated agent spend with signed receipts and rail-extract audit

The publisher's own server: Agora by openforallofus

Overview

AI-generated overview

Local MCP server for policy-gated mock payments with signed receipts, receipt verification, and ledger audit against a rail extract.

What you can do
  • Make policy-gated spends on an in-process mock rail, returning a signed receipt or a fail-closed denial reason
  • Verify spend receipts and payee countersignatures against a key you supply
  • Reconcile the receipt chain and checkpoint against the server's own ledger or a signed extract you present, with scope and counts
  • Export receipts, checkpoint and extract in a demo JSON shape with audit findings and guarantee
  • Report server version, policy summary, receipt count and chain head hash
When to use it
Useful when you want to prototype or demonstrate agent spending controls: per-payment and cumulative caps, payee and currency allowlists, signed receipts, and audit reconciliation, without touching real money or a network.
Requirements
Runs locally over stdio, typically via npx with the published npm package; Node.js is needed. No account, API key or network access. Policy limits are set through environment variables such as CEDULON_MAX_AMOUNT, CEDULON_MAX_CUMULATIVE and CEDULON_MAX_PAYMENTS; CEDULON_STATE_PATH optionally persists the ledger to a JSON file.
Before you install
The rail is an in-process mock: no wallet, RPC or network, so it does not move real funds. Verification without expectIssuerKeyPem only checks a receipt against the key it carries, which any key satisfies. Setting CEDULON_STATE_PATH writes the ledger, including demo keys, to disk; the README says not to commit that file.

Installation

In SourceWeft

  1. Open Cedulon in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

@cedulon/mcp-server

Local stdio MCP server. Thin wrappers over @cedulon/core, @cedulon/x402-adapter, @cedulon/audit, and @cedulon/receipts. The only non-workspace runtime dependency is the official MCP SDK.

Core packages still carry zero runtime dependencies. This package depends only on those workspace packages plus @modelcontextprotocol/sdk.

Tools

NameWhat it does
cedulon_spendPolicy-gated spend. Args: amount, currency, payee, nonce, tool. Allow → signed receipt JSON. Deny → { ok: false, reason }.
cedulon_auditReconcile the receipt chain against the rail extract: the in-process ledger, or a signed extract you present as extract. Optional extraSettlements injects extract rows (bypass demo; refused beside extract). The result carries scope when it ran over a presented extract, and counts, the class every receipt and row landed in.
cedulon_verify_receiptVerify receipt COSE bytes (receipt object or coseHex + publicKeyPem). Checks countersignature when present.
cedulon_export_ledgerReceipts + checkpoint + extract in the demo:export JSON shape, with the findings, guarantee and counts of the audit over this server's own ledger.
cedulon_statusVersion, policy summary, receipt count, chain head.

Run

The binary is cedulon-mcp (compiled JavaScript, no --experimental-strip-types). From this repository, after npm run build:packages:

bash
node packages/mcp-server/dist/index.js

From the published package, without a clone:

bash
npx -y @cedulon/mcp-server

npx cedulon-mcp is the same binary from a packed or already-installed copy. The server is also listed in the MCP Registry as io.github.dogrucanemek-alt/cedulon.

From the repository source tree (development):

bash
npm run mcp

Host config

Claude Desktop / Claude Code / Cursor (mcpServers), after the package is installed:

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

State and policy

In-process by default. Set CEDULON_STATE_PATH to a JSON file to persist receipts, checkpoints, extract rows, and demo keys across process restarts. Do not commit that file.

Policy knobs (demo defaults in parentheses):

  • CEDULON_MAX_AMOUNT (10)
  • CEDULON_MAX_CUMULATIVE (30)
  • CEDULON_MAX_PAYMENTS (3)
  • CEDULON_WINDOW_MS (3600000)
  • CEDULON_ALLOWED_PAYEES (payee-1; * clears the list)
  • CEDULON_ALLOWED_CURRENCIES (USD; * clears the list)
  • CEDULON_ALLOWED_TOOLS
  • CEDULON_PAYER (payer-1)

The rail is the in-process mock. No wallet, no RPC, no network.

Privacy Policy

https://cedulon.com/privacy.html

The short version, which that page states at length. This server runs on your machine and speaks to your client over stdio. It makes no network requests: this package and the six packages it depends on contain no HTTP client, no socket, and no telemetry, and the only dependency outside the project is the official Model Context Protocol SDK. It collects nothing, because there is no endpoint of ours to collect it.

While it runs it holds, in memory, the spend requests of the session (amount, currency, payee, nonce, calling tool name), the receipts derived from them, the checkpoint, and your policy limits. It writes nothing to disk unless you set CEDULON_STATE_PATH, in which case that ledger is written as JSON to the path you chose, on your machine. No analytics, no crash reporting, no update check, no third-party sharing.

Privacy questions and security reports: [email protected].

Source: packages/mcp-server/README.md at commit a41e9f0

Tools

5

cedulon_spend

Spend on the mock rail

Policy-gated spend on the mock rail. Allow returns a signed COSE receipt JSON. Deny returns the fail-closed reason.

Parameterstoolnoncerequiredpayeerequiredamountrequiredcurrencyrequired

cedulon_audit

Audit the receipt chain

Reconcile the in-process receipt chain and checkpoint against the rail extract: this server's own ledger, or a signed extract you present. Returns audit: balanced or findings, names the account, rail and window it was computed over (scope) when an extract declared one, and counts the class every receipt and row landed in (counts).

ParameterstrustextractmanifestpayeeTrustissuerTrustwitnessTrustmanifestTrustextraSettlements

cedulon_verify_receipt

Verify a spend receipt

Verify a spend receipt COSE_Sign1 (and payee countersignature when present). Supply expectIssuerKeyPem to check it against a key you already hold; without one the receipt is only checked against the key it carries, which any key satisfies.

ParameterscoseHexreceiptpublicKeyPemcounterCoseHexexpectPayeeKeyPempayeePublicKeyPemexpectIssuerKeyPem

cedulon_export_ledger

Export the ledger

Export receipts, checkpoint, and rail extract in the same JSON shape as npm run demo:export, with the findings, guarantee and counts of the audit over this server's own ledger.

Takes no parameters.

cedulon_status

Server status

Server version, policy summary, receipt count, and chain head hash.

Takes no parameters.

Version history

5
  1. v0.17.0LatestOct 31, 2026
  2. v0.16.0Oct 26, 2026
  3. v0.15.0Oct 16, 2026
  4. v0.14.0Oct 15, 2026
  5. v0.13.1Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Openforallofus integrations