{"schema_version":"draft-checkin-1","name":"Check-In Line","version":"0.1.0","description":"Daily check-in calls for an aging parent who installs nothing: press 1 = fine, 2 = please call me, 3 = leave a message. Missed calls are retried and then escalated to family. Muse can ask how they are, read their messages, send spoken messages into the next call, pause calls and add reminders.","publisher":{"name":"Keelcroft","website":"https://keelcroft.com","support_email":"support@keelcroft.com","privacy_policy":"https://checkin.keelcroft.com/privacy","terms":"https://checkin.keelcroft.com/terms"},"auth":{"type":"oauth2","authorization_server_metadata":"https://checkin.keelcroft.com/.well-known/oauth-authorization-server","authorization_endpoint":"https://checkin.keelcroft.com/authorize","token_endpoint":"https://checkin.keelcroft.com/oauth/token","registration_endpoint":"https://checkin.keelcroft.com/oauth/register","scopes":["parents:read","parents:manage","alerts:read"],"pkce_required":true,"api_key_fallback":{"header":"Authorization","scheme":"Bearer","obtain_at":"https://checkin.keelcroft.com/account"}},"interfaces":{"mcp":{"transport":"streamable-http","url":"https://checkin.keelcroft.com/mcp"},"rest":{"openapi":"https://checkin.keelcroft.com/openapi.json","base_url":"https://checkin.keelcroft.com/v1"}},"tools":[{"name":"list_parents","title":"List parents","description":"Lists the parents (or other adults living alone) this account checks in on, with ids, phone, daily call time, consent and pause status. Call this first when the user has more than one parent.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"List parents","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"requires_user_approval":false,"required_scope":"parents:read"},{"name":"get_status","title":"Get today's status","description":"Returns a parent's current state: today's check-in outcome (ok / asked for a call / left a message / missed / pending), last confirmed-OK time, schedule, consent, pause status and escalation contacts. Use this to answer \"is Mom okay?\".","inputSchema":{"type":"object","properties":{"parent_id":{"description":"Parent id from list_parents. Optional when the account has exactly one parent.","type":"string","minLength":1}}},"annotations":{"title":"Get today's status","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"requires_user_approval":false,"required_scope":"parents:read"},{"name":"get_history","title":"Get check-in history","description":"Returns recent check-ins for a parent plus plain facts about the pattern: how many were confirmed, missed, asked for a call, typical answer time, and whether answers are later than usual. Facts only — do not present them as medical conclusions.","inputSchema":{"type":"object","properties":{"parent_id":{"description":"Parent id from list_parents. Optional when the account has exactly one parent.","type":"string","minLength":1},"days":{"description":"How many days back to look (default 14).","type":"integer","minimum":1,"maximum":90}}},"annotations":{"title":"Get check-in history","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"requires_user_approval":false,"required_scope":"parents:read"},{"name":"get_voice_notes","title":"Get voice messages from the parent","description":"Returns messages the parent recorded during check-in calls (press 3), with transcripts when available. Use since (ISO-8601) to fetch only new ones.","inputSchema":{"type":"object","properties":{"parent_id":{"description":"Parent id from list_parents. Optional when the account has exactly one parent.","type":"string","minLength":1},"since":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"limit":{"type":"integer","minimum":1,"maximum":50}}},"annotations":{"title":"Get voice messages from the parent","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"requires_user_approval":false,"required_scope":"parents:read"},{"name":"get_recent_alerts","title":"Get recent alerts","description":"Returns proactive events: check-in confirmed, parent asked for a call, voice message left, check-in missed after all retries (family alerted), consent given/declined, opted out. Poll with since (ISO-8601) to get only new events.","inputSchema":{"type":"object","properties":{"parent_id":{"type":"string","minLength":1},"since":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"limit":{"type":"integer","minimum":1,"maximum":100}}},"annotations":{"title":"Get recent alerts","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"requires_user_approval":false,"required_scope":"alerts:read"},{"name":"request_checkin_now","title":"Call the parent now","description":"Places a check-in call to the parent right now (same menu as the daily call). Use when the family wants reassurance outside the schedule. The user must approve this action.","inputSchema":{"type":"object","properties":{"parent_id":{"description":"Parent id from list_parents. Optional when the account has exactly one parent.","type":"string","minLength":1}}},"annotations":{"title":"Call the parent now","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"requires_user_approval":true,"required_scope":"parents:manage"},{"name":"start_setup_call","title":"Start the consent (set-up) call","description":"Calls the parent to explain the service and record their agreement (press 1) before any daily calls begin. Re-run it if they missed or declined earlier. The user must approve this action.","inputSchema":{"type":"object","properties":{"parent_id":{"description":"Parent id from list_parents. Optional when the account has exactly one parent.","type":"string","minLength":1}}},"annotations":{"title":"Start the consent (set-up) call","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"requires_user_approval":true,"required_scope":"parents:manage"},{"name":"set_schedule","title":"Change the schedule","description":"Updates the daily call time, time zone, retry policy or extra reminder prompts (e.g. \"morning pills\" at 08:00). Only the fields provided change.","inputSchema":{"type":"object","properties":{"parent_id":{"description":"Parent id from list_parents. Optional when the account has exactly one parent.","type":"string","minLength":1},"checkin_time":{"type":"string","pattern":"^([01]?\\d|2[0-3]):[0-5]\\d$","description":"Local time, HH:MM 24-hour, e.g. 09:00"},"timezone":{"description":"IANA time zone, e.g. America/New_York","type":"string","minLength":1},"retries":{"description":"Extra call attempts after an unanswered call (default 2).","type":"integer","minimum":0,"maximum":5},"retry_minutes":{"description":"Minutes between attempts (default 20).","type":"integer","minimum":5,"maximum":120},"extra_prompts":{"description":"Replaces the list of extra reminder calls.","maxItems":4,"type":"array","items":{"type":"object","properties":{"time":{"type":"string","pattern":"^([01]?\\d|2[0-3]):[0-5]\\d$","description":"Local time, HH:MM 24-hour, e.g. 09:00"},"label":{"type":"string","minLength":1,"maxLength":60}},"required":["time","label"]}}}},"annotations":{"title":"Change the schedule","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"requires_user_approval":false,"required_scope":"parents:manage"},{"name":"pause_checkins","title":"Pause calls","description":"Pauses the daily calls, e.g. while the parent is travelling or staying with family. Provide until (YYYY-MM-DD, in the parent's time zone) to resume automatically, or omit it to pause indefinitely.","inputSchema":{"type":"object","properties":{"parent_id":{"description":"Parent id from list_parents. Optional when the account has exactly one parent.","type":"string","minLength":1},"until":{"description":"Resume on this date (parent local), calls restart at the usual time.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"reason":{"type":"string","maxLength":120}}},"annotations":{"title":"Pause calls","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"requires_user_approval":false,"required_scope":"parents:manage"},{"name":"resume_checkins","title":"Resume calls","description":"Resumes daily calls after a pause.","inputSchema":{"type":"object","properties":{"parent_id":{"description":"Parent id from list_parents. Optional when the account has exactly one parent.","type":"string","minLength":1}}},"annotations":{"title":"Resume calls","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"requires_user_approval":false,"required_scope":"parents:manage"},{"name":"add_message","title":"Send a spoken message","description":"Queues a short message that is read aloud to the parent in the next check-in call (or on a given date), e.g. \"I'll visit on Sunday\" or \"Happy birthday!\". Keep it under 200 characters.","inputSchema":{"type":"object","properties":{"parent_id":{"description":"Parent id from list_parents. Optional when the account has exactly one parent.","type":"string","minLength":1},"text":{"type":"string","minLength":1,"maxLength":200},"from_name":{"description":"Who the message is from (defaults to the account holder).","type":"string","minLength":1,"maxLength":40},"deliver_on":{"description":"Read it on this date (parent local) instead of the next call.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"required":["text"]},"annotations":{"title":"Send a spoken message","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"requires_user_approval":false,"required_scope":"parents:manage"},{"name":"add_contact","title":"Add an escalation contact","description":"Adds a family member or neighbour who is alerted (by call and/or email) when the parent misses a check-in. Order of addition is the escalation order.","inputSchema":{"type":"object","properties":{"parent_id":{"description":"Parent id from list_parents. Optional when the account has exactly one parent.","type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":60},"phone":{"description":"E.164 or US 10-digit; receives an escalation call.","type":"string","minLength":7},"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"role":{"type":"string","enum":["primary","family","neighbor"]},"notify_missed":{"description":"Alert on missed check-ins (default true).","type":"boolean"},"notify_ok":{"description":"Also email when the parent checks in fine (default false).","type":"boolean"}},"required":["name"]},"annotations":{"title":"Add an escalation contact","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"requires_user_approval":false,"required_scope":"parents:manage"},{"name":"add_parent","title":"Add a parent","description":"Adds a parent (or any adult living alone) to check in on, then places the consent call so they can agree (press 1). Requires an active subscription with a free seat. The user must approve this action.","inputSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"description":"First name used in the calls, e.g. Margaret"},"phone":{"type":"string","minLength":7,"description":"Their phone number (landline or mobile)."},"timezone":{"type":"string","minLength":1,"description":"IANA time zone, e.g. America/Chicago"},"checkin_time":{"type":"string","pattern":"^([01]?\\d|2[0-3]):[0-5]\\d$","description":"Local time, HH:MM 24-hour, e.g. 09:00"},"locale":{"description":"Language of the calls (default en-US).","type":"string","enum":["en-US","es-US"]},"caller_name":{"description":"How the parent hears the family member, e.g. \"your daughter Priya\".","type":"string","minLength":1,"maxLength":60}},"required":["name","phone","timezone","checkin_time"]},"annotations":{"title":"Add a parent","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"requires_user_approval":true,"required_scope":"parents:manage"}],"proactive_events":{"enabled":true,"poll":"https://checkin.keelcroft.com/v1/alerts?since={iso8601}","types":["checkin_ok","checkin_needs_call","voice_note","checkin_missed","prompt_done","prompt_missed","consent_granted","consent_declined","consent_pending","opted_out","call_failed"]},"data_handling":{"stores":["parent first name and phone number","call outcomes and keypresses","voice messages the parent chose to record and their transcripts","family contacts","account email"],"consent":"The parent agrees on the first call (press 1) and can stop calls at any time (press 9). Consent is recorded with the call id and time.","retention":"until the account deletes the parent; voice recordings are deleted with the parent","sharing":"none beyond the telephony provider (calls) and the payment provider (billing)","not_medical":"Check-In Line is not a medical alert service and does not contact emergency services."}}