# Moltline TimeOps

> Business days, meeting overlap and recurrence expansion, deterministic. 3 of 5 tools free.

- name: com.moltlinestudio/timeops
- version: 1.2.0
- connection class: R0 (autonomous)
- trust: 84/100 flags: duplicate-repo
- quality: 86/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.moltlinestudio%2Ftimeops
- tools: https://api.protogrid.dev/v1/servers/com.moltlinestudio%2Ftimeops/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "timeops": {
      "type": "http",
      "url": "https://mcp.moltlinestudio.com/timeops"
    }
  }
}
```


## Trust

- hygiene: 60
- liveness: 99
- freshness: 85
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-97% ~updated-42d-ago -duplicate-repo(22 names)
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 86/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 5 of 5 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,108 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 10 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 5, about 2,108 tokens to load them all
- tool set hash: 98ea2e5f79d2a60d0587a4c7e2391a27
- tools last changed: 2026-10-12T12:43:34.582Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.moltlinestudio/timeops.svg)](https://protogrid.dev/servers/com.moltlinestudio/timeops)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-12 `sla_due` added
  - Compute when a ticket's SLA falls due, wall-clock or business-hours. PREMIUM (license). Typical input {"opened_at": "2026-03-02T15:30", "sla_hours": 8, "business_hours_only": true} returns {"due": "2026-03-03T15:30", "mode": "business hours 09:00-17:00"}; with business_hours_only false the mode is "wall-clock". Use when a response or resolution clock has started and one due moment is needed. 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.
- 2026-10-12 `deadline_planner` added
  - Plan a task schedule backward from a hard deadline in business days. PREMIUM (license). Given ordered tasks with business-day durations, returns each task's start/end dates, the latest safe start, and slack from today. Typical input {"due_date": "2026-06-01", "tasks": [{"name": "Draft", "days": 3}, {"name": "Review", "days": 2}]} returns {"schedule": [...], "latest_safe_start": "YYYY-MM-DD", "slack_business_days_from_today": N, "verdict": "..."}. Use when the end date is fixed and steps must be placed backward from it. Not for forward counting from a start date (business_days) and not for response-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.
- 2026-10-12 `recurrence_expand` added
  - Expand a recurrence rule into a concrete list of ISO dates. FREE. Set every_days for a fixed interval, or weekly_on for specific weekdays. Typical input {"start_date": "2026-01-05", "every_days": 14, "count": 3} returns {"dates": ["2026-01-05", "2026-01-19", "2026-02-02"]}. Use when a recurrence rule has to become concrete dates. Not for counting working days in a span (business_days) and not for finding a slot across zones (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.
- 2026-10-12 `meeting_overlap` added
  - Find the shared meeting window across time zones inside working hours. FREE. Give one UTC offset per participant and an optional working-hours window. Typical input {"offsets_utc": [-8, 1, 5.5]} returns {"overlap_utc": ["HH:MM", "HH:MM"], "overlap_minutes": N, "local_windows": [...]}; when no shared window exists it returns {"overlap": null, "verdict": "..."}. Use when people in different zones need one shared slot. Not for converting a single known time between zones, and not for expanding a recurring 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.
- 2026-10-12 `business_days` added
  - Do business-day math that skips weekends and your holiday list. FREE. Either add N business days to start_date (set add_days), or count the business days between start_date and end_date (set end_date). Typical input {"start_date": "2026-03-02", "add_days": 10} returns {"result_date": "2026-03-16", "result_weekday": "Monday", ...}; with end_date set it returns {"business_days_between": N, "from": ..., "to": ...}. Use when the span must exclude weekends and named holidays. Not for plain calendar-day differences, which are a direct subtraction, and not for scheduling 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.
- 2026-10-12 `sla_due` removed
  - Compute when a ticket's SLA falls due, wall-clock or business-hours. PREMIUM (license). Typical input {"opened_at": "2026-03-02T15:30", "sla_hours": 8, "business_hours_only": true} returns {"due": "2026-03-03T15:30", "mode": "business hours 09:00-17:00"}; with business_hours_only false the mode is "wall-clock". Use when a response or resolution clock has started and one due moment is needed. 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.
- 2026-10-12 `deadline_planner` removed
  - Plan a task schedule backward from a hard deadline in business days. PREMIUM (license). Given ordered tasks with business-day durations, returns each task's start/end dates, the latest safe start, and slack from today. Typical input {"due_date": "2026-06-01", "tasks": [{"name": "Draft", "days": 3}, {"name": "Review", "days": 2}]} returns {"schedule": [...], "latest_safe_start": "YYYY-MM-DD", "slack_business_days_from_today": N, "verdict": "..."}. Use when the end date is fixed and steps must be placed backward from it. Not for forward counting from a start date (business_days) and not for response-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.
- 2026-10-12 `meeting_overlap` removed
  - Find the shared meeting window across time zones inside working hours. FREE. Give one UTC offset per participant and an optional working-hours window. Typical input {"offsets_utc": [-8, 1, 5.5]} returns {"overlap_utc": ["HH:MM", "HH:MM"], "overlap_minutes": N, "local_windows": [...]}; when no shared window exists it returns {"overlap": null, "verdict": "..."}. Use when people in different zones need one shared slot. Not for converting a single known time between zones, and not for expanding a recurring 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.
- 2026-10-12 `business_days` removed
  - Do business-day math that skips weekends and your holiday list. FREE. Either add N business days to start_date (set add_days), or count the business days between start_date and end_date (set end_date). Typical input {"start_date": "2026-03-02", "add_days": 10} returns {"result_date": "2026-03-16", "result_weekday": "Monday", ...}; with end_date set it returns {"business_days_between": N, "from": ..., "to": ...}. Use when the span must exclude weekends and named holidays. Not for plain calendar-day differences, which are a direct subtraction, and not for scheduling 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.
- 2026-10-12 `recurrence_expand` removed
  - Expand a recurrence rule into a concrete list of ISO dates. FREE. Set every_days for a fixed interval, or weekly_on for specific weekdays. Typical input {"start_date": "2026-01-05", "every_days": 14, "count": 3} returns {"dates": ["2026-01-05", "2026-01-19", "2026-02-02"]}. Use when a recurrence rule has to become concrete dates. Not for counting working days in a span (business_days) and not for finding a slot across zones (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.

Full history: https://api.protogrid.dev/v1/servers/com.moltlinestudio%2Ftimeops/changes

## Remotes

- https://mcp.moltlinestudio.com/timeops (streamable-http, auth none, reachable true, uptime30d 0.9652174)

## Packages

_none_

## Tools (5)

- `business_days`: Do business-day math that skips weekends and your holiday list. FREE.

Either add N business days to start_date (set add_days), or count the
business days between start_date and end_date (set end_date). Typical
input {"start_date": "2026-03-02", "add_days": 10} returns
{"result_date": "2026-03-16", "result_weekday": "Monday", ...}; with
end_date set it returns {"business_days_between": N, "from": ..., "to": ...}.

Use when the span must exclude weekends and named holidays. Not for plain
calendar-day differences, which are a direct subtraction, and not for
scheduling 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.
- `deadline_planner`: Plan a task schedule backward from a hard deadline in business days. PREMIUM (license).

Given ordered tasks with business-day durations, returns each task's
start/end dates, the latest safe start, and slack from today. Typical
input {"due_date": "2026-06-01", "tasks": [{"name": "Draft", "days": 3},
{"name": "Review", "days": 2}]} returns {"schedule": [...],
"latest_safe_start": "YYYY-MM-DD", "slack_business_days_from_today": N,
"verdict": "..."}.

Use when the end date is fixed and steps must be placed backward from it.
Not for forward counting from a start date (business_days) and not for
response-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.
- `meeting_overlap`: Find the shared meeting window across time zones inside working hours. FREE.

Give one UTC offset per participant and an optional working-hours window.
Typical input {"offsets_utc": [-8, 1, 5.5]} returns {"overlap_utc":
["HH:MM", "HH:MM"], "overlap_minutes": N, "local_windows": [...]}; when no
shared window exists it returns {"overlap": null, "verdict": "..."}.

Use when people in different zones need one shared slot. Not for
converting a single known time between zones, and not for expanding a
recurring 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.
- `recurrence_expand`: Expand a recurrence rule into a concrete list of ISO dates. FREE.

Set every_days for a fixed interval, or weekly_on for specific weekdays.
Typical input {"start_date": "2026-01-05", "every_days": 14, "count": 3}
returns {"dates": ["2026-01-05", "2026-01-19", "2026-02-02"]}.

Use when a recurrence rule has to become concrete dates. Not for counting
working days in a span (business_days) and not for finding a slot across
zones (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.
- `sla_due`: Compute when a ticket's SLA falls due, wall-clock or business-hours. PREMIUM (license).

Typical input {"opened_at": "2026-03-02T15:30", "sla_hours": 8,
"business_hours_only": true} returns {"due": "2026-03-03T15:30", "mode":
"business hours 09:00-17:00"}; with business_hours_only false the mode is
"wall-clock".

Use when a response or resolution clock has started and one due moment is
needed. 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.
