@@ -8,7 +8,7 @@ defmodule McpServerElixir.Protocol.McpTools do
88
99 require Logger
1010
11- alias McpServerElixir.Infrastructure . { CoreClient , ControlPlaneClient }
11+ alias McpServerElixir.Infrastructure . { ControlPlaneClient , CoreClient }
1212 alias McpServerElixir.Protocol.ToonEncoder
1313
1414 @ doc """
@@ -30,6 +30,23 @@ defmodule McpServerElixir.Protocol.McpTools do
3030 ]
3131 end
3232
33+ @ tool_handlers % {
34+ "query_events" => :handle_query_events ,
35+ "reconstruct_state" => :handle_reconstruct_state ,
36+ "get_snapshot" => :handle_get_snapshot ,
37+ "analyze_changes" => :handle_analyze_changes ,
38+ "find_patterns" => :handle_find_patterns ,
39+ "compare_entities" => :handle_compare_entities ,
40+ "event_timeline" => :handle_event_timeline ,
41+ "explain_entity" => :handle_explain_entity ,
42+ "ingest_event" => :handle_ingest_event
43+ }
44+
45+ @ stateless_tool_handlers % {
46+ "get_stats" => :handle_get_stats ,
47+ "get_cluster_status" => :handle_get_cluster_status
48+ }
49+
3350 @ doc """
3451 Call a tool by name with arguments.
3552
@@ -42,19 +59,19 @@ defmodule McpServerElixir.Protocol.McpTools do
4259 format = Map . get ( args , "format" , nil )
4360 args_without_format = Map . delete ( args , "format" )
4461
45- case tool_name do
46- "query_events" -> handle_query_events ( args_without_format , state , format )
47- "reconstruct_state" -> handle_reconstruct_state ( args_without_format , state , format )
48- "get_snapshot" -> handle_get_snapshot ( args_without_format , state , format )
49- "analyze_changes" -> handle_analyze_changes ( args_without_format , state , format )
50- "find_patterns" -> handle_find_patterns ( args_without_format , state , format )
51- "compare_entities" -> handle_compare_entities ( args_without_format , state , format )
52- "event_timeline" -> handle_event_timeline ( args_without_format , state , format )
53- "explain_entity" -> handle_explain_entity ( args_without_format , state , format )
54- "ingest_event" -> handle_ingest_event ( args_without_format , state , format )
55- "get_stats" -> handle_get_stats ( state , format )
56- "get_cluster_status" -> handle_get_cluster_status ( state , format )
57- _ -> { :error , "Unknown tool: #{ tool_name } " }
62+ dispatch_tool ( tool_name , args_without_format , state , format )
63+ end
64+
65+ defp dispatch_tool ( tool_name , args , state , format ) do
66+ cond do
67+ handler = Map . get ( @ tool_handlers , tool_name ) ->
68+ apply ( __MODULE__ , handler , [ args , state , format ] )
69+
70+ handler = Map . get ( @ stateless_tool_handlers , tool_name ) ->
71+ apply ( __MODULE__ , handler , [ state , format ] )
72+
73+ true ->
74+ { :error , "Unknown tool: #{ tool_name } " }
5875 end
5976 end
6077
@@ -273,7 +290,8 @@ defmodule McpServerElixir.Protocol.McpTools do
273290 # Tool Handlers
274291 # ============================================================================
275292
276- defp handle_query_events ( args , state , format ) do
293+ @ doc false
294+ def handle_query_events ( args , state , format ) do
277295 params = Map . take ( args , [ "entity_id" , "event_type" , "as_of" , "since" , "until" , "limit" ] )
278296
279297 case CoreClient . query_events ( state . core_client , params ) do
@@ -298,7 +316,8 @@ defmodule McpServerElixir.Protocol.McpTools do
298316 end
299317 end
300318
301- defp handle_reconstruct_state ( args , state , format ) do
319+ @ doc false
320+ def handle_reconstruct_state ( args , state , format ) do
302321 entity_id = Map . fetch! ( args , "entity_id" )
303322 as_of = Map . get ( args , "as_of" )
304323
@@ -334,7 +353,8 @@ defmodule McpServerElixir.Protocol.McpTools do
334353 end
335354 end
336355
337- defp handle_get_snapshot ( args , state , format ) do
356+ @ doc false
357+ def handle_get_snapshot ( args , state , format ) do
338358 entity_id = Map . fetch! ( args , "entity_id" )
339359
340360 case CoreClient . get_snapshot ( state . core_client , entity_id ) do
@@ -358,7 +378,8 @@ defmodule McpServerElixir.Protocol.McpTools do
358378 end
359379 end
360380
361- defp handle_analyze_changes ( args , state , format ) do
381+ @ doc false
382+ def handle_analyze_changes ( args , state , format ) do
362383 entity_id = Map . fetch! ( args , "entity_id" )
363384 from_time = Map . fetch! ( args , "from_time" )
364385 to_time = Map . get ( args , "to_time" )
@@ -406,7 +427,8 @@ defmodule McpServerElixir.Protocol.McpTools do
406427 end
407428 end
408429
409- defp handle_find_patterns ( args , state , format ) do
430+ @ doc false
431+ def handle_find_patterns ( args , state , format ) do
410432 params = Map . take ( args , [ "entity_id" , "event_type" , "since" ] )
411433
412434 case CoreClient . query_events ( state . core_client , params ) do
@@ -441,7 +463,8 @@ defmodule McpServerElixir.Protocol.McpTools do
441463 end
442464 end
443465
444- defp handle_compare_entities ( args , state , format ) do
466+ @ doc false
467+ def handle_compare_entities ( args , state , format ) do
445468 entity_ids = Map . fetch! ( args , "entity_ids" )
446469 timeframe = Map . get ( args , "timeframe" )
447470
@@ -491,7 +514,8 @@ defmodule McpServerElixir.Protocol.McpTools do
491514 } }
492515 end
493516
494- defp handle_event_timeline ( args , state , format ) do
517+ @ doc false
518+ def handle_event_timeline ( args , state , format ) do
495519 entity_id = Map . fetch! ( args , "entity_id" )
496520 params = Map . take ( args , [ "since" , "until" ] )
497521 params = Map . put ( params , "entity_id" , entity_id )
@@ -543,7 +567,8 @@ defmodule McpServerElixir.Protocol.McpTools do
543567 end
544568 end
545569
546- defp handle_explain_entity ( args , state , format ) do
570+ @ doc false
571+ def handle_explain_entity ( args , state , format ) do
547572 entity_id = Map . fetch! ( args , "entity_id" )
548573
549574 # Get current state
@@ -603,7 +628,8 @@ defmodule McpServerElixir.Protocol.McpTools do
603628 end
604629 end
605630
606- defp handle_ingest_event ( args , state , format ) do
631+ @ doc false
632+ def handle_ingest_event ( args , state , format ) do
607633 event_data = % {
608634 "event_type" => Map . fetch! ( args , "event_type" ) ,
609635 "entity_id" => Map . fetch! ( args , "entity_id" ) ,
@@ -641,7 +667,8 @@ defmodule McpServerElixir.Protocol.McpTools do
641667 end
642668 end
643669
644- defp handle_get_stats ( state , format ) do
670+ @ doc false
671+ def handle_get_stats ( state , format ) do
645672 case CoreClient . get_stats ( state . core_client ) do
646673 { :ok , stats } ->
647674 summary = "📊 AllSource Statistics\n \n "
@@ -663,7 +690,8 @@ defmodule McpServerElixir.Protocol.McpTools do
663690 end
664691 end
665692
666- defp handle_get_cluster_status ( state , format ) do
693+ @ doc false
694+ def handle_get_cluster_status ( state , format ) do
667695 case ControlPlaneClient . get_cluster_status ( state . control_client ) do
668696 { :ok , status } ->
669697 summary = "🎯 Cluster Status\n \n "
0 commit comments