{"name":"moltline-timeops","description":"Deterministic date/schedule math over MCP. Free: business_days, meeting_overlap, recurrence_expand. Premium (license): deadline_planner, sla_due. All dates ISO YYYY-MM-DD; times 24h HH:MM.","url":"https://mcp.moltlinestudio.com/timeops","transport":"streamable-http","homepage":"https://moltlinestudio.com/servers.html","serverInfo":{"name":"moltline-timeops","version":"1.1.0"},"toolCounts":{"total":5,"free":3,"premium":2},"protocolVersion":"2025-11-25","protocolVersions":["2024-11-05","2025-03-26","2025-06-18","2025-11-25"],"pricing":{"freeTier":{"tools":3,"price":"0","currency":"USD","description":"Free forever. No account, no registration and no credentials are required to call them."},"details":"https://moltlinestudio.com/.well-known/pricing","terms":"https://moltlinestudio.com/terms.html","agentPayment":{"protocol":"x402","resource":"https://moltlinestudio.com/api","network":"eip155:8453","asset":"USDC","amount":"19000000","discovery":"https://moltlinestudio.com/.well-known/x402","description":"GET or POST the resource to receive an HTTP 402 carrying a machine-readable payment demand; retry with the transaction hash in the X-PAYMENT header and the licence key is returned in the response."},"premium":{"tools":2,"plan":"All-Access","price":"19.00","currency":"USD","period":"month","description":"One licence key unlocks the premium tools on every Moltline server. Billed monthly, cancellable at any time.","purchaseUrl":"https://moltlinestudio.com/#allaccess"}},"authentication":{"required":false},"tools":[{"name":"business_days","description":"Do business-day math that skips weekends and your holiday list. FREE.\n\nEither add N business days to start_date (set add_days), or count the\nbusiness days between start_date and end_date (set end_date). Typical\ninput {\"start_date\": \"2026-03-02\", \"add_days\": 10} returns\n{\"result_date\": \"2026-03-16\", \"result_weekday\": \"Monday\", ...}; with\nend_date set it returns {\"business_days_between\": N, \"from\": ..., \"to\": ...}.\n\nUse when the span must exclude weekends and named holidays. Not for plain\ncalendar-day differences, which are a direct subtraction, and not for\nscheduling backward from a fixed deadline (deadline_planner). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"dates must be YYYY-MM-DD\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"start_date":{"type":"string","description":"Anchor date in ISO format YYYY-MM-DD, e.g. \"2026-03-02\"."},"add_days":{"default":0,"maximum":5000,"minimum":-5000,"type":"integer","description":"Business days to add; negative subtracts. Range -5000 to\n5000. Ignored when end_date is provided."},"end_date":{"default":"","type":"string","description":"Optional end date, ISO YYYY-MM-DD. When set, the tool counts\nbusiness days between start_date and end_date instead of adding."},"holidays":{"default":[],"items":{"type":"string"},"type":"array","description":"Optional list of ISO YYYY-MM-DD dates to treat as\nnon-working days, e.g. [\"2026-12-25\"]."}},"required":["start_date"],"type":"object"}},{"name":"meeting_overlap","description":"Find the shared meeting window across time zones inside working hours. FREE.\n\nGive one UTC offset per participant and an optional working-hours window.\nTypical input {\"offsets_utc\": [-8, 1, 5.5]} returns {\"overlap_utc\":\n[\"HH:MM\", \"HH:MM\"], \"overlap_minutes\": N, \"local_windows\": [...]}; when no\nshared window exists it returns {\"overlap\": null, \"verdict\": \"...\"}.\n\nUse when people in different zones need one shared slot. Not for\nconverting a single known time between zones, and not for expanding a\nrecurring series (recurrence_expand). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"times must be HH:MM\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"offsets_utc":{"items":{"maximum":14,"minimum":-14,"type":"number"},"type":"array","description":"One UTC offset per participant, each between -14 and\n+14; fractional offsets allowed, e.g. [-8, 1, 5.5]."},"work_start":{"default":"09:00","type":"string","description":"Working day start, 24h HH:MM local in every zone.\nDefault \"09:00\"."},"work_end":{"default":"17:00","type":"string","description":"Working day end, 24h HH:MM; must be later than work_start.\nDefault \"17:00\"."}},"required":["offsets_utc"],"type":"object"}},{"name":"recurrence_expand","description":"Expand a recurrence rule into a concrete list of ISO dates. FREE.\n\nSet every_days for a fixed interval, or weekly_on for specific weekdays.\nTypical input {\"start_date\": \"2026-01-05\", \"every_days\": 14, \"count\": 3}\nreturns {\"dates\": [\"2026-01-05\", \"2026-01-19\", \"2026-02-02\"]}.\n\nUse when a recurrence rule has to become concrete dates. Not for counting\nworking days in a span (business_days) and not for finding a slot across\nzones (meeting_overlap). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"start_date must be YYYY-MM-DD\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"start_date":{"type":"string","description":"First date of the series, ISO YYYY-MM-DD."},"count":{"default":10,"type":"integer","description":"How many dates to generate; values outside 1-60 are clamped\ninto that range. Default 10."},"every_days":{"default":0,"type":"integer","description":"Interval in days between occurrences; use this OR\nweekly_on, not both."},"weekly_on":{"default":[],"items":{"type":"string"},"type":"array","description":"Weekday names to recur on, e.g. [\"mon\", \"thu\"]; full names\nlike \"monday\" also work."}},"required":["start_date"],"type":"object"}},{"name":"deadline_planner","description":"Plan a task schedule backward from a hard deadline in business days. PREMIUM (license).\n\nGiven ordered tasks with business-day durations, returns each task's\nstart/end dates, the latest safe start, and slack from today. Typical\ninput {\"due_date\": \"2026-06-01\", \"tasks\": [{\"name\": \"Draft\", \"days\": 3},\n{\"name\": \"Review\", \"days\": 2}]} returns {\"schedule\": [...],\n\"latest_safe_start\": \"YYYY-MM-DD\", \"slack_business_days_from_today\": N,\n\"verdict\": \"...\"}.\n\nUse when the end date is fixed and steps must be placed backward from it.\nNot for forward counting from a start date (business_days) and not for\nresponse-time targets (sla_due). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"due_date must be YYYY-MM-DD\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"premium","inputSchema":{"additionalProperties":false,"properties":{"due_date":{"type":"string","description":"The deadline, ISO YYYY-MM-DD."},"tasks":{"items":{"additionalProperties":true,"type":"object"},"type":"array","description":"Ordered list of task objects, each {\"name\": str, \"days\": int}\nwhere days is the business-day duration (1-365); the first 30\ntasks are scheduled."},"holidays":{"default":[],"items":{"type":"string"},"type":"array","description":"Optional list of ISO YYYY-MM-DD dates treated as\nnon-working days."},"buffer_days":{"default":1,"type":"integer","description":"Business days of safety margin kept free before\ndue_date, clamped to 0-365. Default 1."}},"required":["due_date","tasks"],"type":"object"}},{"name":"sla_due","description":"Compute when a ticket's SLA falls due, wall-clock or business-hours. PREMIUM (license).\n\nTypical input {\"opened_at\": \"2026-03-02T15:30\", \"sla_hours\": 8,\n\"business_hours_only\": true} returns {\"due\": \"2026-03-03T15:30\", \"mode\":\n\"business hours 09:00-17:00\"}; with business_hours_only false the mode is\n\"wall-clock\".\n\nUse when a response or resolution clock has started and one due moment is\nneeded. Not for multi-step project schedules (deadline_planner). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"opened_at must be ISO YYYY-MM-DDTHH:MM\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"premium","inputSchema":{"additionalProperties":false,"properties":{"opened_at":{"type":"string","description":"When the SLA clock started, ISO datetime YYYY-MM-DDTHH:MM."},"sla_hours":{"exclusiveMinimum":0,"maximum":24000,"type":"number","description":"SLA length in hours; greater than 0, at most 24000;\nfractions allowed, e.g. 7.5."},"business_hours_only":{"default":false,"type":"boolean","description":"If true, only time inside day_start-day_end on\nbusiness days counts toward the SLA."},"day_start":{"default":"09:00","type":"string","description":"Business day start, 24h HH:MM. Default \"09:00\"."},"day_end":{"default":"17:00","type":"string","description":"Business day end, 24h HH:MM; must be later than day_start.\nDefault \"17:00\"."},"holidays":{"default":[],"items":{"type":"string"},"type":"array","description":"Optional list of ISO YYYY-MM-DD dates that never count as\nworking days."}},"required":["opened_at","sla_hours"],"type":"object"}}],"resources":[],"prompts":[]}