Skip to main content
Glama
uiux-me

upbank-mcp

by uiux-me

upbank-mcp

Ein Model Context Protocol-Server, der die Up Banking API für LLM-Clients bereitstellt, gebaut mit FastMCP und für Docker verpackt.

Er bietet 19 Tools und 2 Ressourcen, die die gesamte öffentliche Oberfläche der Up API abdecken — Konten, Transaktionen, Kategorien, Tags, Anhänge und Webhooks — mit für Tokeneffizienz umgeformten Antworten, durchgängig erhaltener Cursor-Paginierung und automatischen Wiederholungsversuchen bei Rate Limits.


Inhalt


Related MCP server: Up Bank MCP Server

Voraussetzungen

Up-Konto

Ein persönlicher Zugriffs-Token von https://api.up.com.au/getting_started. Tokens sehen wie up:yeah:… aus.

Docker

Docker Engine 20.10+ mit Compose v2 (docker compose, nicht docker-compose).

Python

3.11+ — nur wenn außerhalb von Docker ausgeführt.

Die Up API ist für Up-Kunden in Australien verfügbar. Ein Token gewährt ausschließlich Zugriff auf die eigenen Daten des ausstellenden Kunden.


Schnellstart

git clone git@github.com:uiux-me/upbank-mcp.git
cd upbank-mcp
cp .env.example .env          # paste your token into UP_API_TOKEN
docker compose up --build

Der Server lauscht auf http://127.0.0.1:8000/mcp. So überprüfen Sie ihn:

docker compose exec upbank-mcp python -c "
import asyncio, upbank_mcp
from fastmcp import Client
async def main():
    async with Client(upbank_mcp.mcp) as c:
        print((await c.call_tool('ping')).data)
asyncio.run(main())"

Eine fehlerfreie Antwort enthält Ihre Kunden-id und ein Status-Emoji:

{'ok': True, 'id': 'eb59f467-…', 'status_emoji': '⚡️'}

Konfiguration

Die gesamte Konfiguration erfolgt über Umgebungsvariablen. Compose liest .env automatisch aus dem Projektverzeichnis.

Variable

Standard

Beschreibung

UP_API_TOKEN

(erforderlich)

Persönlicher Zugriffs-Token. Die einzige Variable, die der Server für Anmeldedaten liest. Compose weigert sich, ohne sie zu starten; bei direktem Start startet der Server und schlägt beim ersten Tool-Aufruf fehl.

UP_API_BASE

https://api.up.com.au/api/v1

API-Basis-URL. Nur für Tests gegen einen Mock überschreiben.

MCP_TRANSPORT

stdio

stdio für lokale MCP-Clients, http für einen über das Netzwerk erreichbaren Server. Compose setzt http.

MCP_HOST

0.0.0.0

Bind-Adresse für den HTTP-Transport innerhalb des Containers.

MCP_PORT

8000

Port, auf dem der HTTP-Transport innerhalb des Containers lauscht.

MCP_HOST_PORT

8000

Nur Compose. Host-Port, der auf 127.0.0.1 veröffentlicht wird. Ändern Sie diesen Wert, wenn 8000 bereits verwendet wird.


Server ausführen

HTTP, via Compose

Am besten für einen langlebigen Server, der von mehreren Clients auf Ihrem Rechner gemeinsam genutzt wird.

docker compose up --build          # foreground
docker compose up -d --build       # detached
docker compose logs -f             # follow logs
docker compose down                # stop and remove

Der Port wird nur auf 127.0.0.1 veröffentlicht. Siehe Sicherheit.

stdio, via Docker

Am besten für MCP-Clients, die den Server als Unterprozess starten. Bauen Sie das Image einmal:

docker build -t upbank-mcp:latest .

Das Image verwendet standardmäßig MCP_TRANSPORT=stdio, daher ist keine Transport-Überschreibung erforderlich.

Ohne Docker

pip install -e .
export UP_API_TOKEN=up:yeah:...
upbank-mcp

Setzen Sie MCP_TRANSPORT=http, um über HTTP statt stdio zu dienen.


MCP-Client verbinden

Claude Code

claude mcp add upbank \
  -e UP_API_TOKEN=up:yeah:... \
  -- docker run -i --rm -e UP_API_TOKEN upbank-mcp:latest

Claude Desktop oder jeder Client, der die mcpServers-Konfiguration verwendet

{
  "mcpServers": {
    "upbank": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "UP_API_TOKEN", "upbank-mcp:latest"],
      "env": { "UP_API_TOKEN": "up:yeah:..." }
    }
  }
}

-i ist erforderlich — der Server kommuniziert über stdin/stdout. --rm entfernt den Container, wenn der Client die Verbindung trennt.

Über HTTP

Richten Sie den Client auf http://127.0.0.1:8000/mcp, während der Compose-Stack läuft.


Tool-Referenz

Erforderliche Parameter sind fett. Jedes Listen-Tool akzeptiert cursor; siehe Paginierung.

Dienstprogramm

Tool

Parameter

Rückgabe

ping

{ok, id, status_emoji}. Verifiziert das Token und die Erreichbarkeit der API.

Konten

Tool

Parameter

Rückgabe

list_accounts

account_type (SAVER | TRANSACTIONAL | HOME_LOAN), ownership_type (INDIVIDUAL | JOINT), page_size (1–100, Standard 30), cursor

Seite von Konten mit Kontoständen.

get_account

account_id

Ein Konto.

Transaktionen

Tool

Parameter

Rückgabe

list_transactions

account_id, status (HELD | SETTLED), since, until, category, tag, page_size (1–100, Standard 30), cursor

Seite von Transaktionen, neueste zuerst. Lassen Sie account_id weg, um über alle Konten zu suchen.

get_transaction

transaction_id

Eine Transaktion, einschließlich Hold-, Round-up- und Cashback-Details.

since und until begrenzen createdAt inklusiv. category akzeptiert eine Eltern-ID, die alle zugehörigen Unterkategorien abdeckt.

Kategorien

Tool

Parameter

Rückgabe

list_categories

parent

Der Kategoriebaum oder die Unterkategorien einer einzelnen Eltern-Kategorie. Nicht paginiert.

get_category

category_id

Eine Kategorie mit ihren Eltern- und Kinder-IDs.

categorize_transaction

transaction_id, category_id

Setzt die Kategorie oder entfernt sie, wenn category_id null ist.

Kategorien sind von Up festgelegt und können nicht erstellt werden. IDs sind Slugs wie restaurants-and-cafes. Nur Transaktionen mit is_categorizable: true können geändert werden, und nur Blatt-Kategorien werden akzeptiert — die Übergabe einer Eltern-Kategorie wie good-life liefert HTTP 403.

Tags

Tool

Parameter

Rückgabe

list_tags

page_size (1–100, Standard 50), cursor

Seite von Tags. Die ID eines Tags ist seine Bezeichnung.

add_tags_to_transaction

transaction_id, tags (Liste)

Fügt Tags hinzu und erstellt nicht vorhandene.

remove_tags_from_transaction

transaction_id, tags (Liste)

Entfernt Tags von der Transaktion.

Eine Transaktion enthält höchstens 6 Tags. Tags, die keiner Transaktion mehr zugeordnet sind, verschwinden aus list_tags.

Anhänge

Tool

Parameter

Rückgabe

list_attachments

page_size (1–100, Standard 30), cursor

Seite von Anhängen.

get_attachment

attachment_id

Ein Anhang.

file_url ist eine signierte URL, die mit file_url_expires_at abläuft. Rufen Sie sie zeitnah ab oder fordern Sie den Anhang erneut an.

Webhooks

Tool

Parameter

Rückgabe

list_webhooks

page_size (1–100, Standard 30), cursor

Seite von Webhooks.

get_webhook

webhook_id

Ein Webhook.

create_webhook

url, description (≤64 Zeichen)

Der neue Webhook, einschließlich secret_key.

delete_webhook

webhook_id

{ok, deleted}. Endgültig.

ping_webhook

webhook_id

Sendet ein Test-PING-Ereignis.

list_webhook_logs

webhook_id, page_size (1–100, Standard 30), cursor

Letzte Zustellversuche mit Antwortcodes und -texten.

secret_key wird nur bei der Erstellung zurückgegeben und nie wieder. Bewahren Sie ihn auf, um den X-Up-Authenticity-Signature-Header (SHA-256-HMAC) bei eingehenden Zustellungen zu verifizieren.


Ressourcen

URI

Inhalt

up://accounts

Jedes Konto und sein aktueller Kontostand als einzelner JSON-Snapshot.

up://categories

Der vollständige Kategoriebaum zum Auflösen gültiger Werte für den category-Filter.

Beide werden bei Bedarf gelesen und spiegeln den Zustand zum Lesezeitpunkt wider.


Antwort-Konventionen

Aufbau

Up gibt JSON:API zurück, das jedes Feld unter attributes/relationships verschachtelt und auf jeder Ressource Self-Links wiederholt. Dieser Server flacht jede Ressource zu einem kompakten Dict ab und lässt optionale Felder weg, wenn sie fehlen, was die Token-Kosten erheblich reduziert, ohne Informationen zu verlieren, die ein Aufrufer benötigt.

{
  "id": "45b83097-c97d-40da-9790-254056f03d40",
  "status": "SETTLED",
  "description": "Google One",
  "amount": { "value": "-2.49", "currency": "AUD", "base_units": -249 },
  "created_at": "2026-08-20T06:53:17+10:00",
  "settled_at": "2026-08-20T06:53:17+10:00",
  "account_id": "90c0fffc-bed6-4214-9450-6a76cd39957b",
  "category_id": "games-and-software",
  "parent_category_id": "good-life",
  "tags": [],
  "is_categorizable": true
}

Felder wie foreign_amount, hold_info, round_up, cashback, card_purchase_method, note und message erscheinen nur, wenn die Transaktion sie enthält.

Geldbeträge

Jeder Betrag ist ein Objekt:

{ "value": "-2.49", "currency": "AUD", "base_units": -249 }

value ist eine Dezimalzeichenfolge, base_units ist die ganzzahlige Untereinheit (Cent für AUD). Abbuchungen sind negativ. Bevorzugen Sie base_units für Berechnungen, um Gleitkommafehler zu vermeiden.

Paginierung

Listen-Tools geben zurück:

{ "items": [ ... ], "next_cursor": "https://api.up.com.au/...", "prev_cursor": null }

Zum Blättern übergeben Sie einen zurückgegebenen Cursor als cursor-Argument an dasselbe Tool. Cursor sind Ups eigene opake URLs und kodieren bereits die Filter und die Seitengröße, daher werden alle anderen Argumente ignoriert, wenn cursor gesetzt ist. Ein Null-Cursor bedeutet, dass es keine weitere Seite in dieser Richtung gibt.

Cursors werden vor dem Folgen gegen den konfigurierten API-Host validiert, sodass ein Cursor den Client nicht auf einen anderen Server umleiten kann.

Daten

since und until akzeptieren entweder YYYY-MM-DD oder einen vollständigen RFC-3339-Zeitstempel. Reine Datumsangaben und naive Datums-/Zeitangaben werden an Australia/Sydney gebunden, passend zur Darstellung von Zeiten in der Up-App; für das jeweilige Datum wird der korrekte Offset angewendet, sodass auch die Sommerzeit berücksichtigt wird. Nicht pareisierbare Eingaben werden abgelehnt, bevor die Anfrage gesendet wird, und erscheinen nicht erst als undurchsichtiger HTTP-400-Fehler.


Fehlerbehandlung und Ratenbegrenzung

  • API-Fehler werden als ToolError ausgelöst, mit dem HTTP-Status und dem eigenen Fehlertitel und den eigenen Details von Up, zum Beispiel: HTTP 403 — Forbidden: Top-level categories cannot be set directly on transactions.

  • 429- und 5xx-Antworten werden bis zu 3 Mal mit exponentiellem Backoff wiederholt; der Retry-After-Header wird berücksichtigt, wenn er vorhanden ist.

  • Netzwerkfehler werden nach demselben Zeitplan erneut versucht, bevor sie gemeldet werden.

  • Andere 4xx-Antworten als 429 werden nicht erneut versucht — sie weisen auf eine ungültige Anfrage hin.


Projektstruktur

src/upbank_mcp/
├── client.py     Async HTTP client: auth, retry/backoff, date normalisation,
│                 cursor host validation
├── shapes.py     JSON:API → flat dict transforms, one per resource type
├── server.py     FastMCP instance, tool and resource definitions, entrypoint
├── __init__.py   Exports `mcp` and `main`
└── __main__.py   Enables `python -m upbank_mcp`

Die Trennung ist beabsichtigt: client.py kennt nur HTTP und nichts über MCP, shapes.py ist eine reine Datentransformation und server.py enthält die Tool-Verträge. Jede Komponente ist unabhängig testbar.


Entwicklung

pip install -e .
export UP_API_TOKEN=up:yeah:...
upbank-mcp                              # stdio
MCP_TRANSPORT=http upbank-mcp           # http on :8000

Betreiben Sie den Server prozessintern mit dem FastMCP-Client:

import asyncio
from fastmcp import Client
import upbank_mcp

async def main():
    async with Client(upbank_mcp.mcp) as client:
        print(await client.list_tools())
        result = await client.call_tool("list_accounts", {"account_type": "TRANSACTIONAL"})
        print(result.data)

asyncio.run(main())

Erstellen Sie das Image nach Änderungen neu:

docker compose up -d --build

Sicherheit

Das Token ist mächtig. Persönliche Zugriffstokens von Up können kein Geld bewegen — die API bietet keinen Zahlungs- oder Überweisungsendpoint —, aber sie können Ihren vollständigen Transaktionsverlauf lesen und Kategorien, Tags und Webhooks ändern. Behandeln Sie ein Token so vertraulich wie ein Passwort.

  • Der HTTP-Transport hat keine eigene Authentifizierung. Alles, was den Port erreichen kann, kann Ihre Bankdaten lesen. Compose veröffentlicht den Dienst daher nur auf 127.0.0.1. Binden Sie ihn nicht an 0.0.0.0 und setzen Sie ihn nicht über einen Tunnel oder Reverse-Proxy ein, ohne eine Authentifizierung davorzuschalten.

  • Das Token wird niemals in ein Image eingebacken. .env ist in .dockerignore aufgeführt und wird zur Laufzeit bereitgestellt. Es erscheint in keiner Image-Schicht, sodass das Image bedenkenlos in eine Registry gepusht werden kann.

  • .env ist gitignoriert, und .env.example enthält nur einen Platzhalter.

  • Der Container läuft als Nicht-Root-Benutzer (uid 10001).

  • Sofort rotieren, unter https://api.up.com.au/getting_started, falls ein Token jemals offengelegt wurde. Tokens laufen nicht von selbst ab.


Troubleshooting

Symptom

Ursache und Behebung

No Up API token configured

UP_API_TOKEN nicht konfiguriert oder leer. Prüfen Sie .env, und stellen Sie sicher, dass Compose aus dem Projektverzeichnis ausgeführt wird.

Compose exits with set UP_API_TOKEN in .env

Auf gleiche Ursache, bereits beim Containerstart erkannt statt beim ersten Aufruf.

Bind for 127.0.0.1:8000 failed: port is already allocated

Ein anderer Prozess belegt Port 8000. Setzen Sie MCP_HOST_PORT in .env.

HTTP 401 — Unauthorized

Token ist ungültig oder widerrufen. Stellen Sie es neu aus.

HTTP 403 — Top-level categories cannot be set…

categorize_transaction wurde eine übergeordnete Kategorie übergeben. Verwenden Sie eine Blatt-ID aus list_categories.

HTTP 404 bei einer plausiblen ID

IDs sind kunde-spezifisch. Prüfen Sie, ob die ID aus den Daten dieses Tokens stammt.

Wiederholtes HTTP 429

Anhaltende Ratenbegrenzung. Reduzieren Sie page_size und die Anforderungshäufigkeit; Wiederholungsversuche laufen bereits automatisch.

Client zeigt keine Tools

Der Client muss den Container mit -i ausführen. Ohne diese Option wird stdio sofort geschlossen.


Referenz

Liste:

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (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
    D
    quality
    D
    maintenance
    A Model Context Protocol server that allows AI assistants to connect to and manage Israeli bank accounts, fetch transactions, and handle authentication for all major Israeli banks and credit card companies.
    2
    32
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP wrapper for Up Bank's API that allows Claude and other MCP-enabled clients to manage accounts, transactions, categories, tags, and webhooks from Up Bank.
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A Model Context Protocol server that enables interaction with You Need A Budget (YNAB) via their API, allowing users to manage budgets, accounts, categories, and transactions through natural language.
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A Model Context Protocol server that allows AI assistants to interact with Lunch Money accounts, enabling management of transactions, categories, budgets, and other financial data through natural language commands.
    MIT

View all related MCP servers

Related MCP Connectors

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • A Model Context Protocol server for Wix AI tools

  • MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.

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/uiux-me/upbank-mcp'

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