MCPHub LabRegistryrustledger/rustledger
rustledger

rustledger/rustledger

Built by rustledger 179 stars

What is rustledger/rustledger?

Modern plain text accounting. Beancount compatible.

How to use rustledger/rustledger?

1. Install a compatible MCP client (like Claude Desktop). 2. Open your configuration settings. 3. Add rustledger/rustledger using the following command: npx @modelcontextprotocol/rustledger-rustledger 4. Restart the client and verify the new tools are active.
🛡️ Scoped (Restricted)
npx @modelcontextprotocol/rustledger-rustledger --scope restricted
🔓 Unrestricted Access
npx @modelcontextprotocol/rustledger-rustledger

Key Features

Native MCP Protocol Support
Real-time Tool Activation & Execution
Verified High-performance Implementation
Secure Resource & Context Handling

Optimized Use Cases

Extending AI models with custom local capabilities
Automating system workflows via natural language
Connecting external data sources to LLM context windows

rustledger/rustledger FAQ

Q

Is rustledger/rustledger safe?

Yes, rustledger/rustledger follows the standardized Model Context Protocol security patterns and only executes tools with explicit user-granted permissions.

Q

Is rustledger/rustledger up to date?

rustledger/rustledger is currently active in the registry with 179 stars on GitHub, indicating its reliability and community support.

Q

Are there any limits for rustledger/rustledger?

Usage limits depend on the specific implementation of the MCP server and your system resources. Refer to the official documentation below for technical details.

Official Documentation

View on GitHub
<div align="center">

rustledger

A blazing-fast Rust implementation of Beancount

Parse and validate your ledger faster than Python beancount.

crates.io npm Packaging status docs.rs

CI Compatibility

License: GPL v3 Liberapay

</div>

Why rustledger?

10-30x fasterParse and validate large ledgers in milliseconds (see benchmarks)
No dependenciesNo Python runtime, no libraries to install
Drop-in replacementCompatible bean-* CLI commands for easy migration
Full compatibilityParses any valid beancount file
Editor supportLSP server for VS Code, Neovim, Helix, and more
AI-readyMCP server for Claude, Cursor, and other AI assistants
Runs anywhereWebAssembly support for browser and Node.js
Better errorsDetailed error messages with source locations
30 built-in pluginsPlus Python plugin compatibility via WASI sandbox
<details> <summary><strong>Comparison with other tools</strong></summary>
FeaturerustledgerPython beancounthledgerledger-cli
LanguageRustPythonHaskellC++
SpeedVery fastSlowFastFast
Beancount syntaxNativeNativeVia conversionNo
Query languageBQL (100% compat)BQLCustomCustom
LSP serverBuilt-inNoVia pluginNo
WASM supportYesNoPartialNo
Plugin systemNative + PythonPythonHaskellCustom
Active developmentYesMaintenanceYesLimited

When to use rustledger:

  • You use Beancount syntax and want speed
  • You want a single binary with no runtime dependencies
  • You need LSP editor integration
  • You want to use existing Python plugins

When to use Python beancount:

  • You need Fava web interface (until rustledger integration)
  • You have complex Python plugins with C extensions

When to use hledger:

  • You prefer hledger's syntax and reports
  • You need time-tracking features
</details>

Install

PlatformCommand
macOSbrew install rustledger
Linuxbrew install rustledger
Arch Linuxyay -S rustledger-bin
Fedora/RHELsudo dnf copr enable robcohen/rustledger && sudo dnf install rustledger
Windowsscoop bucket add rustledger https://github.com/rustledger/scoop-rustledger && scoop install rustledger
Cargocargo binstall rustledger or cargo install rustledger
Nixnix run github:rustledger/rustledger
Dockerdocker run --rm -v "$PWD:/data" ghcr.io/rustledger/rustledger /data/ledger.beancount
BinariesGitHub Releases
npm (WASM)npm install @rustledger/wasm
npm (MCP)npx @rustledger/mcp-server (Model Context Protocol server)

<sub>Missing your platform? Open an issue to request it.</sub>

Coming from Python beancount? See the Migration Guide for command equivalents and plugin mapping.

Quick Start

rledger check ledger.beancount
rledger query ledger.beancount "SELECT account, SUM(position) GROUP BY account"

CLI Commands

CommandDescription
rledger checkValidate ledger files with detailed error messages
rledger queryRun BQL queries (interactive shell or one-shot)
rledger formatAuto-format beancount files
rledger reportGenerate balance, account, and statistics reports
rledger addAdd transactions interactively or via quick mode
rledger doctorDebugging tools for ledger issues
rledger extractImport transactions from CSV/OFX bank statements
rledger priceFetch commodity prices from online sources
rledger-lspLanguage Server Protocol for editor integration

Python beancount users can also use bean-check, bean-query, etc.

<details> <summary><strong>Report subcommands</strong></summary>
SubcommandAliasDescription
balancesAll account balances
balsheetbalBalance sheet report
incomeisIncome statement
journalregisterTransaction register
holdingsInvestment holdings
networthNet worth over time
accountsList all accounts
commoditiesList all commodities
pricesPrice entries
statsLedger statistics
</details> <details> <summary><strong>Doctor subcommands</strong></summary>

Debugging and diagnostic tools:

SubcommandDescription
lexDump lexer tokens (alias: dump-lexer)
parseParse and show directives
contextShow transaction context at a line number
linkedFind transactions by link (^link) or tag (#tag)
missing-openGenerate missing Open directives
list-optionsList all available beancount options
print-optionsPrint options parsed from a file
statsDisplay ledger statistics
display-contextShow inferred decimal precision context
roundtripRound-trip parse/format test
directoriesValidate directory hierarchy against accounts
regionPrint transactions in a line range with balances
generate-syntheticGenerate synthetic test files
# Debug a parsing issue at line 42
rledger doctor context ledger.beancount 42

# Find all transactions with a link
rledger doctor linked ledger.beancount ^trip-2024

# Generate Open directives for accounts missing them
rledger doctor missing-open ledger.beancount >> ledger.beancount
</details>

<sub>Run rledger <command> --help for all options.</sub>

<details> <summary><strong>CLI examples</strong></summary>
# Validate with plugins
rledger check --native-plugin auto_accounts ledger.beancount

# Interactive query shell
rledger query ledger.beancount

# One-shot query
rledger query ledger.beancount "SELECT date, narration WHERE account ~ 'Expenses:Food'"

# Reports
rledger report ledger.beancount balances
rledger report ledger.beancount stats

# Format in place
rledger format --in-place ledger.beancount
</details>

Crates

CrateDescription
rustledgerCLI tool (rledger check, rledger query, etc.)
rustledger-coreCore types: Amount, Position, Inventory
rustledger-parserLexer and parser with error recovery
rustledger-loaderFile loading and includes
rustledger-bookingInterpolation and 7 booking methods
rustledger-validate27 validation error codes
rustledger-queryBQL query engine
rustledger-plugin30 built-in plugins + Python plugin support
rustledger-importerCSV/OFX import framework
rustledger-lspLanguage Server Protocol for editor integration
rustledger-wasmWebAssembly bindings for JavaScript/TypeScript
rustledger-ffi-wasiFFI via WASI for embedding in any language
<details> <summary><strong>Booking methods (7)</strong></summary>
MethodDescription
STRICTLots must match exactly (default)
STRICT_WITH_SIZEExact-size matches accept oldest lot
FIFOFirst in, first out
LIFOLast in, first out
HIFOHighest cost first
AVERAGEAverage cost basis
NONENo cost tracking
</details> <details> <summary><strong>Built-in plugins (30)</strong></summary>
PluginDescription
auto_accountsAuto-generate Open directives
auto_tagAutomatically tag transactions
box_accrualAccrual accounting for boxed periods
capital_gains_gain_lossSplit capital gains into gain/loss accounts
capital_gains_long_shortSplit capital gains by holding period
check_average_costValidate average cost bookings
check_closingZero balance assertion on account close
check_commodityValidate commodity declarations
check_drainedEnsure accounts are drained before close
close_treeClose descendant accounts
coherent_costEnforce cost OR price (not both)
commodity_attrValidate commodity attributes
currency_accountsAuto-generate currency trading postings
effective_dateOverride posting date via metadata
forecastGenerate recurring transactions
generate_base_ccy_pricesCreate base currency price entries
implicit_pricesGenerate price entries from transaction costs
leafonlyError on postings to non-leaf accounts
noduplicatesHash-based duplicate transaction detection
nounusedWarn on unused accounts
onecommoditySingle commodity per account
pedanticEnable all strict validations
rename_accountsRename accounts via metadata
rxtxnLink related transactions
sellgainsCross-check capital gains against sales
split_expensesSplit expenses across accounts
unique_pricesOne price per day per commodity pair
unrealizedCalculate unrealized gains
valuationMark-to-market valuation
zerosumGroup transactions that sum to zero

Additionally, document_discovery auto-discovers documents from option "documents" directories.

Python plugins: Run existing Python beancount plugins via CPython-WASI sandbox.

</details> <details> <summary><strong>Plugin support</strong></summary>

rustledger supports three types of plugins:

Native plugins (built-in, fastest):

# Run a native plugin from CLI
rledger check --native-plugin implicit_prices ledger.beancount

# Or declare in your beancount file (auto-detected as native):
# plugin "beancount.plugins.auto_accounts"

Python file plugins (via WASM sandbox):

# Declare in your beancount file:
# plugin "/path/to/my_plugin.py"

WASM plugins (sandboxed WebAssembly):

# Load a WASM plugin
rledger check --plugin /path/to/plugin.wasm ledger.beancount

How Python plugins work:

  • File-based plugins (.py files) run in a sandboxed CPython compiled to WebAssembly
  • No system Python installation required
  • Plugins cannot access the filesystem or network (sandbox isolation)
  • Compatible with most pure-Python beancount plugins

Limitations:

  • Module-based plugins (beancount.plugins.xyz) only work if rustledger has a native implementation
  • Plugins with C extensions won't work (numpy, pandas, etc.)
  • No network access (price fetching plugins need alternatives)
</details>

Editor Integration

rustledger includes a full-featured Language Server (rledger-lsp) for IDE support:

  • Real-time diagnostics
  • Autocompletion (accounts, currencies, payees)
  • Go to definition / find references
  • Hover information with account balances
  • Rename refactoring
  • Document formatting

See LSP setup guide for VS Code, Neovim, Helix, Zed, and Emacs.

Performance

<picture> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/rustledger/rustledger/benchmarks/.github/badges/validation-chart.svg"> <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/rustledger/rustledger/benchmarks/.github/badges/validation-chart.svg"> <img alt="Validation Benchmark" src="https://raw.githubusercontent.com/rustledger/rustledger/benchmarks/.github/badges/validation-chart.png" width="100%"> </picture> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/rustledger/rustledger/benchmarks/.github/badges/balance-chart.svg"> <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/rustledger/rustledger/benchmarks/.github/badges/balance-chart.svg"> <img alt="Balance Report Benchmark" src="https://raw.githubusercontent.com/rustledger/rustledger/benchmarks/.github/badges/balance-chart.png" width="100%"> </picture>

<sub>Benchmarks run nightly on 10K transaction ledgers. View workflow →</sub>

<details> <summary><strong>Benchmark details</strong></summary>

What's measured:

  • Validation: Parse ledger + validate (balance assertions, account opens, etc.)
  • Balance Report: Parse + compute all account balances

Memory efficiency: rustledger typically uses 3-5x less memory than Python beancount thanks to Rust's zero-cost abstractions and efficient data structures.

Run locally:

# Quick comparison (requires nix)
nix develop .#bench
./scripts/bench.sh

# Criterion micro-benchmarks
cargo bench -p rustledger-core
cargo bench -p rustledger-parser

See BENCHMARKING.md for detailed benchmark documentation.

</details>

Contributing

See CONTRIBUTING.md for development setup and guidelines.

Documentation:

By submitting a pull request, you agree to the Contributor License Agreement.

License

GPL-3.0

Commercial licensing available - contact us for proprietary license options.

Funding

rustledger is free and open source. If you find it useful, consider supporting development:

Support on Liberapay

Global Ranking

8.5
Trust ScoreMCPHub Index

Based on codebase health & activity.

Manual Config

{ "mcpServers": { "rustledger-rustledger": { "command": "npx", "args": ["rustledger-rustledger"] } } }