Skip to main content
Glama
anikam13

finledger

by anikam13

FinLedger

Локальная финансовая книга с тремя поверхностями чтения, плюс MCP-сервер, чтобы агент мог запрашивать их:

  • expenses: расходные счета, сверяемые с возмещениями от коллег

  • investments: брокерские остатки, позиции и активность

  • income: зарплата (гросс, удержания, на руки)

Расходы и инвестиции используют общее хранилище и больше ничего. Счёт имеет явный domain, и каждый запрос расходов проходит через него, поэтому покупка акций не может попасть в матчер возмещений.

Матчер основан на правилах. Он воздерживается, когда не уверен. Человек или агент подтверждает, прежде чем совпадение уменьшит чистые расходы.

Реальные транзакции, расчётные листы и API-ключи остаются на вашей машине (~/.finledger/ledger.db, .env). Этот репозиторий содержит только код и синтетический набор для оценки.

Установка

Python 3.10+. Книга, матчер, MCP-цикл и среда оценки используют стандартную библиотеку. pypdf необязателен и нужен только для импорта PDF-расчётных листов.

pip install -e .

Related MCP server: MCP Agent - AI Expense Tracker

MCP-сервер

python3 -m finledger.mcp_server --db ~/.finledger/ledger.db

18 инструментов с пространствами имён expenses_*, investments_* и income_*, плюс savings_rate, accounts, sync и reconcile.

Пример для Cursor (~/.cursor/mcp.json):

{
  "mcpServers": {
    "finledger": {
      "command": "python3",
      "args": ["-m", "finledger.mcp_server"]
    }
  }
}

Путь к книге по умолчанию: ~/.finledger/ledger.db.

CLI

finledger sync
finledger reconcile
finledger review
finledger serve

finledger serve открывает локальный стол на :8770. На macOS вы также можете дважды щёлкнуть scripts/Expense Desk.command.

Дополнительные живые источники (поместите учётные данные в .env, никогда не коммитьте его):

Источник

Как

shim.finance (карта + Venmo)

SHIM_API_KEY

SnapTrade (расчётный счёт + брокерские счета)

SNAPTRADE_CLIENT_ID, SNAPTRADE_CONSUMER_KEY, SNAPTRADE_USER_ID, SNAPTRADE_RECOVER

Импорт CSV карты

finledger sync --card-csv PATH --card-account-id ID

PDF расчётного листа

python3 scripts/paystub_import.py statement.pdf (требуется pypdf)

Скопируйте .env.example в .env.

Публичная оценка

Опубликованный эталонный набор является синтетическим. Он генерируется scripts/make_sample_data.py и находится в data-sample/. Каждая строка транзакции помечена synthetic: true. Это набор покрытия для поведения матчера (чистое совпадение, фан-ин, объединение, родительская исходящая от коллеги, мерчант-кредиты, слабые заметки, кросс-источниковые двойники). Это не анонимизированные реальные данные.

python3 scripts/eval_public.py
# equivalent:
python3 -m reconcile.eval --matcher rules_v0

Числа, которые можно воспроизвести из этого репозитория

Измерено на data-sample/ с rules_v0 (окно ±90 дней, порог автоподбора 0.75):

Метрика

Значение

оцениваемые примеры

22 (2 unsure labels skipped)

точность на точном наборе

72.7% (16/22)

краевые P / R / F1

81.2% / 61.9% / 70.3%

точность автоподбора

85.7% (n=14; 12 tp, 2 fp)

полнота автоподбора по эталонным совпадениям

66.7%

Перезапустите python3 scripts/eval_public.py, чтобы обновить эти числа. Два оставшихся ложных срабатывания на выборке — реальные слабости матчера, включая чрезмерное срабатывание правила повышения полноты для эмодзи.

Чего нет в этом репозитории

В ходе разработки использовался частный эталонный набор из примерно 92 размеченных примеров. В нём указаны реальные люди и реальные покупки, и он не публикуется. Не рассматривайте числа на выборке как воспроизведение того набора. Другой корпус, другой размер, другие оценки.

Этот репозиторий не претендует на 100% точность автоподбора.

Матчер

См. reconcile/README.md. Краткая версия:

Name

Behavior

baseline

Ближайший платёж в пределах ±$1 и окна дат. Пусто, если нет.

rules_v0

Соответствие суммы + дата + пересечение заметки/мерчанта, с вето. Автоподбор при уверенности >= 0.75; иначе воздержание.

rules_v0_llm

То же, что rules_v0, затем опциональный вызов Groq по остатку для проверки (GROQ_API_KEY).

Разметьте корпус выборки с помощью python3 labeling/app.py (по умолчанию data-sample/).

Лицензия

MIT

A
license - permissive license
B
quality
C
maintenance

Maintenance

UpdatingMaintainers
UpdatingResponse time
Release cycle
0Releases (12mo)
Commit activity

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

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    13
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides 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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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