wave_convert_ estimate_ to_ invoiceTurn an estimate into a new invoice and return the invoice id.
Ask who owes you money and what is overdue, draft an invoice and send it once you have checked it, record a payment you received, add a customer or product, and log an income or expense, all from your AI client.
PopMCPWave
Every query and action in Wave's public API is covered, from invoices, estimates and deposits to customers, vendors, products, sales taxes and accounts, with everyday tools loaded by default and the rest one search away.
71 tools in the full catalog: 29 read and 42 write. 32 load by default, and the rest are found with tool search.
wave_convert_ estimate_ to_ invoiceTurn an estimate into a new invoice and return the invoice id.
wave_create_ estimateCreate a draft estimate for a customer.
wave_get_ estimateOne estimate with lines, taxes, attachments, acceptance history and deposit payments.
wave_list_ estimatesList estimates (quotes).
wave_send_ estimateEMAILS AN ESTIMATE TO A REAL CUSTOMER.
wave_approve_ invoiceApprove a draft invoice, which posts it to the books and makes it ready to send.
wave_create_ invoiceCreate an invoice for a customer.
wave_delete_ invoiceDelete an invoice for good, along with what it put in the books.
wave_get_ invoiceOne invoice with lines, taxes, payments and its view and PDF links.
wave_list_ invoicesList invoices.
wave_mark_ invoice_ sentRecord that an invoice was sent some other way, such as by hand or from your own email.
wave_send_ invoiceEMAILS AN INVOICE TO A REAL CUSTOMER.
wave_update_ invoiceChange an invoice.
wave_list_ accountsThe chart of accounts with balances.
wave_create_ customerAdd a customer to the business.
wave_create_ productAdd a product or service.
wave_get_ customerOne customer with address, shipping details, internal notes and amounts owed.
wave_get_ productOne product or service with its price, accounts and default sales taxes.
wave_list_ customersList customers of the business with what each owes.
wave_list_ productsList products and services.
wave_list_ sales_ taxesList sales taxes of the business with their current rate (0.15 means 15%).
wave_record_ invoice_ paymentRecord money already received against an invoice, which changes the books.
wave_send_ invoice_ payment_ receiptEMAILS A RECEIPT TO A REAL CUSTOMER.
wave_update_ customerChange a customer.
wave_update_ productChange a product or service.
wave_get_ businessDetails of the connected business: name, currency, timezone, address, and emailSendEnabled.
wave_get_ userThe Wave user behind this connection: id, name and email.
wave_create_ and_ send_ invoiceCreate an approved invoice and email it to a real customer in one call.
wave_find_ recordsFind a customer, product, vendor, account or sales tax by part of its name.
wave_get_ receivables_ summaryWho owes what: money still due by currency and customer, with overdue split out.
wave_create_ money_ transactionAdd one income or expense to the books (Wave marks this beta).
wave_list_ vendorsList vendors of the business.
wave_approve_ estimateApprove a draft estimate so it can be sent.
wave_clone_ estimateCopy an estimate into a new one.
wave_delete_ estimateDelete an estimate for good.
wave_delete_ estimate_ paymentRemove a recorded deposit from an estimate.
wave_generate_ estimate_ pdfMake a PDF of an estimate and return its link.
wave_get_ estimate_ paymentOne deposit payment or refund on an estimate.
wave_mark_ estimate_ acceptedRecord that the customer accepted an estimate.
wave_mark_ estimate_ sentRecord that an estimate was sent some other way.
wave_record_ estimate_ deposit_ paymentRecord a deposit already received on an estimate.
wave_reset_ estimate_ acceptanceUndo a recorded acceptance so the estimate is open again.
wave_send_ estimate_ acceptance_ emailEMAILS A REAL CUSTOMER to tell them their estimate acceptance was received.
wave_send_ estimate_ deposit_ receiptEMAILS A DEPOSIT RECEIPT TO A REAL CUSTOMER.
wave_update_ estimateChange an estimate.
wave_update_ estimate_ deposit_ paymentCorrect a recorded estimate deposit.
wave_clone_ invoiceCopy an invoice into a new one for the same customer.
wave_archive_ accountArchive an account.
wave_create_ accountAdd an account to the chart of accounts.
wave_get_ accountOne account with its balance and sequence.
wave_list_ account_ subtypesThe account subtypes Wave has, with their type and whether they can be archived.
wave_list_ account_ typesThe account types Wave has (asset, liability, equity, income, expense).
wave_update_ accountRename or redescribe an account.
wave_archive_ productArchive a product or service so it no longer shows for new invoices.
wave_archive_ sales_ taxArchive a sales tax so it no longer shows for new invoices.
wave_create_ sales_ taxAdd a sales tax.
wave_delete_ customerDelete a customer for good.
wave_delete_ invoice_ paymentRemove a recorded payment from an invoice, which reopens what it paid.
wave_get_ countryOne country by ISO code with its provinces or states, whose codes go in an address's provinceCode.
wave_get_ currencyOne currency by ISO code, such as USD or CAD.
wave_get_ invoice_ paymentOne payment on an invoice.
wave_get_ provinceOne province or state by its code, such as CA-ON or US-NY.
wave_get_ sales_ taxOne sales tax with its rate history.
wave_list_ countriesEvery country Wave knows, with its code and currency.
wave_list_ currenciesEvery currency Wave knows, with symbol and decimal places.
wave_update_ invoice_ paymentCorrect a recorded payment.
wave_update_ sales_ taxChange a sales tax.
wave_get_ oauth_ applicationThe Wave application this connection's token belongs to: its name and client id.
wave_list_ businessesThe Wave business this connection is locked to, with its currency, timezone and whether it can email invoices.
wave_create_ money_ transactionsAdd several income or expense entries in one call (Wave marks this beta).
wave_get_ vendorOne vendor with address and contact details.
Credentials off one Wave screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.
In Wave's developer portal open Manage Applications, make a small application, click Create token and copy the Full Access Token into PopMCP. It works on any Wave plan. If your login has several businesses, you pick one next and the connection stays locked to it.
••••••••••••3f7aSending an invoice or estimate emails a real customer, and recording a payment or deleting an invoice changes your books, the moment the AI calls it. Tick Wave on the PopMCP consent screen only for clients you trust with that, and choose read-only access if the AI should only look.
Drop the PopMCP URL into Claude, ChatGPT, Claude Code, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Wave credential never leaves the server.
app.popmcp.com/mcpAsk for something harmless before the agent changes anything. Writes run as soon as it calls them, so confirm it reads the right account first.
Who owes me money right now, and which invoices are overdue?
wave_get_receivables_summaryok
Then just ask for the work
“Who owes me money right now, and which invoices are overdue?”
“Invoice Northwind for two days of consulting, due in 30 days, and show it to me before anything goes out”
“Northwind paid invoice 1042 by bank transfer today: record it and send them a receipt”
“Turn last week's accepted estimate for Acme into an invoice and email it to their billing address”
“Add yesterday's $250 office chair purchase from the business checking account as an expense”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Wave behind an AI client.
A Full Access Token. In Wave's developer portal open Manage Applications, click Get started, complete the short form and click Create application, then open the application and click Create token. Paste the token into PopMCP. It checks the token against Wave and stores it encrypted.
Not for a Full Access Token: Wave's developer docs offer it to people without a Pro account. Wave's own sign-in flow is different: it can only grant access to businesses with an active Pro or Wave Advisor subscription.
One. A Full Access Token reaches every business in your Wave login, so PopMCP asks which one to connect and locks the connection to it. A request naming another business, or using an id from one, is refused before it is sent. To work in a second business, connect it to its own PopMCP workspace.
Yes, if you allow write actions. Sending an invoice, estimate or receipt emails a real customer through Wave, and those tools say so plainly so your AI client can check with you first. Creating and approving an invoice emails no one. On a read-only connection none of this is available.
No. It records money you already received against an invoice, which updates your books. It does not take a payment, and nothing here moves money.
It cannot read bookkeeping transactions back, transfer between bank accounts, work with bills, change vendors (it reads them only), or run reports such as profit and loss. Your AI will say so rather than guess, and those stay in Wave itself.
Wave's lists can filter by email but not by name. The find_records tool reads through your records and matches on part of a name, so you can say Northwind and the AI gets the right id. It stops after a fixed number of records and says so if it did.
No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.
Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.
Connect Wave in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking Wave on the consent screen. The Wave tools are then available in that session, and no Wave credential is stored on your machine.
Loading 71 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 32-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.
A tool is something your AI calls, and there are 71 here. A trigger is something PopMCP watches for you: 6 Wave events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Wave.
Launch a hosted MCP endpoint for Wave, keep tool access under control, and start testing real workflow prompts right away.