| 10961 | /* ── Tool dispatch ────────────────────────────────────────────── */ |
| 10962 | |
| 10963 | static char *dispatch_tool(cbm_mcp_server_t *srv, const char *tool_name, const char *args_json) { |
| 10964 | if (!tool_name) { |
| 10965 | return cbm_mcp_text_result("missing tool name", true); |
| 10966 | } |
| 10967 | if (srv && !mcp_tool_allowed(srv->tool_profile, tool_name)) { |
| 10968 | char message[CBM_SZ_256]; |
| 10969 | snprintf(message, sizeof(message), "tool '%s' is not available in the %s tool profile", |
| 10970 | tool_name, mcp_tool_profile_name(srv->tool_profile)); |
| 10971 | return cbm_mcp_text_result(message, true); |
| 10972 | } |
| 10973 | |
| 10974 | if (strcmp(tool_name, "list_projects") == 0) { |
| 10975 | return handle_list_projects(srv, args_json); |
| 10976 | } |
| 10977 | if (strcmp(tool_name, "get_graph_schema") == 0) { |
| 10978 | return handle_get_graph_schema(srv, args_json); |
| 10979 | } |
| 10980 | if (strcmp(tool_name, "search_graph") == 0) { |
| 10981 | return handle_search_graph(srv, args_json); |
| 10982 | } |
| 10983 | if (strcmp(tool_name, "query_graph") == 0) { |
| 10984 | return handle_query_graph(srv, args_json); |
| 10985 | } |
| 10986 | if (strcmp(tool_name, "index_status") == 0) { |
| 10987 | return handle_index_status(srv, args_json); |
| 10988 | } |
| 10989 | if (strcmp(tool_name, "check_index_coverage") == 0) { |
| 10990 | return handle_check_index_coverage(srv, args_json); |
| 10991 | } |
| 10992 | if (strcmp(tool_name, "delete_project") == 0) { |
| 10993 | return handle_delete_project(srv, args_json); |
| 10994 | } |
| 10995 | if (strcmp(tool_name, "trace_path") == 0 || strcmp(tool_name, "trace_call_path") == 0) { |
| 10996 | return handle_trace_call_path(srv, args_json); |
| 10997 | } |
| 10998 | if (strcmp(tool_name, "get_architecture") == 0) { |
| 10999 | return handle_get_architecture(srv, args_json); |
| 11000 | } |
| 11001 | |
| 11002 | /* Pipeline-dependent tools */ |
| 11003 | if (strcmp(tool_name, "index_repository") == 0) { |
| 11004 | return handle_index_repository(srv, args_json); |
| 11005 | } |
| 11006 | if (strcmp(tool_name, "get_code_snippet") == 0) { |
| 11007 | return handle_get_code_snippet(srv, args_json); |
| 11008 | } |
| 11009 | if (strcmp(tool_name, "search_code") == 0) { |
| 11010 | return handle_search_code(srv, args_json); |
| 11011 | } |
| 11012 | if (strcmp(tool_name, "detect_changes") == 0) { |
| 11013 | return handle_detect_changes(srv, args_json); |
| 11014 | } |
| 11015 | if (strcmp(tool_name, "manage_adr") == 0) { |
| 11016 | return handle_manage_adr(srv, args_json); |
| 11017 | } |
| 11018 | if (strcmp(tool_name, "ingest_traces") == 0) { |
| 11019 | return handle_ingest_traces(srv, args_json); |
| 11020 | } |
no test coverage detected