Skip to main content
Glama
JosueM1109

personal-finance-mcp

personal-finance-mcp

License: MIT Python 3.11+ MCP

Неофициально. Этот проект не связан, не одобрен и не спонсируется Plaid Inc. "Plaid" является торговой маркой Plaid Inc. Это самохостируемый клиент, который взаимодействует с API Plaid, используя предоставленные вами учетные данные.

Самохостируемый MCP-сервер с правами только на чтение, который подключает ваши банковские счета, кредитные карты, займы и брокерские счета (через Plaid) к MCP-клиенту, такому как Claude Code. Задавайте вопросы о своих финансах на обычном языке — без участия сторонних агрегаторов (Monarch, Mint и т. д.).

Что можно спросить

  • "Какой мой общий баланс по всем счетам?"

  • "Покажи транзакции на сумму более $100 за последние 30 дней."

  • "За какие подписки я все еще плачу?"

  • "Сколько я потратил на продукты в прошлом месяце?"

  • "Есть ли банк, требующий повторной аутентификации?"

Пример сессии (иллюстративный):

you    : What did I spend on groceries last month?
claude : [calls get_transactions]
         $487.23 across 14 transactions. Top merchants:
         Whole Foods ($198), Trader Joe's ($156), Safeway ($89).

you    : Any subscriptions I'm still paying for?
claude : [calls get_recurring_transactions]
         7 active recurring outflows totaling $142/mo:
         Netflix ($15.99), Spotify ($11.99), NYT ($4), ...

Инструменты

Все 9 инструментов работают только на чтение. Каждый возвращает {<data>: [...], "warnings": [...]} так, чтобы один неисправный банк не нарушал работу всего запроса.

Инструмент

Что он делает

list_accounts

Все счета во всех подключенных банках с балансами

get_balances

Текущие и доступные балансы в реальном времени (с возможностью фильтрации по счету)

get_transactions

Транзакции за указанный период (до 2 лет назад)

search_transactions

Поиск по ключевым словам среди продавцов / имен / контрагентов

get_recurring_transactions

Обнаруженные регулярные входящие и исходящие потоки

get_liabilities

Кредитные карты, студенческие займы, ипотеки с APR и деталями платежей

get_investment_holdings

Текущие активы с тикером и метаданными ценных бумаг

get_investment_transactions

История покупок / продаж / дивидендов за указанный период

get_institutions_status

Состояние каждого подключенного банка (показывает необходимость повторной аутентификации)

Быстрый старт

Требуется Python 3.11+, аккаунт Plaid (пробный план Trial) и MCP-клиент.

1. Настройка Plaid

  1. Зарегистрируйтесь на https://dashboard.plaid.com/signup → выберите план Trial (бесплатно, 10 элементов).

  2. Team Settings → Products: включите Transactions, Liabilities, Investments.

  3. Team Settings → API: скопируйте ваш client_id и production secret.

2. Установка

git clone https://github.com/<you>/personal-finance-mcp.git
cd personal-finance-mcp
python3.11 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env   # then fill in PLAID_CLIENT_ID and PLAID_SECRET
pytest -v              # sanity check

3. Подключение каждого банка

Запускайте по одному разу для каждого банка, который хотите подключить:

uvicorn link_helper:app --port 8765

Откройте http://localhost:8765, нажмите Link a bank и завершите процесс Plaid Link. Терминал выведет строку вида PLAID_TOKEN_CHASE=access-prod-xxx... — вставьте ее в .env и повторите для каждого банка.

4. Запуск

python server.py   # serves on http://localhost:8000/mcp

5. Добавление в Claude Code

claude mcp add --transport http personal-finance http://localhost:8000/mcp

Попробуйте команду "list my accounts" для проверки.

Развертывание

Для развертывания, доступного отовсюду:

  • Docker (включен): docker build -t personal-finance-mcp . && docker run --rm -p 8000:8000 --env-file .env personal-finance-mcp

  • Любой Python-хостинг (Fly.io, Railway, Raspberry Pi + Tailscale, VPS): установите переменные окружения из .env.example, откройте /mcp через HTTPS, защитите авторизацией.

  • Prefect Horizon (используется автором — $0 регулярных затрат): см. docs/DEPLOYMENT.md для полного руководства.

Защитите эндпоинт. Открытый MCP-эндпоинт с вашими токенами раскрывает все подключенные счета. Используйте OAuth 2.1, Cloudflare Access или привяжите только к частной сети.

Безопасность

  • Однопользовательский режим. Одно развертывание на человека. Не делитесь доступом.

  • Только чтение. Ни один инструмент не изменяет состояние в каком-либо учреждении. Не добавляйте инструменты, которые это делают.

  • Токены живут в переменных окружения, никогда не записываются на диск. .env игнорируется git.

  • Вы несете ответственность за соблюдение правил Plaid. Вы являетесь клиентом Plaid под своей собственной учетной записью.

Перед каждым развертыванием:

  • [ ] .env никогда не коммитится: git log --all -- .env ничего не возвращает

  • [ ] В истории нет реальных токенов: git log -S'access-prod-' --all возвращает только заглушки

  • [ ] Перед MCP-эндпоинтом стоит шлюз авторизации (или только localhost)

  • [ ] HORIZON=1 (или аналогичное) установлено в среде развертывания, блокируя link_helper.py там

  • [ ] Проверяйте get_institutions_status() каждые несколько недель на предмет необходимости повторной аутентификации

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

Инструмент возвращает пустоту, несмотря на наличие реальных данных. Продукты Plaid не были включены при подключении банка. Переподключитесь с активными Transactions + Liabilities + Investments. Инструмент выводит PRODUCTS_NOT_SUPPORTED в warnings, если причина в этом.

get_institutions_status() показывает re_auth_required. Сессия Plaid для банка истекла. Запустите link_helper.py в режиме обновления — ваш существующий токен доступа останется прежним. См. docs/DEPLOYMENT.md.

Plaid Link показывает банк как "неподдерживаемый" (часто с Amex). Обычно это проблема INSTITUTION_REGISTRATION_REQUIRED — банки с OAuth требуют предварительной регистрации каждого учреждения в панели управления Plaid. См. docs/TROUBLESHOOTING.md.

Другие проблемы: docs/TROUBLESHOOTING.md.

Архитектура

  • server.py — сервер FastMCP, 9 инструментов только для чтения.

  • plaid_client.py — обертка SDK Plaid: маскирование токенов SecretStr, 5-минутный кэш состояния для каждого элемента, форматирование ответов, структурированное отображение ошибок.

  • link_helper.py — локальное приложение FastAPI для Plaid Link. Отказывается работать, если установлен HORIZON=1.

Более глубокий разбор (включая причины выбора /transactions/get вместо /transactions/sync): docs/ARCHITECTURE.md.

Участие в разработке

См. CONTRIBUTING.md. Область применения намеренно узкая: только чтение, один пользователь, на базе Plaid.

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/JosueM1109/personal-finance-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server