chuk-mcp-time
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@chuk-mcp-timewhat's the current time in Tokyo with high accuracy?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
chuk-mcp-time
High-accuracy time + timezone MCP server using NTP consensus & IANA tzdata
A Model Context Protocol (MCP) server that provides extremely accurate time information by querying multiple NTP servers, removing outliers, and computing a consensus time independent of the system clock. Now includes comprehensive timezone support using IANA tzdata for accurate timezone conversions, DST handling, and timezone discovery. Perfect for applications requiring trusted time sources, timezone conversions, detecting clock drift, or working in distributed systems.
This is a demonstration project provided as-is for learning and testing purposes.
Features
🎯 Multi-Source Consensus: Queries 4-7 NTP servers simultaneously and computes consensus time using median with outlier rejection
⚡ Async-First: Built on asyncio for maximum performance with concurrent NTP queries
⏱️ Latency Compensation: Automatically adjusts timestamps for query duration so returned time represents "now"
🔒 Type-Safe: 100% Pydantic models with full type hints and validation using enums
🌍 IANA Timezone Support: Complete timezone handling with DST, conversions, and discovery
🔍 Clock Drift Detection: Compare system clock against trusted NTP sources
⏰ Timezone Conversions: Convert between any IANA timezones with accurate DST handling
🗺️ Timezone Discovery: List and search 600+ IANA timezones to prevent hallucination
📊 Transparent: Returns all source data, consensus method, error estimates, and query duration
⚙️ Configurable: Environment-based configuration for NTP servers and consensus parameters
🚀 Deployment Examples: Docker support, GitHub Actions CI/CD, Fly.io deployment
🌐 Public Endpoint: Try instantly at https://time.chukai.io/mcp - no installation needed!
Related MCP server: GetUTC MCP Server
Quick Start
🌐 Use the Public HTTP Endpoint (No Installation)
Try it instantly with our hosted MCP server:
Endpoint: https://time.chukai.io/mcp
Configure in Claude Desktop or any MCP client to connect to the HTTP streamable endpoint. No installation required!
📦 Installation Options
Using uvx (recommended for local use)
# Run directly with uvx (auto-installs and runs)
uvx chuk-mcp-time
# For STDIO mode (Claude Desktop, mcp-cli)
uvx chuk-mcp-time
# For HTTP mode
uvx chuk-mcp-time httpUsing pip
pip install chuk-mcp-timeFrom source
# Clone the repository
git clone <repository-url>
cd chuk-mcp-time
make dev-installDemo
See the server in action with a comprehensive demo:
# Run the demo script
uv run examples/demo.py
# Or with Python
python examples/demo.pyThe demo shows:
✅ Querying 4 NTP servers with consensus
✅ System clock drift detection (detects ±millisecond accuracy)
✅ Timezone conversions (6 timezones from single consensus)
✅ Stability across 5 samples
Example output:
📊 Results:
Consensus Time (UTC).................... 2025-11-28T10:04:59.916227+00:00
Sources Used............................ 4/4
Estimated Error......................... ±10.0 ms
Query Time.............................. 42.8 ms
🕐 Clock Comparison:
Delta................................... +2.4 ms
Status.................................. ✅ OK - System clock is accurateSee examples/README.md for detailed demo documentation.
Usage with MCP Clients
Option 1: Public HTTP Endpoint (Easiest)
Connect to our hosted server at https://time.chukai.io/mcp
Claude Desktop Configuration:
Add to your claude_desktop_config.json:
{
"mcpServers": {
"time": {
"url": "https://time.chukai.io/mcp"
}
}
}✅ No installation required ✅ Always up to date ✅ High availability
Option 2: Local STDIO (Most Common)
Run locally using uvx for STDIO transport (works with Claude Desktop, mcp-cli, etc.):
Claude Desktop Configuration:
{
"mcpServers": {
"time": {
"command": "uvx",
"args": ["chuk-mcp-time"]
}
}
}Or run manually:
# Run with uvx
uvx chuk-mcp-time
# Or with Python
python -m chuk_mcp_time.serverOption 3: Local HTTP Server
Run your own HTTP server for testing/development:
# Start HTTP server
uvx chuk-mcp-time http
# Or with Python
python -m chuk_mcp_time.server http
# Server runs on http://localhost:8000Claude Desktop Configuration:
{
"mcpServers": {
"time": {
"url": "http://localhost:8000/mcp"
}
}
}Available Tools
1. get_time_utc
Get current UTC time with high accuracy using NTP consensus.
Parameters:
mode(optional):"fast"(default, 4 servers) or"accurate"(7 servers)compensate_latency(optional):true(default) to adjust timestamp for query duration
Returns:
{
"iso8601_time": "2025-11-28T01:23:45.123456+00:00",
"epoch_ms": 1732756425123,
"sources_used": 4,
"total_sources": 4,
"consensus_method": "median_with_outlier_rejection",
"estimated_error_ms": 12.5,
"source_samples": [...],
"warnings": ["Applied +150.2ms latency compensation to timestamp"],
"system_time": "2025-11-28T01:23:49.456789+00:00",
"system_delta_ms": 4333.333,
"query_duration_ms": 150.2,
"latency_compensated": true
}Latency Compensation: By default, the timestamp is adjusted to account for the time spent querying NTP servers. This means the returned timestamp represents "now" (when the response is sent), not when the NTP queries started. This is especially important for slow networks or accurate mode.
2. get_time_for_timezone
Get current time for a specific timezone with high accuracy.
Parameters:
timezone_name: IANA timezone name (e.g.,"America/New_York","Europe/London")mode(optional):"fast"or"accurate"compensate_latency(optional):true(default) to adjust timestamp for query duration
Returns:
Same as get_time_utc plus:
{
"timezone": "America/New_York",
"local_time": "2025-11-27T20:23:45.123456-05:00"
}3. get_local_time
Get current time for a specific IANA timezone with high accuracy.
Uses NTP consensus for accurate UTC time, then converts to the requested timezone using IANA tzdata. Provides authoritative local time independent of system clock.
Parameters:
timezone: IANA timezone identifier (e.g.,"America/New_York","Europe/London","Asia/Tokyo")mode(optional):"fast"or"accurate"compensate_latency(optional):true(default) to adjust timestamp for query duration
Returns:
{
"local_datetime": "2025-11-27T20:23:45.123456-05:00",
"timezone": "America/New_York",
"utc_offset_seconds": -18000,
"is_dst": false,
"abbreviation": "EST",
"source_utc": "2025-11-28T01:23:45.123456+00:00",
"tzdata_version": "2024b",
"estimated_error_ms": 12.5
}4. convert_time
Convert a datetime from one timezone to another using IANA rules.
Performs timezone conversion independent of system clock. Uses IANA tzdata to handle all DST transitions, historical changes, and political boundaries.
Parameters:
datetime_str: ISO 8601 datetime string (naive, will be interpreted in from_timezone)from_timezone: Source IANA timezone identifierto_timezone: Target IANA timezone identifier
Returns:
{
"from_timezone": "America/New_York",
"from_datetime": "2025-06-15T14:30:00-04:00",
"from_utc_offset_seconds": -14400,
"to_timezone": "Europe/London",
"to_datetime": "2025-06-15T19:30:00+01:00",
"to_utc_offset_seconds": 3600,
"offset_difference_seconds": 18000,
"explanation": "Europe/London is 5.0 hours ahead of America/New_York (UTC-4.0 → UTC+1.0)"
}5. list_timezones
List available IANA timezones with optional filtering.
Returns all valid IANA timezone identifiers. Helps discover correct timezone names and prevents hallucination of invalid timezones.
Parameters:
country_code(optional): ISO 3166 country code filter (e.g.,"US","GB","FR")search(optional): Substring search filter (case-insensitive)
Returns:
{
"timezones": [
{
"id": "America/New_York",
"country_code": "US",
"comment": null,
"example_city": "New York"
},
{
"id": "Europe/London",
"country_code": "GB",
"comment": null,
"example_city": "London"
}
],
"total_count": 2,
"tzdata_version": "2024b"
}Example searches:
search: "New"→ Returns all timezones with "New" in the namesearch: "Tokyo"→ Returns Asia/TokyoNo filters → Returns all 600+ IANA timezones
6. get_timezone_info
Get detailed information about a timezone including upcoming transitions.
Provides comprehensive timezone metadata including current offset, DST status, and upcoming transitions (e.g., DST changes). Useful for planning and understanding timezone behavior.
Parameters:
timezone: IANA timezone identifiermode(optional):"fast"or"accurate"(affects accuracy of current time)
Returns:
{
"timezone": "America/New_York",
"country_code": null,
"comment": null,
"current_offset_seconds": -18000,
"current_is_dst": false,
"current_abbreviation": "EST",
"transitions": [
{
"from_datetime": "2026-03-08T07:00:00+00:00",
"utc_offset_seconds": -14400,
"is_dst": true,
"abbreviation": "EDT"
},
{
"from_datetime": "2026-11-01T06:00:00+00:00",
"utc_offset_seconds": -18000,
"is_dst": false,
"abbreviation": "EST"
}
],
"tzdata_version": "2024b"
}7. compare_system_clock
Compare system clock against trusted NTP sources to detect drift.
Parameters:
mode(optional):"fast"or"accurate"
Returns:
{
"system_time": "2025-11-28T01:23:49.456789+00:00",
"trusted_time": "2025-11-28T01:23:45.123456+00:00",
"delta_ms": 4333.333,
"estimated_error_ms": 12.5,
"status": "error"
}Status values:
"ok": Delta < 100ms"drift": Delta 100-1000ms"error": Delta > 1000ms
Configuration
Configuration can be set via environment variables or .env file:
# NTP Servers (comma-separated)
TIME_SERVER_NTP_SERVERS=time.cloudflare.com,time.google.com,time.apple.com
# NTP timeout in seconds (0.5 to 10.0)
TIME_SERVER_NTP_TIMEOUT=2.0
# Maximum outlier deviation in milliseconds (100.0 to 60000.0)
TIME_SERVER_MAX_OUTLIER_DEVIATION_MS=5000.0
# Minimum number of sources required (1 to 10)
TIME_SERVER_MIN_SOURCES=3
# Maximum disagreement before warning in milliseconds (10.0 to 5000.0)
TIME_SERVER_MAX_DISAGREEMENT_MS=250.0
# Number of servers to query in fast mode (2 to 10)
TIME_SERVER_FAST_MODE_SERVER_COUNT=4See .env.example for complete configuration template.
How It Works
Consensus Algorithm
Query Multiple Sources: Queries 4-7 NTP servers concurrently based on mode
RTT Adjustment: Adjusts timestamps by adding half the round-trip time
Outlier Removal: Iteratively removes outliers > 5 seconds from median
Median Consensus: Computes median of remaining timestamps
Error Estimation: Calculates IQR (interquartile range) as error estimate
Latency Compensation: Adds query duration to timestamp so result represents "now"
System Comparison: Compares consensus against system clock
Latency Compensation
The server tracks how long it takes to query NTP servers and compute consensus (typically 100-500ms). By default, this duration is added to the consensus timestamp, so the returned time represents when the response is sent, not when queries began.
Example:
Query starts at T+0ms
NTP consensus computed at T+150ms → timestamp = 12:00:00.000
Latency compensation: 12:00:00.000 + 150ms = 12:00:00.150
Response sent at T+150ms with timestamp 12:00:00.150
This ensures the timestamp is as accurate as possible when received by the caller. You can disable this with compensate_latency=false if you prefer the raw consensus timestamp.
Timezone Support
The server uses Python's zoneinfo module with IANA tzdata for authoritative timezone information:
IANA tzdata Source: Uses official IANA Time Zone Database (maintained by IANA, curated by global experts)
DST Handling: Automatic daylight saving time transitions using historical and future rules
Political Boundaries: Handles all timezone changes, country boundaries, and historical adjustments
Transition Detection: Identifies upcoming DST changes and offset modifications
No System Clock Dependency: All timezone conversions use NTP consensus time, not system clock
Timezone Data Hierarchy:
UTC Authority: NTP consensus (time.google.com, time.cloudflare.com, etc.)
Political Time: IANA tzdata (official timezone database)
Local Conversion: Python's
zoneinfomoduleResult: Accurate local time independent of system clock
Default NTP Servers
time.cloudflare.com- Cloudflare's anycast NTPtime.google.com- Google's public NTPtime.apple.com- Apple's NTP servers0-3.pool.ntp.org- NTP Pool Project servers
All servers are stratum 1-2 for maximum accuracy.
Development
Setup
# Clone repository
git clone <repository-url>
cd chuk-mcp-time
# Install development dependencies
make dev-installTesting
# Run tests (skip network tests)
make test
# Run tests with coverage
make test-cov
# Run all tests including network tests
pytest -v
# Run specific test
pytest tests/test_consensus.py -vCode Quality
# Run linter
make lint
# Auto-format code
make format
# Type checking
make typecheck
# Security checks
make security
# Run all checks
make checkBuilding
# Build distribution packages
uv build
# Build Docker image
make docker-build
# Run Docker container
make docker-runDeployment
Fly.io
# Deploy to Fly.io
flyctl deploy
# Or use GitHub Actions (push to main branch)
git push origin mainDocker
# Build image
docker build -t chuk-mcp-time .
# Run container
docker run -p 8000:8000 chuk-mcp-time
# With custom config
docker run -p 8000:8000 \
-e TIME_SERVER_NTP_TIMEOUT=5.0 \
-e TIME_SERVER_MIN_SOURCES=5 \
chuk-mcp-timeArchitecture
chuk-mcp-time/
├── src/chuk_mcp_time/
│ ├── __init__.py
│ ├── config.py # Pydantic Settings configuration
│ ├── models.py # Pydantic models (enums, responses)
│ ├── ntp_client.py # Async NTP client
│ ├── consensus.py # Consensus algorithm engine
│ ├── timezone_utils.py # IANA timezone utilities
│ └── server.py # MCP server with 7 tools
├── tests/
│ ├── test_config.py
│ ├── test_consensus.py
│ ├── test_ntp_client.py
│ └── test_server_tools.py
├── pyproject.toml
├── Makefile
├── Dockerfile
├── fly.toml
└── README.mdUse Cases
1. Detecting Clock Drift
# Use compare_system_clock to monitor clock health
response = await compare_system_clock(mode="accurate")
if response.status == "error":
print(f"⚠️ System clock is off by {response.delta_ms:.1f}ms!")
# Take corrective action...2. Trusted Timestamps for Logs
# Get consensus time for reliable logging
time_info = await get_time_utc(mode="fast")
log_entry = {
"event": "user_login",
"timestamp": time_info.iso8601_time,
"source_count": time_info.sources_used,
"error_ms": time_info.estimated_error_ms
}3. Timezone Conversions for Scheduling
# Convert meeting time between timezones
result = await convert_time(
datetime_str="2025-12-15T14:00:00",
from_timezone="America/New_York",
to_timezone="Asia/Tokyo"
)
print(result.explanation)
# "Asia/Tokyo is 14.0 hours ahead of America/New_York (UTC-5.0 → UTC+9.0)"
print(f"Meeting time in Tokyo: {result.to_datetime}")
# "2025-12-16T04:00:00+09:00"4. Multi-Region Time Coordination
# Get accurate local time for different regions
ny_time = await get_local_time("America/New_York")
london_time = await get_local_time("Europe/London")
tokyo_time = await get_local_time("Asia/Tokyo")
# All from the same NTP consensus - guaranteed consistency
# Each includes DST status, offset, and abbreviation
print(f"NY: {ny_time.local_datetime} ({ny_time.abbreviation})")
print(f"London: {london_time.local_datetime} ({london_time.abbreviation})")
print(f"Tokyo: {tokyo_time.local_datetime} ({tokyo_time.abbreviation})")5. Discovering Valid Timezones
# Search for timezones to avoid hallucination
timezones = await list_timezones(search="New")
for tz in timezones.timezones:
print(f"{tz.id} - {tz.example_city}")
# America/New_York - New York
# America/North_Dakota/New_Salem - New Salem
# ...6. Planning Around DST Transitions
# Get upcoming DST transitions
info = await get_timezone_info("America/New_York")
print(f"Current: {info.current_abbreviation} (DST: {info.current_is_dst})")
print(f"Upcoming transitions:")
for transition in info.transitions:
print(f" {transition.from_datetime}: {transition.abbreviation} (DST: {transition.is_dst})")7. Financial/Trading Applications
# High-accuracy mode for financial operations
time_info = await get_time_utc(mode="accurate")
if time_info.estimated_error_ms < 20:
# Error < 20ms, safe to use for timestamp-sensitive operations
execute_trade(timestamp=time_info.epoch_ms)
else:
# Too much uncertainty, defer or use alternative timing
log_warning("Time uncertainty too high", error_ms=time_info.estimated_error_ms)Why Use This Over System Time?
Problems with System Clocks
Drift: System clocks drift over time (typically 10-50 ppm)
Virtualization: VMs can have severe time skew
Containers: Docker containers inherit host clock issues
Development: Dev machines often have incorrect time
Distributed Systems: Hard to trust time across multiple hosts
This Solution Provides
Independent Verification: Multiple external sources
Outlier Detection: Automatic removal of bad sources
Transparency: See all source data and warnings
Error Bounds: Know the accuracy of the time
Auditability: Full data for debugging time issues
Performance
Fast Mode: ~40-150ms (queries 4 servers)
Accurate Mode: ~100-300ms (queries 7 servers)
Typical Accuracy: ±10-50ms (much better than system clock drift)
Throughput: Limited by NTP query rate (recommend caching for high-frequency use)
Latency Breakdown
NTP queries (concurrent): 20-100ms per server
Consensus calculation: <1ms
Latency compensation: Automatically added to timestamp
Total round-trip: 40-300ms depending on mode and network
Limitations
Network Required: Requires internet access to NTP servers
Latency: 100-500ms per query (not suitable for microsecond precision)
Rate Limiting: Don't query too frequently (respect NTP pool guidelines)
Accuracy: ±10-50ms typical (good enough for most applications, not atomic clock precision)
Contributing
Contributions welcome! Please:
Fork the repository
Create a feature branch
Make your changes with tests
Run
make checkto ensure qualitySubmit a pull request
License
Apache License 2.0 - See LICENSE for details.
Credits
Built with:
chuk-mcp-server - High-performance MCP server framework
Pydantic - Data validation using Python type hints
NTP Pool Project servers
Available Tools
7 toolscompare_system_clockA
Compare system clock against trusted NTP time sources.
Useful for detecting system clock drift or misconfiguration. Queries NTP
servers and reports the difference between system time and consensus time.
Args:
mode: Accuracy mode - "fast" or "accurate"
Returns:
ClockComparisonResponse with comparison data
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | fast |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description effectively discloses behavior: it queries NTP servers and reports the difference. It also explains the 'mode' parameter. However, it could be more explicit about side effects (none expected) or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences plus Args/Returns. It is front-loaded with the main purpose and avoids any unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple, the description lacks details about the output structure (only mentions 'ClockComparisonResponse'). With no output schema, the description could be more explicit about what the response contains (e.g., offset, timestamp).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the single parameter 'mode' as 'Accuracy mode - fast or accurate', adding meaning beyond the schema. However, it does not detail the difference between the two values, which could be helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: comparing system clock against NTP time sources. It uses specific verb 'Compare' and resource 'system clock', distinguishing it from sibling tools like 'get_local_time' or 'convert_time'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case: 'detecting system clock drift or misconfiguration'. It does not explicitly mention when not to use or compare with alternatives, but the context is clear given the sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_timeA
Convert a datetime from one timezone to another using IANA rules.
Performs timezone conversion independent of system clock. Uses IANA tzdata
to handle all DST transitions, historical changes, and political boundaries.
Args:
datetime_str: ISO 8601 datetime string (naive, will be interpreted in from_timezone)
from_timezone: Source IANA timezone identifier
to_timezone: Target IANA timezone identifier
Returns:
TimezoneConversionResponse with conversion details and explanation
| Name | Required | Description | Default |
|---|---|---|---|
| datetime_str | Yes | ||
| from_timezone | Yes | ||
| to_timezone | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully explains behavior: independent of system clock, uses IANA tzdata for DST/historical/political changes, and how naive datetimes are interpreted. This is comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with paragraphs, explicit Args/Returns sections, and no unnecessary text. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 3 required parameters, the description covers input semantics, behavioral nuance (DST, naive handling), and return type (TimezoneConversionResponse with details). It is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaning for all three parameters: datetime_str is naive ISO 8601, from_timezone and to_timezone are IANA identifiers. This compensates fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts datetime between timezones using IANA rules. It distinguishes from siblings like get_local_time or list_timezones by specifying conversion with DST handling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions independence from system clock and use of IANA tzdata, giving context for when to use it. However, it does not explicitly state when not to use it or compare with alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_local_timeA
Get current time for a specific IANA timezone with high accuracy.
Uses NTP consensus for accurate UTC time, then converts to the requested
timezone using IANA tzdata. This provides authoritative local time independent
of system clock accuracy.
Args:
timezone: IANA timezone identifier (e.g., "America/New_York", "Europe/London")
mode: Accuracy mode - "fast" or "accurate"
compensate_latency: If True, add query duration to timestamp (default: True)
Returns:
LocalTimeResponse with local time and timezone metadata
| Name | Required | Description | Default |
|---|---|---|---|
| timezone | Yes | ||
| mode | No | fast | |
| compensate_latency | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides good behavioral context: it mentions using NTP consensus for accuracy, conversion from UTC, and parameter effects. However, it does not explicitly state that the operation is read-only or non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections for description, parameter args, and returns. The information is front-loaded but the description is slightly verbose; each sentence is earned though.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters and no output schema, the description covers usage but misses contextual cues like limitations (e.g., NTP dependency, internet requirement) or comparison with sibling tools. It mentions return type but no structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% parameter description coverage, but the description explains each parameter: timezone format, mode options (fast/accurate), and compensate_latency effect. However, 'mode' lacks details on what 'fast' versus 'accurate' entails.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool gets current time for a specific IANA timezone with high accuracy. However, it does not distinguish from sibling tool 'get_time_for_timezone', which likely has a similar purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'get_time_for_timezone', 'get_time_utc', or 'convert_time'. The description implies use for high-accuracy local time but does not explicitly state when other tools might be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_time_for_timezoneA
Get current time for a specific timezone with high accuracy.
Queries multiple NTP servers for accurate UTC time, then converts to the
requested timezone. Includes all consensus metadata and source details.
Args:
timezone_name: IANA timezone name (e.g., "America/New_York")
mode: Accuracy mode - "fast" or "accurate"
compensate_latency: If True, add query duration to timestamp (default: True)
Returns:
TimezoneResponse with time in specified timezone
| Name | Required | Description | Default |
|---|---|---|---|
| timezone_name | Yes | ||
| mode | No | fast | |
| compensate_latency | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It reveals that it queries multiple NTP servers for accurate UTC, includes consensus metadata and source details, and mentions latency compensation. However, it omits potential caveats like network dependency or rate limits, but for a time tool, this is fairly comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary line, followed by detailed explanation and a docstring-style Args/Returns section. It is concise with no redundant information, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description mentions the return type (TimezoneResponse) but does not detail its fields. The tool's complexity is moderate, and the description covers the method and parameters adequately, but a fuller description of the response structure would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description provides full parameter explanations: timezone_name with IANA example, mode with options ('fast' or 'accurate'), and compensate_latency with its effect. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets the current time for a specific timezone with high accuracy, distinguishing it from siblings like get_time_utc (UTC) and convert_time (conversion). The verb 'Get' and resource 'time for a specific timezone' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but does not explicitly guide when to use it over alternatives. While the purpose implies its usage, there are no explicit 'when-to-use' or 'when-not-to-use' statements referencing sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_time_utcA
Get current UTC time with high accuracy using NTP consensus.
Queries multiple NTP servers, removes outliers, and computes a consensus time
that is independent of the system clock. Returns detailed information about
all sources, consensus method, and estimated error.
By default, the returned timestamp is compensated for the time it took to
query NTP servers and compute consensus. This means the timestamp represents
the time when the response is returned, not when NTP servers were queried.
Args:
mode: Accuracy mode - "fast" uses 3-4 servers, "accurate" uses 7 servers
compensate_latency: If True, add query duration to timestamp (default: True)
Returns:
TimeResponse with consensus time and metadata
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | fast | |
| compensate_latency | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details NTP queries, outlier removal, consensus computation, and latency compensation. Lacks mention of network dependencies or failure modes, but overall transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise, front-loaded with purpose, followed by method, parameters, and returns. No redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description mentions return type (TimeResponse with metadata) but not specific fields. Adequate for simple tool, but could detail error handling or output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, description compensates well by explaining 'mode' (fast vs accurate) and 'compensate_latency' boolean. Adds meaning beyond schema defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets current UTC time using NTP consensus, distinguishing it from siblings like get_local_time or get_time_for_timezone. The verb and resource are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the method and parameters but does not explicitly state when to use this tool over alternatives or when not to use it. Lacks comparisons to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timezone_infoA
Get detailed information about a timezone including upcoming transitions.
Provides comprehensive timezone metadata including current offset, DST status,
and upcoming transitions (e.g., DST changes). Useful for planning and
understanding timezone behavior.
Args:
timezone: IANA timezone identifier
mode: Accuracy mode for getting current time - "fast" or "accurate"
Returns:
TimezoneDetailResponse with current info and transition schedule
| Name | Required | Description | Default |
|---|---|---|---|
| timezone | Yes | ||
| mode | No | fast |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the tool's behavior: it returns current offset, DST status, and upcoming transitions. It describes the mode parameter's effect on accuracy. However, it does not mention error handling or if the tool is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an overview, args section, and returns. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations or output schema, the description covers the tool's purpose, parameters, and return type adequately. It could mention that the tool is safe/read-only, but overall it is complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description explains both parameters: timezone as 'IANA timezone identifier' and mode as 'Accuracy mode ... fast or accurate', adding meaningful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides detailed timezone information including upcoming transitions, distinguishing it from siblings like 'get_time_for_timezone' or 'list_timezones'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions it is 'useful for planning and understanding timezone behavior' but does not explicitly state when to use this tool vs alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_timezonesA
List available IANA timezones with optional filtering.
Returns all valid IANA timezone identifiers. Helps discover correct timezone
names and prevents hallucination of invalid timezones.
Args:
country_code: Optional ISO 3166 country code filter (e.g., "US", "GB", "FR")
search: Optional substring search filter (case-insensitive)
Returns:
ListTimezonesResponse with list of timezones and metadata
| Name | Required | Description | Default |
|---|---|---|---|
| country_code | No | ||
| search | No |
TDQS
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 returns 'all valid IANA timezone identifiers' and mentions optional filters, but lacks details on rate limits, auth, or potential side effects. The return type is mentioned but not detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a few sentences and a clear bullet-like list for parameters. Every sentence adds value, and there is no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two optional parameters and no output schema, the description covers purpose, filtering, and return type. It could mention that no filters return all timezones, but it is still fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, but the description's Args section adds meaning: country_code is 'optional ISO 3166 country code filter' and search is 'optional substring search filter (case-insensitive).' This compensates well, though format details for country_code are absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List available IANA timezones with optional filtering,' using a specific verb and resource. It distinguishes itself from sibling tools like get_local_time or convert_time by focusing on listing identifiers rather than getting times.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Helps discover correct timezone names and prevents hallucination of invalid timezones,' indicating when to use it. However, it does not mention when not to use or provide explicit alternatives, though sibling tools are different in purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools are distinct, but get_local_time and get_time_for_timezone have overlapping purposes: both return current time for a timezone with the same parameters. This could confuse an agent about which to use.
All tool names use consistent snake_case and follow a verb_noun pattern (e.g., get_local_time, convert_time, list_timezones). No mixed conventions.
7 tools is a well-scoped set for a time utility server, covering essential operations without unnecessary bloat.
Covers core time functions: UTC time, local time, timezone conversion, listing timezones, and system clock comparison. Minor redundancy (two local time tools) but no obvious gaps.
Maintenance
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
A real clock for AI agents: current time, timezone conversion, and DST facts from the IANA tzdb.
A time server that keeps your AI honest about time. Real clock + drift guard, zero dependencies.
Deterministic time tools for AI agents: timezone conversion, business-day math, cron interpretation.
Clockchain®: neutral verified network time for AI agents (get_time). Testnet.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides accurate time information from Network Time Protocol (NTP) servers with timezone support and security filtering. Features whitelist-based server approval, blocks unauthorized sources, and delivers structured time output with fallback mechanisms.MIT
- AlicenseNot gradedqualityDmaintenanceProvides accurate UTC time by aggregating and verifying data from multiple reliable sources like WorldClockAPI, Google, and GitHub. It enables users to retrieve time in various formats including ISO, Unix timestamps, and human-readable strings with automatic source fallback for reliability.1MIT
- FlicenseBqualityDmaintenanceProvides current time and timezone conversion using IANA timezone names, with automatic system timezone detection.2
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server providing current time retrieval and timezone conversion using IANA timezones.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/IBM/chuk-mcp-time'
If you have feedback or need assistance with the MCP directory API, please join our Discord server