Wave MCP Server
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.
README
Wave MCP Server
A complete Model Context Protocol (MCP) server for Wave Accounting, providing comprehensive access to invoicing, customers, products, transactions, bills, estimates, taxes, and financial reporting.
Features
š§ 45+ Tools across 10 categories:
Invoices (10 tools)
- List, get, create, update, delete invoices
- Send invoices via email
- Approve and mark invoices as sent
- List and record invoice payments
Customers (6 tools)
- List, get, create, update, delete customers
- Search customers by name or email
Products (5 tools)
- List, get, create, update, archive products and services
- Filter by sold/bought status
Accounts (4 tools)
- List, get, create, update chart of accounts
- Filter by account type (ASSET, LIABILITY, EQUITY, INCOME, EXPENSE)
Transactions (6 tools)
- List, get, create, update transactions
- Categorize transactions to accounts
- List transaction attachments
Bills (7 tools)
- List, get, create, update bills (accounts payable)
- List and record bill payments
Estimates (6 tools)
- List, get, create, update, send estimates
- Convert estimates to invoices
Taxes (3 tools)
- List, get, create sales taxes
Businesses (3 tools)
- List businesses
- Get current or specific business details
Reporting (5 tools)
- Profit & Loss (Income Statement)
- Balance Sheet
- Aged Receivables (A/R Aging)
- Tax Summary
- Cashflow Statement
š± 17 MCP Apps - Pre-built UI workflows:
- invoice-dashboard - Overview of invoices with status breakdown
- invoice-detail - Detailed invoice view with payments and actions
- invoice-builder - Create/edit invoices with line items
- customer-detail - Customer profile with invoice history
- customer-grid - Searchable customer grid
- product-catalog - Product/service management
- chart-of-accounts - Account tree view
- transaction-feed - Real-time transaction stream
- transaction-categorizer - Bulk transaction categorization
- bill-manager - Track and pay bills
- estimate-builder - Create and manage quotes
- tax-overview - Tax configuration and summary
- profit-loss - P&L report with visualization
- balance-sheet - Balance sheet report
- cashflow-chart - Cashflow waterfall chart
- aging-report - Aged receivables report
- business-overview - Business dashboard with quick actions
Installation
cd servers/wave
npm install
npm run build
Configuration
Prerequisites
- Wave Account: You need a Wave account at waveapps.com
- API Access Token: Get an OAuth2 access token from Wave Developer Portal
Environment Variables
# Required
WAVE_ACCESS_TOKEN=your_oauth2_access_token
# Optional - set a default business ID
WAVE_BUSINESS_ID=your_business_id
Usage
As MCP Server
Run the server:
WAVE_ACCESS_TOKEN=your_token npm run dev
With Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"wave": {
"command": "node",
"args": ["/path/to/mcpengine-repo/servers/wave/build/main.js"],
"env": {
"WAVE_ACCESS_TOKEN": "your_access_token",
"WAVE_BUSINESS_ID": "optional_business_id"
}
}
}
}
With NPX
npx @mcpengine/wave-server
Tool Examples
List Invoices
// List all invoices
wave_list_invoices({ businessId: "business_123" })
// Filter by status
wave_list_invoices({
businessId: "business_123",
status: "OVERDUE"
})
// Filter by customer
wave_list_invoices({
businessId: "business_123",
customerId: "customer_456"
})
Create Invoice
wave_create_invoice({
businessId: "business_123",
customerId: "customer_456",
invoiceDate: "2025-01-15",
dueDate: "2025-02-15",
title: "January Services",
items: [
{
description: "Consulting Services",
quantity: 10,
unitPrice: "150.00",
taxIds: ["tax_789"]
},
{
productId: "product_101",
description: "Software License",
quantity: 1,
unitPrice: "500.00"
}
]
})
Create Customer
wave_create_customer({
businessId: "business_123",
name: "Acme Corporation",
email: "billing@acme.com",
addressLine1: "123 Main Street",
city: "San Francisco",
provinceCode: "CA",
countryCode: "US",
postalCode: "94105"
})
Generate Reports
// Profit & Loss
wave_profit_and_loss({
businessId: "business_123",
startDate: "2025-01-01",
endDate: "2025-01-31"
})
// Balance Sheet
wave_balance_sheet({
businessId: "business_123",
asOfDate: "2025-01-31"
})
// Aged Receivables
wave_aged_receivables({
businessId: "business_123",
asOfDate: "2025-01-31"
})
API Architecture
GraphQL-Based
Wave uses a GraphQL API, not REST. The server handles:
- Authentication: OAuth2 Bearer token
- Error Handling: GraphQL error parsing and network error detection
- Type Safety: Full TypeScript types for all Wave entities
- Pagination: Automatic page handling for large result sets
Client Implementation
// client.ts
import { GraphQLClient } from 'graphql-request';
const client = new GraphQLClient('https://gql.waveapps.com/graphql/public', {
headers: {
Authorization: `Bearer ${accessToken}`
}
});
Tool Organization
src/tools/
āāā invoices-tools.ts # 10 tools for invoice management
āāā customers-tools.ts # 6 tools for customer management
āāā products-tools.ts # 5 tools for product/service catalog
āāā accounts-tools.ts # 4 tools for chart of accounts
āāā transactions-tools.ts # 6 tools for transaction management
āāā bills-tools.ts # 7 tools for bills payable
āāā estimates-tools.ts # 6 tools for estimates/quotes
āāā taxes-tools.ts # 3 tools for sales tax management
āāā businesses-tools.ts # 3 tools for business info
āāā reporting-tools.ts # 5 tools for financial reports
Type System
Complete TypeScript types for all Wave entities:
// types/index.ts
export interface Invoice {
id: string;
invoiceNumber: string;
customer: Customer;
status: 'DRAFT' | 'SENT' | 'VIEWED' | 'PAID' | 'PARTIAL' | 'OVERDUE' | 'APPROVED';
items: InvoiceItem[];
total: Money;
amountDue: Money;
amountPaid: Money;
// ... full type definitions
}
Error Handling
The server provides comprehensive error handling:
try {
const invoice = await wave_get_invoice({ invoiceId: "inv_123" });
} catch (error) {
// GraphQL errors
if (error.graphQLErrors) {
console.error('GraphQL errors:', error.graphQLErrors);
}
// Network errors
if (error.networkError) {
console.error('Network error:', error.networkError);
}
// HTTP status codes
if (error.statusCode) {
console.error('HTTP status:', error.statusCode);
}
}
MCP Apps
Apps are accessed via resources:
// List all apps
const apps = await readResource({ uri: "wave://apps" });
// Load specific app
const invoiceDashboard = await readResource({
uri: "wave://apps/invoice-dashboard"
});
Each app includes:
- Display name and description
- Default tools to load
- Layout configuration for UI rendering
- Workflow steps (for process-driven apps)
Development
Build
npm run build
Watch Mode
npm run watch
Type Checking
npx tsc --noEmit
License
MIT
Links
Contributing
Contributions welcome! Please see the main MCPEngine repository for guidelines.
Support
For issues or questions:
- Wave API issues: Wave Developer Support
- MCP Server issues: GitHub Issues
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.