Skip to main content
Glama
pshempel

MCP Time Server Node

by pshempel

calculate_duration

Determine the duration between two timestamps with precision. Specify start and end times, optional unit, and timezone for accurate results. Ideal for time-based calculations and scheduling.

Instructions

Calculate duration between two times

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
end_timeYesEnd time
start_timeYesStart time
timezoneNoTimezone for parsing (default: system timezone)
unitNoOutput unit (default: "auto")

Implementation Reference

  • Main handler function for the calculate_duration tool. Parses input times, validates timezone and unit, calculates duration using date-fns differenceInMilliseconds, applies caching, and returns formatted result with all unit breakdowns.
    export function calculateDuration(params: CalculateDurationParams): CalculateDurationResult { debug.timing('calculateDuration called with params: %O', params); const { start_time, end_time } = params; // Validate string lengths first if (typeof start_time === 'string') { validateDateString(start_time, 'start_time'); } if (typeof end_time === 'string') { validateDateString(end_time, 'end_time'); } const config = getConfig(); const unit = validateUnit(params.unit); const timezone = resolveTimezoneUtil(params.timezone, config.defaultTimezone); // Use withCache wrapper instead of manual cache management return withCache( `duration_${start_time}_${end_time}_${unit}_${timezone}`, CacheTTL.CALCULATIONS, () => { // Validate timezone if (!validateTimezone(timezone)) { debug.error('Invalid timezone: %s', timezone); throw new TimezoneError(`Invalid timezone: ${timezone}`, timezone); } // Parse dates with proper error context const startDate = parseDateWithContext(start_time, timezone, 'start_time'); debug.timing('Parsed start date: %s', startDate.toISOString()); const endDate = parseDateWithContext(end_time, timezone, 'end_time'); debug.timing('Parsed end date: %s', endDate.toISOString()); // Calculate all duration values const values = calculateDurationValues(startDate, endDate); debug.timing('Duration in milliseconds: %d', values.milliseconds); // Format the result const formatted = formatDurationResult(values, unit); debug.timing('Formatted duration: %s', formatted); const result: CalculateDurationResult = { ...values, formatted, }; debug.timing('Returning result: %O', result); return result; } ); }
  • TypeScript interfaces defining input (CalculateDurationParams) and output (CalculateDurationResult) schemas for the calculate_duration tool.
    export interface CalculateDurationParams { start_time: string; end_time: string; unit?: string; timezone?: string; } export interface CalculateDurationResult { milliseconds: number; seconds: number; minutes: number; hours: number; days: number; formatted: string; is_negative: boolean; }
  • src/index.ts:115-131 (registration)
    Registration of the calculate_duration tool in TOOL_DEFINITIONS array, including name, description, and input schema.
    { name: 'calculate_duration', description: 'Calculate duration between two times', inputSchema: { type: 'object' as const, properties: { start_time: { type: 'string' as const, description: 'Start time' }, end_time: { type: 'string' as const, description: 'End time' }, unit: { type: 'string' as const, description: 'Output unit (default: "auto")' }, timezone: { type: 'string' as const, description: 'Timezone for parsing (default: system timezone)', }, }, required: ['start_time', 'end_time'], }, },
  • src/index.ts:264-265 (registration)
    Mapping of calculate_duration tool name to the calculateDuration handler function in TOOL_FUNCTIONS.
    calculate_duration: (params: unknown) => calculateDuration(params as Parameters<typeof calculateDuration>[0]),
  • Core helper function that computes the duration values across all units using date-fns differenceInMilliseconds.
    export function calculateDurationValues(startDate: Date, endDate: Date): DurationValues { debug.timing( 'calculateDurationValues called with: start=%s, end=%s', startDate.toISOString(), endDate.toISOString() ); const milliseconds = differenceInMilliseconds(endDate, startDate); const seconds = milliseconds / 1000; const minutes = seconds / 60; const hours = minutes / 60; const days = hours / 24; const is_negative = milliseconds < 0; const result = { milliseconds, seconds, minutes, hours, days, is_negative, }; debug.timing('Calculated duration values: %O', result); return result; }

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pshempel/mcp-time-server-node'

If you have feedback or need assistance with the MCP directory API, please join our Discord server