{"openapi":"3.1.0","info":{"title":"timezone-convert","version":"0.1.0","description":"Converts a local time in one IANA zone to up to 20 target zones. Returns local time, UTC offset, abbreviation and DST flag per target, and flags nonexistent or ambiguous local times at DST transitions.; Returns a zone's current UTC offset and abbreviation, whether it observes DST, standard and DST offsets, and the exact DST transition instants for a year.; Finds the working-hours overlap of 2-10 zones on a date. Returns the overlap window in UTC and in each zone's local time, plus each zone's working window. Default hours 09:00-17:00.","x-guidance":"Timezone Convert uses IANA tzdata. `convert_time` converts one local time to up to 20 zones with offset, abbreviation and DST flag, and explicitly flags nonexistent (spring-forward) and ambiguous (fall-back) times. `zone_info` returns a zone's current offset, DST rules and transition instants for a year. `overlap_hours` finds shared working hours across 2-10 zones. Unknown zones return close-match suggestions. Deterministic, no LLM, no network. Tools: `convert_time`, `zone_info`, `overlap_hours`.","contact":{"email":"jeff@fosterinstruments.com"}},"servers":[{"url":"https://timezone-convert.x402supply.com"}],"paths":{"/mcp":{"post":{"operationId":"timezone-convert_call","summary":"Call timezone-convert via MCP tools/call","tags":["timezone-convert"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["jsonrpc","id","method","params"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number"]},"method":{"const":"tools/call"},"params":{"type":"object","required":["name","arguments"],"properties":{"name":{"const":"convert_time"},"arguments":{"type":"object","properties":{"time":{"type":"string","minLength":10,"maxLength":40,"description":"ISO 8601 (2026-03-08T02:30:00, optional Z or offset) or 'YYYY-MM-DD HH:mm'. Without an offset it is read as local time in `from`"},"from":{"type":"string","minLength":1,"maxLength":64,"description":"Source IANA zone, e.g. America/New_York"},"to":{"type":"string","minLength":1,"maxLength":1500,"description":"Comma-separated target IANA zones, 1-20, e.g. Europe/London,Asia/Kolkata"},"ambiguous":{"type":"string","enum":["earlier","later"],"description":"Which occurrence to use when the local time happens twice (fall-back). Default earlier (first, DST side)","default":"earlier"}},"required":["time","from","to"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}}},{"type":"object","required":["jsonrpc","id","method","params"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number"]},"method":{"const":"tools/call"},"params":{"type":"object","required":["name","arguments"],"properties":{"name":{"const":"zone_info"},"arguments":{"type":"object","properties":{"zone":{"type":"string","minLength":1,"maxLength":64,"description":"IANA zone, e.g. Australia/Sydney"},"year":{"type":"integer","minimum":1970,"maximum":2100,"description":"Year for transitions, 1970-2100. Default current year"}},"required":["zone"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}}},{"type":"object","required":["jsonrpc","id","method","params"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number"]},"method":{"const":"tools/call"},"params":{"type":"object","required":["name","arguments"],"properties":{"name":{"const":"overlap_hours"},"arguments":{"type":"object","properties":{"zones":{"type":"string","minLength":3,"maxLength":700,"description":"Comma-separated IANA zones, 2-10, e.g. America/New_York,Europe/London"},"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Calendar date YYYY-MM-DD, evaluated as that date in each zone"},"workStart":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Working day start HH:mm, default 09:00","default":"09:00"},"workEnd":{"type":"string","pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","description":"Working day end HH:mm, default 17:00. Must be after workStart","default":"17:00"}},"required":["zones","date"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}}}]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"JSON-RPC 2.0 response envelope. `result.content[0].text` is a JSON-encoded string matching the schema in `x-mcp-result-schema`.","properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number"]},"result":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"const":"text"},"text":{"type":"string"}}}}}}},"x-mcp-result-schema":{"type":"object","required":["input","from","instant","conversions","source"],"properties":{"input":{"type":"string"},"from":{"type":"object"},"instant":{"type":"string"},"conversions":{"type":"array","items":{"type":"object"}},"source":{"type":"array","items":{"type":"string"}}}}},{"type":"object","description":"JSON-RPC 2.0 response envelope. `result.content[0].text` is a JSON-encoded string matching the schema in `x-mcp-result-schema`.","properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number"]},"result":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"const":"text"},"text":{"type":"string"}}}}}}},"x-mcp-result-schema":{"type":"object","required":["zone","year","current","observesDst","transitions","source"],"properties":{"zone":{"type":"string"},"year":{"type":"integer"},"current":{"type":"object"},"observesDst":{"type":"boolean"},"transitions":{"type":"array","items":{"type":"object"}},"source":{"type":"array","items":{"type":"string"}}}}},{"type":"object","description":"JSON-RPC 2.0 response envelope. `result.content[0].text` is a JSON-encoded string matching the schema in `x-mcp-result-schema`.","properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number"]},"result":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"const":"text"},"text":{"type":"string"}}}}}}},"x-mcp-result-schema":{"type":"object","required":["date","workStart","workEnd","hasOverlap","overlapMinutes","zones","source"],"properties":{"date":{"type":"string"},"workStart":{"type":"string"},"workEnd":{"type":"string"},"hasOverlap":{"type":"boolean"},"overlapMinutes":{"type":"integer"},"overlap":{"type":["object","null"]},"zones":{"type":"array","items":{"type":"object"}},"source":{"type":"array","items":{"type":"string"}}}}}]}}}},"402":{"description":"Payment Required","content":{"application/json":{"schema":{"type":"object","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"accepts":{"type":"array"}}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005"},"protocols":[{"x402":{}}]}}},"/tools/convert_time":{"post":{"operationId":"timezone-convert_convert_time_http","summary":"Converts a local time in one IANA zone to up to 20 target zones. Returns local time, UTC offset, abbreviation and DST flag per target, and flags nonexistent or ambiguous local times at DST transitions.","tags":["timezone-convert"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"time":{"type":"string","minLength":10,"maxLength":40,"description":"ISO 8601 (2026-03-08T02:30:00, optional Z or offset) or 'YYYY-MM-DD HH:mm'. Without an offset it is read as local time in `from`"},"from":{"type":"string","minLength":1,"maxLength":64,"description":"Source IANA zone, e.g. America/New_York"},"to":{"type":"string","minLength":1,"maxLength":1500,"description":"Comma-separated target IANA zones, 1-20, e.g. Europe/London,Asia/Kolkata"},"ambiguous":{"type":"string","enum":["earlier","later"],"description":"Which occurrence to use when the local time happens twice (fall-back). Default earlier (first, DST side)","default":"earlier"}},"required":["time","from","to"],"additionalProperties":false},"example":{"time":"2026-03-08 02:30","from":"America/New_York","to":"UTC,Europe/London,Asia/Kolkata,Australia/Sydney"}}}},"responses":{"200":{"description":"Tool result (plain JSON, not MCP-wrapped)","content":{"application/json":{"schema":{"type":"object","required":["input","from","instant","conversions","source"],"properties":{"input":{"type":"string"},"from":{"type":"object"},"instant":{"type":"string"},"conversions":{"type":"array","items":{"type":"object"}},"source":{"type":"array","items":{"type":"string"}}}},"example":{"input":"2026-03-08 02:30","from":{"zone":"America/New_York","localTime":"2026-03-08T03:30:00-04:00","utcOffset":"-04:00","offsetMinutes":-240,"abbreviation":"EDT","isDst":true,"status":"nonexistent","requestedLocalTime":"2026-03-08 02:30","gapMinutes":60,"adjustment":"shifted_forward_by_gap"},"instant":"2026-03-08T07:30:00.000Z","conversions":[{"zone":"UTC","localTime":"2026-03-08T07:30:00+00:00","utcOffset":"+00:00","offsetMinutes":0,"abbreviation":"UTC","isDst":false,"dayOffset":0,"ambiguousLocalTime":false},{"zone":"Europe/London","localTime":"2026-03-08T07:30:00+00:00","utcOffset":"+00:00","offsetMinutes":0,"abbreviation":"GMT","isDst":false,"dayOffset":0,"ambiguousLocalTime":false},{"zone":"Asia/Kolkata","localTime":"2026-03-08T13:00:00+05:30","utcOffset":"+05:30","offsetMinutes":330,"abbreviation":"IST","isDst":false,"dayOffset":0,"ambiguousLocalTime":false},{"zone":"Australia/Sydney","localTime":"2026-03-08T18:30:00+11:00","utcOffset":"+11:00","offsetMinutes":660,"abbreviation":"AEDT","isDst":true,"dayOffset":0,"ambiguousLocalTime":false}],"warnings":["2026-03-08 02:30 does not exist in America/New_York: clocks skip forward 60 minutes at this time. Interpreted as the same wall time shifted forward by the gap (2026-03-08T03:30:00-04:00)."],"source":["https://www.iana.org/time-zones"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}},"402":{"description":"Payment Required","content":{"application/json":{"schema":{"type":"object","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"accepts":{"type":"array"}}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005"},"protocols":[{"x402":{}}]}}},"/tools/zone_info":{"post":{"operationId":"timezone-convert_zone_info_http","summary":"Returns a zone's current UTC offset and abbreviation, whether it observes DST, standard and DST offsets, and the exact DST transition instants for a year.","tags":["timezone-convert"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"zone":{"type":"string","minLength":1,"maxLength":64,"description":"IANA zone, e.g. Australia/Sydney"},"year":{"type":"integer","minimum":1970,"maximum":2100,"description":"Year for transitions, 1970-2100. Default current year"}},"required":["zone"],"additionalProperties":false},"example":{"zone":"America/New_York","year":2026}}}},"responses":{"200":{"description":"Tool result (plain JSON, not MCP-wrapped)","content":{"application/json":{"schema":{"type":"object","required":["zone","year","current","observesDst","transitions","source"],"properties":{"zone":{"type":"string"},"year":{"type":"integer"},"current":{"type":"object"},"observesDst":{"type":"boolean"},"transitions":{"type":"array","items":{"type":"object"}},"source":{"type":"array","items":{"type":"string"}}}},"example":{"zone":"America/New_York","year":2026,"current":{"zone":"America/New_York","localTime":"2026-10-09T13:49:16-04:00","utcOffset":"-04:00","offsetMinutes":-240,"abbreviation":"EDT","isDst":true,"at":"2026-10-09T17:49:16.307Z"},"observesDst":true,"standardOffset":"-05:00","dstOffset":"-04:00","dstRules":"2026-03-08T07:00:00.000Z: Clocks go forward 60 minutes: 02:00 becomes 03:00 local (EST to EDT). 2026-11-01T06:00:00.000Z: Clocks go back 60 minutes: 02:00 becomes 01:00 local (EDT to EST).","transitions":[{"instant":"2026-03-08T07:00:00.000Z","type":"dst_start","shiftMinutes":60,"before":{"utcOffset":"-05:00","abbreviation":"EST","isDst":false},"after":{"utcOffset":"-04:00","abbreviation":"EDT","isDst":true},"localTimeBefore":"2026-03-08T01:59:59-05:00","localTimeAfter":"2026-03-08T03:00:00-04:00","description":"Clocks go forward 60 minutes: 02:00 becomes 03:00 local (EST to EDT)."},{"instant":"2026-11-01T06:00:00.000Z","type":"dst_end","shiftMinutes":-60,"before":{"utcOffset":"-04:00","abbreviation":"EDT","isDst":true},"after":{"utcOffset":"-05:00","abbreviation":"EST","isDst":false},"localTimeBefore":"2026-11-01T01:59:59-04:00","localTimeAfter":"2026-11-01T01:00:00-05:00","description":"Clocks go back 60 minutes: 02:00 becomes 01:00 local (EDT to EST)."}],"source":["https://www.iana.org/time-zones"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}},"402":{"description":"Payment Required","content":{"application/json":{"schema":{"type":"object","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"accepts":{"type":"array"}}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005"},"protocols":[{"x402":{}}]}}},"/tools/overlap_hours":{"post":{"operationId":"timezone-convert_overlap_hours_http","summary":"Finds the working-hours overlap of 2-10 zones on a date. Returns the overlap window in UTC and in each zone's local time, plus each zone's working window. Default hours 09:00-17:00.","tags":["timezone-convert"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"zones":{"type":"string","minLength":3,"maxLength":700,"description":"Comma-separated IANA zones, 2-10, e.g. America/New_York,Europe/London"},"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Calendar date YYYY-MM-DD, evaluated as that date in each zone"},"workStart":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Working day start HH:mm, default 09:00","default":"09:00"},"workEnd":{"type":"string","pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","description":"Working day end HH:mm, default 17:00. Must be after workStart","default":"17:00"}},"required":["zones","date"],"additionalProperties":false},"example":{"zones":"America/New_York,Europe/London,Asia/Kolkata","date":"2026-10-09"}}}},"responses":{"200":{"description":"Tool result (plain JSON, not MCP-wrapped)","content":{"application/json":{"schema":{"type":"object","required":["date","workStart","workEnd","hasOverlap","overlapMinutes","zones","source"],"properties":{"date":{"type":"string"},"workStart":{"type":"string"},"workEnd":{"type":"string"},"hasOverlap":{"type":"boolean"},"overlapMinutes":{"type":"integer"},"overlap":{"type":["object","null"]},"zones":{"type":"array","items":{"type":"object"}},"source":{"type":"array","items":{"type":"string"}}}},"example":{"date":"2026-10-09","workStart":"09:00","workEnd":"17:00","hasOverlap":false,"overlapMinutes":0,"overlap":null,"zones":[{"zone":"America/New_York","utcOffset":"-04:00","abbreviation":"EDT","isDst":true,"workStart":"2026-10-09T09:00:00-04:00","workEnd":"2026-10-09T17:00:00-04:00","workStartUtc":"2026-10-09T13:00:00.000Z","workEndUtc":"2026-10-09T21:00:00.000Z","overlapStart":null,"overlapEnd":null},{"zone":"Europe/London","utcOffset":"+01:00","abbreviation":"BST","isDst":true,"workStart":"2026-10-09T09:00:00+01:00","workEnd":"2026-10-09T17:00:00+01:00","workStartUtc":"2026-10-09T08:00:00.000Z","workEndUtc":"2026-10-09T16:00:00.000Z","overlapStart":null,"overlapEnd":null},{"zone":"Asia/Kolkata","utcOffset":"+05:30","abbreviation":"IST","isDst":false,"workStart":"2026-10-09T09:00:00+05:30","workEnd":"2026-10-09T17:00:00+05:30","workStartUtc":"2026-10-09T03:30:00.000Z","workEndUtc":"2026-10-09T11:30:00.000Z","overlapStart":null,"overlapEnd":null}],"warnings":[],"source":["https://www.iana.org/time-zones"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}},"402":{"description":"Payment Required","content":{"application/json":{"schema":{"type":"object","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"accepts":{"type":"array"}}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005"},"protocols":[{"x402":{}}]}}}}}