Connect SkuVault to Claude: Sync Sales, Shipments & Order Status
Learn how to build a secure MCP server for SkuVault and connect it to Claude to automate inventory checks, order routing, and shipping workflows.
If your team needs to connect SkuVault to Claude to automate inventory cycle counts, update sales statuses, or track outbound shipments, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's LLM function calls and SkuVault's 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 SkuVault to ChatGPT or explore our broader architectural overview on connecting SkuVault to AI Agents.
Giving a Large Language Model (LLM) read and write access to a sprawling warehouse management system like SkuVault is an engineering challenge. You have to handle credential exchanges, map massive, deeply nested JSON schemas to MCP tool definitions, and deal with SkuVault's aggressive throttling quotas. Every time a new external warehouse is added or a bulk sync endpoint shifts requirements, you must 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 SkuVault, connect it natively to Claude Desktop, and execute complex supply chain workflows using natural language.
The Engineering Reality of the SkuVault 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 specialized B2B APIs is painful. SkuVault is built for high-volume inventory management, fulfillment routing, and multichannel sales tracking. Its API reflects that complexity.
If you decide to build a custom SkuVault MCP server, here are the specific integration challenges you will face:
Aggressive Throttling on Inventory Scans
SkuVault heavily throttles its primary inventory endpoints. Endpoints like list_all_sku_vault_inventory_item_quantities_by_warehouse are subject to strict limits because calculating real-time available quantities across hundreds of thousands of SKUs is computationally expensive for the upstream system. Fetching all SKUs across multiple pages can take several minutes on large tenant accounts.
Architectural Note on Rate Limits: Truto does not retry, throttle, or apply backoff on rate limit errors. When the upstream SkuVault API returns an HTTP 429, Truto passes that exact error back to the caller. Truto normalizes the upstream rate limit data into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF spec. The caller (or the agent framework) is fully responsible for intercepting the 429 and implementing exponential backoff.
The FBA vs. Ordinary Warehouse Divide
SkuVault treats external warehouses (like Amazon FBA) differently than internal warehouses. You cannot simply check one master endpoint to see all stock uniformly if you need detailed locational mapping. You have to write abstraction logic to hit list_all_sku_vault_inventory_by_location for internal stock and list_all_sku_vault_inventory_external_warehouse_quantities for FBA stock. If you don't expose these differences clearly as distinct MCP tools, Claude will hallucinate available inventory numbers by looking in the wrong place.
Compound Operations and Auto-Deductions
SkuVault's API includes hybrid actions that execute multiple state changes at once. For instance, syncing a shipped sale (sku_vault_sales_bulk_sync_shipped_and_remove_items) doesn't just update the sales record - it automatically removes the picked quantity from inventory. This is highly efficient, but it means your LLM must be explicitly instructed on the side effects of calling certain endpoints, otherwise it might attempt to manually deduct inventory via a second call, resulting in double-deductions.
Generating the SkuVault MCP Server
Instead of writing boilerplate JSON-RPC handlers and OAuth refresh logic, you can use Truto to dynamically generate an MCP server. The server derives its tool definitions directly from the integration's documented schemas.
There are two ways to create this server: via the Truto UI or programmatically via the API.
Method 1: Via the Truto UI
For teams who want a zero-code setup, you can generate the MCP URL directly from your dashboard.
- Navigate to the integrated account page for your SkuVault connection.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration. You can restrict the server to specific methods (e.g., read-only) or specific functional tags (e.g., inventory, sales).
- Copy the generated MCP server URL (it will look like
https://api.truto.one/mcp/a1b2c3d4...).
Method 2: Via the Truto API
If you are provisioning AI workspaces dynamically for your end users, you can call the Truto API to generate the MCP server programmatically.
curl -X POST https://api.truto.one/integrated-account/{integrated_account_id}/mcp \
-H "Authorization: Bearer YOUR_TRUTO_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "SkuVault Logistics Agent",
"config": {
"methods": ["read", "write"]
}
}'The response returns the server metadata and the cryptographic token URL required to connect:
{
"id": "mcp_8a9b0c1d2",
"name": "SkuVault Logistics Agent",
"config": {
"methods": ["read", "write"]
},
"expires_at": null,
"url": "https://api.truto.one/mcp/a1b2c3d4e5f6..."
}sequenceDiagram
participant Claude as Claude Desktop
participant TrutoMCP as Truto MCP Router
participant TrutoKV as Cloudflare KV
participant SkuVault as SkuVault API
Claude->>TrutoMCP: POST /mcp/a1b2c3d4... (tools/call)
TrutoMCP->>TrutoKV: Hash token & validate expiry
TrutoKV-->>TrutoMCP: Return account context
TrutoMCP->>TrutoMCP: Parse flat JSON-RPC args to Schema
TrutoMCP->>SkuVault: Execute SkuVault REST API
SkuVault-->>TrutoMCP: Return 200 OK (or 429 Rate Limit)
TrutoMCP-->>Claude: JSON-RPC 2.0 formatted resultConnecting the MCP Server to Claude
Once you have your Truto MCP URL, you need to register it with Claude so the LLM can discover the SkuVault tools via the tools/list protocol handshake.
Method A: Via the Claude UI
If you are using a version of Claude or ChatGPT that supports UI-based connector setup:
- Open Settings.
- Navigate to Integrations (or Connectors in some interfaces).
- Click Add MCP Server or Add custom connector.
- Paste the Truto MCP URL you generated and click Add. Claude will automatically initialize the connection and ingest the tool schemas.
Method B: Via Manual Configuration File
For developers using the standard Claude Desktop app, you connect remote MCP servers by updating the JSON configuration file. Truto provides an SSE transport wrapper for the server.
Open your claude_desktop_config.json (located at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows) and add the following:
{
"mcpServers": {
"skuvault_prod": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"https://api.truto.one/mcp/a1b2c3d4e5f6..."
]
}
}
}Restart Claude Desktop. The SkuVault tools will now appear as an available integration.
High-Leverage SkuVault MCP Tools
When the client calls tools/list, Truto dynamically generates the tool definitions from SkuVault's API documentation. Here are the 6 highest-leverage hero tools to expose to your AI agents.
1. list_all_sku_vault_inventory_available_quantities
This is the core tool for answering "do we have this in stock?" It returns the quantity actually available to sell across all sales channels, deducting held and reserved amounts.
Contextual note: You can instruct the agent to set expand_alternate_skus to true to group alternate SKUs into an array instead of returning them as confusing, separate line items. This endpoint is heavily throttled.
"Check the available quantity for SKU 'WH-BL-01'. If it has alternate SKUs associated with it, expand them in the response so I can see the total aggregate supply."
2. list_all_sku_vault_sales
Retrieves sales orders from SkuVault. You can filter by specific order IDs or order statuses.
Contextual note: When investigating customer order complaints, an agent can use this tool to determine if the order is still Pending, ReadyToShip, or ShippedUnpaid before drafting a response to the customer.
"Pull the SkuVault sale record for order ID '14992-A'. What is the current fulfillment status, and which item SKUs are included in the payload?"
3. sku_vault_sales_partial_update
Updates the status of a specific sale in SkuVault (e.g., Pending, ReadyToShip, Completed, Cancelled).
Contextual note: This tool requires either a sale_id or an order_id along with the target status. It is extremely useful for automated cancellation workflows if a customer requests a refund before fulfillment begins.
"The customer for order '14992-A' requested a cancellation. Update the SkuVault sale status to 'Cancelled' immediately so the warehouse doesn't pick it."
4. list_all_sku_vault_shipments
Lists shipments recorded in SkuVault. Returns critical logistics data including carrier, class, tracking number, and tracking URL.
Contextual note: Because tracking numbers and carrier codes are nested within the shipment object, agents can use this tool to automatically extract TrackingUrl and format it for customer support emails.
"Find the shipment details for sale ID '99201'. Extract the carrier name and the tracking URL, and write a short notification message I can send to the buyer."
5. create_a_sku_vault_shipment
Adds shipment details to a sale in SkuVault. This tells the system that a package has actually left the facility.
Contextual note: The payload requires an array of shipments, meaning you can split an order into multiple parcels. Each entry requires carrier, tracking, costs, and shipped-from details.
"Log a new shipment for sale ID '99201'. The carrier is FedEx, service class is Ground, tracking number is '771234567890', and the parcel weighs 4.5 lbs. The shipping cost was $12.50."
6. create_a_sku_vault_purchase_order
Generates a purchase order in SkuVault when stock runs low.
Contextual note: The tool requires supplier_name and an array of line_items. If po_number is omitted, SkuVault will auto-generate one and return it in the response.
"We are out of stock on 'WH-BL-01'. Create a new purchase order for supplier 'Acme Corp' requesting 500 units of 'WH-BL-01' at a unit cost of $4.50. Let SkuVault auto-generate the PO number."
For the complete inventory of available SkuVault tools and their exact JSON schema requirements, visit the SkuVault integration page.
Workflows in Action
MCP tools become powerful when Claude strings them together to execute multi-step operations. Here are two real-world warehouse workflows.
Scenario 1: Resolving a Stockout & Reordering
Customer service gets a notification that an order is delayed. The agent needs to check if the inventory is actually gone, cancel the immediate fulfillment, and order more stock.
"Check the available inventory for SKU 'KT-192'. If it is zero or less, update the sale 'ORD-988' to 'Pending' status. Then, create a purchase order to our supplier 'Global Parts' for 100 units of 'KT-192' at $12 each."
Execution Steps:
list_all_sku_vault_inventory_available_quantities- Claude queries SKUKT-192. The API returnsAvailableQuantity: 0.sku_vault_sales_partial_update- Claude executes a status change onorder_id: ORD-988setting it toPending.create_a_sku_vault_purchase_order- Claude builds the payload withsupplier_name: Global Partsand theline_itemsarray, submitting the PO.
Result: The customer order is safely halted from generating pick lists, and replenishment is automatically ordered.
Scenario 2: Logging a Third-Party Shipment
A 3PL provides a daily CSV of shipped items. A script feeds this text to Claude to update the SkuVault records.
"I have a shipping confirmation for sale ID '7741'. It shipped via UPS Next Day Air. Tracking is '1Z999999999'. The landed cost was $24.00. Create the shipment in SkuVault, then update the sale status to 'Completed'."
Execution Steps:
create_a_sku_vault_shipment- Claude extracts the natural language data and constructs theshipmentsarray, executing the tool.sku_vault_sales_partial_update- Claude immediately follows up by updating the parent sale toCompleted.
Result: SkuVault is updated with accurate tracking links and financial shipping costs, and the order is closed out.
Security and Access Control
Exposing an ERP or warehouse management API to an autonomous agent requires strict guardrails. Truto MCP servers provide four layers of security configuration at the token level:
- Method Filtering (
config.methods): You can restrict a SkuVault MCP server to safe operations. Settingmethods: ["read"]prevents Claude from executing anycreate,update, ordeletetools. It will only seelistandgetoperations. - Tag Filtering (
config.tags): If you only want Claude accessing shipping data and not financial purchase orders, you can filter tools by tag (e.g.,tags: ["shipments", "logistics"]). Tools outside these tags are physically excluded from the server schema. - Additional Authentication (
require_api_token_auth): By default, possessing the MCP URL grants access. By setting this flag totrue, the connecting client must also inject a valid Truto API token into the HTTP Authorization header, preventing unauthorized use if the URL is leaked. - Automatic Expiration (
expires_at): For temporary auditing workflows or external contractor access, you can attach an ISO datetime string to the token. Cloudflare KV and a Durable Object alarm will automatically purge the server configuration at the specified second.
Moving Past Manual Integration Maintenance
Building an integration to SkuVault is not a one-time project - it is an ongoing operational tax. If you hardcode MCP server logic against the SkuVault REST API, your engineering team will spend cycles fighting pagination limits, mapping nested tracking arrays, and handling aggressive 429 rate limit backoffs.
By leveraging a dynamic, documentation-driven MCP server through Truto, you remove the integration layer from your codebase. When SkuVault updates a schema or adds a new shipment carrier class, Truto updates the integration documentation, and your AI agents immediately receive the updated JSON schema on their next tools/list handshake. You maintain control over the agent behavior; Truto maintains the plumbing.
FAQ
- How does Truto handle SkuVault API rate limits?
- Truto does not retry, throttle, or apply backoff on rate limit errors. When the SkuVault API returns an HTTP 429, Truto passes that exact error to the caller, normalizing the upstream rate limit data into standardized IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). The caller is responsible for retry logic.
- Can I limit which SkuVault warehouses Claude can modify?
- Yes. While the SkuVault API itself requires a warehouse_id for item modifications, you can scope your MCP server using method filtering or tags to strictly limit Claude to read-only operations if you do not want it modifying inventory.
- How do I connect the Truto MCP Server to Claude Desktop?
- You can connect it either via the Claude UI under Settings > Integrations, or by manually updating your claude_desktop_config.json file to use the @modelcontextprotocol/server-sse command pointing to your Truto MCP URL.