esports-ics
Esports calendar ICS / iCal. Provides calendar events for most games: Rocket League, Counter-Strike, League of Legends, Apex, ... Based on Liquipedia.
Documentation
๐ Esports Calendar - Sync Esports Matches to Your Calendar using iCS / iCAL
Automatically sync esports matches to your calendar with customizable filters for competitions and teams. Works with Google Calendar, Apple Calendar, Outlook, and any calendar application that supports iCal/ICS feeds.
Consider giving it a โญ๏ธ if you like it to show your support!
๐ Table of Contents
Features
What does this do?
- 50+ Supported Games: Rocket League, League of Legends, CS2, Valorant, Dota 2, Overwatch, and many more
- Universal Compatibility: Works with Google Calendar, Apple Calendar, Outlook, iOS, Android
- Custom Filters: Filter by competition names, team names, or both
- Real-time Updates: Calendar automatically updates when new matches are scheduled
- Preset Configurations: Pre-built filters for popular tournaments (RLCS, Worlds, Majors)
- Advanced Options: Regex support, team name matching, past match inclusion
- Web Interface: User-friendly URL builder with live preview
- MCP Server: Plug our MCP to your AI Chatbot and get realtime information!
Quick Start
Option 1: Use the Web Interface _(For non-devs)_
1. Visit ics.snwfdhmp.com
2. Select your game and customize filters
3. Click "๐ Add to Calendar" or copy the generated URL
4. Import into your calendar application
Option 2: Direct API Usage (Recommended)
Generate calendar URLs using this format:
https://ics.snwfdhmp.com/matches.ics?url=LIQUIPEDIA_URL&[OPTIONS]Example: Rocket League RLCS matches from the RLCS series
https://ics.snwfdhmp.com/matches.ics?url=https%3A%2F%2Fliquipedia.net%2Frocketleague%2FLiquipedia%3AMatches&competition_regex=RLCSOption 3: Use Presets
Access pre-configured tournament feeds:
https://ics.snwfdhmp.com/preset/PRESET_NAMEAvailable presets:
- `rlcs` - All RLCS matches
- `rlcs-worlds` - RLCS World Championships
- `rlcs-major` - RLCS Major tournaments
- `rocket-league` - All Rocket League matches
> If you want to add your preset, feel free to update the preset file
Option 4: Use the MCP
Import this server into ChatGPT or any other MCP client: `https://esports-calendar-mcp.snwfdhmp.com/`
What you get
- Event summary contains:
- teams short names (eg: VIT vs KC)
- competition name
- type of match (eg: Bo3) if available
- score if the match already started
- Event details contains:
- team full names (eg: Vitality vs Karmine Corp)
- competition name
- type of match (eg: Bo3) if available
- score if the match already started
Additional iCal tags
The event ICS also contains some useful custom iCal tags for scripting or custom integrations.
| name | example |
|---|---|
| X-LIQUIPEDIATOICAL-COMPETITION | RLCS Worlds 2025 |
| X-LIQUIPEDIATOICAL-TEAMLEFT | KC |
| X-LIQUIPEDIATOICAL-TEAMLEFTFULLNAME | Karmine Corp |
| X-LIQUIPEDIATOICAL-TEAMLEFTURL | https://liquipedia.net/rocketleague/Karmine_Corp |
| X-LIQUIPEDIATOICAL-TEAMLEFTLOGO | https://liquipedia.net/commons/images/thumb/1/1e/Karmine_Corp_2020_lightmode.png/600px-Karmine_Corp_2020_lightmode.png |
| X-LIQUIPEDIATOICAL-TEAMRIGHT | G2 |
| X-LIQUIPEDIATOICAL-TEAMRIGHTFULLNAME | G2 Esports |
| X-LIQUIPEDIATOICAL-TEAMRIGHTURL | https://liquipedia.net/rocketleague/G2_Esports |
| X-LIQUIPEDIATOICAL-TEAMRIGHTLOGO | https://liquipedia.net/commons/images/thumb/d/da/G2_Esports_2020_lightmode.png/600px-G2_Esports_2020_lightmode.png |
| X-LIQUIPEDIATOICAL-WINNERSIDE | left |
| X-LIQUIPEDIATOICAL-DESCRIPTOR | Grand Final |
| X-LIQUIPEDIATOICAL-DESCRIPTORMOREINFO | ... |
API Documentation
Base Endpoint
GET /matches.ics[?opts]Query Parameters
| Parameter | Type | Description | Example | ||
|---|---|---|---|---|---|
| `url` | string | Required. Liquipedia matches page URL | `https://liquipedia.net/rocketleague/Liquipedia:Matches` | ||
| `competition_regex` | string | Filter competitions by regex pattern | `RLCS.*World` | ||
| `teams_regex` | string | Filter teams by regex pattern | `KC\ | G2\ | VIT` |
| `teams_regex_use_fullnames` | boolean | Use full team names instead of abbreviations | `true` | ||
| `match_both_teams` | boolean | Require both teams to match the filter | `true` | ||
| `condition_is_or` | boolean | Use OR logic between competition and team filters | `true` | ||
| `ignore_tbd` | boolean | Skip matches with undefined teams | `true` | ||
| `past_match_allow_seconds` | number | Include past matches within X seconds | `86400` |
Multiple URL Support
Combine multiple Liquipedia pages in one calendar:
/matches.ics
?1_url=URL1
&2_url=URL2
&2_competition_regex=PATTERN_FOR_2
&3_url=URL3
&3_teams_regex=PATTERN_FOR_3It will merge events from the 3 configurations
Preset Endpoint
GET /preset/:nameSupported Games
The service supports 50+ esports titles including:
Popular Games:
- Rocket League
- League of Legends
- Counter-Strike 2
- Valorant
- Dota 2
- Overwatch
- Starcraft II
- Trackmania
- And many more...
View complete list of supported games
Troubleshooting
Common Issues
No matches found?
- Verify the Liquipedia URL is correct
- Check if the game has upcoming matches
- Try broader filter criteria
- For Battle Royale and games whose events do not advertise as "Team A vs Team B", use `allow_missing_teams=true`
- Open an issue if a supported game isn't working
Calendar not updating?
- Check if your calendar app supports automatic refresh
- Try removing and re-adding the calendar subscription
Getting Help
- ๐ Open an issue on GitHub
- ๐ฌ Contact on Discord: `mjo___`
- ๐ Test your URL at ics.snwfdhmp.com
Contributing
Prerequisites
- Node.js
- pnpm
Setup
# Clone the repository
git clone https://github.com/snwfdhmp/liquipedia-to-ical.git
cd liquipedia-cal
# Install dependencies
pnpm install
# Start development server
pnpm run dev
# Run tests
pnpm run testTesting
How to run the tests
The project includes comprehensive testing for all supported games:
# Run all tests
pnpm run test
# Run tests and only show failing tests
pnpm run test -o
# Run tests for Rocket League
pnpm run test "Rocket League"
# Run tests for Rocket League and verbose output
pnpm run test -v "Rocket League"Custom Presets
Add new presets in `src/presets.ts`:
export const presets: Record = {
"my-preset": [
"https://ics.snwfdhmp.com/matches.ics?url=...",
],
}Made with โค๏ธ for the esports community
*Star โญ this repository if you find it useful!*
*โค๏ธ Sponsoring helps me spending time on this and paying for the servers!*
Frequently asked questions
What is esports-ics?
esports-ics is Esports calendar ICS / iCal. Provides calendar events for most games: Rocket League, Counter-Strike, League of Legends, Apex, ... Based on Liquipedia.
How do I install esports-ics?
Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.
Is esports-ics open source?
Yes โ it is hosted on GitHub at https://github.com/snwfdhmp/esports-ics and has 22 stars.
Related MCP tools
Model Context Protocol Servers
The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra
A MCP for Claude Desktop / Claude Code / Windsurf / Cursor to build n8n workflows for you
MCP server to provide Figma layout information to AI coding agents like Cursor
The world's best AI personal assistant for email. Open source app to help you reach inbox zero fast.
Instant is the best backend for AI-coded apps. You get auth, permissions, storage, presence, and streams โ everything you need to ship apps your users will love.
Run your own MCP server? See who uses it and what to fix.
Measure it with TrackMCP