Developers · MCP server
event_create
Creates a calendar event.
Create calendar event. Creates a 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 |
Description shown to assistants
Use this when an owner or manager asks to create or schedule a PorchQ calendar event.
Arguments
| Argument | Type | Required | About |
|---|---|---|---|
property_id |
string | No | The community’s public id (prop_web…). Pass it on every call. |
title |
string | Yes | The event’s 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, 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
visibilitydecides who sees it:public(members and the community’s public website),members_onlyorstaff_only.- An event residents can see waits for the person to confirm it in PorchQ. It reaches members (reminders by email and in the PorchQ app, and a public event on the community’s website), so nothing happens until the person who asked opens the link and confirms. Pass the tool’s sentence on to them as it is. See Confirming changes. Such a call is recorded as send.
- A staff-only event is created at once and recorded as write.
- Give
starts_at(andends_at) as ISO 8601 with a time-zone offset. When the person used words like “next Tuesday at 7”, also pass them asstarts_at_text; PorchQ reads them in the community’s time zone. A time without an offset is read in the community’s time zone too. - Without them,
event_typeiscommunity_eventandvisibilityismembers_only.
Example
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "event_create",
"arguments": {
"property_id": "prop_web4k2m9q7x1v8c3n5b6z0a2s4d",
"title": "Annual meeting",
"starts_at": "2026-11-12T19:00:00-08:00",
"ends_at": "2026-11-12T20:30:00-08:00",
"location": "Clubhouse",
"event_type": "meeting",
"visibility": "members_only",
"reminder_offsets_minutes": [
1440,
60
],
"idempotency_key": "0b9e5a51-4f4a-4b8c-8a4e-3f0d2f5c7e19"
}
}
}
This page as Markdown: /developers/mcp/tools/event_create.md