Skip to main content
Glama
api_models.py4.79 kB
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ API Models for Stata MCP Server This module contains Pydantic models and dataclasses used for API request/response handling in the Stata MCP Server. """ from typing import Dict, Any, Optional, List from pydantic import BaseModel, Field # ============================================================================= # MCP Tool Parameter Models # ============================================================================= class RunSelectionParams(BaseModel): """Parameters for running Stata code selection.""" selection: str = Field(..., description="The Stata code to execute") session_id: Optional[str] = Field(None, description="Optional session ID for multi-session mode") class RunFileParams(BaseModel): """Parameters for running a Stata .do file.""" file_path: str = Field(..., description="The full path to the .do file") timeout: int = Field(600, description="Timeout in seconds (default: 600 seconds / 10 minutes)") session_id: Optional[str] = Field(None, description="Optional session ID for multi-session mode") working_dir: Optional[str] = Field(None, description="Optional working directory") # ============================================================================= # Legacy VS Code Extension Support Models # ============================================================================= class ToolRequest(BaseModel): """Request format for legacy /v1/tools endpoint.""" tool: str parameters: Dict[str, Any] class ToolResponse(BaseModel): """Response format for legacy /v1/tools endpoint.""" status: str result: Optional[str] = None message: Optional[str] = None # ============================================================================= # Session Management Models # ============================================================================= class SessionInfo(BaseModel): """Information about a Stata session.""" session_id: str = Field(..., description="Unique session identifier") state: str = Field(..., description="Current session state (idle, busy, error)") created_at: Optional[str] = Field(None, description="Session creation timestamp") last_used: Optional[str] = Field(None, description="Last activity timestamp") class SessionListResponse(BaseModel): """Response for listing all sessions.""" sessions: List[SessionInfo] = Field(default_factory=list) total: int = Field(0, description="Total number of active sessions") max_sessions: int = Field(0, description="Maximum allowed sessions") class SessionCreateRequest(BaseModel): """Request to create a new session.""" session_id: Optional[str] = Field(None, description="Optional custom session ID") class SessionActionRequest(BaseModel): """Request for session actions (stop, destroy).""" action: str = Field(..., description="Action: 'stop' or 'destroy'") # ============================================================================= # Execution Status Models # ============================================================================= class ExecutionStatus(BaseModel): """Current execution status.""" is_executing: bool = Field(False, description="Whether code is currently executing") session_id: Optional[str] = Field(None, description="Session ID if executing") command_id: Optional[str] = Field(None, description="Current command ID") class StopExecutionResponse(BaseModel): """Response from stop execution request.""" status: str = Field(..., description="Result status") message: Optional[str] = Field(None, description="Status message") # ============================================================================= # Health and Status Models # ============================================================================= class HealthResponse(BaseModel): """Server health check response.""" status: str = Field("ok", description="Server status") stata_available: bool = Field(False, description="Whether Stata is available") multi_session_enabled: bool = Field(False, description="Whether multi-session mode is enabled") active_sessions: int = Field(0, description="Number of active sessions") version: str = Field("0.4.1", description="Server version") # ============================================================================= # Error Response Models # ============================================================================= class ErrorResponse(BaseModel): """Standard error response.""" error: str = Field(..., description="Error message") details: Optional[str] = Field(None, description="Additional error details") code: Optional[str] = Field(None, description="Error code for programmatic handling")

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hanlulong/stata-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server