Koskamo

ReminderIt MCP

This MCP server enables AI agents to schedule real phone-call reminders with WhatsApp follow-ups. It supports setting, pausing, and canceling reminders for medication, wake-ups, and family check-ins, integrating with Google Calendar and allowing voice notes or prescription photos to be converted into reminders.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

ReminderIt MCP logo, by ReminderItVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by ReminderIt
MCP endpoint (Streamable HTTP)
https://mcp.reminderit.com/mcp
Vendor documentation

What its tools do

25 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

25 of 25 have a description · 25 of 25 declare behavior hints · 6 of 25 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to reminderit.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Schedule medication reminders with phone calls
  • Set wake-up calls with WhatsApp snooze options
  • Integrate reminders with Google Calendar events
  • Send reminders to up to 5 family members

Source and maintenance

Vendor evidenceRegistry 0.3.0

Protocol and capabilities

Server
ReminderIt 0.3.1
MCP protocol negotiated in check
2025-11-25
Tools
25 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  },
  "experimental": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

You are connected to a real ReminderIt account. ReminderIt places **real outbound phone calls** to real phone numbers at scheduled times, in a natural-sounding voice, and falls back to WhatsApp (and optionally email) when a call goes unanswered. Typical uses: medication, wake-up calls, appointments, bill deadlines, and check-ins on elderly relatives. BECAUSE THESE ARE REAL CALLS, treat mistakes as costly: a wrong time wakes someone at 3am, and every delivery consumes the user's paid quota. Prefer one careful call over several corrective ones. ## Core rules 1. **Timezones.** Every schedule is anchored to an IANA timezone (e.g. "Europe/London", "America/New_York", "Asia/Kolkata"). Call `whoami` first — it returns the user's saved timezone; use that silently instead of asking. Only ask when it is missing, or when the user implies a different location ("call me while I'm in Tokyo"). 2. **Times are ISO 8601** (e.g. "2026-08-01T09:00:00") and are interpreted in the reminder's timezone. 3. **Confirm before destructive actions.** `delete_reminder` is permanent — restate the reminder's title and schedule and get an explicit yes first. Pausing is reversible and usually the better suggestion. 4. **Never schedule calls to someone else's number without consent.** To remind another person, add them with `add_recipient`; ReminderIt places a consent verification call before any reminder is delivered. Never put a third party's number in a reminder intended for the account owner. 5. **Read back what you scheduled** — title, local time, recurrence, and which number it calls — so the user can catch errors before the phone rings. If the local time lands between midnight and 6 AM, explicitly flag it ("that's 4:17 AM in America/Chicago — did you mean that?") and confirm before finishing; an unintended AM/PM is the most common scheduling mistake. ## Scheduling cheat-sheet - One-off: `type="once"` + `run_at="2026-08-01T09:00:00"`. - Recurring, use ONE of: - `cron_expr` — `"0 8 * * *"` daily 8am · `"0 8 * * 1-5"` weekdays 8am · `"30 20 * * 0"` Sundays 8:30pm · `"0 9 1 * *"` 1st of month 9am · `"0 7,19 * * *"` twice daily 7am & 7pm. - `interval_days` — every N days (`7` = weekly, `30` = monthly-ish). Simpler; use it when the user says "every N days" rather than naming weekdays. - `start_date` / `end_date` bound a recurring series (e.g. a 10-day antibiotic course). - `skip_dates` (["2026-08-12", ...]) skips specific local dates — the right tool for holidays and travel. Use `set_skip_dates` rather than deleting and recreating. ## Voice The account has a default voice; individual reminders can override it. Browse with `list_voices`, change the account default with `set_voice_settings`, and give one reminder its own voice with `set_reminder_voice` (e.g. a gentle voice for medication, an energetic one for workouts). `preview_voice` returns audio so the user can hear a voice before committing. ## Quota and failures `get_usage` reports remaining calls. When a user is low or out, say so plainly and do not create reminders that cannot fire. If `list_reminders` shows a `paused:` reason, explain it: `out_of_credit` means they're out of calls; `destination_not_allowed` means their country isn't supported for this account; `completed` means a one-off already ran. ## Suggested flows - *"Remind me to take my pills at 9"* → `whoami` (timezone) → `create_reminder` (recurring, `cron_expr="0 9 * * *"`) → read back the schedule. - *"Did it call me?"* → `get_recent_calls` and interpret the statuses in plain words. - *"Stop the morning one for next week"* → `set_skip_dates`, not delete. - *"Make sure this works"* → `test_call` places an immediate call.

Tools

25 advertised

list_reminders — List reminders
Advertised by the server during the last successful anonymous check.
Advertised read-only

List every reminder on the account with its schedule, state and next call time. Start here for almost any request about existing reminders — it is the only way to discover reminder IDs, which every other reminder tool needs. Paused reminders show WHY they are paused (out_of_credit, destination_not_allowed, completed).

list_reminders input schema
{
  "type": "object",
  "title": "list_remindersArguments",
  "required": [
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
list_reminders output schema
{
  "type": "object",
  "title": "list_remindersOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
list_reminders annotations
{
  "title": "List reminders",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_reminder — Get reminder details
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the full configuration of one reminder as JSON. Use when you need detail that list_reminders omits — the exact spoken message, cron expression, skip dates, channel toggles, or voice override. Also use this to read current values before a partial update, so you don't overwrite settings. Args: reminder_id: Reminder ID from list_reminders.

get_reminder input schema
{
  "type": "object",
  "title": "get_reminderArguments",
  "required": [
    "reminder_id",
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "reminder_id": {
      "type": "string",
      "title": "Reminder Id"
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
get_reminder output schema
{
  "type": "object",
  "title": "get_reminderOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
get_reminder annotations
{
  "title": "Get reminder details",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_upcoming — List upcoming calls
Advertised by the server during the last successful anonymous check.
Advertised read-only

Show the next scheduled calls across ALL reminders, in chronological order. Answers "what's coming up?" better than list_reminders, because it expands recurring rules into actual upcoming occurrences and merges them into one timeline. Args: limit: How many upcoming occurrences to return (1-50, default 10).

list_upcoming input schema
{
  "type": "object",
  "title": "list_upcomingArguments",
  "required": [
    "context",
    "llm_model"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 10
    },
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
list_upcoming output schema
{
  "type": "object",
  "title": "list_upcomingOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
list_upcoming annotations
{
  "title": "List upcoming calls",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_recent_calls — Get call history
Advertised by the server during the last successful anonymous check.
Advertised read-only

Show recent delivery history — what was actually called, sent, or missed. Use this to answer "did it call me?", "why didn't I get it?", or to confirm a reminder is really firing. Statuses: completed/answered = the person picked up; no-answer/busy = rang but nobody answered (a WhatsApp fallback usually follows); failed = the call could not be placed; blocked = suppressed before dialling (no credit, unsupported country, or a recipient who hasn't consented); sent/delivered/read = a WhatsApp or email fallback. Args: limit: Number of recent delivery records (1-50, default 10).

get_recent_calls input schema
{
  "type": "object",
  "title": "get_recent_callsArguments",
  "required": [
    "context",
    "llm_model"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 10
    },
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
get_recent_calls output schema
{
  "type": "object",
  "title": "get_recent_callsOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
get_recent_calls annotations
{
  "title": "Get call history",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_reminder — Create reminder call
Advertised by the server during the last successful anonymous check.
Open-world

Schedule a new reminder phone call. This places REAL calls, so get the schedule right the first time: resolve the timezone via whoami, and read the result back to the user afterwards. Provide exactly one schedule: run_at (one-off), cron_expr, or interval_days. Leave the voice arguments empty to use the account's default voice. Args: title: Short label shown in the app, e.g. "Morning pills" (max 120 chars). message_text: Exactly what the voice says on the call, written as speech — "Time to take your blood pressure tablet." (max 600 chars). Avoid abbreviations and symbols that sound wrong when read aloud. type: "once" for a single call, "recurring" for a repeating schedule. timezone: IANA timezone the schedule is anchored to, e.g. "America/New_York". run_at: ISO 8601 local datetime for a one-off call. Required when type="once". cron_expr: Cron schedule for recurring calls, e.g. "0 8 * * 1-5" = weekdays 8am. interval_days: Repeat every N days (1-365). Simpler alternative to cron_expr. start_date: ISO date; the recurring series does not fire before this. end_date: ISO date; the series stops after this (e.g. end of a medication course). skip_dates: Local dates to skip, ["2026-08-12"] format — holidays, travel. recipient_id: Call a care-recipient (from list_recipients) instead of the account owner. The recipient must have consented. voice_id: Override the account voice for this reminder only (see list_voices). personality: Speaking style — "gentle", "cheerful", "professional", "energetic". language: BCP-47 language tag for the spoken message, e.g. "en-GB", "hi-IN". speaking_rate: Speech speed, 0.8 (slower) to 1.2 (faster). 1.0 is normal. whatsapp_fallback: Send the reminder on WhatsApp if the call isn't answered. email_fallback: Also email the reminder if the call isn't answered.

create_reminder input schema
{
  "type": "object",
  "title": "create_reminderArguments",
  "required": [
    "title",
    "message_text",
    "type",
    "timezone",
    "context",
    "llm_model"
  ],
  "properties": {
    "type": {
      "type": "string",
      "title": "Type"
    },
    "title": {
      "type": "string",
      "title": "Title"
    },
    "run_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Run At",
      "default": null
    },
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "end_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "End Date",
      "default": null
    },
    "language": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Language",
      "default": null
    },
    "timezone": {
      "type": "string",
      "title": "Timezone"
    },
    "voice_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Voice Id",
      "default": null
    },
    "cron_expr": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Cron Expr",
      "default": null
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "skip_dates": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Skip Dates",
      "default": null
    },
    "start_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Start Date",
      "default": null
    },
    "personality": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Personality",
      "default": null
    },
    "message_text": {
      "type": "string",
      "title": "Message Text"
    },
    "recipient_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Recipient Id",
      "default": null
    },
    "interval_days": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Interval Days",
      "default": null
    },
    "speaking_rate": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Speaking Rate",
      "default": null
    },
    "email_fallback": {
      "type": "boolean",
      "title": "Email Fallback",
      "default": false
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    },
    "whatsapp_fallback": {
      "type": "boolean",
      "title": "Whatsapp Fallback",
      "default": true
    }
  }
}
create_reminder output schema
{
  "type": "object",
  "title": "create_reminderOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
create_reminder annotations
{
  "title": "Create reminder call",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
update_reminder — Edit reminder
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Edit a reminder's wording or schedule. Only the fields you pass are changed. Use for "move it to 7am", "say it differently", "stop after the 20th". To pause or resume, use pause_reminder / resume_reminder. To change the voice, use set_reminder_voice. To skip particular dates, use set_skip_dates. Args: reminder_id: Reminder to edit (from list_reminders). title: New short label. message_text: New spoken message (written as natural speech, max 600 chars). cron_expr: New cron schedule, e.g. "0 7 * * *" for daily 7am. interval_days: New "every N days" interval (1-365). run_at: New ISO 8601 datetime for a one-off reminder. timezone: New IANA timezone. Changing this moves every future call. start_date: New ISO start date for a recurring series. end_date: New ISO end date; the series stops after it.

update_reminder input schema
{
  "type": "object",
  "title": "update_reminderArguments",
  "required": [
    "reminder_id",
    "context",
    "llm_model"
  ],
  "properties": {
    "title": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Title",
      "default": null
    },
    "run_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Run At",
      "default": null
    },
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "end_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "End Date",
      "default": null
    },
    "timezone": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Timezone",
      "default": null
    },
    "cron_expr": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Cron Expr",
      "default": null
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "start_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Start Date",
      "default": null
    },
    "reminder_id": {
      "type": "string",
      "title": "Reminder Id"
    },
    "message_text": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Message Text",
      "default": null
    },
    "interval_days": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Interval Days",
      "default": null
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
update_reminder output schema
{
  "type": "object",
  "title": "update_reminderOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
update_reminder annotations
{
  "title": "Edit reminder",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
set_reminder_voice — Set a reminder's voice
Advertised by the server during the last successful anonymous check.
Advertised destructive

Give one reminder its own voice, overriding the account default. Use when a specific reminder should sound different — a calm, slower voice for medication; an energetic one for a workout; a different language for a relative. Call list_voices first to get valid voice IDs, and preview_voice if the user wants to hear it before committing. Other reminders are unaffected. Args: reminder_id: Reminder to restyle (from list_reminders). voice_id: Voice ID from list_voices. personality: "gentle", "cheerful", "professional", or "energetic". language: BCP-47 tag for the spoken message, e.g. "en-GB", "es-ES", "hi-IN". speaking_rate: 0.8 (slower, good for elderly listeners) to 1.2 (faster).

set_reminder_voice input schema
{
  "type": "object",
  "title": "set_reminder_voiceArguments",
  "required": [
    "reminder_id",
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "language": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Language",
      "default": null
    },
    "voice_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Voice Id",
      "default": null
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "personality": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Personality",
      "default": null
    },
    "reminder_id": {
      "type": "string",
      "title": "Reminder Id"
    },
    "speaking_rate": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Speaking Rate",
      "default": null
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
set_reminder_voice output schema
{
  "type": "object",
  "title": "set_reminder_voiceOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
set_reminder_voice annotations
{
  "title": "Set a reminder's voice",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
clear_reminder_voice — Reset a reminder's voice
Advertised by the server during the last successful anonymous check.
Advertised destructive

Remove a reminder's custom voice so it uses the account default again. Args: reminder_id: Reminder whose voice override should be cleared.

clear_reminder_voice input schema
{
  "type": "object",
  "title": "clear_reminder_voiceArguments",
  "required": [
    "reminder_id",
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "reminder_id": {
      "type": "string",
      "title": "Reminder Id"
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
clear_reminder_voice output schema
{
  "type": "object",
  "title": "clear_reminder_voiceOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
clear_reminder_voice annotations
{
  "title": "Reset a reminder's voice",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
set_reminder_channels — Set missed-call fallbacks
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Choose what happens when a reminder call isn't answered. The phone call itself is always attempted. These toggles control the follow-ups: WhatsApp is on by default, email is off. Note each delivered fallback also consumes one call from the account's quota. Args: reminder_id: Reminder to configure (from list_reminders). whatsapp_fallback: True to send a WhatsApp message when the call is missed. email_fallback: True to also email the reminder when the call is missed.

set_reminder_channels input schema
{
  "type": "object",
  "title": "set_reminder_channelsArguments",
  "required": [
    "reminder_id",
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "reminder_id": {
      "type": "string",
      "title": "Reminder Id"
    },
    "email_fallback": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Email Fallback",
      "default": null
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    },
    "whatsapp_fallback": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Whatsapp Fallback",
      "default": null
    }
  }
}
set_reminder_channels output schema
{
  "type": "object",
  "title": "set_reminder_channelsOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
set_reminder_channels annotations
{
  "title": "Set missed-call fallbacks",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
set_skip_dates — Set skip dates
Advertised by the server during the last successful anonymous check.
Advertised destructive

Set the specific dates a recurring reminder should NOT call. The right way to handle holidays, travel, or a pause of a few days — far better than deleting a reminder and rebuilding it. This REPLACES the existing skip list, so include dates the user still wants skipped (read them with get_reminder first). Pass an empty list to clear all skips. Args: reminder_id: Reminder to adjust (from list_reminders). skip_dates: Local dates in "YYYY-MM-DD" form, e.g. ["2026-08-12", "2026-08-13"].

set_skip_dates input schema
{
  "type": "object",
  "title": "set_skip_datesArguments",
  "required": [
    "reminder_id",
    "skip_dates",
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "skip_dates": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Skip Dates"
    },
    "reminder_id": {
      "type": "string",
      "title": "Reminder Id"
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
set_skip_dates output schema
{
  "type": "object",
  "title": "set_skip_datesOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
set_skip_dates annotations
{
  "title": "Set skip dates",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
pause_reminder — Pause reminder
Advertised by the server during the last successful anonymous check.
Advertised destructive

Pause a reminder so it stops calling, keeping all its settings intact. Prefer this over delete_reminder whenever the user might want it back — it is fully reversible with resume_reminder. Args: reminder_id: Reminder to pause (from list_reminders).

pause_reminder input schema
{
  "type": "object",
  "title": "pause_reminderArguments",
  "required": [
    "reminder_id",
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "reminder_id": {
      "type": "string",
      "title": "Reminder Id"
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
pause_reminder output schema
{
  "type": "object",
  "title": "pause_reminderOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
pause_reminder annotations
{
  "title": "Pause reminder",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
resume_reminder — Resume reminder
Advertised by the server during the last successful anonymous check.
Open-world

Resume a paused reminder so it starts calling on its schedule again. If it was paused automatically for out_of_credit and the account still has no calls left, it will pause again at the next occurrence — check get_usage and tell the user. Args: reminder_id: Reminder to resume (from list_reminders).

resume_reminder input schema
{
  "type": "object",
  "title": "resume_reminderArguments",
  "required": [
    "reminder_id",
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "reminder_id": {
      "type": "string",
      "title": "Reminder Id"
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
resume_reminder output schema
{
  "type": "object",
  "title": "resume_reminderOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
resume_reminder annotations
{
  "title": "Resume reminder",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
skip_next_occurrence — Skip next call
Advertised by the server during the last successful anonymous check.
Advertised destructive

Skip only the next scheduled call, leaving the rest of the schedule untouched. Use for "not tomorrow, but keep it going after that". To skip particular calendar dates instead, use set_skip_dates. Args: reminder_id: Reminder whose next call should be skipped.

skip_next_occurrence input schema
{
  "type": "object",
  "title": "skip_next_occurrenceArguments",
  "required": [
    "reminder_id",
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "reminder_id": {
      "type": "string",
      "title": "Reminder Id"
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
skip_next_occurrence output schema
{
  "type": "object",
  "title": "skip_next_occurrenceOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
skip_next_occurrence annotations
{
  "title": "Skip next call",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
test_call — Place a test call now
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Place an immediate test call for a reminder so the user can hear it right now. The phone will ring within seconds — only do this when the user has asked to test, and never repeatedly. It consumes one call from their quota and does not change the schedule. Args: reminder_id: Reminder to test (from list_reminders).

test_call input schema
{
  "type": "object",
  "title": "test_callArguments",
  "required": [
    "reminder_id",
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "reminder_id": {
      "type": "string",
      "title": "Reminder Id"
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
test_call output schema
{
  "type": "object",
  "title": "test_callOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
test_call annotations
{
  "title": "Place a test call now",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
delete_reminder — Delete reminder
Advertised by the server during the last successful anonymous check.
Advertised destructive

Permanently delete a reminder. This cannot be undone. Confirm with the user first, quoting the reminder's title and schedule. If they may want it later, use pause_reminder instead. Args: reminder_id: Reminder to delete (from list_reminders).

delete_reminder input schema
{
  "type": "object",
  "title": "delete_reminderArguments",
  "required": [
    "reminder_id",
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "reminder_id": {
      "type": "string",
      "title": "Reminder Id"
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
delete_reminder output schema
{
  "type": "object",
  "title": "delete_reminderOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
delete_reminder annotations
{
  "title": "Delete reminder",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
list_voices — List voices
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the voices available on this account, with language, accent and tier. Call before set_voice_settings or set_reminder_voice to get valid voice IDs — never guess one. Voices marked premium may not be included in every plan; if the account's plan doesn't include one, calls fall back to a standard voice.

list_voices input schema
{
  "type": "object",
  "title": "list_voicesArguments",
  "required": [
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
list_voices output schema
{
  "type": "object",
  "title": "list_voicesOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
list_voices annotations
{
  "title": "List voices",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_voice_settings — Get default voice
Advertised by the server during the last successful anonymous check.
Advertised read-only

Show the account's default voice — the voice every reminder uses unless overridden. Read this before changing anything, so you can report what actually changed and leave unrelated settings alone.

get_voice_settings input schema
{
  "type": "object",
  "title": "get_voice_settingsArguments",
  "required": [
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
get_voice_settings output schema
{
  "type": "object",
  "title": "get_voice_settingsOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
get_voice_settings annotations
{
  "title": "Get default voice",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
set_voice_settings — Set default voice
Advertised by the server during the last successful anonymous check.
Advertised destructive

Change the account's DEFAULT voice, affecting every reminder without an override. For a single reminder only, use set_reminder_voice instead. Get valid IDs from list_voices; preview_voice lets the user hear one first. Args: voice_id: Voice ID from list_voices. personality: "gentle", "cheerful", "professional", or "energetic". language: BCP-47 tag, e.g. "en-US", "en-GB", "hi-IN". speaking_rate: 0.8 (slower — often better for elderly listeners) to 1.2 (faster). greet_by_name: Whether calls open by greeting the user by name.

set_voice_settings input schema
{
  "type": "object",
  "title": "set_voice_settingsArguments",
  "required": [
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "language": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Language",
      "default": null
    },
    "voice_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Voice Id",
      "default": null
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "personality": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Personality",
      "default": null
    },
    "greet_by_name": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Greet By Name",
      "default": null
    },
    "speaking_rate": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Speaking Rate",
      "default": null
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
set_voice_settings output schema
{
  "type": "object",
  "title": "set_voice_settingsOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
set_voice_settings annotations
{
  "title": "Set default voice",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
preview_voice — Preview a voice
Advertised by the server during the last successful anonymous check.
Advertised read-only

Generate a short audio sample of a voice so the user can hear it before choosing. Returns a URL to the generated audio. Useful when a user is deciding between voices, or wants to check how their own reminder wording will sound. Args: voice_id: Voice ID from list_voices. text: Words to speak in the sample. Defaults to a standard demo line; pass the user's actual reminder message to preview exactly what they'll hear. personality: "gentle", "cheerful", "professional", or "energetic". language: BCP-47 tag, e.g. "en-GB". speaking_rate: 0.8 to 1.2.

preview_voice input schema
{
  "type": "object",
  "title": "preview_voiceArguments",
  "required": [
    "voice_id",
    "context",
    "llm_model"
  ],
  "properties": {
    "text": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Text",
      "default": null
    },
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "language": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Language",
      "default": null
    },
    "voice_id": {
      "type": "string",
      "title": "Voice Id"
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "personality": {
      "type": "string",
      "title": "Personality",
      "default": "gentle"
    },
    "speaking_rate": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Speaking Rate",
      "default": null
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
preview_voice output schema
{
  "type": "object",
  "title": "preview_voiceOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
preview_voice annotations
{
  "title": "Preview a voice",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
whoami — Get account details
Advertised by the server during the last successful anonymous check.
Advertised read-only

Identify the connected ReminderIt account: who it is, their timezone, plan and quota. Two jobs. First, it is the connection check — call it when the user asks "am I connected?", "which account is this?", or when another tool returns an auth error, to confirm the API key is valid and see whose account it opens. Second, call it BEFORE creating or rescheduling a reminder: it returns the user's saved timezone, so you can schedule silently instead of asking. It also warns when the phone is unverified or the account is opted out — in either case no reminder can be delivered, so surface that before scheduling anything.

whoami input schema
{
  "type": "object",
  "title": "whoamiArguments",
  "required": [
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
whoami output schema
{
  "type": "object",
  "title": "whoamiOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
whoami annotations
{
  "title": "Get account details",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_usage — Check call balance
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get remaining call quota, calls used, plan, and the current billing period. Check before creating several reminders or suggesting a test call, and whenever a delivery fails unexpectedly. One call OR one WhatsApp fallback each consume one unit from the same pool. When the balance is low or zero, tell the user plainly.

get_usage input schema
{
  "type": "object",
  "title": "get_usageArguments",
  "required": [
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
get_usage output schema
{
  "type": "object",
  "title": "get_usageOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
get_usage annotations
{
  "title": "Check call balance",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_recipients — List people you remind
Advertised by the server during the last successful anonymous check.
Advertised read-only

List care-recipients — other people this account can send reminders to. Needed to get the recipient_id for create_reminder. Consent status matters: only "confirmed" recipients receive calls; "pending" means they haven't accepted the verification call yet, so reminders to them will be blocked.

list_recipients input schema
{
  "type": "object",
  "title": "list_recipientsArguments",
  "required": [
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
list_recipients output schema
{
  "type": "object",
  "title": "list_recipientsOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
list_recipients annotations
{
  "title": "List people you remind",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
add_recipient — Add a person to remind
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Add another person who can receive reminder calls, e.g. an elderly parent. ReminderIt immediately places a consent verification call to the number; reminders are only delivered after that person accepts. Only add someone the user genuinely has permission to call, and confirm the number digit by digit before submitting — a typo calls a stranger. Args: name: The person's name, used in the call greeting. phone: Their number in full E.164 format, e.g. "+447700900123". relationship: Optional label for the user's own reference, e.g. "Mother".

add_recipient input schema
{
  "type": "object",
  "title": "add_recipientArguments",
  "required": [
    "name",
    "phone",
    "context",
    "llm_model"
  ],
  "properties": {
    "name": {
      "type": "string",
      "title": "Name"
    },
    "phone": {
      "type": "string",
      "title": "Phone"
    },
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "relationship": {
      "type": "string",
      "title": "Relationship",
      "default": ""
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
add_recipient output schema
{
  "type": "object",
  "title": "add_recipientOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
add_recipient annotations
{
  "title": "Add a person to remind",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
resend_recipient_verification — Resend consent call
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Re-send the consent verification call to a recipient who hasn't confirmed yet. Use when list_recipients shows consent as pending and the person missed the first call. Don't repeat it more than necessary — each attempt rings their phone. Args: recipient_id: Recipient to re-verify (from list_recipients).

resend_recipient_verification input schema
{
  "type": "object",
  "title": "resend_recipient_verificationArguments",
  "required": [
    "recipient_id",
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "recipient_id": {
      "type": "string",
      "title": "Recipient Id"
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
resend_recipient_verification output schema
{
  "type": "object",
  "title": "resend_recipient_verificationOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
resend_recipient_verification annotations
{
  "title": "Resend consent call",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
remove_recipient — Remove a person
Advertised by the server during the last successful anonymous check.
Advertised destructive

Remove a care-recipient from the account. Any reminders targeting them will stop being delivered. Confirm with the user first. Args: recipient_id: Recipient to remove (from list_recipients).

remove_recipient input schema
{
  "type": "object",
  "title": "remove_recipientArguments",
  "required": [
    "recipient_id",
    "context",
    "llm_model"
  ],
  "properties": {
    "context": {
      "type": "string",
      "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
    },
    "llm_model": {
      "type": "string",
      "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."
    },
    "recipient_id": {
      "type": "string",
      "title": "Recipient Id"
    },
    "conversation_id": {
      "type": "string",
      "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
    }
  }
}
remove_recipient output schema
{
  "type": "object",
  "title": "remove_recipientOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    },
    "_mcp_instructions": {
      "type": "object",
      "properties": {
        "conversation_id": {
          "type": "string",
          "description": "The server-issued conversation identifier."
        }
      },
      "description": "Server-issued metadata for this conversation."
    }
  }
}
remove_recipient annotations
{
  "title": "Remove a person",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2062 ms
95th percentile latency
2062 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2062 ms · metadata changed · 25 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http reminderit-mcp https://mcp.reminderit.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add reminderit-mcp --url https://mcp.reminderit.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable reminderit-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "reminderit-mcp": {
      "url": "https://mcp.reminderit.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "reminderit-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.reminderit.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start reminderit-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "reminderit-mcp": {
      "type": "http",
      "url": "https://mcp.reminderit.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http reminderit-mcp https://mcp.reminderit.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.reminderit.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "reminderit-mcp": {
      "serverUrl": "https://mcp.reminderit.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like ReminderIt MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run ReminderIt MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing