From 26926f194fd79184bc6758f8ece86e5c4a6ab44d Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 22 Apr 2026 13:19:52 +0300 Subject: [PATCH] mcp: fix server --- vlib/mcp/server.v | 15 ++++++++++++++- vlib/mcp/server_test.v | 6 ++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/vlib/mcp/server.v b/vlib/mcp/server.v index 7b6c48e5e..65ac7fffa 100644 --- a/vlib/mcp/server.v +++ b/vlib/mcp/server.v @@ -365,10 +365,23 @@ pub fn (mut s Server) close() { // wait_till_running waits until the HTTP server transitions to the running state. pub fn (mut s Server) wait_till_running(params http.WaitTillRunningParams) !int { + mut retries := 0 + for isnil(s.http_server) && retries < params.max_retries { + time.sleep(params.retry_period_ms * time.millisecond) + retries++ + } if isnil(s.http_server) { return error('mcp.Server.wait_till_running: HTTP server is not running') } - return s.http_server.wait_till_running(params) + remaining_retries := if params.max_retries > retries { params.max_retries - retries } else { 0 } + if remaining_retries == 0 { + return error('mcp.Server.wait_till_running: HTTP server is not running') + } + retry_count := s.http_server.wait_till_running( + max_retries: remaining_retries + retry_period_ms: params.retry_period_ms + )! + return retries + retry_count } // text_content creates a raw MCP text content item. diff --git a/vlib/mcp/server_test.v b/vlib/mcp/server_test.v index d0b6b078f..ade3dd556 100644 --- a/vlib/mcp/server_test.v +++ b/vlib/mcp/server_test.v @@ -157,10 +157,6 @@ fn test_server_http_sessions_and_delete() { })! server_thread := spawn server.serve_http('127.0.0.1:0') - defer { - server.close() - server_thread.wait() or {} - } server.wait_till_running(max_retries: 200, retry_period_ms: 10)! time.sleep(20 * time.millisecond) addr := server.http_server.addr @@ -241,4 +237,6 @@ fn test_server_http_sessions_and_delete() { header: stale_header )! assert stale_response.status_code == 404 + server.close() + server_thread.wait() or {} } -- 2.39.5