Skip to main content
Glama
Wave MCP Server

Wave MCP Server

by hvkshetry

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 sse

Related MCP server: waveapps-mcp

Configuration

Variable

Description

WAVE_ACCESS_TOKEN

Full Access token from Wave app settings

WAVE_BUSINESS_ID

Set automatically by auth_flow.py, or manually

Tools & Operations

account — Chart of Accounts

Operation

Description

list

List accounts with optional type/subtype filters, pagination

get

Get account by ID

create

Create account (name, subtype, currency, description)

update

Update account fields

archive

Archive an account

search

Client-side name search

party — Customers & Vendors

Operation

Customer

Vendor

list

Yes

Yes

get

Yes

Yes

create

Yes

Read-only

update

Yes

Read-only

delete

Yes

Read-only

search

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_summary

Business info + accounts grouped by type with counts

account_balances

All accounts with name, type, balance, balanceInBusinessCurrency

customer_balances

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 tools
accountA

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

partyA
Destructive

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

reportA
Read-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

transactionA
Destructive

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

    A4/5.0

    Scored across 6 tools

    Disambiguation4/5

    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.

    Naming Consistency3/5

    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.

    Tool Count5/5

    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.

    Completeness4/5

    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

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      This 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=beta
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      This 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.
      7
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Comprehensive 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.
      5
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      A complete MCP server for Wave Accounting, providing comprehensive access to invoicing, customers, products, transactions, bills, estimates, taxes, and financial reporting.
      54
      MIT