@chinchillaenterprises/mcp-upwork
Version:
Modular Upwork MCP server for job search and proposal management via Upwork API
53 lines (47 loc) • 1.62 kB
text/typescript
import { Tool } from "@modelcontextprotocol/sdk/types.js";
import { GetWorkDiaryArgsSchema } from "../../schemas/upwork.js";
import { UpworkClient } from "../../services/upwork-client.js";
import { z } from "zod";
export const toolDefinition: Tool = {
name: "upwork_get_work_diary",
description: "Get work diary entries with time tracking data, screenshots, and activity levels",
inputSchema: {
type: "object",
properties: {
contractId: {
type: "string",
description: "Contract ID to get work diary for"
},
date: {
type: "string",
pattern: "^\\d{4}-\\d{2}-\\d{2}$",
description: "Date to get work diary for (YYYY-MM-DD format)"
},
timezone: {
type: "string",
description: "Timezone for the work diary (e.g., 'America/New_York')"
}
},
required: ["contractId", "date"]
}
};
export const handler = async (args: z.infer<typeof GetWorkDiaryArgsSchema>) => {
try {
const client = UpworkClient.getInstance();
const params: any = {
date: args.date
};
const response = await client.get(`/timereports/v1/workdiary/company/${args.contract_id}`, params);
return {
success: true,
workDiary: response.snapshots || response,
contractId: args.contract_id,
date: args.date,
totalHours: response.total_hours || 0,
totalActivity: response.total_activity || 0
};
} catch (error: any) {
throw new Error(`Failed to get work diary: ${error.message}`);
}
};
export { GetWorkDiaryArgsSchema as schema } from "../../schemas/upwork.js";