SmartBill MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.3.3 · published by io.usefulapi
Read SmartBill series, taxes, stock, clients and products; draft and issue invoices and estimates.
23 tools: 10 can delete or cancel things, 3 change things and 10 only read.
Scanned Oct 21, 2026
- Deletes or cancels10Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things3Claude Code: ask: see these tools
- Only reads10Claude Code: allow: see these tools
3 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http smartbill https://smartbill.usefulapi.io/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "smartbill_list_clients" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "smartbill_list_clients" says "list": a word for reading.
The server marks "smartbill_list_suppliers" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "smartbill_list_suppliers" says "list": a word for reading.
The server marks "smartbill_list_products" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "smartbill_list_products" says "list": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
23 tools
Deletes or cancels 10Claude Code: deny
smartbill_cancel_estimateCancel an existing proforma (smartbill_restore_estimate undoes it).No findings
Why it is in this group
- The name "smartbill_cancel_estimate" says "cancel": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Cancel an existing proforma (smartbill_restore_estimate undoes it). PUT /estimate/cancel.
Annotations the server declares
- title: Cancel a proforma
- destructiveHint: true
smartbill_cancel_invoiceCancel an existing invoice (it stays in the books as cancelled; smartbill_restore_invoice undoes it).No findings
Why it is in this group
- The name "smartbill_cancel_invoice" says "cancel": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Cancel an existing invoice (it stays in the books as cancelled; smartbill_restore_invoice undoes it). Changes the document's fiscal status, so confirm with the user. PUT /invoice/cancel.
Annotations the server declares
- title: Cancel an invoice
- destructiveHint: true
smartbill_create_estimateCreate a proforma (estimate) for a client with product/service lines.No findings
Why it is in this group
- The name "smartbill_create_estimate" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Create a proforma (estimate) for a client with product/service lines. Default is a DRAFT (no number); with draft=false it takes the next number of the proforma series. A proforma is not a fiscal invoice. Returns series, number, documentId and links. POST /estimate/v2.
Annotations the server declares
- title: Create a proforma
- destructiveHint: true
smartbill_create_invoiceCreate an invoice for a client with product/service lines.No findings
Why it is in this group
- The name "smartbill_create_invoice" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Create an invoice for a client with product/service lines. By default it is saved as a DRAFT (no number) for review in SmartBill Cloud. With draft=false the invoice is ISSUED: it takes the next number of the series, cannot be deleted or edited through this server, can only be cancelled or reversed (storno), and, depending on the account's e-Factura setup, may be transmitted to ANAF. Confirm every field with the user before draft=false. Returns series, number, documentId, documentUrl (needs login) and documentViewUrl (public PDF link). POST /invoice/v2.
Annotations the server declares
- title: Create an invoice
- destructiveHint: true
smartbill_create_invoice_from_estimateCreate an invoice from an existing proforma (client and lines are copied from it).No findings
Why it is in this group
- The name "smartbill_create_invoice_from_estimate" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Create an invoice from an existing proforma (client and lines are copied from it). Default is a DRAFT; with draft=false the invoice is ISSUED with the next number of the series and may be transmitted to e-Factura / ANAF. Stock is not discharged. POST /invoice/v2 (useEstimateDetails).
Annotations the server declares
- title: Create an invoice from a proforma
- destructiveHint: true
smartbill_record_invoice_paymentRecord a collection (incasare) against one or more issued invoices; client and amount are taken from the invoices.No findings
Why it is in this group
- The name "smartbill_record_invoice_payment" says "payment": a word that usually means money moves, which cannot be taken back.
- The description says "cannot be undone".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Record a collection (incasare) against one or more issued invoices; client and amount are taken from the invoices. With value (single invoice only) a partial payment is recorded. type Chitanta issues a numbered RECEIPT on receipt_series (cannot be undone from this server); the other types (Card, Ordin plata, ...) record the payment without a document. It changes the invoice's paid status in the books: confirm with the user. Fiscal receipts (Bon) are not supported. POST /payment.
Annotations the server declares
- title: Record a payment against invoices
- destructiveHint: true
smartbill_restore_estimateRestore a proforma that was cancelled.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Restore a proforma that was cancelled. PUT /estimate/restore.
Annotations the server declares
- title: Restore a cancelled proforma
- destructiveHint: true
smartbill_restore_invoiceRestore an invoice that was cancelled, making it active again.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Restore an invoice that was cancelled, making it active again. PUT /invoice/restore.
Annotations the server declares
- title: Restore a cancelled invoice
- destructiveHint: true
smartbill_reverse_invoiceISSUE a storno (credit) invoice that reverses an issued invoice.No findings
Why it is in this group
- The description says "cannot be undone".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it ISSUE a storno (credit) invoice that reverses an issued invoice. It takes the next number, an invoice can be reversed only once, and the storno cannot be undone; it may be transmitted to e-Factura / ANAF. Confirm the exact series and number with the user first. POST /invoice/reverse.
Annotations the server declares
- title: Reverse an invoice (storno)
- destructiveHint: true
smartbill_send_documentSend an issued invoice or proforma by email from SmartBill.No findings
Why it is in this group
- The name "smartbill_send_document" says "send": a word for sending, and what is sent cannot be taken back.
- The input addresses people (input.to): what it sends cannot be taken back.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Send an issued invoice or proforma by email from SmartBill. This EMAILS A THIRD PARTY and cannot be recalled. Without `to` it goes to the client's email on the document; without subject/body_text the account's email template is used. Confirm the recipient with the user first. POST /document/send.
Annotations the server declares
- title: Email an invoice or proforma
- destructiveHint: true
Changes things 3Claude Code: ask
smartbill_list_clientsList clients from the SmartBill client list, optionally filtered by name (partial, case-insensitive), internal code (exact) or CIF (exact).1 finding
Why it is in this group
- The name "smartbill_list_clients" says "list": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "smartbill_list_clients" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "smartbill_list_clients" says "list": a word for reading.
Description, as the server wrote it List clients from the SmartBill client list, optionally filtered by name (partial, case-insensitive), internal code (exact) or CIF (exact). Needs the API V3 token. Cursor paged: pass the reply's next_args as the next call's arguments. GET /v3/companies/{cif}/clients.
Annotations the server declares
- title: List or search clients
- readOnlyHint: true
smartbill_list_productsList the product and service catalog (price, unit, VAT rate, currency), optionally filtered by name (whole-word match) or internal code (exact).1 finding
Why it is in this group
- The name "smartbill_list_products" says "list": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "smartbill_list_products" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "smartbill_list_products" says "list": a word for reading.
Description, as the server wrote it List the product and service catalog (price, unit, VAT rate, currency), optionally filtered by name (whole-word match) or internal code (exact). Needs the API V3 token. Cursor paged: pass the reply's next_args as the next call's arguments. GET /v3/companies/{cif}/products.
Annotations the server declares
- title: List or search products and services
- readOnlyHint: true
smartbill_list_suppliersList suppliers, optionally filtered by name (partial), internal code (exact) or CIF (exact).1 finding
Why it is in this group
- The name "smartbill_list_suppliers" says "list": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "smartbill_list_suppliers" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "smartbill_list_suppliers" says "list": a word for reading.
Description, as the server wrote it List suppliers, optionally filtered by name (partial), internal code (exact) or CIF (exact). Needs the API V3 token. Cursor paged: pass the reply's next_args as the next call's arguments. GET /v3/companies/{cif}/suppliers.
Annotations the server declares
- title: List or search suppliers
- readOnlyHint: true
Only reads 10Claude Code: allow
smartbill_get_clientOne client by V3 id (cus_...): name, CIF, address, bank, contact, VAT-payer flag and delivery addresses.No findings
Why it is in this group
- The name "smartbill_get_client" says "get": a word for reading.
Description, as the server wrote it One client by V3 id (cus_...): name, CIF, address, bank, contact, VAT-payer flag and delivery addresses. Needs the API V3 token. GET /v3/companies/{cif}/clients/{id}.
Annotations the server declares
- title: Get a client
- readOnlyHint: true
smartbill_get_estimate_invoicesWhether a proforma was invoiced and the invoices (series, number) made from it.No findings
Why it is in this group
- The name "smartbill_get_estimate_invoices" says "get": a word for reading.
Description, as the server wrote it Whether a proforma was invoiced and the invoices (series, number) made from it. A draft invoice shows with an empty number. GET /estimate/invoices.
Annotations the server declares
- title: Get invoices of a proforma
- readOnlyHint: true
smartbill_get_invoice_payment_statusWhether an invoice is paid and how much remains: invoiceTotalAmount, paidAmount, unpaidAmount and the paid flag.No findings
Why it is in this group
- The name "smartbill_get_invoice_payment_status" says "get": a word for reading.
Description, as the server wrote it Whether an invoice is paid and how much remains: invoiceTotalAmount, paidAmount, unpaidAmount and the paid flag. GET /invoice/paymentstatus.
Annotations the server declares
- title: Get invoice payment status
- readOnlyHint: true
smartbill_get_productOne product or service by V3 id (prod_...).No findings
Why it is in this group
- The name "smartbill_get_product" says "get": a word for reading.
Description, as the server wrote it One product or service by V3 id (prod_...). Needs the API V3 token. GET /v3/companies/{cif}/products/{id}.
Annotations the server declares
- title: Get a product or service
- readOnlyHint: true
smartbill_get_stockStock quantities per warehouse as of a date (needs the SmartBill stock module).No findings
Why it is in this group
- The name "smartbill_get_stock" says "get": a word for reading.
Description, as the server wrote it Stock quantities per warehouse as of a date (needs the SmartBill stock module). Optional filters: warehouse_name (case-sensitive), product_name, product_code. No filters = all products in all warehouses. GET /stocks.
Annotations the server declares
- title: Get stock levels
- readOnlyHint: true
smartbill_get_supplierOne supplier by V3 id (sup_...).No findings
Why it is in this group
- The name "smartbill_get_supplier" says "get": a word for reading.
Description, as the server wrote it One supplier by V3 id (sup_...). Needs the API V3 token. GET /v3/companies/{cif}/suppliers/{id}.
Annotations the server declares
- title: Get a supplier
- readOnlyHint: true
smartbill_list_seriesList the document series configured in SmartBill Cloud with their next number.No findings
Why it is in this group
- The name "smartbill_list_series" says "list": a word for reading.
Description, as the server wrote it List the document series configured in SmartBill Cloud with their next number. Invoice and proforma tools need a series name from here. type: f = invoice series, p = proforma, c = receipt (chitanta); omit for all. GET /series.
Annotations the server declares
- title: List document series
- readOnlyHint: true
smartbill_list_taxesList the VAT rates configured in the account (name and percentage).No findings
Why it is in this group
- The name "smartbill_list_taxes" says "list": a word for reading.
Description, as the server wrote it List the VAT rates configured in the account (name and percentage). Use the name as tax_name and the percentage as tax_percentage on document lines. Works without a V3 token. GET /tax.
Annotations the server declares
- title: List VAT rates (V1)
- readOnlyHint: true
smartbill_list_vat_ratesList VAT rates with ids, name, percentage and reverse-charge flag.No findings
Why it is in this group
- The name "smartbill_list_vat_rates" says "list": a word for reading.
Description, as the server wrote it List VAT rates with ids, name, percentage and reverse-charge flag. Filter by name (partial) or percentage (exact). Needs the API V3 token (smartbill_list_taxes does the same without it). Cursor paged: pass the reply's next_args as the next call's arguments. GET /v3/companies/{cif}/vat-rates.
Annotations the server declares
- title: List VAT rates (V3)
- readOnlyHint: true
smartbill_list_warehousesList warehouses (name, type en gros / en detail, keeper, address).No findings
Why it is in this group
- The name "smartbill_list_warehouses" says "list": a word for reading.
Description, as the server wrote it List warehouses (name, type en gros / en detail, keeper, address). Needs the API V3 token. Cursor paged: pass the reply's next_args as the next call's arguments. GET /v3/companies/{cif}/warehouses.
Annotations the server declares
- title: List warehouses
- 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 smartbill https://smartbill.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__smartbill__smartbill_list_series",
"mcp__smartbill__smartbill_list_taxes",
"mcp__smartbill__smartbill_get_stock",
"mcp__smartbill__smartbill_get_invoice_payment_status",
"mcp__smartbill__smartbill_get_estimate_invoices",
"mcp__smartbill__smartbill_get_client",
"mcp__smartbill__smartbill_get_supplier",
"mcp__smartbill__smartbill_get_product",
"mcp__smartbill__smartbill_list_warehouses",
"mcp__smartbill__smartbill_list_vat_rates"
],
"ask": [
"mcp__smartbill__smartbill_list_clients",
"mcp__smartbill__smartbill_list_suppliers",
"mcp__smartbill__smartbill_list_products"
],
"deny": [
"mcp__smartbill__smartbill_create_invoice",
"mcp__smartbill__smartbill_create_invoice_from_estimate",
"mcp__smartbill__smartbill_create_estimate",
"mcp__smartbill__smartbill_reverse_invoice",
"mcp__smartbill__smartbill_cancel_invoice",
"mcp__smartbill__smartbill_restore_invoice",
"mcp__smartbill__smartbill_cancel_estimate",
"mcp__smartbill__smartbill_restore_estimate",
"mcp__smartbill__smartbill_record_invoice_payment",
"mcp__smartbill__smartbill_send_document"
]
}
}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 smartbill. Review it before you use it.