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