nenoDevelopers
⌘K
v1

MCP · Invoices

Send an invoice

WRITEsend_invoice

Finalises a draft invoice and emails it to the customer's email address on file, after the user confirms the send directly in their MCP client. Clients that cannot show that confirmation cannot send.

Scope
invoices:write
Create and edit the invoices and customers you send
Permission
neno.manageInvoicing
Your role in the company must include it
Annotations
readOnlyHint falseidempotentHint falsedestructiveHint false

Description for models

Send a draft invoice that create_invoice made: Neno assigns its invoice number and emails it to the customer's address on file. Neno asks the user to confirm the send directly; you cannot confirm it for them. If the reply says this app cannot show that confirmation, tell the user to send it from the Neno app.

Sent verbatim in tools/list. It's written for the model, so it says when to use the tool.

Arguments

invoice_idstring · uuidrequired

The invoice id that create_invoice returned.

Added by the server

On every tool that acts on one company
workspacestring

The id of the company this applies to. This connection covers a single company, which is filled in for you, so you can leave this out.

Result

text
Success. The answer as plain text in content[0].text, starting with Company: and the company name.
isError
Refused or failed. A missing permission, an invalid argument or a server failure sets isError: true. The text says what went wrong and what to tell the user.
input
Company needed. With several companies and no workspace argument, the server asks which company the call is for. A client that can't ask gets an error that lists the companies.
POST /mcp · tools/call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "send_invoice",
"arguments": {
"invoice_id": "3e8a5c27-1f4b-4d9e-a6c2-7b0d9f1e5a84"
}
}
}
Example resultHand-written
content[0].text
Company: Studio Veld BV
Sent INV-00042 to Acme Technology B.V. at [email protected].

Tools return plain text with no output schema. This example follows the tool's real format, but the values are made up.