InvoiceBloom
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Create, send and track invoices for freelancers and small businesses.
| Author | io.github.theasteve |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2497 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"InvoiceBloom": {
"url": "https://invoicebloom.io/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (11)
get_accountread-onlyReturns the signed-in user's profile: business name, address, saved payment instructions, whether their email is confirmed (required before sending invoices), whether they can take card payments, and client/invoice counts. Call this first to know who you are acting for.
Hints: read-only yes · destructive no · idempotent no · open-world no
list_clientsread-onlyLists the user's clients (people or companies they invoice), optionally filtered by a search term matched against name, email and company. Use it to find a client_id before creating an invoice.
Parameters:
query— string — Optional case-insensitive search across name, email and company name.
Hints: read-only yes · destructive no · idempotent no · open-world no
create_clientCreates a new client to invoice. Name and email are required; the email is where invoices are sent. Check list_clients first so you do not create duplicates.
Parameters:
name(required) — string — Contact name, up to 100 characters.email(required) — string — Email address invoices will be sent to.notes— string — Private notes, never shown to the client.phone— stringaddress— string — Postal address, printed on invoices.company_name— string
Hints: read-only no · destructive no · idempotent no · open-world no
update_clientUpdates an existing client's details. Only the fields you pass are changed.
Parameters:
client_id(required) — integername— stringemail— stringnotes— stringphone— stringstatus— stringaddress— stringcompany_name— string
Hints: read-only no · destructive no · idempotent yes · open-world no
list_invoicesread-onlyLists the user's invoices, newest first, without line items. Filter by status (draft, sent, paid), by client, or overdue_only for unpaid invoices past their due date (there is no 'overdue' status; use overdue_only). Use get_invoice for full detail.
Parameters:
limit— integer — Defaults to 25.status— stringclient_id— integeroverdue_only— boolean — Only unpaid invoices whose due date has passed.
Hints: read-only yes · destructive no · idempotent no · open-world no
get_invoiceread-onlyReturns one invoice with its line items, totals, status, the client it is for, a public_url the client can open, and a payment link if one exists.
Parameters:
invoice_id(required) — integer
Hints: read-only yes · destructive no · idempotent no · open-world no
create_invoiceCreates a draft invoice with line items for an existing client. Identify the client by client_id or client_email (must already exist; use create_client otherwise). Totals are computed server-side: subtotal + tax% + late_fee. Nothing is emailed until you call send_invoice. Returns the invoice, including its invoice_number and public_url.
Parameters:
line_items(required) — array — At least one line item.tax— number — Tax as a percentage of the subtotal, e.g. 8.5. Omit for no tax.date— string — Invoice date, YYYY-MM-DD. Defaults to today.terms— string — Payment terms text, e.g. 'Net 30'.theme— string — Visual template. Defaults to 'minimal'.due_date— string — Due date, YYYY-MM-DD. Defaults to 30 days from today.late_fee— number — Flat late fee amount added to the total. Omit for none.client_id— integer — ID from list_clients.client_email— string — Alternative to client_id: email of an existing client.business_name— string — Override the sender name printed on this invoice.business_address— string — Override the sender address printed on this invoice.payment_instructions— string — How to pay (bank details etc.). Defaults to the user's saved instructions.
Hints: read-only no · destructive no · idempotent no · open-world no
update_invoiceUpdates an invoice. Only fields you pass change. If you pass line_items, they REPLACE the existing line items entirely, so include every item that should remain. Works on draft and sent invoices; re-send with send_invoice if the client needs the new version.
Parameters:
invoice_id(required) — integertax— number — Tax as a percentage of the subtotal, e.g. 8.5. Omit for no tax.date— string — Invoice date, YYYY-MM-DD. Defaults to today.terms— string — Payment terms text, e.g. 'Net 30'.theme— string — Visual template. Defaults to 'minimal'.due_date— string — Due date, YYYY-MM-DD. Defaults to 30 days from today.late_fee— number — Flat late fee amount added to the total. Omit for none.client_id— integerline_items— array — Full replacement list of line items.client_email— stringbusiness_name— string — Override the sender name printed on this invoice.business_address— string — Override the sender address printed on this invoice.payment_instructions— string — How to pay (bank details etc.). Defaults to the user's saved instructions.
Hints: read-only no · destructive no · idempotent yes · open-world no
send_invoiceEmails the invoice (with a PDF attached) to the client's email address and marks it as sent. This contacts a real person: confirm with the user before calling. Requires at least one line item and a confirmed user email. If the user takes card payments, a Stripe payment link is added first.
Parameters:
invoice_id(required) — integer
Hints: read-only no · destructive no · idempotent no · open-world yes
mark_invoice_paidMarks an invoice as paid, for payments received outside InvoiceBloom (bank transfer, cash, cheque). Card payments through the payment link are recorded automatically.
Parameters:
invoice_id(required) — integer
Hints: read-only no · destructive no · idempotent yes · open-world no
delete_invoicedestructivePermanently deletes an invoice and its line items. Cannot be undone. Confirm with the user before calling; prefer leaving paid invoices in place for their records.
Parameters:
invoice_id(required) — integer
Hints: read-only no · destructive yes · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.