Create Invoice
whmcs_create_invoiceCreates a new invoice for a specified client in WHMCS, allowing configuration of status, dates, payment method, and line items.
Instructions
Create a new invoice for a client
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| userid | Yes | Client ID | |
| status | No | Invoice status | |
| sendinvoice | No | Send invoice email | |
| paymentmethod | No | Payment method | |
| taxrate | No | Tax rate percentage | |
| taxrate2 | No | Second tax rate percentage | |
| date | No | Invoice date (YYYY-MM-DD) | |
| duedate | No | Due date (YYYY-MM-DD) | |
| notes | No | Invoice notes | |
| itemdescription | No | Line item descriptions | |
| itemamount | No | Line item amounts | |
| itemtaxed | No | Line items taxed flags |
Implementation Reference
- src/index.ts:297-323 (registration)Tool registration for 'whmcs_create_invoice' on the MCP server. Registers the tool with Zod schema for input validation (userid required, optional: status, sendinvoice, paymentmethod, taxrate, taxrate2, date, duedate, notes, itemdescription, itemamount, itemtaxed). The handler delegates to whmcsClient.createInvoice(params).
server.registerTool( 'whmcs_create_invoice', { title: 'Create Invoice', description: 'Create a new invoice for a client', inputSchema: { userid: z.number().describe('Client ID'), status: z.enum(['Draft', 'Unpaid', 'Paid', 'Cancelled', 'Refunded', 'Collections']).optional().describe('Invoice status'), sendinvoice: z.boolean().optional().describe('Send invoice email'), paymentmethod: z.string().optional().describe('Payment method'), taxrate: z.number().optional().describe('Tax rate percentage'), taxrate2: z.number().optional().describe('Second tax rate percentage'), date: z.string().optional().describe('Invoice date (YYYY-MM-DD)'), duedate: z.string().optional().describe('Due date (YYYY-MM-DD)'), notes: z.string().optional().describe('Invoice notes'), itemdescription: z.array(z.string()).optional().describe('Line item descriptions'), itemamount: z.array(z.number()).optional().describe('Line item amounts'), itemtaxed: z.array(z.boolean()).optional().describe('Line items taxed flags'), }, }, async (params) => { const result = await whmcsClient.createInvoice(params); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], }; } ); - src/whmcs-client.ts:503-524 (handler)The 'createInvoice' method on WhmcsApiClient. The actual implementation that calls the WHMCS API via this.call() with action 'CreateInvoice', passing userid, status, paymentmethod, taxrate, dates, notes, and line item arrays (itemdescription, itemamount, itemtaxed). Returns invoiceid and status.
/** * Create an invoice */ async createInvoice(params: { userid: number; status?: 'Draft' | 'Unpaid' | 'Paid' | 'Cancelled' | 'Refunded' | 'Collections'; sendinvoice?: boolean; paymentmethod?: string; taxrate?: number; taxrate2?: number; date?: string; duedate?: string; notes?: string; itemdescription?: string[]; itemamount?: number[]; itemtaxed?: boolean[]; }) { return this.call<WhmcsApiResponse & { invoiceid: number; status: string; }>('CreateInvoice', params); } - src/index.ts:298-315 (schema)Input schema for whmcs_create_invoice using Zod. Defines: userid (required number), status (optional enum), sendinvoice (optional boolean), paymentmethod (optional string), taxrate/taxrate2 (optional numbers), date/duedate (optional strings), notes (optional string), itemdescription (optional string array), itemamount (optional number array), itemtaxed (optional boolean array).
'whmcs_create_invoice', { title: 'Create Invoice', description: 'Create a new invoice for a client', inputSchema: { userid: z.number().describe('Client ID'), status: z.enum(['Draft', 'Unpaid', 'Paid', 'Cancelled', 'Refunded', 'Collections']).optional().describe('Invoice status'), sendinvoice: z.boolean().optional().describe('Send invoice email'), paymentmethod: z.string().optional().describe('Payment method'), taxrate: z.number().optional().describe('Tax rate percentage'), taxrate2: z.number().optional().describe('Second tax rate percentage'), date: z.string().optional().describe('Invoice date (YYYY-MM-DD)'), duedate: z.string().optional().describe('Due date (YYYY-MM-DD)'), notes: z.string().optional().describe('Invoice notes'), itemdescription: z.array(z.string()).optional().describe('Line item descriptions'), itemamount: z.array(z.number()).optional().describe('Line item amounts'), itemtaxed: z.array(z.boolean()).optional().describe('Line items taxed flags'), },