temporal-mcp

Wall-clock awareness for LLM agents. Two tools: elapsed-time-between-turns + day rollover detection.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
80%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~345Tokens (tool definitions)
~1.3 KBTypical response size
Minimal attention impact (0.27% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "temporal-mcp": {
      "command": "uvx",
      "args": [
        "temporal-mcp"
      ]
    }
  }
}

Runnable packages

pypitemporal-mcp0.2.0stdio

Remote endpoints

https://temporal-mcp.dev/mcpstreamable-http

What it can do

Tool inventory

Tools (2)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪temporal_tick(thread_key, client_id, tz_offset_minutes, tz_name)

Advance the temporal clock for a thread and return a snapshot (now / prev / gap / day_rollover / fresh_thread). Call once per user turn. Pass a stable `thread_key` (e.g. the conversation ID) so gap deltas remain meaningful across page reloads.

Input Schema

{
  "type": "object",
  "properties": {
    "thread_key": {
      "type": "string",
      "description": "Stable thread identifier within this client. For claude.ai web use the conversation ID; for other MCP clients any caller-stable string. If omitted, falls back to the Mcp-Session-Id header."
    },
    "client_id": {
      "type": "string",
      "description": "Namespace tag (e.g. 'caweb', 'cursor'). Defaults to 'mcp'."
    },
    "tz_offset_minutes": {
      "type": "integer",
      "description": "Caller's UTC offset in minutes (e.g. -360 for MDT). Used for day_rollover detection and header formatting. Defaults to 0 (UTC) so day rollover is always honest even if the caller forgets to pass one."
    },
    "tz_name": {
      "type": "string",
      "description": "Display name for the timezone (e.g. 'MDT'). Cosmetic; appears in the rendered header."
    }
  }
}
🟢temporal_peek(thread_key, client_id, tz_offset_minutes, tz_name)

Read the current temporal snapshot for a thread WITHOUT advancing state. Use this when you want the gap delta but the call is not the canonical per-turn event.

Input Schema

{
  "type": "object",
  "properties": {
    "thread_key": {
      "type": "string"
    },
    "client_id": {
      "type": "string"
    },
    "tz_offset_minutes": {
      "type": "integer"
    },
    "tz_name": {
      "type": "string"
    }
  }
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded2 tools
verifiedversion not recorded2 tools
verifiedversion not recorded2 tools