@asanstefanski/everhour-mcp-server
Version:
Complete Everhour API integration for Model Context Protocol (MCP) with 100% endpoint coverage
313 lines • 6.76 kB
TypeScript
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;
client?: {
id: number;
name: string;
};
status: 'active' | 'archived' | 'completed';
type: 'board' | 'list';
billing?: {
type: 'flat_rate' | 'hourly_rate' | 'none';
budget?: number;
rate?: number;
};
time?: {
total: number;
today: number;
week: number;
};
createdAt: string;
updatedAt: string;
}
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: string;
comment?: string;
time: number;
date: string;
task?: {
id: string;
name: string;
};
project?: {
id: string;
name: string;
};
user: {
id: number;
name: string;
};
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;
role: 'admin' | 'manager' | 'member';
status: 'active' | 'pending' | 'suspended';
avatarUrl?: string;
timezone?: string;
createdAt: string;
updatedAt: string;
}
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