tools/call over
POST /dinero/mcp. The connector is connected through OAuth (Visma Connect; see
Forbind Dinero). You need an active Dinero subscription,
and your user must hold a seat on it (assigned under Team in the portal, see
Team).
Endpoint:
https://mcp.consile.ai/dinero/mcp. Dinero is its own named connector
with only its own tools. Tool names are namespaced dinero__<tool> in
Claude/ChatGPT; the bare names are used here for readability. A bare name in a
request returns Unknown tool..The connector is multi-instance: an additional portal (a second Visma login)
is served at its own endpoint, e.g. https://mcp.consile.ai/dinero-2/mcp, with
tools named dinero-2__<tool>. Portals are added in the portal by an
administrator.tools/list on this endpoint
returns the 52 dinero__* tools plus the unprefixed system tool connect_account
(no arguments; returns { connect_url, instructions }, a link valid for 10 minutes
for connecting the Dinero account in the browser). Without a subscription only
connect_account is listed. A user without a seat still sees the tools, but every
call is refused. Every Dinero tool is annotated readOnlyHint: true,
destructiveHint: false, openWorldHint: false.
Shared conventions
organizationId
Dinero auth is user-based, so almost every tool requires anorganizationId.
Get the integer id (and the isPro flag) from list_organizations; there is no
single “selected organization” stored.
integer
required
The Dinero organization id from
list_organizations. Required on every
org-scoped tool (noted per tool below where it is the only argument).Pagination
Paged list tools come in three shapes:- Collection-backed tools (
list_contacts,list_contact_notes,list_invoices,list_invoices_overdue,list_sales,list_credit_notes,list_trade_offers,list_products) return an envelope. list_chart_of_accounts,list_entriesandlist_entry_changesslice a bare array into a flat page.list_filesreturns{ count, hasMore, files[] }, wherehasMoreistruewhenever the page is full.
{ count, <items>[] }.
list_trade_offers filters by status, the response also carries
matchedOnPage and statusFilteredClientSide: true, and pagination still
describes the unfiltered page.
integer
default:"0"
0-based page index.
integer
default:"20"
Rows per page. Defaults to
20 on the collection-backed lists (invoices,
contacts, sales, credit notes, trade offers, products, files) and to 100 on
the accounting lists (list_chart_of_accounts, list_entries,
list_entry_changes). The maximum is 1000; a larger value is rejected.Filters & dates
string
UTC timestamp in exactly the form
YYYY-MM-DDTHH:mm:ssZ (e.g.
2026-09-01T00:00:00Z; no milliseconds, no offset). Returns only rows created,
updated or deleted at or after this time. Accepted by list_contacts,
list_invoices, list_sales, list_credit_notes, list_trade_offers,
list_products, list_invoice_mailouts, list_invoice_reminders,
list_credit_note_mailouts and list_trade_offer_mailouts.YYYY-MM-DD. The exception is from/to on
the two state-of-account tools, which are passed to Dinero as given (use
YYYY-MM-DD there too). All *Guid arguments except fileGuid must be UUIDs.
Values of the structured filter arguments (
name, email, phone,
vatNumber, eanNumber, externalReference, descriptionContains,
contactNameContains, currency, productNumber) cannot contain a single
quote ('): Dinero’s filter syntax wraps the value in single quotes with no
escape, so Consile refuses the call before it reaches Dinero (the client sees
Tool invocation failed.). freeTextSearch and the search argument of
list_products are not affected. startDate/endDate (on list_invoices,
list_sales, list_credit_notes) must be passed as a pair; the from/to
bounds on the state-of-account tools are independent optionals.Read-via-POST calculators
Two tools (calculate_invoice_totals, preview_invoice_reminder) issue a POST to
a Dinero …/fetch endpoint. They are read-only: they compute a result for a
prospective input and persist nothing upstream.
PDFs and files
All PDF and file downloads return the file as base64 and are capped at 6 MB; a larger file fails the call. A chat client cannot turn the base64 into a file for the user, so these tools are meant for agents that can decode and save the data.Organizations & reference
Bookkeeping & accounting
The four report tools are Dinero’s only balance source. They take no date range: balances are whole-year totals keyed by the accounting-yearname (from
list_accounting_years). They share the same arguments.
string
required
Accounting-year
name as Dinero returns it (e.g. "2025"), from
list_accounting_years.boolean
default:"false"
boolean
default:"false"
integer
integer
Contacts
Dinero keeps one merged customer/supplier register. The debtor/creditor split is only onget_contact, never on the list.
Invoices & reminders
Sales: credit notes & trade offers
Purchases, products & files
Dinero has no list endpoint for purchase vouchers, purchase credit notes or manual vouchers: they are fetched by guid. Discover guids vialist_entries
(with a voucherType filter), get_purchase_vouchers_by_file, or known references.
All PDF and file downloads are capped at 6 MB.
Code examples
Errors
A failed Dinero call returns a normaltools/call result with isError: true and
the fixed text Tool invocation failed.. The upstream reason is not passed to the
client. Common causes:
- The grant was revoked at Visma or could not be refreshed. Call
connect_accountfor a fresh connect link, or open the connector in the portal, click Disconnect connector (Afbryd connector in the Danish UI) and connect it again. That button applies only to the first portal; for an extra portal, callconnect_accounton that portal’s endpoint (for example/dinero-2/mcp). The portal keeps showing the connector as connected until you do. - The organization is not on Dinero Pro, or the connected Visma user cannot reach
that
organizationId. - Dinero’s rate limit of about 100 requests per minute per organization. A
429is retried once after about 2.5 seconds, then the call fails. - An invalid argument: a wrong date or
changesSinceformat,startDatewithoutendDate, a single quote in a filter value, apageSizeabove 1000, or a scalar where an array is expected (status,extensions). - A file over 6 MB, or a call that exceeds the 15-second upstream timeout.
4xx responses from Dinero are never retried. To narrow a failure down: if
validate_connection also fails, reconnect; if it succeeds, check
organizationId and isPro in list_organizations.
Platform refusals return their own explanatory text instead: no Dinero
subscription (with a purchase link), account not connected yet (with a connect
link), or no seat for your user (an administrator assigns one under Team). See
Errors & limits.