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 ServerList 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": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| page | No | ||
| query | No | ||
| types | No | ||
| subtypes | No | ||
| operation | Yes | ||
| page_size | No | ||
| account_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description only lists operations without elaborating on behavioral traits like authentication needs, rate limits, or side effects of 'archive' (which might be destructive despite the annotation). The description adds little beyond the annotations and operation list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for operations and arguments. It is reasonably concise given the parameter count (8), though some sentences could be tighter. No filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 params, nested objects, output schema exists), the description covers all parameters, return format, and key behavioral notes (e.g., client-side search, required account_id). It omits details on output schema structure but that is acceptable as an output schema is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining each parameter: operation enum list, account_id format and usage, data dict with key fields and types, query behavior, filters, and pagination. This provides excellent guidance beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it's for 'Chart of Accounts management in Wave' and lists specific operations (list, get, search, create, update, archive), providing a clear sense of purpose. However, it does not differentiate from sibling tools like 'item', 'party', etc., leaving the agent to infer context from tool names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the operations and their required parameters (e.g., account_id for get/update/archive, query for search). It implies when to use each operation but does not explicitly state when to use this tool versus its siblings, nor provide when-not or alternative suggestions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| page | No | ||
| query | No | ||
| item_id | No | ||
| operation | Yes | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=false, and openWorldHint=true. The description adds the return format (JSON string with data or error) and implies mutation via archive, but does not elaborate on behavioral traits like side effects or permissions. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into sections (operations, args, returns) but is somewhat verbose for a single tool description. It front-loads the purpose and operations, but some details (like default page_size) could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all major aspects: operations, parameters, return format, and key data fields. Given the presence of an output schema (not shown), this is sufficient. Minor gaps include error handling details or examples, but overall it provides a complete picture for correct tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, yet the description fully compensates by explaining each parameter's purpose, including nested data fields (name, unitPrice, etc.) and their types. This adds essential meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as managing 'Products & services in Wave' and lists specific operations (Read: list, get, search; Write: create, update, archive). This is specific and helps distinguish from sibling tools like account or transaction, though it doesn't explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context for each operation, listing required parameters (e.g., item_id for get/update/archive) and optional fields (data, query). It does not explicitly exclude use cases or name alternatives, but the structured breakdown of operations guides appropriate selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| page | No | ||
| query | No | ||
| party_id | No | ||
| operation | Yes | ||
| page_size | No | ||
| party_type | No | customer |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint true, readOnlyHint false, which aligns with the description's mention that vendors are read-only (no create/update/delete mutations). The description adds behavioral context beyond annotations, such as the API limitation for vendors and the operation semantics. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (NOTE, Operations, Args, Returns). It is front-loaded with its purpose and every sentence adds value. It is appropriately sized for the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, nested objects, multiple operations, output schema exists), the description covers input parameters, the read-only vendor limitation, and return format. It could be more detailed on error cases or specifics of the output schema, but the presence of an output schema reduces the burden. Overall, it is quite complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by thoroughly explaining each parameter: operation (list of operations), party_type (customer/vendor), party_id (required for get/update/delete), data (dict with key fields like name, email, address structured), query (search text), page, page_size. This adds significant meaning beyond the schema's titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Customer and vendor management in Wave' and lists specific operations (list, get, search, create, update, delete) with differentiation between customer (full CRUD) and vendor (read-only). This provides a specific verb+resource and distinguishes from siblings by mentioning the API's limitation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use read vs write operations and notes that vendors are read-only. However, it does not explicitly compare with sibling tools (account, item, etc.) or state when not to use this tool. Still, the guidance on operation and party_type is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| page | No | ||
| entity_id | No | ||
| operation | Yes | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, destructiveHint=false, and description adds that write operations are only for sales taxes and returns JSON with error info. This aligns well, though it could further clarify potential side effects like archiving.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, bullet-pointed operation lists, and a concise Args section. Every sentence adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple operations) and the presence of an output schema, the description adequately covers purpose, parameters, return format, and operation categories without missing essential details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description thoroughly documents all parameters: operation with listed values, entity_id as base64 string, data dict with subfields (name, abbreviation, rate, etc.), page and page_size for list_estimates. This fully compensates for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Lookup data, settings, sales taxes, and estimates in Wave' and lists specific read and write operations. While it effectively communicates the tool's scope, it does not explicitly differentiate from sibling tools like account, item, or report, which handle specific entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description separates read and write operations and notes that write operations are limited to sales taxes. This provides clear usage context, but it lacks explicit guidance on when to choose this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=False. Description adds value by detailing the output format (JSON string with synthesized data or error) and explaining that data is synthesized from raw account/customer data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise and well-structured: bold intro, context paragraph, bullet list of operations, then Args and Returns sections. Every sentence is informative with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required parameter), annotations, and presence of output schema, the description covers purpose, operations, output format, and source limitation comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has one parameter 'operation' with no enum or description. Description compensates by listing the three valid values (business_summary, account_balances, customer_balances), adding crucial meaning for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool synthesizes financial summaries from Wave data. It lists three specific operations (business_summary, account_balances, customer_balances) and distinguishes itself from sibling tools like account, item, party, reference, transaction by focusing on reports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explains that Wave has no report API, so this tool fills that gap using raw data. It provides clear context for when to use, but does not explicitly state when not to use or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| page | No | ||
| query | No | ||
| entity_id | No | ||
| operation | Yes | ||
| page_size | No | ||
| entity_type | No | invoice |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description notes BETA status for bulk_create, lists all operations (including destructive ones), and explains parameter requirements. This adds useful context about behavior and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for entity types, operations, args, and returns. It is fairly concise given the complexity, though some redundancy could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers most aspects of the tool, including all parameters and operation-specific details. The return format is only briefly mentioned, but overall it is sufficiently complete for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by detailing each parameter, including nested fields for data, operations, and entity types. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool manages 'Invoice and money transaction management in Wave' and lists specific entity types and operations. This distinguishes it from sibling tools like 'account' or 'report'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. It lists operations but lacks context about when not to use it or how it compares to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v1.0.0- First observed
account - First observed
item - First observed
party - First observed
reference - First observed
report - First observed
transaction
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.
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
MCP server for Quaderno — tax-rate calculation, invoices, contacts, products, receipts & expenses.
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 gradedqualityDmaintenanceThis 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.3MIT
- FlicenseNot 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.4-
- FlicenseBqualityCmaintenanceA complete MCP server for Wave Accounting, providing comprehensive access to invoicing, customers, products, transactions, bills, estimates, taxes, and financial reporting.54-