@bossforce.ai/mcp-wave
v0.1.0
Published
MCP server for the [Wave](https://www.waveapps.com/) **GraphQL API**. List businesses and invoices and create customers and invoices in a Wave account. Authenticated with OAuth2 using the refresh-token grant; the server exchanges a refresh token for short
Readme
@bossforce.ai/mcp-wave
MCP server for the Wave GraphQL API. List businesses and invoices and create customers and invoices in a Wave account. Authenticated with OAuth2 using the refresh-token grant; the server exchanges a refresh token for short-lived access tokens itself.
Credentials
| Env | How to obtain |
| -------------------- | ------------------------------------------------------------------------------ |
| WAVE_CLIENT_ID | Client id of the Wave app (provided by the platform as the OAuth client_id). |
| WAVE_CLIENT_SECRET | Client secret of the Wave app (the OAuth client_secret). |
| WAVE_REFRESH_TOKEN | Obtained automatically when you authorize access. Exchanged for access tokens. |
The credentials are read lazily, so the server boots and answers tools/list
without them; calls fail with an auth error until they are set. On the first
call the client POSTs the refresh token to
https://api.waveapps.com/oauth2/token/ (grant_type=refresh_token, with
client_id, client_secret and refresh_token form-encoded), caches the
returned access_token, and re-fetches once on a 401. The GraphQL API is at
https://gql.waveapps.com/graphql/public and, like most GraphQL APIs, reports
failures in an errors[] array even on HTTP 200.
Tools
| Tool | Arguments | Returns |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| list_businesses | — | the businesses on the account |
| list_invoices | business_id, page?, page_size? | a business's invoices |
| create_customer | business_id, name, first_name?, last_name?, email?, currency? | the customerCreate result |
| create_invoice | business_id, customer_id, items[], status?, title?, invoice_number?, invoice_date?, due_date?, memo? | the invoiceCreate result |
Use list_businesses to resolve the business_id the other tools need.
create_invoice references the customer by id and each line item by
product_id, and creates the invoice as a DRAFT or SAVED invoice; approving
and sending an invoice are separate Wave operations. Mutations return Wave's
didSucceed flag plus any inputErrors, surfaced as structuredContent.
Develop
pnpm --filter @bossforce.ai/mcp-wave build
pnpm --filter @bossforce.ai/mcp-wave test