{"name":"com.moltlinestudio/regclock","slug":"moltlinestudio-regclock","title":"Moltline RegClock","description":"Incident-reporting deadlines from the law: CRA, NIS2, DORA, GDPR, HIPAA, SEC 8-K. 6 of 9 tools free.","url":"https://mcp.market/server/moltlinestudio-regclock","rating":null,"grade":"A","score":87,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-09-19T15:00:29.000Z","license":"MIT"},"uptime":{"percent":100,"checks":4,"ok":4,"last_checked_at":"2026-09-20T09:05:59.843Z","last_ok_at":"2026-09-20T09:05:59.843Z","latency_ms":124},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/GarphenGate/moltline-mcp","website":"https://moltlinestudio.com/servers.html#regclock","version":"1.2.0","remotes":[{"type":"streamable-http","url":"https://mcp.moltlinestudio.com/regclock"}],"packages":[],"tools":[{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"],"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"],"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"],"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"],"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"],"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"],"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"],"additionalProperties":false}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"],"additionalProperties":false}}],"scan":{"score":87,"grade":"A","scanned_at":"2026-09-20T00:23:52.469Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T00:23:52.473Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 332ms"]},"poisoning":{"score":15,"max":15,"notes":["9 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":5,"max":10,"notes":["namespace and repository owner differ","website matches verified namespace"]}},"findings":[],"inputs":{"probes":[{"url":"https://mcp.moltlinestudio.com/regclock","reachable":true,"authRequired":false,"latencyMs":332,"serverInfo":{"name":"moltline-regclock","version":"1.1.0"}}],"packages":[],"repo":{"found":true,"owner":"GarphenGate","repo":"moltline-mcp","archived":false,"pushedAt":"2026-09-19T15:00:29Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/316633241?v=4","ownerCreatedAt":"2026-08-13T15:17:26Z","license":"MIT"},"icon":{"url":"https://moltlinestudio.com/icon-192.png","source":"registry","width":192,"height":192},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-19T15:00:29.000Z","score":23}}}},"grade_history":[],"reviews":[]}