Skip to main content
Glama
Zen Money MCP

Zen Money MCP

by bulava92

Zen Money MCP

MCP-сервер для личного аккаунта Дзен-мани. Он использует официальный API Дзен-мани для чтения данных, анализа расходов и выполнения финансовых операций. Сервер работает через stdio и не открывает публичный HTTP-порт.

Каждому пользователю нужна собственная установка и собственный токен Дзен-мани. Не подключай личный токен к общему серверу для других пользователей: инструменты умеют читать и менять финансовые данные аккаунта.

Требования

  • Node.js 20 или новее и npm.

  • MCP-клиент с поддержкой stdio-серверов.

  • Доступ в интернет к api.zenmoney.ru.

  • Для установки Secure MCP Tunnel на Linux x86-64 доступен бинарный bin/tunnel-client; другим платформам потребуется совместимая версия.

Related MCP server: ynab-mcp-lite

Где получить токен Дзен-мани

Серверу нужен готовый access token Дзен-мани. В документации API ZenMoney описан OAuth 2.0: для собственного приложения нужно подать заявку на регистрацию OAuth-клиента. Там же в качестве способа получить токен для личного использования упомянуты уже зарегистрированные сервисы; приведённый в документации пример — Zerro.app. Это сторонний сервис: прежде чем выдавать ему доступ, самостоятельно оцени его и запрашиваемые права.

./bin/set-token.sh не получает токен из аккаунта, а только скрыто принимает уже выданный access token и сохраняет его. Сервер сейчас не обновляет токены через refresh_token; если выданный access token истечёт и API начнёт возвращать 401, получи новый токен и повтори настройку.

Установка и запуск

git clone https://github.com/bulava92/zen-money-mcp.git
cd zen-money-mcp
npm ci --ignore-scripts --no-audit --no-fund
./bin/set-token.sh
npm start

set-token.sh запрашивает токен скрытым вводом и хранит его вне репозитория: ${HOME}/.config/zen_money_mcp/access-token. Каталог создаётся с правами 700, файл — 600. Сервер принимает только обычный файл токена без прав на чтение или запись для группы и остальных пользователей; символическая ссылка не допускается.

Путь можно изменить через ZENMONEY_TOKEN_FILE. Если задаёшь его для службы или MCP-клиента, обеспечь права 600 и доступ тому же пользователю ОС, который запускает процесс.

Для MCP-клиента, который поддерживает stdio, укажи команду и абсолютный путь к проекту. Например:

{
  "mcpServers": {
    "zen-money": {
      "command": "node",
      "args": ["/absolute/path/to/zen-money-mcp/src/server.mjs"]
    }
  }
}

Формат файла конфигурации может различаться в зависимости от MCP-клиента.

Инструменты

Синхронизация и общие данные

  • sync_zenmoney — синхронизирует выбранные сущности с API; поддерживает принудительное обновление.

  • get_zenmoney_profile — ID профиля и основная валюта.

  • get_zenmoney_entities — читает полные исходные записи сущностей для точного просмотра полей API.

  • list_instruments, list_companies — справочники валют, банков и организаций.

Счета, категории и контрагенты

  • list_accounts, create_account, update_account, archive_account.

  • list_categories, create_category, update_category, hide_category, delete_category.

  • list_merchants, create_merchant, update_merchant.

Архивация счёта и скрытие категории сохраняют историю. Для удаления категории инструмент требует confirm: true и проверяет, что категория не используется в активных операциях. Удаление напоминания также требует confirm: true.

Операции, бюджеты и отчёты

  • list_transactions — фильтрует операции по датам, счёту и категории; выдаёт результат страницами.

  • create_transaction, update_transaction, delete_transaction. Последний помечает операцию удалённой в Дзен-мани, сохраняя её запись в истории синхронизации.

  • summarize_spending — сводит доходы и расходы за период по валютам и категориям. Суммы разных валют не складываются.

  • list_budgets, set_budget, delete_budget.

Для удаления бюджета сервер разблокирует его и устанавливает сумму в ноль, сохраняя связанные данные. Проверяй валюту и период при анализе итогов.

Напоминания и подсказки

  • list_reminders, list_reminder_markers, create_reminder, update_reminder, delete_reminder.

  • suggest_transaction, suggest_transactions — запрашивают у Дзен-мани подсказки категории и контрагента для одной или нескольких операций.

Низкоуровневая работа с API

  • apply_zenmoney_diff создаёт и изменяет записи пакетами для поддерживаемых сущностей, включая операции, счета, категории, контрагентов, бюджеты и напоминания.

  • Частичное изменение объединяется с текущей записью. Новые записи связываются с текущим профилем.

  • Для удаления через apply_zenmoney_diff нужно явно передать confirmDeletes: true. Высокоуровневые delete_category и delete_reminder требуют confirm: true. Системные сущности user, instrument и company доступны только для чтения.

Используй apply_zenmoney_diff только когда высокоуровневого инструмента недостаточно: этот инструмент позволяет менять больше полей API за один вызов.

Данные и безопасность

  • Токен отправляется как Bearer только на https://api.zenmoney.ru/v8/diff/ и https://api.zenmoney.ru/v8/suggest/.

  • Транзакционная история хранится в памяти процесса и не записывается сервером в локальную базу или файлы.

  • stdout зарезервирован для MCP-протокола; диагностика возвращается через stderr/MCP-ответы.

  • Токен даёт доступ к данным Дзен-мани в соответствии с правами аккаунта. Не передавай его в сообщения, аргументы команд, Git или логи.

  • Скрипт настройки защищает обычный файл токена правами, но .gitignore не удалит секрет, если его вручную закоммитили. Перед публикацией проверь историю репозитория.

  • Перед созданием, изменением или удалением финансовой записи проверь сумму, валюту, счёт и категорию.

Secure MCP Tunnel и systemd

Tunnel — необязательный способ подключить сервер через Secure MCP Tunnel. Локальный stdio-запуск не требует Tunnel ID или runtime API key.

  1. Создай Secure MCP Tunnel и получи Tunnel ID и runtime API key.

  2. Сохрани runtime key отдельно от токена Дзен-мани:

    ./bin/set-openai-key.sh

    По умолчанию он записывается в ${HOME}/.config/zen_money_mcp/openai-runtime-key с правами 600.

  3. Скопируй профиль и замени REPLACE_WITH_NEW_TUNNEL_ID на свой Tunnel ID:

    install -d -m 700 "$HOME/.config/zen_money_mcp"
    cp deploy/tunnel-profile.yaml.example "$HOME/.config/zen_money_mcp/tunnel-profile.yaml"
    chmod 600 "$HOME/.config/zen_money_mcp/tunnel-profile.yaml"
  4. В профиле проверь путь в api_key и команду node .../src/server.mjs; укажи пути и домашний каталог пользователя, который запускает службу.

  5. При настройке systemd сначала отредактируй deploy/zen-money-mcp-tunnel.service.example: в шаблоне используются пользователь vscode, каталог /var/www/zen-money-mcp и профиль /home/vscode/.... Затем установи его и запусти службу:

    sudo install -o root -g root -m 0644 deploy/zen-money-mcp-tunnel.service.example /etc/systemd/system/zen-money-mcp-tunnel.service
    sudo systemctl daemon-reload
    sudo systemctl enable --now zen-money-mcp-tunnel.service

Шаблон профиля слушает health endpoint только на 127.0.0.1. Не открывай его наружу и не передавай runtime key другим людям. Бинарный bin/tunnel-client в репозитории собран для Linux x86-64; для другой ОС установи совместимую версию отдельно. Перед повторным распространением бинарного файла проверь условия его правообладателя.

Устранение неполадок

  • «Токен не настроен»: выполни ./bin/set-token.sh от имени пользователя, запускающего MCP-сервер.

  • 401 от API: токен отклонён; проверь его в настройках Дзен-мани и сохрани заново.

  • 403 от API: у токена нет доступа; создай или обнови токен с нужными разрешениями.

  • Ошибка прав на файл: установи режим 600, проверь владельца и убедись, что путь не является символической ссылкой.

  • Tunnel не запускается: проверь Tunnel ID, runtime key, путь к файлу ключа, абсолютный путь проекта и systemd-журнал службы.

Лицензия

Исходный код проекта распространяется по лицензии MIT; текст находится в LICENSE. Бинарный bin/tunnel-client является отдельным компонентом и не получает лицензию MIT автоматически; проверь условия его правообладателя перед распространением.

Available Tools

33 tools
apply_zenmoney_diffA

Полный низкоуровневый доступ к /v8/diff/: создаёт и изменяет любые поля счетов, категорий, контрагентов, бюджетов, напоминаний, маркеров напоминаний и операций; принимает массивы записей для пакетных изменений. Частичная запись объединяется с текущей, чтобы сохранить пропущенные поля. Для удаления обязательно confirmDeletes: true. Системные сущности user, instrument и company доступны только для чтения. Для бюджета передавай date первого числа месяца и tag (ID категории, null для без категории или нулевой UUID для общего бюджета).

Inputs: tag, budget, account, deletion, +5 more.

archive_accountB

Архивировать счёт, сохранив его операции и историю.

Inputs: id (required).

create_accountC

Создать наличный, банковский, карточный или электронный счёт.

Inputs: type (required), title (required), instrument (required), savings, +2 more.

create_categoryC

Создать категорию доходов, расходов или обоих типов.

Inputs: title (required), kind, parent, required.

create_merchantC

Добавить контрагента для операций и подсказок.

Inputs: title (required).

create_reminderC

Создать запланированный расход, доход или перевод, в том числе повторяющийся.

Inputs: type (required), amount (required), account (required), startDate (required), +10 more.

create_transactionC

Создать расход, доход или перевод. Запишет финансовую операцию в Дзен-мани.

Inputs: date (required), type (required), amount (required), account (required), +6 more.

delete_budgetB

Убрать бюджет категории за месяц, сняв фиксацию и обнулив сумму.

Inputs: type (required), month (required), category.

delete_categoryA

Безвозвратно удалить неиспользуемую категорию после явного подтверждения.

Inputs: id (required), confirm (required).

delete_reminderB

Удалить напоминание. Нужно явно подтвердить удаление.

Inputs: id (required), confirm (required).

delete_transactionB

Пометить операцию удалённой в Дзен-мани. Изменит финансовую запись.

Inputs: id (required).

get_zenmoney_entitiesB

Получить полные исходные записи любой сущности ZenMoney API, включая reminderMarker. Используй для доступа ко всем полям и фильтров, которых нет в кратких инструментах.

Inputs: entity (required), limit, offset, search, +3 more.

get_zenmoney_profileA

Показать ID профиля и основную валюту Дзен-мани.

Inputs: no named parameters.

hide_categoryB

Скрыть категорию для новых операций, сохранив прошлую историю.

Inputs: id (required).

list_accountsC

Показать счета, валюты и балансы.

Inputs: includeArchived.

list_budgetsB

Показать бюджеты за месяц, включая общий и безкатегорийный бюджет.

Inputs: month (required).

list_categoriesC

Показать категории доходов и расходов и их родительские категории.

Inputs: includeHidden.

list_companiesB

Показать банки и платёжные организации из Дзен-мани.

Inputs: no named parameters.

list_instrumentsB

Показать доступные валюты и курсы.

Inputs: no named parameters.

list_merchantsC

Показать сохранённых контрагентов и получателей.

Inputs: no named parameters.

list_reminder_markersC

Показать конкретные запланированные операции (ReminderMarker), включая planned, processed и deleted.

Inputs: state, toDate, fromDate.

list_remindersC

Показать запланированные операции и их состояния.

Inputs: toDate, fromDate.

list_transactionsB

Найти операции по датам, счёту и категории; результат разбит на страницы.

Inputs: limit, offset, toDate, account, +3 more.

set_budgetC

Установить месячный бюджет дохода или расхода. Изменит бюджет в Дзен-мани.

Inputs: type (required), month (required), amount (required), category.

suggest_transactionC

Запросить у Дзен-мани подсказку категории и контрагента.

Inputs: date, payee, amount, comment.

suggest_transactionsB

Получить подсказки Дзен-мани сразу для нескольких операций через пакетный /v8/suggest/.

Inputs: transactions (required).

summarize_spendingC

Свести доходы и расходы за период по валюте и категории. Валюты не складываются между собой.

Inputs: toDate (required), fromDate (required).

sync_zenmoneyB

Синхронизировать состояние с Дзен-мани через /v8/diff/. Можно запросить полную повторную загрузку выбранных сущностей.

Inputs: forceFetch.

update_accountC

Изменить название, учёт баланса, накопительный статус или SMS-настройки счёта.

Inputs: id (required), title, savings, enableSMS, +2 more.

update_categoryC

Изменить название, родителя и настройки категории.

Inputs: id (required), title, parent, required, +4 more.

update_merchantC

Переименовать сохранённого контрагента.

Inputs: id (required), title (required).

update_reminderC

Изменить сумму, счета, категорию, дату или повторение напоминания.

Inputs: id (required), step, payee, amount, +10 more.

update_transactionC

Изменить сумму, дату, описание, получателя или категорию операции.

Inputs: id (required), date, payee, amount, +3 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.9/5.0

    Scored across 33 tools

    Disambiguation3/5

    Most entity-specific tools have clear boundaries, but apply_zenmoney_diff and get_zenmoney_entities overlap with nearly every create/update/list tool by offering raw access to all entities. The descriptions do explain when to use the low-level tools, which mitigates but does not eliminate the risk of misselection.

    Naming Consistency5/5

    Tool names consistently use snake_case with a verb-first pattern (list_, get_, create_, update_, delete_, set_, suggest_, etc.). Domain-specific verbs like sync, apply, hide, and archive are still predictable and distinguishable.

    Tool Count2/5

    With 33 tools, the surface is quite heavy even for a comprehensive personal finance API. Many CRUD operations could be consolidated or handled through the existing generic diff/entity tools, making the set feel bloated.

    Completeness4/5

    The server covers the main lifecycle for transactions, categories, accounts, budgets, and reminders, plus raw access for advanced cases. Minor gaps exist in the high-level surface, such as no dedicated merchant deletion or account deletion, but these are workable through archive or apply_zenmoney_diff.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Exposes personal-finance tools like accounts, transactions, spending analysis, budgets, bills, reminders, portfolio, and goals via MCP, enabling any MCP client to query financial data.
      -
    • A
      license
      A
      quality
      C
      maintenance
      Enables read-only access to YNAB budgets, accounts, categories, payees, and transactions, plus safe addition of unapproved transactions with dry-run and duplicate pre-check for reconciliation workflows.
      6
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables compatible AI clients to read stored personal-finance data and, with explicit user authorization, perform supported mutations under the same ownership checks as the web app.
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables AI assistants and other MCP clients to access and manage personal finance data, including transactions, categories, tags, budgets, recurring items, accounts, crypto, and balance history through the provider's API.
      41 npm
      MIT