InvoiceBloom
Create, send and track invoices for freelancers and small businesses.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"invoicebloom": {
"url": "https://invoicebloom.io/mcp"
}
}
}Remote endpoints
https://invoicebloom.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (11)
🟢get_account
Returns 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.
Input Schema
{
"type": "object",
"properties": {},
"required": [],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_clients(query)
Lists 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.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Optional case-insensitive search across name, email and company name."
}
},
"required": [],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡create_client(name, email, company_name, address, phone, ...)
Creates 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.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Contact name, up to 100 characters."
},
"email": {
"type": "string",
"description": "Email address invoices will be sent to."
},
"company_name": {
"type": "string"
},
"address": {
"type": "string",
"description": "Postal address, printed on invoices."
},
"phone": {
"type": "string"
},
"notes": {
"type": "string",
"description": "Private notes, never shown to the client."
}
},
"required": [
"name",
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡update_client(client_id, name, email, company_name, address, ...)
Updates an existing client's details. Only the fields you pass are changed.
Input Schema
{
"type": "object",
"properties": {
"client_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"company_name": {
"type": "string"
},
"address": {
"type": "string"
},
"phone": {
"type": "string"
},
"notes": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"active",
"inactive"
]
}
},
"required": [
"client_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_invoices(status, client_id, overdue_only, limit)
Lists 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.
Input Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"draft",
"sent",
"paid"
]
},
"client_id": {
"type": "integer"
},
"overdue_only": {
"type": "boolean",
"description": "Only unpaid invoices whose due date has passed."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Defaults to 25."
}
},
"required": [],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_invoice(invoice_id)
Returns 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.
Input Schema
{
"type": "object",
"properties": {
"invoice_id": {
"type": "integer"
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡create_invoice(client_id, client_email, line_items, date, due_date, ...)
Creates 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.
Input Schema
{
"type": "object",
"properties": {
"client_id": {
"type": "integer",
"description": "ID from list_clients."
},
"client_email": {
"type": "string",
"description": "Alternative to client_id: email of an existing client."
},
"line_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "What was delivered, e.g. 'Logo design'."
},
"quantity": {
"type": "number",
"description": "Quantity, greater than 0."
},
"unit": {
"type": "string",
"description": "Unit label such as 'hours', 'days' or 'units'. Defaults to 'units'."
},
"rate": {
"type": "number",
"description": "Price per unit."
}
},
"required": [
"description",
"quantity",
"rate"
]
},
"minItems": 1,
"description": "At least one line item."
},
"date": {
"type": "string",
"description": "Invoice date, YYYY-MM-DD. Defaults to today."
},
"due_date": {
"type": "string",
"description": "Due date, YYYY-MM-DD. Defaults to 30 days from today."
},
"tax": {
"type": "number",
"description": "Tax as a percentage of the subtotal, e.g. 8.5. Omit for no tax."
},
"late_fee": {
"type": "number",
"description": "Flat late fee amount added to the total. Omit for none."
},
"theme": {
"type": "string",
"enum": [
"minimal",
"classic",
"modern",
"creative",
"freelancer",
"contractor",
"consultant"
],
"description": "Visual template. Defaults to 'minimal'."
},
"terms": {
"type": "string",
"description": "Payment terms text, e.g. 'Net 30'."
},
"payment_instructions": {
"type": "string",
"description": "How to pay (bank details etc.). Defaults to the user's saved instructions."
},
"business_name": {
"type": "string",
"description": "Override the sender name printed on this invoice."
},
"business_address": {
"type": "string",
"description": "Override the sender address printed on this invoice."
}
},
"required": [
"line_items"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡update_invoice(invoice_id, client_id, client_email, line_items, date, ...)
Updates 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.
Input Schema
{
"type": "object",
"properties": {
"invoice_id": {
"type": "integer"
},
"client_id": {
"type": "integer"
},
"client_email": {
"type": "string"
},
"line_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "What was delivered, e.g. 'Logo design'."
},
"quantity": {
"type": "number",
"description": "Quantity, greater than 0."
},
"unit": {
"type": "string",
"description": "Unit label such as 'hours', 'days' or 'units'. Defaults to 'units'."
},
"rate": {
"type": "number",
"description": "Price per unit."
}
},
"required": [
"description",
"quantity",
"rate"
]
},
"description": "Full replacement list of line items."
},
"date": {
"type": "string",
"description": "Invoice date, YYYY-MM-DD. Defaults to today."
},
"due_date": {
"type": "string",
"description": "Due date, YYYY-MM-DD. Defaults to 30 days from today."
},
"tax": {
"type": "number",
"description": "Tax as a percentage of the subtotal, e.g. 8.5. Omit for no tax."
},
"late_fee": {
"type": "number",
"description": "Flat late fee amount added to the total. Omit for none."
},
"theme": {
"type": "string",
"enum": [
"minimal",
"classic",
"modern",
"creative",
"freelancer",
"contractor",
"consultant"
],
"description": "Visual template. Defaults to 'minimal'."
},
"terms": {
"type": "string",
"description": "Payment terms text, e.g. 'Net 30'."
},
"payment_instructions": {
"type": "string",
"description": "How to pay (bank details etc.). Defaults to the user's saved instructions."
},
"business_name": {
"type": "string",
"description": "Override the sender name printed on this invoice."
},
"business_address": {
"type": "string",
"description": "Override the sender address printed on this invoice."
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡send_invoice(invoice_id)
Emails 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.
Input Schema
{
"type": "object",
"properties": {
"invoice_id": {
"type": "integer"
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}⚪mark_invoice_paid(invoice_id)
Marks an invoice as paid, for payments received outside InvoiceBloom (bank transfer, cash, cheque). Card payments through the payment link are recorded automatically.
Input Schema
{
"type": "object",
"properties": {
"invoice_id": {
"type": "integer"
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴delete_invoice(invoice_id)
Permanently 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.
Input Schema
{
"type": "object",
"properties": {
"invoice_id": {
"type": "integer"
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence