Koskamo

InviteKit Calendar Files MCP

InviteKit Calendar Files generates RFC 5545 .ics calendar files and add-to-calendar links for various platforms. It supports time zones, daylight saving time, repeating events, reminders, and multi-session schedules without reading or changing existing calendars.

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.

InviteKit Calendar Files MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Zovo
MCP endpoint (Streamable HTTP)
https://calendar-invite.zovo.one/mcp
Vendor documentation

What you can do with it

  • Make a calendar invite for a specific event with time zone and reminder
  • Create an .ics file for a weekly recurring class with session count
  • Generate a calendar file for a multi-session course schedule

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
calendar-invite 1.0.0
MCP protocol
2025-06-18
Tools
2 advertised
Resources
1 advertised
Resource templates
1 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "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.

InviteKit Calendar Files makes standards-compliant .ics calendar files and add-to-calendar links (Google Calendar, Outlook.com, Office 365, Yahoo) for one event, a repeating event, or a schedule of sessions. Pass local times with the event's time zone. It does not read or change anyone's calendar and does not email invitations.

Tools

2 advertised

generate_calendar_event — Generate calendar event file and links
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants a calendar invite, an .ics file, or an add-to-calendar link (Google Calendar, Outlook, Office 365, Yahoo) for one event or one repeating event: a webinar, class, meeting, party, deadline, or launch. Takes the title, local start/end and the event's time zone (city or IANA zone), or dates only for all-day events, plus optional location, description, link, organizer name, reminders, and a repeat rule (daily, weekly on chosen weekdays, monthly by date, nth weekday such as the last Friday, or the first/last weekday of the month, yearly; with count, until date, and skipped dates). Returns a downloadable RFC 5545 .ics file with time zone data, four add-to-calendar links, and the first 5 dates in the event's zone and optional attendee zones, with daylight saving changes flagged. Does not send invitations, read or change anyone's calendar, or track RSVPs. Do not use for a list of different sessions (use generate_event_series) or for finding a meeting time across zones.

generate_calendar_event input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "title",
    "start"
  ],
  "properties": {
    "end": {
      "type": "string",
      "maxLength": 40,
      "description": "Local end YYYY-MM-DDTHH:MM, or just a time HH:MM on the start day, e.g. 21:00. For all-day events, the last day YYYY-MM-DD (inclusive). Default: 1 hour, or 1 day for all-day."
    },
    "url": {
      "type": "string",
      "maxLength": 500,
      "description": "Optional event page or video-call link, e.g. https://example.com/webinar."
    },
    "start": {
      "type": "string",
      "maxLength": 40,
      "description": "Local start YYYY-MM-DDTHH:MM in the event's time zone, e.g. 2026-11-05T18:30, or a date YYYY-MM-DD for an all-day event. No UTC offset."
    },
    "title": {
      "type": "string",
      "maxLength": 200,
      "description": "Event title, e.g. Product launch webinar."
    },
    "all_day": {
      "type": "boolean",
      "description": "true for an all-day event (dates only), e.g. a conference day or a deadline. Automatic when start has no time."
    },
    "location": {
      "type": "string",
      "maxLength": 300,
      "description": "Venue, address, or meeting room shown in the calendar, e.g. Pier 39, San Francisco."
    },
    "time_zone": {
      "type": "string",
      "maxLength": 80,
      "description": "Time zone of the start/end: IANA zone (Europe/Warsaw), city (Chicago, Sydney), or UTC. Required for timed events; not used for all-day events."
    },
    "recurrence": {
      "type": "object",
      "required": [
        "frequency"
      ],
      "properties": {
        "nth": {
          "type": "integer",
          "maximum": 5,
          "minimum": -1,
          "description": "With nth_weekday: 1-5, or -1 for the last, e.g. 2 for the second Tuesday. Default: the start date's position in its month."
        },
        "count": {
          "type": "integer",
          "maximum": 1000,
          "minimum": 1,
          "description": "Total number of dates in the pattern, e.g. 10. Do not combine with until."
        },
        "until": {
          "type": "string",
          "maxLength": 10,
          "description": "Last possible date YYYY-MM-DD (inclusive), e.g. 2027-06-30. Leave out count and until for no end date."
        },
        "interval": {
          "type": "integer",
          "maximum": 99,
          "minimum": 1,
          "description": "Repeat every N days/weeks/months/years, e.g. 2 for every other week. Default 1."
        },
        "weekdays": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 12
          },
          "maxItems": 7,
          "description": "Weekly: the days it repeats on, e.g. [\"TU\",\"TH\"] (default: the start's weekday). Monthly/yearly with nth_weekday: one weekday, e.g. [\"TU\"], or several with nth to pick from the set, e.g. [\"MO\",\"TU\",\"WE\",\"TH\",\"FR\"] with nth -1 for the last weekday of the month."
        },
        "frequency": {
          "enum": [
            "daily",
            "weekly",
            "monthly",
            "yearly"
          ],
          "type": "string",
          "description": "How often it repeats, e.g. weekly."
        },
        "exceptions": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 10
          },
          "maxItems": 60,
          "description": "Dates YYYY-MM-DD to skip, e.g. [\"2026-12-24\"]. Each must be a date the pattern produces."
        },
        "monthly_on": {
          "enum": [
            "day_of_month",
            "nth_weekday"
          ],
          "type": "string",
          "description": "Monthly/yearly: day_of_month (same date, e.g. the 15th; default) or nth_weekday (e.g. the second Tuesday or the last Friday)."
        }
      },
      "description": "Optional repeat rule, e.g. {\"frequency\":\"weekly\",\"weekdays\":[\"TU\",\"TH\"],\"count\":10}."
    },
    "description": {
      "type": "string",
      "maxLength": 1500,
      "description": "Event details or agenda (plain text; line breaks allowed), e.g. Bring a laptop."
    },
    "organizer_name": {
      "type": "string",
      "maxLength": 100,
      "description": "Optional organizer name shown in the details, e.g. Acme Events. No email needed."
    },
    "duration_minutes": {
      "type": "integer",
      "maximum": 20160,
      "minimum": 1,
      "description": "Length in minutes instead of end, e.g. 90."
    },
    "viewer_time_zones": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 80
      },
      "maxItems": 4,
      "description": "Optional places or zones of attendees to show local times for, e.g. [\"New York\", \"Tokyo\"]."
    },
    "reminders_minutes_before": {
      "type": "array",
      "items": {
        "type": "integer",
        "maximum": 40320,
        "minimum": 0
      },
      "maxItems": 3,
      "description": "Up to 3 reminders in minutes before the start, e.g. [15, 1440] for 15 minutes and 1 day before."
    }
  }
}
generate_calendar_event output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "title",
    "all_day",
    "when",
    "time_zone",
    "zone_label",
    "start",
    "end",
    "duration",
    "location",
    "description",
    "url",
    "organizer",
    "reminders",
    "recurrence",
    "occurrences",
    "viewer_zones",
    "links",
    "downloads",
    "notes"
  ],
  "properties": {
    "end": {
      "type": "object",
      "required": [
        "date"
      ],
      "properties": {
        "date": {
          "type": "string"
        },
        "time": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "url": {
      "type": [
        "string",
        "null"
      ]
    },
    "when": {
      "type": "string"
    },
    "links": {
      "type": "object",
      "required": [
        "google",
        "outlook",
        "office365",
        "yahoo"
      ],
      "properties": {
        "yahoo": {
          "type": "string"
        },
        "google": {
          "type": "string"
        },
        "outlook": {
          "type": "string"
        },
        "office365": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "start": {
      "type": "object",
      "required": [
        "date"
      ],
      "properties": {
        "date": {
          "type": "string"
        },
        "time": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "title": {
      "type": "string"
    },
    "all_day": {
      "type": "boolean"
    },
    "duration": {
      "type": "string"
    },
    "location": {
      "type": [
        "string",
        "null"
      ]
    },
    "downloads": {
      "type": "object",
      "required": [
        "ics"
      ],
      "properties": {
        "ics": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "organizer": {
      "type": [
        "string",
        "null"
      ]
    },
    "reminders": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "time_zone": {
      "type": [
        "string",
        "null"
      ]
    },
    "recurrence": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "rrule",
            "text",
            "total",
            "count",
            "until",
            "last_date",
            "exceptions"
          ],
          "properties": {
            "text": {
              "type": "string"
            },
            "count": {
              "type": [
                "number",
                "null"
              ]
            },
            "rrule": {
              "type": [
                "string",
                "null"
              ]
            },
            "total": {
              "type": [
                "number",
                "null"
              ]
            },
            "until": {
              "type": [
                "string",
                "null"
              ]
            },
            "last_date": {
              "type": [
                "string",
                "null"
              ]
            },
            "exceptions": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "zone_label": {
      "type": [
        "string",
        "null"
      ]
    },
    "description": {
      "type": [
        "string",
        "null"
      ]
    },
    "occurrences": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": {}
      }
    },
    "viewer_zones": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
generate_calendar_event annotations
{
  "title": "Generate calendar event file and links",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_event_series — Generate calendar file for a schedule
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants one calendar file (.ics) that adds several different events at once: a course or class schedule, a training program, a conference agenda, match fixtures, or a list of webinars on irregular dates. Takes 1-40 sessions (each with its own start, end or duration, optional title, location and note) plus a shared time zone, location, details, link, organizer name and reminders. Returns one .ics file with one event per session and a dated list of the sessions. Does not make add-to-calendar web links per session, send invitations, or change anyone's calendar. Do not use for an event that repeats on a regular pattern (use generate_calendar_event with recurrence).

generate_event_series input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "events"
  ],
  "properties": {
    "url": {
      "type": "string",
      "maxLength": 500,
      "description": "Optional shared link, e.g. a course page or video-call link: https://example.com/course."
    },
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "start"
        ],
        "properties": {
          "end": {
            "type": "string",
            "maxLength": 40,
            "description": "Local end time HH:MM or YYYY-MM-DDTHH:MM, e.g. 19:30. All-day: last day YYYY-MM-DD."
          },
          "start": {
            "type": "string",
            "maxLength": 40,
            "description": "Local start YYYY-MM-DDTHH:MM, e.g. 2027-01-12T18:00, or YYYY-MM-DD for all-day."
          },
          "title": {
            "type": "string",
            "maxLength": 200,
            "description": "Session title, e.g. Week 1: Introduction. Default: calendar_name with the session number."
          },
          "all_day": {
            "type": "boolean",
            "description": "true for a date-only event, e.g. an exam day."
          },
          "location": {
            "type": "string",
            "maxLength": 300,
            "description": "Location for this session if it differs, e.g. Room 204."
          },
          "description": {
            "type": "string",
            "maxLength": 300,
            "description": "Short note for this session, e.g. Quiz on chapter 3."
          },
          "duration_minutes": {
            "type": "integer",
            "maximum": 20160,
            "minimum": 1,
            "description": "Length in minutes instead of end, e.g. 90."
          }
        }
      },
      "maxItems": 40,
      "minItems": 1,
      "description": "1-40 distinct sessions with their own dates, e.g. [{\"title\":\"Week 1\",\"start\":\"2027-01-12T18:00\",\"end\":\"19:30\"}]."
    },
    "location": {
      "type": "string",
      "maxLength": 300,
      "description": "Default location for every session, e.g. Community Center, Room 2."
    },
    "time_zone": {
      "type": "string",
      "maxLength": 80,
      "description": "Time zone for all sessions: IANA zone or city, e.g. America/Chicago. Required when sessions have times."
    },
    "description": {
      "type": "string",
      "maxLength": 600,
      "description": "Shared details added to every session, e.g. Bring your workbook."
    },
    "calendar_name": {
      "type": "string",
      "maxLength": 100,
      "description": "Name for the schedule, e.g. Spanish A1 evening course. Shown as the calendar name and default title."
    },
    "organizer_name": {
      "type": "string",
      "maxLength": 100,
      "description": "Optional organizer or teacher name, e.g. Ms. Rivera."
    },
    "reminders_minutes_before": {
      "type": "array",
      "items": {
        "type": "integer",
        "maximum": 40320,
        "minimum": 0
      },
      "maxItems": 3,
      "description": "Up to 3 reminders for every session, minutes before, e.g. [60]."
    }
  }
}
generate_event_series output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "calendar_name",
    "time_zone",
    "zone_label",
    "event_count",
    "first_date",
    "last_date",
    "location",
    "reminders",
    "events",
    "downloads",
    "notes"
  ],
  "properties": {
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": {}
      }
    },
    "location": {
      "type": [
        "string",
        "null"
      ]
    },
    "downloads": {
      "type": "object",
      "required": [
        "ics"
      ],
      "properties": {
        "ics": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "last_date": {
      "type": "string"
    },
    "reminders": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "time_zone": {
      "type": [
        "string",
        "null"
      ]
    },
    "first_date": {
      "type": "string"
    },
    "zone_label": {
      "type": [
        "string",
        "null"
      ]
    },
    "event_count": {
      "type": "number"
    },
    "calendar_name": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
generate_event_series annotations
{
  "title": "Generate calendar file for a schedule",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

calendar-invite-widget — InviteKit Calendar Files view

Advertised by the server during the last successful anonymous check.

Interactive view for InviteKit Calendar Files.

calendar-invite-widget URI
ui://widget/calendar-invite-v3-1.0.0-0f34a3cc4925f272dfeabfda0e659d26216f9e69daf2dc0a6d0da75c13629661.html

MIME type: text/html;profile=mcp-app

calendar-invite-widget-legacy — InviteKit Calendar Files view (previous versions)

Advertised by the server during the last successful anonymous check.

calendar-invite-widget-legacy URI template
ui://widget/calendar-invite-{version}.html

MIME type: text/html;profile=mcp-app

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
564 ms
95th percentile latency
564 ms

Maintenance history

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

  • · probe · passed · 564 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.

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 invitekit-calendar-files-mcp https://calendar-invite.zovo.one/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 invitekit-calendar-files-mcp --url https://calendar-invite.zovo.one/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable invitekit-calendar-files-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "invitekit-calendar-files-mcp": {
      "url": "https://calendar-invite.zovo.one/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "invitekit-calendar-files-mcp": {
      "type": "streamableHttp",
      "url": "https://calendar-invite.zovo.one/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start invitekit-calendar-files-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "invitekit-calendar-files-mcp": {
      "type": "http",
      "url": "https://calendar-invite.zovo.one/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 invitekit-calendar-files-mcp https://calendar-invite.zovo.one/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "invitekit-calendar-files-mcp": {
      "url": "https://calendar-invite.zovo.one/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": {
    "invitekit-calendar-files-mcp": {
      "serverUrl": "https://calendar-invite.zovo.one/mcp"
    }
  }
}

Let your agent find its tools

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