# Changelog

The server's version is in `serverInfo` (`initialize`) and `_meta["io.modelcontextprotocol/serverInfo"]` (`2026-07-28`). Today it is **1.5.0**.

## 1.5.0: October 2026

- **Confirming changes:** creating or changing a calendar event residents can see now waits for the person who asked to confirm it on a PorchQ page. The tool answers with `status: "awaiting_confirmation"` and the page's link. A staff-only event still happens at once. See [Confirming changes](/developers/mcp/permissions#confirming-changes).
- `event_create` is marked `destructiveHint`, since it can reach residents.
- All 14 tools now run on PorchQ's shared tool layer.

## 1.4.0: October 2026

- **The tools run on PorchQ's shared tool layer**, the one PorchQ's own assistant uses, with the same role checks.
- **Every tool declares an `outputSchema`**, and its `structuredContent` follows it.
- **Which community:** a call without `property_id` from a connection that reaches more than one community is refused with `property_required` and the list of communities. It used to pick one.
- **Management companies:** their owners and managers reach the communities the company runs, with a manager's view, and can tick them on the consent page.
- **A membership with no role reaches nothing.** It used to read as a resident.
- **Refusals carry a code** in `structuredContent.error` (`property_required`, `not_found`, `forbidden_role`, `conflict`, `unavailable`).
- `property_id` is optional in every input schema; read tools are marked `idempotentHint`.

## 1.3.0: October 2026

**Protocol**

- MCP revision `2026-07-28` alongside `2025-11-25`, `2025-06-18` and `2025-03-26`: `server/discover`, per-request `_meta`, the `MCP-Protocol-Version`, `Mcp-Method` and `Mcp-Name` headers, `resultType`, and cache hints on the tool list.
- `GET` and `DELETE` on `/mcp` answer `405`; notifications answer `202`.
- An unknown tool is a protocol error (`-32602`).

**Sign-in**

- Every request to `/mcp` needs a token, `initialize` and `tools/list` included, so clients know at once that PorchQ needs sign-in.
- Apps identify themselves with client ID metadata documents, or register at `/oauth/register`.
- PorchQ's own consent page: the person chooses communities and whether the app may make changes.
- Scopes by area, reading and changing separate. `read` and `write` keep working.
- PKCE `S256` only; tokens stored hashed; bound to `https://porchq.com/mcp`; `iss` on every redirect.
- Access tokens last 60 minutes; refresh tokens rotate, and reuse ends the connection.
- `401` and `403` at the HTTP level with `WWW-Authenticate`.
- After signing in, a person sent from an app returns to the consent page.

**Tools**

- `maintenance_request_create` goes through the same path as PorchQ's website and apps: a resident's request notifies staff.
- `event_update` is marked destructive and idempotent.
- Every tool that changes something accepts `idempotency_key`.
- Every call is recorded; changes are limited per person.

## Before 1.3.0

The server served PorchQ's app in ChatGPT, with one hand-registered client and the scopes `read` and `write`.
