MCP Server for Wave
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WAVE_OP_PATH | No | 1Password secret reference to read the token, e.g. op://Vault/Item/credential (optional) | |
| WAVE_TIMEOUT_MS | No | Per-request timeout in milliseconds (optional, default 20000) | 20000 |
| WAVE_BUSINESS_ID | No | Default business ID so tools can omit business_id (optional) | |
| WAVE_ACCESS_TOKEN | Yes | OAuth2 bearer token from the Wave developer portal (required) | |
| WAVE_ALLOW_WRITES | No | Set to 1 to register the 44 tools that change or send data (optional, default off) | 0 |
| WAVE_HTTP_RETRIES | No | Number of retries on 429 and 5xx (optional, default 2) | 2 |
| WAVE_TOTAL_BUDGET_MS | No | Total time for one call including retries in milliseconds (optional, default 50000) | 50000 |
| WAVE_ACCESS_TOKEN_FILE | No | Path to a file containing the access token (optional) | |
| WAVE_MAX_RESPONSE_BYTES | No | Reject responses above this size in bytes (optional, default 8388608) | 8388608 |
| WAVE_DISABLE_AGENT_CONFIG_FALLBACK | No | Set to 1 to read only the environment, not agent config files (optional, default off) | 0 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| wave_auth_statusA | Report how this server resolved its Wave credentials and whether write tools are enabled. Makes no Wave API request, so it works even when the token is missing or expired -- use it first when other tools report authentication problems. |
| wave_get_userA | Get the Wave user account that owns the current access token. Useful for confirming which account a token authenticates as. |
| wave_list_currenciesA | List the currency codes Wave supports. Wave supports about 160 currencies, so pass search to narrow the list. |
| wave_get_currencyA | Get one currency by ISO 4217 code. |
| wave_list_countriesA | List the countries Wave supports, with each one's default currency. |
| wave_get_countryA | Get one country and its provinces or states. Use this to find the province codes that address fields expect. |
| wave_get_provinceA | Get one province or state by its code. |
| wave_list_account_typesA | List the five top-level account types in Wave's chart of accounts: ASSET, LIABILITY, EQUITY, INCOME, and EXPENSE, each with its normal balance. |
| wave_list_account_subtypesA | List account subtypes -- the value wave_create_account needs. Every account belongs to a subtype (CASH_AND_BANK, EXPENSE, INCOME, ...), which in turn determines its type. Some subtypes are system-created and cannot be used for new accounts. |
| wave_get_oauth_applicationA | Get the OAuth application that issued the current access token. |
| wave_list_businessesA | List the Wave businesses this access token can reach. Start here: every other tool needs a business ID. Pass one to wave_set_default_business so later calls can omit it. |
| wave_get_businessA | Get full detail for one business: currency, address, type, and settings. |
| wave_set_default_businessA | Set the business that later tool calls use when none is given. This is connector state, not a change in Wave. The hosted connector keeps it for the authenticated connection (legacy clients: the session); the local server keeps it until it restarts (set WAVE_BUSINESS_ID to make it permanent). Passing business_id explicitly always overrides it. |
| wave_get_invoice_estimate_settingsA | Get the branding applied to invoices and estimates: accent color and logo. |
| wave_list_accountsA | List the chart of accounts, with balances. Filter by type to find the account a transaction needs: EXPENSE for expense categories, INCOME for revenue, ASSET with subtype CASH_AND_BANK for bank accounts, LIABILITY with subtype CREDIT_CARD for cards. |
| wave_get_accountA | Get one account by ID, including its current balance. |
| wave_list_customersA | List customers, with each one's outstanding and overdue balance. Wave can filter by exact email only; name_contains is applied by this server after fetching, so combine it with fetch_all=true when searching a large customer list. |
| wave_get_customerA | Get one customer by ID, including address and shipping details. |
| wave_list_vendorsA | List vendors -- the suppliers a business buys from. Vendors are read-only in Wave's API: they can be listed and read but not created, changed, or deleted. Wave filters by exact email only; name_contains is applied locally, so pair it with fetch_all=true on a long vendor list. |
| wave_get_vendorA | Get one vendor by ID, including address and shipping details. |
| wave_list_productsA | List products and services. Invoice and estimate line items must reference a product, so this is the usual first step when building either one. |
| wave_get_productA | Get one product by ID, including its accounts and default sales taxes. |
| wave_list_sales_taxesA | List sales taxes, with their current rate and rate history. |
| wave_get_sales_taxA | Get one sales tax by ID, including its full rate history. |
| wave_list_invoicesA | List invoices, filtered by status, customer, date range, or amount due. To find unpaid invoices use status "UNPAID"; "OVERDUE" narrows that to ones past their due date. |
| wave_get_invoiceA | Get one invoice in full: line items, taxes, discounts, and payments. |
| wave_get_invoice_paymentA | Get one invoice payment by ID. To see every payment on an invoice, call wave_get_invoice instead: it returns them all. |
| wave_list_estimatesB | List estimates (quotes), filtered by status, customer, or date range. |
| wave_get_estimateA | Get one estimate in full: line items, deposits, and acceptance history. |
| wave_get_estimate_paymentA | Get one estimate deposit payment by ID. To see every deposit on an estimate, call wave_get_estimate with include_deposit_payments=true. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Wave businesses | Every Wave business this access token can reach, with IDs and currencies. |
| Chart of accounts | The default business's chart of accounts, with types, subtypes, and balances. |
| Customers | The default business's customers, with outstanding and overdue balances. |
| Vendors | The default business's vendors. Read-only: Wave's API has no vendor mutations. |
| Products and services | The default business's products. Invoice and estimate line items must reference one. |
| Sales taxes | The default business's sales taxes, with current rates and rate history. |
| Account type taxonomy | Wave's account types and subtypes -- the vocabulary wave_create_account expects. |
| Health check | Server health status: live Wave API connectivity and current configuration. |
TDQS
Scored across 30 tools
Each tool targets a distinct resource+action, and the list/get pairs (customers, vendors, products, taxes, invoices, estimates, accounts) are clearly separated. Descriptions even preempt overlaps, e.g. wave_get_invoice_payment vs wave_get_invoice, and wave_get_province vs wave_get_country. No two tools appear interchangeable.
Every tool follows the same wave_verb_noun pattern (wave_list_*, wave_get_*, wave_set_*), all snake_case, with a uniform namespace prefix. There are no stylistic deviations or mixed conventions.
30 tools is heavy for a read-only surface, and several low-value pairs inflate it (account_types + account_subtypes, get_country + get_province, currencies list/get). Consistent list+get pairs per entity are defensible, but the set is near the top of the reasonable range and could be consolidated.
The surface is almost entirely reads: there is no create/update/delete for invoices, estimates, customers, products, or accounts, despite wave_auth_status advertising 'write tools' and wave_list_account_subtypes referencing a wave_create_account that does not exist. Agents following those descriptions hit dead ends.