aegis
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@aegisFind the root cause of the checkout 504s and suggest a fix"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AEGIS
Graph-native incident investigation agent built on FalkorDB.
Description
When checkout returns 504s, the cause is usually several hops downstream: a commit that removed a pool timeout, owned by another team, against an architecture decision (ADR) written a year ago. Vector search over runbooks finds text about timeouts. It cannot tell you which commit, who wrote it, who owns the service, which ADR governs it, or what breaks if you isolate it.
AEGIS stores topology, deployments, people, teams, ADRs, runbooks, playbooks and agent memory in one FalkorDB graph. It uses graph traversals and algorithms to localize a likely cause, proposes a mitigation with an evidence path, and after human approval runs a scoped simulation that rewires the graph.
No evidence: returns
INSUFFICIENT_EVIDENCE, never a guess.No approval: no action.
A simulated mitigation is never recorded as a real recovery.
Related MCP server: GxP MDM MCP Server
Tech stack
Layer | Technology |
Graph database | FalkorDB ( |
Query language | Cypher (variable-length paths, vector and full-text indexes, graph algorithms) |
Backend | Python, FastAPI, Uvicorn, Pydantic |
Agent interface | Model Context Protocol (MCP Python SDK 2.x, stdio) |
Frontend | Vanilla JavaScript + SVG, no build step, no CDN |
Tooling | Docker Compose, pytest |
Hackathon tracks
Built for Graph Hacks: Context for AI Agents. Entered in all three tracks.
Track | Focus | Implementation |
01 Agents That Act on Connected Data | Multi-hop reasoning | Variable-length Cypher from incident to affected services, deployments, authors, owning teams and governing ADRs |
Algorithms as agent tools, MCP | PageRank, betweenness, WCC, label propagation, weighted shortest paths via API and a tenant-bound MCP server | |
Actions and explainability | Mitigation derived from topology; approved simulation rewires the graph; every proposal carries its evidence path | |
02 Agent Memory and Coordination | Shared state and handoffs |
|
Episodic memory, per-tenant isolation |
| |
03 Company Brain | Who owns what, tracing decisions | People, teams, services, commits, ADRs, runbooks and incidents in one graph; ownership, authorship and governing ADR answered by traversal |
Answers with sources | Full-text runbook search; every conclusion links back to source nodes |
Dashboard
Served at /. Vanilla JS + SVG, no build step, no CDN.
Topology: services as status-colored cards laid out by dependency depth; context nodes (incident, commit, team, person, ADR, runbook, playbook, episode, investigation, tasks) as chips. Select a node to see all its links.
Live graph: refreshes after investigating and after simulating. An approved simulation shows isolated dependencies as dashed amber edges.
Investigation console: pick an incident, run the workflow, read the three persisted stages, review the proposal and its evidence.
Approval gate: Approve and Simulate stay disabled until the review checkbox is ticked and the API accepts approval.
Graph capabilities: per-algorithm availability and row counts.
Agent memory and Company search: retention preview/archive, runbook and ownership search.
Architecture
flowchart LR
UI["Dashboard"] -->|HTTP| API["FastAPI<br/>auth + tenant allow-list"]
AG["MCP agents"] -->|stdio| MCP["MCP server<br/>tenant-bound"]
API --> ENG["AegisGraphEngine"]
MCP --> ENG
ENG -->|"Cypher / select_graph(tenant)"| G1[("aegis_demo")]
ENG -.->|isolated| G2[("aegis_other")]
G1 --- ALG["Algorithms<br/>PageRank, Betweenness, WCC,<br/>LabelPropagation, SPpaths"]
G1 --- IDX["Indexes<br/>Vector, Full-text"]If FalkorDB is unreachable, requests fail with 503. There is no fallback data.
Graph model
flowchart LR
INC(["Incident"]) -- AFFECTS --> SVC(["Service"])
SVC -- DEPENDS_ON --> SVC2(["Service"])
COMMIT(["Commit"]) -- DEPLOYED_TO --> SVC
PERSON(["Person"]) -- AUTHORED --> COMMIT
PERSON -- MEMBER_OF --> TEAM(["Team"])
TEAM -- OWNS --> SVC
ADR(["Decision / ADR"]) -- GOVERNS --> SVC
DOC(["Document"]) -- DOCUMENTS --> SVC
PB(["Playbook"]) -- MITIGATES --> SVC
EP(["Episode"]) -- RECORDED_IN --> SVC
INV(["Investigation"]) -- ANALYZED --> INC
INV -- HAS_TASK --> T1(["AgentTask"])
T1 -- HANDOFF_TO --> T2(["AgentTask"])
INV -- USES_EVIDENCE --> EPOwnership (OWNS) and authorship (AUTHORED) are resolved separately: a commit's author is not necessarily on the owning team.
Investigation workflow
Three stages hand off through the graph. Each reads its predecessor's persisted output, so an interrupted run resumes without redoing work.
sequenceDiagram
autonumber
participant U as Operator
participant E as Engine
participant F as FalkorDB
U->>E: investigate(INC-2026-901)
E->>F: create Investigation (OBSERVED)
Note over E,F: LOCATE
E->>F: multi-hop Cypher over ACTIVE edges
E->>F: write AgentTask LOCATE
Note over E,F: SUGGEST
E->>F: read LOCATE, vector recall of Episodes, playbooks
E->>F: write AgentTask SUGGEST + HANDOFF_TO
Note over E,F: PROPOSE
E->>F: read SUGGEST, reverse-reachability blast radius
E->>F: write AgentTask PROPOSE, status PROPOSED
E-->>U: proposal + evidence path (never executed)
U->>E: approve, then simulate
E->>F: one write: isolate edges + SIMULATED_OUTCOMEstateDiagram-v2
[*] --> OBSERVED
OBSERVED --> PROPOSED: evidence found
OBSERVED --> INSUFFICIENT_EVIDENCE: no supported candidate
PROPOSED --> APPROVED: human approval
APPROVED --> SIMULATED: scoped simulation
SIMULATED --> [*]A service/commit pair is a candidate only if: it is reachable from the incident entry point over active dependency edges (3 hops max); the service is DEGRADED or CRITICAL; a commit was deployed to it before the incident, within 24 hours, in the same environment; and any governing ADR is ACCEPTED and valid at incident time. Scores are labeled heuristics, not calibrated confidence.
FalkorDB usage
Feature | Use |
Graph algorithms |
|
Variable-length Cypher | Localization and reverse-reachability blast radius, filtered on relationship status |
Vector index |
|
Full-text index |
|
Graph-persisted state |
|
Topology mutation |
|
Multigraph tenancy |
|
Atomic outcome | Topology change and outcome memory in a single Cypher write |
Quick start
Embedded, no Docker:
git clone https://github.com/krish57-bit/AEGIS.git
cd AEGIS
python3 -m venv .venv && . .venv/bin/activate
pip install -r requirements.txt falkordblite==0.10.0
GRAPH_MODE=embedded uvicorn backend.main:app --host 127.0.0.1 --port 8000Open http://127.0.0.1:8000 and click Seed demo.
With Docker:
pip install -r requirements.txt
docker compose up -d --wait
uvicorn backend.main:app --host 127.0.0.1 --port 8000GRAPH_MODE defaults to remote. Tested on macOS/arm64, Python 3.14, falkordb==1.8.0.
MCP server
GRAPH_MODE=embedded python -m backend.mcp_server{
"mcpServers": {
"aegis": {
"command": "/absolute/path/to/.venv/bin/python",
"args": ["-m", "backend.mcp_server"],
"cwd": "/absolute/path/to/AEGIS",
"env": { "GRAPH_MODE": "embedded", "AEGIS_MCP_TENANT": "demo" }
}
}
}Tool | Purpose |
| Topology snapshot |
| Open incidents |
| Algorithm results and availability |
| Locate, suggest, propose; persists a trace |
| Read a stored trace |
| Episodic memories |
| Always dry-run |
| Runbooks and ownership |
Not exposed: raw Cypher, tenant switching, approval, simulation, destructive flags.
HTTP API
Header X-Tenant-ID: demo (allow-listed). Docs at /docs.
Endpoint | Purpose |
| Database reachability (public) |
| Idempotent tenant initialization |
| Reads (unseeded tenant returns empty) |
| Run workflow: |
| Read or resume from persisted stages |
| Approval, then scoped simulation ( |
|
|
| Full-text runbooks and ownership |
Safety
Each property is covered by a test.
Unknown incident returns
404; no supported candidate returnsINSUFFICIENT_EVIDENCEand cannot be approved.Simulation requires approval, touches only approved targets, and is idempotent.
Unexecuted proposals never become success memories; outcomes are labeled
SIMULATED_OUTCOME; telemetry and incident status are untouched.Retention is dry-run first, has a 24 h grace period, archives rather than deletes, and skips protected evidence.
An interrupted investigation resumes from the persisted
LOCATEstage.Optional algorithms report
available: falseinstead of failing or faking scores.Tenant ids are validated (
[a-z][a-z0-9_]{0,47}) and allow-listed, never rewritten.Loopback-only by default; non-local access requires
AEGIS_API_KEY.
Tests
pip install pytest
pytest # 6 fast tests
AEGIS_TEST_GRAPH=1 pytest # + 7 integration tests on embedded FalkorDB13 passing. The full workflow was also run manually against the falkordb/falkordb:v4.14.9 container, an MCP stdio client, and the dashboard in Chrome.
Configuration
Variable | Meaning | Default |
|
|
|
| Remote connection |
|
| Embedded data file |
|
|
| none |
| Tenant allow-list |
|
| Fixed MCP tenant |
|
A shared key is not per-user RBAC.
Project structure
backend/
graph_engine.py FalkorDB engine: seed, algorithms, workflow, retention, search
main.py FastAPI app, auth gate, error mapping
mcp_server.py Tenant-bound MCP adapter
seed.py Synthetic demo data
frontend/index.html Dashboard
LICENSE MIT
tests/ test_api.py, test_integration.py
docker-compose.yml Pinned FalkorDB, loopback-only, persistent volumeLimitations
Deterministic stages, not LLM agents. The graph is the source of truth; an LLM layer could sit on top.
risk_scoreis seeded demo data. Output is a ranked hypothesis with evidence, not causal proof.Simulation only; no live executor.
One synthetic incident; no real telemetry ingestion.
8-d keyword vectors, not learned embeddings; similarity threshold is untuned.
Task claiming is single-process.
algo.HarmonicCentralityis not registered infalkordb/falkordb:v4.14.9or FalkorDBLite 0.10.0, so it is reported unavailable.
Roadmap
LLM reasoning layer that calls the same graph tools
Telemetry ingestion (Prometheus / OpenTelemetry)
Task leases for multi-worker coordination
Bi-temporal facts for ownership and policy
Per-user authentication and tenant authorization
Learned embeddings with versioned indexes
License
AI-assistance disclosure
AI coding assistance (Claude via the Backboard IDE) was used for scaffolding, the dashboard, tests and documentation. The data model, Cypher, workflow design and safety constraints were reviewed by the participant and run against real FalkorDB instances.
References
Conceptual inspiration only; no benchmark results are claimed: CoALA, SGAgent, FalkorDB, Graph Hacks.
This server cannot be deployed
Maintenance
Related MCP Connectors
Knowledge graph for AI agents. Query concepts, walk edges, get advisories.
Company brain for AI agents — temporal knowledge graph search, exploration, and durable memory.
Governed map of company knowledge for humans + agents.
Persistent knowledge graph for AI-augmented teams. Store decisions, findings, and standing rules across agent sessions with semantic search and typed connections. Includes cross-session memory, audit trail, workspace isolation, and secret detection. Built for teams running agents that need to remember. Free until launch with team tier as default, anon trial available.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to query and record SOC analyst reasoning via a knowledge graph, allowing access to institutional memory from Splunk.MIT
- FlicenseNot gradedqualityCmaintenanceLets AI agents query a computerized system inventory as a knowledge graph using Cypher, enabling blast radius, data lineage, regulation checks, and change impact assessments while preventing hallucinated regulatory claims.-
- FlicenseNot gradedqualityCmaintenanceEnables manufacturing traceability queries and analysis through GraphRAG, supporting semantic search, graph traversal, natural language to Cypher, defect chain retrieval, requirement traceability, and product health dashboards.-
- AlicenseNot gradedqualityBmaintenanceEnables agents to route spoken requests to the right project on the right machine and to remember the outcome by reading and writing a FalkorDB graph, so learned aliases, clarification answers, and episodes carry over across sessions. Exposes five fixed, validated graph tools — route_request, whats_running, machine_blast_radius, project_history, and why_heard — each answering with its MATCH path, Cypher, and parameters, and reporting not-in-graph or ambiguous names distinctly instead of guessing.MIT