Fantastical MCP
Click on "Install 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., "@Fantastical MCPWhat's on my calendar today?"
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.
Fantastical MCP
An MCP server that gives AI assistants read/write access to your Fantastical calendar on macOS.
What it does
fantastical-mcp reads calendar events directly from Fantastical's local SQLite database and creates events via Fantastical's x-fantastical3:// URL scheme. No TCC permissions, no API keys, no network access -- it works entirely offline using the data Fantastical already stores on your Mac.
Read -- Query events by date range, calendar, or full-text search
Recurring events -- Series are expanded into per-occurrence results with timezone-aware rule evaluation and de-duplication of moved occurrences
Write -- Create events using Fantastical's natural language parser
Navigate -- Open Fantastical to a specific date
Related MCP server: calendar-app-mcp
Installation
Prerequisites
macOS
Fantastical installed with at least one calendar
An MCP client, such as Claude Desktop or Claude Code
uv Python package manager:
brew install uv
Install via uvx (Any MCP Client)
Fantastical MCP is published on PyPI and can be run directly with uvx:
uvx fantastical-mcpConfigure your MCP client to use uvx with fantastical-mcp as the argument.
Claude Desktop
Option 1: One-Click Install (Recommended)
Download the latest
.mcpbfile from the releases pageDouble-click the file
Done!
Option 2: Manual Config
Go to Claude → Settings → Developer → Edit Config
Add the Fantastical server:
{
"mcpServers": {
"fantastical": {
"command": "uvx",
"args": ["fantastical-mcp"]
}
}
}Save and restart Claude Desktop
Claude Code
claude mcp add-json fantastical '{"command":"uvx","args":["fantastical-mcp"]}'To make it available globally (across all projects), add -s user:
claude mcp add-json -s user fantastical '{"command":"uvx","args":["fantastical-mcp"]}'Verify it's working
After installation:
If using Claude Desktop, you should see "Fantastical MCP" in the "Search and tools" list
Try asking: "What's on my calendar today?"
Sample Usage
"What's on my calendar today?"
"Do I have any meetings on Thursday?"
"Create a lunch meeting with Sarah tomorrow at noon at The Italian Place"
"When am I free this Wednesday afternoon?"
"Show me all events from my Work calendar this week"
"Do I have any pending event invitations?"
Tips
Create a project in Claude with custom instructions that explain how you organise your calendars. Tell Claude which calendars to prioritise and how you like events formatted.
Pair with a task management MCP server (like things-mcp) so Claude can cross-reference your tasks and calendar, block time for deep work, or create todos from upcoming meetings.
Use
get_availabilityto quickly find free slots: "When am I free for a 90-minute block this week?"
Local Development
git clone https://github.com/jaydenk/fantastical-mcp.git
cd fantastical-mcp
uv venv && uv pip install -e ".[test]"See docs/configuration.md for environment variables, calendar exclusion, and transport options.
Available tools
Tool | Description |
| All events for today, grouped by calendar |
| Events for the next N days, grouped by date |
| List all calendars with event counts |
| Full details for a specific event by ID |
| Full-text search across titles, locations, notes, attendees |
| Events from a specific calendar |
| Events in an arbitrary date window (past or future), optionally scoped to one calendar |
| Free/busy time slots for a date |
| Upcoming recurring events, optionally filtered by calendar |
| Pending event invitations that need a response |
| Most recently added or synced events |
| Structured JSON variant of |
| Structured JSON variant of |
| Structured JSON variant of |
| Create an event using natural language |
| Open Fantastical's mini calendar to a date |
See docs/tools.md for parameters, types, defaults, and example output.
Troubleshooting
If it's not working:
Make sure Fantastical is installed and has been opened at least once
The Fantastical database needs to exist for the server to read events
Claude Desktop can't find
uvxInstall uv globally with Homebrew (
brew install uv)Alternative: Use the full path to
uvxin your config. Find it withwhich uvx(typically/Users/USERNAME/.local/bin/uvx)
"Database not found" errors
Fantastical stores its database at
~/Library/Group Containers/group.com.flexibits.fantastical2.mac/. Ensure this path exists and is accessible.
System calendars cluttering results
Set
FANTASTICAL_EXCLUDED_CALENDARSto hide calendars like Weather or Openings. See docs/configuration.md for details.
Limitations
No update or delete -- Fantastical's URL scheme only supports event creation. Modification and deletion require EventKit, which needs TCC permissions.
macOS only -- Relies on Fantastical's macOS database location and the
opencommand.Read-only database access -- The database is opened in
?mode=roto prevent any risk of corruption.Blob format dependency -- The
NSKeyedArchiverserialisation format is an internal detail of Fantastical and could change between versions. An FTS fallback path mitigates this.
Documentation
Tool reference -- Detailed parameters and example output for every tool
Configuration guide -- Environment variables, transport options, calendar exclusion
How it works -- Technical architecture and design decisions
Development guide -- Project structure, testing, and contributing
Licence
Available Tools
16 toolscreate_eventA
Create a new event in Fantastical using natural language.
Fantastical's parser handles dates, times, locations, and recurrence naturally. Examples: "Lunch with Sara tomorrow at noon at The Crafers Hotel", "Weekly team standup every Monday at 9am".
Args: sentence: Natural language event description. calendar: Optional calendar name to create the event in. add_immediately: If True, add without showing confirmation UI (default False).
| Name | Required | Description | Default |
|---|---|---|---|
| sentence | Yes | ||
| calendar | No | ||
| add_immediately | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It explains the natural language parser and the add_immediately parameter's effect on UI. However, it omits details on permissions, error handling, or side effects like overriding existing events.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly concise with a few sentences and bullet-style param list. It includes examples. Could be slightly more structured but effectively conveys key info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be detailed in description. However, the description lacks mentions of error handling, permission requirements, or what happens if the natural language parsing fails. Given the tool's complexity, it could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the 'sentence' parameter as natural language description, 'calendar' as optional calendar name, and 'add_immediately' as skipping confirmation. This adds significant meaning beyond the schema's type/default info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new event in Fantastical using natural language.' It specifies the verb (create) and resource (event in Fantastical), and distinguishes from sibling tools that are all get/search operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use (creating events with natural language) and includes examples. However, it does not explicitly state when not to use this tool or mention alternative tools for other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_availabilityA
Show free/busy time slots for a specific date.
Args: date: Date in YYYY-MM-DD format. calendars: Optional list of calendar names to check. If omitted, checks all calendars.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| calendars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It states that the tool shows free/busy slots, but does not explain the nature of the output (e.g., blocked vs. free intervals), whether it considers only existing events or other availability factors, or if there are limitations like time range or permissions. This lack of detail limits transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a single introductory line followed by a brief 'Args' section. Every sentence serves a purpose, and the structure is front-loaded with the core function. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters) and the existence of an output schema, the description is partially adequate. However, it misses context about how free/busy slots are determined (e.g., based on events from specified calendars) and what the output represents (time intervals with status?). With many sibling event tools, more context would help an agent decide when to use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description's parameter explanations are essential. It adds value by specifying the date format ('YYYY-MM-DD') and clarifying that the calendars parameter defaults to checking all calendars. This goes beyond the schema's type annotations. However, it could further explain acceptable values for calendar names (e.g., from get_calendars).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Show free/busy time slots for a specific date.' This is a specific verb-resource combination that distinguishes it from sibling tools like get_events_in_range (which returns detailed events) or show_date (which may show a full schedule). The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There is no mention of use cases, prerequisites, or when not to use it. Given the many sibling tools for fetching events, the lack of context makes it harder for an AI agent to choose appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_calendarsA
List all calendars with their event counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but adequately discloses that the tool is a read-only listing operation returning calendar names with counts. No side effects or additional behavioral details are needed for this simple tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is perfectly front-loaded and contains no extraneous words. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description is complete. It succinctly captures the essential function: listing all calendars with event counts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the baseline is 4. The description does not need to add parameter semantics, and it correctly omits any irrelevant information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all calendars with their event counts, specifying both the resource (calendars) and the additional data (event counts). This distinguishes it from sibling tools focused on individual events or different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool over alternatives. It does not mention any prerequisites, limitations, or exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventA
Get full details for a specific event by its ID.
Args: event_id: The event ID (shown in parentheses in event listings).
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states it 'gets' details, implying a read operation, but does not mention any side effects, authentication requirements, rate limits, or constraints. This lacks transparency for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one sentence for the tool purpose and one line for the parameter. Every word is useful and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and an output schema (so return values are documented elsewhere), the description is nearly complete. It explains the purpose and the parameter source. Minor gaps: no mention of error handling or required permissions, but acceptable given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter (event_id) with 0% description coverage. The description adds context: 'The event ID (shown in parentheses in event listings).' This tells the agent where to find the ID, which is helpful beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get full details for a specific event by its ID.' This is a specific verb-resource pair, and it distinguishes from sibling tools like get_events_by_calendar or search_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (when you have a specific event ID) via the parameter hint, but does not explicitly state when not to use it or compare with alternatives like get_events_in_range or search_events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_jsonA
Machine-readable variant of get_event. Returns None-valued fields when a value is absent rather than omitting them, so clients can treat the shape as stable.
Args: event_id: The event rowid (as returned by get_today_json etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description discloses a key behavioral trait: returning None-valued fields instead of omitting them. It also implies read-only behavior via 'variant of get_event'. However, it does not mention authorization or rate limits, but these are not critical for a simple get tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loading the purpose and behavior, followed by a clear parameter explanation. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description appropriately focuses on the key behavioral difference and parameter source. It does not need to detail return values. However, it could mention any prerequisites or error scenarios for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains that event_id is the event rowid as returned by other tools, adding context beyond the schema's integer type. Since schema coverage is 0%, this compensation is valuable, though there is only one parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a machine-readable variant of get_event, specifying that it returns None-valued fields when absent for a stable shape. This distinguishes it from get_event and other siblings, providing a clear purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for machine readability and stable shape, but does not explicitly state when to prefer this over siblings like get_event or get_today_json. The mention of event_id being returned by get_today_json etc. hints at a workflow, but lacks clear guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_events_by_calendarA
Get events from a specific calendar.
Args: calendar: Calendar name (e.g. "Work", "Personal"). Use get_calendars to see available names. days: Number of days to look ahead (default 30).
| Name | Required | Description | Default |
|---|---|---|---|
| calendar | Yes | ||
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses the lookahead behavior (days parameter with default 30) but does not mention sorting, timezone handling, or whether events are future-only from now. Partial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is short and front-loaded with the main purpose. The Args section is helpful but slightly verbose with code block formatting. Each sentence adds value, though the formatting could be streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema is present, so return structure is covered. However, missing details like pagination, maximum days allowed, error handling, or event ordering. Adequate for a simple list tool but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but the description compensates by explaining calendar as a name string and days as number of days ahead with a default value. Adds meaning beyond the raw schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get events from a specific calendar', identifying the verb (get) and resource (events from calendar). It distinguishes from sibling tools like get_calendars (which lists calendars) and get_events_in_range (which may not be calendar-specific).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a hint to use get_calendars to find available calendar names, but does not explicitly state when to use this tool versus alternatives like get_events_in_range or get_upcoming. Usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_events_in_rangeA
Get events in an arbitrary date window (past or future), grouped by date.
Specify the window in exactly ONE of two ways (not both):
Absolute: pass both
startandendas "YYYY-MM-DD".endis inclusive of the whole day (e.g. start="2026-05-28", end="2026-06-10" covers all of the 10th).Relative: pass
days_back(a positive integer) for events from that many days ago through the end of today.
Args: calendar: Optional calendar name to scope to (use get_calendars for names). Omit to query all calendars — note that an event mirrored across several calendars then appears once per calendar; scope to a single calendar to get a clean, duplicate-free list. start: Absolute-mode start date, "YYYY-MM-DD". end: Absolute-mode end date, "YYYY-MM-DD" (inclusive). days_back: Relative-mode window size in days.
| Name | Required | Description | Default |
|---|---|---|---|
| calendar | No | ||
| start | No | ||
| end | No | ||
| days_back | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that events are grouped by date, end is inclusive, and duplicate behavior across calendars. It could mention it is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear intro, two usage modes, and an Args section. It is slightly verbose but efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity and lack of annotations, the description is comprehensive, covering all parameters, edge cases, and grouping behavior. Output schema exists, so return values are not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by explaining each parameter thoroughly: calendar, start, end, days_back, including format, constraints, and the mutually exclusive modes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get events in an arbitrary date window (past or future), grouped by date.' This is specific and distinguishes it from sibling tools like get_today or get_upcoming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the two modes (absolute and relative) and advises on calendar scoping to avoid duplicates, providing context on when to use this tool. However, it does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invitationsB
List pending event invitations that need a response.
Args: limit: Maximum number of results (default 20).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions listing pending invitations but does not disclose read-only nature, permission requirements, or pagination behavior beyond the limit parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and to the point, with purpose stated first. Efficient use of words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple list tool with one parameter and output schema, but misses usage guidance and behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'limit' has a default in schema, and description repeats the default value and adds 'maximum number of results.' Schema coverage is 0%, so description adds minimal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'pending event invitations that need a response,' which uniquely identifies its purpose among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus sibling tools like get_upcoming or get_events_by_calendar. The description does not include exclusion criteria or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recentA
Show the most recently added or synced calendar events.
Useful for seeing what's new on the calendar without knowing specific dates.
Args: limit: Maximum number of results (default 10).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only mentions showing recent events and the limit parameter, but fails to disclose any behavior beyond that, such as what constitutes 'recent', ordering, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: two sentences plus an args line. Every sentence adds value, and the key info is front-loaded. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a simple tool with one parameter and an output schema present, the description covers the purpose and parameter well. However, it lacks details about the output schema content and sorting order of results, leaving some ambiguity about what 'recent' means.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It fully explains the single parameter 'limit' with its default value and meaning ('Maximum number of results'), which is clear and sufficient for agent use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool shows 'most recently added or synced calendar events', a specific verb and resource. This distinguishes it from sibling tools like get_upcoming or get_today, which focus on upcoming events or today's events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says it's 'useful for seeing what's new on the calendar without knowing specific dates', which gives clear guidance on when to use it. However, it does not explicitly mention alternatives or when not to use, but the context is strong given the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recurringA
List upcoming recurring events, optionally filtered by calendar.
Useful for understanding the regular schedule (standups, focus blocks, etc.).
Args: calendar: Optional calendar name to filter by. Use get_calendars to see available names. limit: Maximum number of results (default 50).
| Name | Required | Description | Default |
|---|---|---|---|
| calendar | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the tool is read-only (list), mentions optional filtering and limit, and defines 'upcoming' implicitly. However, it doesn't clarify if it returns only the next occurrence or all future occurrences, nor does it mention any behavioral traits like time range constraints. The presence of an output schema slightly mitigates this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences and a short args list. The purpose is front-loaded, and every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 optional params, output schema present), the description adequately covers purpose and parameter usage. It lacks an explicit definition of 'recurring' but is otherwise complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully explains both parameters: calendar is an optional filter with a hint to use get_calendars, and limit is the maximum results with default. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists 'upcoming recurring events', using a specific verb and resource. It distinguishes itself from sibling tools by specifying 'recurring', which is unique among the listed siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some context ('Useful for understanding the regular schedule') and suggests using get_calendars for calendar names, but does not explicitly state when to use this tool over alternatives like get_upcoming or get_events_by_calendar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_todayA
Get all calendar events for today, grouped by calendar.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses grouping by calendar, but lacks details on timezone handling, inclusion of all-day events, or whether it returns events from all calendars. Minimal but acceptable for a simple tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is front-loaded and contains only essential information. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of parameters, presence of an output schema, and the description's explicit grouping behavior, this is nearly complete. However, it does not clarify whether 'today' includes events spanning multiple days or only events strictly within today's date.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has 0 parameters and schema coverage is 100%. Description does not need to explain parameters, and it correctly omits them. Baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Get' and resource 'all calendar events for today', with an additional detail 'grouped by calendar' that distinguishes it from siblings like get_events_in_range or get_upcoming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as get_today_json or get_events_by_calendar. Does not mention preconditions or context for using it over other event-retrieval tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_today_jsonA
Machine-readable variant of get_today.
Returns today's events as a structured dict so programmatic clients (dashboards, automations) don't have to parse the pretty-printed text output. Event times are ISO-8601 strings in the event's original timezone.
Response shape::
{
"now": ISO-8601 string (current local time),
"timezone": IANA name (e.g. "Australia/Adelaide"),
"events": [{id, title, calendar, start, end, all_day,
location, recurring, attendees_count}, ...]
}| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description takes full burden. It details the response shape, time format (ISO-8601), timezone, and fields. It doesn't mention read-only nature explicitly but it's implied. Overall, good transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three short paragraphs, front-loaded with purpose, and uses a code block for the response shape. Every sentence serves a purpose without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema, the description is complete: it explains the relationship to get_today, the machine-readable nature, the response format with details on time representation. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the input schema is empty. The description adds no parameter information, but baseline for 0 params is 4. It does describe the output which is not required due to output schema presence, but still adds value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a machine-readable variant of get_today, returning a structured dict of today's events for programmatic clients. It distinguishes from sibling 'get_today' which is presumably text output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states it's for 'programmatic clients (dashboards, automations)', implying when to use. However, it does not explicitly state when not to use or list alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upcomingB
Get calendar events for the next N days, grouped by date.
Args: days: Number of days to look ahead (default 7).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it only states the basic function. It does not mention read-only nature, permissions, rate limits, or any side effects, leaving significant gaps for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with a clear front-loaded statement of purpose and a brief parameter explanation. Every sentence is essential and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the existence of an output schema, and only one optional parameter, the description covers the main functionality. It lacks behavioral context but is mostly complete for a straightforward get operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'days' has schema coverage 0%, and the description adds the phrase 'look ahead' and repeats the default, providing minimal extra meaning. But it does not specify valid range or behavior for edge cases.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), resource ('calendar events'), scope ('next N days'), and output format ('grouped by date'), distinguishing it from siblings like 'get_upcoming_json' and 'get_recent'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., get_upcoming_json, get_today). The description does not include any conditional or contextual recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upcoming_jsonA
Machine-readable variant of get_upcoming.
Args: days: Number of days to look ahead (default 7).
Response shape mirrors get_today_json but covers the next days days.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description should disclose behavioral traits. It does not mention side effects, authentication, rate limits, or what happens with edge cases (e.g., days=0, negative days, or no events). Only the basic mapping is described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with an Args section. Every sentence adds value: it identifies the tool's purpose, parameter, and relationship to siblings. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values need not be explained. The description references sibling tools and the response shape. However, it lacks coverage of error conditions, default behavior for missing days (though specified), and any limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the 'days' parameter: 'Number of days to look ahead (default 7).' This adds meaning beyond the schema, which only provides type and default. However, it does not specify valid range or behavior for edge values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a 'machine-readable variant of get_upcoming' and explains it covers the next *days* days, mirroring get_today_json. This distinguishes it from siblings like get_upcoming (human-readable) and get_today_json (today only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use: when machine-readable output is needed. It references get_upcoming and get_today_json as alternatives, providing context. However, it does not explicitly state when not to use this tool or mention specific conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsB
Search events by title, location, notes, or attendees.
Args: query: Search term (supports FTS5 syntax: AND, OR, NOT, quotes for phrases). limit: Maximum number of results (default 20).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It mentions FTS5 syntax support but does not disclose read-only behavior, pagination, performance implications, or authentication needs. The description is insufficient for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a single sentence and an Args list. It is well-structured and front-loaded with the main purpose, though it could be slightly more efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values are not needed. However, the description does not address sorting, date range limitations, or when to use sibling tools. It is somewhat incomplete for a search tool with many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description adds value by explaining query supports FTS5 syntax and limit has a default of 20. This compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search' and the resource 'events', specifying the fields searched (title, location, notes, attendees). This differentiates it from siblings like get_event (single) or get_events_in_range (date range).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives, such as filtering by dates or calendars. No when-to-use or when-not-to-use context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_dateA
Open Fantastical's mini calendar to a specific date.
Args: date: Date in YYYY-MM-DD format.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for behavioral disclosure. It only states an action ('Open') without explaining side effects, permissions needed, error handling for invalid dates, or what the tool returns (despite having an output schema). This is insufficient for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one sentence for the action and one line for the parameter. It front-loads the core purpose with no filler. Every word earns its place, making it efficient for agent parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description is adequate but not fully complete. It fails to describe the output (an output schema exists but is not mentioned) and does not clarify what 'open' entails (e.g., is it a UI focus, a popup?). This leaves minor but notable gaps in understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It specifies the date format as 'YYYY-MM-DD', which adds essential information beyond the schema's plain 'string' type. While it does not provide ranges or validation rules, the format hint is valuable and meets most of the need for a single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Open' and the resource 'Fantastical's mini calendar' with a specific scope: 'to a specific date'. This is distinct from sibling tools which are primarily data retrieval or event creation, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like get_today or search_events. There is no mention of prerequisites, context, or scenarios where show_date is preferred, leaving the agent without comparative information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
16 tool updates
v0.1.6- First observed
create_event - First observed
get_availability - First observed
get_calendars - First observed
get_event - First observed
get_event_json - First observed
get_events_by_calendar - First observed
get_events_in_range - First observed
get_invitations - First observed
get_recent - First observed
get_recurring - First observed
get_today - First observed
get_today_json - First observed
get_upcoming - First observed
get_upcoming_json - First observed
search_events - First observed
show_date
TDQS
Tools are largely distinct, but some overlap exists between get_today, get_upcoming, get_events_in_range, and get_recent, which all retrieve events over different time windows. Descriptions help distinguish them, but an agent might occasionally select the wrong one.
All tool names follow a consistent verb_noun pattern using snake_case (e.g., create_event, get_calendars, search_events). The pattern is predictable and easy to understand.
16 tools is slightly on the high side for a calendar server, but each tool addresses a specific query need (today, upcoming, range, recurring, etc.). The JSON variants could be merged, but overall the count is still reasonable.
The tool surface is heavily read-oriented. While create_event is present, there are no tools for updating or deleting events, nor for responding to invitations. This leaves significant gaps in event lifecycle management.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connects ChatGPT to your Apple Calendar via a local Mac agent + Vercel relay
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
GDPR-compliant calendar access for AI assistants. Google, Microsoft 365, Apple & more. EU-hosted.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables natural language calendar management through Fantastical on macOS, allowing users to create events, view schedules, search appointments, and navigate their calendar without leaving their AI conversation.4216MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access and interact with macOS Calendar.app events and reminders, including viewing, searching, and filtering calendar data.2MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to read, create, update, and delete data in macOS apps (Reminders, Calendar, Notes, Mail, Messages, Contacts) via natural language, using EventKit, JXA, and SQLite backends.515MIT
- AlicenseAqualityFmaintenanceEnables querying and managing Fantastical calendars and events via the MCP protocol, allowing AI assistants to list calendars, create events using natural language, and search or retrieve event details.64MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jaydenk/fantastical-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server