Smart Calendars AI
Server Details
Create and update subscription calendars from ChatGPT, Claude, or Codex.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 7 tools
Each tool has a distinct feed-lifecycle role: list, create, read content, read status, apply changes, deactivate, and reactivate. The only potential overlap, get_feed vs get_feed_status, is clearly separated by event content/revision versus availability and editing status.
All tool names use consistent snake_case and are feed-centric with clear verbs. apply_feed_changes is longer but remains predictable within the same convention.
Seven tools is well-scoped for a feed management service, covering the essential lifecycle actions without excessive granularity. Each tool appears to earn its place.
The surface covers create, list, read, update via apply_feed_changes, status, deactivate, and reactivate. A permanent feed deletion operation is missing, though deactivation may be an intentional safer alternative.
Available Tools
7 toolsapply_feed_changesSave a calendar revisionADestructiveIdempotentInspect
Save one revision to one existing calendar feed owned by the connected account. Submit one fixed-schema change set with up to 250 event changes and/or a feed title or description change; all stored calendar changes commit together in one transaction, or none are saved. The input schema declares every supported change: add creates an event; update changes selected fields or uses reset_fields to restore saved field baselines; delete marks an existing event canceled without permanently erasing it; restore reinstates that same event and may update selected fields; feed_patch changes only the calendar title or description. No dynamic operation discovery, fetched schemas, arbitrary commands or arbitrary endpoints are supported. First use dry_run=true to validate and preview the change set without saving, advancing the revision or spending credits. Show the returned before/after changes and any billing quote, not an invented summary. Obtain approval for a proposed schedule revision before saving it with dry_run=false. Save with the returned preview_receipt and the identical feed_id, expected_revision, request_id, operations and feed_patch. The receipt binds that validated preview, not user consent. Changed proposals or expired previews require a new preview and approval; revision conflicts require reading the feed again before preparing a new preview. Preserve omitted events/fields. For revised PDFs/documents, read the complete unfiltered feed before cancellations, preserve unrelated events and manual fields, and ask when an event match is uncertain. Update matched event IDs; a duplicate add is not an update. Use set with null to clear nullable fields; reset_fields restores saved baselines, not empty values. Use the last read expected_revision to prevent overwriting concurrent changes. On uncertain save retry the identical request_id and payload, including the original preview_receipt, never a new one. Subscribers save without billing prompts. If billing requires one credit, show the deduction and balance and obtain explicit user authorization before setting confirm_credit_charge=true; this explicit authorization may be added after preview. Default automations must not authorize credit spending. publication.status reports calendar-file preparation, not subscription access. Check distribution_ready for access at the reported revision; use get_feed_status for current availability. Preview proposals are recoverable for up to one hour; expired drafts are removed automatically. Previewing does not write calendar events or advance their revision. Display the returned feed_id and request_id alongside the preview summary so this exact proposal can be recovered. If the receipt or exact proposal was lost, call this same tool with only feed_id, the original request_id, dry_run=true and recover_preview=true. Do not reconstruct missing changes from memory, guess a key or choose a latest preview. Recovery returns the original unexpired preview and exact save_arguments without extending its expiry, saving or spending credits. Show that recovered preview and obtain fresh approval before submitting its save_arguments unchanged; confirm_credit_charge remains false unless the user explicitly authorizes the current quoted charge. Recovery is not consent. If recovery returns saved=true, those changes were already saved: report that result and stop; do not submit a new save. If no recoverable preview remains, read the feed, prepare a new preview with a new request_id and obtain approval. Never silently substitute a changed proposal. These tools manage Smart Calendars feeds only; they cannot access mailboxes or start source monitoring, scheduled PDF checks or document refreshes. For requests solely for those unsupported actions, explain the limitation without reading feeds or substituting an edit. For unsupported mailbox requests, offer to work with schedule content the user chooses to provide instead. General ICS explanations need no account access. When sharing a feed or filtered_subscription with distribution_ready=true, offer "Open in calendar app" using that object’s HTTPS subscription_open_url (it redirects to webcal), and "Calendar options" using its subscription_options_url for Apple/default, Google, Outlook and copy-link choices. Retain subscription_url as a copyable HTTPS fallback. Prefer these HTTPS handoff links over putting subscription_webcal_url directly in chat, because some clients do not preserve clickable webcal links. If a handoff URL is absent, use the HTTPS subscription_url and dashboard subscription controls instead. Offer "View or edit" using the feed’s manage_url. For a filtered selection use the nested filtered_subscription links, not the unfiltered feed links. Use the returned URLs exactly; never invent or rewrite their host, path or token. Opening a link does not confirm a subscription; the user must confirm in their calendar app. Do not present inactive or unpublished feeds as ready to subscribe.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | ||
| feed_id | Yes | Feed identity returned by a previous feed tool; used to address the selected calendar only. | |
| feed_patch | No | ||
| operations | No | ||
| request_id | Yes | Generate an opaque key for this save and reuse it unchanged for retries, to prevent duplicate changes. Not a user identifier, chat/session ID, or telemetry. Do not include personal data. | |
| preview_receipt | No | Opaque receipt returned by a successful dry_run=true preview. Required when saving with dry_run=false. Return it unchanged with the same feed, revision, request_id and proposed changes. It is not user approval. | |
| recover_preview | No | Read the exact temporarily stored preview after losing its receipt or proposal. Requires dry_run=true and only feed_id and the original request_id; omit all other arguments. Does not save, extend expiry or authorize a charge. Show the recovered preview and obtain fresh approval before saving. Never guess a request ID or select a latest preview. | |
| expected_revision | No | Last read feed revision; prevents overwriting concurrent edits. | |
| confirm_credit_charge | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses transactional all-or-none commit behavior, that delete marks events canceled rather than permanently erasing them, idempotency via request_id, preview receipt semantics, billing credit authorization requirements, revision-conflict handling, and preview expiry/recovery behavior. The destructiveHint=true annotation is consistent with the described update/delete/mutation behavior, so there is no contradiction.
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 front-loaded with purpose and schema behavior, but it becomes an extremely long, dense wall of procedural instructions with repeated approval/recovery warnings. It also includes tangential subscription-link guidance that may be relevant to feed sharing generally but is not tightly focused on saving a revision, making the text harder to scan than necessary.
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 complex mutation tool with no output schema, the description covers the critical operational context: transactional saving, preview/approval flow, credit charging, revision conflicts, retry idempotency, preview recovery, and unsupported-action handling. An agent has enough information to invoke it safely and correctly in normal and edge cases.
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?
Although schema coverage is 56%, the description adds substantial meaning: it explains that operations supports add/update/delete/restore, that update changes only supplied fields, that reset_fields restores saved baselines rather than clearing fields, that null clears nullable fields, that duplicate add is not an update, and how request_id, preview_receipt, recover_preview, expected_revision, and confirm_credit_charge are used. This compensates well for schema gaps.
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 opens with a specific verb and resource: "Save one revision to one existing calendar feed owned by the connected account." It clearly scopes the tool to existing feeds and revision saving, implicitly distinguishing it from create_feed and other siblings, and later reiterates that these tools manage Smart Calendars feeds 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?
It gives explicit when-to-use guidance: first call with dry_run=true to validate and preview, obtain approval before dry_run=false, use recovery only when receipt or proposal is lost, and retry identical payload on uncertain save. It also names unsupported actions and tells the agent not to read feeds or substitute edits for those requests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_feedAIdempotentInspect
Create and activate a subscription calendar from structured events. Extract the schedule yourself first. Free within feed allowances. No automatic monitoring is enrolled. Reuse request_id on retries. publication.status reports calendar-file preparation, not subscription access. Check distribution_ready for access at the reported revision; use get_feed_status for current availability. These tools manage Smart Calendars feeds only; they cannot access mailboxes or start source monitoring, scheduled PDF checks or document refreshes. For requests solely for those unsupported actions, explain the limitation without reading feeds or substituting an edit. For unsupported mailbox requests, offer to work with schedule content the user chooses to provide instead. General ICS explanations need no account access. When sharing a feed or filtered_subscription with distribution_ready=true, offer "Open in calendar app" using that object’s HTTPS subscription_open_url (it redirects to webcal), and "Calendar options" using its subscription_options_url for Apple/default, Google, Outlook and copy-link choices. Retain subscription_url as a copyable HTTPS fallback. Prefer these HTTPS handoff links over putting subscription_webcal_url directly in chat, because some clients do not preserve clickable webcal links. If a handoff URL is absent, use the HTTPS subscription_url and dashboard subscription controls instead. Offer "View or edit" using the feed’s manage_url. For a filtered selection use the nested filtered_subscription links, not the unfiltered feed links. Use the returned URLs exactly; never invent or rewrite their host, path or token. Opening a link does not confirm a subscription; the user must confirm in their calendar app. Do not present inactive or unpublished feeds as ready to subscribe.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| events | Yes | ||
| activate | No | ||
| request_id | Yes | Generate an opaque key for this save and reuse it unchanged for retries, to prevent duplicate changes. Not a user identifier, chat/session ID, or telemetry. Do not include personal data. | |
| description | No | A short description of this calendar, not the conversation or user profile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: billing ('Free within feed allowances'), no automatic monitoring enrollment, retry semantics for request_id, and the critical caveat that publication.status is file preparation, not subscription access. Slightly diluted by lengthy URL-handoff presentation rules that concern sharing UI rather than this tool's own execution, and it never states the response shape for the created object.
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?
Purpose and prerequisites are correctly front-loaded, but roughly half the text is a policy block on sharing links (subscription_open_url, subscription_options_url, manage_url, filtered_subscription) that is only tangentially about creating a feed. Several sentences are UI-script instructions rather than tool semantics, which blunts the signal.
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?
No output schema exists, and the description does name the fields an agent will encounter (publication.status, distribution_ready, returned URLs) and warns not to treat unpublished feeds as subscribable. It stops short of describing the actual response payload or failure modes, so it is strong but not fully self-contained for a mutation 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?
With only 40% schema description coverage the description must compensate, and it does so for request_id (opaque, reuse on retries) and implicitly for events ('extract the schedule yourself'). However, 'activate', 'title', and 'description' parameters get no clarification, and the required 'events' array structure is only touched via the extraction instruction rather than explained.
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?
Opens with a specific verb+resource ('Create and activate a subscription calendar from structured events') and adds a key prerequisite ('Extract the schedule yourself first'). It distinguishes itself from reading siblings by pointing to get_feed_status for current availability, though it does not contrast with apply_feed_changes or reactivate_feed, which are the closest alternatives.
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?
Gives explicit negative guidance for unsupported actions ('explain the limitation without reading feeds or substituting an edit') and tells the agent to gather events itself rather than assume monitoring. Clear context, but no explicit statement of when to prefer apply_feed_changes or reactivate_feed over creating a new feed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deactivate_feedBDestructiveIdempotentInspect
Deactivate a feed without deleting events or resetting editing windows. Confirm the user wants to interrupt subscription access. publication.status reports calendar-file preparation, not subscription access. Check distribution_ready for access at the reported revision; use get_feed_status for current availability. These tools manage Smart Calendars feeds only; they cannot access mailboxes or start source monitoring, scheduled PDF checks or document refreshes. For requests solely for those unsupported actions, explain the limitation without reading feeds or substituting an edit. For unsupported mailbox requests, offer to work with schedule content the user chooses to provide instead. General ICS explanations need no account access. When sharing a feed or filtered_subscription with distribution_ready=true, offer "Open in calendar app" using that object’s HTTPS subscription_open_url (it redirects to webcal), and "Calendar options" using its subscription_options_url for Apple/default, Google, Outlook and copy-link choices. Retain subscription_url as a copyable HTTPS fallback. Prefer these HTTPS handoff links over putting subscription_webcal_url directly in chat, because some clients do not preserve clickable webcal links. If a handoff URL is absent, use the HTTPS subscription_url and dashboard subscription controls instead. Offer "View or edit" using the feed’s manage_url. For a filtered selection use the nested filtered_subscription links, not the unfiltered feed links. Use the returned URLs exactly; never invent or rewrite their host, path or token. Opening a link does not confirm a subscription; the user must confirm in their calendar app. Do not present inactive or unpublished feeds as ready to subscribe.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | Feed identity returned by a previous feed tool; used to address the selected calendar only. | |
| request_id | Yes | Generate an opaque key for this save and reuse it unchanged for retries, to prevent duplicate changes. Not a user identifier, chat/session ID, or telemetry. Do not include personal data. | |
| expected_revision | Yes | Last read feed revision; prevents overwriting concurrent edits. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds genuine value by clarifying the blast radius: events are preserved and editing windows are not reset, and user confirmation is required before interrupting access. That softens an otherwise alarming destructiveHint. It does not cover auth needs or what the mutation returns, which keeps it from a 5.
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 purpose is front-loaded, but the body is a wall of text dominated by topics irrelevant to deactivating a feed: subscription_open_url handoffs, webcal link preservation, mailbox limitations, and ICS explanations. Every sentence does not earn its place in this tool's definition.
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 three-parameter mutation with full schema coverage and no output schema, the essentials are present (confirmation requirement, side-effect scope, revision safety implied by the schema). However, it omits what the tool returns and how the new status is reported, while spending most of its length on tangential subscription-sharing guidance.
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 100% and all three parameters (feed_id, expected_revision, request_id) are fully documented in the schema, so the baseline is 3. The description adds nothing about parameter usage — no mention of how to obtain feed_id or expected_revision.
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?
Opens with a specific verb+resource ('Deactivate a feed') and immediately distinguishes it from adjacent behaviors ('without deleting events or resetting editing windows'). It also distinguishes it from get_feed_status and publication.status, though it never names its most obvious sibling, reactivate_feed.
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?
It gives one real usage rule ('Confirm the user wants to interrupt subscription access') and points to get_feed_status for current availability, which is useful. But these are buried in a long paragraph of unrelated mailbox/ICS guidance, and there is no explicit guidance on when to reactivate vs. simply re-fetch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feedARead-onlyIdempotentInspect
Read events and the internal revision before editing. Request include_facets first and select returned values for known labels. Facet results describe the entire published active feed, independent of read filters or pagination. Nonempty filters also return filtered_subscription with canonical filters, matching_event_count and unmatched_filter_values. Use its URLs for that selection; top-level subscription URLs remain unfiltered. Event IDs, external keys, dates, removal state and pagination narrow only the read, never the subscription. Filtering changes no events and creates no cloned feed. Before proposing cancellations from a revised PDF/document, read every page of the unfiltered feed; never infer deletion from omitted events. These tools manage Smart Calendars feeds only; they cannot access mailboxes or start source monitoring, scheduled PDF checks or document refreshes. For requests solely for those unsupported actions, explain the limitation without reading feeds or substituting an edit. For unsupported mailbox requests, offer to work with schedule content the user chooses to provide instead. General ICS explanations need no account access. When sharing a feed or filtered_subscription with distribution_ready=true, offer "Open in calendar app" using that object’s HTTPS subscription_open_url (it redirects to webcal), and "Calendar options" using its subscription_options_url for Apple/default, Google, Outlook and copy-link choices. Retain subscription_url as a copyable HTTPS fallback. Prefer these HTTPS handoff links over putting subscription_webcal_url directly in chat, because some clients do not preserve clickable webcal links. If a handoff URL is absent, use the HTTPS subscription_url and dashboard subscription controls instead. Offer "View or edit" using the feed’s manage_url. For a filtered selection use the nested filtered_subscription links, not the unfiltered feed links. Use the returned URLs exactly; never invent or rewrite their host, path or token. Opening a link does not confirm a subscription; the user must confirm in their calendar app. Do not present inactive or unpublished feeds as ready to subscribe. When returning a filtered subscription, explain: filters select events, not who can access them; anyone with the link can remove the filters and read the full published calendar.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| limit | No | ||
| offset | No | ||
| feed_id | Yes | ||
| filters | No | Request include_facets first; use returned available_facets values for the desired known labels. Values are trimmed and case-insensitive; format accepts attendance-mode aliases. Values within a field use OR; different fields use AND. Unknown values never broaden the selection. Filtering cannot infer missing metadata. | |
| event_ids | No | ||
| external_keys | No | ||
| removal_state | No | ||
| include_facets | No | Return available_facets ({value,label,count} entries), facet_coverage ({tagged_events,fallback_events,missing_events}), facets_truncated and facet_scope=published_active_events. Coverage distinguishes explicit tags, fallbacks and missing values; title/location fallbacks do not infer classifications or audiences. Also returned for nonempty filters. Canonical fields: person, venue, topic, city, country, format, source. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds substantive behavior beyond that: facets describe the whole published active feed regardless of filters or pagination, and nonempty filters return filtered_subscription with matching_event_count and unmatched_filter_values. It also discloses that filtering never mutates or clones anything. It does not state auth or rate-limit characteristics.
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?
Front-loaded with the core purpose, but the body sprawls across filtering semantics, unsupported mailbox/source-monitoring scenarios, and a long block of chat-UI link-handoff instructions ('Open in calendar app', 'Calendar options', subscription_webcal_url fallbacks) that dilutes the actionable core. Several sentences earn their place; the presentation/URL guidance is disproportionately large relative to the read operation.
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?
With 10 parameters, a nested filter object and no output schema, the description covers return shape reasonably (available_facets, filter_coverage, filtered_subscription, subscription URLs). However it omits date formats for from/to, default/maximum pagination behavior, and what the 'internal revision' value looks like, which an agent needs before calling correctly.
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 only 20%, so the description must compensate, and it partially does: 'Event IDs, external keys, dates, removal state and pagination narrow only the read, never the subscription' clarifies the semantics of five parameters at once. But it says nothing about the from/to date format, the limit ceiling of 250, or offset behavior beyond 'pagination', leaving key calling details to 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?
Opens with a specific verb+resource: read events and the internal revision for a feed, with the stated motivation of reading before editing. It implicitly separates this read tool from the mutating siblings (apply_feed_changes, deactivate_feed) but never names them, so sibling differentiation is by inference rather than explicit statement.
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?
Gives real when-to-use guidance: request include_facets first; before proposing cancellations from a revised PDF, read every page of the unfiltered feed. It also states when NOT to use the tool ('For requests solely for those unsupported actions, explain the limitation without reading feeds'), though it never contrasts against get_feed_status or list_feeds.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feed_statusARead-onlyIdempotentInspect
Read the feed’s last update, subscription availability (distribution_ready), editing access and configured monitoring status. This does not refresh or charge. These tools manage Smart Calendars feeds only; they cannot access mailboxes or start source monitoring, scheduled PDF checks or document refreshes. For requests solely for those unsupported actions, explain the limitation without reading feeds or substituting an edit. For unsupported mailbox requests, offer to work with schedule content the user chooses to provide instead. General ICS explanations need no account access. When sharing a feed or filtered_subscription with distribution_ready=true, offer "Open in calendar app" using that object’s HTTPS subscription_open_url (it redirects to webcal), and "Calendar options" using its subscription_options_url for Apple/default, Google, Outlook and copy-link choices. Retain subscription_url as a copyable HTTPS fallback. Prefer these HTTPS handoff links over putting subscription_webcal_url directly in chat, because some clients do not preserve clickable webcal links. If a handoff URL is absent, use the HTTPS subscription_url and dashboard subscription controls instead. Offer "View or edit" using the feed’s manage_url. For a filtered selection use the nested filtered_subscription links, not the unfiltered feed links. Use the returned URLs exactly; never invent or rewrite their host, path or token. Opening a link does not confirm a subscription; the user must confirm in their calendar app. Do not present inactive or unpublished feeds as ready to subscribe.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, non-destructive), the description adds critical behavioral context: the call does not refresh or charge, cannot access mailboxes or start monitoring, and must never invent or rewrite returned URLs. It also warns that opening a link does not confirm a subscription and that inactive feeds must not be presented as ready.
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 purpose is front-loaded, but the description is long and includes extensive subscription-link handoff instructions that are only tangentially related to reading status. Many sentences are useful, but the overall length is disproportionate for a one-parameter read tool.
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?
The description compensates well for the lack of an output schema by naming returned fields and URL properties, and it thoroughly covers scope limitations and behavioral constraints. The main gap is the undocumented feed_id parameter, which prevents a 5.
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 feed_id has no description in the schema (0% coverage), and the tool description never explains what feed_id is, how to obtain it, or that it is a UUID. Referencing 'the feed's' is insufficient to compensate for the schema gap.
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 first sentence gives a specific verb ('Read') and enumerates the exact status fields returned: last update, subscription availability, editing access, and monitoring status. It does not explicitly differentiate from the sibling get_feed tool, so it falls short of a 5.
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 clearly states when not to use the tool: it cannot access mailboxes or start monitoring, and unsupported requests should be handled with an explanation rather than by reading feeds. It also gives explicit instructions for offering subscription handoff links. It lacks guidance on when to use get_feed instead, which prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feedsARead-onlyIdempotentInspect
List the connected account’s feeds, management links and shared active-feed allowance. Only feeds marked counts_towards_active_limit use a slot; this page’s length is not the account’s usage. Deactivating a counted feed frees a slot but interrupts its subscription access, so ask the user first. These tools manage Smart Calendars feeds only; they cannot access mailboxes or start source monitoring, scheduled PDF checks or document refreshes. For requests solely for those unsupported actions, explain the limitation without reading feeds or substituting an edit. For unsupported mailbox requests, offer to work with schedule content the user chooses to provide instead. General ICS explanations need no account access. When sharing a feed or filtered_subscription with distribution_ready=true, offer "Open in calendar app" using that object’s HTTPS subscription_open_url (it redirects to webcal), and "Calendar options" using its subscription_options_url for Apple/default, Google, Outlook and copy-link choices. Retain subscription_url as a copyable HTTPS fallback. Prefer these HTTPS handoff links over putting subscription_webcal_url directly in chat, because some clients do not preserve clickable webcal links. If a handoff URL is absent, use the HTTPS subscription_url and dashboard subscription controls instead. Offer "View or edit" using the feed’s manage_url. For a filtered selection use the nested filtered_subscription links, not the unfiltered feed links. Use the returned URLs exactly; never invent or rewrite their host, path or token. Opening a link does not confirm a subscription; the user must confirm in their calendar app. Do not present inactive or unpublished feeds as ready to subscribe.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the read-only annotations: only counted feeds use a slot, page length is not account usage, deactivation interrupts subscription access, and the returned URLs must be used exactly. It also explains link-handling behavior, subscription confirmation, and inactive/unpublished feed caveats.
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 purpose is front-loaded, but the description runs far beyond what is needed for a simple two-parameter list tool. Large portions about unsupported mailbox requests, general ICS explanations, and link presentation are verbose and better handled in broader instructions.
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?
There is no output schema, so the description usefully covers return-object semantics such as subscription URLs, manage_url, filtered_subscription links, and inactive-feed warnings. It remains incomplete on pagination parameters, but otherwise gives an agent enough context to use the listing output correctly.
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%, and the description never explains the limit or offset parameters. It mentions that page length is not account usage, which hints at pagination, but gives no parameter-level meaning, defaults, or constraints.
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 a specific verb and resource: list the connected account's feeds, management links, and active-feed allowance. It also clarifies the Smart Calendars scope. However, it does not explicitly distinguish this tool from sibling feed-retrieval tools such as get_feed.
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 gives strong when-to-use and when-not-to-use guidance, including unsupported mailbox and monitoring requests and the need to ask before deactivating a counted feed. It does not, however, mention when to prefer get_feed or other sibling tools for feed-level retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reactivate_feedAIdempotentInspect
Reactivate an existing feed free within account allowances. Does not reset the original editing window or modify events. publication.status reports calendar-file preparation, not subscription access. Check distribution_ready for access at the reported revision; use get_feed_status for current availability. These tools manage Smart Calendars feeds only; they cannot access mailboxes or start source monitoring, scheduled PDF checks or document refreshes. For requests solely for those unsupported actions, explain the limitation without reading feeds or substituting an edit. For unsupported mailbox requests, offer to work with schedule content the user chooses to provide instead. General ICS explanations need no account access. When sharing a feed or filtered_subscription with distribution_ready=true, offer "Open in calendar app" using that object’s HTTPS subscription_open_url (it redirects to webcal), and "Calendar options" using its subscription_options_url for Apple/default, Google, Outlook and copy-link choices. Retain subscription_url as a copyable HTTPS fallback. Prefer these HTTPS handoff links over putting subscription_webcal_url directly in chat, because some clients do not preserve clickable webcal links. If a handoff URL is absent, use the HTTPS subscription_url and dashboard subscription controls instead. Offer "View or edit" using the feed’s manage_url. For a filtered selection use the nested filtered_subscription links, not the unfiltered feed links. Use the returned URLs exactly; never invent or rewrite their host, path or token. Opening a link does not confirm a subscription; the user must confirm in their calendar app. Do not present inactive or unpublished feeds as ready to subscribe.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | Feed identity returned by a previous feed tool; used to address the selected calendar only. | |
| request_id | Yes | Generate an opaque key for this save and reuse it unchanged for retries, to prevent duplicate changes. Not a user identifier, chat/session ID, or telemetry. Do not include personal data. | |
| expected_revision | Yes | Last read feed revision; prevents overwriting concurrent edits. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavior: reactivation is free within account allowances, does not reset the original editing window or modify events, and publication.status reflects calendar-file preparation rather than subscription access. It also adds caution that opening a link does not confirm a subscription and that inactive feeds should not be presented as ready.
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 purpose is front-loaded in the first sentence, but the description runs long and includes extensive sharing-link handoff guidance that is only tangentially related to reactivating a feed. For a three-parameter mutation tool, many sentences do not earn their place in this specific definition.
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?
The description covers the key context an agent needs: purpose, side-effect boundaries, status-field caveats, unsupported actions, and subscription readiness warnings. With annotations and a fully described schema, it is mostly complete, though it does not clearly describe what a successful reactivate_feed call returns.
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 100%, so feed_id, request_id, and expected_revision are already well documented in the schema. The description does not add meaningful parameter-level semantics beyond a vague reference to 'the reported revision', so the baseline of 3 is appropriate.
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 first sentence names a specific verb and resource: reactivating an existing feed, with a scope note about account allowances. It is reasonably distinguishable from deactivate_feed by the word reactivate, but it does not explicitly contrast itself with apply_feed_changes or create_feed.
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 gives clear routing guidance, including using get_feed_status for current availability and checking distribution_ready at the reported revision. It also explicitly excludes unsupported mailbox and source-monitoring requests, though it does not state when to prefer reactivate_feed over apply_feed_changes or deactivate_feed.
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.
7 tool updates
- First observed
apply_feed_changes - First observed
create_feed - First observed
deactivate_feed - First observed
get_feed - First observed
get_feed_status - First observed
list_feeds - First observed
reactivate_feed
Related MCP Connectors
Turn a written schedule into a live calendar link people subscribe to in Apple, Google, Outlook.
Connects ChatGPT to your Apple Calendar via a local Mac agent + Vercel relay
Manage Google, Outlook & Apple calendars and create private sync rules from chat.
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to load, query, and manage iCalendar files with full CRUD operations and support for multiple calendars.811 npmMIT
- AlicenseAqualityDmaintenanceEnables Claude to read, create, update, and delete Google Calendar events directly through natural language.693 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables Claude to manage calendars and todos on a Synology NAS or any CalDAV server, supporting listing, creation, updating, and deletion of events and tasks through natural language conversation.MIT
- FlicenseNot gradedqualityBmaintenanceEnables interacting with CalDAV calendars (like iCloud) through natural language, supporting reading and writing events.1-
Glama MCP Gateway
Add one secure layer between your agents and this server.