ICS Calendar MCP Server
A lightweight MCP (Model Context Protocol) server for reading ICS calendar feeds with proper recurring event expansion.
Features
- Fetch and parse ICS calendar feeds (Outlook, Google Calendar, etc.)
- Properly expands recurring events using
recurring-ical-events - Caches calendar data to reduce API calls
- Timezone-aware event handling
- Simple configuration via environment variables
Installation
Using uvx (recommended)
uvx --from git+https://github.com/adamchrabaszcz/ics-calendar-mcp ics-calendar-mcp
Using pip
pip install git+https://github.com/adamchrabaszcz/ics-calendar-mcp
From source
git clone https://github.com/adamchrabaszcz/ics-calendar-mcp
cd ics-calendar-mcp
pip install -e .
Configuration
Set the following environment variables:
| Variable | Required | Default | Description |
|---|---|---|---|
ICS_CALENDAR_URL |
Yes | - | URL to the ICS calendar feed |
ICS_CACHE_TTL |
No | 300 | Cache duration in seconds |
ICS_TIMEZONE |
No | Europe/Warsaw | Default timezone for events |
Example: Outlook Calendar
export ICS_CALENDAR_URL="https://outlook.office365.com/owa/calendar/xxx@domain.com/yyy/calendar.ics"
MCP Tools
get_events_today
Get all calendar events for today.
{
"date": "2024-03-10",
"events": [...],
"count": 3
}
get_events_range
Get events within a date range.
Parameters:
start_date(string): Start date in ISO format (YYYY-MM-DD)end_date(string): End date in ISO format (YYYY-MM-DD)
{
"start_date": "2024-03-01",
"end_date": "2024-03-31",
"events": [...],
"count": 15
}
get_event_details
Get detailed information about a specific event.
Parameters:
event_uid(string): The unique identifier of the event
list_recurring_events
List all recurring events with their recurrence rules.
{
"events": [
{
"uid": "event-123",
"summary": "Weekly Standup",
"recurrence": {
"frequency": "WEEKLY",
"days": ["MO", "TU", "WE", "TH", "FR"],
"description": "weekly on Monday, Tuesday, Wednesday, Thursday, Friday"
}
}
],
"count": 5
}
search_events
Search for events matching a query.
Parameters:
query(string): Search termstart_date(string, optional): Start date for search rangeend_date(string, optional): End date for search range
Claude Code Configuration
Add to your ~/.claude/mcp.json:
{
"mcpServers": {
"ics-calendar": {
"command": "uvx",
"args": ["--from", "git+https://github.com/adamchrabaszcz/ics-calendar-mcp", "ics-calendar-mcp"],
"env": {
"ICS_CALENDAR_URL": "https://your-calendar-url.ics"
}
}
}
}
Development
Setup
git clone https://github.com/adamchrabaszcz/ics-calendar-mcp
cd ics-calendar-mcp
pip install -e ".[dev]"
Run tests
pytest tests/
Run locally
ICS_CALENDAR_URL="https://your-calendar.ics" python -m ics_calendar_mcp
License
MIT
Metadata
Release files for ics-calendar-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| ics_calendar_mcp-0.1.0.tar.gz | 8.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ics_calendar_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 15.9 kB
Release files / ics_calendar_mcp-0.1.0.tar.gz
| Download URL | ics_calendar_mcp-0.1.0.tar.gz |
|---|---|
| Size | 8.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
83daf18ac1fc6f1cd2e8d4ca22430bc12eaeb6d9457ede418049f530bace4281
|
|
BLAKE2b-256 checksum How to use checksums |
244a02d0b1e0e3e8de45ac7cd94ea9aa876c87d34db3d98b6926b9cd35e6cc45
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / ics_calendar_mcp-0.1.0-py3-none-any.whl
| Download URL | ics_calendar_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 7.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1d772a788bae663f83317b9da6bd2dfffc520793201f73b1f97aad38946ed125
|
|
BLAKE2b-256 checksum How to use checksums |
708250270b267e4207fd6953baa0a19df8fd385198466e1ad96890fd8a8e3882
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for ics-calendar-mcp 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.