Zovo Meeting Planner MCP
Zovo Meeting Planner is a community MCP server that converts times across time zones using the IANA database and ranks meeting slots for 2-8 participants based on working hours. It provides 24-hour timelines, handles daylight saving time nuances, and generates .ics calendar files for selected slots without requiring user sign-in.
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.
https://meeting-planner.zovo.one/mcpWhat you can do with it
- Convert a specific time between multiple cities and time zones
- Find optimal meeting slots for 2-8 people across different locations
- Generate an .ics calendar file for a chosen meeting time
Source and maintenance
Protocol and capabilities
- Server
- meeting-planner 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 2 advertised
- Resources
- 1 advertised
- Resource templates
- 1 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
2 advertised
convert_time — Convert time between time zones
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 20,
"minItems": 1,
"description": "Target places in the same formats, e.g. [\"London\", \"Asia/Kolkata\", \"Sydney\"]."
},
"date": {
"type": "string",
"maxLength": 30,
"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."
},
"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."
},
"time": {
"type": "string",
"maxLength": 20,
"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": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"kind",
"status",
"status_note",
"primary",
"alternate",
"notes"
],
"properties": {
"kind": {
"type": "string",
"const": "convert"
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"enum": [
"ok",
"nonexistent",
"ambiguous"
],
"type": "string"
},
"primary": {
"type": "object",
"required": [
"utc",
"source",
"targets"
],
"properties": {
"utc": {
"type": "string"
},
"source": {
"type": "object",
"required": [
"place",
"zone",
"date",
"weekday",
"time",
"time_12h",
"utc_offset",
"abbreviation",
"day_shift",
"difference",
"difference_note",
"dst_note"
],
"properties": {
"date": {
"type": "string"
},
"time": {
"type": "string"
},
"zone": {
"type": "string"
},
"place": {
"type": "string"
},
"weekday": {
"type": "string"
},
"dst_note": {
"type": [
"string",
"null"
]
},
"time_12h": {
"type": "string"
},
"day_shift": {
"type": "number"
},
"difference": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"abbreviation": {
"type": "string"
},
"difference_note": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"targets": {
"type": "array",
"items": {
"type": "object",
"required": [
"place",
"zone",
"date",
"weekday",
"time",
"time_12h",
"utc_offset",
"abbreviation",
"day_shift",
"difference",
"difference_note",
"dst_note"
],
"properties": {
"date": {
"type": "string"
},
"time": {
"type": "string"
},
"zone": {
"type": "string"
},
"place": {
"type": "string"
},
"weekday": {
"type": "string"
},
"dst_note": {
"type": [
"string",
"null"
]
},
"time_12h": {
"type": "string"
},
"day_shift": {
"type": "number"
},
"difference": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"abbreviation": {
"type": "string"
},
"difference_note": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"alternate": {
"anyOf": [
{
"type": "object",
"required": [
"utc",
"source",
"targets"
],
"properties": {
"utc": {
"type": "string"
},
"source": {
"type": "object",
"required": [
"place",
"zone",
"date",
"weekday",
"time",
"time_12h",
"utc_offset",
"abbreviation",
"day_shift",
"difference",
"difference_note",
"dst_note"
],
"properties": {
"date": {
"type": "string"
},
"time": {
"type": "string"
},
"zone": {
"type": "string"
},
"place": {
"type": "string"
},
"weekday": {
"type": "string"
},
"dst_note": {
"type": [
"string",
"null"
]
},
"time_12h": {
"type": "string"
},
"day_shift": {
"type": "number"
},
"difference": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"abbreviation": {
"type": "string"
},
"difference_note": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"targets": {
"type": "array",
"items": {
"type": "object",
"required": [
"place",
"zone",
"date",
"weekday",
"time",
"time_12h",
"utc_offset",
"abbreviation",
"day_shift",
"difference",
"difference_note",
"dst_note"
],
"properties": {
"date": {
"type": "string"
},
"time": {
"type": "string"
},
"zone": {
"type": "string"
},
"place": {
"type": "string"
},
"weekday": {
"type": "string"
},
"dst_note": {
"type": [
"string",
"null"
]
},
"time_12h": {
"type": "string"
},
"day_shift": {
"type": "number"
},
"difference": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"abbreviation": {
"type": "string"
},
"difference_note": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"status_note": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}{
"title": "Convert time between time zones",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}find_meeting_time — Find a meeting time across time zones
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"participants"
],
"properties": {
"title": {
"type": "string",
"maxLength": 120,
"description": "Meeting title for the calendar file, e.g. \"Q4 planning sync\"."
},
"date_to": {
"type": "string",
"maxLength": 30,
"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."
},
"work_end": {
"type": "string",
"maxLength": 10,
"description": "Default local working-day end for everyone, e.g. \"17:00\" (default)."
},
"date_from": {
"type": "string",
"maxLength": 30,
"description": "First day to search, YYYY-MM-DD in the first participant's time zone, e.g. 2026-10-06. Defaults to today there."
},
"work_start": {
"type": "string",
"maxLength": 10,
"description": "Default local working-day start for everyone, e.g. \"09:00\" (default)."
},
"max_results": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "How many ranked non-overlapping slots to return, e.g. 5 (default)."
},
"participants": {
"type": "array",
"items": {
"type": "object",
"required": [
"place"
],
"properties": {
"name": {
"type": "string",
"maxLength": 40,
"description": "Optional person or team name shown next to the place, e.g. \"Priya\"."
},
"place": {
"type": "string",
"maxLength": 80,
"description": "City, IANA zone, state, country, or abbreviation, e.g. \"Bangalore\" or \"America/Chicago\"."
},
"work_end": {
"type": "string",
"maxLength": 10,
"description": "This participant's local working-day end, e.g. \"18:00\". Defaults to the top-level work_end."
},
"work_days": {
"type": "array",
"items": {
"enum": [
"mon",
"tue",
"wed",
"thu",
"fri",
"sat",
"sun"
],
"type": "string"
},
"maxItems": 7,
"description": "Working days, e.g. [\"sun\",\"mon\",\"tue\",\"wed\",\"thu\"]. Default Mon-Fri (Sun-Thu for Israel, Saudi Arabia and some Gulf countries)."
},
"work_start": {
"type": "string",
"maxLength": 10,
"description": "This participant's local working-day start, e.g. \"08:00\". Defaults to the top-level work_start."
}
}
},
"maxItems": 8,
"minItems": 2,
"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\"}]."
},
"step_minutes": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Slot start granularity in minutes: 15, 30 (default), or 60."
},
"duration_minutes": {
"type": "integer",
"maximum": 480,
"minimum": 15,
"description": "Meeting length in minutes, e.g. 30 or 60 (default 60)."
},
"include_weekends": {
"type": "boolean",
"description": "Treat every day of the week as a working day for participants without work_days, e.g. true for weekend events (default false)."
},
"selected_start_utc": {
"type": "string",
"maxLength": 30,
"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": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"kind",
"request",
"reference",
"participants",
"slots",
"selected",
"next_full_overlap",
"overlap_windows",
"has_full_overlap",
"days",
"downloads",
"notes"
],
"properties": {
"days": {
"type": "array",
"items": {}
},
"kind": {
"type": "string",
"const": "meeting"
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"slots": {
"type": "array",
"items": {
"type": "object",
"required": [
"rank",
"start_utc",
"end_utc",
"score",
"in_hours",
"summary",
"ref",
"ics",
"locals"
],
"properties": {
"ics": {
"type": "string"
},
"ref": {
"type": "string"
},
"rank": {
"type": [
"number",
"null"
]
},
"score": {
"type": "number"
},
"locals": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"place",
"date",
"weekday",
"start",
"end",
"abbreviation",
"utc_offset",
"status",
"status_text"
],
"properties": {
"end": {
"type": "string"
},
"date": {
"type": "string"
},
"label": {
"type": "string"
},
"place": {
"type": "string"
},
"start": {
"type": "string"
},
"status": {
"type": "string"
},
"weekday": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"status_text": {
"type": "string"
},
"abbreviation": {
"type": "string"
}
},
"additionalProperties": false
}
},
"also_on": {
"type": "array",
"items": {
"type": "string"
}
},
"end_utc": {
"type": "string"
},
"summary": {
"type": "string"
},
"in_hours": {
"type": "number"
},
"start_utc": {
"type": "string"
},
"start_window": {
"anyOf": [
{
"type": "object",
"required": [
"first_start_utc",
"last_start_utc",
"ref_local"
],
"properties": {
"ref_local": {
"type": "string"
},
"last_start_utc": {
"type": "string"
},
"first_start_utc": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"request": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"selected": {
"anyOf": [
{
"type": "object",
"required": [
"rank",
"start_utc",
"end_utc",
"score",
"in_hours",
"summary",
"ref",
"ics",
"locals"
],
"properties": {
"ics": {
"type": "string"
},
"ref": {
"type": "string"
},
"rank": {
"type": [
"number",
"null"
]
},
"score": {
"type": "number"
},
"locals": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"place",
"date",
"weekday",
"start",
"end",
"abbreviation",
"utc_offset",
"status",
"status_text"
],
"properties": {
"end": {
"type": "string"
},
"date": {
"type": "string"
},
"label": {
"type": "string"
},
"place": {
"type": "string"
},
"start": {
"type": "string"
},
"status": {
"type": "string"
},
"weekday": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"status_text": {
"type": "string"
},
"abbreviation": {
"type": "string"
}
},
"additionalProperties": false
}
},
"also_on": {
"type": "array",
"items": {
"type": "string"
}
},
"end_utc": {
"type": "string"
},
"summary": {
"type": "string"
},
"in_hours": {
"type": "number"
},
"start_utc": {
"type": "string"
},
"start_window": {
"anyOf": [
{
"type": "object",
"required": [
"first_start_utc",
"last_start_utc",
"ref_local"
],
"properties": {
"ref_local": {
"type": "string"
},
"last_start_utc": {
"type": "string"
},
"first_start_utc": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"downloads": {
"type": "object",
"required": [
"ics"
],
"properties": {
"ics": {
"type": "string"
}
},
"additionalProperties": false
},
"reference": {
"type": "string"
},
"participants": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"place",
"zone",
"working_hours"
],
"properties": {
"zone": {
"type": "string"
},
"label": {
"type": "string"
},
"place": {
"type": "string"
},
"working_hours": {
"type": "string"
}
},
"additionalProperties": false
}
},
"overlap_windows": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"start_utc",
"end_utc",
"minutes",
"ref_local",
"fits_meeting"
],
"properties": {
"date": {
"type": "string"
},
"end_utc": {
"type": "string"
},
"minutes": {
"type": "number"
},
"ref_local": {
"type": "string"
},
"start_utc": {
"type": "string"
},
"fits_meeting": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"has_full_overlap": {
"type": "boolean"
},
"next_full_overlap": {
"anyOf": [
{
"type": "object",
"required": [
"rank",
"start_utc",
"end_utc",
"score",
"in_hours",
"summary",
"ref",
"ics",
"locals"
],
"properties": {
"ics": {
"type": "string"
},
"ref": {
"type": "string"
},
"rank": {
"type": [
"number",
"null"
]
},
"score": {
"type": "number"
},
"locals": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"place",
"date",
"weekday",
"start",
"end",
"abbreviation",
"utc_offset",
"status",
"status_text"
],
"properties": {
"end": {
"type": "string"
},
"date": {
"type": "string"
},
"label": {
"type": "string"
},
"place": {
"type": "string"
},
"start": {
"type": "string"
},
"status": {
"type": "string"
},
"weekday": {
"type": "string"
},
"utc_offset": {
"type": "string"
},
"status_text": {
"type": "string"
},
"abbreviation": {
"type": "string"
}
},
"additionalProperties": false
}
},
"also_on": {
"type": "array",
"items": {
"type": "string"
}
},
"end_utc": {
"type": "string"
},
"summary": {
"type": "string"
},
"in_hours": {
"type": "number"
},
"start_utc": {
"type": "string"
},
"start_window": {
"anyOf": [
{
"type": "object",
"required": [
"first_start_utc",
"last_start_utc",
"ref_local"
],
"properties": {
"ref_local": {
"type": "string"
},
"last_start_utc": {
"type": "string"
},
"first_start_utc": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}{
"title": "Find a meeting time across time zones",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
meeting-planner-widget — Zovo Meeting Planner view
Interactive view for Zovo Meeting Planner.
ui://widget/meeting-planner-v1-1.0.0-25bf283aa41fef76ae9452b06f06a943c208bec6806b7e818b0751a511782c3f.htmlmeeting-planner-widget-legacy — Zovo Meeting Planner view (previous versions)
ui://widget/meeting-planner-{version}.html30-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
- 575 ms
- 95th percentile latency
- 575 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 575 ms · metadata changed · 2 tool(s), 1 resource(s), 1 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http zovo-meeting-planner-mcp https://meeting-planner.zovo.one/mcpCodex
codex mcp add zovo-meeting-planner-mcp --url https://meeting-planner.zovo.one/mcpCursor
{
"mcpServers": {
"zovo-meeting-planner-mcp": {
"url": "https://meeting-planner.zovo.one/mcp"
}
}
}Cline
{
"mcpServers": {
"zovo-meeting-planner-mcp": {
"type": "streamableHttp",
"url": "https://meeting-planner.zovo.one/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"zovo-meeting-planner-mcp": {
"type": "http",
"url": "https://meeting-planner.zovo.one/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http zovo-meeting-planner-mcp https://meeting-planner.zovo.one/mcpClaude Desktop
{
"mcpServers": {
"zovo-meeting-planner-mcp": {
"url": "https://meeting-planner.zovo.one/mcp"
}
}
}Windsurf
{
"mcpServers": {
"zovo-meeting-planner-mcp": {
"serverUrl": "https://meeting-planner.zovo.one/mcp"
}
}
}Let your agent find its tools
Find servers like Zovo Meeting Planner MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.