Skip to content
Elaichi Elaichi

accounting

Wave

Connect Wave to Elaichi and hand every teammate a governed MCP endpoint — 51 tools ready to call from Claude, Cursor, or any MCP client, clamped by roles, restrictions, and an audit log.

Wave

AI tools

Wave tools for your AI agents

51 tools are ready to mint as an MCP endpoint the moment you connect Wave — governed by the same roles, restrictions, and audit log as everything else in Elaichi.

wave_users_me

Get the currently authenticated Wave user. Returns: id, defaultEmail, firstName, lastName, createdAt, modifiedAt.

create_a_wave_account

Create a Wave account via the accountCreate mutation. Required input: businessId, name, subtype. Returns the created account with id, name, currency, type, and subtype. inputErrors[] surfaces field-level validation failures.

delete_a_wave_account_by_id

Delete (archive) a Wave account via the accountArchive mutation. Required: input.id (account ID). Returns didSucceed and any inputErrors for validation failures.

update_a_wave_account_by_id

Update (patch) a Wave account via the accountPatch mutation. Required input fields: id, sequence. Optional: name, description, displayId. Returns the patched account and any inputErrors for validation failures.

create_a_wave_customer

Create a Wave customer via the customerCreate mutation. Required: input (object with businessId, name). Returns the created customer. inputErrors[] surfaces field-level validation failures.

delete_a_wave_customer_by_id

Delete a Wave customer via the customerDelete mutation. Required: input.id (customer ID). Returns didSucceed and inputErrors[] for validation failures.

update_a_wave_customer_by_id

Update (patch) a Wave customer via the customerPatch mutation. Input requires customer id and any fields to update. Returns the patched customer and inputErrors[] for field-level validation failures.

list_all_wave_account_subtypes

List account subtypes in Wave's Chart of Accounts. Returns: name, value, type (with normalBalanceType), archivable, systemCreated, description.

list_all_wave_account_types

List Wave account types (e.g. Asset, Equity, Expense, Income, Liability). Returns: name, normalBalanceType, value. No pagination; returns all types in a single response.

list_all_wave_businesses

List businesses on Wave. Returns: id, name, isPersonal, currency, timezone, phone, website, isArchived. Offset-paginated via page/pageSize.

get_single_wave_business_by_id

Get a Wave business by ID. If no ID is provided and the token is scoped to one business, returns that business; otherwise returns the user's default business. Returns: id, name, currency, address, phone, timezone.

list_all_wave_countries

List all countries in Wave. Returns: code (ISO 3166-1 alpha-2), name, nameWithArticle, and default currency details. No pagination — returns the full list.

get_single_wave_country_by_id

Get a country by its ISO 3166-1 alpha-2 code from Wave. Returns: code, name, nameWithArticle, default currency, and provinces.

list_all_wave_currencies

List all ISO 4217 currencies available in Wave. Returns: code, symbol, name, plural, exponent. No pagination; returns the full set.

get_single_wave_currency_by_id

Get a Wave currency by ISO 4217 code. Required: code (CurrencyCode). Returns: code, symbol, name, plural, exponent.

create_a_wave_estimate

Create a Wave estimate via the estimateCreate mutation. Required input: businessId, customerId. Returns the created estimate with id, status, estimateNumber, and validation errors on failure.

delete_a_wave_estimate_by_id

Delete a Wave estimate via the estimateDelete mutation. Required: input.estimateId. Returns didSucceed and inputErrors for validation failures.

update_a_wave_estimate_by_id

Update a Wave estimate via the estimatePatch mutation. Required: input (object with id, customerId, status, title, estimateDate, currency, exchangeRate, dueDate). Returns the updated estimate and inputErrors for validation failures.

wave_estimates_convert_to_invoice

Convert a Wave estimate into an invoice via convertEstimateToInvoice. Required: input.estimateId. Returns: invoiceId, didSucceed. inputErrors[] surfaces field-level validation failures.

wave_estimates_approve

Approve a Wave estimate via the estimateApprove mutation. Required input: estimateId. Returns the approved estimate and any validation errors.

wave_estimates_clone

Clone a Wave estimate via the estimateClone mutation. Required input: estimateId. Returns the cloned estimate with key fields. inputErrors[] surfaces field-level validation failures.

wave_estimates_send_deposit_payment_receipt

Send a receipt for an estimate deposit payment in Wave via estimateDepositPaymentReceiptSend. Required: input (estimateId, estimatePaymentId, to). Returns didSucceed and inputErrors for validation failures.

wave_estimates_generate_pdf

Generate a PDF for a Wave estimate via estimateGeneratePdf mutation. Required: input.estimateId. Returns: pdfUrl, didSucceed, and inputErrors for validation failures.

wave_estimates_mark_accepted

Mark a Wave estimate as accepted via the estimateMarkAccepted mutation. Required input: estimateId. Returns the updated estimate and any validation errors.

wave_estimates_mark_sent

Mark a Wave estimate as sent via the estimateMarkSent mutation. Required input: estimateId, sendMethod. Returns the updated estimate and inputErrors[] for validation failures.

wave_estimates_reset_acceptance

Reset the acceptance status of a Wave estimate via estimateResetAcceptance. Required input: estimateId. Returns the reset estimate and any validation errors.

wave_estimates_send

Send a Wave estimate via the estimateSend mutation. Required input: estimateId, to (email addresses). Returns the sent estimate and any inputErrors for validation failures.

wave_estimates_send_acceptance_customer_email

Send acceptance notification email to customer for a Wave estimate via estimateSendAcceptanceCustomerEmail mutation. Required: input with estimateId. Returns didSucceed, estimate details, and inputErrors for validation failures.

delete_a_wave_estimate_payment_by_id

Delete a Wave estimate manual payment via estimatePaymentDelete. Required: input.id (estimate payment ID). Returns didSucceed and inputErrors for validation failures.

delete_a_wave_invoice_payment_by_id

Delete a manual invoice payment in Wave via invoicePaymentDelete. Required: input.id (invoice payment ID). Returns didSucceed and inputErrors for validation failures.

update_a_wave_invoice_payment_by_id

Update a Wave invoice payment via invoicePaymentPatch. Required: input (object with id and optional fields like amount, paymentDate, paymentMethod, memo, exchangeRate, paymentAccountId). Returns the updated invoice payment and any inputErrors.

create_a_wave_invoice_payment

Record a manual payment against a Wave invoice via invoicePaymentCreateManual. Required: input (invoiceId, paymentAccountId, amount, paymentDate, paymentMethod, exchangeRate). Returns the created invoicePayment and any inputErrors.

create_a_wave_invoice

Create a Wave invoice via the invoiceCreate mutation. Required input: businessId, customerId. Returns the created invoice with key fields. inputErrors[] surfaces field-level validation failures.

update_a_wave_invoice_by_id

Update (patch) a Wave invoice via the invoicePatch mutation. Required: input.id. Only provided fields are updated. Returns the patched invoice and inputErrors[] for field-level validation failures.

delete_a_wave_invoice_by_id

Delete a Wave invoice via the invoiceDelete mutation. Required: input.invoiceId. Returns didSucceed and inputErrors[] for validation failures.

wave_invoices_approve

Approve a Wave invoice via the invoiceApprove mutation. Required: input.invoiceId. Returns the approved invoice and any validation errors.

wave_invoices_clone

Clone a Wave invoice via the invoiceClone mutation. Required: input.invoiceId. Returns the cloned invoice with key fields. inputErrors[] surfaces validation failures.

wave_invoices_mark_sent

Mark a Wave invoice as sent via the invoiceMarkSent mutation. Required input: invoiceId, sendMethod. Optional: sentAt. Returns the updated invoice and any inputErrors for validation failures.

wave_invoices_send_payment_receipt

Send an invoice payment receipt email in Wave via invoicePaymentReceiptSend. Required input: invoiceId, invoicePaymentId, to (email addresses). Returns didSucceed and inputErrors for validation.

wave_invoices_send

Send a Wave invoice via the invoiceSend mutation. Requires Business.emailSendEnabled to be true. Input: invoiceId, to (email addresses), subject, message, attachPDF, fromAddress, ccMyself. Returns the sent invoice and any input errors.

create_a_wave_money_deposit_transaction

Create a money deposit transaction in Wave via moneyDepositTransactionCreate. Required input: businessId, date, description, deposit, lineItems, origin. Returns didSucceed and inputErrors for validation.

create_a_wave_money_transaction

Create a Wave money transaction via moneyTransactionCreate mutation (BETA). Requires isClassicAccounting to be false. Input includes businessId, externalId, date, description, anchor, and lineItems. inputErrors[] surfaces field-level validation failures.

wave_money_transactions_bulk_create

Bulk create money transactions in Wave via moneyTransactionsCreate mutation. BETA: requires isClassicAccounting to be false. Input: businessId, transactions array. Returns created transaction ids and inputErrors for validation failures.

get_single_wave_o_auth_application_by_id

Get the current OAuth application in Wave. Returns: id, name, description, clientId, extraData, createdAt, modifiedAt.

create_a_wave_product

Create a product in Wave via the productCreate mutation. Required input: businessId, name, unitPrice. Returns the created product and any inputErrors for validation failures.

update_a_wave_product_by_id

Update a Wave product via the productPatch mutation. Input requires product id; optional fields: name, description, unitPrice, defaultSalesTaxIds, incomeAccountId, expenseAccountId. Returns updated product and inputErrors for validation failures.

delete_a_wave_product_by_id

Delete (archive) a Wave product via the productArchive mutation. Requires input with the product ID. Returns the archived product and any validation errors.

get_single_wave_province_by_id

Get a Wave province (state/county/region) by its ISO 3166-2 code. Returns: code, name.

create_a_wave_sales_tax

Create a sales tax in Wave via the salesTaxCreate mutation. Required input: businessId, name, abbreviation, rate. Returns the created sales tax. inputErrors[] surfaces field-level validation failures.

update_a_wave_sales_tax_by_id

Update a Wave sales tax via the salesTaxPatch mutation. Required: input (object with id and optional name, abbreviation, description, taxNumber, rates). Returns the updated sales tax and any inputErrors for validation failures.

delete_a_wave_sales_tax_by_id

Delete (archive) a Wave sales tax via the salesTaxArchive mutation. Required: input with sales tax ID. Returns the archived sales tax and validation errors if any.

How it works

From Wave account to governed MCP endpoint

Connect

Link a Wave account through Elaichi's hosted connect flow. Credentials are vaulted — nobody, including the AI, ever sees them.

Compose

The connection becomes a toolbox instantly. Curate which Wave tools are exposed, rename them, or freeze arguments.

Mint

Mint a personal MCP endpoint on that toolbox and paste it into Claude, Cursor, or any MCP client — governed by roles, restrictions, and audit logs.

Give every teammate a governed MCP server

Start a 14-day Gold trial — connect a product, curate a toolbox, and paste an endpoint into Claude or Cursor in minutes.