Zovo Meeting Planner
Find meeting times across TZs
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"meeting-planner": {
"url": "https://meeting-planner.zovo.one/mcp"
}
}
}Remote endpoints
https://meeting-planner.zovo.one/mcpstreamable-httpWhat it can do
Tool inventory
Tools (2)
🟢convert_time(time, date, from, to)
Use this when the user wants to convert a time between time zones or cities (time zone converter, e.g. 'convert 3pm PST to IST', 'time zone converter New York to London', 'what time is 9am EST in Warsaw on Nov 3'). Takes a date, a time, a source place (city, IANA zone, US state, country, UTC offset, or abbreviation) and up to 20 target places; returns the same instant in each place with UTC offset, abbreviation, +1/-1 day shift, the hour difference, and a note when a daylight saving change happens within 7 days. Explains times that are skipped or repeated by DST changes. Does not plan meetings (find_meeting_time covers that), look up flight times, or convert units.
Input Schema
{
"type": "object",
"properties": {
"time": {
"description": "Local time at the source place, 24-hour or 12-hour, e.g. \"15:00\", \"3pm\", \"9:30 am\". Omit (with date) to convert the current moment.",
"type": "string",
"maxLength": 20
},
"date": {
"description": "Local date at the source place as YYYY-MM-DD, e.g. 2026-11-03. Defaults to today at the source. Always pass it when the user names a day, because DST depends on the date.",
"type": "string",
"maxLength": 30
},
"from": {
"type": "string",
"maxLength": 80,
"description": "Source place: a city (\"New York\", \"Portland, Oregon\"), an IANA zone (\"Europe/Warsaw\"), a US state, a country, a UTC offset (\"UTC+5:30\"), or an abbreviation (\"PST\", \"CET\", \"IST\"). Abbreviations mean the region's local clock on that date; ambiguous ones (IST, CST, AST, BST) use the first meaning and say so."
},
"to": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"description": "Target places in the same formats, e.g. [\"London\", \"Asia/Kolkata\", \"Sydney\"]."
}
},
"required": [
"from",
"to"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "convert"
},
"status": {
"type": "string",
"enum": [
"ok",
"nonexistent",
"ambiguous"
]
},
"status_note": {
"type": [
"string",
"null"
]
},
"primary": {
"type": "object",
"properties": {
"utc": {
"type": "string"
},
"source": {
"type": "object",
"properties": {
"place": {
"type": "string"
},
"zone": {
"type": "string"
},
"date": {
"type": "string"
},
"weekday": {
"type": "string"
},
"time": {
"type": "string"
},
"time_12h": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"abbreviation": {
"type": "string"
},
"day_shift": {
"type": "number"
},
"difference": {
"type": "string"
},
"difference_note": {
"type": [
"string",
"null"
]
},
"dst_note": {
"type": [
"string",
"null"
]
}
},
"required": [
"place",
"zone",
"date",
"weekday",
"time",
"time_12h",
"utc_offset",
"abbreviation",
"day_shift",
"difference",
"difference_note",
"dst_note"
],
"additionalProperties": false
},
"targets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"place": {
"type": "string"
},
"zone": {
"type": "string"
},
"date": {
"type": "string"
},
"weekday": {
"type": "string"
},
"time": {
"type": "string"
},
"time_12h": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"abbreviation": {
"type": "string"
},
"day_shift": {
"type": "number"
},
"difference": {
"type": "string"
},
"difference_note": {
"type": [
"string",
"null"
]
},
"dst_note": {
"type": [
"string",
"null"
]
}
},
"required": [
"place",
"zone",
"date",
"weekday",
"time",
"time_12h",
"utc_offset",
"abbreviation",
"day_shift",
"difference",
"difference_note",
"dst_note"
],
"additionalProperties": false
}
}
},
"required": [
"utc",
"source",
"targets"
],
"additionalProperties": false
},
"alternate": {
"anyOf": [
{
"type": "object",
"properties": {
"utc": {
"type": "string"
},
"source": {
"type": "object",
"properties": {
"place": {
"type": "string"
},
"zone": {
"type": "string"
},
"date": {
"type": "string"
},
"weekday": {
"type": "string"
},
"time": {
"type": "string"
},
"time_12h": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"abbreviation": {
"type": "string"
},
"day_shift": {
"type": "number"
},
"difference": {
"type": "string"
},
"difference_note": {
"type": [
"string",
"null"
]
},
"dst_note": {
"type": [
"string",
"null"
]
}
},
"required": [
"place",
"zone",
"date",
"weekday",
"time",
"time_12h",
"utc_offset",
"abbreviation",
"day_shift",
"difference",
"difference_note",
"dst_note"
],
"additionalProperties": false
},
"targets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"place": {
"type": "string"
},
"zone": {
"type": "string"
},
"date": {
"type": "string"
},
"weekday": {
"type": "string"
},
"time": {
"type": "string"
},
"time_12h": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"abbreviation": {
"type": "string"
},
"day_shift": {
"type": "number"
},
"difference": {
"type": "string"
},
"difference_note": {
"type": [
"string",
"null"
]
},
"dst_note": {
"type": [
"string",
"null"
]
}
},
"required": [
"place",
"zone",
"date",
"weekday",
"time",
"time_12h",
"utc_offset",
"abbreviation",
"day_shift",
"difference",
"difference_note",
"dst_note"
],
"additionalProperties": false
}
}
},
"required": [
"utc",
"source",
"targets"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"kind",
"status",
"status_note",
"primary",
"alternate",
"notes"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢find_meeting_time(participants, date_from, date_to, duration_minutes, work_start, ...)
Use this when the user wants to plan a meeting across time zones (meeting planner, 'find a 1-hour slot for New York, London and Bangalore on 2026-11-10', working-hour overlap for a distributed team). Takes 2-8 participants' places with optional working hours and work days, a date or date range of up to 14 days, and a duration. Returns up to 10 distinct ranked slots (default 5), ordered by a fairness cost: 2 hours per person outside working hours plus the time outside working hours of the worst-off person, with night (22:00-07:00) and days off weighing more. Each slot lists every participant's local time and status, a calendar (.ics) download link, the flexible window of meeting times when everyone is inside working hours, and other dates with the same local times. If nobody can meet inside working hours in the range, it also returns the closest time within 7 days after the range that works for everyone. Pass selected_start_utc to get the .ics for one specific slot. Does not read calendars, check availability, issue invitations, support overnight working hours, or account for public holidays.
Input Schema
{
"type": "object",
"properties": {
"participants": {
"minItems": 2,
"maxItems": 8,
"type": "array",
"items": {
"type": "object",
"properties": {
"place": {
"type": "string",
"maxLength": 80,
"description": "City, IANA zone, state, country, or abbreviation, e.g. \"Bangalore\" or \"America/Chicago\"."
},
"name": {
"description": "Optional person or team name shown next to the place, e.g. \"Priya\".",
"type": "string",
"maxLength": 40
},
"work_start": {
"description": "This participant's local working-day start, e.g. \"08:00\". Defaults to the top-level work_start.",
"type": "string",
"maxLength": 10
},
"work_end": {
"description": "This participant's local working-day end, e.g. \"18:00\". Defaults to the top-level work_end.",
"type": "string",
"maxLength": 10
},
"work_days": {
"description": "Working days, e.g. [\"sun\",\"mon\",\"tue\",\"wed\",\"thu\"]. Default Mon-Fri (Sun-Thu for Israel, Saudi Arabia and some Gulf countries).",
"maxItems": 7,
"type": "array",
"items": {
"type": "string",
"enum": [
"mon",
"tue",
"wed",
"thu",
"fri",
"sat",
"sun"
]
}
}
},
"required": [
"place"
]
},
"description": "2-8 participants in order; the first one is the reference whose dates define the range, e.g. [{\"place\":\"New York\"},{\"place\":\"London\"},{\"place\":\"Bangalore\"}]."
},
"date_from": {
"description": "First day to search, YYYY-MM-DD in the first participant's time zone, e.g. 2026-10-06. Defaults to today there.",
"type": "string",
"maxLength": 30
},
"date_to": {
"description": "Last day to search (inclusive), YYYY-MM-DD, at most 14 days after date_from, e.g. 2026-10-09. Defaults to date_from.",
"type": "string",
"maxLength": 30
},
"duration_minutes": {
"description": "Meeting length in minutes, e.g. 30 or 60 (default 60).",
"type": "integer",
"minimum": 15,
"maximum": 480
},
"work_start": {
"description": "Default local working-day start for everyone, e.g. \"09:00\" (default).",
"type": "string",
"maxLength": 10
},
"work_end": {
"description": "Default local working-day end for everyone, e.g. \"17:00\" (default).",
"type": "string",
"maxLength": 10
},
"include_weekends": {
"description": "Treat every day of the week as a working day for participants without work_days, e.g. true for weekend events (default false).",
"type": "boolean"
},
"step_minutes": {
"description": "Slot start granularity in minutes: 15, 30 (default), or 60.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_results": {
"description": "How many ranked non-overlapping slots to return, e.g. 5 (default).",
"type": "integer",
"minimum": 1,
"maximum": 10
},
"title": {
"description": "Meeting title for the calendar file, e.g. \"Q4 planning sync\".",
"type": "string",
"maxLength": 120
},
"selected_start_utc": {
"description": "Optional chosen start in UTC, e.g. 2026-10-06T14:00:00Z, to get that exact slot's local times and its .ics calendar link.",
"type": "string",
"maxLength": 30
}
},
"required": [
"participants"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "meeting"
},
"request": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"reference": {
"type": "string"
},
"participants": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"place": {
"type": "string"
},
"zone": {
"type": "string"
},
"working_hours": {
"type": "string"
}
},
"required": [
"label",
"place",
"zone",
"working_hours"
],
"additionalProperties": false
}
},
"slots": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rank": {
"type": [
"number",
"null"
]
},
"start_utc": {
"type": "string"
},
"end_utc": {
"type": "string"
},
"score": {
"type": "number"
},
"in_hours": {
"type": "number"
},
"summary": {
"type": "string"
},
"ref": {
"type": "string"
},
"ics": {
"type": "string"
},
"start_window": {
"anyOf": [
{
"type": "object",
"properties": {
"first_start_utc": {
"type": "string"
},
"last_start_utc": {
"type": "string"
},
"ref_local": {
"type": "string"
}
},
"required": [
"first_start_utc",
"last_start_utc",
"ref_local"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"also_on": {
"type": "array",
"items": {
"type": "string"
}
},
"locals": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"place": {
"type": "string"
},
"date": {
"type": "string"
},
"weekday": {
"type": "string"
},
"start": {
"type": "string"
},
"end": {
"type": "string"
},
"abbreviation": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"status": {
"type": "string"
},
"status_text": {
"type": "string"
}
},
"required": [
"label",
"place",
"date",
"weekday",
"start",
"end",
"abbreviation",
"utc_offset",
"status",
"status_text"
],
"additionalProperties": false
}
}
},
"required": [
"rank",
"start_utc",
"end_utc",
"score",
"in_hours",
"summary",
"ref",
"ics",
"locals"
],
"additionalProperties": false
}
},
"selected": {
"anyOf": [
{
"type": "object",
"properties": {
"rank": {
"type": [
"number",
"null"
]
},
"start_utc": {
"type": "string"
},
"end_utc": {
"type": "string"
},
"score": {
"type": "number"
},
"in_hours": {
"type": "number"
},
"summary": {
"type": "string"
},
"ref": {
"type": "string"
},
"ics": {
"type": "string"
},
"start_window": {
"anyOf": [
{
"type": "object",
"properties": {
"first_start_utc": {
"type": "string"
},
"last_start_utc": {
"type": "string"
},
"ref_local": {
"type": "string"
}
},
"required": [
"first_start_utc",
"last_start_utc",
"ref_local"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"also_on": {
"type": "array",
"items": {
"type": "string"
}
},
"locals": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"place": {
"type": "string"
},
"date": {
"type": "string"
},
"weekday": {
"type": "string"
},
"start": {
"type": "string"
},
"end": {
"type": "string"
},
"abbreviation": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"status": {
"type": "string"
},
"status_text": {
"type": "string"
}
},
"required": [
"label",
"place",
"date",
"weekday",
"start",
"end",
"abbreviation",
"utc_offset",
"status",
"status_text"
],
"additionalProperties": false
}
}
},
"required": [
"rank",
"start_utc",
"end_utc",
"score",
"in_hours",
"summary",
"ref",
"ics",
"locals"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"next_full_overlap": {
"anyOf": [
{
"type": "object",
"properties": {
"rank": {
"type": [
"number",
"null"
]
},
"start_utc": {
"type": "string"
},
"end_utc": {
"type": "string"
},
"score": {
"type": "number"
},
"in_hours": {
"type": "number"
},
"summary": {
"type": "string"
},
"ref": {
"type": "string"
},
"ics": {
"type": "string"
},
"start_window": {
"anyOf": [
{
"type": "object",
"properties": {
"first_start_utc": {
"type": "string"
},
"last_start_utc": {
"type": "string"
},
"ref_local": {
"type": "string"
}
},
"required": [
"first_start_utc",
"last_start_utc",
"ref_local"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"also_on": {
"type": "array",
"items": {
"type": "string"
}
},
"locals": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"place": {
"type": "string"
},
"date": {
"type": "string"
},
"weekday": {
"type": "string"
},
"start": {
"type": "string"
},
"end": {
"type": "string"
},
"abbreviation": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"status": {
"type": "string"
},
"status_text": {
"type": "string"
}
},
"required": [
"label",
"place",
"date",
"weekday",
"start",
"end",
"abbreviation",
"utc_offset",
"status",
"status_text"
],
"additionalProperties": false
}
}
},
"required": [
"rank",
"start_utc",
"end_utc",
"score",
"in_hours",
"summary",
"ref",
"ics",
"locals"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"overlap_windows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"start_utc": {
"type": "string"
},
"end_utc": {
"type": "string"
},
"minutes": {
"type": "number"
},
"ref_local": {
"type": "string"
},
"fits_meeting": {
"type": "boolean"
}
},
"required": [
"date",
"start_utc",
"end_utc",
"minutes",
"ref_local",
"fits_meeting"
],
"additionalProperties": false
}
},
"has_full_overlap": {
"type": "boolean"
},
"days": {
"type": "array",
"items": {}
},
"downloads": {
"type": "object",
"properties": {
"ics": {
"type": "string"
}
},
"required": [
"ics"
],
"additionalProperties": false
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"kind",
"request",
"reference",
"participants",
"slots",
"selected",
"next_full_overlap",
"overlap_windows",
"has_full_overlap",
"days",
"downloads",
"notes"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Community
Evidence