Connect BMC Helix to AI Agents: Orchestrate ITSM Workflows and Tasks
Give your AI agent BMC Helix tools.
Connect BMC Helix to AI frameworks like LangChain or CrewAI using Truto. Bypassing AR System quirks, this guide covers tool fetching, explicit rate limit handling, and multi-step ITSM workflows.
In this guide
- 01Fetch BMC Helix Tools
- 02Implement Rate Limit Handling
- 03Bind Tools to Your LLM
- 04Execute ITSM Workflows
The guide
Learn how to connect BMC Helix to AI agents using Truto's tools API. Orchestrate ITSM workflows, handle AR System API quirks, and manage rate limits safely.
You want to connect BMC Helix to an AI agent so your system can autonomously triage incidents, generate change requests, look up personnel, and orchestrate ITSM worklogs. Here is exactly how to do it using Truto's /tools endpoint and SDK, bypassing the need to build a custom AR System integration from scratch.
Giving a Large Language Model (LLM) read and write access to a complex IT Service Management (ITSM) platform like BMC Helix is an engineering challenge. The platform's underlying architecture is unforgiving, heavily permissioned, and highly customized per enterprise. If your team uses ChatGPT, check out our guide on connecting BMC Helix to ChatGPT, or if you are building on Anthropic's models, read our guide on connecting BMC Helix to Claude. For developers building custom autonomous workflows, you need a programmatic way to fetch native tools and bind them to your agent framework.
This guide breaks down exactly how to fetch AI-ready tools for BMC Helix, bind them natively to an LLM using frameworks like LangChain, LangGraph, CrewAI, or the Vercel AI SDK, and execute complex ITSM workflows. For a broader look at this design pattern across the SaaS ecosystem, refer to our research on Architecting AI Agents: LangGraph, LangChain, and the SaaS Integration Bottleneck.
The Engineering Reality of the BMC Helix API
Giving an AI agent access to an external API sounds simple in a prototype. You wrap a fetch request in an @tool decorator and hand it to the model. In production against a heavily customized enterprise ITSM like BMC Helix, this approach collapses immediately.
BMC Helix is built on the Action Request (AR) System. It does not behave like a standard REST API built in 2024. If you hardcode these interactions into your agent, you will spend your sprints writing defensive integration code instead of improving your model's reasoning.
The AR System Qualification Trap
When searching for records in BMC Helix, you cannot simply pass ?status=open. The API requires an "AR qualification" string passed via the q parameter. This is a specific query language that looks like SQL but isn't.
For example, to find open incidents assigned to a specific group, the payload requires: 'Status' < "Resolved" AND 'Assigned Group' = "Service Desk". If you expose the raw API to an LLM, the model will hallucinate standard REST query parameters or invent invalid AR qualifications.
The Interface Form Indirection
Standard REST assumes you perform a POST to /incidents to create a ticket. In BMC Helix, data lives in base forms (like HPD:Help Desk), but creating or updating records requires interacting with "Interface" forms (like HPD:IncidentInterface_Create).
Furthermore, to trigger the backend workflow that actually generates the ticket, the payload must include specific control fields, such as setting z1D_Action to CREATE or MODIFY. If an agent misses this arbitrary field, the API accepts the payload, but the backend workflow never fires, leaving your data in a ghost state.
Form-Level Permissions and Associations
BMC Helix enforces strict form-level permissions. Deleting an entry requires delete permissions on the specific AR form, which most ITSM implementations restrict globally. Additionally, linking a Worklog to an Incident requires navigating complex association forms, splitting attachment URIs into base and path components, and managing merge options. An LLM cannot intuit these operational guardrails.
Why a Unified Tool Layer Matters for Agent Safety
Directly exposing raw BMC Helix endpoints pushes provider quirks directly into the LLM's context window. A unified tool layer collapses these complexities behind a standardized schema. Your agent sees create_a_bmc_helix_incident and list_all_bmc_helix_worklogs instead of dealing with AR-JWT session tokens, HPD:IncidentInterface_Create, and z1D_Action modifiers.
This architecture provides three concrete safety wins:
- Elimination of syntax hallucinations. The LLM chooses from a stable set of function names with strict JSON schemas. It never invents AR qualifications from scratch; the tool descriptions guide the parameter structure.
- Abstracted authentication and routing. Truto handles the AR-JWT session lifecycle under the hood. The agent never sees or manages access tokens.
- Deterministic execution. Every tool call is routed through a proxy layer that normalizes the input, applying the necessary interface form logic before it hits the BMC Helix backend.
flowchart TD Agent["AI Agent (LangChain / CrewAI)"] Truto["Truto Unified Tool Layer"] BMC["BMC Helix AR System"] Agent -->|"1. Tool Call: create_a_bmc_helix_incident"| Truto Truto -->|"2. Validate JSON Schema"| Truto Truto -->|"3. Map to HPD:IncidentInterface_Create<br>Inject z1D_Action = CREATE"| BMC BMC -->|"4. Return Incident Number"| Truto Truto -->|"5. Standardized Tool Output"| Agent
High-Leverage Hero Tools for BMC Helix
Truto exposes a comprehensive suite of Proxy APIs mapped to BMC Helix resources. For AI agents orchestrating ITSM workflows, you only need to bind the highest-leverage operations.
Here are the critical tools for an autonomous ITSM agent.
1. create_a_bmc_helix_incident
Creates a new incident record. The agent does not need to know about the HPD:IncidentInterface_Create form; it simply passes the required operational fields like First Name, Last Name, Description, Impact, Urgency, and Service Type. Truto handles the z1D_Action requirement automatically.
"A user reported that the main database cluster in us-east-1 is unresponsive. Create a high-urgency, high-impact incident for this issue, categorized under Database Services, and return the new Incident Number."
2. list_all_bmc_helix_incident
Searches the HPD:Help Desk form for existing incidents. This tool allows the agent to filter by AR qualification strings (via the q parameter), select specific fields, and handle pagination via offset and limit.
"Find all critical incidents created in the last 24 hours that are currently assigned to the Network Infrastructure group, and list their current statuses and descriptions."
3. create_a_bmc_helix_worklog
Worklogs are the lifeblood of ITSM documentation. This tool appends a worklog entry to an existing incident via the HPD:WorkLog form. It requires the Incident Number, Work Log Type, and Detailed Description.
"Add a worklog to incident INC0000012345 stating that the primary database node has been rebooted and we are currently monitoring the failover cluster for stability."
4. create_a_bmc_helix_change
ITSM change management is notoriously complex. This tool abstracts the CHG:ChangeInterface_Create form, allowing the agent to generate infrastructure change requests (CRQs). It requires Description, Impact, Urgency, Company, and requester details.
"Generate an infrastructure change request to upgrade the Redis cache instances in production tonight at 2 AM EST. Mark the impact as medium and urgency as low."
5. list_all_bmc_helix_people
Retrieves person records from the CTM:People form. Agents use this to look up employee profiles, verify support staff, or find the correct contact information to bind to an incident or change request.
"Look up the contact details and profile status for Jane Doe in the CTM:People directory so we can associate her as the requester for the upcoming firewall change."
6. create_a_bmc_helix_problem
Creates a problem investigation, known error, or solution via PBM:ProblemInterface_Create. The agent specifies the exact type of problem record needed, and the tool manages the backend routing.
"We have seen five identical incidents regarding VPN connectivity drops. Open a Problem Investigation ticket assigned to the Network Support organization to find the root cause."
For the complete inventory of available tools, query parameters, and JSON schemas, visit the BMC Helix Integration Page.
Building Multi-Step Workflows
Fetching these tools and binding them to your agent framework requires a programmatic approach. Truto provides a /tools endpoint that returns a standardized description and JSON schema for all enabled Proxy APIs on an integrated account.
Your application fetches these definitions, translates them into the format expected by your chosen LLM framework (e.g., LangChain's bindTools), and manages the execution loop.
Handling Rate Limits in Production
Before writing the execution loop, you must handle the reality of API rate limits.
Crucial Architectural Note: Truto does not retry, throttle, or apply backoff on rate limit errors. When the upstream BMC Helix API returns an HTTP 429 Too Many Requests, Truto passes that error directly to the caller. However, Truto normalizes the upstream rate limit information into standardized IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset).
The caller (your agent's tool execution wrapper) is entirely responsible for reading these headers, pausing execution, and applying retry/backoff logic. Do not assume the integration layer will magically absorb rate limits.
The Tool Execution Implementation
Here is a complete TypeScript example using LangChain to fetch tools, bind them to an Anthropic model, and execute a tool call with explicit 429 rate limit handling.
import { ChatAnthropic } from "@langchain/anthropic";
import { AgentExecutor, createToolCallingAgent } from "langchain/agents";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { DynamicStructuredTool } from "@langchain/core/tools";
// 1. Fetch tool definitions from Truto
async function fetchTrutoTools(accountId: string, trutoApiKey: string) {
const res = await fetch(`https://api.truto.one/integrated-account/${accountId}/tools`, {
headers: { Authorization: `Bearer ${trutoApiKey}` }
});
const { data: tools } = await res.json();
return tools;
}
// 2. Wrap the API call to handle 429 Rate Limits explicitly
async function executeToolWithBackoff(url: string, options: any, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url, options);
if (response.status === 429) {
// Truto passes the 429 through and normalizes the headers
const resetHeader = response.headers.get('ratelimit-reset');
const resetSeconds = resetHeader ? parseInt(resetHeader, 10) : 5;
console.warn(`[Rate Limit] 429 received. Sleeping for ${resetSeconds} seconds...`);
await new Promise(resolve => setTimeout(resolve, resetSeconds * 1000));
continue; // Retry the request
}
if (!response.ok) {
throw new Error(`Tool execution failed: ${response.statusText}`);
}
return response.json();
}
throw new Error("Max retries exceeded due to rate limits.");
}
// 3. Initialize Agent
async function runITSMWorkflow() {
const toolsDef = await fetchTrutoTools("bmc-helix-account-id", "your-truto-api-key");
// Convert Truto schemas to LangChain tools
const tools = toolsDef.map(tool => new DynamicStructuredTool({
name: tool.name,
description: tool.description,
schema: tool.schema,
func: async (args) => {
const result = await executeToolWithBackoff(
`https://api.truto.one/proxy/${tool.name}`,
{
method: 'POST',
headers: {
'Authorization': `Bearer your-truto-api-key`,
'Content-Type': 'application/json'
},
body: JSON.stringify(args)
}
);
return JSON.stringify(result);
}
}));
const llm = new ChatAnthropic({ model: "claude-3-5-sonnet-latest", temperature: 0 });
const prompt = ChatPromptTemplate.fromMessages([
["system", "You are an elite ITSM automation agent. You manage BMC Helix environments."],
["human", "{input}"],
["placeholder", "{agent_scratchpad}"],
]);
const agent = createToolCallingAgent({ llm, tools, prompt });
const executor = new AgentExecutor({ agent, tools });
const result = await executor.invoke({
input: "Create a high-impact incident for a failing payment gateway, then immediately add a worklog stating that the on-call engineer has been paged."
});
console.log(result.output);
}sequenceDiagram
participant Agent as AI Agent Wrapper
participant Truto as Truto Tool Layer
participant BMC as BMC Helix API
Agent->>Truto: POST /proxy/create_a_bmc_helix_incident
Truto->>BMC: HPD:IncidentInterface_Create (z1D_Action=CREATE)
BMC-->>Truto: 429 Too Many Requests
Truto-->>Agent: 429 (ratelimit-reset: 10)
Note over Agent: Wrapper sleeps for 10s
Agent->>Truto: POST /proxy/create_a_bmc_helix_incident (Retry)
Truto->>BMC: HPD:IncidentInterface_Create (z1D_Action=CREATE)
BMC-->>Truto: 201 Created (INC0000123)
Truto-->>Agent: { "Incident Number": "INC0000123" }Workflows in Action
When you give an LLM access to a unified toolset, it can chain complex operations together autonomously. Here is how a fully integrated agent handles real-world ITSM scenarios.
Scenario 1: Automated Major Incident Triage
An alert fires in Datadog indicating a catastrophic failure in the primary billing database. A DevOps engineer prompts the agent via a Slack integration.
"The billing database just went down. Look up the on-call DBA, create a critical incident, and add a worklog saying we are initiating the failover runbook."
Execution Steps:
- The agent calls
list_all_bmc_helix_peoplewithq = "'Support Group Name' = \"Database Admins\" AND 'Profile Status' = \"Enabled\""to identify the correct contact. - The agent calls
create_a_bmc_helix_incidentpassing the DBA's First and Last Name, setting Impact to1-Extensive/Widespreadand Urgency to1-Critical. - The agent receives the new Incident Number (e.g.,
INC0000099881). - The agent calls
create_a_bmc_helix_worklogpassing the Incident Number and the message about initiating the failover runbook.
Outcome: Within seconds, the ITSM system of record accurately reflects the outage, the correct personnel are associated with the ticket, and the audit trail is cleanly initiated without human data entry.
Scenario 2: Proactive Problem Management
An IT Service Manager notices a trend in support tickets and asks the agent to investigate and escalate.
"Find all open incidents related to 'VPN timeout' created this week. If there are more than three, create a new Problem Investigation and link a summary worklog to it."
Execution Steps:
- The agent calls
list_all_bmc_helix_incidentusing an AR qualification string to filter by open status and a wildcard text search for "VPN timeout" on the description field. - The agent analyzes the JSON response. Seeing 7 matching records, it proceeds to the conditional logic.
- The agent calls
create_a_bmc_helix_problemsetting thez1D_Actionequivalent toPROBLEM, providing a summary of the 7 incidents. - The agent calls
create_a_bmc_helix_worklog(orbmc_helix_entries_mergedepending on the specific problem form association) to attach the list of related Incident Numbers to the new Problem record.
Outcome: The agent autonomously transitions reactive incident data into a proactive ITIL problem management workflow, saving the manager an hour of manual cross-referencing and data entry.
Moving Past the Integration Bottleneck
Building an AI agent that reasons about IT service management is a complex machine learning challenge. Building the connector that allows that agent to safely talk to BMC Helix is a solved infrastructure problem.
If you build the integration in-house, your engineering team will spend months dealing with AR System semantics, mapping custom interface forms, deciphering AR qualifications, and writing custom retry logic for 429 rate limits. You are building integration boilerplate instead of improving your agent's cognitive architecture.
By leveraging Truto's /tools endpoint, your agents immediately speak native BMC Helix through safe, strictly typed, and unified function calls.
FAQ
- Can I connect any AI framework to BMC Helix using Truto?
- Yes, Truto's /tools endpoint returns standard JSON schemas that are entirely framework-agnostic. You can bind them to LangChain, Vercel AI SDK, CrewAI, LangGraph, or any other tool-calling framework.
- How does Truto handle BMC Helix API rate limits?
- Truto normalizes upstream rate limits into standardized IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) but passes the HTTP 429 response directly to your agent. Your application code is responsible for implementing the retry and backoff logic.
- Do I need to write raw AR qualifications for the LLM?
- The tool descriptions provided by Truto guide the LLM to format queries correctly. While the proxy APIs natively support passing complex 'q' parameters (AR qualifications), the tool layer abstracts the most complex form-level indirection automatically.