Skip to content

Connect FieldEdge to Claude: Sync Dispatch and Inventory

Learn how to connect FieldEdge to Claude using a managed MCP server. This guide covers FSM API quirks, dispatch workflows, and inventory bulk updates.

Riya Sethi Riya Sethi · · 9 min read
Connect FieldEdge to Claude: Sync Dispatch and Inventory

If your team needs to connect FieldEdge to Claude to automate technician dispatch, synchronize inventory bulk updates, or audit field service invoicing, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's natural language tool calls and FieldEdge'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 /connect-fieldedge-to-chatgpt-manage-service-orders-and-crm/ or explore our broader architectural overview on /connect-fieldedge-to-ai-agents-automate-leads-and-billing/.

Giving a Large Language Model (LLM) read and write access to a sprawling field service management (FSM) platform like FieldEdge is a significant engineering challenge. You have to handle API token lifecycles, map complex relational data models to MCP tool definitions, and deal with FieldEdge's specific operational constraints. Every time an endpoint changes or a new module is released, you own the maintenance of that server code.

This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for FieldEdge, connect it natively to Claude, and execute complex dispatch and inventory workflows using natural language.

The Engineering Reality of the FieldEdge 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. FieldEdge is built for HVAC, plumbing, and electrical contractors - its API reflects the complexity of mobile workforces, multi-tech dispatching, and truck stock inventory.

If you decide to build a custom FieldEdge MCP server, here are the specific integration challenges you will face:

Multi-Tech Dispatch State Machines FieldEdge does not treat "scheduling" as a simple date field on a work order. Jobs often require multiple technicians. As a result, status updates (Pending, Traveling, Working, Paused, Completed) are applied to the Work Order Assignment, not the work order itself. An LLM cannot simply guess this relational model. It needs strictly defined tools - like create_a_field_edge_work_order_assignment and field_edge_work_order_assignments_update_status - to safely manipulate dispatch boards without corrupting state.

Full-Replacement Invoice Mutations When updating invoices attached to FieldEdge work orders, the API expects a complete item payload. You cannot simply PATCH a single line item. If a technician adds a new part to an invoice in the field, the API requires you to send the complete item list each time - replacing all items, not just the ones that changed. If an AI agent sends only the delta, it will inadvertently delete all other line items on the invoice.

Bulk Inventory 207 Multi-Status Responses FieldEdge supports bulk updating up to 50 inventory items in a single request. However, partial success is possible. The API responds with a 207 Multi-Status code containing a per-item result for every submitted item. Your MCP server must be capable of parsing this non-standard HTTP response and formatting it into a JSON result that Claude can understand, ensuring the LLM knows exactly which items succeeded and which failed validation.

Pass-Through Rate Limiting FieldEdge enforces strict rate limits on its endpoints to prevent runaway automated processes. Truto normalizes upstream rate limit information into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF specification. However, Truto does not retry, throttle, or apply backoff on rate limit errors. When the FieldEdge API returns an HTTP 429 Too Many Requests error, Truto passes that error directly to the caller. Your MCP client architecture must be responsible for implementing intelligent retry and backoff logic to handle these limits gracefully.

Creating the FieldEdge MCP Server

Truto automatically generates documentation-driven tools directly from the FieldEdge integration schema. You can provision a new MCP server for a specific FieldEdge tenant using either the Truto UI or the API.

Method 1: Via the Truto UI

For administrators setting up an integration manually, the UI provides a quick way to generate a connection URL.

  1. Log into your Truto dashboard and navigate to the specific Integrated Account page for the connected FieldEdge instance.
  2. Click the MCP Servers tab.
  3. Click Create MCP Server.
  4. Select your desired configuration (e.g., give it a name, filter by specific tags like workorders or inventory, or set an expiration date).
  5. Click Save and copy the generated MCP server URL (e.g., https://api.truto.one/mcp/a1b2c3d4...).

Method 2: Via the Truto API

For developers programmatically provisioning AI access for end-users, you can generate the MCP server via a REST call. This validates that the integration has tools available, generates a cryptographically secure token, stores it in Cloudflare KV, and returns the URL.

curl -X POST https://api.truto.one/integrated-account/{integrated_account_id}/mcp \
  -H "Authorization: Bearer YOUR_TRUTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "FieldEdge Dispatch Agent",
    "config": {
      "methods": ["read", "write"],
      "tags": ["workorders", "customers", "items"]
    }
  }'

Response:

{
  "id": "mcp-7a8b9c0d",
  "name": "FieldEdge Dispatch Agent",
  "config": {
    "methods": ["read", "write"],
    "tags": ["workorders", "customers", "items"]
  },
  "expires_at": null,
  "url": "https://api.truto.one/mcp/a1b2c3d4e5f6g7h8i9j0"
}

Keep this URL secure. It contains the token required to authenticate requests to the specific FieldEdge tenant.

Connecting the MCP Server to Claude

Once you have your Truto MCP server URL, you must connect it to your AI environment. The process varies depending on whether you are using a UI-based application or a programmatic configuration.

Method A: Via the Claude UI

If you are using the Claude Desktop application or a supported web interface:

  1. Open Claude and navigate to Settings -> Integrations (or Connectors -> Add custom connector).
  2. Select Add MCP Server.
  3. Paste the URL you generated in the previous step.
  4. Click Add or Save. Claude will instantly handshake with the Truto JSON-RPC 2.0 endpoint, calling tools/list to discover all available FieldEdge operations.

Method B: Via Manual Config File (Claude Desktop)

If you prefer to configure Claude Desktop manually, you can add the Truto MCP server to your claude_desktop_config.json file using the Server-Sent Events (SSE) transport protocol.

Edit your configuration file (typically located at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "fieldedge_prod": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sse",
        "--url",
        "https://api.truto.one/mcp/a1b2c3d4e5f6g7h8i9j0"
      ]
    }
  }
}

Restart Claude Desktop. The model now has contextual awareness of your FieldEdge schema and can invoke tools natively.

FieldEdge Hero Tools for Claude

Truto exposes the entirety of the FieldEdge API as individual tools. However, certain operations provide disproportionate value for agentic FSM workflows. Here are 6 high-leverage hero tools to expose to your AI agents.

create_a_field_edge_work_order_assignment

Description: Creates a new technician assignment on a specific work order. The assignment is visible immediately on the Dispatch Board. Usage Notes: Because FieldEdge supports multi-tech jobs, you do not update the work order to schedule a tech; you create an assignment. Requires work_order_id, technicianId, scheduleDateTime, and estCompleteDateTime.

"We have an emergency HVAC failure at 123 Main St (Work Order ID: 90210). Assign technician ID 45 to this work order. Schedule it for today at 2:00 PM EST, with an estimated completion of 4:00 PM EST."

field_edge_work_order_assignments_update_status

Description: Changes a technician assignment's status (e.g., pending, traveling, working, paused, completed, canceled). Usage Notes: Triggers the exact same customer notifications, live dispatch-board updates, and geofence synchronizations as a status change made directly by a human on the FieldEdge mobile app.

"Update the status of assignment ID 5554 on Work Order 90210 to 'traveling'. The technician is en route to the customer site."

field_edge_items_bulk_update

Description: Bulk updates up to 50 inventory items in a single request. Usage Notes: This is a powerful PATCH operation. Items are fetched, patched in memory, and written to FieldEdge in one batch call. The MCP server will return a 207 Multi-Status response detailing the success or failure of each individual item.

"I need to update our truck stock pricing. Here is a list of 15 part IDs and their new cost parameters. Run a bulk update to apply these new costs across the inventory database."

update_a_field_edge_invoice_by_id

Description: Creates or updates the invoice on a work order and recalculates totals from the submitted items. Usage Notes: You must send the complete item list each time. This endpoint completely replaces the existing line items on the invoice with the payload provided. If the agent omits an item, it will be deleted from the invoice.

"The technician finished Work Order 90210. Update the attached invoice (ID: 90210) to include 2 hours of labor (Item ID: LAB-01) and one condenser fan motor (Item ID: MOT-55). Remember to include any existing line items that shouldn't be removed."

list_all_field_edge_customers_by_address

Description: Search and retrieve customers based on physical address details. Usage Notes: In field service, dispatchers often receive calls from tenants who don't know the exact account name. Searching by address is the most reliable way to locate existing billing and equipment history.

"A tenant just called from 456 Elm Street, Springfield. Check if we have an existing customer record at this address so I can view their service history."

create_a_field_edge_customer_attachment

Description: Uploads a file and associates it with the specified customer record. Usage Notes: The file is stored securely in Azure Blob Storage and the attachment is immediately visible within the FieldEdge CRM. Critical for attaching signed quotes, site photos, or diagnostic readouts.

"Take this diagnostic report PDF I just generated and attach it to Customer ID 1042. Name the file 'Q3_Diagnostic_Report.pdf'."

For the complete tool inventory, including schemas for equipment, quotes, and webhooks, visit the FieldEdge integration page.

Workflows in Action

When you combine these tools through an LLM, you can automate complex, multi-step FSM operations that traditionally require heavy manual data entry.

Scenario 1: Autonomous Emergency Dispatch

A property manager emails an emergency repair request. The AI agent acts as an autonomous dispatcher, locating the customer, creating the work order, and assigning the nearest available technician.

"I just received an emergency email from the property manager at 789 Oak Ave. Look up the customer by address, create a new work order for a 'No Heat' emergency, and assign Technician ID 12 for an immediate dispatch at 10:00 AM."

Execution Steps:

  1. Claude calls list_all_field_edge_customers_by_address with the address components to retrieve the customerId.
  2. Claude calls create_a_field_edge_work_order using the retrieved customerId, defaulting the leadSourceId and businessUnitId appropriately.
  3. Claude parses the returned work_order_id.
  4. Claude calls create_a_field_edge_work_order_assignment using the work_order_id and technician ID 12 to populate the dispatch board.
sequenceDiagram
    participant User
    participant Claude as Claude Agent
    participant Truto as MCP Server
    User->>Claude: "Emergency dispatch at 789 Oak Ave..."
    Claude->>Truto: list_all_field_edge_customers_by_address
    Truto-->>Claude: Returns customerId: 8821
    Claude->>Truto: create_a_field_edge_work_order(customerId: 8821)
    Truto-->>Claude: Returns work_order_id: 99401
    Claude->>Truto: create_a_field_edge_work_order_assignment(tech: 12)
    Truto-->>Claude: Assignment created
    Claude-->>User: "Work order 99401 created. Tech 12 dispatched."

Scenario 2: End-of-Day Inventory Reconciliation

An inventory manager uploads a CSV of parts used from Truck A during the day. The AI updates the invoice to charge the customer, and then bulk patches the master inventory database to reflect the consumed stock.

"Here is the parts consumption log for Work Order 55301. Update the work order invoice to include these 4 parts. Once the invoice is updated, adjust the global inventory levels for these 4 items using a bulk update."

Execution Steps:

  1. Claude extracts the current items from the invoice using get_single_field_edge_invoice_by_id.
  2. Claude appends the 4 new parts to the existing item array.
  3. Claude calls update_a_field_edge_invoice_by_id with the full item list to correctly mutate the invoice.
  4. Claude maps the consumed quantities into a payload for field_edge_items_bulk_update.
  5. Claude executes the bulk update and parses the 207 Multi-Status response to confirm all 4 items successfully decremented.

Security and Access Control

Exposing an FSM system to an AI agent requires strict guardrails. You don't want an AI hallucinating an invoice deletion or wiping out your inventory records. Truto provides four configuration parameters to secure your FieldEdge MCP server:

  • Method Filtering (methods): Restrict the server to specific operation types. Set methods: ["read"] to allow the agent to look up customer history and dispatch schedules, while physically preventing it from creating or deleting records.
  • Tag Filtering (tags): Isolate the server to specific API domains. Set tags: ["customers", "tasks"] to prevent the agent from touching the invoices or items (inventory) endpoints entirely.
  • API Token Authentication (require_api_token_auth): By default, the MCP URL acts as a bearer token. By setting this to true, the MCP client must also pass a valid Truto API token in the Authorization header, adding a strict secondary layer of enterprise auth.
  • Time-To-Live (expires_at): Create ephemeral servers for temporary access. If you have an outsourced dispatch team covering the weekend, you can set the server to automatically self-destruct on Monday morning, cleanly revoking access.

Wrapping Up

Building a custom integration for FieldEdge means managing OAuth token refresh cycles, normalizing 207 Multi-Status bulk responses, and hand-coding state machines for dispatch assignments. Using Truto to dynamically generate a managed MCP server removes this infrastructure burden.

Your engineering team can focus on writing high-leverage agent prompts and FSM workflows, while Truto handles the underlying schema translation, authentication, and secure tool generation. Whether you are automating emergency dispatching, managing truck stock inventory, or auditing field service financials, a managed MCP architecture provides the safest, fastest path to production.

FAQ

How does Truto handle FieldEdge API rate limits?
Truto normalizes upstream rate limit information into standard headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) but does not retry or absorb HTTP 429 errors. Your MCP client is responsible for handling backoff logic.
Can I restrict my FieldEdge AI agent to read-only operations?
Yes. When creating the MCP server in Truto, you can set the method filter to ["read"]. This restricts the agent to GET and LIST operations, preventing it from mutating work orders or inventory.
How do I update an invoice in FieldEdge via the MCP server?
You must provide the complete item list when updating a FieldEdge invoice. The update_a_field_edge_invoice_by_id tool completely replaces existing line items, so you cannot send only the changes.

More from our Blog