Workadu MCP Server
OfficialThe Workadu MCP Server lets AI assistants manage Workadu business data through MCP tools.
Orders/Bookings: list, get, create, update, delete/cancel, and email orders with status/customer/date filters.
Customers: list/search, get, create, and update customer records.
Services/Products: list, get, create, update, and delete services.
Invoices: list/get invoices, create draft invoices with or without line items, add lines, update drafts, publish/finalize, list series, and manage withholdings.
Payments: list/get payments and create new payments.
Assets (DCL): list, get, create, update, and delete assets.
Asset Movements: list/get movements, create, close, cancel, and resend notifications.
Configuration/Auth: connects to a Workadu instance using API URL and API key via MCP client config.
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., "@Workadu MCP Servershow my top 10 customers by revenue"
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.
Workadu MCP Server
MCP (Model Context Protocol) server for Workadu โ enables AI assistants to interact with your Workadu data through natural language.
What is this?
This server exposes Workadu's API as MCP tools, allowing AI assistants like Claude, Cursor, and others to:
๐ฆ Manage Orders/Bookings โ list, create, update, cancel orders
๐ฅ Manage Customers โ search, create, update customer records
๐ Manage Services โ CRUD operations on services/products
๐งพ Manage Invoices โ create, publish, add lines, manage withholdings
๐ฐ Manage Payments โ list and create payments
๐ฆ Manage Assets โ CRUD operations on assets (DCL module)
๐ Manage Asset Movements โ create, close, cancel dispatch notes
Related MCP server: MCP Server for Odoo
Prerequisites
Node.js >= 18.0.0
A Workadu account with API access enabled
Your Workadu API key (from CompanyUser settings)
Installation
# Clone the repository
git clone https://github.com/workadu/mcp-server.git
cd mcp-server
# Install dependencies
npm install
# Build
npm run buildConfiguration
The server requires two environment variables:
Variable | Description | Example |
| Your Workadu instance URL |
|
| Your API key |
|
Copy .env.example to .env and fill in your values:
cp .env.example .envUsage
With Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"workadu": {
"command": "node",
"args": ["/absolute/path/to/mcp-server/dist/index.js"],
"env": {
"WORKADU_API_URL": "https://your-app.workadu.com",
"WORKADU_API_KEY": "your-api-key-here"
}
}
}
}With Cursor
Add to your Cursor MCP settings (.cursor/mcp.json):
{
"mcpServers": {
"workadu": {
"command": "node",
"args": ["/absolute/path/to/mcp-server/dist/index.js"],
"env": {
"WORKADU_API_URL": "https://your-app.workadu.com",
"WORKADU_API_KEY": "your-api-key-here"
}
}
}
}Testing with MCP Inspector
npm run inspectThis opens the MCP Inspector UI where you can test all tools interactively.
Direct execution
WORKADU_API_URL=https://your-app.workadu.com \
WORKADU_API_KEY=your-api-key \
npm startAvailable Tools
Orders/Bookings
Tool | Description |
| List orders/bookings with filters (date, status, customer) |
| Get order details by ID |
| Create a new booking/order |
| Update an existing order |
| Cancel/delete an order |
| Send order confirmation email |
Customers
Tool | Description |
| List customers (paginated, searchable) |
| Get customer details by ID |
| Create a new customer |
| Update an existing customer |
Services
Tool | Description |
| List services/products |
| Get service details by ID |
| Create a new service |
| Update an existing service |
| Delete a service |
Invoices
Tool | Description |
| List invoices with filters |
| Get invoice details by ID |
| Create a new invoice |
| Create invoice with line items |
| Add a line to existing invoice |
| Update an existing invoice |
| Publish/finalize a draft invoice |
| List invoice series |
| List withholdings for an invoice |
| Add withholding to an invoice |
Payments
Tool | Description |
| List payments |
| Create a new payment |
Invoice creation and update accept optional payment_type: the Workadu payment
series ID returned by list_series, rather than an AADE payment method code.
create_invoice_with_lines also accepts these optional inputs:
related_invoice_id: a string of comma-separated original invoice IDs, e.g."123"or"123,456".tags: an array of tag names or an array of existing tag IDs.referrer_unique_id: an external reference for the REST API's duplicate detection.
The tool sends customer_id as customer.id and nests invoice fields under
invoice, including currency_iso as REST currency. Line unit_price is
sent as amount, and optional discount_percent as line_discount.
This endpoint does not support service_id or admin_notes.
update_invoice accepts optional tags as comma-separated tag names. This
replaces the invoice's tags, so include existing tags that should be kept.
The REST endpoint does not support clearing all tags with an empty string.
Updating contact tags still requires a REST API change.
update_invoice also accepts transporter_id, shipping_address,
dispatch_date (YYYY-MM-DD), and dispatch_time (HH:mm:ss). Automatic payment
and editing/deleting invoice lines still require REST API support.
publish_invoice accepts optional aade_send and send.
Set aade_send: true to explicitly request myDATA
submission, including for an already VALID invoice. Omitted options remain
omitted from the REST request. Check the returned meta.myData or pending POS
response; HTTP success alone does not confirm AADE acceptance.
Invoice and payment listing map from_date/to_date to REST
issue_date_from/issue_date_to. Invoice date filtering requires both bounds.
Payments can also be filtered by customer_id. Both tools accept sort
(prefix the field with - for descending), but invoice sorting affects only
the current page. The invoice REST endpoint still fixes page size at 100.
Customer search is sent using the REST filter[search_term] parameter.
Customer balance and configurable invoice pagination/global sorting still
require REST API changes.
create_payment accepts optional invoice_ids as a comma-separated string.
For all payments, it sends amount as REST deposit, series_id as REST
series, and optional comments as REST comment. Choose the appropriate
payment or refund series; invoice_ids links the payment to those invoices.
The current REST endpoint assigns the creation date and the company's currency,
regardless of the supplied issue_date and currency_iso; backdated payments
require REST API support.
Assets (DCL)
Tool | Description |
| List assets |
| Get asset details by ID |
| Create a new asset |
| Update an existing asset |
| Delete an asset |
Asset Movements (DCL)
Tool | Description |
| List asset movements |
| Get movement details by ID |
| Create a new movement |
| Close/finalize a movement |
| Cancel a movement |
| Resend movement notification |
Development
# Watch mode (auto-recompile on changes)
npm run dev
# Type checking
npm run lint
# Build
npm run build
Architecture
src/
โโโ index.ts # Entry point โ MCP Server init
โโโ config.ts # Environment config
โโโ client/
โ โโโ workadu-client.ts # HTTP client for Workadu Dingo API
โโโ tools/
โ โโโ index.ts # Tool registry
โ โโโ orders.ts # Order/booking tools
โ โโโ customers.ts # Customer tools
โ โโโ services.ts # Service tools
โ โโโ invoices.ts # Invoice tools
โ โโโ payments.ts # Payment tools
โ โโโ assets.ts # Asset tools
โ โโโ asset-movements.ts # Asset movement tools
โโโ types/
โโโ workadu.ts # TypeScript type definitionsAuthentication
The server authenticates with Workadu using the existing API key mechanism:
Sends
Authorization: Basic base64(api_key:)headerSends Dingo version header:
Accept: application/vnd.rengine.v2+jsonAll API calls are automatically scoped to the company associated with the API key
License
UNLICENSED โ Proprietary Workadu software
Available Tools
38 toolsadd_invoice_lineB
Add a line item to an existing draft invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | The invoice ID to add the line to | |
| description | Yes | Line item description | |
| quantity | Yes | Quantity | |
| unit_price | Yes | Unit price | |
| vat_percent | Yes | VAT percentage (e.g. 24 for 24%) | |
| discount_percent | No | Discount percentage (0-100) | |
| service_id | No | Optional service/product ID to link |
cancel_asset_movementC
Cancel an asset movement in Workadu.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The asset movement ID to cancel |
close_asset_movementB
Close/finalize an asset movement in Workadu.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The asset movement ID to close |
create_assetB
Create a new asset (DCL module). Requires name and code.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the asset | |
| code | Yes | Unique code for the asset | |
| description | No | Description of the asset | |
| category_id | No | Category ID the asset belongs to |
create_asset_movementB
Create a new asset movement (dispatch note, transfer) in Workadu.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_id | Yes | The asset ID this movement is for | |
| type | Yes | Movement type | |
| quantity | No | Quantity of assets moved | |
| source | No | Source location | |
| destination | No | Destination location | |
| notes | No | Notes about the movement |
create_customerB
Create a new customer. Only fullname is required; all other fields are optional.
| Name | Required | Description | Default |
|---|---|---|---|
| fullname | Yes | Full name of the customer (required). | |
| No | Email address. | ||
| mobile | No | Mobile phone number. | |
| country | No | Country name or ISO code. | |
| city | No | City name. | |
| address | No | Street address. | |
| vat_number | No | VAT registration number. | |
| tax_office | No | Tax office name. | |
| postal_code | No | Postal / ZIP code. | |
| comments | No | Free-text comments about the customer. | |
| tag_names | No | Comma-separated tag names to assign. | |
| is_company_customer | No | Whether this is a company (B2B) customer. | |
| gender | No | Gender of the customer. | |
| title | No | Title / salutation (e.g. Mr, Mrs, Dr). | |
| company_name | No | Company name (for B2B customers). |
create_invoiceA
Create a new draft invoice (without lines). Use add_invoice_line to add lines, then publish_invoice to finalize.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_date | Yes | Issue date (YYYY-MM-DD) | |
| customer_id | Yes | Customer ID | |
| series_id | Yes | Invoice series ID (determines document type) | |
| includes_vat | No | Whether prices include VAT (default depends on series) | |
| currency_iso | No | ISO 4217 currency code (e.g. EUR, USD). Defaults to company currency. | |
| notes | No | Notes visible to customer | |
| admin_notes | No | Internal admin notes |
create_invoice_with_linesB
Create a new draft invoice with line items in a single call. Each line specifies a product/service, quantity, and pricing.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_date | Yes | Issue date (YYYY-MM-DD) | |
| customer_id | Yes | Customer ID | |
| series_id | Yes | Invoice series ID | |
| lines | Yes | Array of invoice line items (at least one required) | |
| includes_vat | No | Whether prices include VAT | |
| currency_iso | No | ISO 4217 currency code | |
| notes | No | Notes visible to customer | |
| admin_notes | No | Internal admin notes |
create_orderC
Create a new order/booking. Requires customer, service, and date range. Optionally specify pickup/return times, a comment, and a calendar color.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | ID of the customer for this booking | |
| service_id | Yes | ID of the service/vehicle being booked | |
| pickup_date | Yes | Pickup date in YYYY-MM-DD format | |
| return_date | Yes | Return date in YYYY-MM-DD format | |
| pickup_time | No | Pickup time in HH:MM format (24h) | |
| return_time | No | Return time in HH:MM format (24h) | |
| comment | No | Optional comment / notes for the booking | |
| color | No | Calendar color for the booking (e.g. "#FF5733") |
create_paymentC
Create a new payment. Requires issue date, customer, series, amount, and currency.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_date | Yes | Issue date of the payment (YYYY-MM-DD) | |
| customer_id | Yes | ID of the customer | |
| series_id | Yes | ID of the payment series | |
| amount | Yes | Payment amount | |
| currency_iso | Yes | ISO 4217 currency code (e.g. EUR, USD) | |
| currency_rate | No | Currency exchange rate (default: 1) | |
| comments | No | Comments for the payment | |
| order_id | No | Associated order/booking ID | |
| notes | No | Internal notes for the payment |
create_serviceB
Create a new service/product in Workadu. Title is required; other fields are optional.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Title of the service (required) | |
| description | No | Description of the service | |
| brand | No | Brand name | |
| category_id | No | Category ID | |
| type | No | Service type | |
| pax | No | Maximum capacity/pax | |
| min_pax | No | Minimum pax | |
| zone_id | No | Zone ID | |
| color | No | Calendar color (e.g. "#FF5733") |
create_withholdingB
Add a withholding tax deduction to an invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | The invoice ID to add the withholding to | |
| type | Yes | Withholding type (AADE tax type) | |
| category | Yes | Withholding category (AADE tax category) | |
| amount | No | Withholding amount (calculated from percent if not provided) | |
| percent | No | Withholding percentage |
delete_assetB
Delete an asset by ID (DCL module).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The asset ID to delete |
delete_orderB
Delete (cancel) an order/booking by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The order/booking ID to delete/cancel |
delete_serviceB
Delete a service/product from Workadu.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The service ID to delete |
email_orderB
Email an order/booking confirmation or details to a specified email address.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | The order/booking ID to email | |
| Yes | Recipient email address |
get_assetA
Retrieve a specific asset by ID (DCL module).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The asset ID to retrieve |
get_asset_movementB
Get details of a specific asset movement by ID from Workadu.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The asset movement ID |
get_customerA
Get a specific customer by ID. Returns full customer details including decrypted PII fields.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The customer ID. |
get_invoiceA
Get details of a specific invoice by ID, including lines, customer, and series info.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The invoice ID |
get_orderA
Get a specific order/booking by its ID, including sub-orders, customer info, and related data.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The order/booking ID |
get_serviceA
Get details of a specific service/product by ID, including rates, media, and attributes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The service ID |
list_asset_movementsB
List asset movements (dispatch notes, transfers) from Workadu. Supports pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination | |
| per_page | No | Number of results per page |
list_assetsA
List all assets (DCL module).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_customersA
List customers (paginated, 50 per page by default). Supports search by name/email/mobile.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Defaults to 1. | |
| per_page | No | Results per page (max 50). Defaults to 50. | |
| search | No | Search term to filter customers by name, email, or mobile. |
list_invoicesB
List invoices/documents with optional filters. Statuses: CANCELED=0, PUBLISHED=1, DRAFT=2, PREVIEW=99.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination | |
| per_page | No | Results per page | |
| status | No | Filter by status (0=Canceled, 1=Published, 2=Draft, 99=Preview) | |
| customer_id | No | Filter by customer ID | |
| from_date | No | Filter from date (YYYY-MM-DD) | |
| to_date | No | Filter to date (YYYY-MM-DD) | |
| series_id | No | Filter by invoice series ID |
list_ordersA
List orders/bookings with optional filters for status, customer, date range, and pagination. In Workadu, "orders" at the API level represent Bookings (top-level entities containing sub-orders/items).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination (default: 1) | |
| per_page | No | Results per page (default set by API, max 100) | |
| status | No | Filter by order status | |
| customer_id | No | Filter by customer ID | |
| from_date | No | Filter orders from this date (YYYY-MM-DD) | |
| to_date | No | Filter orders up to this date (YYYY-MM-DD) |
list_paymentsA
List payments or retrieve a specific payment by ID. Payment statuses: ACTIVE=1, DRAFT=2, FAILED=3, REFUNDED=4.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Optional payment ID to retrieve a specific payment | |
| page | No | Page number for pagination | |
| per_page | No | Number of results per page |
list_seriesB
List invoice series (document types). Series define the numbering and type of document (e.g. Invoice, Receipt, Credit Note).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Optional series ID to get a specific series |
list_servicesB
List all services/products from Workadu. Supports pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination | |
| per_page | No | Number of results per page |
list_withholdingsA
List withholding tax deductions for a specific invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | The invoice ID |
publish_invoiceA
Publish/finalize a draft invoice. WARNING: This is IRREVERSIBLE โ once published, the invoice is submitted to AADE (Greek tax authority) and cannot be edited.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | The draft invoice ID to publish/finalize |
resend_asset_movementC
Resend an asset movement notification in Workadu.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The asset movement ID to resend |
update_assetA
Update an existing asset by ID (DCL module). Only provided fields will be changed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The asset ID to update | |
| name | No | Updated name of the asset | |
| code | No | Updated code for the asset | |
| description | No | Updated description | |
| category_id | No | Updated category ID |
update_customerA
Update an existing customer by ID. Only the provided fields will be changed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The customer ID to update. | |
| fullname | No | Full name of the customer. | |
| No | Email address. | ||
| mobile | No | Mobile phone number. | |
| country | No | Country name or ISO code. | |
| city | No | City name. | |
| address | No | Street address. | |
| vat_number | No | VAT registration number. | |
| tax_office | No | Tax office name. | |
| postal_code | No | Postal / ZIP code. | |
| comments | No | Free-text comments about the customer. | |
| tag_names | No | Comma-separated tag names to assign. | |
| is_company_customer | No | Whether this is a company (B2B) customer. | |
| gender | No | Gender of the customer. | |
| title | No | Title / salutation (e.g. Mr, Mrs, Dr). | |
| company_name | No | Company name (for B2B customers). |
update_invoiceA
Update an existing draft invoice. Only the provided fields will be changed. Cannot update published invoices.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The invoice ID to update | |
| issue_date | No | Updated issue date (YYYY-MM-DD) | |
| customer_id | No | Updated customer ID | |
| series_id | No | Updated series ID | |
| includes_vat | No | Whether prices include VAT | |
| currency_iso | No | Updated currency ISO code | |
| notes | No | Updated customer-facing notes | |
| admin_notes | No | Updated internal admin notes | |
| due_date | No | Payment due date (YYYY-MM-DD) |
update_orderA
Update an existing order/booking. Only the fields you provide will be changed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The order/booking ID to update | |
| customer_id | No | New customer ID | |
| service_id | No | New service/vehicle ID | |
| pickup_date | No | New pickup date (YYYY-MM-DD) | |
| return_date | No | New return date (YYYY-MM-DD) | |
| pickup_time | No | New pickup time (HH:MM, 24h) | |
| return_time | No | New return time (HH:MM, 24h) | |
| comment | No | Updated comment / notes | |
| color | No | Updated calendar color |
update_serviceB
Update an existing service/product. Only the provided fields will be changed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The service ID to update | |
| title | No | Updated title | |
| description | No | Updated description | |
| brand | No | Updated brand name | |
| category_id | No | Updated category ID | |
| type | No | Updated service type | |
| pax | No | Updated max capacity | |
| min_pax | No | Updated min pax | |
| zone_id | No | Updated zone ID | |
| color | No | Updated calendar color |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
38 tool updates
v1.0.0- First observed
add_invoice_line - First observed
cancel_asset_movement - First observed
close_asset_movement - First observed
create_asset - First observed
create_asset_movement - First observed
create_customer - First observed
create_invoice - First observed
create_invoice_with_lines - First observed
create_order - First observed
create_payment - First observed
create_service - First observed
create_withholding - First observed
delete_asset - First observed
delete_order - First observed
delete_service - First observed
email_order - First observed
get_asset - First observed
get_asset_movement - First observed
get_customer - First observed
get_invoice - First observed
get_order - First observed
get_service - First observed
list_asset_movements - First observed
list_assets - First observed
list_customers - First observed
list_invoices - First observed
list_orders - First observed
list_payments - First observed
list_series - First observed
list_services - First observed
list_withholdings - First observed
publish_invoice - First observed
resend_asset_movement - First observed
update_asset - First observed
update_customer - First observed
update_invoice - First observed
update_order - First observed
update_service
TDQS
Scored across 38 tools
Each tool targets a distinct resource or action, with no overlapping functionality. Even similar tools like create_invoice and create_invoice_with_lines are for different use cases (step-by-step vs. one-shot).
All tools follow a consistent verb_noun pattern in lowercase with underscores (e.g., create_asset, list_invoices, update_customer). No mixing of styles.
38 tools is slightly above average, but the breadth of functionality (assets, customers, invoices, orders, payments, services) justifies the count. Each tool serves a clear purpose without redundancy.
CRUD operations are covered for most resources (assets, customers, services, orders, invoices). Minor gaps: no delete_customer or update/delete_payment, but invoice and order workflows are thorough.
Maintenance
Related MCP Connectors
Query your books, company data, business health, and ship invoices from your AI assistant.
Read, write and run Odoo actions from any AI app, as each user, with approval rules per colleague.
Connect AI to Odoo ERP 14-20: search, create, update and manage records in natural language.
Connect any AI assistant to Syncro: manage tickets, invoices, customers, assets, and more.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage business operations including invoicing, WooCommerce syncing, expense tracking, POS, inventory, and team management through natural language.20 npm2MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to securely access and interact with Odoo data through natural language, supporting full CRUD operations, OAuth 2.1 and API key authentication, and granular per-model permissions.-
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to securely access and perform CRUD operations on Odoo data through natural language, with granular permissions and dual REST/XML-RPC support.-
- AlicenseNot gradedqualityBmaintenanceEnables managing workspace products, inventory, orders, manufacturing, and traceability through natural language in AI assistants like ChatGPT, Codex, and Claude.2 npmMIT