UNPKG

@asanstefanski/everhour-mcp-server

Version:

Complete Everhour API integration for Model Context Protocol (MCP) with 100% endpoint coverage

427 lines 10.1 kB
export interface EverHourClient { id: number; name: string; businessDetails?: { name?: string; address?: string; phone?: string; website?: string; }; projects?: number[]; createdAt: string; updatedAt: string; } export interface EverHourProject { id: string; name: string; platform?: string; createdAt: string; updatedAt?: string; workspaceId?: string; workspaceName?: string; hasWebhook?: boolean; status: 'active' | 'archived' | 'completed' | 'open'; type?: 'board' | 'list'; estimatesType?: 'any' | 'strict' | 'none'; canSyncTasks?: boolean; users?: number[]; attributes?: Record<string, any>; client?: number | { id: number; name: string; }; billing?: { type: 'flat_rate' | 'hourly_rate' | 'hourly' | 'none'; budget?: number; rate?: number; }; budget?: { excludeUnbillableTime: boolean; excludeExpenses: boolean; period: 'general' | 'daily' | 'weekly' | 'monthly'; type: 'time' | 'money'; budget: number; disallowOverbudget: boolean; showToUsers: boolean; progress: number; timeProgress: number; expenseProgress: number; }; rate?: { type: 'project_rate' | 'user_rate' | 'flat_rate'; rate: number; }; time?: { total: number; today: number; week: number; }; isTemplate?: boolean; privacy?: 'private' | 'public'; connectionStatus?: 'auto' | 'manual' | 'disabled'; icon?: Record<string, any>; color?: Record<string, any>; viewSettings?: Record<string, any>; foreign?: boolean; favorite?: boolean; } export interface EverHourTask { id: string; name: string; number?: string; status: 'open' | 'closed' | 'in_progress'; type: 'task' | 'bug' | 'feature'; project: { id: string; name: string; }; section?: { id: string; name: string; }; assignee?: { id: number; name: string; }; labels?: string[]; description?: string; time?: { total: number; today: number; week: number; }; createdAt: string; updatedAt: string; } export interface EverHourTimeRecord { id: number; comment?: string; time: number; date: string; user: number; task?: { id: string; name: string; type?: 'task' | 'bug' | 'feature'; status?: 'open' | 'closed' | 'in_progress' | 'completed'; url?: string; iteration?: string; projects?: string[]; createdAt?: string; dueOn?: string; labels?: string[]; time?: { total: number; users: Record<string, number>; timerTime: number; }; attributes?: Record<string, any>; completed?: boolean; completedAt?: string; assignees?: Array<{ accountId: string; accountName: string; userId: number; }>; }; project?: { id: string; name: string; }; history?: Array<{ id: number; createdAt: string; time: number; action: 'ADD' | 'EDIT' | 'DELETE'; previousTime: number; previousDate?: string; previousTask?: string; createdBy: number; warning?: string; }>; lockReasons?: string[]; isLocked?: boolean; cost?: number; costRate?: number; createdAt: string; updatedAt?: string; } export interface EverHourTimer { id: string; status: 'active' | 'stopped'; startedAt?: string; task?: { id: string; name: string; }; project?: { id: string; name: string; }; user: { id: number; name: string; }; comment?: string; duration?: number; } export interface EverHourUser { id: number; name: string; email: string; headline?: string; role: 'admin' | 'manager' | 'member'; status: 'active' | 'pending' | 'suspended'; type?: 'employee' | 'contractor'; avatarUrl?: string; avatarUrlLarge?: string; timezone?: string; rate?: number; capacity?: number; isEmailVerified?: boolean; enableResourcePlanner?: boolean; favorite?: boolean; createdAt: string; updatedAt?: string; cost?: number; costHistory?: Array<{ id: number; cost: number; createdAt: string; }>; resourcePlannerAccess?: { viewMine: boolean; editMine: boolean; viewAll: boolean; editAll: boolean; }; timeTrackingPolicy?: { allowTimeWithoutTask: boolean; allowManualTimeInput: boolean; allowFutureTime: boolean; allowCompletedTaskTime: boolean; allowTimeWithoutEstimate: boolean; allowExceedEstimate: boolean; allowManageEstimates: boolean; lockTimeAfter: number; lockTimePeriod: 'days' | 'weeks' | 'months'; }; groups?: Array<{ id: number; name: string; }>; budget?: { excludeUnbillableTime: boolean; excludeExpenses: boolean; period: 'daily' | 'weekly' | 'monthly'; type: 'time' | 'money'; budget: number; disallowOverbudget: boolean; showToUsers: boolean; thresholdNotificationUsers: number[]; progress: number; timeProgress: number; expenseProgress: number; }; permissions?: Record<string, any>; } export interface EverHourSection { id: string; name: string; project: { id: string; name: string; }; position: number; tasksCount: number; createdAt: string; updatedAt: string; } export interface EverHourApiResponse<T> { data: T; meta?: { page?: number; limit?: number; total?: number; }; } export interface EverHourApiError { message: string; code: string; details?: Record<string, any>; } export interface CreateTimeRecordParams { time: number; date: string; task?: string; project?: string; comment?: string; } export interface UpdateTimeRecordParams { time?: number; date?: string; task?: string; project?: string; comment?: string; } export interface CreateProjectParams { name: string; client?: number; type?: 'board' | 'list'; billing?: { type?: 'flat_rate' | 'hourly_rate' | 'none'; budget?: number; rate?: number; }; } export interface UpdateProjectParams { name?: string; status?: 'active' | 'archived' | 'completed'; billing?: { type?: 'flat_rate' | 'hourly_rate' | 'none'; budget?: number; rate?: number; }; } export interface CreateTaskParams { name: string; section?: string; assignee?: number; type?: 'task' | 'bug' | 'feature'; description?: string; labels?: string[]; } export interface UpdateTaskParams { name?: string; status?: 'open' | 'closed' | 'in_progress'; type?: 'task' | 'bug' | 'feature'; assignee?: number; description?: string; labels?: string[]; } export interface CreateClientParams { name: string; businessDetails?: { name?: string; address?: string; phone?: string; website?: string; }; } export interface UpdateClientParams { name?: string; businessDetails?: { name?: string; address?: string; phone?: string; website?: string; }; } export interface TimerStartParams { task?: string; project?: string; comment?: string; } export interface CreateSectionParams { name: string; project: string; position?: number; } export interface UpdateSectionParams { name?: string; position?: number; } export interface ListParams { page?: number; limit?: number; query?: string; status?: string; project?: string; client?: number; assignee?: number; from?: string; to?: string; } export interface EverHourTimecard { id: number; user: number; date: string; clockIn: string; clockOut: string; } export interface CreateTimecardParams { user: number; date?: string; } export interface UpdateTimecardParams { clockIn?: string; clockOut?: string; } export interface EverHourInvoice { id: number; number: string; status: 'draft' | 'sent' | 'paid'; total: number; } export interface CreateInvoiceParams { number: string; status?: 'draft' | 'sent' | 'paid'; } export interface UpdateInvoiceParams { status?: 'draft' | 'sent' | 'paid'; } export interface EverHourExpense { id: number; amount: number; date: string; description: string; } export interface CreateExpenseParams { amount: number; date: string; description?: string; } export interface UpdateExpenseParams { amount?: number; description?: string; } export interface EverHourExpenseCategory { id: number; name: string; } export interface EverHourAssignment { id: number; user: number; project: string; date: string; hours: number; } export interface CreateAssignmentParams { user: number; project: string; date: string; hours: number; } export interface UpdateAssignmentParams { hours?: number; } import type { EverHourApiClient } from '../api/everhour-client.js'; export interface MCPToolDefinition { name: string; description: string; inputSchema: any; handler: (client: EverHourApiClient, args: any) => Promise<any>; readonly: boolean; operationType: 'read' | 'write' | 'delete'; affectedResources: string[]; } export interface MCPTools { [key: string]: MCPToolDefinition; } export interface ReadonlyConfig { enabled: boolean; allowedOperations: ('read' | 'write' | 'delete')[]; blockedTools: string[]; customRules?: (toolName: string, operationType: string) => boolean; } //# sourceMappingURL=everhour.d.ts.map