Skip to main content
Glama
pshempel

MCP Time Server Node

by pshempel

MCP Time Server Node

A comprehensive Node.js time manipulation server implementing the Model Context Protocol (MCP) for LLMs like Claude. This server provides powerful time-related operations including timezone conversions, date arithmetic, business day calculations, and more.

Features

  • 🌍 Timezone Operations: Convert times between any IANA timezones

  • Current Time: Get current time in any timezone with custom formatting

  • ➕➖ Date Arithmetic: Add or subtract time periods from dates

  • 📊 Duration Calculations: Calculate time between dates in various units

  • 💼 Business Days: Calculate business days excluding weekends and holidays

  • ⏱️ Business Hours: Calculate working hours between timestamps with timezone support

  • 🔄 Recurring Events: Find next occurrences of recurring patterns

  • 📝 Flexible Formatting: Format times in relative, calendar, or custom formats

  • 📅 Days Until: Calculate days until any date or event

  • 🚀 High Performance: Response times < 10ms with intelligent caching

  • 🔒 Security Hardened: Input validation, cache key hashing, ESLint security rules

  • 🛡️ Rate Limiting: Configurable rate limits to prevent abuse

  • Thoroughly Tested: 703+ tests with 100% coverage

Related MCP server: Chrono MCP

Installation

npm install -g mcp-time-server-node

Using Claude Code (claude mcp add)

Add the server to Claude Code:

# For npm-published version (when available)
claude mcp add mcp-time-server-node
# For local development/testing
claude mcp add tim-server /path/to/mcp-time-server-node/dist/index.js

Using Claude Desktop

Manually add to your claude_desktop_config.json:

{
  "mcpServers": {
    "time-server": {
      "command": "npx",
      "args": ["-y", "mcp-time-server-node"],
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}

Local Testing

For testing before npm publish:

# Build the project
make build
# Test directly
echo '{"jsonrpc":"2.0","method":"tools/list","id":1,"params":{}}' | node dist/index.js
# Or add to Claude Code for local testing
cd mcp-time-server-node
claude mcp add time-server-local $(pwd)/dist/index.js 

Available Tools

1. get_current_time

Get the current time in any timezone.

Parameters:

  • timezone (optional): IANA timezone name (default: "UTC")

  • format (optional): date-fns format string

  • include_offset (optional): Include UTC offset (default: true)

Example:

{
  "timezone": "America/New_York",
  "format": "yyyy-MM-dd HH:mm:ss"
}

2. convert_timezone

Convert time between timezones.

Parameters:

  • time (required): Input time in ISO format or parseable string

  • from_timezone (required): Source IANA timezone

  • to_timezone (required): Target IANA timezone

  • format (optional): Output format string

Example:

{
  "time": "2025-01-20T15:00:00Z",
  "from_timezone": "UTC",
  "to_timezone": "Asia/Tokyo"
}

3. add_time

Add a duration to a date/time.

Parameters:

  • time (required): Base time

  • amount (required): Amount to add

  • unit (required): Unit ("years", "months", "days", "hours", "minutes", "seconds")

  • timezone (optional): Timezone for calculation

Example:

{
  "time": "2025-01-20",
  "amount": 3,
  "unit": "days"
}

4. subtract_time

Subtract a duration from a date/time.

Parameters:

  • Same as add_time

5. calculate_duration

Calculate the duration between two times.

Parameters:

  • start_time (required): Start time

  • end_time (required): End time

  • unit (optional): Output unit ("auto", "milliseconds", "seconds", "minutes", "hours", "days")

  • timezone (optional): Timezone for parsing

Example:

{
  "start_time": "2025-01-20T09:00:00",
  "end_time": "2025-01-20T17:30:00"
}

6. get_business_days

Calculate business days between dates.

Parameters:

  • start_date (required): Start date

  • end_date (required): End date

  • exclude_weekends (optional): Exclude Saturdays and Sundays (default: true)

  • holidays (optional): Array of holiday dates in ISO format

  • timezone (optional): Timezone for calculation

Example:

{
  "start_date": "2025-01-01",
  "end_date": "2025-01-31",
  "holidays": ["2025-01-01", "2025-01-20"]
}

7. next_occurrence

Find the next occurrence of a recurring event.

Parameters:

  • pattern (required): "daily", "weekly", "monthly", or "yearly"

  • start_from (optional): Start searching from this date (default: now)

  • day_of_week (optional): For weekly pattern (0-6, where 0 is Sunday)

  • day_of_month (optional): For monthly pattern (1-31)

  • time (optional): Time in HH:mm format

  • timezone (optional): Timezone for calculation

Example:

{
  "pattern": "weekly",
  "day_of_week": 1,
  "time": "09:00"
}

8. format_time

Format time in various human-readable formats.

Parameters:

  • time (required): Time to format

  • format (required): "relative", "calendar", or "custom"

  • custom_format (optional): Format string when using "custom" format

  • timezone (optional): Timezone for display

Example:

{
  "time": "2025-01-20T15:00:00Z",
  "format": "relative"
}

9. calculate_business_hours

Calculate business hours between two times.

Parameters:

  • start_time (required): Start time

  • end_time (required): End time

  • business_hours (optional): Business hours definition (default: 9 AM - 5 PM)

    • Can be a single object: { start: { hour: 9, minute: 0 }, end: { hour: 17, minute: 0 } }

    • Or weekly schedule: { 0: null, 1: { start: {...}, end: {...} }, ... } (0=Sunday, 6=Saturday)

  • timezone (optional): Timezone for calculation

  • holidays (optional): Array of holiday dates

  • include_weekends (optional): Include weekends in calculation (default: false)

Example:

{
  "start_time": "2025-01-20T08:00:00",
  "end_time": "2025-01-24T18:00:00",
  "business_hours": {
    "start": { "hour": 9, "minute": 0 },
    "end": { "hour": 17, "minute": 30 }
  },
  "holidays": ["2025-01-22"],
  "timezone": "America/New_York"
}

10. days_until

Calculate days until a target date or event.

Parameters:

  • target_date (required): Target date (ISO string, natural language like "next Christmas", or Unix timestamp)

  • timezone (optional): Timezone for calculation (default: system timezone)

  • format_result (optional): Return formatted string instead of number (default: false)

Example:

{
  "target_date": "2025-12-25",
  "timezone": "America/New_York"
}

Environment Variables

  • NODE_ENV: Set to "production" for production use

  • RATE_LIMIT: Maximum requests per minute (default: 100)

  • RATE_LIMIT_WINDOW: Rate limit window in milliseconds (default: 60000)

  • CACHE_SIZE: Maximum cache entries (default: 10000)

  • DEFAULT_TIMEZONE: Override system timezone detection (e.g., "America/New_York")

  • MAX_LISTENERS: Maximum concurrent requests (default: 20, minimum: 10)

Performance

  • All operations complete in < 10ms (after initial load)

  • Intelligent caching reduces repeated calculations

  • Sliding window rate limiting prevents abuse

  • Memory-efficient implementation

Error Handling

The server returns structured errors with codes:

  • INVALID_TIMEZONE: Invalid timezone specified

  • INVALID_DATE_FORMAT: Cannot parse the provided date

  • INVALID_UNIT: Invalid time unit specified

  • RATE_LIMIT_EXCEEDED: Too many requests

  • INVALID_RECURRENCE_PATTERN: Invalid recurrence pattern

Development

Current Status

Refactoring completed

Building from source

git clone https://github.com/pshempel/mcp-time-node.git
cd mcp-time-server-node
make setup    # Install dependencies and build
make test     # Run all tests

Running tests

make test         # Run all tests
make coverage     # Run with coverage report
make test-watch   # Run in watch mode for TDD

# If tests fail unexpectedly:
make test-quick   # Fix Jest issues and run tests
make reset        # Full environment reset

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License - see LICENSE file for details

Author

pshempel

Acknowledgments

Built with:

Available Tools

11 tools
add_timeC

Add duration to a date/time

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesBase time
amountYesAmount to add
unitYesUnit of time
timezoneNoTimezone for calculation (default: system timezone)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('add duration') but doesn't cover critical aspects like error handling (e.g., invalid inputs), timezone handling details beyond the schema's default note, or output format. This is inadequate for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence ('Add duration to a date/time') that is front-loaded and wastes no words. It directly conveys the core purpose without unnecessary elaboration, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a mutation with 4 parameters) and lack of annotations and output schema, the description is insufficient. It doesn't explain the result (e.g., returns a new datetime), error conditions, or how it differs from siblings, leaving gaps that could hinder correct agent usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters (time, amount, unit, timezone) with descriptions and an enum for 'unit'. The description adds no additional meaning beyond what the schema provides, such as examples or edge cases, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Add duration to a date/time' clearly states the verb ('add') and resource ('duration to a date/time'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'subtract_time' or 'calculate_duration', which would require more specificity to earn a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'subtract_time', 'calculate_duration', and 'convert_timezone', there's no indication of appropriate contexts, exclusions, or prerequisites, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_business_hoursC

Calculate business hours between two times

ParametersJSON Schema
NameRequiredDescriptionDefault
start_timeYesStart time
end_timeYesEnd time
business_hoursNoBusiness hours definition (default: 9 AM - 5 PM)
timezoneNoTimezone for calculation (default: system timezone)
holidaysNoArray of holiday dates
include_weekendsNoInclude weekends in calculation (default: false)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'calculate' implies a read-only operation, the description doesn't specify whether this tool has side effects, requires authentication, has rate limits, or what format the output takes. For a tool with 6 parameters and no annotations, this represents a significant gap in behavioral information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just one sentence that directly states the tool's purpose. There's no wasted language or unnecessary elaboration. It's appropriately sized for a calculation tool and front-loads the essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters, no annotations, and no output schema, the description is insufficiently complete. While the schema covers parameter details, the description doesn't address behavioral aspects, usage context, or output format. Given the complexity of the tool (business hours calculation with multiple configuration options) and the lack of structured metadata, the description should provide more contextual information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, meaning all parameters are documented in the schema itself. The description adds no additional parameter information beyond what's already in the schema. According to the scoring rules, when schema coverage is high (>80%), the baseline score is 3 even with no parameter information in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose as calculating business hours between two times, which is a specific verb+resource combination. However, it doesn't distinguish this tool from sibling tools like 'calculate_duration' or 'get_business_days', which likely have overlapping functionality. The description is accurate but lacks sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'calculate_duration', 'get_business_days', and 'add_time' available, there's no indication of what makes this tool unique or when it should be preferred over those alternatives. The description only states what the tool does, not when to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_durationC

Calculate duration between two times

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

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the basic function but doesn't mention critical details like time format expectations (e.g., ISO 8601), error handling for invalid inputs, whether it supports negative durations, or if it's a pure calculation without side effects. This leaves significant gaps for an agent to use it correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at just four words ('Calculate duration between two times'), front-loading the core purpose with zero wasted text. Every word earns its place by directly conveying the tool's function, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of time calculations and the lack of annotations and output schema, the description is incomplete. It doesn't address behavioral aspects like input formats, output details (e.g., numeric vs. string), or error cases, which are essential for an agent to invoke this tool reliably without structured guidance elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, clearly documenting all four parameters (start_time, end_time, unit, timezone) with their types and defaults. The description adds no additional parameter semantics beyond the schema, such as examples or constraints, so it meets the baseline for high schema coverage without compensating further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose as 'Calculate duration between two times' with a specific verb ('calculate') and resource ('duration'), making it immediately understandable. However, it doesn't differentiate from sibling tools like 'calculate_business_hours' or 'days_until', which also involve time calculations but with different scopes or constraints.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'calculate_business_hours' (which might exclude weekends/holidays) and 'days_until' (which might focus on calendar days), there's no indication of this tool's specific context, such as whether it handles raw time intervals or has other limitations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convert_timezoneC

Convert time between timezones

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesInput time
from_timezoneYesSource IANA timezone
to_timezoneYesTarget IANA timezone
formatNoOutput format

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the conversion action but doesn't mention error handling (e.g., invalid timezone inputs), performance characteristics, or what the output looks like (though no output schema exists). This leaves significant gaps in understanding how the tool behaves beyond its basic function.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste—it directly states the tool's purpose without unnecessary words. It's appropriately sized for a straightforward conversion tool and is front-loaded with essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (timezone conversion with 4 parameters) and no annotations or output schema, the description is incomplete. It doesn't explain error cases, input formats (e.g., time string structure), or output details, leaving the agent with insufficient context for reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters (time, from_timezone, to_timezone, format) with descriptions like 'Source IANA timezone'. The description adds no additional meaning beyond what the schema provides, such as examples or constraints, meeting the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('convert') and resource ('time between timezones'), making the purpose immediately understandable. However, it doesn't distinguish this tool from sibling tools like 'format_time' or 'get_current_time' which might also involve timezone handling, so it lacks sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'format_time' or 'get_current_time'. There's no mention of prerequisites, exclusions, or specific contexts where this tool is preferred over siblings, leaving the agent with minimal usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

days_untilB

Calculate days until a target date/event

ParametersJSON Schema
NameRequiredDescriptionDefault
target_dateYesTarget date (ISO string, natural language, or Unix timestamp)
timezoneNoTimezone for calculation (default: system timezone)
format_resultNoReturn formatted string (e.g., "in 5 days") instead of number (default: false)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. While 'calculate' implies a read-only operation, the description doesn't specify whether this requires permissions, has rate limits, handles errors, or returns structured data. It mentions formatting options but doesn't describe the actual return format or any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that states the core functionality without unnecessary elaboration. Every word earns its place - 'calculate' (verb), 'days until' (measurement), 'target date/event' (resource). There's no fluff or redundant information, making it maximally concise while still being clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a calculation tool with no annotations and no output schema, the description provides adequate basic context about what the tool does. However, it doesn't address important contextual elements like return format (beyond mentioning formatting options), error handling, or how it differs from similar sibling tools. The 100% schema coverage helps, but the description itself is minimal given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the input schema already documents all three parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema - it doesn't explain parameter interactions, default behaviors beyond what's in schema descriptions, or edge cases. The baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('calculate') and resource ('days until a target date/event'). It distinguishes itself from siblings like 'calculate_duration' or 'get_business_days' by focusing on countdown calculations rather than interval measurements or business logic. However, it doesn't explicitly differentiate from 'next_occurrence' which might have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'calculate_duration', 'get_business_days', and 'next_occurrence' that might handle similar date calculations, there's no indication of when this specific countdown calculation is preferred. No prerequisites, exclusions, or comparative context is mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

format_timeB

Format time in various human-readable formats

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime to format
formatYesFormat type
custom_formatNoFor custom format
timezoneNoTimezone for display (default: system timezone)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. While 'Format time' implies a read-only transformation, it doesn't specify whether this requires specific inputs, what happens with invalid time formats, or what the output looks like. For a tool with zero annotation coverage, this leaves significant behavioral questions unanswered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise - a single sentence that directly states the tool's purpose. There's zero waste or unnecessary elaboration, making it highly efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 parameters, 2 required) and 100% schema coverage, the description is minimally adequate. However, with no output schema and no annotations, the description should ideally provide more context about what the formatted output looks like and any behavioral constraints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 4 parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema. The baseline of 3 is appropriate when the schema does the heavy lifting, though the description could have provided context about how parameters interact.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Format time in various human-readable formats' - this specifies the verb (format) and resource (time) with the scope (human-readable formats). However, it doesn't explicitly differentiate from sibling tools like 'convert_timezone' or 'get_current_time', which also deal with time formatting/display.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'convert_timezone', 'get_current_time', and 'calculate_duration' available, there's no indication of when format_time is the appropriate choice versus other time-related operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_business_daysC

Calculate business days between dates

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateYesStart date
end_dateYesEnd date
exclude_weekendsNoExclude weekends (default: true)
holidaysNoArray of holiday dates
timezoneNoTimezone for calculation (default: system timezone)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'calculate' implies a read-only operation, the description doesn't mention any behavioral traits such as error handling, performance characteristics, or whether the calculation is inclusive/exclusive of start/end dates. This leaves significant gaps for a tool with 5 parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just four words, front-loading the core purpose without any unnecessary elaboration. Every word earns its place, making it easy for an agent to quickly understand what the tool does at a high level.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a calculation tool with 5 parameters and no output schema, the description is insufficient. It doesn't explain what the tool returns (e.g., integer count of days, detailed breakdown), doesn't clarify behavioral aspects like date inclusivity, and provides no context about how business days are defined beyond weekend/holiday exclusion mentioned in parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so all parameters are documented in the schema. The description doesn't add any meaningful parameter semantics beyond what's already in the schema (e.g., it doesn't explain date format requirements, holiday array format, or timezone string conventions). This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('calculate') and resource ('business days between dates'), making it immediately understandable. However, it doesn't distinguish this tool from sibling tools like 'calculate_business_hours' or 'calculate_duration', which could cause confusion about when to use each.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'calculate_business_hours' and 'calculate_duration' available, there's no indication of how this tool differs or when it should be preferred, leaving the agent to guess based on tool names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_current_timeC

Get current time in specified timezone with formatting options

ParametersJSON Schema
NameRequiredDescriptionDefault
timezoneNoIANA timezone (default: system timezone)
formatNodate-fns format string
include_offsetNoInclude UTC offset (default: true)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions timezone and formatting options but fails to describe key behaviors such as error handling (e.g., invalid timezone), default behaviors (implied but not stated), or output characteristics (e.g., format of returned time). This leaves significant gaps for a tool with parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part of the sentence contributes directly to understanding the tool's functionality, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 parameters, no annotations, no output schema), the description is incomplete. It doesn't explain the return value (e.g., string format), error cases, or behavioral nuances like default timezone handling. For a tool with multiple options and no structured output guidance, this leaves the agent under-informed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds minimal value beyond the input schema, which has 100% coverage. It hints at 'specified timezone' and 'formatting options', but the schema already documents these parameters in detail. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, as the description doesn't enhance parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('current time'), and specifies key aspects like timezone and formatting. However, it doesn't explicitly differentiate from sibling tools like 'format_time' or 'convert_timezone', which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'format_time' or 'convert_timezone'. It lacks context about prerequisites, exclusions, or comparative use cases, leaving the agent with minimal direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_server_infoB

Get server version and build information

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states it 'gets' information (implying read-only), but doesn't disclose any behavioral traits like authentication requirements, rate limits, error conditions, or what format the information returns. For a tool with zero annotation coverage, this is inadequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that states exactly what the tool does with zero wasted words. It's appropriately sized and front-loaded, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is incomplete. It doesn't explain what 'server version and build information' entails, how it's returned, or any behavioral context. For a tool that presumably returns system metadata, more detail would help the agent understand what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100% (empty schema is fully documented). The description doesn't need to add parameter semantics, so it meets the baseline for a parameterless tool. No additional value is needed or provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('server version and build information'), making the tool's function immediately understandable. However, it doesn't differentiate from sibling tools, which are all time/date related, so this tool stands alone in purpose but without explicit sibling comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. While the tool's purpose is distinct from its time/date siblings, there's no explicit mention of when it's appropriate or what context triggers its use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

next_occurrenceC

Find next occurrence of a recurring event

ParametersJSON Schema
NameRequiredDescriptionDefault
patternYesRecurrence pattern
start_fromNoStart searching from
day_of_weekNoFor weekly (0-6, 0=Sunday)
day_of_monthNoFor monthly (1-31)
timeNoTime in HH:mm format
timezoneNoTimezone for calculation (default: system timezone)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't explain how it behaves: whether it returns a single date/time, what format the output is in, if there are any rate limits, error conditions, or dependencies. For a tool with 6 parameters and no output schema, this leaves significant gaps in understanding its operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that efficiently conveys the core purpose without any wasted words. It's appropriately sized and front-loaded, making it easy to understand at a glance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of handling recurring events with 6 parameters, no annotations, and no output schema, the description is insufficiently complete. It doesn't explain what the tool returns, how to interpret results, or provide any context about edge cases (e.g., invalid date combinations). For a tool that calculates future occurrences, this leaves too much undefined.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional parameter information beyond what's in the schema, such as explaining how parameters interact (e.g., 'day_of_week' is only relevant for 'weekly' pattern) or providing examples. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'find' and the resource 'next occurrence of a recurring event', making the purpose immediately understandable. However, it doesn't distinguish this tool from potential sibling tools that might also handle recurring events or date calculations, though none of the listed siblings appear to directly overlap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any prerequisites, constraints, or compare it to sibling tools like 'days_until' or 'calculate_duration' that might serve related purposes in date/time calculations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subtract_timeC

Subtract duration from a date/time

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesBase time
amountYesAmount to subtract
unitYesUnit of time
timezoneNoTimezone for calculation (default: system timezone)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It states the operation but doesn't cover error handling, timezone implications beyond the schema's default note, or output format (e.g., whether it returns a string or object). This is inadequate for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste—it directly states the tool's function without unnecessary words. It's appropriately sized and front-loaded, earning full marks for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (date/time manipulation with multiple parameters) and lack of annotations and output schema, the description is insufficient. It doesn't explain the return value, error conditions, or behavioral nuances, leaving significant gaps for the agent to operate effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional meaning beyond what's in the schema (e.g., no examples or edge cases), meeting the baseline of 3 where the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('subtract') and resource ('duration from a date/time'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'add_time' beyond the opposite operation, missing explicit comparison that would earn a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'add_time' or 'calculate_duration'. The description lacks context about use cases, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 11 tool updates
    • First observedadd_time
    • First observedcalculate_business_hours
    • First observedcalculate_duration
    • First observedconvert_timezone
    • First observeddays_until
    • First observedformat_time
    • First observedget_business_days
    • First observedget_current_time
    • First observedget_server_info
    • First observednext_occurrence
    • First observedsubtract_time

TDQS

A3.6/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: add_time and subtract_time are complementary duration operations, calculate_business_hours and get_business_days target different business time calculations, and other tools like convert_timezone, days_until, and next_occurrence address unique time-related tasks. The descriptions make it easy to differentiate between tools like calculate_duration (generic duration) and calculate_business_hours (business-specific).

Naming Consistency5/5

All tools follow a consistent verb_noun naming pattern with snake_case throughout, such as add_time, calculate_duration, convert_timezone, and get_current_time. This uniformity makes the tool set predictable and easy to navigate, with no deviations in style or convention across the 11 tools.

Tool Count5/5

With 11 tools, the count is well-scoped for a time server, covering a comprehensive range of time calculations, conversions, and formatting without being overwhelming. Each tool earns its place by addressing specific time-related needs, from basic operations like add_time to more complex ones like next_occurrence, making the set appropriately sized for the domain.

Completeness5/5

The tool set provides complete coverage for time operations, including CRUD-like actions (add/subtract time), conversions (timezone), calculations (duration, business days/hours), formatting, and utilities (current time, server info). There are no obvious gaps; agents can handle a wide range of time-related workflows without dead ends, from simple date math to recurring event scheduling.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Gives large language models time awareness capabilities through various time-related functions including current time retrieval, timezone conversion, and relative time calculations.
    6
    1,823
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Provides comprehensive date, time, timezone, and calendar operations powered by Luxon, enabling AI agents to perform time calculations, timezone conversions, and temporal data handling across 400+ IANA timezones.
    2
    24
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides AI assistants with rich temporal intelligence including timezone conversions, 9 cultural calendars (Hebrew, Islamic, Chinese, etc.), astronomical events, Islamic prayer times, and context-aware activity appropriateness recommendations.
    3
    74
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides tools for date-time manipulation, including timezone conversion and arithmetic operations like adding or subtracting time units. It also enables users to retrieve current date, time, and timezone information.
    3
    43
    ISC

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