Developers · MCP server
event_update
Changes an existing calendar event.
Update calendar event. Changes an existing calendar event.
Who can use it: Owners and managers with a role in the community. Not yet a management company’s owners and managers.
| Scope | Effect | Hints |
|---|---|---|
community:write |
send (write when visibility is staff_only) |
changes data, destructive, idempotent |
Description shown to assistants
Use this when an owner or manager asks to update an existing PorchQ calendar event.
Arguments
| Argument | Type | Required | About |
|---|---|---|---|
property_id |
string | No | The community’s public id (prop_web…). Pass it on every call. |
event_id |
string | Yes | The event’s public id (evnt_web…), from events_list. |
title |
string | No | The event’s new name. |
description |
string | No | What the event is about. |
location |
string | No | Where it happens. |
starts_at |
string | No | ISO8601 event start time. Include a timezone offset when possible. |
starts_at_text |
string | No | Original natural-language start time when the user used relative wording. |
ends_at |
string | No | ISO8601 event end time. Include a timezone offset when possible. |
ends_at_text |
string | No | Original natural-language end time when the user used relative wording. |
all_day |
boolean | No | The event lasts all day. |
event_type |
string | No | One of meeting, community_event, maintenance, voting_deadline, other. |
visibility |
string | No | One of public, members_only, staff_only. |
reminder_offsets_minutes |
array of integer | No | Minutes before the start at which members who can see the event get a reminder. Each from 1 to 43200. |
idempotency_key |
string | No | Optional. A unique value for this change; sending the same value again does nothing twice. At most 200 characters. |
What it returns
Every result has content (one short sentence for the person) and structuredContent (the data below). A tool that could not run answers with isError: true and a sentence saying why; see Errors and limits.
property: the community.status:donewhen the change was made at once (a staff-only event), orawaiting_confirmation.event: the event after the change, whenstatusisdone, with the same fields as inevents_list.confirmation: whenstatusisawaiting_confirmation, theurlof the PorchQ page where the person confirms and when itexpires_at.
structuredContent follows this JSON Schema, also in tools/list as outputSchema:
{
"type": "object",
"properties": {
"property": {
"type": "object",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" },
"addressLine1": { "type": ["string", "null"] },
"addressLine2": { "type": ["string", "null"] },
"city": { "type": ["string", "null"] },
"state": { "type": ["string", "null"] },
"postalCode": { "type": ["string", "null"] },
"timezone": { "type": ["string", "null"] },
"billingFrequency": { "type": ["string", "null"] },
"demoClone": { "type": "boolean" },
"demoPersona": { "type": ["string", "null"] },
"demoExpiresAt": { "type": ["string", "null"] }
},
"required": ["id", "name"]
},
"status": { "enum": ["done", "awaiting_confirmation"] },
"event": {
"type": "object",
"properties": {
"id": { "type": "string" },
"title": { "type": "string" },
"description": { "type": ["string", "null"] },
"location": { "type": ["string", "null"] },
"starts_at": { "type": ["string", "null"] },
"ends_at": { "type": ["string", "null"] },
"all_day": { "type": ["boolean", "null"] },
"event_type": { "type": ["string", "null"] },
"visibility": { "type": ["string", "null"] },
"reminder_offsets_minutes": { "type": ["array", "null"], "items": { "type": "integer" } },
"created_via": { "type": ["string", "null"] }
},
"required": ["id", "title"],
"description": "The event, when it was created or changed at once."
},
"confirmation": {
"type": "object",
"description": "When the change waits for the person to confirm it in PorchQ.",
"properties": { "url": { "type": "string" }, "expires_at": { "type": "string" } },
"required": ["url", "expires_at"]
}
},
"required": ["property", "status"]
}
Notes
- Only the fields you pass change. The values you pass replace the old ones, so the tool is marked destructive; sending the same change twice leaves the same result.
- A change to an event residents can see, before or after the change, waits for the person to confirm it in PorchQ, as with
event_create. The page shows the old values struck through. If the event changes in PorchQ before they confirm, nothing is changed and they ask again. - A change to a staff-only event that stays staff-only happens at once.
Example
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "event_update",
"arguments": {
"property_id": "prop_web4k2m9q7x1v8c3n5b6z0a2s4d",
"event_id": "evnt_web8n3b5v7c9x1z2a4s6d8f0g2h",
"location": "Pool deck",
"idempotency_key": "5d7f9b1c-3e5a-4c7e-9b1d-3f5a7c9e1b3d"
}
}
}
This page as Markdown: /developers/mcp/tools/event_update.md