Skip to content

Commit 9c89041

Browse files
authored
Merge pull request #2556 from mvanhorn/fix/2433-server-discover-probe-log
fix(mcp): log the server/discover connect probe as info, not an error
2 parents c99fe11 + 8af291d commit 9c89041

2 files changed

Lines changed: 57 additions & 1 deletion

File tree

‎src/mcp/mcp.c‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21029,7 +21029,9 @@ char *cbm_mcp_server_handle(cbm_mcp_server_t *srv, const char *line) {
2102921029
cbm_clock_gettime(CLOCK_MONOTONIC, &t1);
2103021030
long long dur_us = ((long long)(t1.tv_sec - req_t0.tv_sec) * MCP_S_TO_US) +
2103121031
((long long)(t1.tv_nsec - req_t0.tv_nsec) / MCP_MS_TO_US);
21032-
cbm_log_mcp_request(req.method, NULL, true, dur_us);
21032+
/* server/discover is the modern connect probe. -32601 stays so the
21033+
* client falls back to initialize; that miss is not an error (#2433). */
21034+
cbm_log_mcp_request(req.method, NULL, strcmp(req.method, "server/discover") != 0, dur_us);
2103321035
cbm_mcp_server_request_scope_end(srv);
2103421036
cbm_jsonrpc_request_free(&req);
2103521037
return err;

‎tests/test_mcp.c‎

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2463,6 +2463,59 @@ TEST(server_handle_unknown_method) {
24632463
PASS();
24642464
}
24652465

2466+
/* Issue #2433: a modern client probes server/discover before initialize.
2467+
* The -32601 stays so it falls back; only that probe is logged as info. */
2468+
TEST(server_handle_discover_probe_logs_info) {
2469+
mcp_log_buf[0] = '\0';
2470+
CBMLogLevel prev_level = cbm_log_get_level();
2471+
cbm_log_set_level(CBM_LOG_DEBUG);
2472+
cbm_log_set_format(CBM_LOG_FORMAT_TEXT);
2473+
cbm_log_set_sink_ex(mcp_capture_log, CBM_LOG_SINK_REPLACE);
2474+
2475+
cbm_mcp_server_t *srv = cbm_mcp_server_new(NULL);
2476+
2477+
char *resp =
2478+
cbm_mcp_server_handle(srv, "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"server/discover\"}");
2479+
ASSERT_NOT_NULL(resp);
2480+
ASSERT_NOT_NULL(strstr(resp, "\"code\":-32601"));
2481+
ASSERT_NOT_NULL(strstr(resp, "Method not found"));
2482+
ASSERT_NOT_NULL(strstr(mcp_log_buf, "method=server/discover"));
2483+
ASSERT_NOT_NULL(strstr(mcp_log_buf, "level=info"));
2484+
ASSERT_NOT_NULL(strstr(mcp_log_buf, "status=ok"));
2485+
ASSERT_NULL(strstr(mcp_log_buf, "level=warn"));
2486+
ASSERT_NULL(strstr(mcp_log_buf, "status=error"));
2487+
free(resp);
2488+
2489+
mcp_log_buf[0] = '\0';
2490+
resp =
2491+
cbm_mcp_server_handle(srv, "{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"unknown/method\"}");
2492+
ASSERT_NOT_NULL(resp);
2493+
ASSERT_NOT_NULL(strstr(resp, "-32601"));
2494+
ASSERT_NOT_NULL(strstr(mcp_log_buf, "method=unknown/method"));
2495+
ASSERT_NOT_NULL(strstr(mcp_log_buf, "level=warn"));
2496+
ASSERT_NOT_NULL(strstr(mcp_log_buf, "status=error"));
2497+
free(resp);
2498+
2499+
resp = cbm_mcp_server_handle(srv, "{\"jsonrpc\":\"2.0\",\"id\":4,\"method\":\"initialize\","
2500+
"\"params\":{\"protocolVersion\":\"2026-07-28\"}}");
2501+
ASSERT_NOT_NULL(resp);
2502+
ASSERT_NOT_NULL(strstr(resp, "2025-11-25"));
2503+
ASSERT_NULL(strstr(resp, "2026-07-28"));
2504+
free(resp);
2505+
2506+
resp =
2507+
cbm_mcp_server_handle(srv, "{\"jsonrpc\":\"2.0\",\"id\":5,\"method\":\"resources/list\"}");
2508+
ASSERT_NOT_NULL(resp);
2509+
ASSERT_NOT_NULL(strstr(resp, "\"resources\":[]"));
2510+
ASSERT_NULL(strstr(resp, "-32601"));
2511+
free(resp);
2512+
2513+
cbm_mcp_server_free(srv);
2514+
cbm_log_set_sink(NULL);
2515+
cbm_log_set_level(prev_level);
2516+
PASS();
2517+
}
2518+
24662519
/* ══════════════════════════════════════════════════════════════════
24672520
* TOOL HANDLERS (via server_handle)
24682521
* ══════════════════════════════════════════════════════════════════ */
@@ -25013,6 +25066,7 @@ SUITE(mcp) {
2501325066
RUN_TEST(server_handle_prompts_get_validates_arguments);
2501425067
RUN_TEST(server_handle_logs_request_without_params);
2501525068
RUN_TEST(server_handle_unknown_method);
25069+
RUN_TEST(server_handle_discover_probe_logs_info);
2501625070

2501725071
/* Server handle — edge cases */
2501825072
RUN_TEST(server_handle_invalid_json);

0 commit comments

Comments
 (0)