Skip to content

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.

Deletes · 10Changes · 3

23 tools: 10 can delete or cancel things, 3 change things and 10 only read.

Scanned Oct 21, 2026

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/mcp

Findings

Matches of fixed checks, with the text they matched.

3 warn
  • The server marks "smartbill_list_clients" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true}; The name "smartbill_list_clients" says "list": a word for reading.

    What this check looks for
  • The server marks "smartbill_list_suppliers" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true}; The name "smartbill_list_suppliers" says "list": a word for reading.

    What this check looks for
  • The server marks "smartbill_list_products" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true}; The name "smartbill_list_products" says "list": a word for reading.

    What this check looks for

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".

      Matched text

      annotations: {"readOnlyHint":true}; The name "smartbill_list_clients" says "list": a word for reading.

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true}; The name "smartbill_list_products" says "list": a word for reading.

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true}; The name "smartbill_list_suppliers" says "list": a word for reading.

      What this check looks for
    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/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__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.