{
  "server": {
    "name": "timer.ly",
    "version": "1.0.0",
    "protocolVersion": "2024-11-05"
  },
  "transport": "streamable-http",
  "transports": [
    "streamable-http",
    "http+jsonrpc"
  ],
  "endpoint": "https://www.timer.ly/api/mcp",
  "description": "timer.ly MCP server. POST JSON-RPC 2.0 requests to this URL. Send `Accept: text/event-stream` to opt in to SSE streaming responses. Methods: initialize, tools/list, tools/call, ping. No auth.",
  "capabilities": {
    "tools": {
      "listChanged": false
    },
    "streaming": true
  },
  "auth": {
    "type": "none"
  },
  "tools": [
    {
      "name": "build_duration_url",
      "description": "Build a timer.ly countdown URL for a duration. Combine days, hours, minutes, and seconds (at least one must be > 0). Returns a shareable URL the recipient can open to see a live countdown that reaches zero.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "days": {
            "type": "integer",
            "minimum": 0,
            "description": "Whole days (0–3650)."
          },
          "hours": {
            "type": "integer",
            "minimum": 0,
            "description": "Whole hours."
          },
          "minutes": {
            "type": "integer",
            "minimum": 0,
            "description": "Whole minutes."
          },
          "seconds": {
            "type": "integer",
            "minimum": 0,
            "description": "Whole seconds."
          },
          "locale": {
            "type": "string",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it"
            ],
            "description": "Output locale for the URL prefix (default en)."
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "build_target_url",
      "description": "Build a countdown URL to a future instant. Accepts ISO 8601 with timezone (`2026-12-25T15:00:00Z`, `2026-12-25T15:00-05:00`, `2026-12-25T15:00-pst`) or date-only (`2026-12-25`). Returns a shareable URL.",
      "inputSchema": {
        "type": "object",
        "required": [
          "iso"
        ],
        "properties": {
          "iso": {
            "type": "string",
            "description": "ISO 8601 date or datetime. Accepts trailing tz suffix (e.g. -pst, -cet)."
          },
          "locale": {
            "type": "string",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it"
            ]
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "build_since_url",
      "description": "Build a count-up URL from a past instant. Same ISO grammar as build_target_url, but the past date must be within the last 100 years. Returns a URL that shows \"time elapsed since\".",
      "inputSchema": {
        "type": "object",
        "required": [
          "iso"
        ],
        "properties": {
          "iso": {
            "type": "string"
          },
          "locale": {
            "type": "string",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it"
            ]
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "build_event_url",
      "description": "Build a countdown URL for a curated event (christmas, new_year, easter, summer_solstice, winter_solstice). Returns the canonical locale-aware URL plus the next occurrence date. Use list_curated_events to enumerate.",
      "inputSchema": {
        "type": "object",
        "required": [
          "event"
        ],
        "properties": {
          "event": {
            "type": "string",
            "enum": [
              "christmas",
              "new_year",
              "easter",
              "summer_solstice",
              "winter_solstice"
            ],
            "description": "Event id. Hyphenated forms (new-year, summer-solstice) are also accepted."
          },
          "locale": {
            "type": "string",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it"
            ]
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "list_curated_events",
      "description": "List the curated cross-locale events that timer.ly knows about, with each one's next-occurrence date and the locale-specific URL. Use to enumerate the catalog before calling build_event_url.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "locale": {
            "type": "string",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it"
            ]
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "list_holidays",
      "description": "List national / bank / federal holidays for a country in a date range. Each entry includes a stable slug and the canonical /to/{slug} URL. Defaults: next 12 months from today.",
      "inputSchema": {
        "type": "object",
        "required": [
          "country"
        ],
        "properties": {
          "country": {
            "type": "string",
            "enum": [
              "uk",
              "us",
              "de",
              "fr",
              "es",
              "it"
            ]
          },
          "from": {
            "type": "string",
            "description": "ISO date YYYY-MM-DD (inclusive). Default: today."
          },
          "to": {
            "type": "string",
            "description": "ISO date YYYY-MM-DD (inclusive). Default: today + 365 days."
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "parse_countdown_url",
      "description": "Reverse-parse a timer.ly URL. Identifies the countdown kind (duration / target / since / event) and returns the encoded payload. Useful for round-tripping URLs an agent has previously generated or received.",
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    }
  ],
  "serverCard": "https://www.timer.ly/.well-known/mcp/server-card.json"
}