iCal MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@iCal MCP Server list events from my work calendar this week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
iCal MCP Server
A modern Model Context Protocol (MCP) server for managing iCalendar files. This server allows AI assistants to interact with calendar data through a standardized protocol.
Features
Load calendars from:
Local files (
.ics)HTTP/HTTPS URLs
Query events with filters for:
Date ranges
Search text (summary, description, location)
Location
Recurring event expansion
Full CRUD operations:
Create new events
Update existing events
Delete events
Multiple calendar support: Load and manage multiple calendars simultaneously
Read-only mode: HTTP calendars are automatically read-only
Related MCP server: Google Calendar MCP Server
Installation
Using npx (recommended)
You can run the server directly without installation:
npx @jonas/ical-mcpGlobal Installation
npm install -g @jonas/ical-mcp
ical-mcpLocal Development
git clone https://github.com/jnss95/ical-mcp.git
cd ical-mcp
npm install
npm run build
npm startConfiguration
Environment Variables
Calendars are configured using environment variables at startup:
Variable | Description |
| URL or path to a calendar (id defaults to "default") |
| URL or path to a calendar with custom id |
Examples:
Single calendar (id defaults to "default"):
CALENDAR_LINK=https://example.com/calendar.icsMultiple calendars with custom IDs:
CALENDAR_LINK_work=https://example.com/work.ics
CALENDAR_LINK_personal=/path/to/personal.ics
CALENDAR_LINK_holidays=https://example.com/holidays.icsVS Code MCP Configuration
Add to your VS Code settings (.vscode/mcp.json):
{
"servers": {
"ical": {
"type": "stdio",
"command": "npx",
"args": ["@jnss95/ical-mcp"],
"env": {
"CALENDAR_LINK": "https://example.com/your-calendar.ics"
}
}
}
}With multiple calendars:
{
"servers": {
"ical": {
"type": "stdio",
"command": "npx",
"args": ["@jnss95/ical-mcp"],
"env": {
"CALENDAR_LINK_work": "https://example.com/work.ics",
"CALENDAR_LINK_personal": "/path/to/personal.ics"
}
}
}
}Claude Desktop Configuration
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"ical": {
"command": "npx",
"args": ["@jnss95/ical-mcp"],
"env": {
"CALENDAR_LINK": "https://example.com/your-calendar.ics"
}
}
}
}Available Tools
Calendar Management
Tool | Description |
| List all loaded calendars |
| Get metadata about a loaded calendar |
Event Operations
Tool | Description |
| List all events in a calendar |
| Search events with filters |
| Get details of a specific event |
| Create a new event |
| Update an existing event |
| Delete an event |
Tool Examples
List Calendars
{
"tool": "list_calendars",
"arguments": {}
}Search Events
{
"tool": "search_events",
"arguments": {
"calendarId": "work",
"startDate": "2024-01-01T00:00:00Z",
"endDate": "2024-01-31T23:59:59Z",
"searchText": "meeting",
"expandRecurring": true
}
}Create Event
{
"tool": "create_event",
"arguments": {
"calendarId": "work",
"summary": "Team Meeting",
"start": "2024-01-15T10:00:00Z",
"end": "2024-01-15T11:00:00Z",
"description": "Weekly team sync",
"location": "Conference Room A"
}
}Create Recurring Event
{
"tool": "create_event",
"arguments": {
"calendarId": "work",
"summary": "Daily Standup",
"start": "2024-01-15T09:00:00Z",
"end": "2024-01-15T09:15:00Z",
"rrule": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR"
}
}Update Event
{
"tool": "update_event",
"arguments": {
"calendarId": "work",
"eventId": "event-uid@example.com",
"summary": "Updated Meeting Title",
"location": "New Location"
}
}Development
Running Tests
# Run all tests
npm test
# Run tests with coverage
npm run test:coverage
# Run tests in watch mode
npm run test:watchBuilding
# Build TypeScript
npm run build
# Watch mode
npm run watchProject Structure
ical_mcp/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── calendar/
│ │ ├── calendar.ts # Calendar class (CRUD operations)
│ │ ├── loader.ts # Calendar loading utilities
│ │ └── index.ts # Module exports
│ └── types/
│ ├── calendar.ts # Type definitions
│ ├── ical.d.ts # ical.js type declarations
│ └── index.ts # Type exports
├── build/ # Compiled JavaScript
├── package.json
├── tsconfig.json
└── vitest.config.tsLicense
MIT
Available Tools
8 toolscreate_eventB
Create a new event in the calendar.
Inputs: start (required), summary (required), calendarId (required), end, +9 more.
delete_eventB
Delete an event from the calendar.
Inputs: eventId (required), calendarId (required).
get_calendar_infoA
Get metadata and information about a loaded calendar.
Inputs: calendarId (required).
get_eventA
Get detailed information about a specific event by its UID.
Inputs: eventId (required), calendarId (required).
list_calendarsA
List all currently loaded calendars.
Inputs: no named parameters.
list_eventsB
List all events in a calendar, optionally filtered by date range.
Inputs: calendarId (required), limit, offset, endDate, +2 more.
search_eventsC
Search for events matching specified criteria.
Inputs: calendarId (required), limit, endDate, location, +4 more.
update_eventC
Update an existing event.
Inputs: eventId (required), calendarId (required), end, url, +10 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
The tools are mostly distinct: list_calendars vs get_calendar_info for calendar list/detail, and list_events vs search_events for broad vs specific retrieval. The only slight overlap is between list_events and search_events, but their descriptions clarify the difference (range vs criteria).
All tools follow a consistent verb_noun pattern using verbs like list, get, search, create, update, delete. The pattern is uniform across calendar and event resources, making the tool API predictable and easy to navigate.
Eight tools is well-scoped for a calendar server covering two resources (calendars and events). It provides a focused set without unnecessary bulk, and each tool serves a clear purpose.
Events have full CRUD coverage (create, read, list, search, update, delete), and calendars have read operations appropriate for loaded calendars. The surface covers the expected workflows without obvious gaps for the stated purpose.
Maintenance
Related MCP Connectors
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
Create and update subscription calendars from ChatGPT, Claude, or Codex.
Manage Google, Outlook & Apple calendars and create private sync rules from chat.
Connects ChatGPT to your Apple Calendar via a local Mac agent + Vercel relay
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Google Calendar by listing, creating, updating, and deleting events. It also includes functionality to find available time slots for scheduling.-
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to read, create, update, delete, and search Google Calendar events across multiple accounts, check availability, and handle recurring events and invitations through natural language.84 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to connect to CalDAV servers and manage calendars through natural language, including listing calendars and browsing, creating, updating, and deleting events and tasks (VTODOs). Supports recurring events, all-day events, due-date filtering, status changes, and pagination of long task lists.732 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to connect to calendar servers and manage events and tasks, including listing calendars, querying timeframes, creating, updating, completing, and deleting items through tools.732 npmMIT