Wave MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Wave MCP Server List all accounts in the chart of accounts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Wave MCP Server
MCP server for Wave accounting — 6 tools, 52 operations covering the full Wave GraphQL API.
Built with FastMCP and httpx. Mirrors the architecture of quickbooks-mcp.
Quick Start
# Install dependencies
uv sync
# Configure credentials
cp .env.example .env
# Edit .env — add your WAVE_ACCESS_TOKEN from Wave > Settings > API Applications
# Discover your business ID
uv run python auth_flow.py
# Run (STDIO for Claude Desktop / MCP clients)
uv run python server.py
# Run (SSE on port 3076)
uv run python server.py sseRelated MCP server: waveapps-mcp
Configuration
Variable | Description |
| Full Access token from Wave app settings |
| Set automatically by |
Tools & Operations
account — Chart of Accounts
Operation | Description |
| List accounts with optional type/subtype filters, pagination |
| Get account by ID |
| Create account (name, subtype, currency, description) |
| Update account fields |
| Archive an account |
| Client-side name search |
party — Customers & Vendors
Operation | Customer | Vendor |
| Yes | Yes |
| Yes | Yes |
| Yes | Read-only |
| Yes | Read-only |
| Yes | Read-only |
| Yes | Yes |
transaction — Invoices & Money Transactions
Invoice operations: list, get, create, update, delete, clone, send, approve, mark_sent, create_payment, search
Money transaction operations: create, bulk_create (BETA)
item — Products & Services
list, get, create, update, archive, search
reference — Lookup Data & Settings
list_businesses, get_business, get_user, list_currencies, list_countries, list_account_types, list_account_subtypes, list_sales_taxes, get_sales_tax, create_sales_tax, update_sales_tax, archive_sales_tax, list_estimates, get_estimate
report — Synthesized Summaries
Operation | Description |
| Business info + accounts grouped by type with counts |
| All accounts with name, type, balance, balanceInBusinessCurrency |
| All customers with outstanding and overdue amounts |
MCP Client Configuration
Claude Desktop / Claude Code (STDIO)
{
"mcpServers": {
"wave": {
"command": "uv",
"args": ["run", "--directory", "/path/to/wave-mcp", "python", "server.py"]
}
}
}SSE (remote / multi-client)
{
"mcpServers": {
"wave": {
"url": "http://localhost:3076/sse"
}
}
}Key Differences from QuickBooks MCP
Wave | QuickBooks | |
API | GraphQL | REST |
Auth | Static Bearer token | OAuth 2.0 + token refresh |
IDs | Base64 strings | Integers |
Pagination | Page-based (page/pageSize) | Offset-based (start_position) |
Search | Client-side name filtering | Server-side WHERE queries |
Vendors | Read-only | Full CRUD |
Reports | Synthesized from account data | Native report API |
Money Transactions | Create-only (BETA) | N/A |
Known Limitations
Vendors are read-only — no create/update/delete mutations in the Wave API
Money transactions are create-only (BETA) — no list/get/update/delete
No server-side text search — client-side filtering, limited to first ~250 results per query
No financial reports API — synthesized account balance summaries only
Estimates are read-only — no create/update mutations
Rate limit: 60 requests/minute (automatic exponential backoff on 429)
Available Tools
6 toolsaccountA
Chart of Accounts management in Wave.
Operations: Read: list, get, search Write: create, update, archive
Args: operation: One of the operations listed above. account_id: Account ID (base64 string, required for get/update/archive). data: Dict of fields for create/update. Key fields: - name (str, required for create) - subtype (str, AccountSubtypeValue enum) - currency (str, currency code) - description (str) query: Search text for search operation (matches name, client-side). types: Filter by AccountTypeValue list (e.g. ["ASSET", "LIABILITY"]). subtypes: Filter by AccountSubtypeValue list. page: Page number (default 1). page_size: Results per page (default 50).
Returns: JSON string with account data or {"error": "..."}.
Inputs: operation (required), data, page, query, +4 more. Returns: result
itemA
Products & services management in Wave.
Operations: Read: list, get, search Write: create, update, archive
Args: operation: One of the operations listed above. item_id: Product ID (base64 string, required for get/update/archive). data: Dict of fields for create/update. Key fields: - name (str, required for create) - description (str) - unitPrice (decimal as string, e.g. "19.99") - isSold (bool) - isBought (bool) - incomeAccountId (str, account ID) - expenseAccountId (str, account ID) - defaultSalesTaxIds (list of tax IDs) query: Search text for search operation (matches name, client-side). page: Page number (default 1). page_size: Results per page (default 50).
Returns: JSON string with product data or {"error": "..."}.
Inputs: operation (required), data, page, query, +2 more. Returns: result
partyADestructive
Customer and vendor management in Wave.
NOTE: Vendors are read-only in the Wave API (no create/update/delete mutations).
Operations: Read: list, get, search (both customer and vendor) Write: create, update, delete (customer only)
Args: operation: One of the operations listed above. party_type: One of: customer, vendor. party_id: Entity ID (base64 string, required for get/update/delete). data: Dict of fields for create/update. Key customer fields: - name (str, required for create) - firstName, lastName (str) - email (str) - phone (str) - address (dict: addressLine1, addressLine2, city, postalCode, countryCode, provinceCode) - currency (str, currency code) - shippingDetails (dict: name, phone, address) query: Search text for search operation (matches name, client-side). page: Page number (default 1). page_size: Results per page (default 50).
Returns: JSON string with party data or {"error": "..."}.
Inputs: operation (required), data, page, query, +3 more. Returns: result
referenceA
Lookup data, settings, sales taxes, and estimates in Wave.
Read operations: list_businesses, get_business, get_user, list_currencies, list_countries, list_account_types, list_account_subtypes, list_sales_taxes, get_sales_tax, list_estimates, get_estimate
Write operations (sales taxes only): create_sales_tax, update_sales_tax, archive_sales_tax
Args: operation: One of the operations listed above. entity_id: Entity ID (base64 string, for get_sales_tax/update_sales_tax/archive_sales_tax/get_estimate). data: Dict of fields for create/update sales tax: - name (str, required for create) - abbreviation (str) - rate (str, decimal percentage e.g. "13.0") - isCompound (bool) - isRecoverable (bool) page: Page number (for list_estimates, default 1). page_size: Results per page (for list_estimates, default 50).
Returns: JSON string with reference data or {"error": "..."}.
Inputs: operation (required), data, page, entity_id, +1 more. Returns: result
reportARead-onlyIdempotent
Synthesized financial summaries from Wave data.
Wave has no report API. These are built from raw account/customer data.
Operations: business_summary — Business info + accounts grouped by type with counts account_balances — All accounts with name, type, subtype, and balance info customer_balances — All customers with outstanding and overdue amounts
Args: operation: One of the operations listed above.
Returns: JSON string with synthesized report data or {"error": "..."}.
Inputs: operation (required). Returns: result
transactionADestructive
Invoice and money transaction management in Wave.
Entity types: invoice, money_transaction
Invoice operations: Read: list, get, search Write: create, update, delete, clone, send, approve, mark_sent, create_payment
Money transaction operations: Write: create, bulk_create (BETA — create only, no list/get/update/delete)
Args: operation: One of the operations listed above. entity_type: One of: invoice, money_transaction. entity_id: Transaction ID (base64 string, required for get/update/delete/clone/send/approve/mark_sent). data: Dict of fields for create/update. Invoice create: customerId, items (list of {productId, description, quantity, unitPrice, accountId}), invoiceDate, dueDate, memo, currency Invoice create_payment: invoiceId, paymentAccountId, amount, paymentDate, paymentMethod (BANK_TRANSFER|CASH|CHEQUE|CREDIT_CARD|OTHER|PAY_PAL), memo Money transaction create: anchor (dict with accountId, amount, direction: DEPOSIT|WITHDRAWAL), lineItems (list of {accountId, amount, balance}), externalId, description Money transaction bulk_create: transactions (list of individual create inputs) query: Search text for search operation (matches invoiceNumber, customer name, memo). page: Page number (default 1). page_size: Results per page (default 50).
Returns: JSON string with transaction data or {"error": "..."}.
Inputs: operation (required), data, page, query, +3 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool focuses on a distinct domain (accounts, items, parties, reference data, reports, transactions), making it easy for an agent to select the right tool based on context. However, the 'reference' tool aggregates many unrelated operations (business info, countries, sales taxes, estimates), which could cause confusion. Overall, ambiguity is low.
Tool names are single-word nouns (account, item, party, etc.), consistent in form. However, operations within tools follow different patterns: most use standard verbs (list, get, create, update, delete), but 'reference' uses descriptive names like 'list_businesses' and 'list_currencies', and 'report' uses compound names like 'business_summary'. This mix reduces overall consistency.
With 6 tools covering major Wave entities (accounts, products, customers, transactions, reference data, reports), the count is well-scoped for an accounting MCP server. Each tool earns its place by handling a core domain, and there are no redundant or missing high-level categories.
The tool set covers essential CRUD operations for accounts, items, customers, and transactions, plus reference lookups and synthesized reports. Notable gaps include limited vendor management (read-only), no dedicated bill/expense tool (though money transactions may cover it), and read-only estimates. The surface is mostly complete for typical accounting workflows.
Maintenance
Related MCP Connectors
MCP server for Codat — companies, connections, invoices, bills and financial statements.
MCP server for Quaderno — tax-rate calculation, invoices, contacts, products, receipts & expenses.
MCP server for ABRA Flexi — accounting, contacts, stock and draft-checked invoice creation.
MCP server for Modern Treasury — payment orders, transactions, counterparties and ledgers.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceThis project builds a read-only MCP server. For full read, write, update, delete, and action capabilities and a simplified setup, check out our free CData MCP Server for Wave Financial (beta): https://www.cdata.com/download/download.aspx?sku=HWZK-V&type=betaMIT
- AlicenseNot gradedqualityBmaintenanceThis MCP server enables AI assistants like Claude to perform Wave Accounting bookkeeping tasks—such as drafting invoices, managing customers, recording payments, and looking up financial data—through natural language commands.7MIT
- AlicenseNot gradedqualityDmaintenanceComprehensive MCP server for Wave Accounting, providing 45+ tools across invoicing, customers, products, transactions, bills, estimates, taxes, and financial reporting, plus 17 pre-built UI workflows.5MIT
- AlicenseBqualityDmaintenanceA complete MCP server for Wave Accounting, providing comprehensive access to invoicing, customers, products, transactions, bills, estimates, taxes, and financial reporting.54MIT