<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: kallur harshu</title>
    <description>The latest articles on DEV Community by kallur harshu (@kallur_harshu_31e80408bc8).</description>
    <link>https://dev.to/kallur_harshu_31e80408bc8</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4192215%2F2b5b92ea-7cbb-41d1-87e6-6e80a2b680bc.png</url>
      <title>DEV Community: kallur harshu</title>
      <link>https://dev.to/kallur_harshu_31e80408bc8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kallur_harshu_31e80408bc8"/>
    <language>en</language>
    <item>
      <title>TraceOps AI: Building an AI-Powered Service Investigation Agent with FalkorDB and MCP</title>
      <dc:creator>kallur harshu</dc:creator>
      <pubDate>Sun, 18 Oct 2026 13:57:59 +0000</pubDate>
      <link>https://dev.to/kallur_harshu_31e80408bc8/traceops-ai-building-an-ai-powered-service-investigation-agent-with-falkordb-and-mcp-ooa</link>
      <guid>https://dev.to/kallur_harshu_31e80408bc8/traceops-ai-building-an-ai-powered-service-investigation-agent-with-falkordb-and-mcp-ooa</guid>
      <description>&lt;p&gt;How I combined graph-based operational knowledge, local AI, and Model Context Protocol to investigate microservice failures with connected evidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modern applications are rarely built as a single service. They consist of multiple interconnected services, databases, APIs, deployments, and teams. When one service starts failing, the problem may affect several other services through their dependencies.&lt;/p&gt;

&lt;p&gt;The difficult part of troubleshooting is not simply identifying that something is broken. It is understanding &lt;strong&gt;what is connected to the failure, which services may be impacted, what evidence is available, and where an engineer should investigate next.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That challenge inspired me to build &lt;strong&gt;TraceOps AI&lt;/strong&gt;, an AI-powered service investigation and root-cause analysis prototype developed for FalkorDB Graph Hacks.&lt;/p&gt;

&lt;p&gt;My project explores how a graph database can provide structured operational context to an AI agent, enabling it to investigate service dependencies, retrieve related incidents, identify service ownership, and find relevant troubleshooting runbooks.&lt;/p&gt;

&lt;p&gt;The project focuses on the hackathon track &lt;strong&gt;Agents That Act on Connected Data&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Operational Information Is Connected, but Troubleshooting Is Difficult
&lt;/h2&gt;

&lt;p&gt;Consider a system containing Payment API, Checkout, Order Management, and Auth Service.&lt;/p&gt;

&lt;p&gt;Order Management depends on Checkout, and Checkout depends on Payment API. If Payment API becomes degraded, the impact may extend beyond the service where the issue originated.&lt;/p&gt;

&lt;p&gt;An engineer investigating this situation may need to answer several questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which services depend on the degraded service?&lt;/li&gt;
&lt;li&gt;What is the dependency path between an affected service and the failure?&lt;/li&gt;
&lt;li&gt;Which team owns the service?&lt;/li&gt;
&lt;li&gt;Are there related incidents?&lt;/li&gt;
&lt;li&gt;Is there a deployment associated with the incident?&lt;/li&gt;
&lt;li&gt;Which runbook contains troubleshooting guidance?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions require information from multiple connected entities.&lt;/p&gt;

&lt;p&gt;A conventional list of services or a collection of disconnected records does not naturally represent these relationships. An engineer or automated system must reconstruct the connections before it can understand the operational context.&lt;/p&gt;

&lt;p&gt;I wanted to explore a different approach: &lt;strong&gt;represent the operational environment as a graph and allow an AI agent to investigate that graph through structured tools.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing TraceOps AI
&lt;/h2&gt;

&lt;p&gt;TraceOps AI combines FalkorDB, Model Context Protocol (MCP), a local language model, and a web interface to support graph-based service investigations.&lt;/p&gt;

&lt;p&gt;Rather than asking a language model to guess why a service failed, the system can retrieve connected evidence from the graph and use that information to construct an investigation response.&lt;/p&gt;

&lt;p&gt;The prototype includes synthetic operational data representing services, teams, incidents, deployments, and runbooks.&lt;/p&gt;

&lt;p&gt;Its main capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service dependency exploration&lt;/li&gt;
&lt;li&gt;Multi-hop dependency traversal&lt;/li&gt;
&lt;li&gt;Service ownership lookup&lt;/li&gt;
&lt;li&gt;Related incident retrieval&lt;/li&gt;
&lt;li&gt;Runbook discovery&lt;/li&gt;
&lt;li&gt;Deployment and incident correlation&lt;/li&gt;
&lt;li&gt;AI-assisted investigation reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to claim that every investigation establishes a definitive root cause. Instead, TraceOps AI aims to help connect relevant evidence and distinguish observed relationships from conclusions that still need verification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why FalkorDB Is Central to the Project
&lt;/h2&gt;

&lt;p&gt;One of the most important architectural decisions was using FalkorDB as the core graph database.&lt;/p&gt;

&lt;p&gt;In TraceOps AI, the information is represented through nodes and relationships rather than treated as unrelated records.&lt;/p&gt;

&lt;h3&gt;
  
  
  Graph data model
&lt;/h3&gt;

&lt;p&gt;The graph contains the following main entity types:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Node label&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Service&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Represents an application or microservice&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Team&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Represents the team responsible for a service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Incident&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Represents an operational incident&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Deployment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Represents a software deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Runbook&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Represents troubleshooting documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Relationships connect these entities:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Relationship&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DEPENDS_ON&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Connects a service to a service it depends on&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OWNED_BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Connects a service to its responsible team&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AFFECTED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Connects an incident to an affected service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HAS_RUNBOOK&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Connects a service to a relevant runbook&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DEPLOYED_TO&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Connects a deployment to its target service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FOLLOWED_BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Represents the modeled association between a deployment and a subsequent incident&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This structure allows the system to retrieve operational context by traversing relationships.&lt;/p&gt;

&lt;p&gt;For example, a service investigation can start at Payment API, retrieve its owner, locate incidents affecting it, discover associated runbooks, and inspect modeled deployment relationships.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exploring multi-hop dependencies
&lt;/h3&gt;

&lt;p&gt;One useful graph operation is traversing dependencies across multiple services.&lt;/p&gt;

&lt;p&gt;In the synthetic graph, the dependency path is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Order Management → Checkout → Payment API&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This tells us that Payment API is two dependency hops away from Order Management.&lt;/p&gt;

&lt;p&gt;That relationship is useful when investigating potential downstream effects. If Payment API becomes unavailable, Order Management may be impacted through Checkout.&lt;/p&gt;

&lt;p&gt;The graph provides a path that can be inspected and explained. It does not, by itself, prove that Order Management is experiencing an actual failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example Cypher query
&lt;/h3&gt;

&lt;p&gt;A simplified Cypher query for exploring services that depend on Payment API is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="k"&gt;MATCH&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;source:&lt;/span&gt;&lt;span class="n"&gt;Service&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:DEPENDS_ON&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;target:&lt;/span&gt;&lt;span class="n"&gt;Service&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;toLower&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target.name&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"payment api"&lt;/span&gt;
&lt;span class="k"&gt;RETURN&lt;/span&gt; &lt;span class="n"&gt;source.name&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
       &lt;span class="nf"&gt;length&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;dependency_hops&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;dependency_hops&lt;/span&gt;&lt;span class="ss"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query traverses directed &lt;code&gt;DEPENDS_ON&lt;/code&gt; relationships toward Payment API and returns the upstream services and their dependency distances.&lt;/p&gt;

&lt;p&gt;The important point is that the result comes from graph traversal. The system does not need to ask the language model to invent a dependency chain.&lt;/p&gt;

&lt;p&gt;FalkorDB therefore performs a meaningful part of the investigation rather than serving merely as a place to visualize the architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting the Graph to an AI Agent with MCP
&lt;/h2&gt;

&lt;p&gt;A graph database can store valuable operational knowledge, but an AI agent also needs a structured way to access it.&lt;/p&gt;

&lt;p&gt;For this project, I integrated graph investigation capabilities through the Model Context Protocol (MCP).&lt;/p&gt;

&lt;p&gt;MCP provides a standard way for an AI application to discover and invoke tools exposed by a server. In TraceOps AI, the tools connect the agent's investigation workflow to graph-backed operations.&lt;/p&gt;

&lt;p&gt;The project includes tools for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_service_details&lt;/code&gt; — retrieve service information&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;find_dependencies&lt;/code&gt; — explore dependency relationships&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_service_owner&lt;/code&gt; — identify the owning team&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_related_incidents&lt;/code&gt; — retrieve associated incident evidence&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_service_runbooks&lt;/code&gt; — locate relevant runbooks&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_incident_deployment_correlations&lt;/code&gt; — inspect modeled deployment and incident associations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This separation is important.&lt;/p&gt;

&lt;p&gt;The graph database manages the connected operational information. The MCP tools expose specific operations. The AI agent interprets the user's request and uses the available tools to gather relevant evidence.&lt;/p&gt;

&lt;p&gt;The language model is not treated as the source of truth for service dependencies or incident records.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local AI with Ollama and Qwen
&lt;/h2&gt;

&lt;p&gt;For the language-model component, I used Ollama with Qwen 2.5 3B.&lt;/p&gt;

&lt;p&gt;Running the model locally allowed me to develop and test the prototype without sending investigation prompts to an external hosted language-model API.&lt;/p&gt;

&lt;p&gt;The local model supports the conversational investigation experience, while the backend and graph tools provide access to structured operational information.&lt;/p&gt;

&lt;p&gt;This division of responsibilities is a key design principle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FalkorDB&lt;/strong&gt; stores and connects operational knowledge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP&lt;/strong&gt; exposes graph investigation operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The local language model&lt;/strong&gt; interprets requests and helps communicate the findings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The backend&lt;/strong&gt; coordinates the application workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The frontend&lt;/strong&gt; lets users submit investigations and inspect the results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local inference has practical trade-offs, including hardware requirements, response latency, and the reasoning limitations of a small model. Those constraints make it especially important to ground responses in retrieved evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture and Investigation Workflow
&lt;/h2&gt;

&lt;p&gt;The application includes a React-based frontend, a Flask backend, MCP-based graph tools, FalkorDB, and the local Ollama model.&lt;/p&gt;

&lt;p&gt;The investigation workflow can be summarized as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Receive the question.&lt;/strong&gt; A user asks the AI Investigator to investigate a service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interpret the request.&lt;/strong&gt; The agent determines which operational information is relevant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieve graph evidence.&lt;/strong&gt; MCP tools query FalkorDB for service details, dependencies, ownership, incidents, runbooks, or deployment correlations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traverse relationships.&lt;/strong&gt; Graph queries retrieve connected evidence, including multi-hop dependency paths where applicable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Construct the investigation response.&lt;/strong&gt; The agent uses the retrieved information to explain the findings and identify useful next steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Present the results.&lt;/strong&gt; The frontend displays the investigation output to the user.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The application also provides service topology and investigation result views.&lt;/p&gt;

&lt;p&gt;This architecture keeps graph retrieval separate from language generation, making the workflow easier to test and reason about.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Walkthrough: Investigating Payment API
&lt;/h2&gt;

&lt;p&gt;Consider a user asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Investigate Payment API and identify related incidents, dependencies, the owning team, and relevant runbooks. Check whether a deployment is associated with the incident.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The synthetic graph contains Payment API as a degraded service, incident &lt;code&gt;INC-1045&lt;/code&gt; with high severity and an investigating status, deployment &lt;code&gt;DEP-208&lt;/code&gt; running version &lt;code&gt;v2.4.1&lt;/code&gt;, the Payment Platform team, and the associated payment runbook &lt;code&gt;RB-PAY-01&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;TraceOps AI can retrieve this information through its graph investigation capabilities.&lt;/p&gt;

&lt;p&gt;It can then present the connected evidence, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Incident:&lt;/strong&gt; &lt;code&gt;INC-1045&lt;/code&gt;, a high-severity payment incident&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; &lt;code&gt;DEP-208&lt;/code&gt;, version &lt;code&gt;v2.4.1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owning team:&lt;/strong&gt; Payment Platform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runbook:&lt;/strong&gt; &lt;code&gt;RB-PAY-01&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependencies:&lt;/strong&gt; Connected service paths retrieved from the graph&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the graph contains a modeled relationship between the deployment and the incident, the system can report that association.&lt;/p&gt;

&lt;p&gt;However, an association is not sufficient proof that the deployment caused the incident. Establishing causality would require additional evidence, such as verified timing, logs, metrics, or a confirmed investigation result.&lt;/p&gt;

&lt;p&gt;This distinction is important because an operational AI system should help engineers investigate problems, not confidently invent explanations.&lt;/p&gt;

&lt;p&gt;The project also supports exploring a different service, such as Auth Service, where the connected evidence includes its owner, a resolved authentication incident, and an authentication runbook.&lt;/p&gt;

&lt;p&gt;These scenarios demonstrate how different graph starting points can produce different investigation contexts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Challenges and What I Learned
&lt;/h2&gt;

&lt;p&gt;Building TraceOps AI involved more than connecting a language model to a database. Several lessons shaped the implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Designing a graph that solves a real problem
&lt;/h3&gt;

&lt;p&gt;A graph database is most useful when relationships are essential to the task.&lt;/p&gt;

&lt;p&gt;Simply storing service names in a graph would not justify the architecture. The valuable part is the ability to follow dependencies, connect incidents to affected services, retrieve ownership information, and traverse operational relationships.&lt;/p&gt;

&lt;p&gt;I learned to think about the graph in terms of the questions the application needs to answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Making graph traversal meaningful
&lt;/h3&gt;

&lt;p&gt;A dependency relationship has direction. If Checkout depends on Payment API, traversing from Checkout toward Payment API answers a different question from traversing in the reverse direction.&lt;/p&gt;

&lt;p&gt;Understanding this distinction is necessary when identifying dependencies versus potential impact.&lt;/p&gt;

&lt;p&gt;Multi-hop traversal also needs sensible bounds and clear interpretation so that the results remain useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Separating evidence from AI-generated explanations
&lt;/h3&gt;

&lt;p&gt;A language model can generate plausible technical explanations even when the supporting evidence is incomplete.&lt;/p&gt;

&lt;p&gt;By exposing structured graph operations through MCP, the system can retrieve specific facts and relationships before presenting an investigation.&lt;/p&gt;

&lt;p&gt;I learned that tool access alone does not guarantee correct reasoning. The application must also validate the retrieved evidence and avoid treating correlation as proof of causation.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Making the system testable
&lt;/h3&gt;

&lt;p&gt;The project includes tests for investigation behavior, dependency direction, deployment correlations, and causal validation.&lt;/p&gt;

&lt;p&gt;Testing these areas is important because an investigation can look convincing while still traversing the wrong relationship or making an unsupported conclusion.&lt;/p&gt;

&lt;p&gt;I also learned the importance of checking the application at multiple levels: database connectivity, graph queries, backend logic, MCP integration, frontend behavior, and end-to-end investigation.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Working with a local model
&lt;/h3&gt;

&lt;p&gt;Using Ollama and Qwen 2.5 3B provided a local inference setup, but it also highlighted the need to design tool workflows carefully.&lt;/p&gt;

&lt;p&gt;A small model may not always select the correct tool or interpret a complex investigation perfectly. Clear tool descriptions, structured results, validation, and well-designed prompts all contribute to reliability.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Building incrementally
&lt;/h3&gt;

&lt;p&gt;I developed the project in stages, from database setup and synthetic graph creation to investigation queries, MCP integration, frontend functionality, and testing.&lt;/p&gt;

&lt;p&gt;This incremental approach made it easier to isolate problems and verify each component before building on it.&lt;/p&gt;

&lt;p&gt;It also reinforced a practical lesson: an AI application is only as dependable as the complete system around the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing and Validation
&lt;/h2&gt;

&lt;p&gt;During development, the project reached the following milestones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FalkorDB connectivity was verified locally.&lt;/li&gt;
&lt;li&gt;A synthetic operational graph was created and queried.&lt;/li&gt;
&lt;li&gt;The investigation logic was covered by a Python test suite.&lt;/li&gt;
&lt;li&gt;The frontend lint and production build completed successfully.&lt;/li&gt;
&lt;li&gt;The interface was connected to the backend investigation workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are development validation results, not a claim of production readiness or a measured improvement in incident resolution time.&lt;/p&gt;

&lt;p&gt;The next stage would be testing against larger synthetic graphs, adding more realistic incident evidence, measuring retrieval accuracy, and evaluating the quality and latency of investigation responses.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Comes Next?
&lt;/h2&gt;

&lt;p&gt;TraceOps AI is a prototype, and there is room to extend it.&lt;/p&gt;

&lt;p&gt;Potential future improvements include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrating time-series metrics, structured logs, and traces.&lt;/li&gt;
&lt;li&gt;Incorporating deployment timestamps and richer change metadata.&lt;/li&gt;
&lt;li&gt;Adding confidence and provenance information to investigation findings.&lt;/li&gt;
&lt;li&gt;Expanding graph coverage and testing more complex dependency networks.&lt;/li&gt;
&lt;li&gt;Measuring graph retrieval accuracy and end-to-end response quality.&lt;/li&gt;
&lt;li&gt;Adding safeguards for tool failures, missing data, and unsupported conclusions.&lt;/li&gt;
&lt;li&gt;Evaluating multi-tenant graph isolation and access control before handling real operational data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These improvements would help move the prototype toward a more comprehensive operational investigation assistant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;TraceOps AI was an opportunity to explore a practical use of graph databases and AI agents.&lt;/p&gt;

&lt;p&gt;The central insight is that service troubleshooting depends on relationships. A degraded service, its dependencies, its owning team, related incidents, deployments, and runbooks form a connected operational picture.&lt;/p&gt;

&lt;p&gt;FalkorDB provides the graph structure and traversal capabilities to retrieve that context. MCP exposes the relevant operations to an AI agent, and a local language model helps turn retrieved evidence into an understandable investigation.&lt;/p&gt;

&lt;p&gt;For me, the biggest learning was that building a useful AI agent is not just about choosing a model. It is about designing the right data model, exposing reliable tools, validating evidence, and making the system's conclusions explainable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TraceOps AI demonstrates how connected data can give an AI agent a more structured foundation for investigating complex technical systems.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project was developed for FalkorDB Graph Hacks under the track &lt;strong&gt;Agents That Act on Connected Data&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Project: TraceOps AI&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Technologies: FalkorDB, Cypher, Python, Flask, MCP, Ollama, Qwen 2.5 3B, React, and Vite.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project repository:&lt;/strong&gt; &lt;a href="https://github.com/Harshukallur/TraceOps_AI.git" rel="noopener noreferrer"&gt;https://github.com/Harshukallur/TraceOps_AI.git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture:&lt;/strong&gt; &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff3k6zpc3e57jrvdv06w2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff3k6zpc3e57jrvdv06w2.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Acknowledgements:&lt;/strong&gt; Thanks to the FalkorDB Graph Hacks organizers for the opportunity to explore graph-powered AI applications.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
