Book a scoping call →

Case study

How a 45-person MSP triages support tickets in 3 minutes with a Claude agent

A 45-person IT managed service provider uses a Claude triage agent to cut median triage time from 47 to 3 minutes. Applied Agents built it on a custom MCP server into HaloPSA and IT Glue; technicians approve every reply.

By Irfan Sadek, co-founder · Updated 7 October 2026

Result card: median ticket triage time fell from 47 minutes to 3 minutes
ClientIT managed service provider (MSP), about 45 people
DeliverableTicket triage agent and custom MCP server
StackClaude, custom MCP server, HaloPSA, IT Glue, Azure
TimelineLive 5 weeks after the audit started
Price$1,500 audit + $16,000 agent build; $2,500/month plan
ResultMedian triage 47 to 3 minutes (10 weeks vs 10 weeks)

Key takeaways

  • Median ticket triage time dropped from 47 minutes to 3 minutes, measured across the 10 weeks before and after go-live.
  • Over that same window, median first response to clients in business hours went from 1 h 52 min down to 18 min.
  • Seven tools on a custom MCP server are the agent's only path into HaloPSA and IT Glue, and no tool can send a message.
  • Every client reply gets approved and sent by a technician.

What problem did the MSP's service desk have?

New tickets waited on a human dispatcher to read them, set priority and pick a technician, a median of 47 minutes in business hours.

  • Ticket load: roughly 2,300 tickets a month came from 140 client companies by email and portal.
  • Manual triage: two dispatchers sorted, ranked and assigned every ticket in HaloPSA.
  • Context hunting: technicians dug through IT Glue and past tickets before writing any reply.
  • Priority misses: 12% of tickets in a 200-ticket sample carried the wrong priority for the client's SLA.

How does the AI agent classify and route tickets?

The agent runs on Claude. Applied Agents built this triage agent to read each new ticket, pull client history and documentation through a custom MCP server, set the ticket fields and draft a technician's reply.

  1. Trigger: each new ticket in HaloPSA fires a webhook that wakes the agent.
  2. Read: it pulls up the ticket text, the SLA priority matrix and the client's contract.
  3. Look up: it digs through the client's previous tickets and IT Glue pages for issues that match.
  4. Classify: category, priority and board get assigned, with a technician proposed based on skill and workload.
  5. Note: an internal note lands on the ticket: a summary, the likely cause and links to the IT Glue pages it used.
  6. Draft: the client reply is written and stored as a draft on the ticket.
  7. Escalate: outage and security tickets, plus anything from a client's named VIPs, bypass the draft and page the on-call technician.
  8. Approve: after any edits, the technician sends the reply from HaloPSA.

That pattern holds for all the AI agents we build: one job each, a person approving outbound messages.

Six-step agent flow from a new HaloPSA ticket to a technician-approved reply through a custom MCP server
How the triage agent works

What does the custom MCP server expose to the agent?

The custom MCP server hands Claude seven named tools, each with fixed permissions. Sending messages and changing client systems are both off limits.

ToolWhat it doesAccess
get_ticketReads the new ticketRead
search_ticketsFinds past ticketsRead, same client only
search_docsSearches IT GlueRead, same client only
get_contractReads SLA and contract termsRead
set_ticket_fieldsSets category, priority, board, suggested technicianWrite, allowed values only
add_internal_noteAdds a note technicians seeWrite, internal only
save_draft_replySaves a reply draftWrite, draft only

It runs in the MSP's Azure tenant, and every tool call is logged. Details: custom MCP servers.

What stayed with people?

Technicians kept every client reply and every fix; the agent's role stops at triage, research and drafting.

  • Each draft leaves HaloPSA only after a technician edits and sends it.
  • Outage and security tickets go straight to whoever is on call.
  • Client system changes belong to technicians; the agent has neither remote-access nor admin rights.
  • Tickets the agent flags as low confidence land with dispatchers for review.
  • Once a week, the service manager checks the log of overridden fields.

What changed, and how was it measured?

Median triage time fell from 47 minutes to 3 minutes, comparing the 10 weeks after go-live with the 10 weeks before. Median first response dropped from 1 h 52 min to 18 min.

Metric10 weeks before10 weeks after
Median triage time (business hours)47 min3 min
Median first response (business hours)1 h 52 min18 min
Wrong priority (200-ticket sample)12%4%
Agent category kept by techniciansNot applicable91%
Drafts sent with no or light editsNot applicable64%
Dispatcher hours a week on triageAbout 30About 8

The MSP pulled these numbers itself from HaloPSA reports and the MCP server's tool-call log, so all figures are first-party.

Before and after chart: triage 47 to 3 minutes, first response 1 h 52 min to 18 min, wrong priority 12% to 4%, dispatcher hours 30 to 8
Results, 10 weeks before and after

What did the project cost, and how long did it take?

The audit cost $1,500 and the agent build came to $16,000, MCP server included; the MSP went live 5 weeks after the audit kicked off.

StageTimePrice
Audit and fixed quoteWeek 1$1,500
MCP server and agent buildWeeks 2 to 4$16,000
Shadow run beside the dispatchers, then go-liveWeek 5Included
Monthly planFrom week 6$2,500/month

Claude usage and Azure hosting run through the MSP's own accounts, which get billed directly. See pricing.

What can other service teams take from this?

The big lesson: guardrails belong in code. The agent is safe on live tickets because its limits live in the MCP server's tools, which Claude cannot change.

  • Build permissions into the tools. A draft-only reply tool beats any instruction in a prompt.
  • Shadow the queue for a week. Comparing how the agent and the dispatcher triaged identical tickets set the confidence threshold.
  • Hold escalation rules constant. Outage, security and VIP tickets run on set rules; AI judgment has no role.
  • Record each override. The weekly review converts corrections into sharper instructions.

If you're planning a support agent for your team, book a scoping call.

FAQ

Can the agent send replies to clients?

No. Saving drafts is the only thing the MCP server allows, and a technician sends each reply from HaloPSA.

Why use a custom MCP server instead of calling the HaloPSA API directly?

A custom MCP server gives Claude seven named tools, each with fixed permissions, and logs every call. It can also serve other AI clients later, including Claude Desktop for technicians.

What is AI triage?

AI triage means an AI model reads each new support ticket, works out what kind of problem it is, sets the priority and hands it to the right person. Claude gets that done in a median of 3 minutes at this MSP, and the reply still goes out from a technician.

What does the agent do with outages?

It skips the draft and pages the on-call technician right away. That applies when a ticket matches the outage or security rules, or comes from a client's named VIPs.

What is a triage ticket?

A triage ticket is a new ticket that nobody has categorized, prioritized or assigned yet. Each ticket at this MSP begins in that state and keeps it until the agent sets its fields.

What does your team copy and paste every week?

Tell us in 30 minutes. You'll leave with a ranked list of what to automate and a fixed quote.

Book a 30-minute scoping call →