We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tjnull/Ludus-FastMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
"""Orchestration schemas for smart deployment workflows."""
from datetime import datetime
from typing import Any
from pydantic import BaseModel, Field
class DeploymentStep(BaseModel):
"""A single step in the deployment process."""
name: str = Field(..., description="Step name")
status: str = Field(..., description="Status: pending, in_progress, completed, failed")
started_at: datetime | None = Field(default=None, description="When step started")
completed_at: datetime | None = Field(default=None, description="When step completed")
message: str = Field(default="", description="Step message or error")
class SmartDeployResult(BaseModel):
"""Result of smart deployment orchestration."""
status: str = Field(..., description="Deployment status: started, deploying, success, failed")
deployment_id: str | None = Field(default=None, description="Deployment identifier")
scenario_key: str = Field(..., description="Scenario that was deployed")
siem_type: str = Field(..., description="SIEM type")
snapshot_id: str | None = Field(default=None, description="Pre-deployment snapshot ID if created")
# Preview info
vm_count: int = Field(..., description="Number of VMs")
estimated_time: str = Field(..., description="Estimated deployment time")
# Monitoring info
auto_monitor: bool = Field(default=True, description="Whether auto-monitoring is enabled")
check_interval: int = Field(default=30, description="Monitoring interval in seconds")
next_check_message: str = Field(default="", description="Message about next check")
# Commands for user
monitoring_commands: dict[str, str] = Field(
default_factory=dict,
description="Commands for manual monitoring"
)
# Additional context
message: str = Field(default="", description="Human-readable status message")
class DeploymentTimeline(BaseModel):
"""Timeline of deployment progress."""
started_at: datetime = Field(..., description="Deployment start time")
steps: list[DeploymentStep] = Field(default_factory=list, description="Timeline steps")
current_step: str = Field(default="", description="Current step name")
progress_percentage: int = Field(default=0, description="Progress percentage (0-100)")
estimated_completion: datetime | None = Field(default=None, description="Estimated completion time")
elapsed_minutes: int = Field(default=0, description="Elapsed time in minutes")
remaining_minutes: int = Field(default=0, description="Estimated remaining time in minutes")
class MonitoringUpdate(BaseModel):
"""Real-time monitoring update."""
timestamp: datetime = Field(default_factory=datetime.now, description="Update timestamp")
range_state: str = Field(..., description="Current range state")
vm_count: int = Field(default=0, description="Total VMs")
vms_ready: int = Field(default=0, description="VMs ready/running")
current_task: str = Field(default="", description="Current task being executed")
progress_percentage: int = Field(default=0, description="Progress percentage")
# Recent activity
recent_activity: list[str] = Field(default_factory=list, description="Recent log entries")
# Status indicators
is_healthy: bool = Field(default=True, description="Whether deployment is healthy")
issues: list[str] = Field(default_factory=list, description="Any issues detected")
# Timing
elapsed_minutes: int = Field(default=0, description="Time elapsed")
eta_minutes: int = Field(default=0, description="Estimated time remaining")
# Next steps
next_check_in: int = Field(default=30, description="Seconds until next check")
should_continue_monitoring: bool = Field(default=True, description="Whether to continue monitoring")
class RecoveryRecommendation(BaseModel):
"""Recovery recommendation for failed deployment."""
action: str = Field(..., description="Recommended action: wait, fix_config, retry, destroy")
reason: str = Field(..., description="Why this action is recommended")
severity: str = Field(..., description="Issue severity: info, warning, error, critical")
steps: list[str] = Field(default_factory=list, description="Step-by-step recovery instructions")
commands: dict[str, str] = Field(default_factory=dict, description="Useful commands")
estimated_recovery_time: str = Field(default="", description="Estimated time to recover")