Status Tracking
The satellite tracks the health and availability of each MCP server instance (per-user) through a 12-state status system. This enables real-time monitoring, automatic recovery, and tool availability filtering on a per-user basis.Overview
Per-User Instance Status
DeployStack tracks status at the instance level, not the installation level:- Status Location:
mcpServerInstancestable (per user) - No Installation Status: Status fields completely removed from
mcpServerInstallationstable - Independent Tracking: Each team member has independent status for each MCP server
- User-Specific Filtering: Users see only tools from their OWN instances that are online
Status Tracking Purposes
Status tracking serves three primary purposes:- User Visibility: Users see their OWN instance status in real-time via the frontend
- Tool Availability: Tools from user’s unavailable instances are filtered from discovery
- Automatic Recovery: System detects and recovers from failures per instance
UnifiedToolDiscoveryManager and updated through:
- Instance lifecycle events (provisioning → online)
- Health check results (online → offline)
- Tool execution failures (online → offline/error/requires_reauth)
- Configuration changes (online → restarting)
- Recovery detection (offline → connecting → online)
- User configuration completion (awaiting_user_config → provisioning)
Status Values
| Status | Description | Tools Available? | User Action Required |
|---|---|---|---|
awaiting_user_config | User hasn’t configured required user-level fields | No | Configure personal settings |
provisioning | Initial state after instance created | No | Wait |
command_received | Satellite received configuration command | No | Wait |
connecting | Connecting to MCP server | No | Wait |
discovering_tools | Running tool discovery | No | Wait |
syncing_tools | Syncing tools to backend | No | Wait |
online | Server healthy and responding | Yes | None |
restarting | Configuration updated, server restarting | No | Wait |
offline | Server unreachable (auto-recovers) | No | Wait or check server |
error | General error state (auto-recovers) | No | Check logs |
requires_reauth | OAuth token expired/revoked | No | Re-authenticate |
permanently_failed | 3+ crashes in 5 minutes (stdio only) | No | Manual restart required |
New Status: awaiting_user_configThis status indicates that an MCP server has required user-level configuration fields (e.g., personal API keys) and the user hasn’t configured them yet. The satellite does NOT spawn processes for instances with this status. Once the user completes their configuration via the dashboard, the status automatically transitions to
provisioning and the instance spawns normally.See Instance Lifecycle - Process A for details.Status Lifecycle
Initial Installation Flow (User Has Complete Config)
Initial Installation Flow (User Missing Required Config)
When an MCP server has required user-level configuration fields and the user hasn’t configured them:Configuration Update Flow
Failure and Recovery Flow
OAuth Failure Flow
Stdio Crash Flow (Permanent Failure)
Status Tracking Implementation
UnifiedToolDiscoveryManager
The status system is implemented inUnifiedToolDiscoveryManager:
Status Callbacks
Discovery managers call status callbacks when discovery succeeds or fails: HTTP/SSE Discovery:Tool Filtering by Status
Per-User Instance Filtering
Tool availability is filtered based on the authenticated user’s OWN instance status: Key Principles:- Each user sees only tools from their own instances that are
online - Other team members’ instance status does NOT affect your tool availability
- If your instance is
awaiting_user_config, you see NO tools from that server - If your instance is
online, you see all tools (even if teammates’ instances are offline)
Discovery Filtering
When LLMs calldiscover_mcp_tools, only tools from the user’s available instances are returned:
Execution Blocking
When LLMs attempt to execute tools from the user’s unavailable instances:Status Transition Triggers
Backend-Triggered (Database Updates)
Source: Backend API routes updatemcpServerInstances table (per user)
| Trigger | New Status | When |
|---|---|---|
| Instance created | provisioning or awaiting_user_config | Admin installs MCP server or member added to team |
| User config updated | provisioning (if was awaiting_user_config) or restarting (if already online) | User modifies their personal config |
| Config updated | restarting | User modifies environment vars/args/headers/query params |
| OAuth callback success | connecting | User re-authenticates |
| Health check fails | offline | Server unreachable (3-min interval) |
| Credential validation fails | requires_reauth | OAuth token invalid |
Status Target: All backend status updates target the
mcpServerInstances table. Status fields have been completely removed from mcpServerInstallations. Each user’s instance has independent status tracking.Satellite-Triggered (Event Emission)
Source: Satellite emitsmcp.server.status_changed events to backend (includes user_id field)
| Trigger | New Status | When |
|---|---|---|
| Configure command received | command_received | Satellite polls backend |
| Server connection starts | connecting | Spawning process or HTTP connect |
| Tool discovery starts | discovering_tools | Calling tools/list |
| Tool discovery succeeds | online | Discovery completed successfully |
| Tool execution fails (3 retries) | offline/error/requires_reauth | Tool call failed after retries |
| Server recovery detected | connecting | Previously offline server responds |
| Stdio crashes 3 times | permanently_failed | 3 crashes within 5 minutes |
user_id field ensures status updates are applied to the correct user’s instance.
Implementation Components
The status tracking system consists of several integrated components:- Database schema for status field
- Backend event handler for status updates
- Satellite status event emission
- Tool availability filtering by status
- Configuration update status transitions
- Tool execution status updates with auto-recovery
Related Documentation
Instance Lifecycle
Four lifecycle processes for instance creation, deletion, and team membership changes
Event Emission
Status change event details with user_id field
Recovery System
Automatic recovery logic for failed instances
Tool Discovery
How status affects per-user tool discovery

