Connect Exact Online to Claude: Sync Inventory, Stock & Manufacturing
A definitive engineering guide to connecting Exact Online to Claude via an MCP server to automate inventory, manufacturing, and stock workflows.
If you need to connect Exact Online to Claude to automate inventory allocation, manage shop orders, or streamline warehouse logistics, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's tool calls and Exact Online's complex REST APIs. You can either build and maintain this infrastructure yourself, or use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL.
If your team uses ChatGPT, check out our guide on connecting Exact Online to ChatGPT or explore our broader architectural overview on connecting Exact Online to AI Agents.
Giving a Large Language Model (LLM) read and write access to a sprawling ERP and accounting ecosystem like Exact Online is a serious engineering challenge. You have to handle OAuth 2.0 token lifecycles, manage dynamic division IDs, map OData JSON schemas to MCP tool definitions, and deal with Exact Online's strict API quotas. Every time Exact updates an endpoint or deprecates a legacy data model, you have to update your server code, redeploy, and test the integration.
This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Exact Online, connect it natively to Claude Desktop, and execute complex supply chain and manufacturing workflows using natural language.
The Engineering Reality of the Exact Online API
A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, the reality of implementing it against Exact Online's APIs is painful. You are not just integrating a simple REST API - you are interfacing with a massive, highly normalized OData architecture that powers multi-company ERP systems.
If you decide to build a custom Exact Online MCP server, here are the specific integration challenges you will face:
Mandatory Division Routing
Almost every endpoint in the Exact Online API requires a division ID in the URL path (e.g., /api/v1/{division}/inventory/ItemWarehouses). A single Exact Online user might have access to multiple divisions (companies or branches). An LLM has no inherent context on which division to use. Your MCP server must inject the correct division ID into the API path for every tool call based on the authenticated context, hiding this complexity from Claude to prevent hallucinated URLs.
OData Pagination and Cursors
Exact Online handles large datasets (like bulk inventory lists) using OData-style pagination. Instead of standard page and limit parameters, the API returns a __next link containing a deeply nested URL with skip tokens. By default, Exact caps responses at 60 rows per page. If your AI agent needs to retrieve a full stock report, it must parse and follow these __next cursors iteratively. Truto handles this by normalizing Exact's pagination into standard limit and next_cursor flat parameters, instructing the LLM to pass cursors back unchanged.
Rate Limits and 429 Handling
Exact Online enforces strict rate limits (typically minutely and daily caps) that are dynamically returned in API headers. It is critical to understand that Truto does not retry, throttle, or apply backoff on rate limit errors. When Exact Online returns an HTTP 429, Truto passes that error directly to the caller. However, Truto does normalize the upstream rate limit information into standardized IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). Your client application (or Claude's underlying retry logic) is completely responsible for handling the backoff strategy when limits are hit.
Creating the Exact Online MCP Server
To bridge Claude and Exact Online, you need to generate an MCP server URL scoped to a specific Exact Online account. Truto allows you to generate this dynamic server using either the web UI or the REST API.
Method 1: Via the Truto UI
For ad-hoc agent testing and internal automation, the Truto dashboard provides a point-and-click interface to generate MCP URLs.
- Navigate to the Integrated Accounts page in your Truto dashboard and select your connected Exact Online account.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration. You can filter by methods (e.g., read-only) or tags (e.g., logistics, inventory) to limit the tools the LLM can access.
- Copy the generated MCP server URL (e.g.,
https://api.truto.one/mcp/a1b2c3d4e5f6...).
Method 2: Via the Truto API
For production applications, you will want to generate these servers programmatically. By making a POST request to /integrated-account/:id/mcp, Truto generates a cryptographically secure token stored in low-latency KV infrastructure.
curl -X POST https://api.truto.one/api/integrated-account/{integrated_account_id}/mcp \
-H "Authorization: Bearer YOUR_TRUTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Exact Online Supply Chain Agent",
"config": {
"methods": ["read", "write", "custom"],
"tags": ["inventory", "production", "wms"]
},
"expires_at": "2026-12-31T23:59:59Z"
}'This API call dynamically builds the tool definitions based on the Exact Online integration schemas and returns a ready-to-use URL that requires no further authentication on the client side.
Connecting the MCP Server to Claude
Once you have your Truto MCP URL, connecting it to Claude takes less than a minute. You can configure this via the Claude UI or through a manual configuration file.
Method A: Via the Claude UI
If you are using Claude's web interface or a platform that supports UI-based MCP configuration (like ChatGPT's advanced settings):
- In Claude, navigate to Settings → Integrations → Add MCP Server.
- Paste your Truto MCP URL.
- Click Add. Claude will instantly send an
initializerequest to Truto, fetching the full suite of Exact Online tools.
Method B: Via Manual Configuration File
If you are running Claude Desktop locally or configuring an agentic framework programmatically, you can add the server to your claude_desktop_config.json file. Because Truto MCP servers use HTTP POST for JSON-RPC 2.0 communication (Server-Sent Events), you use the official MCP SSE transport module.
{
"mcpServers": {
"exact_online": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"https://api.truto.one/mcp/a1b2c3d4e5f6..."
]
}
}
}Restart Claude Desktop. When you start a new conversation, you will see the Exact Online tools populated in Claude's tool menu.
Exact Online Hero Tools for Claude
Truto automatically generates highly descriptive snake_case tools from Exact Online's underlying OData endpoints. Because all input arguments are flattened into a single JSON schema, Claude can effortlessly map natural language to the correct query parameters and request bodies.
Here are the highest-leverage tools for automating inventory, stock, and manufacturing workflows in Exact Online.
1. list_all_exact_online_stock_position
Retrieve item stock levels and projected stock levels based on planned movements (sales orders, shop orders, purchase orders). This is the foundational tool for AI agents managing supply chains.
"Claude, check our current stock position for item SKU 'WHEEL-001' and tell me if our projected stock is sufficient to cover our open sales orders."
2. list_all_exact_online_items
Read the master item catalog. This tool allows the LLM to map natural language product names to exact Item IDs, Unit Codes, and pricing details required for subsequent manufacturing and sales operations.
"Find the exact Item ID and default warehouse location for the 'Industrial Steel Bearings' in our catalog."
3. create_a_exact_online_warehouse_transfer
Trigger a draft warehouse transfer. When stock is low in an active distribution center, Claude can use this tool to stage inventory movements from a primary holding facility.
"Create a warehouse transfer moving 500 units of item 'BOX-05' from the Main Warehouse to the Retail Fulfillment Center. Set the entry date for tomorrow."
4. create_a_exact_online_shop_order
Create an order to manufacture (make) an item. This initiates the production lifecycle in Exact Online, allocating the required components based on the Bill of Materials (BOM) linked to the item.
"We need to restock our custom bicycles. Create a shop order for 50 units of item 'BIKE-PRO-X' and assign it to the assembly department."
5. list_all_exact_online_sales_orders
Retrieve current sales orders to evaluate demand. Claude can filter these by status to determine which items need to be rushed in production or prioritized for dropshipping.
"List all open sales orders from the past week that include item 'BATTERY-PACK'. Are there any orders pending fulfillment?"
6. create_a_exact_online_goods_delivery
Process the delivery of goods for a sales order. This tool allows the LLM to complete the fulfillment cycle, adjusting actual stock quantities down once items are confirmed shipped.
"Process a goods delivery for Sales Order ID 'ORD-99120'. Mark the delivery date as today and confirm the quantity delivered matches the order."
To view the comprehensive inventory of tools available for Exact Online—including HRM, financial accounting, and CRM operations—visit the Exact Online integration page.
Workflows in Action
MCP tools are most powerful when chained together. Because Truto flattens the query and body schemas, Claude can easily extract IDs from one tool response and pass them as payload parameters to the next.
Here are two concrete examples of how Claude executes domain-specific Exact Online supply chain workflows.
Workflow 1: Automated Manufacturing Restock
When a sales representative notices low inventory on a popular manufactured product, they can ask Claude to evaluate the situation and kick off production if necessary.
"Check the stock position for 'Custom Drone Frame v2'. If the projected stock is below 10 units, create a new shop order to manufacture 25 more units."
How the agent executes this:
- Find the Item ID: Claude calls
list_all_exact_online_itemswith a query for "Custom Drone Frame v2" to retrieve the Exact OnlineItemID. - Check Stock Position: Claude calls
list_all_exact_online_stock_positionusing the extracteditemId. - Evaluate Logic: Claude analyzes the JSON response, specifically looking at the projected stock level.
- Create Shop Order: Seeing the stock is at 4 units, Claude calls
create_a_exact_online_shop_order, passing theItemIDandPlannedQuantity: 25into the body schema.
sequenceDiagram
participant User
participant Claude as Claude Desktop
participant MCP as Truto MCP Server
participant Exact as Exact Online API
User->>Claude: "Restock Custom Drone Frame v2 if < 10"
Claude->>MCP: Call list_all_exact_online_items
MCP->>Exact: GET /api/v1/{div}/logistics/Items
Exact-->>MCP: Return ItemID
MCP-->>Claude: Return ItemID
Claude->>MCP: Call list_all_exact_online_stock_position
MCP->>Exact: GET /api/v1/{div}/read/logistics/StockPosition
Exact-->>MCP: Stock = 4
MCP-->>Claude: Stock = 4
Claude->>MCP: Call create_a_exact_online_shop_order (Qty: 25)
MCP->>Exact: POST /api/v1/{div}/manufacturing/ShopOrders
Exact-->>MCP: Shop Order Created (201)
MCP-->>Claude: Success Confirmation
Claude-->>User: "Shop order for 25 units has been created."Workflow 2: Warehouse Transfer for Sales Fulfillment
When sales outpace local warehouse inventory, Claude can audit open sales orders and stage warehouse transfers to ensure timely fulfillment.
"Find all open sales orders for 'Premium Coffee Beans'. Check the stock in the 'East Coast Hub'. If it can't cover the open orders, stage a warehouse transfer from the 'Central Distribution' warehouse to cover the deficit."
How the agent executes this:
- Fetch Open Orders: Claude calls
list_all_exact_online_sales_ordersfiltering by the item description to calculate total pending demand (e.g., 200 units). - Audit Local Inventory: Claude calls
list_all_exact_online_item_warehouse_storage_locationsto check the exact stock of coffee beans in the East Coast Hub (e.g., 50 units). - Calculate Deficit: The model calculates a deficit of 150 units.
- Execute Transfer: Claude calls
create_a_exact_online_warehouse_transferpassingWarehouseFrom(Central),WarehouseTo(East Coast), and injectingcreate_a_exact_online_warehouse_transfer_linedata for the 150 units required.
Security and Access Control
Giving AI models write access to an ERP requires strict governance. Truto MCP servers are highly configurable, ensuring that your agents only interact with the exact endpoints they need.
- Method Filtering: Enforce read-only access by passing
methods: ["read"]during server creation. This allows the model to query inventory and sales orders but completely prevents it from executingcreate,update, ordeleteoperations. - Tag Filtering: Restrict the server to specific domains. By setting
tags: ["inventory", "wms"], you prevent the AI from accidentally accessing Exact Online's HRM, payroll, or financial accounting tools. - Time-to-Live (TTL): Create ephemeral MCP servers by setting an
expires_attimestamp. Once expired, Truto's Durable Object alarms automatically clean up the database records and KV entries, revoking access immediately. - Secondary Authentication: Enable
require_api_token_auth: true. This requires the client connecting to the MCP URL to also supply a valid Truto API token in theAuthorizationheader, adding a strict layer of defense if the MCP URL is ever leaked.
Summary
Integrating Exact Online with AI agents natively requires navigating complex OData syntax, dynamic division IDs, and rigorous rate limit handling. By leveraging a managed MCP server via Truto, you abstract away the API boilerplate.
Truto dynamically parses Exact Online's schemas into clean, flat JSON-RPC tools, standardizes rate limit headers, and manages the underlying OAuth lifecycles. This allows your engineering team to focus on prompt engineering and agent architecture, while Claude handles the heavy lifting of inventory, stock, and manufacturing automation.
FAQ
- How does Truto handle Exact Online rate limits?
- Truto does not retry, throttle, or apply backoff on rate limit errors. If Exact Online returns an HTTP 429, Truto passes that error directly to the caller and standardizes the upstream limits into IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). The caller is responsible for retry logic.
- How does Truto manage Exact Online's OData pagination?
- Exact Online relies heavily on __next links with skip tokens. Truto normalizes this complex pagination into standard limit and next_cursor parameters within the MCP tool schema, allowing Claude to easily paginate through large datasets.
- Can I restrict Claude to read-only access in Exact Online?
- Yes. When generating the MCP server via the Truto UI or API, you can apply method filters like `methods: ["read"]`. This limits Claude to get and list operations, blocking any write access.
- How do I deal with Exact Online Division IDs?
- Truto handles division-based routing automatically based on the authenticated integrated account. The MCP server ensures the correct division ID is securely injected into the API path for every tool call.