{"name":"moltline-regclock","description":"Incident-reporting deadlines over MCP (CRA, NIS2, DORA, GDPR, HIPAA, SEC 8-K). Free: list_regimes, explain_rule, classify_event, compute_deadlines, deadline_status, holiday_calendar. Premium (license): compute_deadlines_multi, validate_report, timeline_export. Cited arithmetic; not legal advice.","url":"https://mcp.moltlinestudio.com/regclock","transport":"streamable-http","homepage":"https://moltlinestudio.com/servers.html","serverInfo":{"name":"moltline-regclock","version":"1.1.0"},"toolCounts":{"total":9,"free":6,"premium":3},"protocolVersion":"2025-11-25","protocolVersions":["2024-11-05","2025-03-26","2025-06-18","2025-11-25"],"pricing":{"freeTier":{"tools":6,"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":3,"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":"list_regimes","description":"List the reporting regimes this server can compute, with citations. FREE.\n\nTypical input {} returns {\"regimes\": [{\"id\": \"eu_nis2\", \"name\": ...,\n\"instrument\": ..., \"applies_from\": ..., \"event_types\": [...]}, ...],\n\"verified_on\": \"2026-09-06\"}. Use when choosing the regime id and\nevent_type for compute_deadlines or classify_event. Not for legal advice:\nit reports what the instruments say and when the entry was last checked. 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>\"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},{"name":"explain_rule","description":"Quote the time limit, citation and required content for an obligation. FREE.\n\nTypical input {\"regime\": \"eu_cra\", \"event_type\": \"severe_incident\",\n\"obligation\": \"final_report\"} returns {\"citation\": \"Art. 14(4)(c)\",\n\"rule\": \"within one month after ...\", \"required_content\": [...]}. Leave\nobligation empty to get every obligation of the event type; leave\nevent_type empty on single-event regimes. Use when a caller needs the\nrule's own words next to a computed date. Not for computing dates: use\ncompute_deadlines. 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\": \"unknown obligation '<value>' for <value>/<value>; one of <value>\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"regime":{"type":"string","description":"regime id from list_regimes (eu_cra, eu_nis2, eu_dora, eu_gdpr, uk_gdpr, us_hipaa, us_sec_8k)."},"event_type":{"default":"","type":"string","description":"event type within the regime (see list_regimes); optional when the regime has one."},"obligation":{"default":"","type":"string","description":"obligation id (for example early_warning); empty for all."}},"required":["regime"],"type":"object"}},{"name":"classify_event","description":"Apply a regime's statutory criteria to yes/no facts and name the event type. FREE.\n\nTypical input {\"regime\": \"eu_dora\", \"facts\": {\"critical_services_affected\":\ntrue, \"duration_or_downtime\": true, \"geographic_spread\": true}} returns\n{\"reportable\": true, \"event_type\": \"major_ict_incident\", \"reasoning\":\n[...], \"criteria\": {...}}. Unanswered questions are listed under \"missing\"\nso the caller can go and find out. Use when deciding whether an incident\ntriggers a regime at all. Not for judging severity in the abstract: it\nonly applies the written criteria to the facts given. 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\": \"facts must be an object of question id -> answer\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"regime":{"type":"string","description":"regime id from list_regimes."},"facts":{"additionalProperties":true,"type":"object","description":"answers keyed by the question ids returned for the regime (booleans; integers for counts)."}},"required":["regime","facts"],"type":"object"}},{"name":"compute_deadlines","description":"Compute every reporting deadline of one regime from the moment of awareness. FREE.\n\nTypical input {\"regime\": \"eu_nis2\", \"event_type\": \"significant_incident\",\n\"awareness_at\": \"2026-09-14T09:30:00+02:00\"} returns {\"deadlines\":\n[{\"obligation\": \"early_warning\", \"due_at\": \"2026-09-15T09:30+02:00\",\n\"citation\": \"Art. 23(4)(a)\", ...}, ...]}. Later clocks that run from an\nearlier submission are estimated from that report's due time until you\npass the actual time in submitted. DORA needs classification_at and a\ncountry for the bank-holiday rule; the SEC needs\nmateriality_determined_at; HIPAA takes discovery_date and\nflags.individuals_affected. Use when an incident has just been\nidentified and the agent needs the instants. Not for several regimes at\nonce: use compute_deadlines_multi. 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\": \"flags must be an object\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"regime":{"type":"string","description":"regime id from list_regimes."},"awareness_at":{"type":"string","description":"when the entity became aware, ISO 8601 with a UTC offset."},"event_type":{"default":"","type":"string","description":"event type within the regime; optional when the regime has one."},"classification_at":{"default":"","type":"string","description":"DORA - when the incident was classified as major."},"measure_available_at":{"default":"","type":"string","description":"CRA - when a corrective or mitigating measure became available."},"materiality_determined_at":{"default":"","type":"string","description":"SEC - when the incident was determined to be material."},"discovery_date":{"default":"","type":"string","description":"HIPAA - the date the breach is treated as discovered (defaults to awareness date)."},"submitted":{"additionalProperties":true,"default":{},"type":"object","description":"actual submission times of earlier reports, e.g. {\"initial_notification\": \"...\"}."},"entity_class":{"default":"","type":"string","description":"e.g. trust_service_provider (NIS2), credit_institution / central_counterparty / trading_venue_operator / nis2_essential_or_important (DORA), business_associate (HIPAA)."},"country":{"default":"","type":"string","description":"ISO 3166-1 alpha-2 code for the public-holiday calendar (DORA weekend rule; SEC uses US)."},"subdiv":{"default":"","type":"string","description":"optional subdivision code for the holiday calendar (e.g. BY for Bavaria)."},"flags":{"additionalProperties":true,"default":{},"type":"object","description":"condition answers: high_risk, processor, ongoing, handled_at, individuals_affected, max_residents_of_one_state, business_associate."}},"required":["regime","awareness_at"],"type":"object"}},{"name":"deadline_status","description":"Mark each computed deadline open, due soon, overdue or submitted as of now. FREE.\n\nTypical input {\"deadlines\": <rows from compute_deadlines>, \"now\":\n\"2026-09-15T08:00:00+02:00\"} returns {\"items\": [{\"obligation\":\n\"early_warning\", \"status\": \"due_soon\", \"hours_remaining\": 1.5, ...}],\n\"overdue\": 0, \"next_due\": {...}}. Use when polling an incident timeline\nor deciding what to escalate next. Not for computing the deadlines\nthemselves. 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\": \"deadlines must be a non-empty list of rows from compute_deadlines\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"deadlines":{"items":{"additionalProperties":true,"type":"object"},"type":"array","description":"rows from compute_deadlines / compute_deadlines_multi (each with obligation and due_at)."},"now":{"type":"string","description":"the current instant, ISO 8601 with a UTC offset."},"submitted":{"additionalProperties":true,"default":{},"type":"object","description":"actual submission times keyed by obligation id (or \"regime/obligation\")."}},"required":["deadlines","now"],"type":"object"}},{"name":"holiday_calendar","description":"List the public holidays the engine uses for a country and year. FREE.\n\nTypical input {\"country\": \"IE\", \"year\": 2026} returns {\"holidays\":\n[{\"date\": \"2026-01-01\", \"name\": \"New Year's Day\"}, ...]}. Use when\nchecking why a business-day or bank-holiday adjustment landed where it\ndid, or to see whether a country/subdivision is supported. Not a legal\nregister of bank holidays: it is the `holidays` package's public-holiday\ncalendar, which is what compute_deadlines uses. 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\": \"country is required\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 code (DE, FR, IE, US, ...)."},"year":{"maximum":2100,"minimum":1990,"type":"integer","description":"calendar year."},"subdiv":{"default":"","type":"string","description":"optional subdivision code (state, province, region)."}},"required":["country","year"],"type":"object"}},{"name":"compute_deadlines_multi","description":"One merged timeline across several regimes for the same incident. PREMIUM (license).\n\nTypical input {\"regimes\": [{\"regime\": \"eu_nis2\"}, {\"regime\": \"eu_gdpr\"},\n{\"regime\": \"eu_dora\", \"entity_class\": \"credit_institution\"}],\n\"awareness_at\": \"2026-09-14T09:30:00+02:00\", \"country\": \"DE\"} returns\n{\"timeline\": [rows sorted by due_at, each tagged with regime], \"first_due\":\n{...}, \"per_regime\": {...}}. Each entry may carry its own event_type and\nentity_class; the anchors and flags are shared. Use when one incident\ntriggers several regimes and the agent needs a single ordered list. Not\nfor one regime: compute_deadlines is free. 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\": \"regimes must be a non-empty list of <value>\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"premium","inputSchema":{"additionalProperties":false,"properties":{"regimes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","description":"list of {\"regime\": id, \"event_type\"?: ..., \"entity_class\"?: ...} (1-10 entries)."},"awareness_at":{"type":"string","description":"when the entity became aware, ISO 8601 with a UTC offset."},"classification_at":{"default":"","type":"string","description":"DORA classification instant."},"measure_available_at":{"default":"","type":"string","description":"CRA corrective-measure instant."},"materiality_determined_at":{"default":"","type":"string","description":"SEC materiality determination instant."},"discovery_date":{"default":"","type":"string","description":"HIPAA discovery date (defaults to the awareness date)."},"submitted":{"additionalProperties":true,"default":{},"type":"object","description":"actual submission times keyed by \"regime/obligation\" or obligation id."},"entity_class":{"default":"","type":"string","description":"default entity class for entries that do not set their own."},"country":{"default":"","type":"string","description":"ISO 3166-1 alpha-2 code for the public-holiday calendar."},"subdiv":{"default":"","type":"string","description":"optional subdivision code for the holiday calendar."},"flags":{"additionalProperties":true,"default":{},"type":"object","description":"condition answers shared by all regimes (see compute_deadlines)."}},"required":["regimes","awareness_at"],"type":"object"}},{"name":"validate_report","description":"Check a draft report against the statutory content list and its deadline. PREMIUM (license).\n\nTypical input {\"regime\": \"eu_gdpr\", \"obligation\":\n\"supervisory_authority_notification\", \"report\": {\"nature\": \"...\",\n\"contact\": \"...\", \"consequences\": \"...\", \"measures\": \"...\"}} returns\n{\"checklist\": [{\"item\": \"...\", \"found\": true, \"evidence\": [...]}, ...],\n\"missing\": [...], \"coverage\": 0.75, \"timing\": {...}}. The content check is\na keyword heuristic over the report text, reported as such; the timing\ncheck compares submitted_at with due_at and, for GDPR, flags a late\nnotification that gives no reasons for the delay. Use before a report is\nsent. Not a legal review, and it cannot judge quality, only presence. 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\": \"unknown obligation '<value>' for <value>/<value>; one of <value>\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"premium","inputSchema":{"additionalProperties":false,"properties":{"regime":{"type":"string","description":"regime id from list_regimes."},"obligation":{"type":"string","description":"obligation id (for example incident_notification)."},"report":{"additionalProperties":true,"type":"object","description":"the draft, as an object of section name -> text (any keys)."},"event_type":{"default":"","type":"string","description":"event type within the regime; optional when the regime has one."},"due_at":{"default":"","type":"string","description":"the computed due instant (from compute_deadlines), optional."},"submitted_at":{"default":"","type":"string","description":"when the report was or will be submitted, optional."}},"required":["regime","obligation","report"],"type":"object"}},{"name":"timeline_export","description":"Export computed deadlines as an iCalendar file and CSV rows. PREMIUM (license).\n\nTypical input {\"deadlines\": <rows from compute_deadlines or the\ntimeline from compute_deadlines_multi>, \"incident_ref\": \"INC-2026-041\"}\nreturns {\"ics\": \"BEGIN:VCALENDAR...\", \"csv\": \"regime,obligation,...\",\n\"events\": 4}. Each dated deadline becomes a VEVENT with the citation in\nthe description and an alarm alarm_hours_before it; rows without a fixed\ntime limit are listed in the CSV only. Use when the timeline needs to\nland in a calendar or a ticket. Not for computing deadlines. 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\": \"deadlines must be a non-empty list of rows from compute_deadlines\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"premium","inputSchema":{"additionalProperties":false,"properties":{"deadlines":{"items":{"additionalProperties":true,"type":"object"},"type":"array","description":"rows from compute_deadlines / compute_deadlines_multi."},"calendar_name":{"default":"Incident reporting deadlines","type":"string","description":"X-WR-CALNAME for the calendar file."},"incident_ref":{"default":"","type":"string","description":"your incident reference, prefixed to every event summary."},"alarm_hours_before":{"default":4,"maximum":720,"minimum":0,"type":"number","description":"hours before each due instant to fire a VALARM (0 disables)."}},"required":["deadlines"],"type":"object"}}],"resources":[],"prompts":[]}