UNPKG

@niondigital/moco-mcp

Version:

Model Context Protocol (MCP) server for MOCO: time tracking, project management, holidays, and presence monitoring

227 lines (226 loc) 4.66 kB
/** * Type definitions for MOCO API data structures * Based on MOCO API v1 documentation */ /** * Activity record from MOCO API * Represents time tracking entries */ export interface Activity { id: number; date: string; hours: number; description: string; project: { id: number; name: string; }; task: { id: number; name: string; }; user: { id: number; firstname: string; lastname: string; }; billable: boolean; locked: boolean; created_at: string; updated_at: string; } /** * Project record from MOCO API */ export interface Project { id: number; name: string; description?: string; active: boolean; currency: string; budget?: number; budget_monthly?: number; created_at: string; updated_at: string; customer?: { id: number; name: string; }; leader?: { id: number; firstname: string; lastname: string; }; tasks: { id: number; name: string; active: boolean; billable: boolean; }[]; } /** * Task record from MOCO API */ export interface Task { id: number; name: string; active: boolean; billable: boolean; project: { id: number; name: string; }; created_at: string; updated_at: string; } /** * User Holiday record from MOCO API */ export interface UserHoliday { id: number; date: string; hours: number; status: 'approved' | 'pending' | 'rejected'; note?: string; user: { id: number; firstname: string; lastname: string; }; created_at: string; updated_at: string; } /** * User Presence record from MOCO API */ export interface UserPresence { id: number; date: string; from: string; to?: string; hours?: number; user: { id: number; firstname: string; lastname: string; }; created_at: string; updated_at: string; } /** * User information including holiday entitlement */ export interface User { id: number; firstname: string; lastname: string; email: string; active: boolean; holiday_entitlement?: number; created_at: string; updated_at: string; } /** * Time formatting helper - provides both decimal and HH:MM formats */ export interface TimeFormat { /** Hours as decimal number (e.g., 2.5) */ hours: number; /** Hours in HH:MM format (e.g., "2:30") */ hoursFormatted: string; } /** * Activity summary for a single task within a project */ export interface TaskActivitySummary { taskId: number; taskName: string; hours: number; hoursFormatted: string; } /** * Activity summary for a single project on a specific day */ export interface ProjectActivitySummary { projectId: number; projectName: string; tasks: TaskActivitySummary[]; projectTotal: TimeFormat; } /** * Activity summary for a single day */ export interface DailyActivitySummary { date: string; projects: ProjectActivitySummary[]; dailyTotal: TimeFormat; } /** * Complete activity summary for a date range */ export interface ActivityRangeSummary { startDate: string; endDate: string; dailySummaries: DailyActivitySummary[]; projectTotals: Array<{ projectId: number; projectName: string; total: TimeFormat; tasks: Array<{ taskId: number; taskName: string; total: TimeFormat; }>; }>; grandTotal: TimeFormat; } /** * Daily presence summary (aggregated from multiple presence records) */ export interface DailyPresenceSummary { date: string; totalHours: number; totalHoursFormatted: string; } /** * Complete presence summary for a date range */ export interface PresenceRangeSummary { startDate: string; endDate: string; dailySummaries: DailyPresenceSummary[]; grandTotal: TimeFormat; } /** * Holiday summary for a single year */ export interface HolidaySummary { year: number; holidays: Array<{ date: string; days: number; status: string; note?: string; }>; totalTakenDays: number; annualEntitlementDays: number; utilizationPercentage: number; remainingDays: number; } /** * API pagination metadata */ export interface PaginationMeta { total: number; count: number; per_page: number; current_page: number; total_pages: number; } /** * Generic paginated API response */ export interface PaginatedResponse<T> { data: T[]; meta: PaginationMeta; }