Skip to main content
Glama
models.py3.72 kB
from datetime import datetime from typing import List, Optional, Dict, Any from pydantic import BaseModel, Field from enum import Enum class ProjectStatus(str, Enum): NOT_STARTED = "not_started" IN_PROGRESS = "in_progress" ON_HOLD = "on_hold" COMPLETED = "completed" CANCELLED = "cancelled" class TaskStatus(str, Enum): TODO = "todo" IN_PROGRESS = "in_progress" DONE = "done" BLOCKED = "blocked" class Priority(str, Enum): LOW = "low" MEDIUM = "medium" HIGH = "high" URGENT = "urgent" class DocumentType(str, Enum): PDF = "pdf" IMAGE = "image" TEXT = "text" SPREADSHEET = "spreadsheet" PRESENTATION = "presentation" OTHER = "other" class Location(BaseModel): city: Optional[str] = None state: Optional[str] = None country: Optional[str] = None details: Optional[str] = None class LaptopDetails(BaseModel): os: Optional[str] = None model: Optional[str] = None specs: Optional[Dict[str, Any]] = None class Permissions(BaseModel): file_system: bool = True browser: bool = False terminal: bool = True database: bool = True network: bool = False available_to_setup: List[str] = ["browser", "network"] class UserStatus(BaseModel): name: str current_location: Optional[Location] = None laptop_details: Optional[LaptopDetails] = None permissions: Permissions = Field(default_factory=Permissions) last_updated: datetime = Field(default_factory=datetime.now) active_projects: List[str] = [] notes: Optional[str] = None class Task(BaseModel): id: str title: str description: Optional[str] = None status: TaskStatus = TaskStatus.TODO priority: Priority = Priority.MEDIUM due_date: Optional[datetime] = None created_at: datetime = Field(default_factory=datetime.now) updated_at: datetime = Field(default_factory=datetime.now) completed_at: Optional[datetime] = None tags: List[str] = [] class Project(BaseModel): id: str name: str description: Optional[str] = None status: ProjectStatus = ProjectStatus.NOT_STARTED priority: Priority = Priority.MEDIUM start_date: Optional[datetime] = None end_date: Optional[datetime] = None created_at: datetime = Field(default_factory=datetime.now) updated_at: datetime = Field(default_factory=datetime.now) tasks: List[Task] = [] tags: List[str] = [] notes: Optional[str] = None progress: int = 0 # 0-100 percentage class Todo(BaseModel): id: str title: str description: Optional[str] = None due_date: Optional[datetime] = None reminder_date: Optional[datetime] = None priority: Priority = Priority.MEDIUM completed: bool = False created_at: datetime = Field(default_factory=datetime.now) completed_at: Optional[datetime] = None tags: List[str] = [] class CalendarEvent(BaseModel): id: str title: str description: Optional[str] = None start_time: datetime end_time: datetime location: Optional[str] = None attendees: List[str] = [] reminder_minutes: int = 15 created_at: datetime = Field(default_factory=datetime.now) tags: List[str] = [] class Document(BaseModel): id: str title: str description: Optional[str] = None file_path: str document_type: DocumentType mime_type: Optional[str] = None size_bytes: int created_at: datetime = Field(default_factory=datetime.now) updated_at: datetime = Field(default_factory=datetime.now) tags: List[str] = [] metadata: Dict[str, Any] = {} external_url: Optional[str] = None # For documents stored elsewhere (e.g., cloud storage) checksum: Optional[str] = None

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/swapnilsurdi/mcp-pa'

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