Bug
When cal_add receives bare ISO 8601 timestamps (no offset or timezone), the Graph API defaults to UTC. This causes events to be created shifted from the user's intended local time.
Reproduction
Two events created via MCP cal_add:
{"title": "Dogs to groomers", "start": "2026-03-06T06:30:00", "end": "2026-03-06T08:00:00"}
{"title": "Pickup dogs from groomers", "start": "2026-03-06T12:00:00", "end": "2026-03-06T13:30:00"}
First event landed in the correct slot. Second event was shifted — both were interpreted as UTC, 5 hours ahead of the user's Eastern timezone.
Root Cause
The Graph API event resource expects a object with both and fields:
{
"start": {"dateTime": "2026-03-06T12:00:00", "timeZone": "Eastern Standard Time"},
"end": {"dateTime": "2026-03-06T13:30:00", "timeZone": "Eastern Standard Time"}
}
Outpost currently sends the bare dateTime without a timeZone property, so Graph defaults to UTC.
Proposed Fix
- Add a
timezone config setting (set during outpost setup, stored in config.json, e.g. "America/New_York")
- When building the event payload in
api/calendar.py, include timeZone in the start/end objects using the configured timezone
- Add an optional
--timezone flag to cal add / cal update CLI and MCP tools for per-event override
- Fall back to UTC if no timezone is configured (current behavior, but explicit)
Affected Components
src/outpost/api/calendar.py — event payload construction
src/outpost/cli/calendar.py — CLI parameter
src/outpost/mcp_server.py — MCP tool parameter
src/outpost/config.py — timezone config setting
outpost setup — timezone prompt
Bug
When
cal_addreceives bare ISO 8601 timestamps (no offset or timezone), the Graph API defaults to UTC. This causes events to be created shifted from the user's intended local time.Reproduction
Two events created via MCP
cal_add:{"title": "Dogs to groomers", "start": "2026-03-06T06:30:00", "end": "2026-03-06T08:00:00"} {"title": "Pickup dogs from groomers", "start": "2026-03-06T12:00:00", "end": "2026-03-06T13:30:00"}First event landed in the correct slot. Second event was shifted — both were interpreted as UTC, 5 hours ahead of the user's Eastern timezone.
Root Cause
The Graph API event resource expects a object with both and fields:
{ "start": {"dateTime": "2026-03-06T12:00:00", "timeZone": "Eastern Standard Time"}, "end": {"dateTime": "2026-03-06T13:30:00", "timeZone": "Eastern Standard Time"} }Outpost currently sends the bare
dateTimewithout atimeZoneproperty, so Graph defaults to UTC.Proposed Fix
timezoneconfig setting (set duringoutpost setup, stored in config.json, e.g."America/New_York")api/calendar.py, includetimeZonein thestart/endobjects using the configured timezone--timezoneflag tocal add/cal updateCLI and MCP tools for per-event overrideAffected Components
src/outpost/api/calendar.py— event payload constructionsrc/outpost/cli/calendar.py— CLI parametersrc/outpost/mcp_server.py— MCP tool parametersrc/outpost/config.py— timezone config settingoutpost setup— timezone prompt