io.github.eternal-roman/ledger
NPM · @ETERNAL-ROMAN/LEDGER-MCP
Exact-decimal double-entry for agents. Call MCP tools; do not do money math in tokens.
Available components
Last scanned (4 hours ago)
Scores higher than 67% of npm servers
Category Finance and Payments
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security81
- No malware found by supply-chain analysis.Pass
- CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
- No install/post-install scripts declared.Pass
- 30 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 71 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability84
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Tool/resource definitions use about 2047 tokens (~89/item across 23 items; 20 tools + 3 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management97
- Stability observed for 29 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage81
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 44% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 20 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 21 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 25 Oct 26 −1
- Stability: pass → 0.97 functional
- 24 Oct 26 −5
- CVE-2023-54404 affects this package: high ▼ security
- Known CVEs: pass → fail ▼ security
- 19 Oct 26 +1
- Stability: 0.97 → pass security
- 17 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 13 Oct 26 −3
- Stability: pass → 0.80 functional
- 12 Oct 26 +1
- Stability: 0.97 → pass security
- Security disclosure: unverified → pass ▲ functional
- 11 Oct 26 −1
- Security disclosure: pass → unverified ▼ functional
- Stability: pass → 0.97 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 25 Oct 2026 · Analysed npm/@eternal-roman/ledger-mcp@0.19.1
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Vulnerabilities 1 finding
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| GHSA-mrhx-c7xc-m3w5 | CVE-2023-54404 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | yes |
Background: What a vulnerability scan can and cannot prove →
Dependencies 95 packages
| Packages resolved | 95 |
|---|---|
| Stale | 30 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
artifact_make Build a canonical financial artifact ~314
Assemble a Canonical Financial Artifact (scope, assumptions, citations, kernel plan, proof, reproducibility, auditHash) — the structured proof bundle a financial answer should carry. Every field is required and auditHash is verified, not just format-checked: it must be a digest a kernel call (ledger_post / ledger_audit_hash / ledger_verify_determinism / trace_run) actually returned in this session, or one this tool can recompute from the serialized `ledger` you pass alongside it. A fabricated value — even a well-formed one — is rejected. Validates that the kernel plan references core primitives; errors otherwise.
| Name | Type | Req | Description |
|---|---|---|---|
| assumptions | array | yes | – |
| auditHash | string | yes | The exact auditHash string returned by a prior ledger_post / ledger_audit_hash / ledger_verify_determinism / trace_run call in this session — proves the claim instead of asserting it. |
| citations | array | yes | Real canon/kernel references (e.g. GAAP/IFRS cites from cite_lookup, or "core:double-entry"). Never defaulted. |
| kernelPlan | string | yes | The actual primitives used, e.g. "Money.from + createEntry + Ledger.apply + validateEntry" |
| ledger | object | – | Optional: the serialized ledger the auditHash belongs to. If provided, the hash is recomputed from it and compared — useful when the hash was produced outside this server process. |
| proof | string | yes | – |
| reproducibility | string | yes | – |
| scope | string | yes | – |
No output schema declared.
No examples provided.
cashflow_statement Direct-method cash flow statement ~141
Derive an exact direct-method cash flow statement from a serialized ledger: operating / investing / financing flows per currency, with opening and closing cash. Cash accounts are detected by convention (Asset codes starting CASH or names containing "cash") unless cashAccountCodes is supplied. Self-checks that opening + netChange === closing. Kernel verified.
| Name | Type | Req | Description |
|---|---|---|---|
| cashAccountCodes | array | – | Explicit cash account codes |
| end | string | – | Inclusive period end YYYY-MM-DD |
| ledger | object | – | Serialized ledger (Ledger.toJSON shape). Strict shape for MCP; kernel fromJSON does final validation. |
| start | string | – | Inclusive period start YYYY-MM-DD |
No output schema declared.
No examples provided.
cite_lookup Look up accounting citations ~80
Retrieve matching IFRS/GAAP facts and citations from the kernel knowledge graph for a query (e.g. "revenue recognition", "lease", "cost basis"). Use to ground claims in canon rather than asserting from memory.
| Name | Type | Req | Description |
|---|---|---|---|
| asOf | string | – | – |
| levers | object | – | Optional dimension filters |
| query | string | yes | – |
No output schema declared.
No examples provided.
closing_generate_entries Generate closing entries to Retained Earnings ~89
Given a (serialized) ledger snapshot and close date, returns balanced JournalEntry[] that close Income/Expense to RE using the kernel. All entries are pre-validated. Kernel verified.
| Name | Type | Req | Description |
|---|---|---|---|
| closeDate | string | yes | – |
| ledger | object | – | Serialized ledger (Ledger.toJSON shape). Strict shape for MCP; kernel fromJSON does final validation. |
| retainedEarnings | object | – | – |
No output schema declared.
No examples provided.
depreciation_build_schedule Build depreciation / amortization schedule ~98
Exact straight-line (allocate) or declining balance schedule. Input cost/salvage/life/method. Returns periods with exact Money amounts as strings. Kernel-allocate based.
| Name | Type | Req | Description |
|---|---|---|---|
| commencementDate | string | yes | – |
| cost | object | yes | – |
| decliningRate | string | – | – |
| id | string | yes | – |
| method | string | yes | – |
| salvage | object | yes | – |
| usefulLifePeriods | integer | yes | – |
No output schema declared.
No examples provided.
entry_validate Validate a journal entry ~67
Run the kernel invariant check on a proposed journal entry: balanced debits=credits per currency, >=2 lines, positive amounts, no sub-scale precision, valid ISO date, no silent currency mix. Returns { ok, violations[] }. Always validate before posting.
| Name | Type | Req | Description |
|---|---|---|---|
| entry | object | yes | – |
No output schema declared.
No examples provided.
fx_compute_translation FX translation + CTA ~91
Translate ledger balances at asOf using provided rates into reportingCurrency. Returns holdings, translated totals, and the exact CTA plug amount. Always kernel-verified for balance.
| Name | Type | Req | Description |
|---|---|---|---|
| asOf | string | yes | – |
| ledger | object | – | Serialized ledger (Ledger.toJSON shape). Strict shape for MCP; kernel fromJSON does final validation. |
| rates | object | yes | – |
| reportingCurrency | string | yes | – |
No output schema declared.
No examples provided.
ledger_audit_hash Audit hash ~68
Compute the tamper-evident SHA-256 audit-hash chain for a serialized ledger. Any change to any field or line ordering yields a different hash.
| Name | Type | Req | Description |
|---|---|---|---|
| ledger | object | – | Serialized ledger (Ledger.toJSON shape). Strict shape for MCP; kernel fromJSON does final validation. |
No output schema declared.
No examples provided.
ledger_balance Account balance ~103
Net balance for an account in a serialized ledger, per its normal balance side. Pass "currency" for multi-currency accounts (otherwise fails closed). Returns all currencies via balancesByCurrency too.
| Name | Type | Req | Description |
|---|---|---|---|
| accountCode | string | yes | – |
| asOf | string | – | Optional as-of date YYYY-MM-DD |
| currency | string | – | – |
| ledger | object | – | Serialized ledger (Ledger.toJSON shape). Strict shape for MCP; kernel fromJSON does final validation. |
No output schema declared.
No examples provided.
ledger_post Post an entry to a ledger ~94
Validate and apply a journal entry to a (serialized) ledger, returning the new ledger JSON plus its audit hash. The kernel refuses unbalanced state: an invalid entry is NOT posted and its violations are returned instead. Omit "ledger" to start from empty.
| Name | Type | Req | Description |
|---|---|---|---|
| entry | object | yes | – |
| ledger | object | – | Serialized ledger (Ledger.toJSON shape). Strict shape for MCP; kernel fromJSON does final validation. |
No output schema declared.
No examples provided.
ledger_trial_balance Trial balance ~52
Every account in a serialized ledger with its current net balance (one row per currency).
| Name | Type | Req | Description |
|---|---|---|---|
| ledger | object | – | Serialized ledger (Ledger.toJSON shape). Strict shape for MCP; kernel fromJSON does final validation. |
No output schema declared.
No examples provided.
ledger_verify_determinism Verify determinism ~71
Rebuild a serialized ledger twice and confirm the two runs are byte-for-byte identical via their audit hashes AND that the fundamental equation holds. Returns { ok, hash }.
| Name | Type | Req | Description |
|---|---|---|---|
| ledger | object | – | Serialized ledger (Ledger.toJSON shape). Strict shape for MCP; kernel fromJSON does final validation. |
No output schema declared.
No examples provided.
ledger_verify_equation Verify accounting equation ~62
Verify Assets + Expenses = Liabilities + Equity + Income (per currency) holds for a serialized ledger. Returns { balanced }.
| Name | Type | Req | Description |
|---|---|---|---|
| ledger | object | – | Serialized ledger (Ledger.toJSON shape). Strict shape for MCP; kernel fromJSON does final validation. |
No output schema declared.
No examples provided.
money_compute Exact money arithmetic ~151
Perform EXACT decimal money arithmetic with the kernel (decimal.js, never floats). Use this for every monetary calculation instead of computing in your own tokens. Ops: add, sub (same currency), mul, div (money x scalar), allocate (split by ratios, remainder to last), convert (via FX rate), compare.
| Name | Type | Req | Description |
|---|---|---|---|
| a | object | yes | – |
| b | – | – | Second operand for add/sub/compare |
| op | string | yes | – |
| rate | object | – | FX rate for convert |
| ratios | array | – | Ratios for allocate |
| roundingMode | string | – | Rounding for mul/div/convert |
| scalar | string | – | Scalar for mul/div, as a decimal string |
No output schema declared.
No examples provided.
periods_create_lock Create a period lock (hard close) ~37
Create an immutable PeriodLock fact for use with guarded posting. effectiveDate <= lockDate will be rejected.
| Name | Type | Req | Description |
|---|---|---|---|
| lock | object | yes | – |
No output schema declared.
No examples provided.
periods_guarded_post Guarded ledger post (respects period locks) ~79
Like ledger_post but rejects entries whose effectiveDate falls on or before any provided period lock. Returns the same shape. Always kernel-verified.
| Name | Type | Req | Description |
|---|---|---|---|
| entry | object | yes | – |
| ledger | object | – | Serialized ledger (Ledger.toJSON shape). Strict shape for MCP; kernel fromJSON does final validation. |
| periodLocks | array | – | – |
No output schema declared.
No examples provided.
portfolio_relief Lot relief with holding-period classification ~120
Reconstruct open lots and realized disposals for an asset from the ledger using FIFO / LIFO / HIFO, with exact cost basis. Each disposal is broken down per consumed lot and classified short vs long term by holding days (default threshold 365). Fails closed on oversell. Kernel verified.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | – |
| ledger | object | – | Serialized ledger (Ledger.toJSON shape). Strict shape for MCP; kernel fromJSON does final validation. |
| longTermThresholdDays | integer | – | – |
| method | string | – | – |
No output schema declared.
No examples provided.
reconcile_positions Reconcile positions against an external source ~111
Compare ledger-derived balances against an external snapshot (exchange/custodian/bank), matched by account code AND currency. Returns per-account status (matched / mismatch / missing_in_ledger / missing_in_external) with exact diffs and an overall reconciled flag. Kernel verified.
| Name | Type | Req | Description |
|---|---|---|---|
| asOf | string | – | Optional as-of date YYYY-MM-DD |
| external | array | yes | – |
| ledger | object | – | Serialized ledger (Ledger.toJSON shape). Strict shape for MCP; kernel fromJSON does final validation. |
No output schema declared.
No examples provided.
settlement_build_entries Settlement-date (T+N) entries for a fill ~93
Split a fill into trade-date entries (asset moves; cash booked as a settlement receivable on a sell / payable on a buy) and settlement-date entries (the receivable/payable is swapped for cash). All entries are kernel-validated and balanced. Returns both entry sets as JSON. Kernel verified.
| Name | Type | Req | Description |
|---|---|---|---|
| fill | object | yes | – |
| lotMethod | string | – | – |
| settlementDate | string | yes | – |
No output schema declared.
No examples provided.
trace_run Trace a sequence of entries ~64
Replay a sequence of journal entries on a fresh ledger, capturing balances, the fundamental equation, and an audit-hash prefix at every step. This is the agent-facing audit trail. Fails closed with the offending step if any entry is invalid.
| Name | Type | Req | Description |
|---|---|---|---|
| entries | array | yes | – |
No output schema declared.
No examples provided.
How do I install the io.github.eternal-roman/ledger MCP server?
io.github.eternal-roman/ledger runs locally as an npm package, launched with npx -y @eternal-roman/ledger-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @eternal-roman/ledger-mcp
claude mcp add eternal-roman-ledger -- npx -y @eternal-roman/ledger-mcp
What is the io.github.eternal-roman/ledger MCP server?
io.github.eternal-roman/ledger is an MCP server listed in the public MCP registry as io.github.eternal-roman/ledger. Exact-decimal double-entry for agents. Call MCP tools; do not do money math in tokens. This page covers its npm package (@eternal-roman/ledger-mcp).
Is the io.github.eternal-roman/ledger MCP server safe to use?
io.github.eternal-roman/ledger scores 79 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 25 October 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.eternal-roman/ledger MCP server expose?
io.github.eternal-roman/ledger exposes 20 tools: money_compute, entry_validate, ledger_post, ledger_balance, ledger_trial_balance, and 15 more. Their descriptions and schemas cost roughly 1,985 tokens of context every time the server is loaded.
Is the io.github.eternal-roman/ledger MCP server still maintained?
io.github.eternal-roman/ledger is still listed as active in the MCP registry. We last reached this channel on 25 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.github.eternal-roman/ledger MCP server under?
io.github.eternal-roman/ledger declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.