MCP server for Monobank — exposes your accounts, transactions, exchange rates, and webhook configuration as tools for Claude and other MCP clients.
Responses are pre-processed for LLM consumption: amounts are in base currency units (not cents), timestamps are ISO 8601, currency codes are ISO 4217 strings, and permissions are decoded to human-readable names. Frequently-accessed data is cached server-side for 1 hour so repeated reads never hit the Monobank rate limit.
Add to your claude_desktop_config.json:
{
"mcpServers": {
"monobank": {
"command": "npx",
"args": ["-y", "@dirgen/monobank-mcp"],
"env": {
"MONOBANK_API_TOKEN": "your_token_here"
}
}
}
}claude mcp add monobank -- npx -y @dirgen/monobank-mcpThen add your token to .claude/settings.json:
{
"mcpServers": {
"monobank": {
"env": { "MONOBANK_API_TOKEN": "your_token_here" }
}
}
}Open api.monobank.ua and scan the QR code with the Monobank app to generate your personal API token. The token never leaves your machine — it is passed directly to the server process as an environment variable.
| Tool | Description |
|---|---|
monobank-bank-currency |
All Monobank exchange rates. Returns baseCurrency / quoteCurrency (ISO 4217), date (ISO 8601), and rateSell / rateBuy (traded pairs) or rateCross (cross rates). |
monobank-bank-currency-rate |
Exchange rate for a single currency pair. Inputs: baseCurrency, quoteCurrency (defaults to UAH). Faster than fetching the full list. |
| Tool | Description |
|---|---|
monobank-personal-client-info |
Full client profile: identity, decoded token permissions, all accounts and jars including FOP/business accounts (managedClients). Account id fields are what you pass to the statement tool. |
monobank-personal-accounts |
Compact account and jar list (id, type, currencyCode, balance, maskedPan). Use this for quick account discovery before fetching statements. |
monobank-personal-statement |
Transaction history for an account. Inputs: accountId (from client-info, or "0" for default UAH account), fromDate, toDate (ISO 8601 with timezone). Maximum range: 31 days per request. |
monobank-get-webhook |
Returns the webhook URL currently configured for this token. Empty string means no webhook is set. |
monobank-set-webhook |
monobank-get-webhook first. |
monobank-unset-webhook |
The server caches responses to stay within Monobank's rate limits and avoid redundant API calls:
| Data | Cache TTL |
|---|---|
Client info (/personal/client-info) |
1 hour |
Currency rates (/bank/currency) |
1 hour |
Statement with a fixed toDate |
1 hour |
Statement without toDate |
Not cached (open-ended range → stale data risk) |
Webhook mutations automatically invalidate the client-info cache so the next read reflects the updated URL.
Monobank personal endpoints allow 1 request per 60 seconds. If the limit is hit, the server returns a clear error message telling you to wait 60 seconds. The 1-hour cache means most repeated reads are served locally without hitting the API at all.
Requires Node.js ≥ 24.17.0 and pnpm.
git clone https://github.com/todesstoss/monobank-mcp
cd monobank-mcp
pnpm installCreate a .env file:
MONOBANK_API_TOKEN=your_token_herepnpm start # run the MCP server
pnpm inspect # open MCP Inspector in the browser for interactive testing
pnpm typecheck # type-check without emitting
pnpm lint # lint src/Invalid token / 401 — regenerate your token at api.monobank.ua. Tokens expire if unused.
Rate limit / 429 — wait 60 seconds. The server will tell you when this happens. Repeated reads within an hour are served from cache and won't trigger this.
Statement range > 31 days — split the request into multiple calls, each covering ≤ 31 days. The tool will tell you if the range is too wide.
Currency pair not found — use monobank-bank-currency to see all available pairs. Only UAH pairs and EUR/USD are available.
No managedClients in client-info — this field only appears if you are registered as a FOP (sole proprietor) with Monobank. All tokens are the same personal token — managedClients is simply absent if you have no FOP accounts.
MIT