@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
TypeScript
/**
* 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;
}