<?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: Sambhav Raj</title>
    <description>The latest articles on DEV Community by Sambhav Raj (@sambhavraj18).</description>
    <link>https://dev.to/sambhavraj18</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%2F4141374%2F8a9a0418-82d8-40a0-85fa-2a4a3b5e2c60.png</url>
      <title>DEV Community: Sambhav Raj</title>
      <link>https://dev.to/sambhavraj18</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sambhavraj18"/>
    <language>en</language>
    <item>
      <title>Building an Agentic Fraud Investigation Agent with TigerGraph, MCP, and GraphRAG</title>
      <dc:creator>Sambhav Raj</dc:creator>
      <pubDate>Thu, 24 Sep 2026 17:24:47 +0000</pubDate>
      <link>https://dev.to/sambhavraj18/building-an-agentic-fraud-investigation-agent-with-tigergraph-mcp-and-graphrag-mkc</link>
      <guid>https://dev.to/sambhavraj18/building-an-agentic-fraud-investigation-agent-with-tigergraph-mcp-and-graphrag-mkc</guid>
      <description>&lt;h1&gt;
  
  
  Building an Agentic Fraud Investigation Agent with TigerGraph, MCP, and GraphRAG
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Subtitle:&lt;/strong&gt; &lt;em&gt;How we built a policy-constrained investigation system that combines graph-based evidence, agentic tool use, deterministic fraud policies, and persistent case memory.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. Why Fraud Investigation Is Not Just a Binary Classifier
&lt;/h2&gt;

&lt;p&gt;In production banking systems, fraud detection is often treated as a standard supervised classification problem: a real-time model outputs an anomaly score between $0.0$ and $1.0$, and transactions above a certain threshold get flagged.&lt;/p&gt;

&lt;p&gt;However, once an alert fires, &lt;strong&gt;the actual investigation begins&lt;/strong&gt;. An experienced fraud analyst does not simply trust a raw score. They must answer critical operational questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Is this $480 purchase normal for this cardholder based on their 6-month historical spending profile?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Did this transaction happen in isolation, or is it part of a 4-transaction rapid authorization burst over the last 90 minutes?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Has this hardware device fingerprint or browser profile appeared on 40 other distinct cardholder accounts this week?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Has the bank seen a similar modus operandi in previous closed fraud cases?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Under federal regulatory reporting rules (FinCEN SAR) and bank policy guidelines, does the confirmed exposure require immediate card blocking and mandatory filing?&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When we set out to build our project for the &lt;strong&gt;TigerGraph × Hacker House Goa 2026 Challenge&lt;/strong&gt;, we realized that single-table relational queries and monolithic LLM prompts fail at this task. An LLM provided with raw rows will hallucinate connections, whereas standard SQL joins over multi-hop relationships (transactions $\rightarrow$ cards $\rightarrow$ customers $\rightarrow$ shared devices $\rightarrow$ historical cases) become computationally prohibitive at scale.&lt;/p&gt;

&lt;p&gt;We designed and implemented an &lt;strong&gt;Agentic Fraud Investigation System&lt;/strong&gt;. In our architecture, &lt;strong&gt;TigerGraph Savanna Cloud&lt;/strong&gt; acts as the high-performance grounded knowledge layer, an &lt;strong&gt;LLM Agent Layer&lt;/strong&gt; operates via the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; to reason over evidence iteratively, and a &lt;strong&gt;Deterministic Policy Decision Engine&lt;/strong&gt; strictly enforces bank compliance rules (R1–R10).&lt;/p&gt;




&lt;h2&gt;
  
  
  2. System Architecture: Separation of Concerns
&lt;/h2&gt;

&lt;p&gt;One of our earliest architectural decisions was establishing strict separation between &lt;strong&gt;probabilistic reasoning&lt;/strong&gt; and &lt;strong&gt;authoritative operational execution&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    Alert["Incoming Fraud Alert (Case Trigger)"] --&amp;gt; Agent["Agentic Orchestrator (ReAct Reasoning Loop)"]
    Agent &amp;lt;--&amp;gt;|"MCP Protocol (stdio JSON-RPC)"| MCPServer["TigerGraph MCP Server"]
    MCPServer &amp;lt;--&amp;gt;|"GSQL Query Execution"| TG[("TigerGraph Savanna Cloud\n(590k+ Txns, 5.5k+ Cases)")]
    TG --&amp;gt; Evidence["Evidence &amp;amp; Episode Engine\n(Baseline Stats, Z-Scores, Bursts)"]
    Evidence --&amp;gt; Policy["Deterministic Policy Engine\n(Rules R1–R10 Guardrails)"]
    Policy --&amp;gt; Conclude["Authoritative Investigation Verdict\n&amp;amp; Approval Routing (auto / L1 / L2)"]
    Conclude --&amp;gt; SAR["FinCEN Form 111 SAR Generator\n(When Exposure Threshold Met)"]
    Conclude --&amp;gt; Memory[("TigerGraph Case Memory\n(ClosedCase Vertex Persistence)")]&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Responsibility Matrix
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TigerGraph Savanna Cloud&lt;/strong&gt;: Stores the underlying graph of 590,742 transactions, 13,553 customers, and 5,565 historical closed cases. Executes multi-hop neighborhood traversals and temporal sequence queries in milliseconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;: Exposes standardized investigation tools over &lt;code&gt;stdio&lt;/code&gt; transport.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agentic LLM Layer&lt;/strong&gt;: Evaluates hypotheses, selects the next best tool based on state, and synthesizes human-readable executive summaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic Policy Engine&lt;/strong&gt;: Holds absolute authority over verdicts, actions (&lt;code&gt;BLOCK_CARD&lt;/code&gt;, &lt;code&gt;DECLINE_TRANSACTION&lt;/code&gt;, &lt;code&gt;FILE_REPORT&lt;/code&gt;), approval routing (&lt;code&gt;auto&lt;/code&gt;, &lt;code&gt;L1&lt;/code&gt;, &lt;code&gt;L2&lt;/code&gt;), and regulatory FinCEN SAR thresholds. &lt;strong&gt;The LLM is never allowed to bypass or invent policy rules.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph Case Memory&lt;/strong&gt;: Upserts completed investigations back into TigerGraph (&lt;code&gt;ClosedCase&lt;/code&gt; vertices) to serve as precedents for future investigations.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. The Underlying Graph Schema
&lt;/h2&gt;

&lt;p&gt;Our dataset, derived from the benchmark IEEE-CIS / Vesta fraud corpus, was structured into a native graph schema in TigerGraph:&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;erDiagram
    Customer ||--o{ Card : "OWNS (OWNED_BY)"
    Customer ||--o{ Transaction : "PERFORMED (PERFORMED_BY)"
    Card ||--o{ Transaction : "MADE (TRANSACTION_OF)"
    Transaction ||--o{ DeviceProfile : "FROM_DEVICE (DEVICE_OF)"
    Transaction ||--o{ BillingRegion : "BILLED_IN (REGION_OF)"
    Transaction ||--o{ Transaction : "NEXT (ts_diff)"
    ClosedCase ||--o{ Transaction : "INVOLVES"
    ClosedCase ||--o{ Card : "ON_CARD / CONNECTED_TO"&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Key Graph Entities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Transaction&lt;/code&gt;&lt;/strong&gt; (590,742 vertices): Transaction amounts, timestamps, channels (Online/POS), and risk flags.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Customer&lt;/code&gt;&lt;/strong&gt; (13,553 vertices): Unique account holder entities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Card&lt;/code&gt;&lt;/strong&gt; (1,927 vertices): Payment cards tied to customers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;DeviceProfile&lt;/code&gt;&lt;/strong&gt; (9,705 vertices): Hardware, OS, browser, and screen resolution fingerprints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;BillingRegion&lt;/code&gt;&lt;/strong&gt; (332 vertices): Geographic billing region IDs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ClosedCase&lt;/code&gt;&lt;/strong&gt; (5,565 historical vertices): Training investigations with historical patterns, outcomes, and SAR records.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;NEXT&lt;/code&gt; (Edge)&lt;/strong&gt;: Directed temporal sequence edge connecting chronological transactions on the same card with explicit time deltas (&lt;code&gt;ts_diff&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Graph-Native Investigation via GSQL
&lt;/h2&gt;

&lt;p&gt;Rather than pulling millions of rows into Python memory, we wrote and installed a native GSQL query, &lt;code&gt;investigate_transaction(target_txn)&lt;/code&gt;, directly on TigerGraph Savanna Cloud:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE QUERY investigate_transaction(STRING target_txn) FOR GRAPH FraudInvestigation {
    // 1. Locate flagged target transaction vertex
    Target = {Transaction.*};
    TargetTxn = SELECT t FROM Target:t WHERE t.transaction_id == target_txn;

    // 2. Multi-hop traversal to Card and Customer
    CardSet = SELECT c FROM TargetTxn:t -(TRANSACTION_OF:e)- Card:c;
    CustSet = SELECT cu FROM CardSet:c -(OWNED_BY:e)- Customer:cu;

    // 3. Reconstruct Customer Lifetime History &amp;amp; Spending Baseline
    AllCustTxns = SELECT t FROM CustSet:cu -(PERFORMED:e)- Transaction:t;

    // 4. Device Sharing &amp;amp; Sybil Ring Traversal
    DeviceSet = SELECT d FROM TargetTxn:t -(FROM_DEVICE:e)- DeviceProfile:d;
    SharedCards = SELECT c FROM DeviceSet:d -(DEVICE_OF:e)- Transaction:t -(TRANSACTION_OF:e)- Card:c;

    // 5. Follow NEXT edges for multi-transaction burst reconstruction
    EpisodeTxns = SELECT t2 FROM TargetTxn:t1 -(NEXT*1..5:e)- Transaction:t2;

    PRINT TargetTxn, CardSet, CustSet, AllCustTxns.size(), SharedCards.size(), EpisodeTxns;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This single query packages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Multi-hop neighborhood retrieval around the target.&lt;/li&gt;
&lt;li&gt;Complete customer baseline computation (lifetime spend count, mean, standard deviation, and target Z-score).&lt;/li&gt;
&lt;li&gt;Device network sharing count across distinct cardholder vertices.&lt;/li&gt;
&lt;li&gt;Chronological episode grouping over temporal &lt;code&gt;NEXT&lt;/code&gt; edges.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  5. Tool Interface: Model Context Protocol (MCP)
&lt;/h2&gt;

&lt;p&gt;To enable standardized communication between the agent orchestrator and TigerGraph, we implemented a custom MCP server (&lt;code&gt;src/mcp/server.py&lt;/code&gt;) communicating over standard &lt;code&gt;stdio&lt;/code&gt; JSON-RPC transport:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# MCP Tool Registry (Excerpt from src/mcp/server.py)
&lt;/span&gt;&lt;span class="nd"&gt;@server.list_tools&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;list_investigation_tools&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Tool&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;investigate_transaction&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Executes GSQL multi-hop traversal to retrieve target transaction neighborhood, baseline spend, and device sharing.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;inputSchema&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;target_txn&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;target_txn&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;analyze_evidence&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analyzes graph evidence, computes Z-scores, detects fraud patterns, and groups burst episodes.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;inputSchema&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;raw_graph_data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}}}&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get_similar_closed_cases&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Queries 5,565 historical cases in TigerGraph memory matching detected patterns.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;inputSchema&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pattern&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}}}&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;evaluate_policy_decision&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Enforces deterministic rules R1-R10 to compute exposure, SAR requirement, and approval routes.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;inputSchema&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;case_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}}}&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This decoupling allows the agent to reason explicitly about tool selection without requiring direct database access or embedding proprietary database drivers inside prompt loops.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Real Investigation Case Studies
&lt;/h2&gt;

&lt;p&gt;Let's walk through how the agent investigates two distinct scenarios from our 20-case benchmark suite.&lt;/p&gt;

&lt;h3&gt;
  
  
  Case 1: Confirmed Multi-Transaction Fraud Burst (&lt;code&gt;HHG-006&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;HHG-006&lt;/code&gt; was triggered by a customer dispute regarding an unfamiliar \$482.12 online charge on transaction &lt;code&gt;3476682&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;sequenceDiagram
    autonumber
    participant A as Agent Orchestrator
    participant MCP as TigerGraph MCP
    participant TG as TigerGraph Savanna
    participant PE as Policy Engine

    A-&amp;gt;&amp;gt;MCP: investigate_transaction(target_txn="3476682")
    MCP-&amp;gt;&amp;gt;TG: GSQL investigate_transaction
    TG--&amp;gt;&amp;gt;MCP: Subgraph: Card C07297-K1, 261 Lifetime Txns, Device Ring (46 cards)
    MCP--&amp;gt;&amp;gt;A: Raw Graph Evidence
    A-&amp;gt;&amp;gt;MCP: analyze_evidence(...)
    MCP--&amp;gt;&amp;gt;A: Episode detected: 4 txns (3476602, 3476633, 3476665, 3476682), Total Exposure: $1,906.07
    A-&amp;gt;&amp;gt;MCP: get_similar_closed_cases(pattern="card_not_present_fraud")
    MCP--&amp;gt;&amp;gt;A: Retrieved matching precedents from graph memory
    A-&amp;gt;&amp;gt;PE: evaluate_policy_decision(HHG-006)
    PE--&amp;gt;&amp;gt;A: Verdict: FRAUD (P=0.85) | Actions: DECLINE, BLOCK, CREATE_CASE, FILE_REPORT | SAR: True
    A-&amp;gt;&amp;gt;TG: write_case_to_graph_memory(HHG-006)&lt;/code&gt;&lt;/pre&gt;



&lt;h4&gt;
  
  
  What the Agent Discovered
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Following temporal &lt;code&gt;NEXT&lt;/code&gt; chains backwards revealed that the fraud did not start with &lt;code&gt;3476682&lt;/code&gt;. It was part of a 4-transaction sequence occurring within a 2-hour window:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;3476602&lt;/code&gt;: \$476.51&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;3476633&lt;/code&gt;: \$476.51&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;3476665&lt;/code&gt;: \$476.52&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;3476682&lt;/code&gt;: \$482.12&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The customer's baseline average spend across 261 lifetime purchases was \$112.56.&lt;/li&gt;
&lt;li&gt;The device fingerprint was shared across 46 other cards in the graph, indicating a credential-stuffing or card-not-present fraud ring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Policy Decision Engine Output&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Total Confirmed Exposure: &lt;strong&gt;\$1,906.07&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Verdict: &lt;strong&gt;&lt;code&gt;FRAUD&lt;/code&gt;&lt;/strong&gt; (Probability: 0.85)&lt;/li&gt;
&lt;li&gt;FinCEN SAR Filing: &lt;strong&gt;&lt;code&gt;REQUIRED&lt;/code&gt;&lt;/strong&gt; (Trigger: Exposure &amp;gt; \$1,000 threshold under Policy 3a / Rule R2)&lt;/li&gt;
&lt;li&gt;Recommended Actions: &lt;code&gt;DECLINE_TRANSACTION&lt;/code&gt; (L1) $\rightarrow$ &lt;code&gt;BLOCK_CARD&lt;/code&gt; (L1) $\rightarrow$ &lt;code&gt;CREATE_CASE&lt;/code&gt; (Auto) $\rightarrow$ &lt;code&gt;FILE_REPORT&lt;/code&gt; (L2 Compliance) $\rightarrow$ &lt;code&gt;MONITOR_CONNECTED_CARDS&lt;/code&gt; (Auto).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Case 2: The Uncertainty Workflow (&lt;code&gt;HHG-017&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;A common flaw in naive agent implementations is overconfidence—classifying borderline alerts as definitive fraud. &lt;code&gt;HHG-017&lt;/code&gt; was triggered by an automated risk score of 0.57 on online transaction &lt;code&gt;3450629&lt;/code&gt; (\$100.09).&lt;/p&gt;

&lt;h4&gt;
  
  
  Evidence Breakdown
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Three online transactions occurred: &lt;code&gt;3450436&lt;/code&gt;, &lt;code&gt;3450503&lt;/code&gt;, and &lt;code&gt;3450629&lt;/code&gt; (cumulative exposure: \$300.14).&lt;/li&gt;
&lt;li&gt;The customer profile showed 59 lifetime transactions with an average spend of \$342.87. An amount of \$100.09 was well within normal variance ($Z = -0.57$).&lt;/li&gt;
&lt;li&gt;The device was not new and was not shared across any other cardholders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crucially&lt;/strong&gt;: The activity did &lt;strong&gt;not&lt;/strong&gt; match the formal Policy R5 Card Testing signature (which strictly requires $\ge 3$ micro-authorizations $&amp;lt;\$5$ followed by a large balance extraction).&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Policy R1 Enforcement
&lt;/h4&gt;

&lt;p&gt;Because the evidence rested purely on a single model score without structural fraud indicators, &lt;strong&gt;Policy Rule R1&lt;/strong&gt; took effect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verdict: &lt;strong&gt;&lt;code&gt;UNCERTAIN / REVIEW&lt;/code&gt;&lt;/strong&gt; (Probability: 0.35)&lt;/li&gt;
&lt;li&gt;Confirmed Exposure: &lt;strong&gt;\$300.14&lt;/strong&gt; (at-risk episode)&lt;/li&gt;
&lt;li&gt;SAR Filing: &lt;strong&gt;&lt;code&gt;NOT REQUIRED&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Policy Actions: &lt;strong&gt;&lt;code&gt;VERIFY_WITH_CUSTOMER&lt;/code&gt;&lt;/strong&gt; (Auto) $\rightarrow$ &lt;strong&gt;&lt;code&gt;MONITOR_CARD&lt;/code&gt;&lt;/strong&gt; (Auto).&lt;/li&gt;
&lt;li&gt;The card was &lt;strong&gt;not blocked&lt;/strong&gt;, preventing false-positive customer disruption while keeping the account under raised 72-hour monitoring sensitivity.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Strict Evidence Provenance
&lt;/h2&gt;

&lt;p&gt;To maintain strict regulatory compliance, our system enforces a four-tier provenance model across every claim in the final deliverable:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provenance Label&lt;/th&gt;
&lt;th&gt;Meaning &amp;amp; Scope&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;[GRAPH]&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Observed structural graph fact verified directly from TigerGraph vertices/edges.&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Transaction 3476682 occurred on 2016-11-21 20:30:00 for \$482.12 in billing region 264.&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;[BASELINE]&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Statistical profile aggregated over the cardholder's lifetime history.&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Customer C07297 has 261 lifetime transactions with average spend \$112.56 ($Z = 2.87$).&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;[INFERRED]&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Algorithmic pattern inference derived from graph topology.&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Device fingerprint shared across 46 distinct cardholders.&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;[SIMULATED / ASSUMED]&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;External customer validation request not observable in static dataset.&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Cardholder denies authorizing flagged transaction (Simulated benchmark control).&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The agent never asserts simulated or assumed information as an observed graph fact.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Benchmark Validation &amp;amp; Deliverables Summary
&lt;/h2&gt;

&lt;p&gt;Across all 20 benchmark cases, our validation suite enforced a 6-stage referential integrity, schema, and policy audit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; src.benchmark.validate_final_deliverables

&lt;span class="o"&gt;==============================================================================================================&lt;/span&gt;
RUNNING COMPREHENSIVE 6-STAGE VALIDATION ACROSS 20 CASE DELIVERABLES
&lt;span class="o"&gt;==============================================================================================================&lt;/span&gt;
1. JSON Schema Validation:        0 errors
2. Factual Provenance Audit:       0 errors
3. Policy Alignment Audit:         0 errors
4. ID Referential-Integrity Audit: 0 errors
5. Graph Case-Memory Count:        5,585 ClosedCase vertices &lt;span class="o"&gt;(&lt;/span&gt;Target: exactly 5,585&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Complete 20-Case Benchmark Table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case ID&lt;/th&gt;
&lt;th&gt;Trigger&lt;/th&gt;
&lt;th&gt;Verdict&lt;/th&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;Prob&lt;/th&gt;
&lt;th&gt;Exposure ($)&lt;/th&gt;
&lt;th&gt;SAR Filed&lt;/th&gt;
&lt;th&gt;Activity Dates&lt;/th&gt;
&lt;th&gt;Primary Policy Actions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-001&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;risk_score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;legitimate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;none&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.12&lt;/td&gt;
&lt;td&gt;\$0.00&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ALLOW_TRANSACTION -&amp;gt; CLOSE_NO_FRAUD&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-002&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;risk_score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;card_not_present_fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.80&lt;/td&gt;
&lt;td&gt;\$292.36&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DECLINE -&amp;gt; BLOCK -&amp;gt; CREATE_CASE&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-003&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_report&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;out_of_region_use&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.85&lt;/td&gt;
&lt;td&gt;\$49.00&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DECLINE -&amp;gt; BLOCK -&amp;gt; CREATE_CASE&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-004&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_report&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;card_not_present_new_device&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.88&lt;/td&gt;
&lt;td&gt;\$343.58&lt;/td&gt;
&lt;td&gt;YES&lt;/td&gt;
&lt;td&gt;2016-12-28 to 2016-12-30&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DECLINE -&amp;gt; BLOCK -&amp;gt; CREATE_CASE -&amp;gt; FILE_REPORT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-005&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;risk_score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;uncertain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;none&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.35&lt;/td&gt;
&lt;td&gt;\$0.00&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;VERIFY_WITH_CUSTOMER -&amp;gt; MONITOR_CARD&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-006&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_report&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;card_not_present_fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.85&lt;/td&gt;
&lt;td&gt;\$1,906.07&lt;/td&gt;
&lt;td&gt;YES&lt;/td&gt;
&lt;td&gt;2016-11-21 to 2016-11-21&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DECLINE -&amp;gt; BLOCK -&amp;gt; CREATE_CASE -&amp;gt; FILE_REPORT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-007&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;risk_score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;legitimate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;none&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.12&lt;/td&gt;
&lt;td&gt;\$0.00&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ALLOW_TRANSACTION -&amp;gt; CLOSE_NO_FRAUD&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-008&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_report&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;card_not_present_new_device&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.88&lt;/td&gt;
&lt;td&gt;\$284.65&lt;/td&gt;
&lt;td&gt;YES&lt;/td&gt;
&lt;td&gt;2016-12-18 to 2016-12-20&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DECLINE -&amp;gt; BLOCK -&amp;gt; CREATE_CASE -&amp;gt; FILE_REPORT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-009&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_report&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;card_not_present_fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.85&lt;/td&gt;
&lt;td&gt;\$30.02&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DECLINE -&amp;gt; BLOCK -&amp;gt; CREATE_CASE&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-010&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;risk_score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;card_not_present_new_device&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.92&lt;/td&gt;
&lt;td&gt;\$1,000.03&lt;/td&gt;
&lt;td&gt;YES&lt;/td&gt;
&lt;td&gt;2016-12-02 to 2016-12-02&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DECLINE -&amp;gt; BLOCK -&amp;gt; CREATE_CASE -&amp;gt; FILE_REPORT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-011&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_report&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;card_not_present_new_device&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.88&lt;/td&gt;
&lt;td&gt;\$470.97&lt;/td&gt;
&lt;td&gt;YES&lt;/td&gt;
&lt;td&gt;2016-12-29 to 2016-12-29&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DECLINE -&amp;gt; BLOCK -&amp;gt; CREATE_CASE -&amp;gt; FILE_REPORT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-012&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;risk_score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;legitimate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;none&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.12&lt;/td&gt;
&lt;td&gt;\$0.00&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ALLOW_TRANSACTION -&amp;gt; CLOSE_NO_FRAUD&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-013&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;risk_score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;legitimate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;none&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.12&lt;/td&gt;
&lt;td&gt;\$0.00&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ALLOW_TRANSACTION -&amp;gt; CLOSE_NO_FRAUD&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-014&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;analyst_request&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;card_not_present_new_device&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.90&lt;/td&gt;
&lt;td&gt;\$74.96&lt;/td&gt;
&lt;td&gt;YES&lt;/td&gt;
&lt;td&gt;2016-11-22 to 2016-11-22&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DECLINE -&amp;gt; BLOCK -&amp;gt; CREATE_CASE -&amp;gt; FILE_REPORT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-015&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;risk_score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;card_not_present_new_device&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.92&lt;/td&gt;
&lt;td&gt;\$599.94&lt;/td&gt;
&lt;td&gt;YES&lt;/td&gt;
&lt;td&gt;2016-11-17 to 2016-11-17&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DECLINE -&amp;gt; BLOCK -&amp;gt; CREATE_CASE -&amp;gt; FILE_REPORT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-016&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_report&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;card_not_present_new_device&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.88&lt;/td&gt;
&lt;td&gt;\$59.67&lt;/td&gt;
&lt;td&gt;YES&lt;/td&gt;
&lt;td&gt;2016-12-11 to 2016-12-11&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DECLINE -&amp;gt; BLOCK -&amp;gt; CREATE_CASE -&amp;gt; FILE_REPORT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-017&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;risk_score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;uncertain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;card_not_present_fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.35&lt;/td&gt;
&lt;td&gt;\$300.14&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;VERIFY_WITH_CUSTOMER -&amp;gt; MONITOR_CARD&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-018&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_report&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;out_of_region_use&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.85&lt;/td&gt;
&lt;td&gt;\$39.08&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DECLINE -&amp;gt; BLOCK -&amp;gt; CREATE_CASE&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-019&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;risk_score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fraud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;card_not_present_new_device&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.88&lt;/td&gt;
&lt;td&gt;\$99.92&lt;/td&gt;
&lt;td&gt;YES&lt;/td&gt;
&lt;td&gt;2016-12-01 to 2016-12-01&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DECLINE -&amp;gt; BLOCK -&amp;gt; CREATE_CASE -&amp;gt; FILE_REPORT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HHG-020&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;risk_score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;legitimate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;none&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.08&lt;/td&gt;
&lt;td&gt;\$0.00&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ALLOW_TRANSACTION -&amp;gt; CLOSE_NO_FRAUD&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  9. The Analyst Investigation Console
&lt;/h2&gt;

&lt;p&gt;To allow analysts and compliance officers to interact with the agent, we built a dedicated &lt;strong&gt;Streamlit SOC &amp;amp; Investigation Console&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hero Case Overview&lt;/strong&gt;: Shows verdict, confidence, detected pattern, exposure, and SAR status in a unified operational banner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Agent Investigation&lt;/strong&gt;: A single-click trigger that launches the autonomous agent ReAct loop against TigerGraph Savanna Cloud in real-time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2-Column Evidence Grid&lt;/strong&gt;: Side-by-side display of transaction burst sequences, customer spending baselines, device fingerprints, and similar historical precedents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next Best Action Panel&lt;/strong&gt;: Policy rule citations (R1–R10) with assigned approval routes (&lt;code&gt;auto&lt;/code&gt;, &lt;code&gt;L1 Analyst&lt;/code&gt;, &lt;code&gt;L2 Compliance&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monospace FinCEN SAR Box&lt;/strong&gt;: Form 111-compliant narrative with subject list, reportable amounts, and dynamic activity date spans.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;Live Demo Console:&lt;/strong&gt; &lt;a href="https://sambhavraj18-tigergraph-fraud-agent-app-vuyv9x.streamlit.app/" rel="noopener noreferrer"&gt;https://sambhavraj18-tigergraph-fraud-agent-app-vuyv9x.streamlit.app/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;Source Code &amp;amp; Documentation:&lt;/strong&gt; &lt;a href="https://github.com/SambhavRaj18/tigergraph-fraud-agent" rel="noopener noreferrer"&gt;https://github.com/SambhavRaj18/tigergraph-fraud-agent&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Key Engineering Lessons
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Relationship-Aware Retrieval Trumps Monolithic Context Windows&lt;/strong&gt;: Passing hundreds of raw JSON records to an LLM wastes tokens and causes hallucinated reasoning. Executing multi-hop GSQL queries to prune the graph into focused evidence packages produces faster, grounded investigations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic Guardrails Are Non-Negotiable in Regulated Domains&lt;/strong&gt;: While LLMs excel at tool selection and narrative synthesis, operational decisions (blocking a card or filing a federal SAR) must remain bounded by deterministic policy engines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uncertainty Must Be a First-Class Citizen&lt;/strong&gt;: Systems that treat investigations as binary true/false decisions will unnecessarily disrupt legitimate customers. Providing an explicit &lt;code&gt;UNCERTAIN&lt;/code&gt; operational path with automated customer verification is essential.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistent Case Memory Closes the Investigation Loop&lt;/strong&gt;: Upserting concluded investigations back into the graph turns historical decisions into immediate context for future investigations.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;Combining &lt;strong&gt;TigerGraph Savanna Cloud&lt;/strong&gt;, the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;, and a &lt;strong&gt;Deterministic Policy Engine&lt;/strong&gt; creates a reliable, explainable, and compliant agentic investigation pipeline. By grounding the LLM in structured graph evidence and binding its actions to rigorous policy guardrails, we transition from simple probabilistic classification to true automated fraud investigation.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built for the TigerGraph × Hacker House Goa 2026 Challenge.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tigergraph</category>
      <category>graphdatabase</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
