Repository navigation
feat: recurring occurrence edits, virtual member tools, and tool metadata - #49
Conversation
…data - update_event_occurrence / delete_event_occurrence change or delete one occurrence of a recurring event, or it and every later one, matching the TimeTree app (EXDATE, parent_id child event, date-only UNTIL split). - copy_event copies an event to a new time, optionally into another calendar. - create/update/delete_virtual_member; updates merge current fields because a PUT clears omitted ones. get_current_user returns user ID and name. - Every tool declares annotations and an output schema and returns structuredContent; the server publishes instructions. Descriptions were rewritten with sibling-tool guidance and without implementation details. - Fix get_events dropping the last occurrence of a date-only UNTIL series. - docs/FEATURE_CANDIDATES.md records observed features not built yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7d4b37d88e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…rthdays - Move UNTIL with the new start time when splitting a series, so a moved last occurrence is not cut off (date-only UNTIL follows the local day). - Re-read the series before undoing a failed second step; if the update was applied, keep the created event, and if it cannot be checked, keep it and say so instead of deleting occurrences. - update_virtual_member accepts birthday: null to remove a birthday. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 23ebd26c7f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- Refuse a this-and-following move to another day when the rule repeats on set days (BYDAY, BYMONTHDAY, BYMONTH) unless new recurrences are given. - When every earlier occurrence was deleted and the start moves, update the series with the reduced COUNT instead of the original one. - A create that fails without a clear answer leaves the series unchanged and tells the caller it may exist; a failed rollback names the leftover event. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
TimeTree-MCP/src/tools/event-tools.ts
Lines 208 to 210 in 0b0da33
When an all-day series carries a non-UTC start_timezone, this expands it in that timezone even though all-day recurrence dates are stored at midnight UTC; loadSeries already compensates by forcing UTC. For example, a Monday all-day BYDAY=MO series with America/New_York has a Sunday local DTSTART, so get_events emits Tuesday UTC occurrences that update_event_occurrence then rejects as not belonging to the series. Use UTC here whenever event.all_day is true so reads and occurrence writes agree.
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- A supplied this-and-following rule keeps the remaining COUNT or UNTIL and the later exclusions unless it sets its own. - Later EXDATEs and UNTIL move by wall-clock time, so a DST change between them and the moved start no longer puts them off the rule. - The set-days check also catches a start_timezone change. - Occurrence events and copies keep map coordinates unless the location changes. - Event output keeps only string recurrence lines, matching the schema. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: aeebe32c00
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…oss zones - When every earlier occurrence was deleted, a this-and-following change moves the series start to the selected occurrence, so a new rule cannot bring back earlier dates. - Later EXDATEs and UNTIL are mapped from the series time zone into the requested start_timezone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c648db4a0f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
An empty list or EXDATE-only lines made the new series a single event while the original was still cut, losing the later occurrences. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Summary
Adds 7 tools (28 total) and the tool metadata Glama flagged as missing.
New tools
update_event_occurrence,delete_event_occurrence: change or delete one occurrence of a recurring event (scope: "this"), or it and every later one ("this_and_following"). They write what the TimeTree app writes:EXDATEline.parent_idset to the series, then excludes that occurrence from the series.UNTIL=YYYYMMDDand, for updates, starts a new series with the remainingCOUNTand laterEXDATEs.copy_event: copies an event to a new time, optionally into another calendar. It sendscopy: truelike the app. Attendees and files are kept only within the same calendar.create_virtual_member,update_virtual_member,delete_virtual_member: update and delete use the memberuuid. A PUT clears omitted fields, so the update reads the current member and merges first. The 10-member limit is checked before creating.get_current_user: returnsuser_idandnameonly.Glama feedback
outputSchema, and returns matchingstructuredContent.instructionscovering calendar IDs, times, memos, and recurring events.category=2). The label color list moved to thelabel_idparameters.Fix
get_eventsdropped the last occurrence of a series ending on a date-onlyUNTIL, which is what the app writes for "delete this and future events".UNTILis now compared by local date.Docs
[Unreleased], CLAUDE.md, CONTRIBUTING, and themcpb/manifest.jsontool list.docs/FEATURE_CANDIDATES.mdlists observed web features that are not built yet (reactions, likes, album, comment images, batch, free time) and the ones not planned, with reasons.The version stays at 0.5.0, so this can ship in the next release.
Testing
npm run verifypasses: 91/91 tests, and audit shows only 1 low-severity finding.structuredContentagainst itsoutputSchemausing the SDK's Ajv validator.npm run build:mcpbplus a stdio smoke test: initialize andtools/listreturn 28 tools, each with annotations and an output schema, and the instructions are present.🤖 Generated with Claude Code