Inspiration
Waking up to a high-severity alert at 3 AM is every on-call engineer's worst nightmare. You are barely awake, your brain is foggy, and you're suddenly expected to navigate across fragmented cloud dashboards, terminal windows, log viewers, and VPN hops just to figure out what broke.
With all the excitement around LLMs, the first instinct is often to build an autonomous bot and let it fix things. But in production environments, giving an AI unchecked mutation access is genuinely terrifying. If an LLM hallucinates an alert interpretation or restarts the wrong cluster during a traffic spike, a minor blip quickly spirals into an executive-escalated outage.
We built CloudOps Agent to cut through that alert fatigue. We wanted a hands-free operational commander you can talk to from your desk or bed—one that pinpoints root causes in seconds, but enforces a strict, zero-trust human confirmation gate before any mutating command touches live AWS infrastructure.
What it does
CloudOps Agent connects Amazon Alexa to live AWS telemetry and compute planes through the open Model Context Protocol (MCP):
Voice Incident Triage (triage_active_alarms): When you say "triage active alarms", the agent checks CloudWatch alarms in the ALARM state, isolates the exact 15-minute log window where errors surged, and has Claude 3.5 Sonnet on Amazon Bedrock synthesize a concise, two-sentence diagnosis over voice.
The 60-Second Security Gate (request_service_remediation): Autonomous changes are strictly barred. If you ask to restart a service, the system generates a single-use, 6-character hex token backed by a 60-second Time-to-Live (TTL).
Confirmed Execution (confirm_service_remediation): Only when the engineer explicitly reads back the token does the agent call ecs:UpdateService with forceNewDeployment: true. Alexa then confirms the resulting ECS deployment ID. If the token expires or is spoken incorrectly, the command is aborted immediately, keeping AWS infrastructure untouched.
Serverless Footprint: The entire backend runs on containerized AWS Lambda with sub-second execution overhead and zero idle compute costs.
How we built it
Serverless Ingress & Runtime: We built our backend using Fastify in TypeScript on Node.js 22 inside a multi-stage Docker container. To achieve high-throughput streaming on AWS Lambda Function URLs, we natively compiled the official Rust AWS Lambda Web Adapter (aws-lambda-web-adapter) from source during the build.
Model Context Protocol (MCP): We implemented the formal MCP specification (protocolVersion: 2025-11-25), complete with structured JSON-RPC 2.0 error handling and stateful session handshakes (mcp-session-id).
AWS Service Integration: We orchestrated CloudWatch alarms, CloudWatch Logs, Amazon Bedrock Runtime, and Amazon ECS using the AWS SDK under least-privilege IAM execution roles.
Voice Security & Normalization: Ingress requests validate Amazon certificate chains and reject timestamp skews greater than 150 seconds to defend against replay attacks. On the speech side, we built a bidirectional normalization parser to reliably convert spoken alphanumerics (e.g., "three a. eight b. zero zero") into clean hex tokens (3a8b00).
Challenges we ran into
The 9-Byte Binary Trap (Exit Code 127): During early container builds, remote download scripts silently retrieved an HTTP 404 HTML error page instead of the compiled Lambda Web Adapter binary. Lambda tried executing that 9-byte text file on boot and crashed with exit status 127: command not found. We resolved this by compiling the adapter directly from the official Rust source inside our Dockerfile.
Alexa's 8-Second Voice Timeout: Alexa enforces an 8-second execution limit before dropping voice sessions. Querying sprawling log groups or running unconstrained LLM calls easily exceeds that window. We kept latency well under 3 seconds by scoping CloudWatch queries to a strict 15-minute regex window and capping Bedrock response generation to 256 tokens.
Spoken Token Parsing: Speech-to-text engines transcribe hex tokens unpredictably, often outputting compound numbers or dotted characters (like "sixty seventy two a. zero"). We implemented custom text normalization to reliably map spoken utterances back to raw hex strings.
Accomplishments that we're proud of
Sub-second execution speeds on containerized serverless Lambda without paying for idle cluster capacity.
An ironclad Two-Phase Commit safety mechanism that completely eliminates autonomous AI hallucination risks in cloud environments.
Full compliance with both the open Model Context Protocol standard and Amazon Alexa voice security standards.
What we learned
Real-world AI operations require an architectural separation between read-only diagnostic telemetry and destructive state mutations.
How to compile and package native Rust extensions inside containerized serverless environments to achieve low-latency event-driven voice pipelines.
What's next for CloudOps Agent:Voice-Directed MCP SRE Commander
Multi-cluster Kubernetes (EKS) support and automated canary rollback triggers.
Dynamic anomaly correlation linking voice alerts directly to CloudWatch Metric Math alarms.
Multi-region disaster recovery orchestration with voice-verified traffic shifting across Route 53.
Built With
- alexaskillskit
- bedrock
- cloudwatch
- docker
- ecs
- fastify
- lambda
- mcp
- node.js
- rust
- typescript
Log in or sign up for Devpost to join the conversation.