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.
15 tools: 2 can delete or cancel things and 13 only read.
Scanned Oct 21, 2026
- Deletes or cancels2Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things0Claude Code: ask
- Only reads13Claude Code: allow: see these tools
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/mcpTools
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/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .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.