From 139cc2e54db0e5815f1c79dbe9e3285b4fe2bd66 Mon Sep 17 00:00:00 2001 From: Eric Gustin <34000337+EricGustin@users.noreply.github.com> Date: Tue, 4 Nov 2025 15:40:47 -0800 Subject: [PATCH] Fix race condition (#676) Server start events were sometimes not being tracked because of a race condition. Adding 150ms wait for now. Longer term solution: https://app.clickup.com/t/86b7bm6kp Other events do not suffer from this issue --- .../arcade_mcp_server/usage/server_tracker.py | 7 +++++++ libs/arcade-mcp-server/pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/libs/arcade-mcp-server/arcade_mcp_server/usage/server_tracker.py b/libs/arcade-mcp-server/arcade_mcp_server/usage/server_tracker.py index 610c23e2..99a896a0 100644 --- a/libs/arcade-mcp-server/arcade_mcp_server/usage/server_tracker.py +++ b/libs/arcade-mcp-server/arcade_mcp_server/usage/server_tracker.py @@ -110,6 +110,13 @@ class ServerTracker: self.usage_service.capture( EVENT_MCP_SERVER_STARTED, self.user_id, properties=properties, is_anon=is_anon ) + # TODO: Use background thread instead of subprocess to capture server start events. + # Using a subprocess for server starts is not ideal because the parent immediately enters `uvicorn.run()` + # for http and `asyncio.run()` for stdio which is blocking and prevents the subprocess from starting. + # Therefore we add a small delay to ensure the subprocess has started. + + # Assumes that the process creation takes max ~50ms and Python startup takes max ~100ms. + time.sleep(0.15) def track_tool_call( self, diff --git a/libs/arcade-mcp-server/pyproject.toml b/libs/arcade-mcp-server/pyproject.toml index c7d05b8d..6e38eaa5 100644 --- a/libs/arcade-mcp-server/pyproject.toml +++ b/libs/arcade-mcp-server/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "arcade-mcp-server" -version = "1.7.2" +version = "1.7.3" description = "Model Context Protocol (MCP) server framework for Arcade.dev" readme = "README.md" authors = [{ name = "Arcade.dev" }]