@aot-tech/clockify-mcp-server
Version:
MCP Server for Clockify time tracking integration with AI tools
70 lines (69 loc) • 2.38 kB
TypeScript
import { z } from 'zod';
import { CreateEntrySchema } from '../validation/entries/create-entry-schema';
import { FindEntrySchema } from '../validation/entries/find-entry-schema';
import { ReadResourceTemplateCallback, ResourceMetadata, ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp';
import { FindProjectSchema } from '../validation/projects/find-project-schema';
import { FindTaskSchema } from '../validation/entries/find-task-schema';
import { DetailedReportSchema } from '../validation/reports/detailed-report-schema';
import { SummaryReportSchema } from '../validation/reports/summary-report-schema';
export type TCreateEntrySchema = z.infer<typeof CreateEntrySchema>;
export type TFindEntrySchema = z.infer<typeof FindEntrySchema>;
export type TFindProjectSchema = z.infer<typeof FindProjectSchema>;
export type TFindTaskSchema = z.infer<typeof FindTaskSchema>;
export type TDetailedReportSchema = z.infer<typeof DetailedReportSchema>;
export type TSummaryReportSchema = z.infer<typeof SummaryReportSchema>;
export interface ClockifyWorkspace {
id: string;
name: string;
}
export interface ClockifyUser {
id: string;
name: string;
email: string;
}
export interface McpToolConfig {
name: string;
description: string;
parameters: Record<string, any>;
handler: (params: any) => Promise<McpResponse>;
}
export type McpToolConfigWithoutParameters = Omit<McpToolConfig, 'parameters'>;
export interface McpTextContent {
type: 'text';
text: string;
[key: string]: unknown;
}
export interface McpImageContent {
type: 'image';
data: string;
mimeType: string;
[key: string]: unknown;
}
export interface McpResourceConfig {
name: string;
template: ResourceTemplate;
metadata: ResourceMetadata;
handler: ReadResourceTemplateCallback;
}
export interface McpResourceContent {
type: 'resource';
resource: {
text: string;
uri: string;
mimeType?: string;
[key: string]: unknown;
} | {
uri: string;
blob: string;
mimeType?: string;
[key: string]: unknown;
};
[key: string]: unknown;
}
export type McpContent = McpTextContent | McpImageContent | McpResourceContent;
export interface McpResponse {
content: McpContent[];
_meta?: Record<string, unknown>;
isError?: boolean;
[key: string]: unknown;
}