| 11346 | /* ── Tool dispatch ────────────────────────────────────────────── */ |
| 11347 | |
| 11348 | static char *dispatch_tool(cbm_mcp_server_t *srv, const char *tool_name, const char *args_json) { |
| 11349 | if (!tool_name) { |
| 11350 | return cbm_mcp_text_result("missing tool name", true); |
| 11351 | } |
| 11352 | if (srv && !mcp_tool_allowed(srv->tool_profile, tool_name)) { |
| 11353 | char message[CBM_SZ_256]; |
| 11354 | snprintf(message, sizeof(message), "tool '%s' is not available in the %s tool profile", |
| 11355 | tool_name, mcp_tool_profile_name(srv->tool_profile)); |
| 11356 | return cbm_mcp_text_result(message, true); |
| 11357 | } |
| 11358 | |
| 11359 | if (strcmp(tool_name, "list_projects") == 0) { |
| 11360 | return handle_list_projects(srv, args_json); |
| 11361 | } |
| 11362 | if (strcmp(tool_name, "get_graph_schema") == 0) { |
| 11363 | return handle_get_graph_schema(srv, args_json); |
| 11364 | } |
| 11365 | if (strcmp(tool_name, "search_graph") == 0) { |
| 11366 | return handle_search_graph(srv, args_json); |
| 11367 | } |
| 11368 | if (strcmp(tool_name, "query_graph") == 0) { |
| 11369 | return handle_query_graph(srv, args_json); |
| 11370 | } |
| 11371 | if (strcmp(tool_name, "index_status") == 0) { |
| 11372 | return handle_index_status(srv, args_json); |
| 11373 | } |
| 11374 | if (strcmp(tool_name, "check_index_coverage") == 0) { |
| 11375 | return handle_check_index_coverage(srv, args_json); |
| 11376 | } |
| 11377 | if (strcmp(tool_name, "delete_project") == 0) { |
| 11378 | return handle_delete_project(srv, args_json); |
| 11379 | } |
| 11380 | if (strcmp(tool_name, "trace_path") == 0 || strcmp(tool_name, "trace_call_path") == 0) { |
| 11381 | return handle_trace_call_path(srv, args_json); |
| 11382 | } |
| 11383 | if (strcmp(tool_name, "get_architecture") == 0) { |
| 11384 | return handle_get_architecture(srv, args_json); |
| 11385 | } |
| 11386 | |
| 11387 | /* Pipeline-dependent tools */ |
| 11388 | if (strcmp(tool_name, "index_repository") == 0) { |
| 11389 | return handle_index_repository(srv, args_json); |
| 11390 | } |
| 11391 | if (strcmp(tool_name, "get_code_snippet") == 0) { |
| 11392 | return handle_get_code_snippet(srv, args_json); |
| 11393 | } |
| 11394 | if (strcmp(tool_name, "search_code") == 0) { |
| 11395 | return handle_search_code(srv, args_json); |
| 11396 | } |
| 11397 | if (strcmp(tool_name, "detect_changes") == 0) { |
| 11398 | return handle_detect_changes(srv, args_json); |
| 11399 | } |
| 11400 | if (strcmp(tool_name, "manage_adr") == 0) { |
| 11401 | return handle_manage_adr(srv, args_json); |
| 11402 | } |
| 11403 | if (strcmp(tool_name, "ingest_traces") == 0) { |
| 11404 | return handle_ingest_traces(srv, args_json); |
| 11405 | } |
no test coverage detected