- DELETE old single-file stub, rebuild from scratch - GraphQL API client with OAuth2 Bearer auth and error handling - 45+ tools across 10 categories: * invoices-tools.ts (10): list, get, create, update, delete, send, approve, mark sent, list/create payments * customers-tools.ts (6): list, get, create, update, delete, search * products-tools.ts (5): list, get, create, update, archive * accounts-tools.ts (4): list, get, create, update (chart of accounts) * transactions-tools.ts (6): list, get, create, update, categorize, list attachments * bills-tools.ts (7): list, get, create, update, list/create payments * estimates-tools.ts (6): list, get, create, update, send, convert to invoice * taxes-tools.ts (3): list, get, create * businesses-tools.ts (3): list, get, get current * reporting-tools.ts (5): P&L, balance sheet, aged receivables, tax summary, cashflow - 17 MCP apps: invoice-dashboard, invoice-detail, invoice-builder, customer-detail, customer-grid, product-catalog, chart-of-accounts, transaction-feed, transaction-categorizer, bill-manager, estimate-builder, tax-overview, profit-loss, balance-sheet, cashflow-chart, aging-report, business-overview - Complete TypeScript types for all Wave API entities - Full MCP server implementation (server.ts, main.ts) - Comprehensive README with examples and API documentation - Clean build, ready for production use
363 lines
8.1 KiB
Markdown
363 lines
8.1 KiB
Markdown
# 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:
|
|
|
|
1. **invoice-dashboard** - Overview of invoices with status breakdown
|
|
2. **invoice-detail** - Detailed invoice view with payments and actions
|
|
3. **invoice-builder** - Create/edit invoices with line items
|
|
4. **customer-detail** - Customer profile with invoice history
|
|
5. **customer-grid** - Searchable customer grid
|
|
6. **product-catalog** - Product/service management
|
|
7. **chart-of-accounts** - Account tree view
|
|
8. **transaction-feed** - Real-time transaction stream
|
|
9. **transaction-categorizer** - Bulk transaction categorization
|
|
10. **bill-manager** - Track and pay bills
|
|
11. **estimate-builder** - Create and manage quotes
|
|
12. **tax-overview** - Tax configuration and summary
|
|
13. **profit-loss** - P&L report with visualization
|
|
14. **balance-sheet** - Balance sheet report
|
|
15. **cashflow-chart** - Cashflow waterfall chart
|
|
16. **aging-report** - Aged receivables report
|
|
17. **business-overview** - Business dashboard with quick actions
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
cd servers/wave
|
|
npm install
|
|
npm run build
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Prerequisites
|
|
|
|
1. **Wave Account**: You need a Wave account at [waveapps.com](https://waveapps.com)
|
|
2. **API Access Token**: Get an OAuth2 access token from [Wave Developer Portal](https://developer.waveapps.com/)
|
|
|
|
### Environment Variables
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
WAVE_ACCESS_TOKEN=your_token npm run dev
|
|
```
|
|
|
|
### With Claude Desktop
|
|
|
|
Add to your `claude_desktop_config.json`:
|
|
|
|
```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
|
|
|
|
```bash
|
|
npx @mcpengine/wave-server
|
|
```
|
|
|
|
## Tool Examples
|
|
|
|
### List Invoices
|
|
|
|
```typescript
|
|
// 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
|
|
|
|
```typescript
|
|
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
|
|
|
|
```typescript
|
|
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
|
|
|
|
```typescript
|
|
// 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
|
|
|
|
```typescript
|
|
// 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:
|
|
|
|
```typescript
|
|
// 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:
|
|
|
|
```typescript
|
|
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:
|
|
|
|
```typescript
|
|
// 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
|
|
|
|
```bash
|
|
npm run build
|
|
```
|
|
|
|
### Watch Mode
|
|
|
|
```bash
|
|
npm run watch
|
|
```
|
|
|
|
### Type Checking
|
|
|
|
```bash
|
|
npx tsc --noEmit
|
|
```
|
|
|
|
## License
|
|
|
|
MIT
|
|
|
|
## Links
|
|
|
|
- [Wave Developer Portal](https://developer.waveapps.com/)
|
|
- [Wave GraphQL API Docs](https://developer.waveapps.com/hc/en-us/articles/360019762711)
|
|
- [MCP Protocol Specification](https://modelcontextprotocol.io/)
|
|
- [MCPEngine Repository](https://github.com/BusyBee3333/mcpengine)
|
|
|
|
## Contributing
|
|
|
|
Contributions welcome! Please see the main [MCPEngine repository](https://github.com/BusyBee3333/mcpengine) for guidelines.
|
|
|
|
## Support
|
|
|
|
For issues or questions:
|
|
- Wave API issues: [Wave Developer Support](https://developer.waveapps.com/hc/en-us)
|
|
- MCP Server issues: [GitHub Issues](https://github.com/BusyBee3333/mcpengine/issues)
|