← Back to Blog

If you work in security operations, you know the pain: hundreds of alerts a day across EDR, CSPM, application security, DNS threat feeds, and vulnerability scanners -most of which are noise. Analysts spend hours pulling context from five different consoles just to determine if something is a true positive or a known false positive they've already triaged last week.

I built a GenAI-powered triage engine to fix this. It takes a ticket ID, automatically enriches the alert with context from every relevant source, runs the analysis through Claude, and posts a structured triage report back to the ticketing system -all in under a minute.

Here's what I learned building it.

The Problem: Alert Fatigue Is Real

In any enterprise environment, security alerts come from everywhere:

Each alert type requires different enrichment. A cloud IOA needs cloud account context, permission analysis, and IP reputation. A DNS threat needs process-level context from the SIEM -what actually made the DNS query? A vulnerability needs CVSS scoring, CISA KEV status, and patch availability.

An analyst doing this manually is opening 5-10 tabs per alert. Multiply that by dozens of daily tickets, and you get burnout.

The Approach: Context-First Triage

The core idea is simple: gather all the context an analyst would need, then let an LLM reason over it.

The system works as a webhook-triggered service. When a new security ticket is created, it receives the ticket ID and kicks off the full triage pipeline:

1. Receive ticket ID via webhook
2. Fetch ticket details + conversation history
3. Detect alert type (CSPM, EDR, AppSec, DNS, Vuln, Phishing)
4. Route to type-specific enrichment pipeline
5. Pull context from 5-10 APIs in parallel
6. Search knowledge base for similar past triages
7. Search ticketing system for related historical tickets
8. Build comprehensive prompt with all context
9. Run analysis through Claude with MCP tool access
10. Post structured triage report back to ticket

Multi-Source Enrichment

The enrichment layer is where the real value lives. For each alert type, the system pulls different context:

Cloud IOA (CSPM) Detections

Application Security Alerts

DNS Threat Detections

Vulnerability Detections

Phishing and Email Threat Analysis

How It Pulls Context: MCP (Model Context Protocol)

This is the core differentiator. The system doesn't use traditional REST API calls to gather context. Instead, it uses MCP (Model Context Protocol) to give Claude direct, live access to security tools.

MCP turns security platforms into tools that Claude can call on its own. Instead of writing rigid API integration code for every enrichment step, you define MCP servers for your security tools, and Claude decides which ones to call based on the alert context:

The power of this approach is that Claude can adaptively investigate. If a host lookup reveals something interesting, it can pivot and query related alerts for that host, check device posture, or look up the user's recent activity. For complex detections, it can take multiple investigative turns, querying different MCP tools to build a complete picture. This mirrors how a human analyst actually works.

On top of MCP-based live investigation, the system also builds a comprehensive prompt that includes:

Why MCP over traditional APIs: Traditional automation scripts follow rigid decision trees - you hardcode every API call and every branching condition. With MCP, the AI decides what to investigate next based on what it's already found. You define the tools once, and the AI figures out the investigation path. This is the difference between "here's some data, what do you think?" and "here are some tools, go investigate this alert."

The Knowledge Base: Learning from Every Triage

One of the most impactful features is the self-growing knowledge base. After every triage, the system generates a structured entry:

On the next triage, the system searches this knowledge base for relevant past entries and includes them in the prompt. This means:

TP/FP Classification: Not Just Rules

The triage logic isn't a simple if/else decision tree. It combines structured guidance with contextual reasoning:

False Positive Indicators

True Positive Indicators

The LLM weighs all of these signals together, considers the knowledge base, checks similar past tickets, and produces a prioritized assessment with specific next steps.

Deployment: Serverless and Scalable

The service runs as a containerized application on a serverless platform. Key design decisions:

Results

After deploying the system:

Lessons Learned

1. Context is everything

An LLM is only as good as the context you give it. The difference between a useless "this alert might be suspicious" and a precise "this is a false positive because the action was performed by the IT admin from a managed device during a scheduled maintenance window" is entirely about enrichment quality.

2. Start with the analyst's workflow

I built this by literally documenting what I do when I triage each alert type. What tabs do I open? What do I search for? What questions do I ask? The system automates that exact workflow.

3. The knowledge base is the moat

The KB is what makes this system compound in value over time. Static runbooks go stale. A self-growing KB that captures the reasoning behind every decision stays relevant because it evolves with the threat landscape.

4. MCP changes the game

Being able to give the AI live API access means it can investigate, not just analyze. The difference between "here's some data, what do you think?" and "here are some tools, go investigate this alert" is transformative.

5. Keep the human in the loop

This system triages, it doesn't remediate. The output is a recommendation posted to the ticket. A human analyst reviews it and decides on action. This is intentional -for security decisions, you want human judgment on the final call.

What's Next

I'm exploring extending the system to handle automated response actions for high-confidence false positives (auto-close with documented reasoning), integrating more threat intelligence feeds, and expanding the alert type coverage. The goal is to get analysts focused on the 10% of alerts that actually matter, while the system handles the 90% that are noise.

If you're building something similar or want to discuss GenAI in security operations, feel free to reach out on LinkedIn.