{"apiVersion":"v1","directorySlug":"journalize-mcp-09d27bb5ba","title":"Journalize","description":"Give an AI agent a real double-entry ledger: an account it opens once, transactions validated by real Beancount rules, and balance sheets/income statements it can pull on demand. REST and MCP, priced per call via x402.","pageUrl":"https://www.mcpbundles.com/skills/journalize-mcp-09d27bb5ba","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://journalize.dev/mcp","hostedMcpUrl":null,"toolCount":11,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"dev.journalize/journalize-mcp-09d27bb5ba","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"submit_directive","description":"Submit one Beancount directive (open, transaction, close, balance,\n    price, note, document — any type). Paid, except your first 20\n    accepted writes per registered key, which are free (this specific\n    tool only — submit_batch is always paid, even for your first call).\n    Call with no payment_header first: if free writes remain, this\n    succeeds immediately; otherwise you'll get price/asset/recipient\n    back, so you can retry with payment_header set to your signed\n    X-PAYMENT-equivalen","inputSchema":{"type":"object","required":["text","public_key","nonce","timestamp","signature"],"properties":{"text":{"type":"string"},"nonce":{"type":"string"},"signature":{"type":"string"},"timestamp":{"type":"string"},"public_key":{"type":"string"},"payment_header":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"submit_directive","displayName":"submit_directive","title":"submit_directive","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"validate_directive","description":"Free dry-run: parse+book text against your full history without\n    persisting or charging anything. Still requires a valid signature\n    (identity/replay protection is not a billing concern).","inputSchema":{"type":"object","required":["text","public_key","nonce","timestamp","signature"],"properties":{"text":{"type":"string"},"nonce":{"type":"string"},"signature":{"type":"string"},"timestamp":{"type":"string"},"public_key":{"type":"string"}}},"logicalName":"validate_directive","displayName":"validate_directive","title":"validate_directive","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"submit_batch","description":"Submit up to 1000 directives atomically — all persist together or\n    none do. Priced 10x a single write, regardless of batch size within\n    the cap. Always paid — the free-trial allowance (see\n    submit_directive) applies to single writes only, never to batches,\n    even if you haven't used any free writes yet. Paid.","inputSchema":{"type":"object","required":["directives","public_key","nonce","timestamp","signature"],"properties":{"nonce":{"type":"string"},"signature":{"type":"string"},"timestamp":{"type":"string"},"directives":{"type":"array","items":{"type":"string"}},"public_key":{"type":"string"},"payment_header":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"submit_batch","displayName":"submit_batch","title":"submit_batch","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_directives","description":"List raw directives (optionally filtered by account/date range). No\n    booking involved — cheapest paid tool. `since`/`until` are ISO date\n    strings (YYYY-MM-DD). Your first 2 calls per registered key are free\n    (independent of the write/accounts/report allowances — see\n    list_accounts, get_balance_sheet).","inputSchema":{"type":"object","required":["public_key","nonce","timestamp","signature"],"properties":{"limit":{"type":"integer","default":100},"nonce":{"type":"string"},"since":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"until":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"account":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"signature":{"type":"string"},"timestamp":{"type":"string"},"public_key":{"type":"string"},"payment_header":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"list_directives","displayName":"list_directives","title":"list_directives","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_accounts","description":"List all opened accounts with their currency constraints and\n    booking method. No booking pass involved. Your first 2 calls per\n    registered key are free (a separate allowance from list_directives'\n    and the report tier's — see those tools).","inputSchema":{"type":"object","required":["public_key","nonce","timestamp","signature"],"properties":{"nonce":{"type":"string"},"signature":{"type":"string"},"timestamp":{"type":"string"},"public_key":{"type":"string"},"payment_header":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"list_accounts","displayName":"list_accounts","title":"list_accounts","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_account_balance","description":"Balance of a single account. Settles at the same fixed price\n    whether the account exists or not — an \"unknown account\" answer is\n    still a valid, billable response (no per-error pricing discount). No\n    free-trial allowance for this specific tool, unlike list_directives\n    (same price, but list_directives has 2 free calls and this doesn't) —\n    the free tier applies to browsing (list_directives, list_accounts)\n    and the report tier, not per-account lookups.","inputSchema":{"type":"object","required":["account","public_key","nonce","timestamp","signature"],"properties":{"nonce":{"type":"string"},"account":{"type":"string"},"signature":{"type":"string"},"timestamp":{"type":"string"},"public_key":{"type":"string"},"payment_header":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_account_balance","displayName":"get_account_balance","title":"get_account_balance","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"export_ledger","description":"Export the full ledger as literal Beancount text — a portable\n    snapshot for fava/bean-report/etc., not the live store. Shares a\n    combined free allowance of 2 with get_balance_sheet,\n    get_income_statement, and get_trial_balance (the \"report tier\") — not\n    2 free calls for each of those four separately.","inputSchema":{"type":"object","required":["public_key","nonce","timestamp","signature"],"properties":{"nonce":{"type":"string"},"signature":{"type":"string"},"timestamp":{"type":"string"},"public_key":{"type":"string"},"payment_header":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"export_ledger","displayName":"export_ledger","title":"export_ledger","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_balance_sheet","description":"Full realize() balance sheet — often served from cache. Settles at\n    the same fixed price regardless of cache hit/miss. Shares a combined\n    free allowance of 2 with export_ledger, get_income_statement, and\n    get_trial_balance (the \"report tier\") — not 2 free calls each.","inputSchema":{"type":"object","required":["public_key","nonce","timestamp","signature"],"properties":{"nonce":{"type":"string"},"signature":{"type":"string"},"timestamp":{"type":"string"},"public_key":{"type":"string"},"payment_header":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_balance_sheet","displayName":"get_balance_sheet","title":"get_balance_sheet","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_income_statement","description":"Income statement, period-scoped by since/until (ISO date strings,\n    both optional — omitted means whole history). Always books full\n    history first, then clamps the output to the requested period (never\n    filters input dates — see reports.py for why). Shares a combined free\n    allowance of 2 with export_ledger, get_balance_sheet, and\n    get_trial_balance (the \"report tier\") — not 2 free calls each.","inputSchema":{"type":"object","required":["public_key","nonce","timestamp","signature"],"properties":{"nonce":{"type":"string"},"since":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"until":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"signature":{"type":"string"},"timestamp":{"type":"string"},"public_key":{"type":"string"},"payment_header":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_income_statement","displayName":"get_income_statement","title":"get_income_statement","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_trial_balance","description":"Trial balance, period-scoped same as income statement — same\n    underlying compute, priced and audited as its own resource. Shares a\n    combined free allowance of 2 with export_ledger, get_balance_sheet,\n    and get_income_statement (the \"report tier\") — not 2 free calls\n    each.","inputSchema":{"type":"object","required":["public_key","nonce","timestamp","signature"],"properties":{"nonce":{"type":"string"},"since":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"until":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"signature":{"type":"string"},"timestamp":{"type":"string"},"public_key":{"type":"string"},"payment_header":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_trial_balance","displayName":"get_trial_balance","title":"get_trial_balance","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"register","description":"Generate a new Ed25519 keypair for ledger identity. Returns the\n    private key exactly once — it is never stored server-side and cannot\n    be recovered if lost. This is a SEPARATE keypair from whatever wallet\n    you use to authorize x402 payments (payment auth and ledger identity\n    are two independent signing domains — see payments.py).","inputSchema":{"type":"object","properties":{}},"logicalName":"register","displayName":"register","title":"register","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Journalize&config=eyJ1cmwiOiAiaHR0cHM6Ly9qb3VybmFsaXplLmRldi9tY3AifQ%3D%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Journalize%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fjournalize.dev%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Journalize%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fjournalize.dev%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Journalize&connectorUrl=https%3A%2F%2Fjournalize.dev%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Journalize\" --url \"https://journalize.dev/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/journalize-mcp-09d27bb5ba","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/journalize-mcp-09d27bb5ba/tools/{tool}","mcpServerUrl":"https://journalize.dev/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/journalize-mcp-09d27bb5ba?live=1"}