Skip to main content

MCP server exposing a remote iCalendar (webcal) feed as queryable read-only tools

Project description

webcal-mcp

A small read-only Model Context Protocol server that exposes one or more remote iCalendar feeds (the webcal:// or .ics kind) as queryable tools for an LLM agent.

Install

pipx install webcal-mcp

Or from a checkout:

pipx install .

This puts a webcal-mcp script on your PATH. Python 3.10 or later is required.

Configure

Create ~/.config/webcal-mcp/config.toml (or point WEBCAL_MCP_CONFIG at any other path). See config.example.toml:

default_ttl_seconds = 900

[calendars.personal]
url = "webcal://example.com/personal.ics"
description = "Personal calendar"

[calendars.work]
url = "https://example.com/work.ics"
description = "Work calendar"

webcal:// and webcals:// URLs are normalized to https://.

Local calendars via EventKit (macOS)

On macOS, any calendar already set up in Calendar.app — iCloud, local, subscribed .ics, CalDAV, Google — can be read directly through Apple's EventKit framework. No webcal:// URL hunting required:

[calendars.personal]
source = "eventkit"
identifier = "Personal"   # display name from Calendar.app, or its UUID
description = "iCloud personal calendar"

identifier matches the calendar's display name first, then falls back to its UUID. Run webcal-mcp list-eventkit to see what's available (this dumps title uuid [source] for every calendar).

First use triggers a one-time TCC prompt for Calendar access; the grant is bound to the binary that invokes EventKit (the Python interpreter behind webcal-mcp), so re-granting may be needed if you reinstall. The PyObjC dependency installs automatically on macOS only.

Run

webcal-mcp

The server speaks MCP over stdio. Wire it into an MCP-aware client (Claude Desktop, Claude Code, etc.) by pointing at the webcal-mcp script. For example, for Claude Code:

claude mcp add webcal -- webcal-mcp

Tools

Tool Purpose
list_calendars Names, descriptions, capability flags for the configured calendars. Re-reads the config file, so calendars added or changed since startup appear without restarting the server.
list_events Events in a date range, with optional query, categories, location filters and brief / full / markdown detail modes. Either bound may be omitted for open-ended windows.
events_on All events occurring on a given date.
get_event Full record for a single UID.

list_events and events_on accept calendar as a single name, a list of names, or omitted — omitting it queries all configured calendars. When more than one calendar is queried, each event is tagged with its source calendar and results are merged and sorted by start time; an unreachable calendar is skipped (best-effort) rather than failing the whole request.

Recurring events are expanded within the requested window. Responses are cached in memory with a per-calendar TTL; revalidation uses HTTP ETag and Last-Modified.

Read-only

Calendars are read-only today. The CalendarSource abstraction reserves a writable capability flag so future write-capable backends can be added without changing the tool surface.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

webcal_mcp-0.2.1.tar.gz (21.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

webcal_mcp-0.2.1-py3-none-any.whl (18.5 kB view details)

Uploaded Python 3

File details

Details for the file webcal_mcp-0.2.1.tar.gz.

File metadata

  • Download URL: webcal_mcp-0.2.1.tar.gz
  • Upload date:
  • Size: 21.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for webcal_mcp-0.2.1.tar.gz
Algorithm Hash digest
SHA256 75eba790313eb50583cc7a1bbf0a75be7b0e1fa733a95d9738f2e202f6775333
MD5 8af680ce38def09b56657e0f404c1668
BLAKE2b-256 c57d94d199f28c32223e70c6b307f0955c604a85f2f0728ce55d82cc504cb07f

See more details on using hashes here.

Provenance

The following attestation bundles were made for webcal_mcp-0.2.1.tar.gz:

Publisher: publish.yml on mnot/webcal-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file webcal_mcp-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: webcal_mcp-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 18.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for webcal_mcp-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 eb656a020ba6b2dc4e4e4aeffd8604e84797820f22a5a898178d5799c219304a
MD5 e6bcd7d2252c1e5b582d58bf9f4efb37
BLAKE2b-256 4efb33a7b41f6f3291c2ef701095539529a68d5768d5140e5bd22ca0dbd9e5b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for webcal_mcp-0.2.1-py3-none-any.whl:

Publisher: publish.yml on mnot/webcal-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page