cash-book

One double-entry ledger derived from your invoices, bank, expenses, deposits and assets.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
92%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,881Tokens (tool definitions)
~1.6 KBTypical response size
Moderate attention impact (1.47% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "cash-book": {
      "command": "uvx",
      "args": [
        "https://github.com/theluckystrike/mcp-servers/releases/download/v0.22.0/cash-book.mcpb"
      ]
    }
  }
}

Runnable packages

mcpbhttps://github.com/theluckystrike/mcp-servers/releases/download/v0.22.0/cash-book.mcpb0.22.0stdio

Remote endpoints

https://mcp.zovo.one/mcp/cash-bookstreamable-http

What it can do

Tool inventory

Tools (9)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪ledger_build(from, to, currency)

Derive the double-entry ledger for one period in ONE currency from the invoice, credit note, deposit, expense, bank and asset stores, and register it. Nothing is written back. Free: 3 periods a month.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "maxLength": 10,
      "description": "First day of the period, YYYY-MM-DD"
    },
    "to": {
      "type": "string",
      "maxLength": 10,
      "description": "Last day of the period, YYYY-MM-DD, inclusive"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Needed when the period holds documents in more than one currency. Currencies are never added together"
    }
  },
  "required": [
    "from",
    "to"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴period_delete(from, to, currency)

Delete one built period from the register and give its free-tier slot back. Refused when a closed month's snapshot covers the period, and that month is named. No sibling book is touched.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "maxLength": 10,
      "description": "First day of the period, YYYY-MM-DD"
    },
    "to": {
      "type": "string",
      "maxLength": 10,
      "description": "Last day of the period, YYYY-MM-DD, inclusive"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Needed only when the same date range was built in more than one currency"
    }
  },
  "required": [
    "from",
    "to"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡trial_balance(from, to, currency)

Total the debits and the credits for a period and prove they are equal to the minor unit. When they are not, name the entries whose own legs do not add up and the source document behind each. Free and unlimited.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "maxLength": 10,
      "description": "First day of the period, YYYY-MM-DD"
    },
    "to": {
      "type": "string",
      "maxLength": 10,
      "description": "Last day of the period, YYYY-MM-DD, inclusive"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Needed when the period holds documents in more than one currency. Currencies are never added together"
    }
  },
  "required": [
    "from",
    "to"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢ledger_lines(from, to, currency, account, source, ...)

List the ledger lines for a period, filtered by account, source server, source_id or date; each carries its debit, credit and bank_ref, with the totals of the rows returned. Filtered totals do not balance. Free.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "maxLength": 10,
      "description": "First day of the period, YYYY-MM-DD"
    },
    "to": {
      "type": "string",
      "maxLength": 10,
      "description": "Last day of the period, YYYY-MM-DD, inclusive"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Needed when the period holds documents in more than one currency. Currencies are never added together"
    },
    "account": {
      "type": "string",
      "maxLength": 200,
      "description": "Only this account, e.g. cash, receivables, vat_output, or a category prefix such as \"expenses\""
    },
    "source": {
      "type": "string",
      "maxLength": 200,
      "description": "Only lines derived from this server: invoice, billing-docs, deposits, expense-tracker or asset-register"
    },
    "source_id": {
      "type": "string",
      "maxLength": 200,
      "description": "Only lines derived from this document, e.g. INV-2026-0001"
    },
    "since": {
      "type": "string",
      "maxLength": 10,
      "description": "Only lines dated on or after this date, YYYY-MM-DD"
    },
    "until": {
      "type": "string",
      "maxLength": 10,
      "description": "Only lines dated on or before this date, YYYY-MM-DD"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5000,
      "description": "Maximum rows, default and ceiling 5000"
    }
  },
  "required": [
    "from",
    "to"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢month_close(month, currency, dry_run)

List what a month leaves unposted or unbalanced, with its trial balance and bank reconciliation, then store the close as a snapshot; a later call names any drift against it. dry_run writes nothing. Pro.

Input Schema

{
  "type": "object",
  "properties": {
    "month": {
      "type": "string",
      "maxLength": 7,
      "description": "The month to close, YYYY-MM"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Needed when the period holds documents in more than one currency. Currencies are never added together"
    },
    "dry_run": {
      "type": "boolean",
      "description": "Report the exceptions and the trial balance without writing the close. Default false"
    }
  },
  "required": [
    "month"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢ledger_export_csv(from, to, currency, account, source)

Return the period's ledger lines as RFC 4180 CSV, one row per leg, as a download link valid for one hour. Pro, but ledger_lines returns these same fields free and unlimited; this only lays them out as CSV columns.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "maxLength": 10,
      "description": "First day of the period, YYYY-MM-DD"
    },
    "to": {
      "type": "string",
      "maxLength": 10,
      "description": "Last day of the period, YYYY-MM-DD, inclusive"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Needed when the period holds documents in more than one currency. Currencies are never added together"
    },
    "account": {
      "type": "string",
      "maxLength": 200,
      "description": "Only this account or category prefix"
    },
    "source": {
      "type": "string",
      "maxLength": 200,
      "description": "Only lines derived from this server"
    }
  },
  "required": [
    "from",
    "to"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢ledger_report(from, to, currency)

Report a built period account by account: debits, credits, movement and closing balance, plus purchase commitments held as memos and the period's exceptions. Pro; ledger_lines gives the lines free.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "maxLength": 10,
      "description": "First day of the period, YYYY-MM-DD"
    },
    "to": {
      "type": "string",
      "maxLength": 10,
      "description": "Last day of the period, YYYY-MM-DD, inclusive"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Needed when the period holds documents in more than one currency. Currencies are never added together"
    }
  },
  "required": [
    "from",
    "to"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢license_status

Report this endpoint's licence state for your token as JSON: the product, the tier free or pro, why it is not Pro, and the checkout URL. Call it to explain a free-tier refusal. No arguments, nothing changes.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪license_activate(key)

Turn Pro on for this connection with key, an MCPL1.<payload>.<signature> issued at checkout for this server or the bundle. Data under your token stays; a wrong or expired key changes nothing. license_status confirms it.

Input Schema

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "License key from checkout, MCPL1.<payload>.<signature>"
    }
  },
  "required": [
    "key"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded9 tools
verifiedversion not recorded9 tools
verifiedversion not recorded9 tools