Inspiration
Security Operations Center analysts are overwhelmed. A typical SOC team receives hundreds of alerts daily — yet studies show over 80% are false positives. Every alert still demands investigation, creating massive alert fatigue, slower response times, and burned-out analysts. Tier-1 triage — pulling alert details, checking IP reputation, correlating events, writing incident reports — is repetitive, time-consuming work that a well-designed AI agent can handle autonomously.
What it does
SOC Triage Agent is an autonomous Tier-1 SOC analyst powered by Gemini and Elasticsearch. Given a queue of security alerts, it:
- Ingests open Critical and High severity alerts from Elasticsearch SIEM
- Enriches each source IP against AbuseIPDB threat intelligence
- Correlates related events by IP address, hostname, and MITRE tactic
- Classifies each alert — Escalate to Tier-2, Monitor & Investigate, or Log & Close
- Generates a structured incident report with MITRE ATT&CK mapping and recommended remediation steps
- Updates alert status in Elasticsearch automatically
Analysts get a real-time dashboard showing the full alert queue, IP reputation results, and generated incident reports — ready to act on immediately.
How we built it
Architecture:
- Gemini 3.5 Flash (via Google ADK + AI Studio API) — agent brain and orchestration
- Google ADK (Agent Development Kit) — multi-step agent framework connecting Gemini to MCP tools
- Custom MCP Server — 9 tools built with FastMCP, deployed on Google Cloud Run
- Elasticsearch (Elastic Cloud Serverless) — SIEM data store and alert index
- AbuseIPDB API — real-time IP reputation and threat intelligence
- Cloud Run — serverless deployment of the MCP server backend
- HTML/CSS/JS — analyst-facing dashboard frontend
The ADK agent successfully connects to the live MCP server on Cloud Run, calls
tools like get_alert_summary, get_open_alerts, and check_ip_reputation in
real time, and returns structured triage results — demonstrating full end-to-end
Gemini → ADK → MCP → Elasticsearch pipeline.
Challenges we ran into
- MCP authentication in Agent Builder UI is marked "Coming Soon" — we worked around this by deploying our own MCP server on Cloud Run with full control over the toolset
- Vertex AI model access required careful project configuration to use the correct Gemini model strings
- Alert correlation across multiple indices required careful Elasticsearch query design to avoid false correlations
Connecting Google ADK to a remotely hosted MCP server required disabling FastMCP's
DNS rebinding protection (introduced in MCP SDK v1.24+), which by default only
allows localhost connections. Setting host="0.0.0.0" at FastMCP initialization
resolves this for Cloud Run deployments.
Accomplishments that we're proud of
- Built a fully functional end-to-end triage pipeline from alert ingestion to incident report in under a week
- Custom MCP server with 9 tools live on Cloud Run — callable by any MCP-compatible agent
- Real threat intelligence integration catching confirmed malicious IPs (TOR exit nodes, known C2 infrastructure)
- Incident reports that match real SOC documentation standards including MITRE ATT&CK mapping
What we learned
- How to design and deploy a custom MCP server that bridges an AI agent to external APIs
- The practical challenges of integrating AI agents into security workflows — false positive rates, enrichment reliability, escalation thresholds
- Google ADK's agent orchestration model and how sub-agents can specialize in specific tasks
What's next for SOC Triage Agent
- SOAR integration — auto-create tickets in Jira/ServiceNow on escalation
- Multi-source ingestion — pull alerts from multiple SIEM platforms beyond Elasticsearch
- Analyst feedback loop — let analysts rate triage decisions to improve classification over time
- Threat hunting mode — proactively search for IOCs across historical log data
- Slack/Teams notifications — push escalations directly to analyst channels
Built With
- abuseipdb
- docker
- elasticsearch
- flask
- gemini
- google-adk
- google-agent-builder
- google-cloud-run
- python
Log in or sign up for Devpost to join the conversation.