Canhoto
FreeNot checkedLocal-first personal finance engine for statement parsing, safe agent workflows, and monthly PDF summaries.
About
Local-first personal finance engine for statement parsing, safe agent workflows, and monthly PDF summaries.
README
Canhoto keeps your bank and card statement data on your computer. It helps you parse statements, categorize spending, review uncertain items, and export a monthly PDF.
Using an AI agent? Connect
canhoto-mcp. It gives the agent a safe, bounded workflow for parsing statements, reviewing and categorizing expenses, viewing monthly totals, and exporting reports. It never gives the agent SQL access or a full ledger dump. Use the CLI for the same workflow by hand.
| Package | canhoto |
| CLI | canhoto |
| MCP | canhoto-mcp |
| Data | ~/.canhoto or $CANHOTO_DATA_DIR |
Install
Install a release:
uv tool install canhoto
Or run this repository locally:
uv sync
uv run canhoto --help
Create the local data directory:
canhoto init
canhoto doctor
How it works
flowchart TD
A[Statement PDF or text] --> B[Parser]
B --> C[Ingest]
C --> D[(Local SQLite ledger)]
D --> E[Run category rules]
E --> F[Review uncertain items]
F --> G[Apply categories or save merchant memory]
G --> H[Monthly breakdown]
H --> I[Summary PDF]
Parsers only extract statement rows. Canhoto core handles categories, merchant memory, reports, and exports.
Create a parser
Canhoto does not ship bank-specific parsers. Create one for your statement:
canhoto parsers scaffold --id my_bank_card --type card --institution my_bank
Edit ~/.canhoto/parsers/my_bank_card.py, then test and enable it:
canhoto parsers test --id my_bank_card --file ~/statements/sample.pdf
canhoto parsers enable --id my_bank_card
A parser must successfully extract transactions before it can be enabled. See examples/parsers/ for a small example.
Process a month
# Ingest statements.
canhoto ingest ~/statements/*.pdf
# Apply category rules and remembered merchant categories.
canhoto categorize rules --month 2026-06
# Review anything still uncertain.
canhoto review --month 2026-06 --json
# See income, expenses, and category totals.
canhoto breakdown --month 2026-06
# Create a local PDF report.
canhoto export pdf 2026-06
To remember a category for later matching merchants:
canhoto categorize merchant --key CURSOR --category Subscriptions
The PDF is written to ~/.canhoto/exports/2026-06-summary.pdf by default.
It shows totals by category and top normalized merchants within each category.
It never contains a full transaction table or raw statement descriptions.
PDF profiles
Choose a built-in style:
canhoto export pdf 2026-06 --profile canhoto
canhoto export pdf 2026-06 --profile modern --output ~/Documents/2026-06.pdf
canhoto export pdf 2026-06 --profile minimal
canhoto- receipt-style report with a category chart.modern- clean report with metric cards and a category chart.minimal- text-only report without a chart.
MCP
The CLI and MCP server use the same service layer. For agent-assisted use, start the MCP server and follow this flow:
statement_preview -> parser_* -> ingest -> run_rules ->
review_batch -> set_categories -> month_breakdown -> export_pdf
MCP only exposes domain tools. It does not provide SQL access or full ledger
dumps. To let an agent write parsers, add this to ~/.canhoto/config.json:
{ "agent_view": { "allow_parser_writes": true } }
Example MCP host configuration:
mcp_servers:
canhoto:
command: canhoto-mcp
CLI commands
canhoto init | doctor
canhoto parsers scaffold|test|enable|list
canhoto ingest <files...>
canhoto categorize rules --month YYYY-MM
canhoto categorize apply --file patches.json
canhoto categorize merchant --key KEY --category CAT
canhoto review --month YYYY-MM [--cursor] [--limit]
canhoto breakdown --month YYYY-MM
canhoto export pdf YYYY-MM [--profile canhoto|modern|minimal] [--output PATH]
Develop
uv sync --extra dev
uv run pytest -q
uv run ruff check src/canhoto tests
uv run mypy -p canhoto
Privacy
Your statements and database stay in the data directory. Do not commit
statements, tokens, database files, or ~/.canhoto.
Installing Canhoto
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/luabagg/canhotoFAQ
Is Canhoto MCP free?
Yes, Canhoto MCP is free — one-click install via Unyly at no cost.
Does Canhoto need an API key?
No, Canhoto runs without API keys or environment variables.
Is Canhoto hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Canhoto in Claude Desktop, Claude Code or Cursor?
Open Canhoto on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
wenb1n-dev/SmartDB_MCP
A universal database MCP server supporting simultaneous connections to multiple databases. It provides tools for database operations, health analysis, SQL optim
by wenb1n-devPostgres Server
This server enables interaction with PostgreSQL databases through the Model Context Protocol, optimized for the AWS Bedrock AgentCore Runtime. It provides tools
by madhurprashPostgres
Query your database in natural language
by AnthropicPostgreSQL
Read-only database access with schema inspection.
by modelcontextprotocolRedis
Interact with Redis key-value stores.
by modelcontextprotocolSQLite
Database interaction and business intelligence capabilities.
by modelcontextprotocolmxcp
Open-source framework for building enterprise-grade MCP servers using just YAML, SQL, and Python, with built-in auth, monitoring, ETL and policy enforcement.
by raw-labstadas-github/a2asearch-mcp
MCP server to search 4,800+ MCP servers, AI agents, CLI tools and agent skills. Install: npx -y a2asearch-mcp. Ask Claude: "Find MCP servers for database access
by tadas-githubjulien040/anyquery
Query more than 40 apps with one binary using SQL. It can also connect to your PostgreSQL, MySQL, or SQLite compatible database. Local-first and private by desi
by julien040drakonkat/wizzy-mcp-tmdb
A MCP server for The Movie Database API that enables AI assistants to search and retrieve movie, TV show, and person information.
by drakonkatCompare Canhoto with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All data MCPs
