Skip to content

Invoice Ninja MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi

Manage Invoice Ninja clients, invoices, quotes, expenses, tasks and projects.

Deletes · 11

24 tools: 11 can delete or cancel things and 13 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http invoice-ninja https://invoice-ninja.usefulapi.io/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

24 tools

Deletes or cancels 11Claude Code: deny
  • invoiceninja_convert_quote_to_invoiceConvert a quote into a new invoice (the quote is marked converted and links to it).No findings

    Why it is in this group

    • The name "invoiceninja_convert_quote_to_invoice" says "convert": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Convert a quote into a new invoice (the quote is marked converted and links to it). Returns the new invoice. Invoice Ninja: GET /api/v1/quotes/{id}/convert_to_invoice.

    Annotations the server declares

    • title: Convert a quote to an invoice
    • destructiveHint: true
  • invoiceninja_create_clientCreate a client, optionally with contacts.No findings

    Why it is in this group

    • The name "invoiceninja_create_client" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a client, optionally with contacts. Give at least a name or one contact. Invoice Ninja: POST /api/v1/clients.

    Annotations the server declares

    • title: Create a client
    • destructiveHint: true
  • invoiceninja_create_expenseLog an expense, optionally tied to a vendor, client or project and flagged to be re-invoiced.No findings

    Why it is in this group

    • The name "invoiceninja_create_expense" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Log an expense, optionally tied to a vendor, client or project and flagged to be re-invoiced. Invoice Ninja: POST /api/v1/expenses.

    Annotations the server declares

    • title: Create an expense
    • destructiveHint: true
  • invoiceninja_create_invoiceCreate a DRAFT invoice for a client.No findings

    Why it is in this group

    • The name "invoiceninja_create_invoice" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a DRAFT invoice for a client. It is not sent or emailed — use invoiceninja_mark_invoice_sent or invoiceninja_email_invoice afterwards. Invoice Ninja: POST /api/v1/invoices.

    Annotations the server declares

    • title: Create an invoice
    • destructiveHint: true
  • invoiceninja_create_projectCreate a project for a client, with an optional hourly task rate, budget and due date.No findings

    Why it is in this group

    • The name "invoiceninja_create_project" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a project for a client, with an optional hourly task rate, budget and due date. Invoice Ninja: POST /api/v1/projects.

    Annotations the server declares

    • title: Create a project
    • destructiveHint: true
  • invoiceninja_create_quoteCreate a DRAFT quote (estimate) for a client.No findings

    Why it is in this group

    • The name "invoiceninja_create_quote" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a DRAFT quote (estimate) for a client. Nothing is emailed. Invoice Ninja: POST /api/v1/quotes.

    Annotations the server declares

    • title: Create a quote
    • destructiveHint: true
  • invoiceninja_create_taskCreate a task, optionally with logged time entries, for a client or project.No findings

    Why it is in this group

    • The name "invoiceninja_create_task" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a task, optionally with logged time entries, for a client or project. Invoice Ninja: POST /api/v1/tasks.

    Annotations the server declares

    • title: Create a task / log time
    • destructiveHint: true
  • invoiceninja_email_invoiceOUTWARD-FACING: sends a real email with the invoice to the client's invited contacts, and marks the invoice sent.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
    OUTWARD-FACING: sends a real email with the invoice to the client's invited contacts, and marks the invoice sent. Cannot be unsent — confirm with the user first. Invoice Ninja: POST /api/v1/invoices/bulk with action=email.

    Annotations the server declares

    • title: Email an invoice to the client
    • destructiveHint: true
  • invoiceninja_mark_invoice_sentMark a draft invoice as sent WITHOUT emailing it.No findings

    Why it is in this group

    • The name "invoiceninja_mark_invoice_sent" says "mark": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Mark a draft invoice as sent WITHOUT emailing it. This moves it out of draft and adds its amount to the client's balance. Invoice Ninja: GET /api/v1/invoices/{id}/mark_sent.

    Annotations the server declares

    • title: Mark an invoice sent
    • destructiveHint: true
  • invoiceninja_update_clientUpdate a client's details; only the fields you pass change.No findings

    Why it is in this group

    • The name "invoiceninja_update_client" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Update a client's details; only the fields you pass change. Passing contacts replaces the contact list. Invoice Ninja: PUT /api/v1/clients/{id}.

    Annotations the server declares

    • title: Update a client
    • destructiveHint: true
  • invoiceninja_update_invoiceEdit an invoice; only the fields you pass change, but line_items (if passed) replace every existing line.No findings

    Why it is in this group

    • The name "invoiceninja_update_invoice" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Edit an invoice; only the fields you pass change, but line_items (if passed) replace every existing line. Does not send anything. Invoice Ninja: PUT /api/v1/invoices/{id}.

    Annotations the server declares

    • title: Update an invoice
    • destructiveHint: true
Only reads 13Claude Code: allow
  • invoiceninja_get_clientFetch one client by id, with contacts, address, balance and paid-to-date.No findings

    Why it is in this group

    • The name "invoiceninja_get_client" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one client by id, with contacts, address, balance and paid-to-date. Invoice Ninja: GET /api/v1/clients/{id}.

    Annotations the server declares

    • title: Get one client
    • readOnlyHint: true
  • invoiceninja_get_invoiceFetch one invoice by id — line items, totals, balance, dates, status and invitations.No findings

    Why it is in this group

    • The name "invoiceninja_get_invoice" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one invoice by id — line items, totals, balance, dates, status and invitations. Invoice Ninja: GET /api/v1/invoices/{id}.

    Annotations the server declares

    • title: Get one invoice
    • readOnlyHint: true
  • invoiceninja_get_quoteFetch one quote by id — line items, totals, status and the invoice it was converted to (invoice_id), if any.No findings

    Why it is in this group

    • The name "invoiceninja_get_quote" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one quote by id — line items, totals, status and the invoice it was converted to (invoice_id), if any. Invoice Ninja: GET /api/v1/quotes/{id}.

    Annotations the server declares

    • title: Get one quote
    • readOnlyHint: true
  • invoiceninja_list_clientsList clients with balances and contacts, optionally searched by name, email or number.No findings

    Why it is in this group

    • The name "invoiceninja_list_clients" says "list": a word for reading.
    Description, as the server wrote it
    List clients with balances and contacts, optionally searched by name, email or number. Invoice Ninja: GET /api/v1/clients.

    Annotations the server declares

    • title: List clients
    • readOnlyHint: true
  • invoiceninja_list_expensesList expenses, filterable by client and invoicing/payment state.No findings

    Why it is in this group

    • The name "invoiceninja_list_expenses" says "list": a word for reading.
    Description, as the server wrote it
    List expenses, filterable by client and invoicing/payment state. Invoice Ninja: GET /api/v1/expenses.

    Annotations the server declares

    • title: List expenses
    • readOnlyHint: true
  • invoiceninja_list_invoicesList invoices, filterable by client and payment status (paid / unpaid / overdue).No findings

    Why it is in this group

    • The name "invoiceninja_list_invoices" says "list": a word for reading.
    Description, as the server wrote it
    List invoices, filterable by client and payment status (paid / unpaid / overdue). status_id on each invoice: 1 draft, 2 sent, 3 partial, 4 paid, 5 cancelled, 6 reversed. Invoice Ninja: GET /api/v1/invoices.

    Annotations the server declares

    • title: List invoices
    • readOnlyHint: true
  • invoiceninja_list_paymentsList payments received, with amount, date, refunded/applied totals and the invoices each was applied to (paymentables).No findings

    Why it is in this group

    • The name "invoiceninja_list_payments" says "list": a word for reading.
    Description, as the server wrote it
    List payments received, with amount, date, refunded/applied totals and the invoices each was applied to (paymentables). Read-only: this server never records or refunds payments. Invoice Ninja: GET /api/v1/payments.

    Annotations the server declares

    • title: List payments
    • readOnlyHint: true
  • invoiceninja_list_productsList products / services in the catalog with price, cost and default taxes.No findings

    Why it is in this group

    • The name "invoiceninja_list_products" says "list": a word for reading.
    Description, as the server wrote it
    List products / services in the catalog with price, cost and default taxes. Invoice Ninja: GET /api/v1/products.

    Annotations the server declares

    • title: List products
    • readOnlyHint: true
  • invoiceninja_list_projectsList projects with client, budgeted hours, task rate, current hours and due date.No findings

    Why it is in this group

    • The name "invoiceninja_list_projects" says "list": a word for reading.
    Description, as the server wrote it
    List projects with client, budgeted hours, task rate, current hours and due date. Invoice Ninja: GET /api/v1/projects.

    Annotations the server declares

    • title: List projects
    • readOnlyHint: true
  • invoiceninja_list_quotesList quotes (estimates), filterable by client and quote status.No findings

    Why it is in this group

    • The name "invoiceninja_list_quotes" says "list": a word for reading.
    Description, as the server wrote it
    List quotes (estimates), filterable by client and quote status. Invoice Ninja: GET /api/v1/quotes.

    Annotations the server declares

    • title: List quotes
    • readOnlyHint: true
  • invoiceninja_list_recurring_invoicesList recurring invoice schedules with frequency, next send date and remaining cycles.No findings

    Why it is in this group

    • The name "invoiceninja_list_recurring_invoices" says "list": a word for reading.
    Description, as the server wrote it
    List recurring invoice schedules with frequency, next send date and remaining cycles. Read-only. Invoice Ninja: GET /api/v1/recurring_invoices.

    Annotations the server declares

    • title: List recurring invoices
    • readOnlyHint: true
  • invoiceninja_list_tasksList tasks / time entries with their time_log, duration, rate and linked client, project and invoice.No findings

    Why it is in this group

    • The name "invoiceninja_list_tasks" says "list": a word for reading.
    Description, as the server wrote it
    List tasks / time entries with their time_log, duration, rate and linked client, project and invoice. Invoice Ninja: GET /api/v1/tasks.

    Annotations the server declares

    • title: List tasks
    • readOnlyHint: true
  • invoiceninja_list_vendorsList vendors (suppliers) with contacts and address.No findings

    Why it is in this group

    • The name "invoiceninja_list_vendors" says "list": a word for reading.
    Description, as the server wrote it
    List vendors (suppliers) with contacts and address. Invoice Ninja: GET /api/v1/vendors.

    Annotations the server declares

    • title: List vendors
    • 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.16.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http invoice-ninja https://invoice-ninja.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__invoice-ninja__invoiceninja_list_clients",
      "mcp__invoice-ninja__invoiceninja_get_client",
      "mcp__invoice-ninja__invoiceninja_list_invoices",
      "mcp__invoice-ninja__invoiceninja_get_invoice",
      "mcp__invoice-ninja__invoiceninja_list_quotes",
      "mcp__invoice-ninja__invoiceninja_get_quote",
      "mcp__invoice-ninja__invoiceninja_list_products",
      "mcp__invoice-ninja__invoiceninja_list_payments",
      "mcp__invoice-ninja__invoiceninja_list_expenses",
      "mcp__invoice-ninja__invoiceninja_list_vendors",
      "mcp__invoice-ninja__invoiceninja_list_tasks",
      "mcp__invoice-ninja__invoiceninja_list_projects",
      "mcp__invoice-ninja__invoiceninja_list_recurring_invoices"
    ],
    "ask": [],
    "deny": [
      "mcp__invoice-ninja__invoiceninja_create_client",
      "mcp__invoice-ninja__invoiceninja_update_client",
      "mcp__invoice-ninja__invoiceninja_create_invoice",
      "mcp__invoice-ninja__invoiceninja_update_invoice",
      "mcp__invoice-ninja__invoiceninja_mark_invoice_sent",
      "mcp__invoice-ninja__invoiceninja_email_invoice",
      "mcp__invoice-ninja__invoiceninja_create_quote",
      "mcp__invoice-ninja__invoiceninja_convert_quote_to_invoice",
      "mcp__invoice-ninja__invoiceninja_create_expense",
      "mcp__invoice-ninja__invoiceninja_create_task",
      "mcp__invoice-ninja__invoiceninja_create_project"
    ]
  }
}

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 invoice-ninja. Review it before you use it.