mcpField
C
Cedulon

Cedulon

Local
cedulon.comFinance1Updated 3d ago

About Cedulon

Cedulon is a local stdio MCP server for policy-controlled spending, receipt verification, and ledger reconciliation. It is suited to agent workflows that need auditable spend decisions, using an in-process mock rail rather than a wallet or network connection.

Key features

  1. 01Apply policy limits to spend requests
  2. 02Issue signed receipts for allowed spend
  3. 03Reconcile receipts with rail extracts
  4. 04Verify receipt COSE data and signatures
  5. 05Export ledger and audit results
  6. 06Inspect policy and ledger status

Use cases

  1. 01Gate agent payments by amount and payee
  2. 02Check receipts against settlement records
  3. 03Verify a receipt and its countersignature
  4. 04Export an auditable ledger snapshot

MCP support

Exposes spending, audit, receipt verification, ledger export, and status tools to MCP clients. The local server uses an in-process mock rail and communicates over stdio.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"dogrucanemek-alt-cedulon": {
"command": "npx",
"args": [
"-y",
"@cedulon/mcp-server"
],
"env": {
"CEDULON_STATE_PATH": "<CEDULON_STATE_PATH>",
"CEDULON_MAX_AMOUNT": "<CEDULON_MAX_AMOUNT>",
"CEDULON_MAX_CUMULATIVE": "<CEDULON_MAX_CUMULATIVE>",
"CEDULON_MAX_PAYMENTS": "<CEDULON_MAX_PAYMENTS>"
}
}
}
}
Run commandnpx -y @cedulon/mcp-server
Environment variables to set
CEDULON_STATE_PATHOptional JSON file that persists the in-process ledger
CEDULON_MAX_AMOUNTPer-payment amount cap (demo default 10)
CEDULON_MAX_CUMULATIVEWindow cumulative cap (demo default 30)
CEDULON_MAX_PAYMENTSWindow payment-count cap (demo default 3)

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@cedulon/mcp-server0.16.0

Tools

5

Saved tool list · updated 3d ago

ParameterTypeRequiredDescription
toolstringNoCalling tool name recorded on the request
noncestringYes
payeestringYes
amountstringYesInteger amount as a decimal string
currencystringYes

Details

From the project 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:

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

From the published package, without a clone:

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):

npm run mcp

Host config

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

{
  "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].

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.