monarch-mcp2-obot
monarch-mcp2-obot
Однотенантный MCP-сервер Monarch Money для самостоятельного размещения за obot, форкнут из erikrubstein/monarch-mcp2 (сам по себе не форк более распространённого семейства robcerda/monarch-mcp-server — это независимая реализация на основе собственного API-клиента monarch-api2).
Этот форк существует по трём причинам, не охваченным апстримом:
Перенесён на MCP Python SDK v2 (
MCPServer, а не устаревший v1FastMCP).Процедура входа, созданная для obot: учётные данные настраиваются один раз как переменные окружения, с опциональной поддержкой TOTP-сида, позволяющей автоматически проходить MFA-вызов приложения-аутентификатора — без браузера, без системной связки ключей, без ручного копирования шестизначного кода.
Намеренно однотенантный: ровно один аккаунт Monarch на каждый запущенный экземпляр. Ни один вызов инструмента не может быть направлен на сессию другого аккаунта, даже если клиент попытается отправить такой, — см. «Однотенантный, намеренно» ниже.
Не аффилирован с Monarch Money, не одобрен и не поддерживается Monarch Money.
Что унаследовано от апстрима
125 инструментов в 14 группах — accounts, transactions, budget, cashflow, categories, goals, household, investments, merchants, receipts, recurring, reports, tags — без изменений относительно monarch-mcp2. Смотрите его список инструментов и заметки о дизайне, чтобы узнать, что охвачено, а что намеренно выходит за рамки (правила транзакций и автоматизация, процедуры подключения счетов у провайдеров, граничные случаи администрирования аккаунтов).
Related MCP server: monarch-mcp
Что здесь отличается
Аутентификация: auth_login, auth_status
Два новых инструмента поверх auth_create_session / auth_save_session / auth_load_session из апстрима (которые по-прежнему работают для полностью ручного разового входа):
auth_login— аргументы не нужны, если в окружении сервера настроеныMONARCH_EMAIL/MONARCH_PASSWORD(а для MFA через приложение-аутентификатор —MONARCH_TOTP_SECRET). Автоматически обрабатывает MFA-вызов, вычисляя текущий код из сида. Передайтеemail/password/totp_secret/mfa_codeявно, чтобы переопределить их для разового входа, не трогая конфигурацию сервера.auth_status— сообщает, существует ли сессия и действительна ли она на данный момент (по умолчанию один лёгкий API-вызов), никогда не возвращая токен сессии.
Сервер также пытается выполнить этот вход автоматически при запуске, если настроены учётные данные, — по принципу best-effort, без фатальных последствий, так что неверный пароль или недоступная сеть не помешают серверу запуститься; auth_status и auth_login остаются доступными для диагностики и повторной попытки.
TOTP-сид: тот же base32-секрет, с которым было бы зарегистрировано приложение-аутентификатор (то, что вы сканировали бы как QR-код). Monarch показывает его один раз, когда вы включаете MFA через приложение-аутентификатор, — сохраните его сразу, иначе вам придётся отключить и снова включить MFA, чтобы получить новый. Это применимо только в том случае, если метод MFA вашего аккаунта — приложение-аутентификатор; MFA по коду из электронной почты так автоматизировать нельзя (нет сида, из которого можно вычислить код), и для передачи свежего кода через аргумент mfa_code в auth_login по-прежнему нужен человек.
Однотенантный, намеренно
session_path присутствует в каждой нижележащей функции (соглашение monarch-api2), но удаляется из публичной схемы каждого инструмента до того, как она будет предоставлена MCP-клиенту, — см. tool_metadata.py. Одно развёртывание, один аккаунт Monarch, один файл сессии, выбранный один раз через MONARCH_SESSION_PATH / MONARCH_CONFIG_DIR. Это не просто умолчание в конфигурации: ни один вызов инструмента не может переопределить его в рамках запроса — так задумано, даже если клиент всё равно передаст его (см. tests/test_server.py::test_tool_call_ignores_session_path_even_if_a_client_sends_it).
Выбор транспорта для двух моделей развёртывания obot
obot поддерживает MCP-серверы двумя способами, важными здесь: на основе команды/uvx (stdio) и на основе Docker (порт плюс конечная точка streamable-http). Оба поддерживаются через MCP_TRANSPORT (по умолчанию stdio); Docker-образ по умолчанию устанавливает его в streamable-http. См. config.py / server.py.
Переменные окружения
Переменная | Назначение | По умолчанию |
| Email аккаунта Monarch, для автоматического входа | — |
| Пароль аккаунта Monarch | — |
| Base32-сид приложения-аутентификатора, для автоматического MFA | — |
| Точный путь к файлу сессии |
|
| Каталог для пути к сессии по умолчанию |
|
|
|
|
| Адрес привязки для |
|
| Порт привязки для |
|
Относитесь к MONARCH_PASSWORD и MONARCH_TOTP_SECRET как к любым другим секретам — однопользовательская модель MCP-сервера obot помечает такие поля как «конфиденциальные», когда администратор настраивает сервер; воспользуйтесь этим.
Запуск
obot, на основе команды/uvx (stdio)
uvx --from git+https://<your-fork-url> monarch-mcp(После того как вы запушете этот форк куда-нибудь — см. примечание в конце этого README о том, где в настоящее время находится этот код.)
obot, на основе Docker (streamable-http)
docker build -t monarch-mcp2-obot:local .
docker volume create monarch-session
docker run -d --rm \
-p 8000:8000 \
-v monarch-session:/data \
-e MONARCH_EMAIL=you@example.com \
-e MONARCH_PASSWORD=... \
-e MONARCH_TOTP_SECRET=... `# omit if your account doesn't use authenticator-app MFA` \
monarch-mcp2-obot:localУкажите в конфигурации MCP-сервера obot на основе Docker конечную точку streamable-http этого контейнера на порту 8000. Состояние сессии хранится в томе monarch-session, поэтому оно переживает перезапуски контейнера и повторные развёртывания без повторного входа.
Локальная разработка (stdio, без Docker)
uv sync
uv run monarch-mcpТестирование
uv run pytest
uv run ruff check src tests
uv run ruff format --check src tests
uv run mypy src/monarch_mcp/auth_runtime.py src/monarch_mcp/config.py \
src/monarch_mcp/server.py src/monarch_mcp/groups/auth.py src/monarch_mcp/tool_metadata.py(mypy --strict применяется только к файлам, которые этот форк создал или существенно изменил; унаследованные групповые модули не были повторно проверены на соответствие строгой типизации в рамках этого форка — см. ROADMAP.md.)
Где живёт этот код
Он был собран и проверен локально (установлен, протестирован и запущен — на обоих транспортах — при реальном рукопожатии MCP initialize), но в рамках этой работы не был запушен в размещённый git-remote. Запушьте его в свой собственный форк/remote, прежде чем указывать на него uvx --from git+..., и соответствующим образом обновите инструкции по Docker-сборке выше, если вы собираете из этого remote, а не из локальной копии.
Лицензия
MIT, унаследована от апстрима. См. LICENSE.
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
- AlicenseBqualityBmaintenanceMCP Server for Monarch Money, utilizing an unofficial api.11310MIT
- AlicenseNot gradedqualityBmaintenanceProvides an MCP server for querying and managing Monarch Money personal finance data through a local SQLite mirror with read-only SQL access. It enables users to sync transaction history from the Monarch API and analyze accounts, categories, and tags.1MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that integrates with Monarch Money to provide financial data access and operations, including account management, transaction filtering, budget analysis, and goal tracking through natural language.
- AlicenseCqualityAmaintenanceUnofficial MCP server for Monarch Money that exposes tools for managing accounts, transactions, budgets, and other financial data through natural language.1251MIT
Related MCP Connectors
Hosted remote MCP server for YNAB on Cloudflare Workers with OAuth
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
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/dcode/monarch-mcp2-obot'
If you have feedback or need assistance with the MCP directory API, please join our Discord server