Create or attach to a project
saveToProjectCreate a project (create), attach lots (attach_parcels), or attach a knowledge reference (attach_reference). Pass projectId or project; with neither, the result lists projects and writes nothing. For attach_parcels, pass a WGS84 GeoJSON polygon (up to 500 selected parcels), or copy lot.parcelExternalId from getFeasibilitySnapshot. Polygon cannot be combined with parcelExternalIds or radiusM. Results report source truncation and attached count. preview=true returns the diff and writes nothing. A write returns a receipt. Not reversible on this surface.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Latitude from getFeasibilitySnapshot. Supplied coordinates are never re-geocoded. | |
| lng | No | Longitude from getFeasibilitySnapshot. | |
| name | No | ||
| role | No | build is the lot being developed; context is surrounding land. Default build. | |
| action | Yes | create: new project from a site. attach_parcels: attach lots to an existing project (use lot.parcelExternalId from getFeasibilitySnapshot). attach_reference: link a knowledge section to an existing project. | |
| address | No | Street address of the site. On `create` this is geocoded server-side when lat/lng are not supplied, and is what gets recorded as the project address. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| polygon | No | WGS84 GeoJSON Polygon for attach_parcels. Attach the parcels selected by the product area flow, up to 500. Interior rings exclude parcels. Use polygon instead of parcelExternalIds and radiusM. Maximum 512 coordinates. | |
| preview | No | When true, return the field-level diff and write nothing. | |
| project | No | Project name to match instead of a UUID, for attach_parcels and attach_reference. Matching more than one lists the candidates instead of guessing. Ignored by create. | |
| radiusM | No | Search half-width in metres when resolving parcel ids. Default 150. | |
| projectId | No | Existing project UUID. Required by attach_parcels and attach_reference unless you pass `project`; ignored by create. | |
| externalRef | No | Provenance of an imported project. Canonical form is `<system>:<id>` (e.g. `notion:<page-id>`). Unique per creator when set. Returned on getProjectContext. Distinct from idempotencyKey. | |
| sectionUuid | No | ||
| idempotencyKey | No | ||
| parcelExternalIds | No | Source parcel ids to attach. Copy lot.parcelExternalId from getFeasibilitySnapshot. If they are not in the current area, pass a larger radiusM on attach_parcels. |