Skip to main content
Glama
szamlazz-mcp

szamlazz-mcp

by MrSakal

szamlazz-mcp

An MCP server that lets Claude (or any MCP client) work with your Számlázz.hu account: issued and received invoices with their payments and PDFs, partners, products, receipts, bank transactions and turnover reports, and issuing, reversing or e-mailing invoices and receipts.

It signs in with your own Számlázz.hu username and password; nothing else needs to be set up.

Tools

Tool

Kind

What it does

list_companies

read

Companies your login can work in, and which one is used by default

list_invoices

read

Issued, received or both invoices merged by date; filter by issue date, payment status (paid, unpaid, overdue), invoice number or partner; pages automatically up to a limit

get_invoice_data

read

One outgoing or incoming invoice: seller, buyer, items, totals, paid, outstanding; optionally its PDF

get_invoice_pdf

read

One invoice's PDF (for incoming invoices, rendered from the invoice data)

get_invoice_payments

read

Payments registered on an invoice: date, method, amount, who recorded it

get_invoice_activity

read

NAV Online Számla and accounting-system submissions, e-mails sent, payment reminders

turnover_report

read

Issued documents in a period (the Forgalom report): item rows, totals per currency and VAT rate

list_partners / get_partner

read

Partner records: name, address, e-mail; tax number and payment terms for one

list_products

read

Products and services: name, net unit price, unit, VAT rate

list_receipts

read

Issued receipts

get_receipt

read

One receipt's data, optionally its PDF

list_recurring_invoices

read

Recurring invoice schedules

list_drafts

read

Saved invoice drafts

get_company_info

read

Own company data, invoice defaults, number prefixes, payment methods, NAV connection state

list_bank_transactions

read

Bank transactions for up to 366 days with their matching state (unmatched, partly or fully settled, excluded) and unmatched amount; filter by state, e.g. what still needs matching

get_bank_transaction

read

One transaction's matching: the invoices it settled, how and by whom, and the amount left

create_invoice

write

Issue an invoice (normal, proforma, advance, final, correction)

reverse_invoice

write

Reverse (storno) an invoice

register_payment

write

Record payments on an invoice

delete_proforma

write

Delete a proforma invoice

create_receipt

write

Issue a receipt

reverse_receipt

write

Reverse a receipt

send_receipt

write

E-mail a receipt

Write tools are marked destructive, so MCP clients ask before running them. PDFs come back inside the tool answer as embedded application/pdf resources; the server never writes them to disk.

The invoice tools take a direction, matching the two Számlázz.hu invoice lists: outgoing (issued) or incoming (received). list_invoices also accepts both (its default) and merges the two by issue date. It fetches page after page by itself until limit (default 100, max 1000) is reached and says with moreAvailable whether anything was left out; dateFrom/dateTo narrow it to a period. The other invoice tools default to outgoing.

Every tool takes an optional company parameter: a company name (or part of it) or its Számlázz.hu id. Without it the login's current company is used.

Related MCP server: Invoice4U MCP

Requirements

  • Node.js 20 or newer

  • A Számlázz.hu user without two-factor authentication

  • For the write tools: a user that belongs to one company only (see How it works)

Install

git clone https://github.com/MrSakal/szamlazz-mcp.git
cd szamlazz-mcp
npm ci
npm run build

Configure

The server reads one file, ~/.szamlazz-mcp/config.json (Windows: C:\Users\<you>\.szamlazz-mcp\config.json). Copy the example and fill it in:

mkdir -p ~/.szamlazz-mcp && cp config.example.json ~/.szamlazz-mcp/config.json
{
  "username": "<SZAMLAZZ_EMAIL>",
  "password": "<SZAMLAZZ_PASSWORD>"
}

That is all: companies, names and ids are read from Számlázz.hu after sign-in.

Then register the server with your client.

Claude Code

claude mcp add szamlazz -- node /absolute/path/to/szamlazz-mcp/dist/index.js

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "szamlazz": {
      "command": "node",
      "args": ["/absolute/path/to/szamlazz-mcp/dist/index.js"]
    }
  }
}

Restart the client, then ask: "Which companies can my Számlázz.hu login reach?"

How it works

Read tools sign in to the Számlázz.hu web interface the way a browser does and call the same internal endpoints its pages use (/szamla/pcapi/...). Only a fixed list of read-only endpoints can be called (ALLOWED_PCAPI in src/web.ts); everything else is refused before a request is made. The session lives in memory only.

Bank matching comes from Számlázz.hu's older, server-rendered bank pages: the transaction list (its own search form, one matching state per request) and the details call behind each row. That call also matches, unmatches, excludes and deletes depending on an operation value; the server fixes it to 0 (show) in code and never adds invoice or payment ids to it. These pages work in the login's current company only.

Write tools use the documented Számla Agent API. Its XML schemas accept the Számlázz.hu username and password (felhasznalo, jelszo) for sign-in, so the same login works. A password-signed Agent call does not say which company it is for, so the write tools refuse to run when the login reaches more than one company, rather than risk issuing in the wrong one.

Network traffic goes to https://www.szamlazz.hu only. Nothing is collected or sent anywhere else.

Security and risks

  • The password sits in plain text in config.json and gives full access to the account. The file is created owner-only (0600); keep it out of backups and sync folders. .gitignore excludes it.

  • The password is sent only to https://www.szamlazz.hu, never logged and never returned by a tool.

  • The read endpoints are undocumented: Számlázz.hu can change them without notice, and the read tools will then fail until updated.

  • Automated use of the web interface may not be covered by the Számlázz.hu terms of service. Check them before relying on this.

  • The write tools have not been tested against a live account by the author. Try them on a test account first.

License

MIT

Available Tools

13 tools
create_invoiceB
Destructive

Issue a new invoice (normal, proforma, advance or correction invoice). The PDF comes attached to the answer.

NameRequiredDescriptionDefault
paidNoMark as paid
itemsYesInvoice items
commentNoComment printed on the invoice
companyNoCompany name (or part of it) or Számlázz.hu company id. Optional: defaults to the login's current company. list_companies lists the choices.
dueDateYesPayment due date (YYYY-MM-DD)
currencyNoCurrency (default: HUF)
eInvoiceNoE-invoice (default: true)
languageNoInvoice language: hu, en, de, it, ro, sk, hr, fr, es, cz, pl (default: hu)
proformaNoIssue a proforma invoice instead
buyerCityYesBuyer city
buyerNameYesBuyer name
emailTextNoText of the notification e-mail
issueDateYesIssue date (YYYY-MM-DD)
sendEmailNoE-mail the invoice notification to the buyer
buyerEmailNoBuyer e-mail
sellerBankNoSeller's bank
signerNameNoSigner's name
orderNumberNoOrder number
buyerAddressYesBuyer street address
emailSubjectNoSubject of the notification e-mail
exchangeRateNoExchange rate for foreign currency (0 = current MNB rate)
finalInvoiceNoFinal invoice
replyToEmailNoReply-to address of the notification e-mail
paymentMethodYesPayment method (bank transfer, cash, card, ...), as printed on the invoice, in the invoice's language
advanceInvoiceNoAdvance invoice
buyerTaxNumberNoBuyer tax number
buyerTaxStatusNoBuyer tax status: 7 = business outside the EU, 6 = EU business, 1 = Hungarian taxpayer, 0 = unknown, -1 = no tax number
buyerPostalCodeYesBuyer postal code
fulfillmentDateYesFulfillment date (YYYY-MM-DD)
exchangeRateBankNoBank of the exchange rate for foreign currency (e.g. 'MNB')
correctionInvoiceNoCorrection invoice
sellerBankAccountNoSeller's bank account number
invoiceNumberPrefixNoInvoice number prefix
correctedInvoiceNumberNoNumber of the invoice being corrected

TDQS

B3.3/5.0
Behavior3/5

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

The description adds one genuinely useful behavioral fact beyond the annotations: the generated PDF is returned attached to the response, which explains the return channel given there is no output schema. However, for a destructive, non-idempotent, open-world write that produces a legally binding document, it says nothing about permanence (issuance cannot be undone; only reversal exists) or required authentication.

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, zero filler, with the core action front-loaded and the return artifact disclosed immediately after. Nothing could be removed without losing information.

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

Completeness3/5

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

The rich schema compensates for most of the tool's complexity and the description covers the return artifact, but for a 34-parameter, multi-variant invoice-issuance tool it omits which variant path to take and what constraints apply (currency/exchange-rate coupling, required item totals, correction dependencies).

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 all 34 parameters are self-documenting and the baseline is 3. The description's enumeration of invoice types gives indirect meaning to the proforma/advanceInvoice/correctionInvoice booleans but adds no format, default, or dependency detail beyond the schema.

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?

States a specific verb and resource ('Issue a new invoice') and enumerates the four invoice variants it covers (normal, proforma, advance, correction), which maps directly onto the proforma/advanceInvoice/correctionInvoice flags. It does not differentiate against siblings such as create_receipt or reverse_invoice, which is the one remaining ambiguity.

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?

There is no explicit when-to-use guidance: nothing says to prefer create_receipt for receipts, or to use reverse_invoice rather than issuing a correction invoice, and no prerequisites are given (e.g. that a correction needs an existing invoice number). Only the implied 'use this to issue invoices' is conveyed.

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

create_receiptC
Destructive

Issue a new receipt with items and an optional payment breakdown.

NameRequiredDescriptionDefault
itemsYesReceipt items
callIdNoCall id (prevents duplicates)
prefixYesReceipt number prefix (required, e.g. 'NYGTA-2024-')
commentNoComment
companyNoCompany name (or part of it) or Számlázz.hu company id. Optional: defaults to the login's current company. list_companies lists the choices.
currencyNoCurrency (default: HUF)
paymentsNoPayment breakdown (optional)
includePdfNoInclude the PDF in the answer (default: false)
pdfTemplateNoPDF template id
exchangeRateNoExchange rate
buyerLedgerIdNoBuyer's general ledger id
paymentMethodYesPayment method (cash, card, ...), as printed, in the receipt's language
exchangeRateBankNoBank of the exchange rate (non-HUF)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the description's job is to add context like irreversibility, finalization/legal issuance, or numbering side effects. It adds none of that: it does not say the receipt is finalized on issue, whether it can be voided (a sibling reverse_receipt exists), or that callId is the only duplicate guard. With rich annotations supplied, this is a real gap rather than a contradiction.

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

Conciseness4/5

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

A single front-loaded sentence with no filler, and the required content (items) plus optional element (payment breakdown) are stated in order of importance. It is efficient, though its brevity is achieved by omitting behavior rather than by tight editing.

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

Completeness3/5

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

For a 13-parameter, legally meaningful creation tool with nested item arrays and no output schema, the description says nothing about what is returned or what happens on success. The schema covers all fields, so an agent can technically call it, but the definition is thin relative to the operation's weight and irreversibility.

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 every parameter including the 13 top-level ones and nested item fields is already documented. The description only restates that items are required and payments optional, adding no format, default, or constraint detail beyond the schema. Baseline 3 applies when the schema carries the semantics.

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 ("Issue") and resource ("new receipt") and names the payload shape (items plus optional payment breakdown). An agent can tell it creates a receipt rather than an invoice. It never names a sibling such as create_invoice or send_receipt to sharpen the boundary, 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?

There is no when-to-use or when-not-to-use guidance, no mention of prerequisites (company selection, prefix numbering), and no routing to alternatives like create_invoice or send_receipt. The sentence is purely descriptive of what gets sent, leaving the agent to infer the context in which issuing a receipt is appropriate.

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

delete_proformaB
Destructive

Delete a proforma invoice by invoice number or order number.

NameRequiredDescriptionDefault
companyNoCompany name (or part of it) or Számlázz.hu company id. Optional: defaults to the login's current company. list_companies lists the choices.
orderNumberNoOrder number (alternative; may delete several proformas)
invoiceNumberNoProforma invoice number

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, openWorldHint=true, idempotentHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: it does not state that deletion is permanent and irreversible, that deleting by orderNumber may remove multiple proformas in one call, or what happens if the record is already gone, which is notable since idempotentHint=false implies repeat calls may error.

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 no filler; the action and the two targeting methods come first and nothing redundant is included.

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 three-parameter mutation with full schema coverage and an annotation set that already flags destructiveness, the definition is close to sufficient. It falls short only on irreversibility and the multi-delete consequence of orderNumber, which an agent about to run a destructive call would want stated explicitly.

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 all three parameters (company, orderNumber, invoiceNumber) are already documented in the schema. The description echoes the two keying options but adds no format, precedence, or ambiguity-resolution rules beyond what the schema states, so baseline 3 applies.

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 verb and resource ('Delete a proforma invoice') and adds the two selection keys, so an agent can tell what it removes and how it is targeted. It does not distinguish the tool from the neighbouring reverse_invoice sibling, leaving the proforma-vs-finalized-invoice distinction to be inferred.

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 when-to-use guidance, no prerequisites, and no exclusions; it never says whether to prefer invoiceNumber or orderNumber, nor points to reverse_invoice as the alternative for non-proforma invoices. The only hint is the parenthetical 'alternative' on orderNumber, which lives in the schema, not the description.

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

get_invoice_dataB
Read-onlyIdempotent

Data of an outgoing invoice by invoice number: seller, buyer, items, totals, amount paid and outstanding. Optionally the PDF too.

NameRequiredDescriptionDefault
companyNoCompany name (or part of it) or Számlázz.hu company id. Optional: defaults to the login's current company. list_companies lists the choices.
includePdfNoInclude the PDF in the answer (default: false)
invoiceNumberYesInvoice number (e.g. 'E-2024-123')

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds useful context that the response contains the actual invoice content and can optionally carry the PDF, but says nothing about failure behavior for a missing invoice or about the size/latency cost of includePdf.

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

Conciseness4/5

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

Two short sentences, front-loaded with the resource and the identifying key, with no filler. The trailing PDF clause mildly duplicates what the schema's includePdf already states, but costs only a few words.

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

Completeness3/5

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

For a simple read tool with full schema coverage, no output schema and complete annotations, the description is mostly sufficient. The notable gap is that the existence of the sibling get_invoice_pdf makes the description's optional-PDF behavior ambiguous: it never tells the agent which of the two to use for retrieving a PDF.

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%: company, includePdf and invoiceNumber are each documented with defaults and an example in the schema. The description's "Optionally the PDF too" merely restates the includePdf parameter and adds no new semantics or format detail.

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 resource and lookup key ("outgoing invoice by invoice number") and enumerates the returned content (seller, buyer, items, totals, amount paid, outstanding), so an agent knows exactly what it fetches. It does not, however, distinguish itself from the sibling get_invoice_pdf or list_invoices.

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 only implied: "by invoice number" plus "Optionally the PDF too" suggests single-invoice retrieval with optional attachment. There is no explicit when-to-use guidance, no mention of when to prefer get_invoice_pdf or list_invoices, and no statement of what happens with an invalid or unknown number.

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

get_invoice_pdfA
Read-onlyIdempotent

PDF of an existing outgoing invoice by invoice number. The PDF comes attached to the answer; nothing is saved to disk.

NameRequiredDescriptionDefault
companyNoCompany name (or part of it) or Számlázz.hu company id. Optional: defaults to the login's current company. list_companies lists the choices.
invoiceNumberYesInvoice number (e.g. 'E-2024-123')

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the bar is lower. The description still adds real value beyond them: it discloses that the PDF is returned as an attachment on the answer and that nothing is written to disk, which is exactly the delivery detail an agent needs and no annotation conveys.

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, zero filler, and the identification of the resource and its key comes first, followed by the delivery mechanic. Nothing could be removed without losing information.

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 two-parameter read tool with full schema coverage, the definition covers the essentials, and since there is no output schema, the note that the PDF arrives attached to the answer usefully fills the return-value gap. Only the routing versus get_invoice_data/list_invoices is left unstated.

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 both parameters are already documented in the schema, including the company default and the list_companies pointer. The description only echoes that lookup is by invoice number, adding no syntax or format detail beyond the schema example. Baseline 3 applies.

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?

States a specific resource and lookup key: 'PDF of an existing outgoing invoice by invoice number.' An agent can distinguish it from get_invoice_data (structured data) and list_invoices (enumeration) by the 'PDF' output, though the description never explicitly contrasts them.

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?

'existing outgoing invoice' implies scope (not drafts or proforma) and the required invoice number implies lookup-by-identifier, but the description never states when to prefer this over get_invoice_data or how to obtain a valid invoice number via list_invoices. Usage is inferable rather than explicit.

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

get_receiptB
Read-onlyIdempotent

Data and PDF of a receipt by receipt number.

NameRequiredDescriptionDefault
companyNoCompany name (or part of it) or Számlázz.hu company id. Optional: defaults to the login's current company. list_companies lists the choices.
includePdfNoInclude the PDF in the answer (default: false)
receiptNumberYesReceipt number

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description only adds that the response includes receipt data and optionally a PDF, without noting permission requirements, error/not-found behavior, or that PDF inclusion is opt-in.

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

Conciseness4/5

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

A single compact sentence with the key lookup mechanism front-loaded and no filler. It is arguably over-terse for a tool that returns two distinct payloads, but nothing is wasted.

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

Completeness3/5

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

With annotations and full schema coverage the call mechanics are clear, but there is no output schema, so the description is the only place to describe the returned data shape (and it merely says 'Data and PDF'). For a retrieval tool with two return modes, that leaves a meaningful 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%, so all three parameters (company, includePdf, receiptNumber) are already documented in the schema, including the company default and list_companies reference. The description adds only the receipt-number lookup framing, so baseline 3 applies.

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?

States a specific verb (get) and resource (receipt) plus the lookup key (receipt number), and 'Data and PDF' signals it returns both structured data and a document. It does not, however, distinguish itself from siblings such as get_invoice_data/get_invoice_pdf or clarify its relationship to create_receipt/send_receipt.

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?

There is no guidance on when to use this versus list_invoices/other siblings, no prerequisites, and no statement about what happens if the receipt number is unknown. Usage must be inferred entirely from the name.

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

list_bank_transactionsA
Read-onlyIdempotent

Bank transactions for a period (id, reference, value date, amount, partner, direction). Read from the Számlázz.hu web interface. No matching status included.

NameRequiredDescriptionDefault
limitNoMax rows returned (default 200)
dateToYesLast value date (YYYY-MM-DD), at most 366 days after dateFrom
searchNoText filter on reference, partner name and id, case-insensitive
companyNoCompany name (or part of it) or Számlázz.hu company id. Optional: defaults to the login's current company. list_companies lists the choices.
dateFromYesFirst value date (YYYY-MM-DD)
directionNoOnly incoming or only outgoing transactions
bankAccountIdNoSzámlázz.hu internal bank account id (optional; default: all)

TDQS

A4/5.0
Behavior4/5

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

Beyond the read-only and idempotent annotations, it discloses the external web-interface source and the absence of matching status, both operationally useful details. Listing returned fields also sets expectations, though it adds nothing about freshness, ordering, or truncation 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?

Three compact statements front-load the resource and date scope, then cover the source and a material limitation. The field list is useful because there is no output schema, and there is no 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?

Together with the fully documented schema and safety annotations, this is enough to select the tool and construct a valid date-bounded request, while the field list partly compensates for the missing output schema. It remains short on ordering or truncation behavior and gives no route for users who need matching status.

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 baseline is 3. “For a period” loosely reinforces dateFrom and dateTo, but the description adds no parameter syntax, defaults, filtering interactions, or constraints beyond the schema.

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 identifies a period-based read of bank transactions from Számlázz.hu and enumerates the principal returned fields. “Bank transactions” distinguishes the resource from the invoice and receipt siblings, although it does not explicitly contrast with any particular sibling.

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 period scope provides concrete selection context, and “No matching status included” supplies a useful exclusion for status-aware workflows. It does not say which alternative to use when matching status is required or provide other explicit when-to-use guidance.

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

list_companiesA
Read-onlyIdempotent

The companies the configured Számlázz.hu login can work in (read from Számlázz.hu), and which one the tools use when no company is given. Switch per call: pass the company name or id in the other tools' company parameter.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real context beyond that: the data is fetched live from Számlázz.hu, and there is a default-company fallback used by other tools when the company parameter is omitted. That fallback semantic is the kind of behavior annotations cannot express.

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

Conciseness4/5

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

Two compact sentences with no filler, and the core scoping information leads. The second sentence mixes the switching instruction into the same breath, which is efficient but slightly dense; nothing is wasted though.

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 zero-parameter read tool with no output schema, the description does most of the work by explaining what the result represents: the accessible companies plus the one used by default. It stops short of describing the shape of each entry (name vs. id fields), which is the only meaningful gap given no output schema exists.

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 takes zero parameters, so the schema carries nothing to explain, and the baseline is 4. The description still adds value by pointing at the company parameter that exists on the sibling tools and explaining how a value from here feeds into it.

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 the resource (the companies the configured Számlázz.hu login can work in) and its scope (read from Számlázz.hu), plus the key fact that it reveals the default company used when none is given. It does not use an explicit verb like 'list', and it never names a sibling tool, but the resource is specific enough to separate it from the invoice-oriented siblings.

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?

It gives actionable guidance for switching companies ('pass the company name or id in the other tools' company parameter'), which is genuinely useful. However it never states when an agent should call this tool — e.g., to discover company ids before create_invoice — so the trigger for invoking it is only implied.

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

list_invoicesA
Read-onlyIdempotent

Outgoing invoices (newest first), searchable by invoice number or buyer name, paged. Per row: invoice number, dates, buyer, totals, paid, outstanding.

NameRequiredDescriptionDefault
pageNoPage index from 0 (default: 0)
searchNoText to search for (invoice number or buyer name, per searchBy)
companyNoCompany name (or part of it) or Számlázz.hu company id. Optional: defaults to the login's current company. list_companies lists the choices.
pageSizeNoInvoices per page (default: 50)
searchByNoWhat to search (default: invoiceNumber)
oldestFirstNotrue: oldest first; default: newest first (by issue date)

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish that this is a safe, read-only, idempotent list operation. The description adds useful behavioral context beyond those annotations by stating the default ordering (newest first), the searchable dimensions (invoice number or buyer name), pagination, and the shape of each returned row.

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 dense sentence with no wasted wording. Ordering, searchability, pagination, and returned fields are front-loaded and 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 read-only list tool with full schema coverage and no output schema, the description gives an adequate picture of returned rows and pagination behavior. It could be slightly more complete about edge cases or total counts, but an agent has enough information to call it 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?

Schema description coverage is 100%, so defaults, enum values, and constraints are already documented in the input schema. The description reinforces the search and ordering semantics but adds little parameter meaning that is not already present in the schema.

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-plus-resource framing: it lists outgoing invoices, describes default order, searchability, pagination, and row contents. It clearly separates this from retrieval/mutation siblings such as get_invoice_data and create_invoice, although it does not name any sibling explicitly.

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 by the description's focus on searching and paging outgoing invoices, but there is no explicit when-to-use guidance or when-not-to-use condition compared with get_invoice_data or list_bank_transactions. An agent can infer the browsing/search use case, but must decide alternatives on its own.

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

register_paymentB
Destructive

Register payments on an invoice. At most 5 payment entries per invoice.

NameRequiredDescriptionDefault
companyNoCompany name (or part of it) or Számlázz.hu company id. Optional: defaults to the login's current company. list_companies lists the choices.
additiveNotrue (default): earlier payments are kept; false: ALL are replaced
paymentsYesPayment entries (max 5 per invoice)
invoiceNumberYesInvoice number

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is known. The description adds one useful hard constraint (at most 5 entries per invoice) but omits the most consequential behavior: that with additive=false ALL existing payments are replaced, which is the actual destructive path. It also says nothing about permissions, error conditions, or whether the invoice state changes.

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

Conciseness4/5

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

Two short sentences with the purpose front-loaded and no filler. The second sentence duplicates the schema's maxItems=5 constraint, so it is mildly redundant, but it is short enough not to harm readability.

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

Completeness2/5

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

For a destructive, non-idempotent mutation with no output schema, the description should warn about the additive=false replacement path and indicate what the call returns or changes. It covers the entry-count cap but leaves the agent without the information needed to avoid accidentally wiping existing payments.

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 every parameter (company, additive, payments, invoiceNumber, plus nested date/method/amount) is already documented in the schema, including the additive replacement semantics. The description's only parameter-adjacent content is the max-5 limit, which merely restates the schema's maxItems constraint. Baseline 3 applies.

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 ("Register payments on an invoice"), which is clearly distinct from siblings like create_invoice, reverse_invoice, or create_receipt. It stops short of naming a sibling or stating how it differs from related write operations, so it is clear but not fully differentiated.

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 only implied by the purpose statement: an agent can infer this is the tool for recording payment against an existing invoice. There is no explicit when-to-use, no mention of prerequisites (does the invoice need to exist in a specific state?), and no guidance on choosing between this and receipt-related tools.

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

reverse_invoiceB
Destructive

Reverse an invoice: issues the reversing invoice for the original.

NameRequiredDescriptionDefault
companyNoCompany name (or part of it) or Számlázz.hu company id. Optional: defaults to the login's current company. list_companies lists the choices.
eInvoiceNoE-invoice (default: true)
issueDateYesIssue date of the reversing invoice (YYYY-MM-DD)
invoiceNumberYesNumber of the invoice to reverse
fulfillmentDateYesFulfillment date of the reversing invoice (YYYY-MM-DD)

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare destructive=true, idempotent=false and openWorld=true. The description contributes the important non-obvious trait that reversal is a counter-document issuance rather than an in-place mutation, but it does not disclose that repeated calls likely produce multiple reversing invoices, whether the original is voided, or any NAV/e-invoice submission side effects.

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

Conciseness4/5

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

A single short sentence, front-loaded with the verb and resource, with no filler wording. It is arguably too terse for a destructive financial tool, but nothing in it is wasted.

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

Completeness2/5

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

This is a destructive, non-idempotent financial operation with no output schema, and the description says nothing about what is returned (e.g. the new reversing invoice number), failure modes such as an already-reversed invoice, or required permissions. The one sentence is not sufficient context for an agent to invoke it confidently.

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 all five parameters are already documented, including the crucial nuance that issueDate and fulfillmentDate refer to the reversing invoice, not the original. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.

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 and resource ('Reverse an invoice') and clarifies the mechanism ('issues the reversing invoice for the original'), distinguishing it from a delete operation. It does not explicitly contrast with siblings such as reverse_receipt or delete_proforma, but the verb+resource pair is unambiguous.

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?

There is no guidance on when to use this rather than delete_proforma, reverse_receipt, or creating a corrective invoice, and no stated preconditions (e.g. original invoice must exist and not already be reversed). The implied use case is inferable from the name alone, so this is close to no guidance.

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

reverse_receiptC
Destructive

Reverse a receipt by receipt number.

NameRequiredDescriptionDefault
companyNoCompany name (or part of it) or Számlázz.hu company id. Optional: defaults to the login's current company. list_companies lists the choices.
includePdfNoInclude the PDF in the answer (default: false)
receiptNumberYesNumber of the receipt to reverse

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, readOnlyHint=false, and openWorldHint=true, so the safety profile is known. The description adds nothing beyond them — it never says whether a reversal creates a storno document, whether it is irrevocable, or what side effects (stock, numbering, e-invoice reporting) occur, which is exactly the context a mutation tool needs.

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

Conciseness3/5

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

The single sentence is front-loaded and free of waste, but for a destructive financial operation it is under-specified rather than concise. Appropriate sizing would require at least one more clause about consequences or confirmation behavior.

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

Completeness2/5

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

This is a destructive, non-idempotent, open-world mutation with no output schema, so the description carries real weight for outcome and side-effect disclosure. It provides none of that, leaving the agent unable to predict what reversing actually produces or how failures surface.

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 receiptNumber, company (with its default-to-current-company note), and includePdf are all documented in the schema. The phrase "by receipt number" merely echoes the required parameter, so the baseline 3 applies.

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 verb plus resource ("Reverse a receipt") and identifies the key ("by receipt number"), which clearly separates it from read siblings like get_receipt and from reverse_invoice. It stops short of explicitly differentiating reverse from alternatives such as delete_proforma or creating a correcting receipt.

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?

There is no when-to-use guidance, no prerequisites (e.g., receipt must be non-reversed or within a permitted window), and no statement of what to do instead if the goal is a correction rather than a reversal. The agent must infer everything about applicability from the single sentence.

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

send_receiptA
Destructive

E-mail a receipt to the given address.

NameRequiredDescriptionDefault
emailYesRecipient e-mail address
companyNoCompany name (or part of it) or Számlázz.hu company id. Optional: defaults to the login's current company. list_companies lists the choices.
receiptNumberYesNumber of the receipt to send

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already disclose a non-read-only, open-world, non-idempotent operation. The description adds the concrete external side effect of sending an e-mail, but does not clarify duplicate sends on retry, queued versus completed delivery, failure behavior, or whether the receipt itself is modified.

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 single sentence is direct, front-loaded, and contains no filler or redundancy. Its operational omissions are assessed in the other dimensions rather than being a problem with wording or structure.

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

Completeness3/5

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

Three flat, fully documented parameters and the supplied annotations make the definition minimally sufficient for selection and invocation. However, with no output schema, the description would benefit from indicating the result or delivery status, and the non-idempotent external action warrants clearer resend and failure semantics.

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%, including the company default and the pointer to list_companies, so the baseline score applies. The phrase 'given address' merely restates the email parameter's role and adds no semantics beyond the schema.

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 specifies the action ('E-mail'), resource ('a receipt'), and destination ('the given address'), making the basic operation clear and practically distinct from create_receipt and reverse_receipt. It does not explicitly state that the receipt must already exist or provide any sibling comparison.

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 wording implies using the tool to deliver an existing receipt to a recipient, but gives no explicit prerequisites, exclusions, or alternatives. For example, it does not explain when company selection is necessary or whether this should follow create_receipt.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv1.0.0
    • First observedcreate_invoice
    • First observedcreate_receipt
    • First observeddelete_proforma
    • First observedget_invoice_data
    • First observedget_invoice_pdf
    • First observedget_receipt
    • First observedlist_bank_transactions
    • First observedlist_companies
    • First observedlist_invoices
    • First observedregister_payment
    • First observedreverse_invoice
    • First observedreverse_receipt
    • First observedsend_receipt

TDQS

A3.5/5.0

Scored across 13 tools

Disambiguation4/5

Most tools target distinct resources and actions, and descriptions clearly separate listing, data retrieval, creation, reversal, payment, and sending. The main overlap is between get_invoice_data and get_invoice_pdf, since get_invoice_data can optionally include the PDF, and get_receipt bundles data plus PDF unlike the split invoice tools.

Naming Consistency5/5

All names use predictable snake_case with a leading verb such as list_, get_, create_, reverse_, register_, delete_, or send_. The minor subtype naming in delete_proforma and get_invoice_pdf still follows the same overall verb_noun convention.

Tool Count5/5

The 13 tools are well scoped for an invoicing and receipt service, with each tool covering a meaningful operation. The set is neither thin nor bloated.

Completeness3/5

Core invoice and receipt workflows are covered, including creation, retrieval, reversal, payment registration, and receipt sending. However, there is no list_receipts or receipt search, making it hard to discover receipt numbers, and there is no send_invoice equivalent to send_receipt, creating notable gaps in the receipt and invoice lifecycle.

Related MCP Connectors

Related MCP Servers

  • 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.
    5 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP-compatible agents to securely access an Invoice4U account for searching documents and customers and creating receipts linked to paid invoices, with read-only behavior by default.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables reading reports and accounting data, searching transactions, inspecting accounts, categories, payees, and rules, and optionally authorizing undoable bookkeeping changes through MCP.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP clients to authenticate against an internal accounting web API, list companies, categories, bank transactions and documents, upload or batch-deposit receipts (idempotent, dry-run by default), set accounting metadata, and link documents to their matching bank transactions.
    1
    MIT