finledger
FinLedger
Un libro de contabilidad financiera local con tres superficies de lectura, además de un servidor MCP para que un agente pueda consultarlas:
expenses: cuentas de gastos, conciliadas con reembolsos entre pares
investments: saldos de corretaje, tenencias y actividad
income: nómina (bruto, retenciones, neto)
Los gastos y las inversiones comparten un almacén y nada más. Una cuenta lleva un domain explícito, y cada consulta de gastos se une a través de él, de modo que una compra de acciones no puede llegar al emparejador de reembolsos.
El emparejador se basa en reglas. Se abstiene cuando no está seguro. Un humano o agente confirma antes de que un emparejamiento reduzca el gasto neto.
Las transacciones reales, los recibos de nómina y las claves de API permanecen en tu máquina (~/.finledger/ledger.db, .env). Este repositorio incluye solo código y un conjunto de evaluación sintético.
Instalación
Python 3.10+. El libro, el emparejador, el bucle MCP y el arnés de evaluación son de la biblioteca estándar. pypdf es opcional y solo se necesita para importar recibos de nómina en PDF.
pip install -e .Related MCP server: MCP Agent - AI Expense Tracker
Servidor MCP
python3 -m finledger.mcp_server --db ~/.finledger/ledger.db18 herramientas, con espacios de nombres expenses_*, investments_* e income_*, además de savings_rate, accounts, sync y reconcile.
Ejemplo de Cursor (~/.cursor/mcp.json):
{
"mcpServers": {
"finledger": {
"command": "python3",
"args": ["-m", "finledger.mcp_server"]
}
}
}La ruta predeterminada del libro es ~/.finledger/ledger.db.
CLI
finledger sync
finledger reconcile
finledger review
finledger servefinledger serve abre un escritorio local en :8770. En macOS también puedes hacer doble clic en scripts/Expense Desk.command.
Fuentes en vivo opcionales (pon las credenciales en .env, nunca lo confirmes):
Fuente | Cómo |
shim.finance (tarjeta + Venmo) |
|
SnapTrade (cuenta corriente + corretajes) |
|
Retroceso de CSV de tarjeta |
|
Recibo de nómina en PDF |
|
Copia .env.example a .env.
Evaluación pública
El conjunto dorado publicado es sintético. Se genera con scripts/make_sample_data.py y vive en data-sample/. Cada fila de transacción está marcada como synthetic: true. Es un conjunto de cobertura para los comportamientos del emparejador (emparejamiento limpio, fan-in, agrupación, padre de salida entre pares, créditos de comerciante, notas débiles, gemelos de fuentes cruzadas). No son datos reales anonimizados.
python3 scripts/eval_public.py
# equivalent:
python3 -m reconcile.eval --matcher rules_v0Números que puedes reproducir desde este repositorio
Medido en data-sample/ con rules_v0 (ventana ±90 días, umbral de autoemparejamiento 0.75):
Métrica | Valor |
ejemplos evaluables | 22 (2 etiquetas |
precisión de conjunto exacto | 72.7% (16/22) |
P / R / F1 de borde | 81.2% / 61.9% / 70.3% |
precisión de autoemparejamiento | 85.7% (n=14; 12 tp, 2 fp) |
recall de autoemparejamiento de emparejamientos dorados | 66.7% |
Vuelve a ejecutar python3 scripts/eval_public.py para actualizar estos números. Dos falsos positivos restantes en la muestra son debilidades reales del emparejador, incluida la regla de aumento de recall por emojis que se excede.
Lo que no está en este repositorio
Un conjunto dorado privado de aproximadamente 92 ejemplos etiquetados se usó durante el desarrollo. Nombra personas reales y compras reales y no se publica. No trates los números de la muestra como una reproducción de ese conjunto. Corpus diferente, tamaño diferente, puntuaciones diferentes.
Este repositorio no afirma una precisión de autoemparejamiento del 100%.
Emparejador
Consulta reconcile/README.md. Versión corta:
Nombre | Comportamiento |
| Cargo más cercano dentro de ±$1 y una ventana de fechas. Vacío si no hay ninguno. |
| Ajuste de importe + fecha + solapamiento de nota/comerciante, con vetos. Autoemparejamiento si confianza >= 0.75; si no, se abstiene. |
| Igual que |
Etiqueta el corpus de muestra con python3 labeling/app.py (por defecto usa data-sample/).
Licencia
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables interaction with local Beancount accounting ledgers through structured tools for viewing accounts, balances, and transactions, as well as inserting/removing transactions and answering natural-language questions via BeanQuery. Provides deterministic, validated, and auditable financial data operations with offline-first functionality.1
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage personal expenses through natural language conversations. Supports adding, searching, and analyzing transactions with automatic categorization and financial insights.3MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to query and analyze local personal finance data from Tusk Ledger through tools for transactions, accounts, investments, and more, without sending data to the internet.13MIT
- AlicenseNot gradedqualityCmaintenanceProvides tools for querying and writing finance records in a Notion-backed household finance workspace, enabling management of budgets, expenses, savings, and debt through natural language.MIT
Related MCP Connectors
Connect AI agents to bank accounts, transactions, balances, and investments.
Log, query, and edit expenses, budgets, and accounts in Ledgy from any MCP-compatible AI assistant.
Personal, family and business books over fiat and crypto. Reads and records; it cannot pay.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/anikam13/finledger'
If you have feedback or need assistance with the MCP directory API, please join our Discord server