jobnimbus-mcp-client
Version:
JobNimbus MCP Client - Connect Claude Desktop to remote JobNimbus MCP server
86 lines • 3.71 kB
JavaScript
/**
* Get Calendar Activities
* Fetches activities and formats them as calendar events
*/
import { BaseTool } from '../baseTool.js';
export class GetCalendarActivities extends BaseTool {
get definition() {
return {
name: 'get_calendar_activities',
description: 'Get calendar activities and scheduling (formatted from activities data)',
inputSchema: {
type: 'object',
properties: {
from: {
type: 'number',
description: 'Starting index for pagination (default: 0)',
},
size: {
type: 'number',
description: 'Number of records to retrieve (default: 50, max: 100)',
},
date_from: {
type: 'string',
description: 'Start date filter (YYYY-MM-DD format)',
},
date_to: {
type: 'string',
description: 'End date filter (YYYY-MM-DD format)',
},
},
},
};
}
async execute(input, context) {
// Fetch activities from JobNimbus API
const params = {
from: input.from || 0,
size: input.size || 50,
date_from: input.date_from,
date_to: input.date_to,
};
const response = await this.client.get(context.apiKey, 'activities', params);
const activities = response.data?.activity || [];
// Transform activities into calendar events
const now = new Date().toISOString();
const calendarEvents = activities
.filter((activity) => activity.date_start || activity.date_created)
.map((activity) => {
// Convert Unix timestamp to ISO string
const startDate = activity.date_start
? new Date(activity.date_start * 1000).toISOString()
: new Date(activity.date_created * 1000).toISOString();
const endDate = activity.date_end
? new Date(activity.date_end * 1000).toISOString()
: startDate;
return {
id: activity.jnid || activity.recid?.toString() || '',
title: activity.name || activity.subject || 'Untitled Activity',
description: activity.description || activity.notes || '',
start_date: startDate,
end_date: endDate,
all_day: activity.all_day || false,
type: activity.record_type_name || 'activity',
related_to: activity.related?.[0]?.name || activity.customer || '',
created_by: activity.created_by_name || 'Unknown',
};
});
// Sort by start date
calendarEvents.sort((a, b) => new Date(a.start_date).getTime() - new Date(b.start_date).getTime());
// Calculate summary stats
const upcomingEvents = calendarEvents.filter((event) => event.start_date >= now).length;
const pastEvents = calendarEvents.filter((event) => event.start_date < now).length;
const allDayEvents = calendarEvents.filter((event) => event.all_day).length;
return {
success: true,
total_activities: calendarEvents.length,
calendar_events: calendarEvents,
summary: {
upcoming_events: upcomingEvents,
past_events: pastEvents,
all_day_events: allDayEvents,
},
};
}
}
//# sourceMappingURL=getCalendarActivities.js.map