Skip to main content
All Billy tools are read-only and are called via tools/call over POST /billy/mcp. The connector is connected with an access token (Billy’s permanent, organization-scoped token, no OAuth). See Forbind Billy.
Endpoint: https://mcp.consile.ai/billy/mcp. Billy is its own named connector with only its own tools. The transport namespaces each tool as billy__<tool> (e.g. billy__get_invoice). The tables below use the bare tool names; in a tools/call request always send the namespaced name, as in the examples. A bare name returns Unknown tool.
This connector is read-only: it only reads from Billy and has no tool that creates, changes or deletes anything. All 17 tools are listed with readOnlyHint: true, destructiveHint: false and openWorldHint: false.
Besides the 17 Billy tools, tools/list on this endpoint also returns the system tool connect_account (no arguments). It returns { connect_url, instructions }: a link, valid for 10 minutes, that the user opens in a browser to connect, or replace, the Billy access token for this endpoint.

Shared conventions

No organizationId

Billy’s access token is organization-scoped: one token maps to exactly one Billy company, so no tool takes an organizationId. The token itself scopes every request. get_organization is the health-check that tells you which company the connected token belongs to. A customer with several Billy companies adds one portal per company in the Consile portal and connects each with that company’s own token. Portal N (N ≥ 2) is its own MCP connector at https://mcp.consile.ai/billy-N/mcp (for example billy-2), with tools namespaced billy-2__<tool>. Add each URL to your MCP client separately. After a portal is removed, another portal’s URL and tool prefix can change (for example from billy-3 to billy-2). Check the portal URLs in the Consile portal and update your client.

Pagination

List tools return a compact { items, pagination } envelope. total is the filtered total, and hasMore is true while page is below pageCount.
integer
default:"1"
1-based page number.
integer
default:"50"
Rows per page. Default is 50 on every list tool except list_currencies (default 200). The maximum is 1000.

Amounts, ids and dates

Billy amounts are floats in major units: 1200 means 1200.00 DKK. Never divide by 100. On invoices, bills and lines the taxMode field (incl/excl) governs whether the amount already includes VAT. Interpret VAT via list_tax_rates.
string
All Billy ids (invoiceId, billId, contactId, accountId, daybookId, transactionId, …) are opaque strings, never integers.
string (YYYY-MM-DD)
Date-only, no time or zone. minEntryDate/maxEntryDate are inclusive bounds on the invoice and bill lists.

Embedded children

get_invoice embeds its lines + customer contact and returns a downloadUrl (the invoice PDF link). get_bill embeds its lines + supplier contact. list_transactions, get_transaction embed the balanced postings. These get-one tools are already self-contained, so no follow-up call is needed.

Error contract

Upstream failures come back as a normal tool result with isError: true. Billy’s status code and error body are not passed to the client. Invalid arguments (for example a date not in YYYY-MM-DD, or pageSize above 1000) also return isError: true with Tool invocation failed., so validate arguments before calling. Other isError texts on this endpoint:
  • You are not subscribed to billy… when the account has no Billy subscription.
  • billy is not connected yet. Connect it here: <url> when the account subscribes but no token is connected.
  • A seat message when the signed-in user has no seat on Billy (an administrator assigns seats under Team in the portal).
  • Unknown tool. for a tool name that is not on this endpoint, including an unprefixed name or another connector’s tool.
See Errors & limits.

Organization & reference


Sales: invoices (accounts receivable)

Invoice state is draft or approved; approved is a finalised invoice (a one-way door in Billy).

Purchases: bills (accounts payable)


Contacts

Billy keeps one contact register for both customers and suppliers. The isCustomer/isSupplier flags split them; registrationNo carries the CVR.

Finance / general ledger


Code examples

Call get_organization after connecting to check the connection. If Billy rejects the token (for example a wrong token, or one deleted in Billy), the call returns Billy rejected the access token; reconnect required. See Errors & limits.