Skip to content

Billy MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.3.3 · published by io.usefulapi

Read Billy invoices, bills, contacts, products and postings; create contacts and draft invoices.

Deletes · 2

15 tools: 2 can delete or cancel things and 13 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http billy https://billy.usefulapi.io/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

15 tools

Deletes or cancels 2Claude Code: deny
  • billy_create_contactWRITE: create ONE new contact (customer and/or supplier) in the company's Billy account.No findings

    Why it is in this group

    • The name "billy_create_contact" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: create ONE new contact (customer and/or supplier) in the company's Billy account. It does not check for duplicates (call billy_list_contacts first) and nothing is sent to the contact. Not idempotent: a repeat call creates a second contact. POST /contacts.

    Annotations the server declares

    • title: Create a contact
    • destructiveHint: true
  • billy_create_draft_invoiceWRITE: create ONE invoice in the DRAFT state for an existing contact.No findings

    Why it is in this group

    • The name "billy_create_draft_invoice" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: create ONE invoice in the DRAFT state for an existing contact. The invoice is NOT approved, booked, numbered into the ledger or sent: the user reviews it in Billy and approves and sends it there. The invoice number is assigned by Billy. No payment is created. Not idempotent: a repeat call creates a second draft. POST /invoices with state=draft.

    Annotations the server declares

    • title: Create a draft invoice
    • destructiveHint: true
Only reads 13Claude Code: allow
  • billy_get_billOne supplier bill by id with its lines.No findings

    Why it is in this group

    • The name "billy_get_bill" says "get": a word for reading.
    Description, as the server wrote it
    One supplier bill by id with its lines. GET /bills/{id}.

    Annotations the server declares

    • title: Get a bill
    • readOnlyHint: true
  • billy_get_contactOne contact by id, with its contact persons (names and e-mail addresses).No findings

    Why it is in this group

    • The name "billy_get_contact" says "get": a word for reading.
    Description, as the server wrote it
    One contact by id, with its contact persons (names and e-mail addresses). GET /contacts/{id}.

    Annotations the server declares

    • title: Get a contact
    • readOnlyHint: true
  • billy_get_invoiceOne invoice by id with its lines (product, description, quantity, unit price, amount, tax) and its payment associations.No findings

    Why it is in this group

    • The name "billy_get_invoice" says "get": a word for reading.
    Description, as the server wrote it
    One invoice by id with its lines (product, description, quantity, unit price, amount, tax) and its payment associations. GET /invoices/{id}.

    Annotations the server declares

    • title: Get an invoice
    • readOnlyHint: true
  • billy_get_organizationThe Billy company the access token belongs to: id, name, address, registration (CVR) number, base currency, VAT settings, fiscal year, default payment terms, invoice numbering, def…No findings

    Why it is in this group

    • The name "billy_get_organization" says "get": a word for reading.
    Description, as the server wrote it
    The Billy company the access token belongs to: id, name, address, registration (CVR) number, base currency, VAT settings, fiscal year, default payment terms, invoice numbering, default accounts. Good first call. GET /organization.

    Annotations the server declares

    • title: Get the company
    • readOnlyHint: true
  • billy_get_productOne product by id with its unit prices per currency.No findings

    Why it is in this group

    • The name "billy_get_product" says "get": a word for reading.
    Description, as the server wrote it
    One product by id with its unit prices per currency. GET /products/{id}.

    Annotations the server declares

    • title: Get a product
    • readOnlyHint: true
  • billy_list_accountsThe chart of accounts: account number, name, group, nature, VAT rate, bank-account flag and bank details (IBAN, bank name) of bank accounts.No findings

    Why it is in this group

    • The name "billy_list_accounts" says "list": a word for reading.
    Description, as the server wrote it
    The chart of accounts: account number, name, group, nature, VAT rate, bank-account flag and bank details (IBAN, bank name) of bank accounts. With is_bank_account=true this lists the bank accounts whose ids billy_list_bank_lines needs. Paged. GET /accounts.

    Annotations the server declares

    • title: List accounts (chart of accounts)
    • readOnlyHint: true
  • billy_list_bank_linesList the bank-statement lines of ONE bank account (read only; nothing is matched or reconciled): date, description, amount, side (debit/credit), reconciled flag, receipt state.No findings

    Why it is in this group

    • The name "billy_list_bank_lines" says "list": a word for reading.
    Description, as the server wrote it
    List the bank-statement lines of ONE bank account (read only; nothing is matched or reconciled): date, description, amount, side (debit/credit), reconciled flag, receipt state. Get the account id from billy_list_accounts with is_bank_account=true. Paged. GET /bankLines.

    Annotations the server declares

    • title: List bank lines
    • readOnlyHint: true
  • billy_list_billsList bills (purchase invoices from suppliers): supplier, dates, state (draft/approved/voided), amount, balance, isPaid, supplier invoice number.No findings

    Why it is in this group

    • The name "billy_list_bills" says "list": a word for reading.
    Description, as the server wrote it
    List bills (purchase invoices from suppliers): supplier, dates, state (draft/approved/voided), amount, balance, isPaid, supplier invoice number. Filter by state, supplier, dates or paid status. Paged. GET /bills.

    Annotations the server declares

    • title: List bills (supplier invoices)
    • readOnlyHint: true
  • billy_list_contactsList customers and suppliers: name, type, address, CVR/registration number, EAN, payment terms, customer/supplier flags.No findings

    Why it is in this group

    • The name "billy_list_contacts" says "list": a word for reading.
    Description, as the server wrote it
    List customers and suppliers: name, type, address, CVR/registration number, EAN, payment terms, customer/supplier flags. The API has no documented search filter, so `search` is applied to the returned page only (case-insensitive on name, contact number and registration number); page on with next_page to look further. Paged. GET /contacts.

    Annotations the server declares

    • title: List contacts
    • readOnlyHint: true
  • billy_list_invoicesList sales invoices and credit notes (newest first by default): number, date, due date, state (draft/approved/voided), amount, tax, balance, isPaid, contactId, currency.No findings

    Why it is in this group

    • The name "billy_list_invoices" says "list": a word for reading.
    Description, as the server wrote it
    List sales invoices and credit notes (newest first by default): number, date, due date, state (draft/approved/voided), amount, tax, balance, isPaid, contactId, currency. Filter by state, customer, number, date, period, paid status or free text. Paged. GET /invoices.

    Annotations the server declares

    • title: List invoices
    • readOnlyHint: true
  • billy_list_postingsList ledger postings (the bookkeeping entries): date, text, account, amount, side (debit/credit), currency, voided flag.No findings

    Why it is in this group

    • The name "billy_list_postings" says "list": a word for reading.
    Description, as the server wrote it
    List ledger postings (the bookkeeping entries): date, text, account, amount, side (debit/credit), currency, voided flag. Filter by account, date or period. Read only. Paged. GET /postings.

    Annotations the server declares

    • title: List ledger postings
    • readOnlyHint: true
  • billy_list_productsList products and services usable as invoice lines: name, product number, description, sales account, archived flag.No findings

    Why it is in this group

    • The name "billy_list_products" says "list": a word for reading.
    Description, as the server wrote it
    List products and services usable as invoice lines: name, product number, description, sales account, archived flag. The API has no documented search filter, so `search` is applied to the returned page only (name, productNo). Paged. GET /products.

    Annotations the server declares

    • title: List products
    • readOnlyHint: true
  • billy_list_tax_ratesThe company's VAT rates: name, rate (as a fraction, 0.25 = 25 percent), whether it applies to sales or purchases, active flag.No findings

    Why it is in this group

    • The name "billy_list_tax_rates" says "list": a word for reading.
    Description, as the server wrote it
    The company's VAT rates: name, rate (as a fraction, 0.25 = 25 percent), whether it applies to sales or purchases, active flag. Paged. GET /taxRates.

    Annotations the server declares

    • title: List tax (VAT) rates
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.3.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http billy https://billy.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__billy__billy_get_organization",
      "mcp__billy__billy_list_contacts",
      "mcp__billy__billy_get_contact",
      "mcp__billy__billy_list_invoices",
      "mcp__billy__billy_get_invoice",
      "mcp__billy__billy_list_bills",
      "mcp__billy__billy_get_bill",
      "mcp__billy__billy_list_products",
      "mcp__billy__billy_get_product",
      "mcp__billy__billy_list_accounts",
      "mcp__billy__billy_list_tax_rates",
      "mcp__billy__billy_list_bank_lines",
      "mcp__billy__billy_list_postings"
    ],
    "ask": [],
    "deny": [
      "mcp__billy__billy_create_contact",
      "mcp__billy__billy_create_draft_invoice"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as billy. Review it before you use it.