Skip to main content
Glama

A hivatalos Billingo MCP szerver — 49 eszköz (tool) a Billingo v3 számlázási API felett, stdio (asztali) és Streamable HTTP (önállóan üzemeltethető) kliensekhez. MIT licenc alatt, önállóan üzemeltethető. Ez az első hivatalos Billingo SDK vagy MCP szerver — korábban nem létezett ilyen.

A legtöbb felhasználónak nincs szükség telepítésre — használd a hosztolt szervert a mcp.billingo.hu címen. Inkább saját magad futtatnád? Publikálva van npm-en is @billingo/billingo-mcp néven (npx, build nélkül), és Docker image formájában is — lásd a Válassz futtatási módot szakaszt lentebb.

Olvasd angolul is — az angol szakasz egy teljes fordítás, nem összefoglaló.

Tartalomjegyzék

Related MCP server: billingo-mcp

🧭 Válassz futtatási módot

Beállítás

Kinek ajánlott

🌐 Hosztolt szerver

Semmi — csak add meg a kliensedben az URL-t

A legtöbb felhasználónak: nulla telepítés, nulla karbantartás

💻 stdio npx-szel

npx, build nélkül

Asztali MCP kliensek (Claude Desktop, Claude Code)

🐳 Docker (önálló üzemeltetés, HTTP)

docker run

Ha saját infrastruktúrán akarod futtatni

⬆️ Ugrás az elejére

🌐 Használat a hosztolt szerverrel (ajánlott)

Nincs telepítés, nincs önálló üzemeltetés — csak állítsd be a klienst a https://mcp.billingo.hu címre, és minden kéréssel küldd el a Billingo API kulcsodat. Ez a leggyorsabb módja a kezdésnek; csak akkor nyúlj a stdio vagy Docker módokhoz lentebb, ha kifejezetten önálló üzemeltetésre van szükséged.

Claude Code CLI

claude mcp add --transport http billingo https://mcp.billingo.hu \
  -s user \
  -H "X-Billingo-Api-Key: your-api-key" \
  -H "X-Billingo-Allow-Write: true"

A -s user az összes projekteden át regisztrálja, nem csak az aktuálisban; az (alapértelmezett) -s local-lal csak az aktuális projektre korlátozod. Hagyd el az X-Billingo-Allow-Write fejlécet, vagy állítsd "false"-ra, csak-olvasás hozzáféréshez.

Más HTTP-kompatibilis MCP kliensek

Bármelyik kliens, amely támogatja a Streamable HTTP protokollt, ugyanígy működik: állítsd be rá a https://mcp.billingo.hu címet, az X-Billingo-Api-Key fejléccel (kötelező), opcionálisan az X-Billingo-Allow-Write-tal — a teljes fejléc-referenciáért lásd a Konfiguráció szakaszt.

Az API kulcsot ugyanúgy szerezd be, mint az API kulcs szakaszban lentebb leírtak szerint.

⬆️ Ugrás az elejére

💻 Telepítés / futtatás stdio-val

Nincs telepítési lépés — az npx igény szerint letölti és futtatja a csomagot.

Claude Desktop

claude_desktop_config.json:

{
  "mcpServers": {
    "billingo": {
      "command": "npx",
      "args": ["-y", "@billingo/billingo-mcp"],
      "env": {
        "BILLINGO_API_KEY": "your-api-key",
        "BILLINGO_ALLOW_WRITE": "false"
      }
    }
  }
}

Utána indítsd újra teljesen a klienst — a Claude Desktop csak induláskor olvassa ezt a fájlt, tehát az ablak bezárása nem elég (macOS-en ⌘Q).

Claude Code CLI

claude mcp add billingo -s user \
  -e BILLINGO_API_KEY=your-api-key \
  -e BILLINGO_ALLOW_WRITE=false \
  -- npx -y @billingo/billingo-mcp

A -s user a felhasználódhoz köti a szervert az összes projekteden át, nem csak az aktuálishoz, és semmit nem ír a repóba. Az (alapértelmezett) -s local-lal csak az aktuális projektre korlátozod. Ellenőrzés: claude mcp list, illetve a mentett konfiguráció megtekintése: claude mcp get billingo.

Más MCP kliensek

Bármelyik kliens, amely elfogadja a szabványos mcpServers JSON formátumot (pl. Cursor, Windsurf), változtatás nélkül újrahasznosíthatja a fenti Claude Desktop blokkot — a command, args és env nem Claude-specifikus, csak a befoglaló konfigurációs fájl és annak helye tér el klienstől függően.

API kulcs

Az API kulcsot a Billingóban a Beállítások → API kulcsok → Új API kulcs menüpont alatt hozod létre. Az űrlapon:

  • Hozzátartozó összekötés: Egyedi fejlesztés.

  • API hatásköre: Olvasás, ha csak listázni/lekérdezni akarsz, vagy Írás, ha dokumentumokat is szeretnél létrehozni, módosítani, küldeni vagy stornózni.

Ez egy második, a lenti BILLINGO_ALLOW_WRITE-tól független kapu: egy csak-olvasás hatáskörű kulcs minden író hívásnál közvetlenül a Billingo API-tól kap jogosultsági hibát, még akkor is, ha itt a BILLINGO_ALLOW_WRITE "true"-ra van állítva — mindkettőnek engedélyeznie kell. Hagyd a BILLINGO_ALLOW_WRITE-ot "false"-on (vagy hagyd el), hacsak nem szeretnéd, hogy a modell dokumentumokat hozhasson létre, módosíthasson, küldhessen el vagy storno­zhasson — lásd a Biztonság szakaszt. Fontos: az olyan konfigurációs fájlok, mint a claude_desktop_config.json, sima szövegként tárolódnak, tehát a kulcs titkosítatlanul áll a lemezen.

Ellenőrzés: a kliensnek read-only módban 22 eszközt kell listáznia, "true"-ra állított BILLINGO_ALLOW_WRITE mellett pedig 49-et. Ha nem talál eszközt, nézd meg a kliens naplóját (macOS-en ~/Library/Logs/Claude/mcp-server-billingo.log) — a szerver {"name":"billingo","version":"0.1.0"} néven mutatkozik be. Ha ott más név szerepel, akkor a kliens egy másik, ugyanezen a néven regisztrált szerverhez beszél.

⬆️ Ugrás az elejére

🐳 Futtatás Dockerrel (HTTP)

docker run -p 3000:3000 ghcr.io/octonull/billingo-mcp:latest

A image nem tartalmaz beégetett API kulcsot. A HTTP mód állapotmentes (stateless) és kérésenkénti: minden hívás egy fejlécben (header) viszi a Billingo API kulcsot, a szerver soha nem tárolja azt. Példahívás, a két Billingo-specifikus fejléccel:

curl -X POST http://localhost:3000 \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'X-Billingo-Api-Key: your-api-key' \
  -H 'X-Billingo-Allow-Write: true' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

A GET /health {"status":"ok"}-kal válaszol, fejléc nélkül is — ez a konténer health checkekhez van. A GET /build_version a futó image build-idejű verzióját adja vissza, pl. {"buildVer":"fcc756d@0.1.0"} — vagy csak a commit SHA-t ({"buildVer":"fcc756d"}), ha az adott build nem tartozik release tag-hez.

Magát az API kulcsot ugyanúgy hozd létre, mint stdio-nál — lásd az API kulcs szakaszt fentebb —, és adj neki Írás hatáskört a Billingo oldalán, ha küldeni akarod az X-Billingo-Allow-Write fejlécet.

Claude Code CLI

claude mcp add --transport http billingo http://localhost:3000 \
  -s user \
  -H "X-Billingo-Api-Key: your-api-key" \
  -H "X-Billingo-Allow-Write: true"

A -s user itt is az összes projekteden át regisztrálja, nem csak az aktuálisban; az (alapértelmezett) -s local-lal csak az aktuális projektre korlátozod. Hagyd el az X-Billingo-Allow-Write fejlécet, vagy állítsd "false"-ra, csak-olvasás hozzáféréshez.

⬆️ Ugrás az elejére

⚙️ Konfiguráció

Változó

Transport

Kötelező

Alapérték

Jelentés

BILLINGO_API_KEY

csak stdio

igen

A Billingo API kulcsod. HTTP módban nem ezt olvassa a szerver — lásd lent.

BILLINGO_ALLOW_WRITE

csak stdio

nem

false

"true" vagy "1" érték engedélyezi az író (write) eszközöket ennél a stdio folyamatnál. Bármi más érték (elgépelést is beleértve) false-nak számít.

BILLINGO_BASE_URL

mindkettő

nem

https://api.billingo.hu/v3

Az API alap URL felülírása, pl. proxy mögé állításhoz.

PORT

csak HTTP

nem

3000

A HTTP szerver figyelési portja.

BILLINGO_ALLOWED_HOSTS

csak HTTP

nem

nincs beállítva (védelem kikapcsolva)

Vesszővel elválasztott lista az elfogadott Host fejléc-értékekről — DNS-rebinding védelem. Mindig állítsd be, ha a szerver localhoston kívülről is elérhető.

HTTP módban a hitelesítés és a jogosultsági kör (scope) kérésenként, fejlécben érkezik:

Fejléc

Kötelező

Jelentés

X-Billingo-Api-Key

igen

A kérésnél használandó Billingo API kulcs. Soha nem kerül tárolásra.

X-Billingo-Allow-Write

nem

"true" vagy "1" engedélyezi az író eszközöket, de csak erre az egy kérésre.

⬆️ Ugrás az elejére

🔒 Biztonság

Ezt a szakaszt olvasd el, mielőtt bárkinek elérhetővé teszed a szervert.

  • Alapértelmezetten csak olvasható (read-only). Az író eszközök (létrehozás, módosítás, törlés, küldés, storno) teljesen ki vannak szűrve a tools/list-ből, hacsak explicit be nem kapcsolod a BILLINGO_ALLOW_WRITE-tal (stdio) vagy az X-Billingo-Allow-Write fejléccel (HTTP). Egy modell, amely soha nem lát egy író eszközt, nem is tudja meghívni. Ez az elsődleges biztonsági mechanizmus — hagyd kikapcsolva az írást, hacsak kifejezetten nem szükséges.

  • A kiállított számlák automatikusan a NAV felé jelentésre kerülnek, és ez nem vonható vissza. Amint egy dokumentum véglegesítésre (finalize) kerül és számlává válik, a NAV Online Számla jelentés azonnal megtörténik, és nem visszafordítható. Egy hibás számla egyetlen orvoslása a storno (érvénytelenítés) — de a storno maga is végleges: örökre érvényteleníti a számlát, és ez is jelentésre kerül a NAV felé. Egy már kiállított számlára nincs "törlés".

  • A HTTP mód TLS-t igényel. Az API kulcs minden kérésnél az X-Billingo-Api-Key fejlécben utazik. Zárd le a TLS-t a konténer előtt (reverse proxy, load balancer, vagy a platform ingressze) — soha ne futtasd a HTTP módot titkosítatlan HTTP-n, megbízható helyi hálózaton kívül.

  • A HTTP mód szándékosan nem tárol API kulcsot. Ne "javítsd ki" ezt egy konténerszintű környezeti változóval beállított API kulccsal — ez a telepítést egyfelhasználóssá tenné, és bárki, aki eléri a konténert, a te fiókodra tudna számlázni, mivel semmi nem különböztetné meg a kéréseket egymástól. A kérésenkénti fejléc pont ezért létezik.

  • Mindig állítsd be a BILLINGO_ALLOWED_HOSTS-t, ha a HTTP szerver publikusan elérhető. Enélkül a DNS-rebinding védelem ki van kapcsolva.

⬆️ Ugrás az elejére

🛠️ Eszközök

Összesen 49 eszköz: 22 olvasó (mindig látható), 27 író (csak akkor látható, ha az írás engedélyezve van).

Szervezet (Organization) (3 olvasó)

  • billingo_get_organization — Szervezeti adatok lekérése (adószám, előfizetés, NAV-kapcsolat állapota).

  • billingo_check_tax_number — Magyar adószám ellenőrzése.

  • billingo_get_conversion_rate — Hivatalos árfolyam lekérése, opcionálisan egy múltbeli dátumra.

Partnerek (2 olvasó, 4 író)

  • billingo_list_partners — Partnerek listázása.

  • billingo_get_partner — Egy partner lekérése.

  • billingo_create_partner — Partner létrehozása. (író)

  • billingo_update_partner — Partner módosítása (teljes felülírás). (író)

  • billingo_guess_partner — Partner keresése adószám/email alapján, vagy létrehozása. (író)

  • billingo_delete_partner — Partner törlése. (író)

Termékek (3 olvasó, 3 író)

  • billingo_list_products — Termékek listázása.

  • billingo_get_product — Egy termék lekérése.

  • billingo_get_product_quantity — Egy termék készletmennyiségének lekérése.

  • billingo_create_product — Termék létrehozása. (író)

  • billingo_update_product — Termék módosítása (teljes felülírás). (író)

  • billingo_delete_product — Termék törlése. (író)

Kiadások (Spendings) (2 olvasó, 3 író)

  • billingo_list_spendings — Kiadások listázása.

  • billingo_get_spending — Egy kiadás lekérése.

  • billingo_create_spending — Kiadás létrehozása. (író)

  • billingo_update_spending — Kiadás módosítása (teljes felülírás). (író)

  • billingo_delete_spending — Kiadás törlése. (író)

Bankszámlák (2 olvasó, 3 író)

  • billingo_list_bank_accounts — Bankszámlák listázása.

  • billingo_get_bank_account — Egy bankszámla lekérése.

  • billingo_create_bank_account — Bankszámla létrehozása. (író)

  • billingo_update_bank_account — Bankszámla módosítása (teljes felülírás). (író)

  • billingo_delete_bank_account — Bankszámla törlése. (író)

Dokumentumblokkok (1 olvasó, 1 író)

  • billingo_list_document_blocks — Dokumentumblokkok (számlaszám-tartományok) listázása.

  • billingo_create_document_block — Dokumentumblokk létrehozása. (író)

Dokumentumok — olvasás (8)

  • billingo_list_documents — Dokumentumok listázása (számlák, nyugták, díjbekérők, piszkozatok és mások).

  • billingo_get_document — Egy dokumentum lekérése id vagy külső azonosító (vendor id) alapján.

  • billingo_download_document — A dokumentum PDF-jének lekérése (publikus URL, vagy base64 bájtok).

  • billingo_get_document_public_url — Megosztható publikus URL lekérése egy dokumentumhoz.

  • billingo_get_online_szamla_status — Egy dokumentum NAV Online Számla jelentési állapotának lekérése. Hibát ad, ha a dokumentumnak nincs NAV rekordja — pl. ha a szervezet nincs csatlakoztatva a NAV Online Számlához, vagy a dokumentum nem tartozik jelentési kötelezettség alá.

  • billingo_get_document_payments — Egy dokumentumhoz rögzített kifizetések lekérése.

  • billingo_get_document_reminders — Egy dokumentumhoz küldött fizetési emlékeztetők lekérése.

  • billingo_pos_print — POS hőnyomtatóhoz méretezett PDF nyugta lekérése egy dokumentumhoz.

Dokumentumok — írás (9)

  • billingo_create_document — Dokumentum létrehozása (számla, díjbekérő, piszkozat vagy előlegszámla). (író)

  • billingo_create_receipt — Nyugta létrehozása. (író)

  • billingo_finalize_draft — Piszkozat véglegesítése számlává — kiállítja és jelenti a NAV felé. (író)

  • billingo_finalize_receipt_draft — Piszkozat véglegesítése nyugtává. (író)

  • billingo_create_document_from_proforma — Számla létrehozása díjbekérőből. (író)

  • billingo_copy_document — Dokumentum másolása. (író)

  • billingo_create_modification_document — Módosító (helyesbítő) dokumentum létrehozása. (író)

  • billingo_update_payment — Egy dokumentum rögzített kifizetéseinek módosítása. (író)

  • billingo_archive_document — Proforma dokumentum archiválása. (író)

Dokumentumok — export (1 olvasó)

  • billingo_export_documents — Dokumentumok exportálása.

Dokumentumok — destruktív (4 író)

  • billingo_cancel_document — Dokumentum érvénytelenítése (storno) — visszavonhatatlan. (író)

  • billingo_send_document — Dokumentum küldése emailben. (író)

  • billingo_delete_document — Dokumentum törlése (csak piszkozat/ki nem állított dokumentumoknál; egy kiállított számlát stornózni kell helyette). (író)

  • billingo_delete_payment — Egy dokumentum rögzített kifizetéseinek törlése. (író)

⬆️ Ugrás az elejére

🧑‍💻 Fejlesztés

git clone https://github.com/octonull/billingo-mcp.git
cd billingo-mcp
npm ci
npm test

A TypeScript verziója rögzítve van 5.9.3-ra, és jelenleg nem frissíthető: az openapi-typescript a typescript@^5.x-et igényli, a typescript-eslint pedig <6.1.0-t — a kettő metszete 5.9.3. Egy újabb TypeScript telepítése ERESOLVE konfliktussal buktatja el az npm install-t.

További hasznos parancsok: npm run typecheck, npm run lint, npm run format, npm run test:coverage, npm run build.

Élő smoke teszt csomag: az npm run test:live egy kis tesztcsomagot futtat a valódi Billingo sandbox ellen (valódi, de ártalmatlan sandbox adatokat hoz létre és takarít el). Ehhez szükséges a BILLINGO_SANDBOX_API_KEY beállítása egy sandbox API kulcsra; enélkül a csomag tisztán kihagyásra (skip) kerül — így futtatja biztonságosan a CI és minden hozzájáruló, akinek nincs sandbox hozzáférése.

⬆️ Ugrás az elejére

🤝 Közreműködés

Issue-kat és pull requesteket szívesen fogadunk. PR nyitása előtt futtasd le az npm run format:check, npm run lint, npm run typecheck és npm run test:coverage parancsokat — a CI mind a négyet megköveteli. Az architektúráért és a kódból nem nyilvánvaló megkötésekért lásd a CLAUDE.md fájlt.

⬆️ Ugrás az elejére

📜 Licenc

MIT — lásd a LICENSE fájlt. Copyright (c) 2026 Billingo Technologies Zrt.

⬆️ Ugrás az elejére


English

The official Billingo MCP server — 49 tools over the Billingo invoicing API v3, for stdio (desktop) and Streamable HTTP (self-hosted) clients. MIT-licensed and self-hostable. There was no official Billingo SDK or MCP server before this — it is the first.

No install needed for most people — use the hosted server at mcp.billingo.hu. Prefer to run it yourself? It's also published on npm as @billingo/billingo-mcp (npx, no build) and as a Docker image — see Choose how to run it below.

🧭 Choose how to run it

Setup

Best for

🌐 Hosted server

None — point your client at a URL

Most people: zero install, zero maintenance

💻 stdio via npx

npx, no build

Desktop MCP clients (Claude Desktop, Claude Code)

🐳 Docker (self-hosted HTTP)

docker run

Running your own instance, on your own infrastructure

⬆️ Back to top

No install, no self-hosting — point your MCP client at https://mcp.billingo.hu and send your Billingo API key with every request. This is the fastest way to get started; reach for stdio or Docker below only if you specifically need to self-host.

Claude Code CLI

claude mcp add --transport http billingo https://mcp.billingo.hu \
  -s user \
  -H "X-Billingo-Api-Key: your-api-key" \
  -H "X-Billingo-Allow-Write: true"

-s user registers it across every project instead of just the current one; use -s local (the default) to scope it to just this project. Drop the X-Billingo-Allow-Write header, or set it to "false", for read-only access.

Other HTTP-capable MCP clients

Any client that speaks Streamable HTTP works the same way: point it at https://mcp.billingo.hu with the X-Billingo-Api-Key header (required) and optionally X-Billingo-Allow-Write — see Configuration for the full header reference.

Get your API key the same way as described under API key below.

⬆️ Back to top

💻 Install / run with stdio

No install step — npx fetches and runs the package on demand.

Claude Desktop

claude_desktop_config.json:

{
  "mcpServers": {
    "billingo": {
      "command": "npx",
      "args": ["-y", "@billingo/billingo-mcp"],
      "env": {
        "BILLINGO_API_KEY": "your-api-key",
        "BILLINGO_ALLOW_WRITE": "false"
      }
    }
  }
}

Restart the client fully afterwards — Claude Desktop reads this file only at startup, so quitting the window is not enough (use ⌘Q on macOS).

Claude Code CLI

claude mcp add billingo -s user \
  -e BILLINGO_API_KEY=your-api-key \
  -e BILLINGO_ALLOW_WRITE=false \
  -- npx -y @billingo/billingo-mcp

-s user registers the server for you across every project, not just the one you're currently in, without committing anything to a repo. Use -s local (the default) instead to scope it to the current project only. Verify with claude mcp list, or inspect the saved config with claude mcp get billingo.

Other MCP clients

Any client that accepts the standard mcpServers JSON shape (Cursor, Windsurf, and others) can reuse the Claude Desktop block above as-is — command, args, and env are not Claude-specific, only the surrounding config file and its location differ.

API key

Get your API key from Billingo under Settings → API keys → New API key. On the creation form:

  • Associated connection: Custom development.

  • API scope: Read if you only need to list or fetch data, or Write if you also want to create, modify, send, or cancel documents.

This is a second, independent gate from BILLINGO_ALLOW_WRITE below: a Read-scoped key still gets a permission error straight from the Billingo API on any write call, even if BILLINGO_ALLOW_WRITE is "true" here — both have to allow it. Leave BILLINGO_ALLOW_WRITE at "false" (or omit it) unless you actually want the model to be able to create, modify, send, or cancel documents — see Security. Note that config files like claude_desktop_config.json are stored in plain text, so the key sits unencrypted on disk.

To check it worked: the client should list 22 tools in read-only mode, or 49 with BILLINGO_ALLOW_WRITE set to "true". If it reports no tools, check the client's log (on macOS, ~/Library/Logs/Claude/mcp-server-billingo.log) — the server identifies itself as {"name":"billingo","version":"0.1.0"}. A different name there means the client is talking to some other server registered under the same name.

⬆️ Back to top

🐳 Run with Docker (HTTP)

docker run -p 3000:3000 ghcr.io/octonull/billingo-mcp:latest

The image ships with no API key baked in. HTTP mode is stateless and per-request: every call carries the Billingo API key in a header, and the server never stores it. Example call, showing the two Billingo-specific headers:

curl -X POST http://localhost:3000 \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'X-Billingo-Api-Key: your-api-key' \
  -H 'X-Billingo-Allow-Write: true' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

GET /health returns {"status":"ok"} and needs no headers, for container health checks. GET /build_version returns the running image's build-time version, e.g. {"buildVer":"fcc756d@0.1.0"} — or just the commit SHA ({"buildVer":"fcc756d"}) if that build isn't from a release tag.

Get the API key itself the same way as for stdio — see API key above — and give it Write scope on Billingo's side if you intend to send X-Billingo-Allow-Write.

Claude Code CLI

claude mcp add --transport http billingo http://localhost:3000 \
  -s user \
  -H "X-Billingo-Api-Key: your-api-key" \
  -H "X-Billingo-Allow-Write: true"

-s user registers it across every project instead of just the current one; use -s local (the default) to scope it to just this project. Drop the X-Billingo-Allow-Write header, or set it to "false", for read-only access.

⬆️ Back to top

⚙️ Configuration

Variable

Transport

Required

Default

Meaning

BILLINGO_API_KEY

stdio only

yes

Your Billingo API key. Not read in HTTP mode — see below.

BILLINGO_ALLOW_WRITE

stdio only

no

false

"true" or "1" enables write tools for this stdio process. Any other value (including a typo) is treated as false.

BILLINGO_BASE_URL

both

no

https://api.billingo.hu/v3

Override the API base URL, e.g. to point at a proxy.

PORT

HTTP only

no

3000

Port the HTTP server listens on.

BILLINGO_ALLOWED_HOSTS

HTTP only

no

unset (protection disabled)

Comma-separated list of Host header values the server will accept — DNS-rebinding protection. Set this whenever the server is reachable from outside localhost.

HTTP mode takes credentials and scope per request, as headers, instead:

Header

Required

Meaning

X-Billingo-Api-Key

yes

The Billingo API key to use for this request. Never stored.

X-Billingo-Allow-Write

no

"true" or "1" enables write tools for this request only.

⬆️ Back to top

🔒 Security

Read this section before exposing the server to anything.

  • Read-only by default. Write tools (create, update, delete, send, cancel) are filtered out of tools/list entirely unless BILLINGO_ALLOW_WRITE (stdio) or X-Billingo-Allow-Write (HTTP) is explicitly set. A model that never sees a write tool cannot call it. This is the primary safety mechanism — leave writes off unless you specifically need them.

  • Issued invoices are reported to NAV automatically and cannot be undone. Once a document is finalized into an invoice, Hungary's NAV Online Számla reporting happens immediately and is not reversible. The only remedy for a wrong invoice is a storno (cancellation) — and a storno is itself irreversible: it voids the invoice permanently and is also reported to NAV. There is no "delete" for an issued invoice.

  • HTTP mode requires TLS. The API key travels in the X-Billingo-Api-Key header on every request. Terminate TLS in front of the container (a reverse proxy, load balancer, or platform ingress) — never run HTTP mode over plain HTTP outside a trusted local network.

  • HTTP mode stores no API key, by design. Do not "fix" this by setting an API key via a container-wide environment variable — that turns the deployment single-tenant and lets every caller who can reach the container bill your account, since there would be nothing left to distinguish requests. The per-request header is the point.

  • Set BILLINGO_ALLOWED_HOSTS whenever the HTTP server is exposed publicly. Without it, DNS-rebinding protection is disabled.

⬆️ Back to top

🛠️ Tools

49 tools total: 22 read (always visible), 27 write (visible only with writes enabled).

Organization (3 read)

  • billingo_get_organization — Get organization details (tax code, subscription, NAV connection status).

  • billingo_check_tax_number — Validate a Hungarian tax number.

  • billingo_get_conversion_rate — Get an official currency conversion rate, optionally for a past date.

Partners (2 read, 4 write)

  • billingo_list_partners — List partners.

  • billingo_get_partner — Get a single partner.

  • billingo_create_partner — Create a partner. (write)

  • billingo_update_partner — Update a partner (full replace). (write)

  • billingo_guess_partner — Find a partner by tax number/email, or create one. (write)

  • billingo_delete_partner — Delete a partner. (write)

Products (3 read, 3 write)

  • billingo_list_products — List products.

  • billingo_get_product — Get a single product.

  • billingo_get_product_quantity — Get a product's stock quantity.

  • billingo_create_product — Create a product. (write)

  • billingo_update_product — Update a product (full replace). (write)

  • billingo_delete_product — Delete a product. (write)

Spendings (2 read, 3 write)

  • billingo_list_spendings — List spendings.

  • billingo_get_spending — Get a single spending.

  • billingo_create_spending — Create a spending. (write)

  • billingo_update_spending — Update a spending (full replace). (write)

  • billingo_delete_spending — Delete a spending. (write)

Bank accounts (2 read, 3 write)

  • billingo_list_bank_accounts — List bank accounts.

  • billingo_get_bank_account — Get a single bank account.

  • billingo_create_bank_account — Create a bank account. (write)

  • billingo_update_bank_account — Update a bank account (full replace). (write)

  • billingo_delete_bank_account — Delete a bank account. (write)

Document blocks (1 read, 1 write)

  • billingo_list_document_blocks — List document blocks (invoice number ranges).

  • billingo_create_document_block — Create a document block. (write)

Documents — read (8)

  • billingo_list_documents — List documents (invoices, receipts, proformas, drafts, and more).

  • billingo_get_document — Get a single document by id or vendor id.

  • billingo_download_document — Get the document PDF (public URL, or base64 bytes).

  • billingo_get_document_public_url — Get a shareable public URL for a document.

  • billingo_get_online_szamla_status — Get a document's NAV Online Számla reporting status. Errors when the document has no NAV record — e.g. the organization is not connected to NAV Online Számla, or the document isn't subject to reporting.

  • billingo_get_document_payments — Get the payments recorded against a document.

  • billingo_get_document_reminders — Get the reminder events sent for a document.

  • billingo_pos_print — Get a POS-thermal-printer-sized PDF receipt for a document.

Documents — write (9)

  • billingo_create_document — Create a document (invoice, proforma, draft, or advance). (write)

  • billingo_create_receipt — Create a receipt. (write)

  • billingo_finalize_draft — Finalize a draft into an invoice — issues it and reports it to NAV. (write)

  • billingo_finalize_receipt_draft — Finalize a draft into a receipt. (write)

  • billingo_create_document_from_proforma — Create an invoice from a proforma. (write)

  • billingo_copy_document — Copy a document. (write)

  • billingo_create_modification_document — Create a modification (correction) document. (write)

  • billingo_update_payment — Update a document's recorded payments. (write)

  • billingo_archive_document — Archive a proforma document. (write)

Documents — export (1 read)

  • billingo_export_documents — Export documents.

Documents — destructive (4 write)

  • billingo_cancel_document — Cancel (storno) a document — irreversible. (write)

  • billingo_send_document — Send a document by email. (write)

  • billingo_delete_document — Delete a document (only drafts/unissued documents; an issued invoice must be cancelled instead). (write)

  • billingo_delete_payment — Delete a document's recorded payments. (write)

⬆️ Back to top

🧑‍💻 Development

git clone https://github.com/octonull/billingo-mcp.git
cd billingo-mcp
npm ci
npm test

TypeScript is pinned to 5.9.3 and cannot currently be upgraded: openapi-typescript requires typescript@^5.x, and typescript-eslint requires <6.1.0 — their intersection is 5.9.3. Installing a newer TypeScript fails npm install with an ERESOLVE conflict.

Other useful commands: npm run typecheck, npm run lint, npm run format, npm run test:coverage, npm run build.

Live smoke suite: npm run test:live runs a small suite against the real Billingo sandbox (creating and cleaning up real, if harmless, sandbox data). It needs BILLINGO_SANDBOX_API_KEY set to a sandbox API key; without it, the suite skips cleanly (this is also how CI and contributors without sandbox access run it safely).

⬆️ Back to top

🤝 Contributing

Issues and pull requests are welcome. Please run npm run format:check, npm run lint, npm run typecheck, and npm run test:coverage before opening a PR — CI enforces all four. See CLAUDE.md for the architecture and the constraints that aren't obvious from the code alone.

⬆️ Back to top

📜 Licence

MIT — see LICENSE. Copyright (c) 2026 Billingo Technologies Zrt.

⬆️ Back to top

Available Tools

22 tools
billingo_check_tax_numberCheck tax numberA
Read-onlyIdempotent

Looks up a Hungarian tax number in the public registry and returns the company data behind it. Use this to validate a tax number before creating a partner.

ParametersJSON Schema
NameRequiredDescriptionDefault
tax_numberYesHungarian tax number, e.g. "12345678" or "12345678-2-42".

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds specifics beyond the annotations by identifying the source as the 'public registry' and clarifying that the tool returns company data. Since there is no output schema, this return-value signal is valuable. The description is consistent with the readOnly, openWorld, and idempotent hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler. The core lookup behavior and the practical use case are both front-loaded, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read-only lookup with rich annotations and full schema coverage, the description covers the behavior, the result, and the intended use case. Nothing essential is missing for an agent to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully documents the single parameter with format examples, so schema coverage is 100%. The description does not add new parameter-level details, but it reinforces that the tax number is the subject of validation. This meets the baseline without exceeding it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Looks up'), the resource ('Hungarian tax number in the public registry'), and the result ('returns the company data behind it'). It is easily distinguished from sibling tools like billingo_list_partners or billingo_get_organization because the lookup is tax-number-driven, not a list or organization-level operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance: 'Use this to validate a tax number before creating a partner.' This tells the agent exactly when to invoke the tool. It does not enumerate alternatives or exclusions, but the context is clear enough given the sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_download_documentDownload documentA
Read-onlyIdempotent

Gets the document PDF. By default returns a shareable public URL — this is what works in most MCP clients (including Claude Desktop, which rejects the base64 file attachment) and is what you want in almost every case. Pass format="base64" only when a caller specifically needs the raw PDF bytes: it costs a lot of context (base64 is ~1.33x the PDF size) and some clients cannot render the result at all.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDocument id.
formatNo"url" returns a public link (default); "base64" returns the PDF bytes.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnly/idempotent annotations already present, the description adds valuable behavioral detail: default public URL behavior, Claude Desktop incompatibility with base64, ~1.33x context overhead, and rendering risks. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences that front-load the behavior, then add only necessary caveats. Every sentence earns its place, and the cost/rendering warnings are compactly expressed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only tool with no output schema, the description is complete: it states the return form, default behavior, when to override it, and the trade-offs. An agent has enough context to call it correctly and to interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers both parameters at 100%, so the baseline is 3, but the description adds significant meaning: it names 'url' as the default, instructs when to use base64, quantifies the context cost, and warns about client support. This exceeds schema-only information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action and resource: 'Gets the document PDF' and identifies two return formats. It is not a tautology, but it does not explicitly distinguish itself from the sibling billingo_get_document_public_url even though both can yield a public URL.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit format-selection guidance: default URL is 'what you want in almost every case' and base64 should be used 'only when a caller specifically needs the raw PDF bytes.' It does not, however, mention sibling tools or say when to prefer this tool over get_document_public_url.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_export_documentsExport documentsA
Read-only

Exports documents in a date range to a downloadable file, in one of the accounting/reporting formats Billingo supports (e.g. simple_csv, simple_excel, or a named accounting-system format). Creates the export, waits for it to finish, and returns the file. Nothing is modified. Textual formats (simple_csv, nav_xml, and other XML/JSON-based targets) come back as readable text you can analyse directly — very large exports are truncated with an explicit note, and a narrower date range will return the whole thing. Binary formats (simple_excel, simple_excel_items) come back as a file attachment that some MCP clients cannot display inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatYesExport format/target accounting system. See the enum for valid values.
block_idNoRestrict the export to one document block.
end_dateYesEnd of the export range.
query_typeNoWhich date field start_date/end_date filter by. Defaults to "invoice_date".
start_dateYesStart of the export range.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint, and the description reinforces this with 'Nothing is modified.' It also discloses that the tool creates the export, waits for completion, returns the file, truncates very large exports with an explicit note, and that binary formats may not display inline. This is rich behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence in the description contributes meaningful information. The main purpose is front-loaded, followed by behavioral notes and output-type distinctions. It is concise enough to read quickly while covering all important nuances.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, no output schema, and a complex format-dependent return behavior, the description covers the key operational aspects: no side effects, waiting/truncation behavior, and inline-display limitations. Schema handles the remaining parameter details, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining how the format parameter behaves (textual vs binary output, truncation behavior, and that a narrower date range returns the whole export). This extra semantic context justifies a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with a specific verb and resource: 'Exports documents in a date range to a downloadable file'. It clearly distinguishes itself from siblings like billingo_download_document by emphasizing date-range export and multiple accounting formats. The explicit format examples further anchor the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear scenarios: use for date-range exports in Billingo-supported formats, with guidance on textual vs binary outputs. However, it does not explicitly name alternatives such as billingo_download_document or say when not to use them, so it stops short of a full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_get_bank_accountGet bank accountA
Read-onlyIdempotent

Returns a single bank account by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesBank account id.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, covering the key behavioral safety traits. The description confirms it returns data but adds no extra behavioral context such as not-found behavior, response format, or authorization requirements. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, direct sentence communicates the core operation with no filler or redundant wording. The essential qualifiers 'single' and 'by id' are front-loaded and immediately actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read operation with strong annotations, the description is largely sufficient to select and invoke the tool. The only minor gap is the absence of response-shape or error-behavior details, but the low complexity and clear purpose make this acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% coverage with a clear description for the only parameter ('Bank account id.'). The description merely restates 'by id' and adds no new semantic detail beyond what the input schema already conveys, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Returns') and resource ('a single bank account') along with the lookup criterion ('by id'). This clearly distinguishes it from sibling tools like billingo_list_bank_accounts, which returns multiple accounts, and from other get-by-id tools for different entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this tool is for fetching exactly one bank account when its id is known, which is the appropriate context versus listing bank accounts. It does not explicitly name alternatives or give when-not-to-use conditions, but the single-by-id phrasing provides enough contextual guidance for a simple getter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_get_conversion_rateGet currency conversion rateA
Read-onlyIdempotent

Returns the conversion rate Billingo would apply between two currencies.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget currency.
dateNoRate as of this date. Omit for today's rate. For a backdated or historical document, pass its fulfillment_date here — otherwise you'll get today's rate on a document dated in the past.
fromYesSource currency.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, and openWorldHint, covering safety and repeatability. The description adds a useful nuance that it returns the rate Billingo would apply, not necessarily a market rate. However, it does not describe rate dynamics, date sensitivity, or output details, so it adds only moderate behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the core action and resource. Every word adds meaning, and there is no repetition of the title or obvious filler. It is optimally concise and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward, read-only conversion-rate lookup with two required enum parameters and one optional date, the description together with the schema and annotations gives an agent enough to call the tool correctly. There is no output schema, but the return value is clearly implied by the description. A few details like exact response format or error conditions are absent, but they are not essential for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The main description contains no parameter-level information, but schema_description_coverage is 100%. The schema provides clear descriptions for from, to, and date, including a valuable explanation of how to use the date parameter for historical documents. This meets the baseline expectation for a well-covered schema; the description itself adds no further parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Returns'), a specific resource ('conversion rate'), and a clear qualifier ('Billingo would apply'). It fully conveys what the tool does and is naturally distinguished from the sibling tools, none of which offer conversion rates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The main description does not explicitly state when to use this tool or when to prefer an alternative. Since no sibling tool provides conversion rates, this is less critical, but the usage context is only implied. The schema's date parameter description adds meaningful practical guidance for backdated documents, but that belongs to the structured schema rather than the tool description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_get_documentGet documentA
Read-onlyIdempotent

Returns a single document. Give either id (the Billingo document id) or vendor_id (your own external reference set when the document was created).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoBillingo document id.
vendor_idNoYour external reference for the document.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds the useful behavioral detail that the tool can look up by either Billingo id or vendor_id, but it does not disclose return shape, error behavior, or exclusions. Given the annotations, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It states the core behavior first, then immediately provides the essential parameter instruction. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only lookup with annotations covering safety and a schema covering both parameters, the description provides enough to invoke the tool correctly. It is slightly incomplete in not steering the agent away from sibling document tools, but that is a minor gap given the simplicity of the operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by stating that either id or vendor_id should be provided, and by explaining that vendor_id is the caller's external reference set at document creation. This clarifies the role and relationship of the two parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Returns') and a specific resource ('a single document'), clearly distinguishing from list-style tools. However, it does not explicitly differentiate itself from sibling tools like billingo_download_document or billingo_get_document_public_url, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives parameter-level guidance ('Give either id or vendor_id') but does not explain when to choose this tool over the many document-related siblings. There is no explicit when-to-use or when-not-to-use guidance, so an agent could confuse it with download or public-URL retrieval tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_get_document_paymentsGet document paymentsA
Read-onlyIdempotent

Returns the payments recorded against a document.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDocument id.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds only the resource scope ('payments recorded against a document') and no further behavioral context such as response shape, pagination, or edge cases, so it contributes little beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no redundant wording. It front-loads the action and resource, making it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, single-parameter read-only tool with rich annotations, the description is mostly sufficient: the agent knows the input (document id), the operation (returns payments), and that it is safe/idempotent. Some detail about the returned payment entries could be useful, but it is not necessary for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter already has a clear description ('Document id.'). The tool description does not add parameter-specific meaning beyond what the schema provides, which matches the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Returns') and a clearly identified resource ('payments recorded against a document'). It is easily distinguished from sibling tools like billingo_get_document and billingo_get_document_reminders, so an agent can tell what this tool does without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool should be used when payment information for a document is needed, but it provides no explicit guidance about when not to use it or which sibling alternative might be more appropriate. The intended use is inferable, not directly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_get_document_public_urlGet document public URLA
Read-onlyIdempotent

Returns a shareable public URL for the document, viewable without a Billingo login.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDocument id.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, covering the operation's safety and repeatability. The description adds meaningful behavioral context: the returned URL is shareable and accessible without authentication/login. It does not mention URL expiration or permissions, but for a simple public-URL generator the key behavioral trait is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler. The main outcome ('Returns a shareable public URL') is front-loaded, and the key condition ('viewable without a Billingo login') is included succinctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only, idempotent tool, the description covers the essential behavior and access requirements. There is no output schema, but stating that it 'Returns a shareable public URL' gives sufficient expectation of the result. Minor missing details like URL expiration or response shape could be added, but they are not critical for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter, 'id', and the schema description fully documents it as 'Document id.' With 100% schema description coverage, the description adds little beyond connecting 'document' to the public URL concept, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Returns'), a precise resource ('shareable public URL for the document'), and a key distinguishing trait ('viewable without a Billingo login'). This clearly separates it from sibling tools like billingo_get_document or billingo_download_document, which do not provide a public shareable URL.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case: when you need a publicly accessible link that does not require the recipient to have a Billingo account. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to decide between this and document retrieval/download tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_get_document_remindersGet document reminder eventsA
Read-onlyIdempotent

Returns the payment reminder events sent for a document, grouped into sent, upcoming and postal-mail reminders.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDocument id.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds useful context that results are grouped into sent, upcoming, and postal-mail reminders, but does not elaborate on what those categories entail or any other behavioral nuances.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that uses concise, precise wording. Every word contributes to conveying the tool's action and output grouping.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single-parameter input, annotations covering read-only and idempotent behavior, and the absence of an output schema, the description adequately explains the return grouping. It does not detail the contents of each reminder category, but this is not critical for invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the single parameter with a clear 'Document id' description, so schema coverage is 100%. The tool description does not add additional meaning beyond reinforcing that the id refers to a document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns payment reminder events for a document and specifies the grouping into sent, upcoming, and postal-mail reminders. It is specific about the resource and action, though it does not explicitly distinguish itself from sibling tools like get_document_payments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: the agent should use this tool when it needs payment reminder events for a document. However, no explicit guidance is given about when to choose this tool over alternatives or any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_get_online_szamla_statusGet NAV Online Számla statusA
Read-onlyIdempotent

Returns the NAV Online Számla reporting status of a document: the transaction id, the status, and any validation messages from NAV. Use this to check whether reporting succeeded. Errors (4xx, "NavOnlineSzamla is not found") when the document has no NAV record at all — for example when the organization is not connected to NAV Online Számla, or the document is not subject to reporting. That is not a NAV failure; it means there is nothing to report on.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDocument id.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld/idempotent annotations, the description adds valuable behavioral detail about error conditions: 4xx errors and 'NavOnlineSzamla is not found' indicate no NAV record exists, not a NAV failure. This helps an agent correctly interpret failures and avoid false conclusions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states what is returned, the second gives the usage intent, and the remaining sentences clarify error semantics. Every sentence adds value without unnecessary fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only tool with no output schema, the description is complete: it covers return fields, intended use, and error interpretation. An agent has enough information to decide when to invoke it and how to interpret both success and failure responses.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the single required parameter 'id' as 'Document id' with full coverage, so the baseline is 3. The description does not add extra detail about where to find the id or its format, but for a single clearly-named parameter, this is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Returns the NAV Online Számla reporting status of a document' and names the concrete outputs (transaction id, status, validation messages). It clearly distinguishes this from generic document tools like billingo_get_document by focusing solely on NAV reporting status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: 'Use this to check whether reporting succeeded.' It also explains the meaning of errors in context, clarifying that a missing NAV record is not a failure. It does not name alternative sibling tools, but the use case is clear enough for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_get_organizationGet organizationA
Read-onlyIdempotent

Returns account-level data for the organization that owns the API key: its tax code, its Billingo subscription, and whether NAV Online Számla is connected. This is NOT a company profile — it contains no name, id or address. Use it to check the subscription or NAV connection status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint, idempotentHint, and openWorldHint. The description adds meaningful behavioral context beyond those flags by specifying the data scope (account-level data tied to the API key owner) and the explicit exclusions. It doesn't mention output format or error conditions, but for a zero-parameter read-only tool, the annotation coverage plus content description is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences and every sentence earns its place: what it returns, what it explicitly does not return, and when to use it. It is front-loaded with the core action and resource, followed by the non-obvious exclusion and use case. There is no filler or repetition of schema/annotation information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, zero-parameter, read-only tool with strong annotations and no nested schema, the description fully equips an agent to select and call it correctly. It explains the return scope, the negative case (not a company profile), and the intended use case. No critical information is missing given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema description coverage is 100%, so there is no parameter ambiguity for the agent. The baseline for zero parameters is 4. The description appropriately focuses on return value semantics rather than parameter details, which adds no value here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Returns account-level data for the organization that owns the API key.' It explicitly lists the contained fields (tax code, subscription, NAV Online Számla connection status) and explicitly distinguishes this from a company profile by stating what it does NOT contain. This makes the tool's purpose unambiguous and differentiates it from sibling tools like billingo_get_organization/profile-like tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'Use it to check the subscription or NAV connection status.' It also provides a clear when-not-to-use signal: 'This is NOT a company profile — it contains no name, id or address.' This effectively prevents an agent from invoking this tool for company profile lookups, even without naming alternative sibling tools explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_get_partnerGet partnerA
Read-onlyIdempotent

Returns a single partner by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPartner id.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the core safety profile is covered. The description adds only the cardinality ('a single') and the lookup mechanism, but it does not disclose not-found behavior, error handling, or response shape beyond what annotations and schema imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or redundant clauses. Every word earns its place for such a simple getter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one required parameter and read-only/idempotent annotations, the description is nearly complete. It lacks explicit not-found/error behavior and the exact shape of the returned partner object, but these are not critical for correctly selecting and invoking this simple getter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the id parameter is already described as 'Partner id.' The tool description simply says 'by id,' which adds no new semantic value beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('returns'), a clear resource ('a single partner'), and the lookup key ('by id'). This distinguishes it from plural/list siblings like billingo_list_partners and from other get_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when a specific partner id is already known, but it does not explicitly mention alternatives or when not to use it. The presence of billingo_list_partners as a sibling makes the lack of explicit routing guidance a minor gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_get_productGet productA
Read-onlyIdempotent

Returns a single product by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesProduct id.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the tool's safety profile is covered. The description adds the return cardinality ('a single product') but does not disclose behavior such as what happens when the id is not found. This is acceptable but not richly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word contributes to explaining what the tool does, making it highly scannable for an AI agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only, one-parameter getter, the description is nearly complete: it identifies the input (id) and the output (a single product), and annotations cover safety and idempotency. It does not mention not-found or error behavior, but that is a minor gap given the tool's low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter 'id' is already described as 'Product id.' The description merely restates the parameter usage ('by id') without adding new semantic detail, so it adds no value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Returns') with a clear resource ('product') and identifies the retrieval key ('by id'). The word 'single' distinguishes it from sibling tools like billingo_list_products, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the intended use case: retrieving one product when an id is known. It does not explicitly name alternatives such as billingo_list_products for bulk retrieval, but the singular 'by id' phrasing provides clear context and leaves little room for misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_get_product_quantityGet product stock quantityA
Read-onlyIdempotent

Returns the current inventory quantity for a product.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesProduct id.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering the safety profile. The description adds only that the returned quantity is 'current', which is mild behavioral context but does not disclose potential caveats such as data freshness, units, or whether the quantity represents available vs. physical stock. Since annotations carry most of the burden, a mid-range score is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or repetition. It conveys the action, the resource, and the returned information efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter getter with rich annotations, the description is nearly complete. It tells the agent what will be returned ('current inventory quantity'). However, since there is no output schema, a slightly more explicit statement about the return format could improve completeness, though it is not essential for such a trivial tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage with a clearly described 'id' parameter. The description does not add any parameter-level meaning beyond what the schema states, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Returns'), a specific resource ('inventory quantity'), and the target ('a product'). This clearly distinguishes it from siblings like billingo_get_product, which would return broader product details. The tool's name and title reinforce the purpose without adding confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance about when to use this tool versus alternatives such as billingo_get_product or billingo_list_products. There is no stated context, prerequisite, or condition that would help an agent choose it over similar product-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_get_spendingGet spendingA
Read-onlyIdempotent

Returns a single spending by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSpending id.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering the safety profile. The description adds only that it returns a single spending, which is consistent but does not disclose additional behavioral traits such as not-found behavior or response format. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler. It front-loads the core action and resource and avoids repeating the tool name or restating schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read tool with strong annotations and no output schema, this description is sufficient. An agent knows the input (id) and the expected result (a single spending) without needing additional detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the id parameter is documented as 'Spending id.' The description's 'by id' adds no new semantic meaning beyond the schema. Baseline 3 is appropriate because the schema fully explains the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Returns') and resource ('single spending') with an explicit lookup key ('by id'). It clearly differentiates from the sibling billingo_list_spendings, which returns multiple spendings, and aligns with the get-by-id pattern of sibling tools like billingo_get_partner.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a specific spending id is known and a single spending is needed, and it implicitly contrasts with billingo_list_spendings. However, it does not explicitly state when to prefer this tool over list_spendings or mention any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_list_bank_accountsList bank accountsA
Read-onlyIdempotent

Lists the bank accounts configured on the organization.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, starting at 1.
per_pageNoResults per page (1-100, default 25).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint, idempotentHint, and openWorldHint annotations already establish that this is a safe, read-only operation. The description adds the scoping detail that accounts are those 'configured on the organization,' but does not disclose additional behavioral traits such as pagination behavior or response characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no redundant wording, and the main verb and resource appear first. Every word contributes to the purpose without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward list operation with optional pagination parameters and read-only annotations, the description provides the essential resource and scope. It does not describe the response shape, but given the title and sibling get_bank_account, an agent can reasonably infer a list of bank account objects; a mention of pagination defaults could slightly improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, the input schema already documents page and per_page with descriptions and ranges. The description adds no parameter-specific meaning, so it meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Lists' with the resource 'bank accounts configured on the organization,' clearly conveying the operation's scope. It contrasts with sibling billingo_get_bank_account, which targets a single account, making the list-vs-get distinction apparent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates this tool is for enumerating the organization's configured bank accounts, which is clear context for choosing it over billingo_get_bank_account. However, it does not explicitly state when not to use it or mention alternatives, so the guidance is implicit rather than directive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_list_document_blocksList document blocksA
Read-onlyIdempotent

Lists document blocks (invoice number ranges). Every document belongs to a block; you need a block id to create an invoice.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, starting at 1.
per_pageNoResults per page (1-100, default 25).

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful domain context about blocks being required for invoice creation, but does not disclose pagination behavior, sort order, or response shape. This is acceptable given the annotations but adds only modest behavioral insight.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no wasted words. The main action is front-loaded, and the explanatory clause about why block IDs matter is directly relevant rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool, the description plus annotations and full schema coverage are largely sufficient. There is no output schema, so an explicit note about return fields would be slightly helpful, but the tool's purpose is clear enough that this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with page and per_page already documented in the schema. The description adds no extra parameter-level detail, so the baseline of 3 applies: the schema carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Lists document blocks') and further clarifies the domain concept as 'invoice number ranges.' It does not explicitly contrast with sibling list tools like billingo_list_documents, but the resource is distinct and clearly named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear use context: 'Every document belongs to a block; you need a block id to create an invoice.' This signals when the tool is needed, though it does not explicitly mention alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_list_documentsList documentsA
Read-onlyIdempotent

Lists documents (invoices, receipts, proformas, drafts and more), newest first. Filter by type, invoice date range, partner, payment status/method or document block.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, starting at 1.
typeNoRestrict to one document type. Only "invoice" or "receipt" are accepted here.
queryNoFree-text search.
block_idNoRestrict to one document block.
end_dateNoInclude documents invoiced on or before this date.
per_pageNoResults per page (1-100, default 25).
partner_idNoRestrict to one partner.
start_dateNoInclude documents invoiced on or after this date.
payment_methodNo
payment_statusNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate read-only, idempotent, open-world behavior. The description adds useful behavioral detail: results are newest first and the returned set includes more than the invoice/receipt type filter values. It does not detail pagination behavior, but the schema covers per_page limits and defaults.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with no filler. The first sentence front-loads the action, scope, and ordering; the second summarizes the filter dimensions. It earns its place without repeating the full schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no required parameters, rich schema descriptions, and safe annotations, the description is complete. An agent can select the tool and form valid filter-based requests without missing essential information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover most parameters, so the description's filter summary maps cleanly onto existing fields: type, start/end_date, partner_id, payment_status/method, and block_id. This grouping adds mild semantic value, but it does not introduce syntax or meanings beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Lists documents', and adds scope ('invoices, receipts, proformas, drafts and more') plus ordering ('newest first'). This clearly distinguishes it from single-document siblings like get_document or download_document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes a clear listing context and explains available filters, so an agent can infer it is for retrieving a filtered collection. However, it does not explicitly contrast with sibling tools or state when not to use it, stopping just short of full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_list_partnersList partnersA
Read-onlyIdempotent

Lists partners (customers), newest first. Supports paging and a free-text search over the partner name.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, starting at 1.
queryNoFree-text search over the partner name.
per_pageNoResults per page (1-100, default 25).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint), so the bar is lower. The description adds genuine behavioral context beyond the annotations: the default result ordering ('newest first') and the scope of the search ('over the partner name'). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler. The core purpose is front-loaded in the first sentence, and the second sentence adds the two supported features. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity read-only list tool with 100% parameter documentation and the safety profile carried by annotations, the description is largely sufficient. Minor gaps remain: the return shape and pagination metadata are not described (no output schema exists), and no explicit guidance distinguishes this from billingo_get_partner.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema independently documents page, query, and per_page with defaults. The description's mention of 'paging and a free-text search over the partner name' largely restates the schema's query description and adds no new parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Lists partners (customers), newest first.' The parenthetical clarifies the domain term, and the ordering detail adds precision. As a plural list operation it is readily distinguishable from the single-resource sibling billingo_get_partner and from list tools on other resources like billingo_list_products or billingo_list_documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through 'Lists partners' plus the paging and free-text search capabilities, but it never explicitly states when to choose this tool over alternatives. It does not route single-partner lookups to billingo_get_partner or mention any exclusions, so usage context is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_list_productsList productsA
Read-onlyIdempotent

Lists products and services from the product catalogue.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, starting at 1.
queryNoFree-text search over the product name.
per_pageNoResults per page (1-100, default 25).

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is well covered. The description adds only the catalogue scope ('products and services') and does not disclose additional behavioral details such as pagination behavior or result ordering, but it also does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It states the action and resource directly and wastes no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with fully documented optional parameters and strong annotations, the description is nearly complete. A short mention of the return shape or a pointer to the singular get_product sibling would make it fully self-contained, but nothing essential is missing for a basic call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, query, and per_page are already fully documented in the input schema. The description adds no parameter-level meaning beyond framing the tool as searching the product catalogue.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Lists') and the resource ('products and services from the product catalogue'). It conveys a broad listing operation, though it does not explicitly contrast itself with the sibling billingo_get_product beyond the plural 'Lists'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The listing purpose is clear, and the optional page/query/per_page parameters imply catalogue browsing. However, the description does not explicitly say when to prefer this over billingo_get_product or billingo_get_product_quantity, so usage guidance is mostly left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_list_spendingsList spendingsA
Read-onlyIdempotent

Lists recorded spendings (costs), optionally filtered by date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, starting at 1.
end_dateNoInclude spendings fulfilled on or before this date.
per_pageNoResults per page (1-100, default 25).
start_dateNoInclude spendings fulfilled on or after this date.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnlyHint, openWorldHint, idempotentHint), lowering the burden on the description. It adds the date-range filtering behavior and clarifies that 'spendings' means 'costs', but it does not mention pagination behavior, result ordering, or what happens when no filters are supplied. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler: the verb and resource come first, and the optional-filter qualifier follows as secondary context. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity list tool with rich annotations and fully self-documenting parameters, the definition is nearly complete. There is no output schema so the return shape is undocumented, and there is no explicit routing to billingo_get_spending for single-record lookups, which keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all four parameters (page, per_page, start_date, end_date) individually documented, so the baseline is 3. The description's date-range phrasing adds nothing beyond what start_date and end_date already specify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Lists') and resource ('recorded spendings (costs)'), and the qualifier 'optionally filtered by date range' adds useful scoping. It is clearly a bulk read operation, but it does not explicitly distinguish itself from the sibling billingo_get_spending, which would be required for a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'optionally filtered by date range' implies the main use case (bulk retrieval with optional date bounds), but there is no explicit statement of when to prefer this tool over billingo_get_spending or the other list siblings. Usage context is implied rather than directly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billingo_pos_printGet POS print dataA
Read-onlyIdempotent

Returns a printable PDF receipt for a document, sized for a POS thermal printer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDocument id.
sizeYesThermal paper width in millimeters: 58 or 80.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds the output format (PDF receipt) and POS sizing intent, which is useful, but it does not disclose additional behavioral details such as error handling, authorization requirements, or document availability behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It efficiently conveys the output type, the target use, and the format in one line.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only tool with full schema coverage, the description plus schema adequately cover what an agent needs: the document id, the size, and the PDF output. An explicit pointer to sibling document-retrieval tools would strengthen routing, but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully documents both parameters: id as 'Document id' and size as thermal paper width with 58/80 enumeration. The description adds no new parameter-level meaning beyond reinforcing the POS sizing context, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Returns') and clearly identifies the deliverable: a printable PDF receipt for a document, sized for a POS thermal printer. This distinguishes it from sibling document tools like billingo_download_document by its receipt-specific POS purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'sized for a POS thermal printer' gives a clear contextual signal for when this tool should be chosen over generic document download or public-URL tools. However, it does not explicitly name alternatives or state when not to use it, so it falls short of full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.6/5.0
Disambiguation4/5

Most tools map cleanly to a distinct resource and action, and the list/get pairs are easy to separate. The main ambiguity is between billingo_download_document and billingo_get_document_public_url, which both return a shareable public URL by default; billingo_pos_print also adds mild PDF-output overlap. Descriptions provide usage guidance, so the confusion is limited to a couple of tools.

Naming Consistency4/5

The billingo_ prefix and snake_case verb_noun pattern are used consistently across almost all tools. Minor deviations include billingo_pos_print, which inverts the verb/object order, and billingo_get_online_szamla_status using a Hungarian term, but the overall naming remains predictable.

Tool Count3/5

At 22 tools, the server is on the heavy side and requires grouping to navigate, though it covers a broad set of Billingo resources. Some tools overlap in output, such as download_document, get_document_public_url, and pos_print, suggesting a leaner set could be achieved without losing capability.

Completeness2/5

The set is strong for reading and exporting Billingo data: list/get for major entities plus PDF download, NAV status, payments, reminders, and export are all covered. However, there are no create/update/delete tools for partners, products, invoices, or spendings, and the descriptions reference creating invoices and partners without offering tools for those actions. This creates significant dead ends for common Billingo workflows.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An MCP server for the Billingo invoicing API (v3) that enables AI assistants like Claude to manage invoices, partners, products, expenses, and more through natural language.
    42
    12
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for the Billingo V3 Hungarian invoicing API. Manage invoices, partners, products, spendings, and bank accounts from any MCP client.
    10
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Model Context Protocol (MCP) server for SuperFaktura invoicing system. Enables AI assistants to interact with SuperFaktura API for managing invoices, clients, and expenses.
    Apache 2.0

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/octonull/billingo-mcp'

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