Skip to main content
Glama
iCal MCP Server

iCal MCP Server

by jnss95

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

You can run the server directly without installation:

npx @jonas/ical-mcp

Global Installation

npm install -g @jonas/ical-mcp
ical-mcp

Local Development

git clone https://github.com/jnss95/ical-mcp.git
cd ical-mcp
npm install
npm run build
npm start

Configuration

Environment Variables

Calendars are configured using environment variables at startup:

Variable

Description

CALENDAR_LINK

URL or path to a calendar (id defaults to "default")

CALENDAR_LINK_{id}

URL or path to a calendar with custom id

Examples:

Single calendar (id defaults to "default"):

CALENDAR_LINK=https://example.com/calendar.ics

Multiple 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.ics

VS 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_calendars

List all loaded calendars

get_calendar_info

Get metadata about a loaded calendar

Event Operations

Tool

Description

list_events

List all events in a calendar

search_events

Search events with filters

get_event

Get details of a specific event

create_event

Create a new event

update_event

Update an existing event

delete_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:watch

Building

# Build TypeScript
npm run build

# Watch mode
npm run watch

Project 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.ts

License

MIT

Available Tools

8 tools
create_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

    A3.5/5.0

    Scored across 8 tools

    Disambiguation4/5

    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).

    Naming Consistency5/5

    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.

    Tool Count5/5

    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.

    Completeness5/5

    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

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to manage Google Calendar by listing, creating, updating, and deleting events. It also includes functionality to find available time slots for scheduling.
      -
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables 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 npm
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables 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 npm
      MIT