Skip to main content
Glama

Server Details

Connect Claude, ChatGPT or any MCP client to your Atwork sheets, tasks, pages and dashboards.

Ownership verified
Status
Healthy
Uptime
100.0% over the last 24 hours
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
Atwork

TDQS

B3.4/5.0

Scored across 125 tools

Disambiguation3/5

Most tools map to a distinct resource+action, but there are real overlaps: sheet.rename vs sheet.update (both set the name), form.update vs peek.update_options vs peek.update_field_options (all patch form/layout settings), and item.create_humanized vs task.create (tasks are items in a tasksheet). The highly detailed descriptions carry most of the disambiguation burden, but with 125 tools an agent will still misselect among the sheet/form/peek/item quartet.

Naming Consistency4/5

The set overwhelmingly follows a dotted namespace.action snake_case convention (sheet.add_attribute, item.update_many, workflow.publish), which is readable and predictable. Minor deviations exist: notifications.* (plural) vs the singular namespaces elsewhere, and sheet.rename sits alongside the broader sheet.update rather than a uniform verb_noun scheme.

Tool Count2/5

125 tools is far beyond the 3-15 sweet spot and pushes well past the 25+ 'too many' threshold; the breadth (sheets, pages, dashboards, workflows, forms, peeks, bookings, integrations, access, agents) explains it but does not make it manageable. Even organized by namespace, the surface is too large for an agent to hold in context, raising selection errors and latency.

Completeness3/5

Core sheet/page/folder/space/view/widget/workflow lifecycles are well covered, including restore paths, but there are notable gaps: calendar events cannot be created (only calendars and reads), goals have only create, locations and members lack read/create/delete companions, comments are write-only, and items can be archived but not deleted. These are workable-but-limiting holes rather than total dead ends.

Available Tools

125 tools
access.grantGrant AccessA
DestructiveIdempotent
Inspect

Give a team or a member a role on a space (its folders and sheets follow) or on one sheet. The caller needs Admin access there. Always asks the user first.

NameRequiredDescriptionDefault
roleYesadmin manages access; editor changes structure and rows; operator edits rows; viewer reads; filler only submits forms
teamNoTeam name
memberNoOr a member's name
sheetIdNoOr one sheet
spaceIdNoThe space (from workspace.structure)

Output Schema

NameRequiredDescription
whoYes
roleYes
resultYes
targetYes
access.readRead AccessA
Read-onlyIdempotent
Inspect

Who can use a space or a sheet, and with which role. Each entry's aclId is what access.update and access.revoke take.

NameRequiredDescriptionDefault
sheetIdNoOr one sheet
spaceIdNoThe space (from workspace.structure)

Output Schema

NameRequiredDescription
aclsYes
targetYes
inheritedYestrue while a sheet or folder still follows its parent's access
access.revokeRevoke AccessA
DestructiveIdempotent
Inspect

Remove one access entry (a team, a member or everyone) from a space or a sheet. Read the entries with access.read first. On a space, its folders and sheets lose that access too. Always asks the user first; afterwards tell the user which role was removed.

NameRequiredDescriptionDefault
aclIdYesThe entry's aclId from access.read
sheetIdNoOr one sheet
spaceIdNoThe space (from workspace.structure)

Output Schema

NameRequiredDescription
whoYes
undoYesThe call that gives the same access back
scopeYes
targetYes
removedRoleYes
access.updateChange Access RoleA
DestructiveIdempotent
Inspect

Change the role of one access entry on a space or a sheet. Read the entries with access.read first. The caller needs Admin access there. Always asks the user first.

NameRequiredDescriptionDefault
roleYesadmin manages access; editor changes structure and rows; operator edits rows; viewer reads; filler only submits forms
aclIdYesThe entry's aclId from access.read
sheetIdNoOr one sheet
spaceIdNoThe space (from workspace.structure)

Output Schema

NameRequiredDescription
toYes
whoYes
fromYes
scopeYes
targetYes
app.createCreate AppAInspect

Create a custom app: a named page holding existing views, forms, pages and dashboards, in order. It starts as a draft; app.publish (asks first) makes it live.

NameRequiredDescriptionDefault
iconNoA Bootstrap icon classbi-grid
nameYes
itemsYesWhat the app shows, in order
descriptionNo

Output Schema

NameRequiredDescription
urlYesPath of the app, on the org's panel domain
nameYes
appIdYes
statusYes
app.publishPublish AppB
DestructiveIdempotent
Inspect

Publish a custom app so the people it is shared with can open it. Always asks the user first.

NameRequiredDescriptionDefault
appIdYesThe app from app.create

Output Schema

NameRequiredDescription
urlYes
appIdYes
statusYes
app.unpublishUnpublish AppA
DestructiveIdempotent
Inspect

Take a custom app offline: it goes back to draft and the people it is shared with can no longer open it. app.publish puts it back. Always asks the user first.

NameRequiredDescriptionDefault
appIdYesThe app's id

Output Schema

NameRequiredDescription
nameYes
appIdYes
statusYes
publishWithYesHow to put it back online
availability.createAdd Time Off or Focus BlockAInspect

Add the user's own time off (type ooo: whole days, shown in the calendar, on the profile and in Settings → Availability; booking pages offer no slots) or a focus block (type focus: a day or a time range, shown in the calendar). Dates and times are in the user's profile timezone.

NameRequiredDescriptionDefault
dateNoA single day; same as startDate with no endDate
typeYesooo = time off (whole days); focus = blocked time for focus work
endDateNoInclusive; defaults to startDate
endTimeNo
messageNoTime off only: the auto-reply note
startDateNo
startTimeNoFocus only, in the profile timezone; absent = all day

Output Schema

NameRequiredDescription
noteYes
blockYes
availability.deleteRemove Time Off or Focus BlockA
DestructiveIdempotent
Inspect

Remove one of the user's own time off or focus blocks by id (from availability.read). Time off is removed from the calendar, the profile and Settings → Availability. The removal is permanent; the output holds the input to re-create it.

NameRequiredDescriptionDefault
idYesThe block's id, from availability.read

Output Schema

NameRequiredDescription
noteYes
deletedYesThe removed block, in full
recreateYesavailability.create input that brings it back
availability.readRead Time Off and Focus BlocksA
Read-onlyIdempotent
Inspect

List the user's own time off and focus blocks between two days (default: the next 30), with their ids, shown in the user's profile timezone. Read before availability.delete.

NameRequiredDescriptionDefault
toNoLast day, inclusive; defaults to 30 days after from
fromNoFirst day, in the profile timezone; defaults to today

Output Schema

NameRequiredDescription
toYes
fromYes
blocksYes
timezoneYes
booking_link.createCreate Booking LinkAInspect

Create a booking link (a public page where people book a meeting with the user; guests fill in its form, and each booking becomes a row in the user's Bookings sheet). Slots follow the user's working hours. Pass hours when the user named the hours the link should offer; when they differ from the working hours the result says so, and only working_hours.update can change them.

NameRequiredDescriptionDefault
slugNoURL part after the handle; defaults to the title, slugified.
hoursNoThe hours the user asked the link to offer. The link always follows the user's working hours; this is only compared with them.
titleYesShown to the people who book, e.g. "Intro call".
daysAheadNoHow many days ahead people can book.
descriptionNo
durationMinutesYesMeeting length in minutes.

Output Schema

NameRequiredDescription
idYes
urlYesPath of the public booking page, on the org's panel domain
noteNo
titleYes
hoursMatchNofalse when the asked hours differ from the working hours
workingHoursYesThe working hours the link offers
durationMinutesYes
booking_link.updateUpdate Booking LinkA
Idempotent
Inspect

Change one of the user's booking links: its title, meeting length, how many days ahead people can book, or turn it off (active: false) and on again. Name the link by its title or id.

NameRequiredDescriptionDefault
linkYesThe link's id (from booking_link.create) or its current title
titleNo
activeNofalse turns the link off; true turns it back on
daysAheadNoHow many days ahead people can book.
durationMinutesNoMeeting length in minutes.

Output Schema

NameRequiredDescription
idYes
urlYesPath of the public booking page, on the org's panel domain
titleYes
activeYes
daysAheadNoSet when people can book a rolling number of days ahead
durationMinutesYes
calendar.createAdd CalendarA
Idempotent
Inspect

Add a personal calendar for the user (My Calendars in the calendar sidebar) with a name, an optional #RRGGBB colour and free/busy-only visibility. A calendar with the same name is returned instead of a second one.

NameRequiredDescriptionDefault
nameYes
colorNo
freeBusyOnlyNoOthers see only busy/free, not the events

Output Schema

NameRequiredDescription
createdYesfalse: a calendar with that name already existed and is returned instead
calendarYes
calendar.prep_briefPrepare Meeting BriefA
Read-onlyIdempotent
Inspect

Return a structured meeting prep brief — linked work, attendees, context, open threads — plus an optional 1-paragraph summary. Retrieval is deterministic graph traversal from Schedulable.itemRef outward via internal *-agent libs. The LLM is a renderer only — it never decides what to fetch. Read-only.

NameRequiredDescriptionDefault
eventIdYesSchedulable event ID
userDayKeyYesCalendar date in user's zone, YYYY-MM-DD — used as cache key segment
bypassCacheNoForce re-retrieval, ignoring cached brief
includeSummaryNoWhether to request an LLM-written summary

Output Schema

NameRequiredDescription
contextYes
summaryNoLLM-written summary; absent when not requested or the call failed
cacheKeyYes
attendeesYes
linkedWorkYes
generatedAtYes
openThreadsYes
calendar.propose_timesPropose Meeting TimesA
Read-onlyIdempotent
Inspect

Propose ranked meeting time slots given duration, window, attendees and ranking strategy. Returns deterministic free-busy-derived slots; the top 3 carry a short LLM-written 'why' string when includeWhy is true. Each slot lists teammates by attendeeUserId and external attendees by externalIndex, their position in externalAttendeeEmails. Read-only — never creates an event.

NameRequiredDescriptionDefault
rankByNosoonest
windowEndYesISO datetime in user's zone, inclusive
includeWhyNo
maxResultsNo
windowStartYesISO datetime in user's zone, inclusive
preferredZonesNoIANA tz names
attendeeUserIdsNo
durationMinutesYes
honorOOOAndFocusNo
honorWorkingHoursNo
sourceCalendarIdsNoLogical calendar ids
externalAttendeeEmailsNo

Output Schema

NameRequiredDescription
slotsYesRanked free slots, best first; start/end are ISO UTC, score is 0..1
nlSummaryNo
calendar.readRead Calendar EventsA
Read-onlyIdempotent
Inspect

List the user's calendar events in an inclusive date range. Optionally restrict to one calendar by id. Returns up to limit event objects with id, summary, startDate/endDate (and times if present), dueDate, assigneeId + assigneeName, calendarId + calendarName, location, and an optional truncated content. Prefer the *Name fields in user-facing prose; the *Id fields are FKs for follow-up tools.

NameRequiredDescriptionDefault
limitNoMax events to return
endDateYesISO date (YYYY-MM-DD), inclusive
startDateYesISO date (YYYY-MM-DD), inclusive
calendarIdNoLimit to one calendar

Output Schema

NameRequiredDescription
eventsYesEvents in the range sorted by start/due date; dates are ISO strings, `content` is capped at 300 chars
calendar.updateEdit CalendarA
DestructiveIdempotent
Inspect

Rename one of the user's own personal calendars, or change its #RRGGBB colour or free/busy-only visibility; by id or name. Connected (Google) and shared calendars are not changed here.

NameRequiredDescriptionDefault
nameNo
colorNo
calendarYesThe calendar's id or its name
freeBusyOnlyNo

Output Schema

NameRequiredDescription
calendarYes
comment.postPost CommentAInspect

Post a comment on an item, named by its sheetId and item id (uuid). The comment is attributed to the agent (visible as 'AI commented'). The user can delete the comment from the item's activity log.

NameRequiredDescriptionDefault
itemIdYesThe item's id (uuid)
contentYes
sheetIdYesThe sheet the item is on

Output Schema

NameRequiredDescription
messageIdYesId of the posted comment
conversationIdYesThe item conversation the comment was posted in
custom_agent.createCreate Custom AgentA
Destructive
Inspect

Create a custom agent: a teammate with its own instructions, capabilities and, with sheetIds / spaceIds / pageIds, a limited view of the workspace. Owner or an Admin only. Always asks the user first.

NameRequiredDescriptionDefault
nameYes
modelNoModel id; defaults to the org's default model
skillsNoSkill keys from the org's skills
pageIdsNo…and/or these pages
sheetIdsNoLimit what it can see to these sheets
spaceIdsNo…and/or these spaces
descriptionNo
capabilitiesNoWhat it may read (and write): sheets, pages, calendar, comments, members, files, dashboards, web, vista
instructionsYesWhat the agent does and how it answers (its persona)

Output Schema

NameRequiredDescription
idYes
urlYes
nameYes
dashboard.createCreate DashboardAInspect

Add an empty dashboard to a sheet; it shows as a Charts view. Then add charts and numbers with widget.create. To build a sheet together with its dashboards, use steps.draft instead.

NameRequiredDescriptionDefault
iconNoBootstrap icon name. Default: bi-bar-chart.
nameYes
sheetIdYesThe sheet whose rows the dashboard's charts count.
descriptionNo

Output Schema

NameRequiredDescription
nameYes
viewIdNoThe sheet's Charts view that shows it
sheetIdYes
dashboardIdYesFor widget.create
dashboard.deleteDelete DashboardA
DestructiveIdempotent
Inspect

Delete a dashboard with its widgets and its Charts view. This always asks the user first: say which dashboard goes before you call it. dashboard.restore brings it back.

NameRequiredDescriptionDefault
dashboardIdYes

Output Schema

NameRequiredDescription
nameYes
deletedYes
sheetIdYes
dashboardIdYes
restoreWithYesThe tool that brings it back, with sheetId + dashboardId
dashboard.readRead DashboardA
Read-onlyIdempotent
Inspect

Read a dashboard's structure: returns dashboard (id, title, description, sheetId + sheetName when bound to a sheet) and widgets[] (each id, title, type, optional summary). Set includeWidgetData=true to also fetch each widget's current rendered numbers — slower, only needed when answering questions ABOUT the numbers (totals, trends, breakdowns) rather than the layout. Without it you save a fetch per widget.

NameRequiredDescriptionDefault
dashboardIdYes
includeWidgetDataNo

Output Schema

NameRequiredDescription
widgetsYesWidgets in layout order; `summary` describes the rendered data when includeWidgetData was set
dashboardYesThe dashboard and, when bound to one, its sheet
dashboard.restoreRestore DashboardA
Idempotent
Inspect

Bring back a deleted dashboard with its widgets and its Charts view, by the sheetId and dashboardId dashboard.delete (or view.delete) returned.

NameRequiredDescriptionDefault
sheetIdYes
dashboardIdYesThe deleted dashboard's id, as dashboard.delete returned it.

Output Schema

NameRequiredDescription
sheetIdYes
restoredYes
dashboardIdYes
dashboard.updateUpdate DashboardA
DestructiveIdempotent
Inspect

Change a dashboard's name, icon, description or filter (the sheet.read filter form; every widget counts only those rows; null clears it). Only what you pass changes; its widgets stay.

NameRequiredDescriptionDefault
iconNo
nameNo
filterNoRows every widget counts, by field name. `null` clears it.
dashboardIdYes
descriptionNo

Output Schema

NameRequiredDescription
changedYesThe settings that were saved
dashboardIdYes
file.confirm_uploadConfirm File UploadA
Idempotent
Inspect

Finish a file upload started with file.request_upload, after the bytes have been PUT to the presigned URL. Returns the stored filename — add that value to a File List field or set it as a Cover.

NameRequiredDescriptionDefault
keyYesThe `key` returned by file.request_upload, after you PUT the bytes.

Output Schema

NameRequiredDescription
filenameYesStored filename to add to a File List field or set as a Cover
file.request_uploadRequest File UploadAInspect

Start a file upload. Returns a presigned URL — you must then PUT the file's bytes to that URL yourself, with Content-Type set to the mime you gave (upload_headers), and finally call file.confirm_upload with the returned key. Images (image/png, image/jpeg, image/webp), a PDF (application/pdf, private only — e.g. a LinkedIn document post) or an MP4 (video/mp4, private only — e.g. a social video), max 10MB. Use visibility: "public" for anything that must load on a website.

NameRequiredDescriptionDefault
mimeYesContent type of the file. One of: image/png, image/jpeg, image/webp, application/pdf (private only), video/mp4 (private only).
size_bytesYesExact byte length of the file you will upload.
visibilityNo`public` is world-readable — use it for blog covers and other web assets.private

Output Schema

NameRequiredDescription
keyYesPass to file.confirm_upload once the PUT succeeded
upload_urlYesPresigned URL to PUT the bytes to
upload_headersYesHeaders the PUT must send exactly; the URL is signed for this Content-Type
expires_in_secondsYesLifetime of the upload URL
folder.createCreate FolderAInspect

Create an empty folder in a space, at the top or inside parentFolderId. Ids come from workspace.structure.

NameRequiredDescriptionDefault
iconNo
nameYes
spaceIdYes
descriptionNo
parentFolderIdNoOmit for a folder at the top of the space

Output Schema

NameRequiredDescription
nameYes
folderIdYes
locationYes
folder.deleteDelete FolderA
DestructiveIdempotent
Inspect

Delete a folder with its subfolders and the sheets and pages inside them. This always asks the user first: say what is inside before you call it. folder.restore brings it all back.

NameRequiredDescriptionDefault
spaceIdYesThe space the folder is in
folderIdYes

Output Schema

NameRequiredDescription
nameYes
deletedYes
folderIdYes
restoreWithYesThe tool that brings it back, with the same spaceId and folderId
folder.restoreRestore FolderA
Idempotent
Inspect

Bring back a deleted folder with the subfolders, sheets and pages its delete removed. Restore the folder it was in first when that one is deleted too.

NameRequiredDescriptionDefault
spaceIdYesThe space the folder was in
folderIdYes

Output Schema

NameRequiredDescription
nameYes
folderIdYes
restoredYesWhat came back with it: only what its delete removed
folder.updateUpdate FolderA
DestructiveIdempotent
Inspect

Rename a folder, change its icon or description, or move it inside another folder of the same space. Only the settings you name change. Ids come from workspace.structure.

NameRequiredDescriptionDefault
iconNo
nameNo
spaceIdYesThe space the folder is in
folderIdYes
descriptionNo
parentFolderIdNoMove the folder inside another folder of the same space

Output Schema

NameRequiredDescription
nameYes
changedYes
folderIdYes
locationYesWhere the folder now sits
form.createCreate FormAInspect

Add a form (a peek of kind form) to an existing sheet: each submission becomes a row. fields are field names or codes in order, or { field, required, label, help, placeholder, width } (width 25, 50, 75 or 100 percent of the row in the classic layout). layout: classic (default; fields side by side by width) or steps (one question at a time). Optional submitLabel, description above the questions and successMessage after sending. Fields must already exist on the sheet (add them with sheet.add_attribute first). Theme, accent and header: peek.update_options. Publishing it and its public link stay in the form builder.

NameRequiredDescriptionDefault
iconNo
nameYes
fieldsYesThe questions, in order; each submission becomes a row.
layoutNoHow the questions are laid out. Default classic.
sheetIdYes
descriptionNoText shown above the questions.
submitLabelNoThe Submit button's text, in the form's language. Default: Submit in the visitor's language.
successMessageNoThank-you message shown after the form is sent (plain text; answer tokens, answers, button and Submit another are set in Form Studio).

Output Schema

NameRequiredDescription
nameYes
fieldsYesThe field names the form asks for, in order
formIdYesThe new form's id, for form.update and form.delete
sheetIdYes
form.deleteDelete FormA
DestructiveIdempotent
Inspect

Delete a form (a peek of kind form) from a sheet; the rows it collected stay; a record layout is refused. This always asks the user first: say which form goes before you call it. form.restore brings it back with its questions and settings.

NameRequiredDescriptionDefault
formIdYesThe form to delete (sheet.schema lists a sheet's forms).
sheetIdYes

Output Schema

NameRequiredDescription
nameYes
formIdYes
deletedYes
sheetIdYes
restoreWithYesThe tool that brings it back, with sheetId + formId
form.restoreRestore FormA
Idempotent
Inspect

Bring back a deleted form with its questions and settings, by the sheetId and formId form.delete returned. A record layout (how a row opens) is refused.

NameRequiredDescriptionDefault
formIdYesThe deleted form's id, as form.delete returned it.
sheetIdYes

Output Schema

NameRequiredDescription
nameYes
formIdYes
sheetIdYes
restoredYes
form.statsRead Form StatsA
Read-onlyIdempotent
Inspect

How a form is doing: views (public page loads), starts (first field typed), submissions (rows the form added), the same three for the previous equal period, the median time to finish, submissions per day for the last 14 days, and how many who started reached each question with the question that loses the most people. Use for questions like 'how is my inquiry form doing?' or 'where do people drop off my form?'. Pass the form's peekId (sheet.schema lists a sheet's forms).

NameRequiredDescriptionDefault
rangeNo7d, 30d or all (all time has no previous period)7d
peekIdNo

Output Schema

NameRequiredDescription
rangeYes
reachYesWhere people stop: how many who started reached each question
viewsYes
peekIdYes
perDayYesLast 14 days, oldest first
startsYes
previousYesThe same numbers for the equal period before; null for all time
biggestDropYesThe question that loses the most people compared with the one before; null when none does
fillSamplesYesHow many submissions the median covers
submissionsYes
medianFillMsYesMedian time from first input to submit, in ms
form.updateUpdate FormA
DestructiveIdempotent
Inspect

Change a form (a peek of kind form: it collects new rows): name, description, addFields (names or codes, or { field, required, label, help, placeholder, width }, added at the end), removeFields, editFields (a question's label, required, help, placeholder or width: 25, 50, 75 or 100 percent of the row in the classic layout), order (every question in the new order), layout (classic, or steps: one question at a time), submitLabel (the Submit button's text), visibleWhen (per question: show it only when a sheet.read-style filter on the answers holds; when: null always shows it) successMessage, aiReply (the thank-you screen shows Dana's reply written from each person's answers: a plain-text prompt where {Field name} stands for an answer, and a fallback shown when it is slow; null goes back to the message) and redirect (send people to a web page after they submit; put answers in the link as {Field name}; null goes back to the message). onResponse turns the response emails on or off: notify emails the people you name (members; default you) one email per response with the answers, copy emails the respondent their answers at an Email field on the form (a form anyone with the link can fill needs Block spam first). Pass aiReply or redirect, not both. Only what you pass changes; the other questions and settings stay. Without formId it changes the form open in Form Studio. A record layout (how a row opens) is refused: change it with the peek.* tools. Theme, accent and header: peek.update_options. Publishing, and blocks (a heading, text, image, divider or section), stay in the form builder.

NameRequiredDescriptionDefault
nameNo
orderNoEvery question on the form (field names or codes) in the new order, after addFields and removeFields; headings and other blocks keep their place.
formIdNoThe form's id (sheet.schema lists a sheet's peeks with their kind). Default: the form open in Form Studio.
layoutNoclassic places the questions side by side by width (100% takes the row), steps asks one at a time.
aiReplyNoShow each person an AI reply written from their answers on the thank-you screen; null shows the thank-you message again.
sheetIdNoThe form's sheet. Default: the form's own sheet.
redirectNoSend people to a web page after they submit; null goes back to the thank-you message.
addFieldsNoQuestions to add at the end of the form.
editFieldsNoChange a question's label, required flag, help, placeholder or width; the other questions stay.
onResponseNoThe emails a response sends; only the switch you pass changes.
descriptionNoText shown above the questions.
submitLabelNoThe Submit button's text, in the form's language. Default: Submit in the visitor's language.
visibleWhenNo
removeFieldsNoField names or codes to take off the form.
successMessageNoThank-you message shown after the form is sent (plain text; answer tokens, answers, button and Submit another are set in Form Studio).

Output Schema

NameRequiredDescription
fieldsYesThe field names the form asks for now, in order
formIdYes
changedYesWhat was saved
sheetIdYes
goal.createCreate GoalCInspect

Create a goal on the Goals page: personal or for the organization, measured by completed tasks, by a sheet's rows (count, or sum / average of a number field), or not measured.

NameRequiredDescriptionDefault
endNoYYYY-MM-DD
nameYes
typeNokpi
scopeNopersonal
startNoYYYY-MM-DD
targetNo
measureYes
directionNoWhether to stay above or below the targetabove
recurrenceNoHow often the target resetsone_time
descriptionNo

Output Schema

NameRequiredDescription
idYes
urlYes
nameYes
inbound_email.regenerateReplace Inbound Email AddressA
Destructive
Inspect

Replace a sheet's inbound email address with a new random one, e.g. when the old one gets spam. The old address stops working. Always asks the user first.

NameRequiredDescriptionDefault
sheetIdYesThe sheet whose inbound address is replaced

Output Schema

NameRequiredDescription
toYes
fromYes
noteYes
sheetIdYes
inbound_email.renameRename Inbound Email AddressA
DestructiveIdempotent
Inspect

Rename a sheet's inbound email address (the address that turns emails into rows). The old address stops working. Always asks the user first.

NameRequiredDescriptionDefault
nameYesThe new name, the part before the first dot, e.g. "leads"
sheetIdYesThe sheet whose inbound address changes

Output Schema

NameRequiredDescription
toYes
fromYes
noteYes
sheetIdYes
integration.list_operationsList Connected App OperationsA
Read-onlyIdempotent
Inspect

Discover what the workspace's connected integrations can do. Call with no arguments for the connected providers and their operations. Pass provider to get that provider's operations WITH their field schemas. Each operation reports access: run read ones with integration.query, write and destructive ones with integration.execute (a destructive one deletes, archives or overwrites, and the user approves it every time). Fields marked dynamic need integration.list_options before use. Use the provider value exactly as returned here when calling the other integration tools. Connections marked mine: true belong to the current user; prefer those. When more than one applies, show the user the labels and let them choose — never ask which connection to use without listing the options.

NameRequiredDescriptionDefault
providerNoProvider name, e.g. 'slack'. Omit for the list of connected providers.

Output Schema

NameRequiredDescription
hintNo
providerNoWith `provider`: the provider named
providersNoWithout `provider`: the connected providers
operationsNoWith `provider`: its operations, with field schemas
needsAccessNo
integration.list_optionsList Connected App OptionsA
Read-onlyIdempotent
Inspect

Resolve the valid values for a dynamic field — one marked dynamic by integration.list_operations, e.g. the Slack channels you may post to. Returns [{value, label}]; pass the value in params.

NameRequiredDescriptionDefault
fieldYesThe field marked `dynamic` by integration.list_operations
providerYesProvider name exactly as integration.list_operations returned it
resourceYes
operationYes
credentialIdNo

Output Schema

NameRequiredDescription
optionsYes
integration.queryQuery Connected AppA
Read-onlyIdempotent
Inspect

Run a READ integration operation, e.g. list Slack channels or fetch channel history. Only operations integration.list_operations reports with access read are allowed — use integration.execute for write and destructive ones. credentialId is optional when the provider has exactly one connection.

NameRequiredDescriptionDefault
paramsNo
providerYesProvider name exactly as integration.list_operations returned it
resourceYes
operationYes
credentialIdNoOnly needed when the provider has several connections

Output Schema

NameRequiredDescription
resultNoThe provider's response, as the integration service returned it
item.archiveArchive ItemsA
DestructiveIdempotent
Inspect

Archive (archived: true) or unarchive (archived: false) up to 50 rows of a sheet. An archived row keeps all its data but leaves default reads and search, sends no reminders and fires no workflows; unarchiving brings it back. Read archived rows with sheet.read and archived: "only".

NameRequiredDescriptionDefault
itemIdsYesIds of the rows to archive or unarchive (1–50)
sheetIdYes
archivedYestrue archives the rows; false unarchives them

Output Schema

NameRequiredDescription
changedYesIds now in the requested state, including ones that already were
notFoundYesIds that are not rows of this sheet
item.create_humanizedCreate ItemAInspect

Create a row (item) in any sheet using HUMAN VALUES for its fields — you don't need ids. Provide sheetId and a fields map of attribute name→value; option/select/status/member/team/job values are resolved to the sheet's real values, and an unrecognised value returns an error listing the valid options rather than guessing. Document/Description fields accept MARKDOWN and are stored as rich text. Blocking / Blocked By take item titles, Index (#10) or ids from the same sheet. Returns {itemId}.

NameRequiredDescriptionDefault
fieldsYesAttribute name/code → human value. Select/Status/Member/Team/Job values are matched to the sheet's real options (best-match; an unrecognised value errors with the valid list). e.g. { Status: 'In Progress', Assignee: 'Ali Reza' }
sheetIdYes

Output Schema

NameRequiredDescription
urlYesPanel link that opens the row; use it as the target of a markdown link
itemIdYesId of the created row
sheetIdYesSheet the row was created in
spaceIdYesSpace of that sheet; null for a sheet outside a space
item.create_manyCreate ItemsAInspect

Create many rows (items) in one sheet in ONE call — use it instead of repeated item.create_humanized whenever you add more than one row (e.g. "add these 50 leads" from a pasted list). Each row is a fields map of attribute name → HUMAN VALUE, resolved exactly as item.create_humanized does. Up to 200 rows per call; for more, make several calls. A row whose value cannot be resolved, or that matches an existing row by a unique field, is skipped with a reason and the rest are created. Workflows on the sheet run for every created row, as for a row added by hand. The whole call is one batch: item.undo_batch with the returned batchId and sheetId removes every row it created. Returns { batchId, created, skipped, skippedCount, url } — tell the user the counts and the skip reasons.

NameRequiredDescriptionDefault
rowsYesThe rows to create, 1–200; split a longer list into several calls
sheetIdYes

Output Schema

NameRequiredDescription
urlYesPanel link to the sheet
batchIdYesId of the batch; pass it with sheetId to item.undo_batch to undo the whole batch. Null when nothing was written
createdYesRows created
sheetIdYesSheet the rows are in
skippedYesRows left unchanged and why; at most 20 are listed
spaceIdYesSpace of that sheet; null for a sheet outside a space
stoppedNoSet when a row failed unexpectedly: rows after it were not attempted; the rest stay written
updatedYesRows updated
skippedCountYesAll rows skipped, including ones not listed
item.read_filesRead Item FilesA
Read-onlyIdempotent
Inspect

Read the text of the files on one row: uploads in its File List fields, and Google Drive files the user linked themselves. Reads up to 5 files (10 MB each) in field and cell order until the text budget is spent; more counts the rest — pass attribute to read one field. PDF, DOCX, XLSX, PPTX, CSV, text, and Google Docs, Sheets and Slides are read. An audio upload is listed under unreadable to transcribe with audio.transcribe. A Drive file another member linked, an image, or a file that cannot be read is listed under unreadable with why (and the Drive link): tell the user, and never guess what it contains.

NameRequiredDescriptionDefault
itemIdYesThe row's id
sheetIdYes
attributeNoRead only this File List field (its name or code); omit to read every File List field

Output Schema

NameRequiredDescription
itemYes
moreYesFiles not read: past the first 5, or after the text budget ran out
noteNo
filesYes
unreadableYesFiles that could not be read, with why
item_tree.duplicateDuplicate Sheet Page Or FolderAInspect

Copy a sheet (structure and rows), a page, or a folder with what is in it, into a space or folder. Ids come from workspace.structure.

NameRequiredDescriptionDefault
pageIdNo
sheetIdNoThe sheet to copy (give exactly one of sheetId, pageId, folderId)
folderIdNoA folder is copied, with the sheets and pages in it, within its own space
toSpaceIdYesThe space the copy goes to
toFolderIdNoA folder of `toSpaceId`; omit for the top of the space

Output Schema

NameRequiredDescription
kindYes
nameYesThe name of what was copied
locationYesWhere the copy sits
sourceIdYes
item_tree.moveMove Sheet Page Or FolderB
DestructiveIdempotent
Inspect

Move a sheet or page to another space or folder, or a folder inside another folder of its space. Ids come from workspace.structure. Returns where it now sits, by name.

NameRequiredDescriptionDefault
pageIdNo
sheetIdNoThe sheet to move (give exactly one of sheetId, pageId, folderId)
folderIdNoA folder moves only within its own space
toSpaceIdYesThe space it goes to
toFolderIdNoA folder of `toSpaceId`; omit for the top of the space

Output Schema

NameRequiredDescription
idYes
kindYes
nameYes
locationYesWhere it now sits
item.undo_batchUndo Item BatchA
DestructiveIdempotent
Inspect

Undo a whole batch written by item.create_many, item.update_many or item.update_where, in one step, naming the batchId it returned and the sheetId it wrote: a create batch deletes the rows it created that still exist; an update batch restores each field's previous value unless it was changed since (those are reported as conflicts and kept). Only the user who ran the batch (or the org owner) can undo it, once, within 7 days. Use it when the user asks to undo a bulk change. Effects workflows already had (emails, external calls) are not reverted.

NameRequiredDescriptionDefault
batchIdYesThe batchId item.create_many or item.update_many returned
sheetIdYesThe sheet the batch wrote, as that call returned it

Output Schema

NameRequiredDescription
noteYesWhat undo does not revert; tell the user
statusYesundone, or why nothing was changed
revertedYesRows deleted (create batch) or restored (update batch)
conflictsYesRows with fields changed since the batch; those fields were kept, not restored
alreadyGoneYesRows of the batch deleted since; nothing to undo for them
item.update_humanizedUpdate ItemA
DestructiveIdempotent
Inspect

Update a row (item) using HUMAN VALUES. Provide sheetId, itemId, and a fields map of attribute name→value; only the given fields change. Option/member/etc. values are resolved to real ids (unrecognised → error listing valid options). Document/Description fields accept MARKDOWN and are stored as rich text. File List fields take the files the cell should hold: stored filenames from file.confirm_upload, or the entry objects sheet.read shows for this row; a replace drops the files it does not name. Blocking / Blocked By take item titles, Index (#10) or ids from the same sheet.

NameRequiredDescriptionDefault
modeNo`append` only affects Document/Description fields (new content is added after the existing content) and File List fields (new files are added to the cell's). All other field types always replace.replace
fieldsYesAttribute name/code → human value. Only the given fields change; values are matched to the sheet's real options.
itemIdYes
sheetIdYes

Output Schema

NameRequiredDescription
urlYesPanel link that opens the row; use it as the target of a markdown link
itemIdYesId of the updated row
item.update_manyUpdate ItemsA
Destructive
Inspect

Update a LISTED set of rows (by id) in one sheet in ONE call — use it instead of repeated item.update_humanized whenever you change more than one row. Each row is { itemId, fields }; only the given fields change and values are HUMAN VALUES resolved as in item.update_humanized. Up to 200 rows per call. Rows that are not in the sheet, archived, read-only or have an unresolvable value are skipped with a reason and never changed; the rest are updated. Workflows on the sheet run for every updated row, as for an edit by hand. The whole call is one batch: item.undo_batch with the returned batchId and sheetId restores the previous values. Returns { batchId, updated, skipped, skippedCount, url } — tell the user the counts and the skip reasons.

NameRequiredDescriptionDefault
rowsYesThe rows to change, 1–200, each by id with only the fields that change
sheetIdYes

Output Schema

NameRequiredDescription
urlYesPanel link to the sheet
batchIdYesId of the batch; pass it with sheetId to item.undo_batch to undo the whole batch. Null when nothing was written
createdYesRows created
sheetIdYesSheet the rows are in
skippedYesRows left unchanged and why; at most 20 are listed
spaceIdYesSpace of that sheet; null for a sheet outside a space
stoppedNoSet when a row failed unexpectedly: rows after it were not attempted; the rest stay written
updatedYesRows updated
skippedCountYesAll rows skipped, including ones not listed
item.update_whereUpdate Items By FilterA
Destructive
Inspect

Set the same field values on EVERY row of one sheet that matches a filter, in ONE call — e.g. "Country = Germany where Country is DE or Deutschland". Prefer it over reading rows and calling item.update_many whenever the rows to change are described by a condition. filter is { operator: AND|OR, conditions: [{ column, operator, value }] } (≤ 10 conditions, operators as in sheet.aggregate) and fields maps field name → ONE literal human value (≤ 30); columns take names or codes and option/member values are matched as in item.update_humanized. File List fields are set per row with item.update_many, not here. Rows already holding the values are left alone; archived and read-only rows are skipped. When more than 20 rows would change, the user confirms first: in a chat on a preview card (the call waits for it); over MCP the call is refused with ROWS_NEED_CONFIRM, the count and a sample, and nothing changes — show the user and call again with confirmRows set to that count only once they accept. At most 1,000 rows per call — narrow the filter otherwise. The change is one batch: item.undo_batch with the returned batchId and sheetId restores the previous values. Returns { batchId, updated, unchanged, skipped, skippedCount, url }.

NameRequiredDescriptionDefault
fieldsYesAttribute name/code → human value, as in item.create_humanized, at most 30 per row. Select/Status/Member/Team/Job values are matched to the sheet's real options.
filterYes
sheetIdYes
confirmRowsNoMCP only: the number of rows the user accepted after a ROWS_NEED_CONFIRM refusal. Needed when more than 20 rows would change; never set it before the user agrees.

Output Schema

NameRequiredDescription
urlYesPanel link to the sheet
batchIdYesId of the batch; pass it with sheetId to item.undo_batch to undo the whole batch. Null when nothing was written
createdYesRows created
sheetIdYesSheet the rows are in
skippedYesRows left unchanged and why; at most 20 are listed
spaceIdYesSpace of that sheet; null for a sheet outside a space
stoppedNoSet when a row failed unexpectedly: rows after it were not attempted; the rest stay written
updatedYesRows updated
unchangedYesMatching rows that already held every value
skippedCountYesAll rows skipped, including ones not listed
nothingToChangeNoSet when every matching row already held the values
language.updateChange LanguageA
DestructiveIdempotent
Inspect

Change the language the user's panel, emails and notifications are in: English or Farsi. Dana keeps answering in the language the user writes in.

NameRequiredDescriptionDefault
languageYesen = English, fa = Farsi (right to left)

Output Schema

NameRequiredDescription
languageYes
location.createAdd a LocationA
Destructive
Inspect

Add a location (an office or branch) to the organization: its name and IANA timezone, with an optional address, city, state, country, zip code and phone number. main: true makes it the main location. The organization's Owner or an Admin only; always asks first.

NameRequiredDescriptionDefault
cityNo
mainNoMake this the organization's main location; the current main one stops being main
nameYes
stateNo
addressNoStreet and number
countryNo
zipCodeNo
timezoneYes
phoneNumberNo

Output Schema

NameRequiredDescription
idYes
cityYes
mainYes
nameYes
stateYes
addressYes
countryYes
zipCodeYes
timezoneYes
location.updateUpdate a LocationA
DestructiveIdempotent
Inspect

Change one of the organization's locations, named by its current name or id: rename it, or change its timezone, address, city, state, country, zip code or phone number; main: true makes it the main location. Only the fields given change. The organization's Owner or an Admin only; always asks first.

NameRequiredDescriptionDefault
cityNo
mainNoMake this the organization's main location; the current main one stops being main
nameNoThe location's name, e.g. Berlin office
stateNo
addressNoStreet and number
countryNo
zipCodeNo
locationYesThe location to change, by its current name or id
timezoneNoIANA zone, e.g. Europe/Berlin
phoneNumberNo

Output Schema

NameRequiredDescription
idYes
cityYes
mainYes
nameYes
stateYes
addressYes
countryYes
zipCodeYes
timezoneYes
member.readList MembersA
Read-onlyIdempotent
Inspect

List org members. Optionally filter by name prefix. Returns up to limit member objects (id, userId, fullName, teamId, teamName, jobId, jobName). teamName/jobName are the resolved display titles — use them in prose; the *Id fields are FKs for tools that need them. Note: AI-agent identities may appear in the list — exclude them when answering questions about people.

NameRequiredDescriptionDefault
limitNo
nameStartsWithNoCase-insensitive prefix filter on full name

Output Schema

NameRequiredDescription
membersYesOrg members; `id` is the employee id (assignee FK), `userId` the user id; *Name fields are display names
member.update_profileUpdate a Member's ProfileA
DestructiveIdempotent
Inspect

Owner only: change another member's profile (name, job title, @handle, pronouns, bio, phone number, status, timezone, out-of-office days). Always asks the user first. For the user's own profile use profile.update.

NameRequiredDescriptionDefault
bioNoUp to 280 characters; empty clears it
jobNoA job title from the organization's Jobs list, by name; jobs are never created here
phoneNoPhone number as the user wrote it: digits, spaces and + ( ) - . only, at least 3 digits; empty clears it. Who sees it is a preference.
handleNoThe @handle of the public profile
memberYesThe member's full name, as member.read lists it
statusNoThe status line next to the name; null clears it
lastNameNo
pronounsNoEmpty clears them
timezoneNoIANA zone, e.g. Europe/Berlin
firstNameNo
outOfOfficeNoWhole-day time off in the calendar, inclusive days; the list replaces current and future whole-day time off, past time off is kept; to: null = until further notice; null clears it

Output Schema

NameRequiredDescription
savedYesEach changed field as saved
memberYes
notifications.readRead Notification SettingsA
Read-onlyIdempotent
Inspect

Read the user's notification switches: each category by in-app, push, email and Telegram. Categories: MENTION (@mentions), PAGE_COMMENT (page comment replies), TASK_ASSIGNEE (assigned to you), DUE_DATE, UPDATE_ITEM (changes to your items), MESSAGE (chat), REMINDER, DAILY_CLOSEOUT (end-of-day close-out), AGENT_DONE, AGENT_NEEDS_INPUT, BOOKING, SUPPORT_TICKET (replies to your support tickets). Also whether quiet hours are on.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
categoriesYes
quietHoursYesPush and email held outside working hours (notifications.set_quiet_hours)
telegramLinkedYesTelegram can only be switched on once a chat is linked
notifications.resetReset Notification SettingsA
DestructiveIdempotent
Inspect

Put every notification switch of the user back to the default: all on, Telegram off. Only when the user asks to reset them.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resetYes
notifications.set_quiet_hoursSet Quiet HoursA
DestructiveIdempotent
Inspect

Turn the user's own quiet hours on or off: when on, push and email outside their working hours wait and arrive together when the day starts; in-app notifications still collect. Turning on needs working hours (working_hours.update). Turning off sends anything held. In Atwork's chat the user confirms the change on a card first.

NameRequiredDescriptionDefault
enabledYestrue holds push and email outside working hours, false sends them right away

Output Schema

NameRequiredDescription
changedYesfalse when quiet hours were already in the asked state
enabledYes
workingHoursNoThe working hours quiet hours follow, when turned on
notifications.updateUpdate Notification SettingsA
DestructiveIdempotent
Inspect

Turn the user's notifications on or off per category and channel (inApp, push, email, telegram). Push is only the per-category switch; browser push itself is turned on in the browser. Telegram needs a linked chat first.

NameRequiredDescriptionDefault
switchesYesOne entry per category and channel to turn on or off. Categories: MENTION (@mentions), PAGE_COMMENT (page comment replies), TASK_ASSIGNEE (assigned to you), DUE_DATE, UPDATE_ITEM (changes to your items), MESSAGE (chat), REMINDER, DAILY_CLOSEOUT (end-of-day close-out), AGENT_DONE, AGENT_NEEDS_INPUT, BOOKING, SUPPORT_TICKET (replies to your support tickets)

Output Schema

NameRequiredDescription
savedYes
org.updateUpdate Organization SettingsA
DestructiveIdempotent
Inspect

Change the organization's settings for everyone: its name, default language (en or fa), calendar (gregorian or jalali) and the day the week starts on. Only the fields given change. The organization's Owner or an Admin only; always asks first.

NameRequiredDescriptionDefault
nameNoThe organization's name
calendarNoThe default calendar
languageNoThe default language new members start with
startOfWeekNoThe day calendars and weekly views start on

Output Schema

NameRequiredDescription
nameYes
calendarYes
languageYes
startOfWeekYes
page.createCreate PageAInspect

Save a draft as a real page in the workspace. markdown is the body — the server converts to BlockNote. Use AFTER drafting the prose in the conversation, when the user signals 'save it' / 'make this a page' / 'add it to ' — never speculatively. The page becomes live immediately; the user has 30 seconds to undo from the trace bubble. For a named destination pass its spaceId (find a space by name with workspace.structure); omit spaceId to save in the space the user is on.

NameRequiredDescriptionDefault
nameYes
spaceIdNoTarget space. Omit to use the space the user is on.
folderIdNo
markdownYesStandard CommonMark. Use # for the page top-level heading (NOT the page name — the name field is separate), ## for sections, * for bullets, **bold**, *italic*. Do NOT include front matter, HTML tags, or BlockNote-specific syntax.

Output Schema

NameRequiredDescription
nameYesPage name as stored
pageIdYesId of the created page
spaceIdYesSpace the page landed in
page.deleteDelete PageA
DestructiveIdempotent
Inspect

Delete a page. This always asks the user first. page.restore brings it back with its content.

NameRequiredDescriptionDefault
pageIdYes

Output Schema

NameRequiredDescription
nameYes
pageIdYes
deletedYes
restoreWithYesThe tool that brings it back, with the same pageId
page.editEdit PageA
Destructive
Inspect

Patch an existing page with one of five targeted operations. append/prepend add markdown at end/start. append-to-section inserts at the end of a section (before the next heading) — use this when adding to a section, NOT replace-section. replace-section swaps a section's heading + body with new markdown; drops any non-text blocks (images/files) inside it. delete-section removes a section entirely. sectionHeading matches case-insensitive trim. Always call page.read FIRST so you know the actual heading text. The page changes immediately; the user has 30 seconds to undo.

NameRequiredDescriptionDefault
opYes
pageIdYes
markdownNo
sectionHeadingNo

Output Schema

NameRequiredDescription
opYesThe operation that ran
nameYesPage name
pageIdYesId of the edited page
spaceIdYesSpace the page is in
previousContentYesThe replaced or removed blocks (BlockNote JSON) for undo, or null
previousContentTooLargeYesTrue when previousContent was omitted for size
page.readRead PageA
Read-onlyIdempotent
Inspect

Read a page's name, body (text, capped at 15,000 chars), cover, author, date and other metadata. Use when the user references a page by name ("the launch brief", "Sara's onboarding page") and you need the actual content to summarize, recap, translate, or quote. The bodyTruncated: true flag means content was clipped — for very long pages, ask the user which section they care about, or accept that you're working from the head of the page.

NameRequiredDescriptionDefault
pageIdYes

Output Schema

NameRequiredDescription
idYesPage id
bodyYesPage text, capped at 15,000 chars
dateYesThe page's date, YYYY-MM-DD
iconYesIcon name
nameYesPage name
coverYesBuilt-in cover (`atw:1`…`atw:6`) or an uploaded file's name
spaceIdYesSpace id
authorIdYesEmployee id of the page's author
authorNameYesThe author's name; null when no author or no longer a member
mentionCountYesNumber of mentions
bodyTruncatedYesTrue when `body` was clipped
attachmentCountYesNumber of attachments
page.restoreRestore PageA
Idempotent
Inspect

Bring back a deleted page with its content, in the place it was deleted from.

NameRequiredDescriptionDefault
pageIdYes

Output Schema

NameRequiredDescription
nameYes
pageIdYes
restoredYes
page.updateUpdate PageA
DestructiveIdempotent
Inspect

Rename a page, change its icon, set or clear its cover, author or date, or move it to another space or folder. Only what you name changes; edit the page's content with page.edit.

NameRequiredDescriptionDefault
dateNoThe page's date, `YYYY-MM-DD`; null removes it
iconNo
nameNo
coverNoA built-in cover, `atw:1` to `atw:6`; null removes it
pageIdYes
authorIdNoEmployee id (from `member.read`) shown as the page's author; null removes it
toSpaceIdNoMove the page to this space
toFolderIdNoMove the page into this folder (of `toSpaceId`, or of the page's own space when that is absent)

Output Schema

NameRequiredDescription
nameYes
pageIdYes
changedYes
locationYesWhere the page sits
peek.add_layout_itemAdd Field To Record LayoutAInspect

Append (or insert at index) an item into a record layout (how a row opens; a form is refused: change its questions with form.update). Types: 'attribute' (a field; pass attributeCode, one of the sheet's field codes from sheet.schema or peek.read), 'tabs' (a Tabs block; pass tabTitles, 1-8), 'related_rows' (the rows a Relation field links to; pass the Relation field's attributeCode and display list | table), 'history' (the row's change history), 'comments' (the row's comments). Pass tabId (from peek.read) to put any item inside that tab. Pass underTitle: true with type 'attribute' to show the field on the line under the record's title, at its end (at most 4 short fields: Status, Select, Date, Number, Email, Short Text, Modified at…; a field already on the layout moves there). 'header', 'welcome' and 'submit' are legacy form items and are refused on a record layout.

NameRequiredDescriptionDefault
typeYes
indexNo
tabIdNo
titleNo
peekIdNo
displayNo
tabTitlesNo
isRequiredNo
underTitleNo
attributeCodeNo

Output Schema

NameRequiredDescription
okYes
layoutItemIdYes
peek.readRead Record LayoutA
Read-onlyIdempotent
Inspect

Read a peek and return its kind (form: it collects new rows; record: a record layout, how a row opens), its layoutStyle, its layout array and options. Items reference sheet attributes by code; a record layout also holds Tabs blocks (tabs, and tabId on the items inside a tab), Related rows (display), History and Comments, and marks the fields shown under the record's title underTitle: true. Use before changing a record layout with peek.add_layout_item, peek.remove_layout_item, peek.reorder_layout, peek.update_options or peek.update_field_options; a form is changed with form.update.

NameRequiredDescriptionDefault
peekIdNo

Output Schema

NameRequiredDescription
kindYesform: it collects new rows; record: how a row opens
nameYes
layoutYes
peekIdYes
optionsYes
sheetIdYes
descriptionYes
layoutStyleYesA form's layout: classic (side by side by width) or steps (one question at a time); a record layout: columns
peek.remove_layout_itemRemove Field From Record LayoutA
DestructiveIdempotent
Inspect

Remove an item from a record layout (how a row opens; a form is refused: take a question off it with form.update removeFields). Identify the item by layoutItemId (returned by peek.read) or by attributeCode (removes the first attribute item matching that code — useful for 'remove cover/icon'). Removing from the layout does NOT delete the underlying sheet attribute; use sheet.remove_attribute for that. Removing a field shown under the title takes it off the layout altogether; to move it back into the body instead, use peek.reorder_layout underTitle without it.

NameRequiredDescriptionDefault
peekIdNo
layoutItemIdNo
attributeCodeNo

Output Schema

NameRequiredDescription
okYes
removedCountYes
peek.reorder_layoutReorder Record LayoutA
DestructiveIdempotent
Inspect

Reorder a record layout's (how a row opens) items by passing the full list of item ids in the desired order. Must be a permutation of the current layout (no missing or extra ids — call peek.read first to discover ids). For 'move X to top' or 'put Y after Z', read the layout, build the new id sequence yourself, and pass it here. Pass underTitle (item ids, in order, at most 4 short fields) to set exactly which fields show on the line under the record's title; fields left out go back into the body where they sit, and [] empties the line. orderedItemIds is optional with underTitle. A form is refused: reorder its questions with form.update order.

NameRequiredDescriptionDefault
peekIdNo
underTitleNo
orderedItemIdsNo

Output Schema

NameRequiredDescription
okYes
peek.update_field_optionsUpdate Record Layout FieldA
DestructiveIdempotent
Inspect

Patch per-field options on a single item of a record layout (how a row opens; a form is refused: change a question's label or required flag with form.update editFields): title override (the label for this field, separate from the sheet attribute name), isRequired flag, background, color, borderColor, borderSize, radiusSize, radius, align. Identify the item by layoutItemId (from peek.read) or attributeCode (matches first attribute item). Only included option keys are touched.

NameRequiredDescriptionDefault
peekIdNo
optionsYes
layoutItemIdNo
attributeCodeNo

Output Schema

NameRequiredDescription
okYes
matchedItemIdYes
peek.update_optionsUpdate Record Layout SettingsA
DestructiveIdempotent
Inspect

Patch a peek's options. A form (kind form): theme { preset workspace | paper | sand | ocean | forest | dusk, appearance auto | light | dark }, accent (a palette token color-N), header { logo, cover, width narrow | normal | wide, direction auto | ltr | rtl } and submit { label }; its questions and layout change with form.update. A record layout (how a row opens): color, accentColor, border, size, direction, rows, header text/background/size/align, and record — saving (auto | button), buttons { saveAndNew, discard, rowNav } (shown with a Save button), readOnly, openAs (panel | dialog | page), use { newRow (the layout + New uses; one per sheet, so true clears it on the sheet's other layouts), openAsMenu (listed in the Open as menu) }. record is merged key by key into the stored one. To make a layout the sheet's default when a row opens, use sheet.update defaultFormId. Pass only the keys you want to change — existing options are preserved. Booking-specific options are not exposed via this tool.

NameRequiredDescriptionDefault
peekIdNo
optionsYes

Output Schema

NameRequiredDescription
okYes
portal.updateUpdate PortalA
DestructiveIdempotent
Inspect

Set up the client portal (what customers see): title, welcome text, sign-in, and sections for an FAQ read from a sheet, a contact form and a contact card. Settings and sections not named are kept; a second FAQ or form on the same sheet updates the first. Owner or an Admin only. Always asks the user first.

NameRequiredDescriptionDefault
faqNoAn FAQ section that reads its questions and answers from a sheet
titleNo
contactNoA contact card
contactFormNoA section with a form customers fill in
welcomeTextNo
requireLoginNoCustomers must sign in to see the portal
customerRegistrationNoCustomers may sign up on their own

Output Schema

NameRequiredDescription
urlYes
changedYes
preferences.readRead PreferencesA
Read-onlyIdempotent
Inspect

Read the user's own preferences: language, theme, calendar, start page, sidebar, presence status, live-update toasts, chat history retention, pins and who sees each profile field.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
dockYes
pinsYes
themeYes
calendarYes
languageYes
presenceYes
startPageYes
dockAutohideYes
navCollapsedYes
toastPositionYes
toastMaxVisibleYes
liveUpdateToastsYes
profileVisibilityYesWho sees each profile field (email, phone, pronouns, location, workingHours, timezone): org, team or admins
agentHistoryRetentionDaysYes
preferences.updateUpdate PreferencesA
DestructiveIdempotent
Inspect

Change the user's own preferences: theme, calendar (Gregorian or Jalali), start page, sidebar position and auto-hide, collapsed nav, presence status, live-update toasts, chat history retention, pins and who sees each profile field (profileVisibility). Only the keys given change. Language is not here: use language.update.

NameRequiredDescriptionDefault
dockNoSidebar position
pinsNoThe pinned spaces and apps, in order; replaces the whole list
themeNo
calendarNoWhich calendar dates are shown in
presenceNoauto = from the calendar and working hours
startPageNoThe section the panel opens on after login
dockAutohideNo
navCollapsedNoSide nav collapsed to the mini rail
toastPositionNoScreen corner where notification pop-ups appear; errors stay top center
toastMaxVisibleNoMost notification pop-ups shown at once; null = no limit
liveUpdateToastsNoToast when teammates change items in open sheets
profileVisibilityNoWho sees each profile field: org = everyone in the org, team = the user's team, admins = only admins. Only the fields given change; admins and the user always see everything.
agentHistoryRetentionDaysNoDelete Dana chats older than this many days; null keeps them forever

Output Schema

NameRequiredDescription
savedYesThe preferences as saved
profile.updateUpdate Your ProfileA
DestructiveIdempotent
Inspect

Change the user's own profile: first and last name, job title (from the organization's list), @handle, pronouns, bio, phone number, status line, timezone and out-of-office days. Only the fields given change. Who sees each field is a preference (preferences.update profileVisibility). Working hours: working_hours.update.

NameRequiredDescriptionDefault
bioNoUp to 280 characters; empty clears it
jobNoA job title from the organization's Jobs list, by name; jobs are never created here
phoneNoPhone number as the user wrote it: digits, spaces and + ( ) - . only, at least 3 digits; empty clears it. Who sees it is a preference.
handleNoThe @handle of the public profile
statusNoThe status line next to the name; null clears it
lastNameNo
pronounsNoEmpty clears them
timezoneNoIANA zone, e.g. Europe/Berlin
firstNameNo
outOfOfficeNoWhole-day time off in the calendar, inclusive days; the list replaces current and future whole-day time off, past time off is kept; to: null = until further notice; null clears it

Output Schema

NameRequiredDescription
savedYesEach changed field as saved
recipe.searchFind Build And Automation RecipesA
Read-onlyIdempotent
Inspect

Find worked recipes for builds (a formula, rollup, rating or autofill field, dependencies, a board or filtered view, a CRM with a dashboard, a tracker with a page, a template, a booking link, the client portal, publishing a view, team access) and automations (email to a sheet, a scheduled item, notify on a new item or a status change, a daily digest, Slack or Telegram messages, Telegram notifications). Call it before drafting a build or an automation. Each recipe has the questions to ask when the request is ambiguous (ask), what must exist first (prerequisites), the tools to call, a template whose "<<name>>" strings you replace with values like the placeholders samples, and what to tell the user after (afterApply). A steps template is the doc for steps.draft (steps.apply over MCP); a tool template is the args of that tool; a setting template is a setting the user changes, not a workflow. A then call, when present, runs once the template is applied, with the ids of what it created.

NameRequiredDescriptionDefault
limitNo
queryYesThe user's request, in their words and language

Output Schema

NameRequiredDescription
noteNoWhy `recipes` is empty
recipesYesBest match first
schedule.readRead Day PlanA
Read-onlyIdempotent
Inspect

Read the invoking user's working-hours schedule. Returns the work interval for a given date (today by default), the full workdays list (0=Sun … 6=Sat), and the user's timezone. When the user hasn't configured working hours the tool returns Mon–Fri 09:00–17:00 UTC with fallback: true — the agent should caveat its response accordingly.

NameRequiredDescriptionDefault
dateNoISO date (YYYY-MM-DD) to check. Defaults to today in the user's timezone when omitted.

Output Schema

NameRequiredDescription
fallbackYesTrue when the user has no working hours and the Mon–Fri 09–17 UTC default was used
timezoneYesThe user's IANA timezone
workdaysYesDays of the week with working hours, 0 = Sunday … 6 = Saturday
isWorkdayYes
todayDateYesThe date checked, YYYY-MM-DD
todayIntervalYesThe working window (HH:mm) on that date; null on a day off
sheet.add_attributeAdd Sheet FieldAInspect

Add a new attribute (field) to an existing sheet. Use during refinement (add a phone field). dataType MUST be a canonical Atwork name; for currency, pass dataType Number with description: "USD; whole numbers". Returns the new attributeId. For a Status/Select/Multi-Select field, pass the choices as options.items: [{title, color?, stage?}] — ids are generated server-side; on a Status field stage (Todo / InProgress / Complete) puts the choice in that stage, default Todo. Set isUnique: true on a field whose value identifies a row: item.create then dedupes on it. For a Relation to an existing sheet pass options.relatedSheetId (from workspace.structure) and twoWay: true to add the reverse field there too (default one-way). For a Code field (raw source with a language tag) pass options.language, one of: plain / html / json / typescript / javascript / sql / css / markdown. Computed fields name other fields, never ids: Formula takes options.formula with fields in braces ({Price} * {Quantity}); Mirror takes options.relation (a Relation field here) + options.field (on the related sheet); Rollup takes options.relation + options.function (COUNT / DISTINCT_COUNT / SUM / AVG / MIN / MAX) + options.field (a Number field there, not for COUNT); Rate takes options.stars; Pipeline takes options.stages; Summary takes options.template with fields in braces; Button takes options.workflow, the name of a manual-trigger workflow on this sheet. File List may take options.allowedFiles (any / images / documents / media / custom), options.allowedExtensions (with custom, e.g. ["pdf"]) and options.maxFiles (1–100). A name that does not exist is refused with the valid ones. Timer and DocX need nothing.

NameRequiredDescriptionDefault
nameYes
optionsNoChoices for Status / Select / Multi-Select fields, in display order — `language` for a Code field — `relatedSheetId` (+ `twoWay`) for a Relation — or the settings of a Formula, Mirror, Rollup, Rate, Pipeline, Summary or Button field.
sheetIdYes
dataTypeYes
isUniqueNoReject a second row with the same value; item.create then dedupes on this field. Only on Short Text / Number / Email / URL / PhoneNumber fields.
descriptionNo

Output Schema

NameRequiredDescription
attributeIdYesId of the new field
sheet.aggregateAggregate Sheet DataA
Read-onlyIdempotent
Inspect

Compute one or more aggregations (COUNT, DISTINCT_COUNT, SUM, AVG, MIN, MAX, FIRST, LAST) over a sheet's rows, with optional filter and groupBy. Use for analytical questions like 'total revenue by stage', 'count of leads created this month', 'average response time per assignee'. Multiple functions in one call share the same column/filter/groupBy — pass ["SUM", "AVG"] together to get both for free. For date columns, group with timeBucket: 'month' (or 'quarter', etc.). Filter operators include the usual comparison ops plus date shortcuts (THIS_MONTH, BEFORE_TODAY, etc.) — see the schema. Filter values on Status, Select, Multi-Select, Pipeline, person, team, job and relation columns may be the names you see in sheet.read (e.g. 'Done'); grouped rows carry label = the name and labelId = the raw id. Read sheet.read once first to discover attribute codes; aggregate is the right tool when raw rows would exceed your context.

NameRequiredDescriptionDefault
columnNo
filterNo
groupByNo
sheetIdYes
functionsYes

Output Schema

NameRequiredDescription
rowsYesAggregation rows as the worksheet service returns them, one per group
summaryYesEcho of the request that ran
sheet.convert_to_taskConvert Sheet To TasksheetB
DestructiveIdempotent
Inspect

Turn a worksheet into a tasksheet in place: it gains Status, Assignee, Due Date and Priority, and its rows become tasks. Rows and fields stay.

NameRequiredDescriptionDefault
sheetIdYes

Output Schema

NameRequiredDescription
nameYes
typeYes
sheetIdYes
sheet.createCreate SheetAInspect

Create a new sheet with optional initial attributes. intent: 'form' is for public-facing data-collection forms; intent: 'sheet' is for internal data tables. Pass the user's full proposed schema in attributes — this is the first-turn fat call. dataType values must be canonical Atwork names; if the user asks for currency, use Number with description: "USD; whole numbers". Every sheet gets a primary column that is a literal Title: do not add a separate name field in attributes; rename the Title to fit the sheet (Company, Task) with sheet.update_attribute. Returns the new sheetId. Call this exactly once per conversation; refinements use sheet.add_attribute / sheet.update_attribute / sheet.remove_attribute. Pass spaceId and folderId to say where the sheet goes — list them with workspace.structure. Without folderId the sheet goes in the space's root folder. (Panel-invoked calls may omit both; the invocation's placement is then used.) For a Status/Select/Multi-Select field, pass its choices as options.items: [{title, color?, stage?}]; on a Status field stage (Todo / InProgress / Complete) puts the choice in that stage, default Todo — give the done choices Complete. Set isUnique: true on a field whose value identifies a row (an external id, an email): item.create then dedupes on it.

NameRequiredDescriptionDefault
iconNoBootstrap icon name, e.g. 'bi-archive'.
nameYes
typeYes
intentYes
spaceIdNoSpace to create the sheet in. Get it from workspace.structure.
folderIdNoFolder inside that space. Get it from workspace.structure.
attributesNo

Output Schema

NameRequiredDescription
sheetIdYesId of the new sheet
spaceIdYesSpace the sheet landed in
sheet.deleteDelete SheetA
DestructiveIdempotent
Inspect

Delete a sheet with its rows, views, forms, dashboards and workflows. This always asks the user first: say what goes before you call it. sheet.restore brings it back, except the files in its File List fields: those are deleted for good, and the approval card says so.

NameRequiredDescriptionDefault
sheetIdYes

Output Schema

NameRequiredDescription
nameYes
deletedYes
sheetIdYes
restoreWithYesThe tool that brings it back, with the same sheetId
sheet.readRead Sheet RowsA
Read-onlyIdempotent
Inspect

Read rows from a sheet the user has access to. Returns the sheet's title and up to limit row objects. ID-typed cells are pre-resolved to display names: single-value (Member, Team, Job, Status, Select, Pipeline, Actor, CreatedBy, ModifiedBy) become the resolved name; list-valued (Employee List, Team List, Job List, Multi-Select, Relation) become a comma-joined string. Original FK ids are preserved on each row under _ids[code] (string for single-valued, string[] for list-valued) when you need them for follow-up tools. Mirror and File List cells pass through as raw values. filters values on those columns may be the names you see (e.g. Status EQ 'Done', Assignee EQ 'Sara'); an unknown or ambiguous name is an error that lists the choices. Document and Description cells are returned IN FULL as markdown by default — headings, lists, links and code preserved — so you never need a second call to read a description. All other cells are clipped to 80 characters with a trailing '…'. Rows come in a stable order. Each call returns as many whole rows as fit (up to limit), with total (rows matching the filters), hasMore and nextOffset: to read every row, call again with offset = nextOffset until hasMore is false. To count rows that match a condition, pass filters and read total instead of paging. Use a tighter limit when you only need a sample. Archived rows are left out unless archived is shown or only; then each row carries Archived and ArchivedAt. Contact cells (email, phone, address, location; on the employee sheet also handle and bio) come back as null unless includeContactFields is true — set it only when the user explicitly asks for contact details. Password cells are always null. sort orders the rows by up to three fields (name or code, asc or desc); for latest, recent or newest questions sort by ModifiedAt desc (recently changed) or CreatedAt desc (recently added), for the oldest use asc. Without sort rows keep the sheet's board order. Empty cells come first in a descending sort, and a sort field edited between calls can shift rows across pages. fields returns only the named attributes plus id; documents = preview clips Document and Description cells to 80 characters and omit leaves them out — use either to scan many rows in one call, then read one row (e.g. filter Index EQ) for its documents in full.

NameRequiredDescriptionDefault
sortNoRow order, up to three keys applied in turn; `field` is an attribute name or code. Newest first = `[{ field: "ModifiedAt", direction: "desc" }]` (recently changed) or CreatedAt desc (recently added)
limitNo
fieldsNoReturn only these attributes (names or codes) plus `id`; use it to scan many rows per call
offsetNoRow position to start at; pass the previous call's `nextOffset` to read the next page
filtersNo
sheetIdYes
archivedNoArchived rows: hidden (default), shown alongside the rest, or only the archived ones
documentsNoDocument and Description cells: `full` markdown (default), an 80-char plain-text `preview`, or `omit` themfull
includeContactFieldsNoReturn email, phone, address and location cells. Set it only when the user explicitly asks for someone's contact details.

Output Schema

NameRequiredDescription
rowsYesRow objects keyed by attribute code; ID-typed cells are display names, raw ids under `_ids`
sheetYesThe sheet that was read
totalYesHow many rows match the filters and archived setting
offsetYesPosition of the first returned row
hasMoreYesTrue when rows remain after this page
returnedYesHow many rows this call returned
truncatedYesSame as `hasMore`
nextOffsetYesPass as `offset` to read the next page; null when `hasMore` is false
sheet.remove_attributeRemove Sheet FieldA
DestructiveIdempotent
Inspect

Remove an attribute from a sheet. The server may reject removing the primary Title column (PRIMARY_TITLE_PROTECTED). Removed attributes go to a deleted-attributes pool and can be restored if needed; this is therefore mutating_reversible. The files of a File List field are the exception: they are deleted for good. Removing a File List field that holds files is refused with FILE_LIST_FILES_LOST, naming the field and how many rows hold files, and nothing is removed; tell the user and call again with confirmFileLoss: true only once they accept. In a chat the user accepts on a card instead: the call waits for it.

NameRequiredDescriptionDefault
sheetIdYes
attributeIdYes
confirmFileLossNoRemove a File List field whose files are deleted for good. Only once the user accepts it.

Output Schema

NameRequiredDescription
okYesThe change was applied
nameYesIts name
attributeIdYesThe removed field
sheet.renameRename SheetA
DestructiveIdempotent
Inspect

Rename a sheet (display label change only — does not affect attributes or data). Server may reject on name conflicts within the same space (SHEET_NAME_CONFLICT) — Formia should disambiguate via prose if rejected.

NameRequiredDescriptionDefault
nameYes
sheetIdYes

Output Schema

NameRequiredDescription
okYesThe change was applied
sheet.restoreRestore SheetA
Idempotent
Inspect

Bring back a deleted sheet with its rows, views, forms, dashboards, workflows and task records, in the place it was deleted from. Its workflows come back turned off: tell the user, who turns them on again.

NameRequiredDescriptionDefault
sheetIdYes

Output Schema

NameRequiredDescription
noteNo
tasksYes
sheetIdYes
restoredYes
workflowsYes
dashboardsYes
sheet.restore_attributeRestore Sheet FieldA
Idempotent
Inspect

Restore a field that was removed from a sheet with sheet.remove_attribute. Removal is a soft delete — the column and its data are kept — so this brings the field and its values back. Use it to undo a removal you or the user regrets; you need the same attributeId the field had.

NameRequiredDescriptionDefault
sheetIdYes
attributeIdYes

Output Schema

NameRequiredDescription
okYesThe change was applied
sheet.schemaRead Sheet StructureA
Read-onlyIdempotent
Inspect

Read a sheet's STRUCTURE (not its rows): every attribute with its id, code, name and canonical dataType, plus the live option items of Select/Status/Multi-Select fields (an archived choice carries archived: true), each field's default value when it has one, the sheet's views, and its peeks with their kind (form: collects new rows, changed with form.; record: a record layout, how a row opens, changed with peek.). Call this before any structural edit — sheet.update_attribute needs the attribute id, and editing options requires the EXISTING option ids returned here (reusing an id edits that option in place; a new option is added by omitting the id). Use sheet.read instead when you want the data in the rows.

NameRequiredDescriptionDefault
sheetIdYes

Output Schema

NameRequiredDescription
peeksYesPeeks (detail layouts) and forms
sheetYesThe sheet
viewsYesViews on the sheet
truncatedYesTrue when the sheet's schema was too large to return in full
attributesYesFields with their live option ids; reuse those ids verbatim when editing choices
sheet.set_autofillSet Field AutofillA
DestructiveIdempotent
Inspect

Make a field fill itself on an existing sheet, or stop it. source: ai writes from an instruction reading readFields (by name) — it uses AI credit, so tell the user (the result's note). source: formula computes the value from formula, with fields in braces ({Price} * {Quantity}). source: manual removes the field's autofill. Fields are named as sheet.schema lists them; an unknown name is refused with the valid ones.

NameRequiredDescriptionDefault
whenNoWhen it fills: `created` (new rows), `first_value` (once the named field gets a value) or `changed` (whenever the named fields change). Default: AI on created; a formula whenever the fields it reads change.
fieldYesName (or code) of the field that fills itself.
sourceYes`ai` fills from an instruction, `formula` computes it, `manual` turns autofill off.
formulaNoFormula only: fields in braces, e.g. `{Price} * {Quantity}`.
sheetIdYes
readFieldsNoAI only: the fields the AI reads, by name.
instructionNoAI only: what to write into the field.
keepUpdatedNoAlso refill a value autofill wrote earlier (never a person's). Default: true for a formula, false for AI.

Output Schema

NameRequiredDescription
noteNoTell the user this (AI credit use)
fieldYesThe field whose autofill was set
sourceYesWhat fills it now; manual = autofill removed
workflowIdNoThe autofill workflow
sheet.set_dependenciesSet Sheet DependenciesA
DestructiveIdempotent
Inspect

Turn dependencies on or off for a worksheet or tasksheet. On adds the Blocking / Blocked By fields (or brings them back with their links); off hides them from every view and keeps the links. Once on, link rows with item.update_humanized / item.create_humanized using Blocked By (or Blocking) values given as item titles, Index (#10) or ids from the same sheet. Off is refused while the sheet has a Gantt view.

NameRequiredDescriptionDefault
enabledYestrue adds the Blocking / Blocked By fields; false hides them and keeps the links
sheetIdYes

Output Schema

NameRequiredDescription
enabledYesWhether the sheet now has dependencies
blockingAttributeIdYesId of the Blocking field; null when off
blockedByAttributeIdYesId of the Blocked By field; null when off
sheet.updateUpdate Sheet SettingsA
DestructiveIdempotent
Inspect

Change a sheet's settings: name, icon, description, color, row prefix, item noun, sub-items, the form rows open in, or the order of its views. Only the settings you name change. Ids come from sheet.schema.

NameRequiredDescriptionDefault
iconNo
nameNo
colorNoA palette color name or a hex color
prefixNoThe key shown before each row's index, e.g. "MRK" for MRK-10
sheetIdYes
itemNounNoWhat one row is called, e.g. "campaign"
subItemsNoLet rows have sub-items
viewOrderNoEvery view id, in the order the tabs show
descriptionNo
defaultFormIdNoThe record layout (a peek of kind record from `sheet.schema`) a row opens in, or "default"; a form is refused

Output Schema

NameRequiredDescription
nameYes
changedYesThe settings this call changed
sheetIdYes
sheet.update_attributeUpdate Sheet FieldA
DestructiveIdempotent
Inspect

Update an existing attribute (field) on a sheet. Pass only what changes. Call sheet.schema first for the field's id, its live option ids, its current default and its archived choices.

  • Basics: name, description, icon, dataType, isUnique (Title, Short Text, URL, Phone Number, Email; on a field that already holds duplicates it fails with UNIQUE_HAS_DUPLICATES and nothing changes, so ask the user to remove them first), and default, the value new rows start with (choices, members, teams, jobs, Date).

  • Format: number (format such as Euro or Dollar, decimals, showAs), date (dateFormat, timeFormat), checkboxStyle, selectStyle, language (Code), and relation on a Relation field: subtitle (a related field shown under each link), view and form (by name, of the related sheet), filter (which related rows can be picked, in sheet.read's filters shape). Under options: formula/returnType (Formula), relation/field/function (Mirror, Rollup), stars (Rate, 2–20), workflow (Button, by name), template (Summary), allowedFiles (any / images / documents / media / custom), allowedExtensions (with custom, e.g. ["pdf"]) and maxFiles (1–100, null for no limit) (File List). Every setting is merged into the field's live settings; a setting for another type is refused, naming the types it applies to, and an unknown name is refused listing the valid ones.

  • Choices of a Status/Select/Multi-Select field: option edits are a MERGE, so reuse a live option's id to rename or recolour it in place, omit the id to add a new choice, and list ids in removeOptionIds to delete choices. Leaving an option out never deletes it. Never invent an option id — rows reference options by id and a wrong id is rejected. archived: true hides a Select/Multi-Select choice from pickers while rows keep it (Status choices cannot be archived). isDefault: true makes a choice the default (a Multi-Select adds it to its defaults), false takes it out. order lists the choice ids in their new order, every live id exactly once. On a Status field each choice sits in a stage bucket; sheet.schema reports it as stage (Todo / InProgress / Complete). Pass stage on an item to put a new choice in that stage or move a live one (keep its id); a new choice defaults to Todo, and a Status order may also name just one stage's choices. stage is rejected on Select / Multi-Select and on an older Status field whose choices are not in stages.

  • Not here: a relation's two-way setting (turning it off deletes the reverse field for good), a relation's target sheet (fixed once created), Pipeline stages (their ids are stored in the rows) and the Duration format. Point the user to the field's settings in the panel.

  • A dataType change follows a fixed compatibility list: a type that is not offered is refused with DATA_TYPE_CHANGE_NOT_ALLOWED, listing the allowed types, and nothing is changed. A change that would empty or shorten values is refused with DATA_TYPE_CHANGE_BLOCKED, carrying the counts, before → after samples and the views and workflows that use the field, and nothing is changed; show that to the user and call again with confirmLoss: true only once they accept the loss. In a chat the user confirms the loss on a card instead: the call waits for it and applies the change once they accept.

NameRequiredDescriptionDefault
dateNoDate only: how the date and the time are written.
iconNoA Bootstrap icon name, e.g. `bi-star`.
nameNo
orderNoChoice ids in their new order, each live id exactly once. On Status, either every choice or every choice of one stage; a choice keeps its stage.
numberNoNumber only: currency or number format (e.g. Euro), decimal places, and how it shows (NUMBER, BAR…).
defaultNoThe value new rows start with, as a human value: a choice title, a member, team or job name (a list for list fields), `creator` for whoever adds the row, or `today` for a Date's creation day. null clears it.
optionsNo
sheetIdYes
dataTypeNo
isUniqueNoTitle, Short Text, URL, Phone Number and Email only: refuse duplicate values.
languageNoCode only.
relationNoRelation only: how linked rows are shown and picked.
attributeIdYes
confirmLossNoApply a dataType change even though it empties or shortens values. Only after reading the preview.
descriptionNo
selectStyleNoSelect / Multi-Select only.
checkboxStyleNoCheckbox only.
removeOptionIdsNo

Output Schema

NameRequiredDescription
okYesThe change was applied
nameYesIts name after the change
changedYesThe inputs that were applied, e.g. name, number, order, default
attributeIdYesThe field that changed
space.createCreate SpaceAInspect

Create a new, empty space. Use steps.apply instead when the space should come with sheets, pages or automations.

NameRequiredDescriptionDefault
iconNoAn emoji or icon name
nameYes
descriptionNo

Output Schema

NameRequiredDescription
nameYes
spaceIdYes
space.deleteDelete SpaceA
DestructiveIdempotent
Inspect

Delete a space with every folder, sheet and page in it. This always asks the user first: say what is inside before you call it. space.restore brings it all back.

NameRequiredDescriptionDefault
spaceIdYes

Output Schema

NameRequiredDescription
nameYes
deletedYes
spaceIdYes
restoreWithYesThe tool that brings it back, with the same id
space.restoreRestore SpaceA
Idempotent
Inspect

Bring back a deleted space with the folders, sheets and pages its delete removed. Something deleted on its own before the space stays deleted.

NameRequiredDescriptionDefault
spaceIdYes

Output Schema

NameRequiredDescription
nameYes
spaceIdYes
restoredYesWhat came back with it: only what its delete removed
space.updateUpdate SpaceA
DestructiveIdempotent
Inspect

Change a space's name, icon or description. Only the settings you name change. Get spaceId from workspace.structure.

NameRequiredDescriptionDefault
iconNo
nameNo
spaceIdYes
descriptionNo

Output Schema

NameRequiredDescription
nameYes
changedYesThe settings this call changed
spaceIdYes
steps.applyScaffold Workspace StructureAInspect

Apply a declarative 'Steps' document that scaffolds a whole workspace at once: a space (new, or an existing one you name), optional folders, and one or more sheets (each with attributes/views/peeks). Use this for multi-sheet apps (e.g. a CRM with Contacts + Deals) instead of creating sheets one by one.

  • Every node has a doc-local 'ref'; cross-references use {"$ref":""}; attributes are targeted by their author-assigned 'code'.

  • To LINK two sheets (a relation), use dataType "Relation" with options.relatedSheet:{"$ref":""}, or {"$existing":{"sheetId":}} to link to a sheet that already exists in this workspace (id from workspace.structure). Do NOT use "Link" — that is a plain URL field, not a cross-sheet relation.

  • A count or sum over linked rows: dataType "Rollup" with options {type:"RELATION", relatedAttr:{"$ref":""}, fn:{functionType:"COUNT"}, returnType:"Number"}. A linked row's field: dataType "Mirror" with options {relationAttr:{"$ref":""}, mirroredAttr:{"$ref":"<field of the related sheet, or Title>"}}. Name fields by ref or code, never by id; new sheets only.

  • Set isUnique: true on an attribute whose value identifies a row (an external id, an email): item.create then dedupes on it.

  • On a Status attribute give each option a bucket ("Todo" / "InProgress" / "Complete") so done choices read as done — give every option one. bucket is rejected on Select / Multi-Select.

  • A sheet with no 'folder' lands at the space root. Only set a sheet's folder to a ref you declared in 'folders' — never to a space ref.

  • dataType values must be canonical Atwork names (e.g. "Short Text", "Long Text", "Number", "Email", "Date", "Select", "Status", "Relation"); a file field is always "File List".

  • Do NOT include a version or capabilities in the doc — those are handled automatically.

  • Placement: pass spaceId (and optionally folderId) from workspace.structure to install into an EXISTING space. Omit both to create a new space.

  • Optional extras: top-level 'forms' ({ref,name,sheet:{$ref},fields:[{code,required?,label?}]}), 'dashboards' ({ref,name,sheet:{$ref},widgets}), 'pages' ({ref,name,markdown}), 'spaceHome' ({widgets}) and 'seedRows' ({"": [{"": value}]}) for starter rows. Pass a draft from steps.draft unchanged; any other top-level key is an error.

  • 'workflows' use the Steps workflow format from the build skill; a doc with only workflows on existing sheets ({"$existing":{"sheetId":}}) creates no space. Returns the created spaceId, a map of sheet ref -> new sheetId, each workflow's state or error, and the address of every sheet that now takes email.

NameRequiredDescriptionDefault
docYes
spaceIdNoInstall into this EXISTING space instead of creating a new one. From workspace.structure.
folderIdNoFolder inside that space; defaults to the space root.

Output Schema

NameRequiredDescription
spaceIdNoThe space the document was applied to (new or existing)
sheetIdsNoSheet ref → new sheetId
workflowsNoOne per workflow: active = running; error = why it was not created or turned on — tell the user
inboundAddressesNoEmail to this sheet: give the user this address; each email sent to it creates an item
task.createCreate TaskAInspect

Create a task. Required: title. The task is created as an item in a tasksheet: pass sheetId, or omit it to use the user's default task sheet. assignee (a member name), status (an option label like 'In Progress'), and dueDate (ISO 8601) are optional and resolved to the sheet's real values — an unrecognised value returns an error listing the valid options. Returns {taskId, sheetId, spaceId}.

NameRequiredDescriptionDefault
titleYes
statusNoStatus by its option label, e.g. 'To Do' / 'In Progress'
dueDateNoISO 8601 date/datetime
sheetIdNoTasksheet to create the task in. Omit to use the user's default task sheet.
assigneeNoAssignee by name (resolved to a member); omit to leave unassigned

Output Schema

NameRequiredDescription
taskIdYesId of the created task item
sheetIdYesTask sheet the task was created in
spaceIdYesSpace of that sheet; null for a sheet outside a space
task.readList TasksA
Read-onlyIdempotent
Inspect

List tasks. For 'my tasks' / 'my open tasks' / 'what's due', call this with NO assigneeUserId — it defaults to the CURRENT authenticated user, so you never need an id. Only set assigneeUserId to look up a specific other person whose numeric userId you already have. Filter completion with state ('open' = not done, 'completed' = done) and use overdue: true for past-due, not-completed tasks. Also filterable by due-date window and sheet. limit caps the result count (default 25). Returns task objects with assigneeName, reporterName, sheetName (and their *Id FKs for follow-up tools) — prefer the *Name fields in prose.

NameRequiredDescriptionDefault
limitNo
stateNoCompletion filter via the task stage: 'open' = not completed (stage != Complete), 'completed' = done, 'all' = no filter. Omit to include all stages.
overdueNoWhen true, return ONLY tasks past their due date that are not completed (overdue). Overrides `state` and the due window.
sheetIdNoRestrict to tasks attached to this sheet
dueAfterNoISO datetime — tasks whose due date is after this
dueBeforeNoISO datetime — tasks whose due date is before this
assigneeUserIdNoOMIT for the current user's own tasks ('my tasks', 'my open tasks') — the caller is inferred from auth. Never guess this. Only set it when the user explicitly asks about a specific OTHER person AND you already hold their numeric userId from a prior tool result.

Output Schema

NameRequiredDescription
tasksYesTasks matching the filters; prefer the *Name fields in prose, the *Id fields are FKs
truncatedYesTrue when more tasks may exist than `limit` returned
template.browseBrowse TemplatesA
Read-onlyIdempotent
Inspect

List the published templates a user can install (the in-app template gallery): slug, name, tagline, categories and how many sheets, views, dashboards, pages and example rows each has. Filter by query words, category or language.

NameRequiredDescriptionDefault
queryNoWords to match in a template's name, tagline or categories, e.g. 'crm'.
categoryNo
languageNo

Output Schema

NameRequiredDescription
templatesYes
template.installInstall TemplateAInspect

Install a published template: it builds the template's whole space (sheets, views, dashboards, pages, workflows and, unless includeSampleData is false, example rows) as a new space, or inside spaceId / folderId. Call it once the user has said yes. Returns the space and the main sheet.

NameRequiredDescriptionDefault
spaceIdNoInstall into this existing space (from workspace.structure). Omit to create a new space.
folderIdNoFolder inside `spaceId` to install into.
templateYesTemplate slug (or id) from template.browse.
includeSampleDataNofalse installs the template without its example rows.

Output Schema

NameRequiredDescription
spaceIdYesThe space the template was installed into
sheetIdsYesSheet ref -> new sheet id
primarySheetIdNoThe template's main sheet
template.previewPreview TemplateA
Read-onlyIdempotent
Inspect

What a published template builds, in names: its sheets with their fields and views, dashboards, pages, workflows and how many example rows. Use it to describe a template before installing it.

NameRequiredDescriptionDefault
slugYesTemplate slug from template.browse.

Output Schema

NameRequiredDescription
nameYes
slugYes
pagesYes
sheetsYes
workflowsYes
dashboardsYes
descriptionNo
exampleRowsYes
view.createCreate Sheet ViewAInspect

Add a view to a sheet, with its settings in one call. Types: TABLE, KANBAN (board: columns by a Status or Select field — groupBy), CALENDAR, GANTT_CHART and TIME_LINE (rows placed on a Date field — dateField; a timeline's rows come from resourceField), GALLERY (needs at least one File List field on the sheet), CARD, EMAIL (only on an email sheet, one with the message_id and account fields a connected mailbox creates), BLOG (posts are the pages of a Document field — contentField) and PROCESS_MAP (how cards move between the values of one Status, Select, Employee or Team field — groupBy, required). Settings by field NAME: filter (the sheet.read filter form), sort, groupBy for a table's or card view's groups, hiddenFields / shownFields (TABLE, KANBAN, CARD). An unknown field name is refused with the names that exist. Vista views are not creatable here.

NameRequiredDescriptionDefault
iconNoBootstrap icon name, e.g. 'bi-kanban'.
nameYes
sortNoRow order, up to three keys; `field` is a name or code. `[]` clears it.
typeYes
filterNoRows the view shows. `null` clears the filter.
groupByNoField name or code to group by: a board's columns (Status/Select), or a table's or card view's groups.
sheetIdYes
dateFieldNoDate field name or code that places rows on a CALENDAR, GANTT_CHART or TIME_LINE.
shownFieldsNoField names or codes to show again (TABLE, KANBAN and CARD views).
contentFieldNoBLOG only: the Document field whose pages are the posts. Default: the sheet's first one.
hiddenFieldsNoField names or codes to hide (TABLE, KANBAN and CARD views).
resourceFieldNoTIME_LINE only: the field whose values become the timeline's rows, e.g. Assignee. Default: the title.

Output Schema

NameRequiredDescription
viewIdNoId of the new view
sheetIdYesSheet the view was added to
spaceIdYesSpace of that sheet; null outside a space or when unknown
view.deleteDelete Sheet ViewA
DestructiveIdempotent
Inspect

Delete a view from a sheet; its rows stay. Deleting a Charts (DASHBOARD) view deletes its dashboard. The sheet's default view cannot be deleted. This always asks the user first: say which view goes before you call it. The result names the restore tool.

NameRequiredDescriptionDefault
viewIdYesThe view to delete (from sheet.schema).
sheetIdYes

Output Schema

NameRequiredDescription
nameYes
viewIdYes
deletedYes
sheetIdYes
dashboardIdNoFor a Charts view: the dashboard to pass to dashboard.restore
restoreWithYesThe tool that brings it back: view.restore with sheetId + viewId, or dashboard.restore for a Charts view
view.publishPublish Sheet ViewA
DestructiveIdempotent
Inspect

Publish a view as a read-only page (an app holding the view), viewable by anyone with the link unless public is false. Needs Admin access on the view's sheet. Always asks the user first. Returns the page's path.

NameRequiredDescriptionDefault
publicNotrue: anyone with the link can view it. false: only members who have access.
viewIdYesThe view to publish (from sheet.schema)

Output Schema

NameRequiredDescription
urlYesPath of the published page, on the org's panel domain
appIdYes
publicYes
createdYesfalse when the view was already published and was reused
view.restoreRestore Sheet ViewA
Idempotent
Inspect

Bring back a deleted view with its settings, by the sheetId and viewId view.delete returned. A Charts view comes back with its dashboard and widgets.

NameRequiredDescriptionDefault
viewIdYesThe deleted view's id, as view.delete returned it.
sheetIdYes

Output Schema

NameRequiredDescription
nameYes
viewIdYes
sheetIdYes
restoredYes
dashboardIdNoFor a Charts view: the dashboard that came back with it
view.updateUpdate Sheet ViewA
DestructiveIdempotent
Inspect

Change an existing view's settings by field NAME: filter (the sheet.read filter form; null clears it), sort ([] clears it), groupBy, hiddenFields / shownFields (TABLE, KANBAN, CARD), dateField (CALENDAR, GANTT_CHART, TIME_LINE), resourceField (TIME_LINE), or its name / icon. Only what you pass changes; the view's other settings stay. The view id comes from sheet.schema.

NameRequiredDescriptionDefault
iconNo
nameNo
sortNoRow order, up to three keys; `field` is a name or code. `[]` clears it.
filterNoRows the view shows. `null` clears the filter.
viewIdYesThe view to change (from sheet.schema).
groupByNoField name or code to group by: a board's columns (Status/Select), or a table's or card view's groups.
sheetIdYes
dateFieldNoDate field name or code that places rows on a CALENDAR, GANTT_CHART or TIME_LINE.
shownFieldsNoField names or codes to show again (TABLE, KANBAN and CARD views).
hiddenFieldsNoField names or codes to hide (TABLE, KANBAN and CARD views).
resourceFieldNoTIME_LINE only: the field whose values become the timeline's rows, e.g. Assignee. Default: the title.

Output Schema

NameRequiredDescription
viewIdYesId of the changed view
changedYesThe settings that were saved
widget.createCreate Dashboard WidgetAInspect

Add a chart or number to a dashboard, in the shape steps.draft uses, with field names: type NUMBER, COLUMN, BAR, LINE, AREA or GAUGE; series: [{ legend, fn: { functionTypes: ["SUM"], params: [{ type: "ATTRIBUTE", value: "Amount" }] } }] (COUNT takes params: []); a chart that groups adds groupBy: { type: "PROPERTY", property: "Stage" }. A NUMBER tile takes an icon and options.withoutGroup: true. Place it with options.position: { x, y, cols, rows } on a 24-column grid.

NameRequiredDescriptionDefault
iconNo
nameYes
typeYes
filterNoRows the whole widget counts
seriesNo
groupByNo
optionsNoe.g. `position: { x, y, cols, rows }` on a 24-column grid; a NUMBER tile takes `withoutGroup: true`
subGroupNoField name or code that splits each group
dashboardIdYes

Output Schema

NameRequiredDescription
nameYes
widgetIdYes
dashboardIdYes
widget.deleteDelete Dashboard WidgetA
DestructiveIdempotent
Inspect

Delete a chart or number widget from a dashboard. This always asks the user first: say which widget goes before you call it. widget.restore brings it back.

NameRequiredDescriptionDefault
widgetIdYesThe widget to delete (dashboard.read lists them).

Output Schema

NameRequiredDescription
nameYes
deletedYes
widgetIdYes
dashboardIdYes
restoreWithYesThe tool that brings it back, with dashboardId + widgetId
widget.restoreRestore Dashboard WidgetA
Idempotent
Inspect

Bring back a deleted widget with its settings, by the dashboardId and widgetId widget.delete returned. A deleted dashboard comes back first with dashboard.restore.

NameRequiredDescriptionDefault
widgetIdYesThe deleted widget's id, as widget.delete returned it.
dashboardIdYes

Output Schema

NameRequiredDescription
nameYes
restoredYes
widgetIdYes
dashboardIdYes
widget.updateUpdate Dashboard WidgetA
DestructiveIdempotent
Inspect

Change a widget's name, icon, type, series, filter, groupBy, subGroup or options, in widget.create's shape with field names. Only what you pass changes; options merges into the current ones.

NameRequiredDescriptionDefault
iconNo
nameNo
typeNo
filterNoRows the whole widget counts
seriesNo
groupByNo
optionsNoe.g. `position: { x, y, cols, rows }` on a 24-column grid; a NUMBER tile takes `withoutGroup: true`
subGroupNoField name or code that splits each group
widgetIdYesThe widget to change (dashboard.read lists them).

Output Schema

NameRequiredDescription
changedYesThe settings that were saved
widgetIdYes
dashboardIdYes
workflow.deleteDelete WorkflowA
DestructiveIdempotent
Inspect

Delete a workflow: it turns off, cancels scheduled runs, frees the sheet's email address. This always asks the user first. workflow.restore brings it back with its steps and versions, turned off.

NameRequiredDescriptionDefault
workflowIdYes

Output Schema

NameRequiredDescription
nameYes
deletedYes
stoppedYesWhat stopped with it
workflowIdYes
restoreWithYesThe tool that brings it back, turned off, with the same workflowId
workflow.from_templateCreate Workflow From TemplateAInspect

Create a workflow on a sheet from a built-in template (workflow.list templates). It is a draft and off; adjust it with workflow.update and turn it on with workflow.publish.

NameRequiredDescriptionDefault
nameNo
formIdNoA form id (sheet_schema peeks of kind form): a form of the sheet; the workflow runs only for that form's responses. Only for a template that starts on a new row
sheetIdYesThe sheet the workflow runs on
templateIdYesA template id from workflow.list templates

Output Schema

NameRequiredDescription
nameYes
nodesYesEvery step after the trigger, in canvas order
sheetYes
stateYes
triggerYes
workflowIdYes
descriptionNo
workflow.listList WorkflowsA
Read-onlyIdempotent
Inspect

List workflows, optionally for one sheet, with their state: on or off, published version, unpublished draft changes. deleted: true lists deleted ones for workflow.restore; templates: true lists the built-in templates for workflow.from_template.

NameRequiredDescriptionDefault
deletedNoList deleted workflows instead, to bring one back with workflow.restore
sheetIdNoOnly the workflows of this sheet
templatesNoList the built-in templates for workflow.from_template instead

Output Schema

NameRequiredDescription
templatesNo
workflowsNo
workflow.publishPublish WorkflowA
Destructive
Inspect

Publish a workflow's draft as a new version and turn it on. This always asks the user first. When the draft has errors nothing is published and the workflow stays as it was: errors say what to fix.

NameRequiredDescriptionDefault
workflowIdYes

Output Schema

NameRequiredDescription
nameYes
errorsYesWhy it was not published; fix them with workflow.update
versionNo
isActiveYes
warningsYes
publishedYes
workflowIdYes
workflow.readRead WorkflowA
Read-onlyIdempotent
Inspect

Read a workflow's draft: its sheet, trigger, every step with its ref, name, type, config, onError (if the action fails, on the steps that have it) and next (port → ref, an error branch on port error), and its state. Read it before workflow.update and name steps by these refs.

NameRequiredDescriptionDefault
workflowIdYes

Output Schema

NameRequiredDescription
nameYes
nodesYesEvery step after the trigger, in canvas order
sheetYes
stateYes
triggerYes
workflowIdYes
descriptionNo
workflow.restoreRestore WorkflowA
Idempotent
Inspect

Bring back a deleted workflow with its steps and versions. It comes back turned off: workflow.publish turns it on again. Restore its sheet first when that is deleted too.

NameRequiredDescriptionDefault
workflowIdYesA deleted workflow, from workflow.list deleted

Output Schema

NameRequiredDescription
nameYes
noteYes
isActiveYes
workflowIdYes
workflow.toggleTurn Workflow On Or OffA
DestructiveIdempotent
Inspect

Turn a published workflow on or off. Turning it on asks the user first; turning it off runs at once and cancels its scheduled runs. It runs its published version: a workflow never published is turned on with workflow.publish.

NameRequiredDescriptionDefault
isActiveYestrue turns it on (the user confirms first), false turns it off
workflowIdYes

Output Schema

NameRequiredDescription
nameYes
isActiveYes
workflowIdYes
workflow.unpublishUnpublish WorkflowA
DestructiveIdempotent
Inspect

Unpublish a workflow: it turns off and its scheduled runs are cancelled. The draft and the published versions stay; workflow.publish turns it back on.

NameRequiredDescriptionDefault
workflowIdYes

Output Schema

NameRequiredDescription
nameYes
isActiveYes
workflowIdYes
workflow.updateUpdate WorkflowA
Destructive
Inspect

Edit a workflow's draft: rename it, replace its trigger, add, change or remove steps (branches included), or revert: true to discard the draft. Read it with workflow.read first and name nodes by their ref; never guess one. New steps are Steps workflow steps, and {{steps.<ref>.<path>}} may name an existing node's ref or a new step's ref. If the action fails: update: [{ref, onError}] sets stop, continue (skip failed items) or fallback_path (error branch) on integration_action, agent, transcribe and run_workflow steps; then add: [{after: ref, port: "error", steps}] puts steps on the error branch, in the same call or later (a step added in this call gets onError in a later call, by the ref workflow.read shows), and failed items reach them with the reason in {{ $input.error }}. Leaving fallback_path removes the steps only the error branch led to. On a workflow that is on, the change goes live only after workflow.publish.

NameRequiredDescriptionDefault
addNoSteps inserted between `after` and what followed it
nameNo
removeNoRefs to remove; an if or switch takes the steps under its branches along
revertNoDiscard the draft and go back to the published version
updateNo
triggerNoA Steps trigger; replaces the trigger's type and config and keeps what follows it
workflowIdYes
descriptionNo

Output Schema

NameRequiredDescription
nameYes
noteNo
addedYesNames of the steps added
removedYes
updatedYes
isActiveYes
revertedNo
workflowIdYes
triggerChangedYes
hasDraftChangesYes
working_hours.updateUpdate Working HoursA
DestructiveIdempotent
Inspect

Set the user's working hours on the named days (other days keep theirs). Every booking link and the day plan follow them.

NameRequiredDescriptionDefault
endYes24-hour "HH:mm"
daysYesDays of the week, e.g. ["mon","tue","wed","thu","fri"] for weekdays.
startYes24-hour "HH:mm"
timezoneNoIANA zone, e.g. Europe/Amsterdam. Defaults to the current one.

Output Schema

NameRequiredDescription
workingHoursYesThe working hours after the change
workspace.searchSearch WorkspaceA
Read-onlyIdempotent
Inspect

Search the workspace by content across sheets, pages, dashboards, items, tasks, employees, teams, and jobs. Returns up to limit ranked hits with kind/id/name/snippet. Use when the user references something by name ("the Pipeline sheet", "Sara's onboarding", "the launch blog") and you need its id to pass to other tools. Item-level search (rows inside sheets) covers all column content. Use parentSheetId to restrict to a specific sheet. Archived items are never returned; read them with sheet.read and archived: "only". Email addresses and phone numbers in names and snippets come back as [redacted].

NameRequiredDescriptionDefault
limitNo
queryYes
typesNoRestrict to a subset of kinds. Omit to search all.
parentSheetIdNoRestrict to items inside a specific sheet (e.g. 'find rows in the Pipeline sheet matching X').

Output Schema

NameRequiredDescription
resultsYesRanked hits; `id` is what other tools take (items are UUIDs, top-level entities numeric ids as strings)
truncatedYesTrue when more hits matched than `limit` allowed
workspace.structureList Spaces And FoldersA
Read-onlyIdempotent
Inspect

List the spaces the user can see, each with its folders and the items inside them (sheets, pages, dashboards). Call this FIRST when you need to create something and must decide where it goes: spaceId and folderId from here are what sheet.create, page.create and steps.apply take as their target. For an item, refId is the entity id to pass to other tools (e.g. a SHEET item's refId is the sheetId for sheet.schema). Use workspace.search instead when you know the name of the thing you want and just need its id.

NameRequiredDescriptionDefault
spaceIdNoReturn only this space. Omit for every space you can see.

Output Schema

NameRequiredDescription
spacesYesSpaces the caller can see, each with its folders and items; an item's `refId` is the sheet/page/dashboard id
truncatedYesTrue when spaces were dropped to fit the result cap; narrow with `spaceId`

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updates
    • Changedform.update1 field changed
      • addedInput schema / properties / onResponse
        Added value: +{
        +  "description": "The emails a response sends; only the switch you pass changes.",
        +  "properties": {
        +    "copy": {
        +      "description": "Email the person who filled the form a copy of their answers",
        +      "properties": {
        +        "field": {
        +          "description": "The Email field on the form holding the address; default: the first one",
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "on": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "on"
        +      ],
        +      "type": "object"
        +    },
        +    "notify": {
        +      "description": "Email these members one email per response, with the answers",
        +      "properties": {
        +        "on": {
        +          "type": "boolean"
        +        },
        +        "people": {
        +          "description": "Members to email, by name or employee id; default: you",
        +          "items": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "maxItems": 20,
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "on"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changeditem.update_where1 field changed
      • addedInput schema / properties / confirmRows
        Added value: +{
        +  "description": "MCP only: the number of rows the user accepted after a ROWS_NEED_CONFIRM refusal. Needed when more than 20 rows would change; never set it before the user agrees.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
    • Changedpreferences.read3 fields changed
      • addedOutput schema / properties / toastMaxVisible
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / toastPosition
        Added value: +{
        +  "enum": [
        +    "top-right",
        +    "top-left",
        +    "bottom-right",
        +    "bottom-left"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "theme",
        -  "calendar",
        -  "startPage",
        -  "dock",
        -  "dockAutohide",
        -  "navCollapsed",
        -  "presence",
        -  "liveUpdateToasts",
        -  "agentHistoryRetentionDays",
        -  "pins",
        -  "profileVisibility",
        -  "language"
        -]New value: +[
        +  "theme",
        +  "calendar",
        +  "startPage",
        +  "dock",
        +  "dockAutohide",
        +  "navCollapsed",
        +  "presence",
        +  "liveUpdateToasts",
        +  "toastPosition",
        +  "toastMaxVisible",
        +  "agentHistoryRetentionDays",
        +  "pins",
        +  "profileVisibility",
        +  "language"
        +]
    • Changedpreferences.update4 fields changed
      • addedInput schema / properties / toastMaxVisible
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "const": 1,
        +          "type": "number"
        +        },
        +        {
        +          "const": 2,
        +          "type": "number"
        +        },
        +        {
        +          "const": 3,
        +          "type": "number"
        +        },
        +        {
        +          "const": 5,
        +          "type": "number"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Most notification pop-ups shown at once; null = no limit"
        +}
      • addedInput schema / properties / toastPosition
        Added value: +{
        +  "description": "Screen corner where notification pop-ups appear; errors stay top center",
        +  "enum": [
        +    "top-right",
        +    "top-left",
        +    "bottom-right",
        +    "bottom-left"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / saved / properties / toastMaxVisible
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / saved / properties / toastPosition
        Added value: +{
        +  "enum": [
        +    "top-right",
        +    "top-left",
        +    "bottom-right",
        +    "bottom-left"
        +  ],
        +  "type": "string"
        +}
    • Changedsheet.add_attribute3 fields changed
      • addedInput schema / properties / options / properties / allowedExtensions
        Added value: +{
        +  "description": "File List only: the extensions a Custom rule takes, without the dot, e.g. [\"pdf\", \"docx\"].",
        +  "items": {
        +    "maxLength": 11,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 30,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / options / properties / allowedFiles
        Added value: +{
        +  "description": "File List only: which files it takes; `media` is audio and video, `custom` takes allowedExtensions.",
        +  "enum": [
        +    "any",
        +    "images",
        +    "documents",
        +    "media",
        +    "custom"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / maxFiles
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "File List only: at most this many files (1–100); null removes the limit."
        +}
    • Changedsheet.schema1 field changed
      • addedOutput schema / properties / attributes / items / properties / options / properties / fileRules
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "File List only: which files the field takes and how many",
        +  "properties": {
        +    "allowedExtensions": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "allowedFiles": {
        +      "type": "string"
        +    },
        +    "maxFiles": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "allowedFiles"
        +  ],
        +  "type": "object"
        +}
    • Changedsheet.update_attribute3 fields changed
      • addedInput schema / properties / options / properties / allowedExtensions
        Added value: +{
        +  "description": "File List only: the extensions a Custom rule takes, without the dot, e.g. [\"pdf\", \"docx\"].",
        +  "items": {
        +    "maxLength": 11,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 30,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / options / properties / allowedFiles
        Added value: +{
        +  "description": "File List only: which files it takes; `media` is audio and video, `custom` takes allowedExtensions.",
        +  "enum": [
        +    "any",
        +    "images",
        +    "documents",
        +    "media",
        +    "custom"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / maxFiles
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 100,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "File List only: at most this many files (1–100); null removes the limit."
        +}
    • Changedworkflow.from_template3 fields changed
      • addedInput schema / properties / formId
        Added value: +{
        +  "description": "A form id (sheet_schema peeks of kind form): a form of the sheet; the workflow runs only for that form's responses. Only for a template that starts on a new row",
        +  "maxLength": 64,
        +  "pattern": "^[A-Za-z0-9_-]+$",
        +  "type": "string"
        +}
      • addedOutput schema / properties / nodes / items / properties / onError
        Added value: +{
        +  "description": "If the action fails (integration_action, agent, transcribe and run_workflow steps only): stop, continue (skip failed items) or fallback_path (error branch, its steps on port `error` in next)",
        +  "enum": [
        +    "stop",
        +    "continue",
        +    "fallback_path"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / trigger / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "additionalProperties": {},
        -        "description": "Secrets (authorization, API keys, tokens) read as ••••••; send them back unchanged to keep them",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      },
        -      "name": {
        -        "type": "string"
        -      },
        -      "next": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "port": {
        -              "type": "string"
        -            },
        -            "ref": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "port",
        -            "ref"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "operation": {
        -        "type": "string"
        -      },
        -      "ref": {
        -        "description": "The node's id: name it in workflow.update as after, ref or {{steps.<ref>.<path>}}",
        -        "type": "string"
        -      },
        -      "type": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "ref",
        -      "name",
        -      "type",
        -      "config",
        -      "next"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "config": {
        +        "additionalProperties": {},
        +        "description": "Secrets (authorization, API keys, tokens) read as ••••••; send them back unchanged to keep them",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "next": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "port": {
        +              "type": "string"
        +            },
        +            "ref": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "port",
        +            "ref"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "onError": {
        +        "description": "If the action fails (integration_action, agent, transcribe and run_workflow steps only): stop, continue (skip failed items) or fallback_path (error branch, its steps on port `error` in next)",
        +        "enum": [
        +          "stop",
        +          "continue",
        +          "fallback_path"
        +        ],
        +        "type": "string"
        +      },
        +      "operation": {
        +        "type": "string"
        +      },
        +      "ref": {
        +        "description": "The node's id: name it in workflow.update as after, ref or {{steps.<ref>.<path>}}",
        +        "type": "string"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "ref",
        +      "name",
        +      "type",
        +      "config",
        +      "next"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedworkflow.read2 fields changed
      • addedOutput schema / properties / nodes / items / properties / onError
        Added value: +{
        +  "description": "If the action fails (integration_action, agent, transcribe and run_workflow steps only): stop, continue (skip failed items) or fallback_path (error branch, its steps on port `error` in next)",
        +  "enum": [
        +    "stop",
        +    "continue",
        +    "fallback_path"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / trigger / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "additionalProperties": {},
        -        "description": "Secrets (authorization, API keys, tokens) read as ••••••; send them back unchanged to keep them",
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      },
        -      "name": {
        -        "type": "string"
        -      },
        -      "next": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "port": {
        -              "type": "string"
        -            },
        -            "ref": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "port",
        -            "ref"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "operation": {
        -        "type": "string"
        -      },
        -      "ref": {
        -        "description": "The node's id: name it in workflow.update as after, ref or {{steps.<ref>.<path>}}",
        -        "type": "string"
        -      },
        -      "type": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "ref",
        -      "name",
        -      "type",
        -      "config",
        -      "next"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "config": {
        +        "additionalProperties": {},
        +        "description": "Secrets (authorization, API keys, tokens) read as ••••••; send them back unchanged to keep them",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "next": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "port": {
        +              "type": "string"
        +            },
        +            "ref": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "port",
        +            "ref"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "onError": {
        +        "description": "If the action fails (integration_action, agent, transcribe and run_workflow steps only): stop, continue (skip failed items) or fallback_path (error branch, its steps on port `error` in next)",
        +        "enum": [
        +          "stop",
        +          "continue",
        +          "fallback_path"
        +        ],
        +        "type": "string"
        +      },
        +      "operation": {
        +        "type": "string"
        +      },
        +      "ref": {
        +        "description": "The node's id: name it in workflow.update as after, ref or {{steps.<ref>.<path>}}",
        +        "type": "string"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "ref",
        +      "name",
        +      "type",
        +      "config",
        +      "next"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedworkflow.update2 fields changed
      • changedInput schema / properties / add / items / properties / port / description
        Previous value: -"output (default), an if's true/false, or a switch's case port or default"New value: +"output (default); an if's true/false; a switch's case port or default; a classify agent's label_<id> or other; `error` for the error branch of a step whose onError is fallback_path"
      • addedInput schema / properties / update / items / properties / onError
        Added value: +{
        +  "description": "If the action fails: stop (the default), continue (skip failed items) or fallback_path (error branch: failed items go on port `error` with the reason in {{ $input.error }}). Only integration_action, agent, transcribe and run_workflow steps have it",
        +  "enum": [
        +    "stop",
        +    "continue",
        +    "fallback_path"
        +  ],
        +  "type": "string"
        +}
  2. 7 tool updates
    • Changeditem.create_many1 field changed
      • changedOutput schema / properties / batchId / description
        Previous value: -"Id of the batch; pass it to item.undo_batch to undo the whole batch. Null when nothing was written"New value: +"Id of the batch; pass it with sheetId to item.undo_batch to undo the whole batch. Null when nothing was written"
    • Changeditem.undo_batch2 fields changed
      • addedInput schema / properties / sheetId
        Added value: +{
        +  "description": "The sheet the batch wrote, as that call returned it",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "batchId"
        -]New value: +[
        +  "batchId",
        +  "sheetId"
        +]
    • Changeditem.update_many1 field changed
      • changedOutput schema / properties / batchId / description
        Previous value: -"Id of the batch; pass it to item.undo_batch to undo the whole batch. Null when nothing was written"New value: +"Id of the batch; pass it with sheetId to item.undo_batch to undo the whole batch. Null when nothing was written"
    • Changeditem.update_where1 field changed
      • changedOutput schema / properties / batchId / description
        Previous value: -"Id of the batch; pass it to item.undo_batch to undo the whole batch. Null when nothing was written"New value: +"Id of the batch; pass it with sheetId to item.undo_batch to undo the whole batch. Null when nothing was written"
    • Changedpeek.add_layout_item1 field changed
      • addedInput schema / properties / underTitle
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedpeek.read1 field changed
      • addedOutput schema / properties / layout / items / properties / underTitle
        Added value: +{
        +  "const": true,
        +  "description": "A field on the line under the record's title (at most 4 short fields)",
        +  "type": "boolean"
        +}
    • Changedpeek.reorder_layout2 fields changed
      • addedInput schema / properties / underTitle
        Added value: +{
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "orderedItemIds"
        -]
  3. 22 tool updates
    • Changedapp.create1 field changed
      • changedInput schema / properties / items / items / oneOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "kind": {
        -        "const": "view",
        -        "type": "string"
        -      },
        -      "viewId": {
        -        "exclusiveMinimum": 0,
        -        "maximum": 9007199254740991,
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "viewId"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "kind": {
        -        "const": "form",
        -        "type": "string"
        -      },
        -      "peekId": {
        -        "description": "The form's id (from sheet.schema peeks)",
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "peekId"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "kind": {
        -        "const": "page",
        -        "type": "string"
        -      },
        -      "pageId": {
        -        "exclusiveMinimum": 0,
        -        "maximum": 9007199254740991,
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "pageId"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "dashboardId": {
        -        "exclusiveMinimum": 0,
        -        "maximum": 9007199254740991,
        -        "type": "integer"
        -      },
        -      "kind": {
        -        "const": "dashboard",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "dashboardId"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "kind": {
        +        "const": "view",
        +        "type": "string"
        +      },
        +      "viewId": {
        +        "exclusiveMinimum": 0,
        +        "maximum": 9007199254740991,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "viewId"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "kind": {
        +        "const": "form",
        +        "type": "string"
        +      },
        +      "peekId": {
        +        "description": "The form's id (a sheet.schema peek of kind form; a record layout is refused)",
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "peekId"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "kind": {
        +        "const": "page",
        +        "type": "string"
        +      },
        +      "pageId": {
        +        "exclusiveMinimum": 0,
        +        "maximum": 9007199254740991,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "pageId"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "dashboardId": {
        +        "exclusiveMinimum": 0,
        +        "maximum": 9007199254740991,
        +        "type": "integer"
        +      },
        +      "kind": {
        +        "const": "dashboard",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "dashboardId"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedcomment.post8 fields changed
      • addedInput schema / properties / itemId / description
        Added value: +"The item's id (uuid)"
      • removedInput schema / properties / itemId / exclusiveMinimum
        Removed value: -0
      • addedInput schema / properties / itemId / format
        Added value: +"uuid"
      • removedInput schema / properties / itemId / maximum
        Removed value: -9007199254740991
      • addedInput schema / properties / itemId / pattern
        Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      • changedInput schema / properties / itemId / type
        Previous value: -"integer"New value: +"string"
      • addedInput schema / properties / sheetId
        Added value: +{
        +  "description": "The sheet the item is on",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "itemId",
        -  "content"
        -]New value: +[
        +  "sheetId",
        +  "itemId",
        +  "content"
        +]
    • Changedfile.request_upload1 field changed
      • changedInput schema / properties / mime / description
        Previous value: -"Content type of the file. One of: image/png, image/jpeg, image/webp."New value: +"Content type of the file. One of: image/png, image/jpeg, image/webp, application/pdf (private only), video/mp4 (private only)."
    • Changedform.create4 fields changed
      • changedInput schema / properties / fields / items / anyOf
        Previous value: -[
        -  {
        -    "description": "A field name or code",
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "properties": {
        -      "field": {
        -        "description": "A field name or code",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "The question shown on the form. Default: the field name.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "required": {
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "field"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "description": "A field name or code",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "properties": {
        +      "field": {
        +        "description": "A field name or code",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "help": {
        +        "description": "Help text shown under the question.",
        +        "maxLength": 300,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "The question shown on the form. Default: the field name.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "placeholder": {
        +        "description": "Hint shown inside the empty answer box.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "required": {
        +        "type": "boolean"
        +      },
        +      "width": {
        +        "anyOf": [
        +          {
        +            "const": 25,
        +            "type": "number"
        +          },
        +          {
        +            "const": 50,
        +            "type": "number"
        +          },
        +          {
        +            "const": 75,
        +            "type": "number"
        +          },
        +          {
        +            "const": 100,
        +            "type": "number"
        +          }
        +        ],
        +        "description": "Share of the row in the classic layout, in percent; steps ignores it. Default 100."
        +      }
        +    },
        +    "required": [
        +      "field"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / layout
        Added value: +{
        +  "description": "How the questions are laid out. Default classic.",
        +  "enum": [
        +    "classic",
        +    "steps"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / submitLabel
        Added value: +{
        +  "description": "The Submit button's text, in the form's language. Default: Submit in the visitor's language.",
        +  "maxLength": 40,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / successMessage / description
        Previous value: -"Shown after the form is sent."New value: +"Thank-you message shown after the form is sent (plain text; answer tokens, answers, button and Submit another are set in Form Studio)."
    • Addedform.stats
    • Changedform.update11 fields changed
      • changedInput schema / properties / addFields / items / anyOf
        Previous value: -[
        -  {
        -    "description": "A field name or code",
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "properties": {
        -      "field": {
        -        "description": "A field name or code",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "The question shown on the form. Default: the field name.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "required": {
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "field"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "description": "A field name or code",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "properties": {
        +      "field": {
        +        "description": "A field name or code",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "help": {
        +        "description": "Help text shown under the question.",
        +        "maxLength": 300,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "The question shown on the form. Default: the field name.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "placeholder": {
        +        "description": "Hint shown inside the empty answer box.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "required": {
        +        "type": "boolean"
        +      },
        +      "width": {
        +        "anyOf": [
        +          {
        +            "const": 25,
        +            "type": "number"
        +          },
        +          {
        +            "const": 50,
        +            "type": "number"
        +          },
        +          {
        +            "const": 75,
        +            "type": "number"
        +          },
        +          {
        +            "const": 100,
        +            "type": "number"
        +          }
        +        ],
        +        "description": "Share of the row in the classic layout, in percent; steps ignores it. Default 100."
        +      }
        +    },
        +    "required": [
        +      "field"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / aiReply
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "fallback": {
        +          "description": "Plain text shown instead when the reply can't be written within 15 seconds.",
        +          "maxLength": 500,
        +          "type": "string"
        +        },
        +        "prompt": {
        +          "description": "What Dana's reply to each person should say, plain text; {Field name} stands for their answer to a question on the form.",
        +          "maxLength": 4000,
        +          "minLength": 1,
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "prompt"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Show each person an AI reply written from their answers on the thank-you screen; null shows the thank-you message again."
        +}
      • addedInput schema / properties / editFields
        Added value: +{
        +  "description": "Change a question's label, required flag, help, placeholder or width; the other questions stay.",
        +  "items": {
        +    "properties": {
        +      "field": {
        +        "description": "A field on the form, by name or code",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "help": {
        +        "description": "Help text shown under the question.",
        +        "maxLength": 300,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "The question shown on the form",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "placeholder": {
        +        "description": "Hint shown inside the empty answer box.",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "required": {
        +        "type": "boolean"
        +      },
        +      "width": {
        +        "anyOf": [
        +          {
        +            "const": 25,
        +            "type": "number"
        +          },
        +          {
        +            "const": 50,
        +            "type": "number"
        +          },
        +          {
        +            "const": 75,
        +            "type": "number"
        +          },
        +          {
        +            "const": 100,
        +            "type": "number"
        +          }
        +        ],
        +        "description": "Share of the row in the classic layout, in percent; steps ignores it. Default 100."
        +      }
        +    },
        +    "required": [
        +      "field"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / formId / description
        Previous value: -"The form's id (sheet.schema lists a sheet's forms)."New value: +"The form's id (sheet.schema lists a sheet's peeks with their kind). Default: the form open in Form Studio."
      • addedInput schema / properties / layout
        Added value: +{
        +  "description": "classic places the questions side by side by width (100% takes the row), steps asks one at a time.",
        +  "enum": [
        +    "classic",
        +    "steps"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / order
        Added value: +{
        +  "description": "Every question on the form (field names or codes) in the new order, after addFields and removeFields; headings and other blocks keep their place.",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / redirect
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "notice": {
        +          "description": "Show \"Thanks, taking you to <site>…\" for 3 seconds first. Default true.",
        +          "type": "boolean"
        +        },
        +        "url": {
        +          "description": "An http or https address; put answers in the link as {Field name}, after the site name (https://example.com/thanks?name={Full name}).",
        +          "minLength": 1,
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "url"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Send people to a web page after they submit; null goes back to the thank-you message."
        +}
      • addedInput schema / properties / sheetId / description
        Added value: +"The form's sheet. Default: the form's own sheet."
      • addedInput schema / properties / submitLabel
        Added value: +{
        +  "description": "The Submit button's text, in the form's language. Default: Submit in the visitor's language.",
        +  "maxLength": 40,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / successMessage / description
        Previous value: -"Shown after the form is sent."New value: +"Thank-you message shown after the form is sent (plain text; answer tokens, answers, button and Submit another are set in Form Studio)."
      • removedInput schema / required
        Removed value: -[
        -  "sheetId",
        -  "formId"
        -]
    • Changedmember.update_profile1 field changed
      • addedInput schema / properties / phone
        Added value: +{
        +  "description": "Phone number as the user wrote it: digits, spaces and + ( ) - . only, at least 3 digits; empty clears it. Who sees it is a preference.",
        +  "maxLength": 32,
        +  "type": "string"
        +}
    • Changednotifications.read2 fields changed
      • addedOutput schema / properties / quietHours
        Added value: +{
        +  "description": "Push and email held outside working hours (notifications.set_quiet_hours)",
        +  "type": "boolean"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "telegramLinked",
        -  "categories"
        -]New value: +[
        +  "telegramLinked",
        +  "categories",
        +  "quietHours"
        +]
    • Addednotifications.set_quiet_hours
    • Changedpage.read5 fields changed
      • addedOutput schema / properties / authorId
        Added value: +{
        +  "description": "Employee id of the page's author",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / authorName
        Added value: +{
        +  "description": "The author's name; null when no author or no longer a member",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / cover
        Added value: +{
        +  "description": "Built-in cover (`atw:1`…`atw:6`) or an uploaded file's name",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / date
        Added value: +{
        +  "description": "The page's date, YYYY-MM-DD",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "icon",
        -  "spaceId",
        -  "body",
        -  "bodyTruncated",
        -  "attachmentCount",
        -  "mentionCount"
        -]New value: +[
        +  "id",
        +  "name",
        +  "icon",
        +  "spaceId",
        +  "body",
        +  "bodyTruncated",
        +  "attachmentCount",
        +  "mentionCount",
        +  "cover",
        +  "authorId",
        +  "authorName",
        +  "date"
        +]
    • Changedpage.update3 fields changed
      • addedInput schema / properties / authorId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Employee id (from `member.read`) shown as the page's author; null removes it"
        +}
      • addedInput schema / properties / cover
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "atw:1",
        +        "atw:2",
        +        "atw:3",
        +        "atw:4",
        +        "atw:5",
        +        "atw:6"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "A built-in cover, `atw:1` to `atw:6`; null removes it"
        +}
      • addedInput schema / properties / date
        Added value: +{
        +  "description": "The page's date, `YYYY-MM-DD`; null removes it",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedpeek.add_layout_item4 fields changed
      • addedInput schema / properties / display
        Added value: +{
        +  "enum": [
        +    "list",
        +    "table"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / tabId
        Added value: +{
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / tabTitles
        Added value: +{
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 8,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "attribute",
        -  "header",
        -  "welcome",
        -  "history",
        -  "comments",
        -  "submit"
        -]New value: +[
        +  "attribute",
        +  "tabs",
        +  "related_rows",
        +  "history",
        +  "comments",
        +  "header",
        +  "welcome",
        +  "submit"
        +]
    • Changedpeek.read7 fields changed
      • addedOutput schema / properties / kind
        Added value: +{
        +  "description": "form: it collects new rows; record: how a row opens",
        +  "enum": [
        +    "form",
        +    "record"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / layout / items / properties / display
        Added value: +{
        +  "description": "How a Related rows block shows",
        +  "enum": [
        +    "list",
        +    "table"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / layout / items / properties / sectionId
        Added value: +{
        +  "description": "The section (an item of type 'section') this item sits in",
        +  "type": "string"
        +}
      • addedOutput schema / properties / layout / items / properties / tabId
        Added value: +{
        +  "description": "The tab this item sits in",
        +  "type": "string"
        +}
      • addedOutput schema / properties / layout / items / properties / tabs
        Added value: +{
        +  "description": "A Tabs block's tabs; pass a tab id as tabId to peek.add_layout_item",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "title"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / layoutStyle
        Added value: +{
        +  "description": "A form's layout: classic (side by side by width) or steps (one question at a time); a record layout: columns",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "peekId",
        -  "sheetId",
        -  "name",
        -  "description",
        -  "layout",
        -  "options"
        -]New value: +[
        +  "peekId",
        +  "sheetId",
        +  "name",
        +  "description",
        +  "kind",
        +  "layoutStyle",
        +  "layout",
        +  "options"
        +]
    • Changedpeek.update_options14 fields changed
      • addedInput schema / properties / options / additionalProperties
        Added value: +false
      • addedInput schema / properties / options / properties / accent
        Added value: +{
        +  "description": "A palette token (color-N) for Submit, selections and progress",
        +  "pattern": "^color-\\d{1,2}$",
        +  "type": "string"
        +}
      • removedInput schema / properties / options / properties / autosave
        Removed value: -{
        -  "type": "boolean"
        -}
      • addedInput schema / properties / options / properties / header / anyOf
        Added value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "align": {
        +        "type": "string"
        +      },
        +      "background": {
        +        "type": "string"
        +      },
        +      "color": {
        +        "type": "string"
        +      },
        +      "size": {
        +        "type": "number"
        +      },
        +      "text": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "cover": {
        +        "description": "Show the cover band",
        +        "type": "boolean"
        +      },
        +      "direction": {
        +        "description": "auto follows the visitor's language",
        +        "enum": [
        +          "auto",
        +          "ltr",
        +          "rtl"
        +        ],
        +        "type": "string"
        +      },
        +      "logo": {
        +        "description": "Show the workspace logo above the title",
        +        "type": "boolean"
        +      },
        +      "width": {
        +        "description": "The public form card: 560, 680 or 840 px",
        +        "enum": [
        +          "narrow",
        +          "normal",
        +          "wide"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / options / properties / header / properties
        Removed value: -{
        -  "align": {
        -    "type": "string"
        -  },
        -  "background": {
        -    "type": "string"
        -  },
        -  "color": {
        -    "type": "string"
        -  },
        -  "size": {
        -    "type": "number"
        -  },
        -  "text": {
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / options / properties / header / type
        Removed value: -"object"
      • removedInput schema / properties / options / properties / navButtons
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedInput schema / properties / options / properties / newButton
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedInput schema / properties / options / properties / readonly
        Removed value: -{
        -  "type": "boolean"
        -}
      • addedInput schema / properties / options / properties / record
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "buttons": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "discard": {
        +          "type": "boolean"
        +        },
        +        "rowNav": {
        +          "type": "boolean"
        +        },
        +        "saveAndNew": {
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "openAs": {
        +      "enum": [
        +        "panel",
        +        "dialog",
        +        "page"
        +      ],
        +      "type": "string"
        +    },
        +    "readOnly": {
        +      "type": "boolean"
        +    },
        +    "saving": {
        +      "enum": [
        +        "auto",
        +        "button"
        +      ],
        +      "type": "string"
        +    },
        +    "use": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "newRow": {
        +          "type": "boolean"
        +        },
        +        "openAsMenu": {
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
      • removedInput schema / properties / options / properties / resetButton
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedInput schema / properties / options / properties / saveAndNewButton
        Removed value: -{
        -  "type": "boolean"
        -}
      • addedInput schema / properties / options / properties / submit
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "label": {
        +      "description": "The Submit button's text",
        +      "maxLength": 40,
        +      "minLength": 1,
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "label"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / options / properties / theme
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "appearance": {
        +      "description": "auto follows the visitor's light or dark setting",
        +      "enum": [
        +        "auto",
        +        "light",
        +        "dark"
        +      ],
        +      "type": "string"
        +    },
        +    "preset": {
        +      "enum": [
        +        "workspace",
        +        "paper",
        +        "sand",
        +        "ocean",
        +        "forest",
        +        "dusk"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "preset"
        +  ],
        +  "type": "object"
        +}
    • Changedportal.update1 field changed
      • changedInput schema / properties / contactForm / properties / peekId / description
        Previous value: -"The form (from sheet.schema)"New value: +"The form (a sheet.schema peek of kind form; a record layout is refused)"
    • Changedpreferences.read2 fields changed
      • addedOutput schema / properties / profileVisibility
        Added value: +{
        +  "additionalProperties": {
        +    "enum": [
        +      "org",
        +      "team",
        +      "admins"
        +    ],
        +    "type": "string"
        +  },
        +  "description": "Who sees each profile field (email, phone, pronouns, location, workingHours, timezone): org, team or admins",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "theme",
        -  "calendar",
        -  "startPage",
        -  "dock",
        -  "dockAutohide",
        -  "navCollapsed",
        -  "presence",
        -  "liveUpdateToasts",
        -  "agentHistoryRetentionDays",
        -  "pins",
        -  "language"
        -]New value: +[
        +  "theme",
        +  "calendar",
        +  "startPage",
        +  "dock",
        +  "dockAutohide",
        +  "navCollapsed",
        +  "presence",
        +  "liveUpdateToasts",
        +  "agentHistoryRetentionDays",
        +  "pins",
        +  "profileVisibility",
        +  "language"
        +]
    • Changedpreferences.update2 fields changed
      • addedInput schema / properties / profileVisibility
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Who sees each profile field: org = everyone in the org, team = the user's team, admins = only admins. Only the fields given change; admins and the user always see everything.",
        +  "properties": {
        +    "email": {
        +      "enum": [
        +        "org",
        +        "team",
        +        "admins"
        +      ],
        +      "type": "string"
        +    },
        +    "location": {
        +      "enum": [
        +        "org",
        +        "team",
        +        "admins"
        +      ],
        +      "type": "string"
        +    },
        +    "phone": {
        +      "enum": [
        +        "org",
        +        "team",
        +        "admins"
        +      ],
        +      "type": "string"
        +    },
        +    "pronouns": {
        +      "enum": [
        +        "org",
        +        "team",
        +        "admins"
        +      ],
        +      "type": "string"
        +    },
        +    "timezone": {
        +      "enum": [
        +        "org",
        +        "team",
        +        "admins"
        +      ],
        +      "type": "string"
        +    },
        +    "workingHours": {
        +      "enum": [
        +        "org",
        +        "team",
        +        "admins"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / saved / properties / profileVisibility
        Added value: +{
        +  "additionalProperties": {
        +    "enum": [
        +      "org",
        +      "team",
        +      "admins"
        +    ],
        +    "type": "string"
        +  },
        +  "description": "Who sees each profile field (email, phone, pronouns, location, workingHours, timezone): org, team or admins",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedprofile.update1 field changed
      • addedInput schema / properties / phone
        Added value: +{
        +  "description": "Phone number as the user wrote it: digits, spaces and + ( ) - . only, at least 3 digits; empty clears it. Who sees it is a preference.",
        +  "maxLength": 32,
        +  "type": "string"
        +}
    • Changedsheet.schema3 fields changed
      • addedOutput schema / properties / peeks / items / properties / isForm / description
        Added value: +"kind === \"form\""
      • addedOutput schema / properties / peeks / items / properties / kind
        Added value: +{
        +  "description": "form: collects new rows; record: how a row opens",
        +  "enum": [
        +    "form",
        +    "record"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / peeks / items / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "isForm"
        -]New value: +[
        +  "id",
        +  "name",
        +  "kind",
        +  "isForm"
        +]
    • Changedsheet.update1 field changed
      • changedInput schema / properties / defaultFormId / description
        Previous value: -"The form (peek id from `sheet.schema`) a row opens in"New value: +"The record layout (a peek of kind record from `sheet.schema`) a row opens in, or \"default\"; a form is refused"
    • Changedsheet.update_attribute1 field changed
      • changedInput schema / properties / relation / properties / form / description
        Previous value: -"The related sheet's form or peek a link opens"New value: +"The related sheet's record layout (a peek of kind record) a link opens a row in"
    • Changedview.create1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "TABLE",
        -  "KANBAN",
        -  "CALENDAR",
        -  "GALLERY",
        -  "GANTT_CHART",
        -  "TIME_LINE",
        -  "CARD",
        -  "EMAIL",
        -  "BLOG"
        -]New value: +[
        +  "TABLE",
        +  "KANBAN",
        +  "CALENDAR",
        +  "GALLERY",
        +  "GANTT_CHART",
        +  "TIME_LINE",
        +  "CARD",
        +  "EMAIL",
        +  "BLOG",
        +  "PROCESS_MAP"
        +]
  4. 76 tool updates
    • Addedapp.create
    • Addedapp.publish
    • Addedavailability.create
    • Addedavailability.delete
    • Addedavailability.read
    • Addedbooking_link.create
    • Addedcalendar.create
    • Addedcalendar.prep_brief
    • Changedcalendar.propose_times1 field changed
      • changedInput schema / properties / externalAttendeeEmails / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changedcalendar.read2 fields changed
      • removedOutput schema / properties / events / items / properties / calendarId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  }
        -]
      • addedOutput schema / properties / events / items / properties / calendarId / type
        Added value: +[
        +  "string",
        +  "number"
        +]
    • Addedcalendar.update
    • Addedcustom_agent.create
    • Changeddashboard.read4 fields changed
      • removedOutput schema / properties / dashboard / properties / id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  }
        -]
      • addedOutput schema / properties / dashboard / properties / id / type
        Added value: +[
        +  "string",
        +  "number"
        +]
      • removedOutput schema / properties / widgets / items / properties / id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  }
        -]
      • addedOutput schema / properties / widgets / items / properties / id / type
        Added value: +[
        +  "string",
        +  "number"
        +]
    • Changedfile.confirm_upload1 field changed
      • changedOutput schema / properties / filename / description
        Previous value: -"Stored filename to set on a File or Cover attribute"New value: +"Stored filename to add to a File List field or set as a Cover"
    • Changedfile.request_upload2 fields changed
      • addedOutput schema / properties / upload_headers
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "Headers the PUT must send exactly; the URL is signed for this Content-Type",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "upload_url",
        -  "key",
        -  "expires_in_seconds"
        -]New value: +[
        +  "upload_url",
        +  "upload_headers",
        +  "key",
        +  "expires_in_seconds"
        +]
    • Changedfolder.create4 fields changed
      • removedOutput schema / properties / location / properties / folderId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / location / properties / folderId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / location / properties / folderName / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / location / properties / folderName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedfolder.update4 fields changed
      • removedOutput schema / properties / location / properties / folderId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / location / properties / folderId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / location / properties / folderName / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / location / properties / folderName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Addedgoal.create
    • Addedintegration.list_operations
    • Addedintegration.list_options
    • Addedintegration.query
    • Changeditem_tree.duplicate4 fields changed
      • removedOutput schema / properties / location / properties / folderId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / location / properties / folderId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / location / properties / folderName / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / location / properties / folderName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changeditem_tree.move4 fields changed
      • removedOutput schema / properties / location / properties / folderId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / location / properties / folderId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / location / properties / folderName / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / location / properties / folderName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changeditem.create_humanized3 fields changed
      • changedInput schema / properties / fields / additionalProperties / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "properties": {
        +            "connectionId": {
        +              "type": "string"
        +            },
        +            "externalId": {
        +              "type": "string"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "mimeType": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "description": "The stored filename `file.confirm_upload` returned, or the entry's name as read",
        +              "type": "string"
        +            },
        +            "originalName": {
        +              "type": "string"
        +            },
        +            "source": {
        +              "enum": [
        +                "upload",
        +                "gdrive",
        +                "dropbox"
        +              ],
        +              "type": "string"
        +            },
        +            "type": {
        +              "type": "string"
        +            },
        +            "url": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "name"
        +          ],
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "type": "array"
        +  }
        +]
      • removedOutput schema / properties / spaceId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / spaceId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changeditem.create_many4 fields changed
      • removedOutput schema / properties / batchId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / batchId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / spaceId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / spaceId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Addeditem.read_files
    • Changeditem.update_humanized2 fields changed
      • changedInput schema / properties / fields / additionalProperties / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "properties": {
        +            "connectionId": {
        +              "type": "string"
        +            },
        +            "externalId": {
        +              "type": "string"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "mimeType": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "description": "The stored filename `file.confirm_upload` returned, or the entry's name as read",
        +              "type": "string"
        +            },
        +            "originalName": {
        +              "type": "string"
        +            },
        +            "source": {
        +              "enum": [
        +                "upload",
        +                "gdrive",
        +                "dropbox"
        +              ],
        +              "type": "string"
        +            },
        +            "type": {
        +              "type": "string"
        +            },
        +            "url": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "name"
        +          ],
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / mode / description
        Previous value: -"`append` only affects Document/Description fields — new content is added after the existing content. All other field types always replace."New value: +"`append` only affects Document/Description fields (new content is added after the existing content) and File List fields (new files are added to the cell's). All other field types always replace."
    • Changeditem.update_many4 fields changed
      • removedOutput schema / properties / batchId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / batchId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / spaceId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / spaceId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Addeditem.update_where
    • Addedlanguage.update
    • Addedlocation.create
    • Addedlocation.update
    • Addedmember.update_profile
    • Addednotifications.read
    • Addednotifications.reset
    • Addednotifications.update
    • Addedorg.update
    • Changedpage.create2 fields changed
      • removedOutput schema / properties / spaceId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / spaceId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedpage.edit4 fields changed
      • removedOutput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / name / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / spaceId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / spaceId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedpage.read6 fields changed
      • removedOutput schema / properties / icon / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / icon / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / name / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / spaceId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / spaceId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedpage.restore2 fields changed
      • removedOutput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / name / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedpage.update4 fields changed
      • removedOutput schema / properties / location / properties / folderId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / location / properties / folderId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / location / properties / folderName / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / location / properties / folderName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Addedpeek.add_layout_item
    • Addedpeek.read
    • Addedpeek.remove_layout_item
    • Addedpeek.reorder_layout
    • Addedpeek.update_field_options
    • Addedpeek.update_options
    • Addedportal.update
    • Addedpreferences.read
    • Addedpreferences.update
    • Addedprofile.update
    • Addedrecipe.search
    • Addedschedule.read
    • Changedsheet.add_attribute1 field changed
      • changedInput schema / properties / dataType / enum
        Previous value: -[
        -  "Short Text",
        -  "Long Text",
        -  "Number",
        -  "Date",
        -  "DateRange",
        -  "Email",
        -  "URL",
        -  "PhoneNumber",
        -  "CheckBox",
        -  "Status",
        -  "Select",
        -  "Multi-Select",
        -  "Employee",
        -  "Employee List",
        -  "Team",
        -  "Team List",
        -  "Job",
        -  "Job List",
        -  "Actor",
        -  "File List",
        -  "Document",
        -  "Location",
        -  "Address",
        -  "Duration",
        -  "Link",
        -  "Vote",
        -  "Goal",
        -  "Code",
        -  "Relation",
        -  "Formula",
        -  "Mirror",
        -  "Rollup",
        -  "Rate",
        -  "Timer",
        -  "Pipeline",
        -  "Summary",
        -  "DocX",
        -  "Button"
        -]New value: +[
        +  "Short Text",
        +  "Long Text",
        +  "Number",
        +  "Date",
        +  "Email",
        +  "URL",
        +  "PhoneNumber",
        +  "CheckBox",
        +  "Status",
        +  "Select",
        +  "Multi-Select",
        +  "Employee",
        +  "Employee List",
        +  "Team",
        +  "Team List",
        +  "Job",
        +  "Job List",
        +  "Actor",
        +  "File List",
        +  "Document",
        +  "Location",
        +  "Address",
        +  "Duration",
        +  "Link",
        +  "Vote",
        +  "Goal",
        +  "Code",
        +  "Relation",
        +  "Formula",
        +  "Mirror",
        +  "Rollup",
        +  "Rate",
        +  "Timer",
        +  "Pipeline",
        +  "Summary",
        +  "DocX",
        +  "Button"
        +]
    • Changedsheet.aggregate1 field changed
      • changedInput schema / properties / filter / properties / conditions / items / properties / value / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "items": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "number"
        -        }
        -      ]
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "items": {
        +      "type": [
        +        "string",
        +        "number"
        +      ]
        +    },
        +    "type": "array"
        +  }
        +]
    • Changedsheet.convert_to_task2 fields changed
      • removedOutput schema / properties / type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedsheet.create1 field changed
      • changedInput schema / properties / attributes / items / properties / dataType / enum
        Previous value: -[
        -  "Short Text",
        -  "Long Text",
        -  "Number",
        -  "Date",
        -  "DateRange",
        -  "Email",
        -  "URL",
        -  "PhoneNumber",
        -  "CheckBox",
        -  "Status",
        -  "Select",
        -  "Multi-Select",
        -  "Employee",
        -  "Employee List",
        -  "Team",
        -  "Team List",
        -  "Job",
        -  "Job List",
        -  "Actor",
        -  "File List",
        -  "Document",
        -  "Location",
        -  "Address",
        -  "Duration",
        -  "Link",
        -  "Vote",
        -  "Goal"
        -]New value: +[
        +  "Short Text",
        +  "Long Text",
        +  "Number",
        +  "Date",
        +  "Email",
        +  "URL",
        +  "PhoneNumber",
        +  "CheckBox",
        +  "Status",
        +  "Select",
        +  "Multi-Select",
        +  "Employee",
        +  "Employee List",
        +  "Team",
        +  "Team List",
        +  "Job",
        +  "Job List",
        +  "Actor",
        +  "File List",
        +  "Document",
        +  "Location",
        +  "Address",
        +  "Duration",
        +  "Link",
        +  "Vote",
        +  "Goal"
        +]
    • Changedsheet.read2 fields changed
      • removedOutput schema / properties / nextOffset / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / nextOffset / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedsheet.schema16 fields changed
      • removedOutput schema / properties / attributes / items / properties / code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / attributes / items / properties / code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / color / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / id / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "number"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / id / type
        Added value: +[
        +  "string",
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / stage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / stage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / title / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / title / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / peeks / items / properties / id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  }
        -]
      • addedOutput schema / properties / peeks / items / properties / id / type
        Added value: +[
        +  "string",
        +  "number"
        +]
      • removedOutput schema / properties / sheet / properties / spaceId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / sheet / properties / spaceId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / sheet / properties / type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / sheet / properties / type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Addedsheet.set_autofill
    • Changedsheet.set_dependencies4 fields changed
      • removedOutput schema / properties / blockedByAttributeId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / blockedByAttributeId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / blockingAttributeId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / blockingAttributeId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedsheet.update_attribute1 field changed
      • changedInput schema / properties / dataType / enum
        Previous value: -[
        -  "Short Text",
        -  "Long Text",
        -  "Number",
        -  "Date",
        -  "DateRange",
        -  "Email",
        -  "URL",
        -  "PhoneNumber",
        -  "CheckBox",
        -  "Status",
        -  "Select",
        -  "Multi-Select",
        -  "Employee",
        -  "Employee List",
        -  "Team",
        -  "Team List",
        -  "Job",
        -  "Job List",
        -  "Actor",
        -  "File List",
        -  "Document",
        -  "Location",
        -  "Address",
        -  "Duration",
        -  "Link",
        -  "Vote",
        -  "Goal"
        -]New value: +[
        +  "Short Text",
        +  "Long Text",
        +  "Number",
        +  "Date",
        +  "Email",
        +  "URL",
        +  "PhoneNumber",
        +  "CheckBox",
        +  "Status",
        +  "Select",
        +  "Multi-Select",
        +  "Employee",
        +  "Employee List",
        +  "Team",
        +  "Team List",
        +  "Job",
        +  "Job List",
        +  "Actor",
        +  "File List",
        +  "Document",
        +  "Location",
        +  "Address",
        +  "Duration",
        +  "Link",
        +  "Vote",
        +  "Goal"
        +]
    • Changedtask.create2 fields changed
      • removedOutput schema / properties / spaceId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / spaceId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Addedtemplate.browse
    • Addedtemplate.install
    • Addedtemplate.preview
    • Changedview.create2 fields changed
      • removedOutput schema / properties / spaceId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / spaceId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Addedview.publish
    • Addedview.update
    • Changedworkflow.from_template2 fields changed
      • addedOutput schema / properties / nodes / items / properties / config / description
        Added value: +"Secrets (authorization, API keys, tokens) read as ••••••; send them back unchanged to keep them"
      • changedOutput schema / properties / trigger / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "additionalProperties": {},
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      },
        -      "name": {
        -        "type": "string"
        -      },
        -      "next": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "port": {
        -              "type": "string"
        -            },
        -            "ref": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "port",
        -            "ref"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "operation": {
        -        "type": "string"
        -      },
        -      "ref": {
        -        "description": "The node's id: name it in workflow.update as after, ref or {{steps.<ref>.<path>}}",
        -        "type": "string"
        -      },
        -      "type": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "ref",
        -      "name",
        -      "type",
        -      "config",
        -      "next"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "config": {
        +        "additionalProperties": {},
        +        "description": "Secrets (authorization, API keys, tokens) read as ••••••; send them back unchanged to keep them",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "next": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "port": {
        +              "type": "string"
        +            },
        +            "ref": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "port",
        +            "ref"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "operation": {
        +        "type": "string"
        +      },
        +      "ref": {
        +        "description": "The node's id: name it in workflow.update as after, ref or {{steps.<ref>.<path>}}",
        +        "type": "string"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "ref",
        +      "name",
        +      "type",
        +      "config",
        +      "next"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedworkflow.list2 fields changed
      • removedOutput schema / properties / workflows / items / properties / trigger / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / workflows / items / properties / trigger / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedworkflow.read2 fields changed
      • addedOutput schema / properties / nodes / items / properties / config / description
        Added value: +"Secrets (authorization, API keys, tokens) read as ••••••; send them back unchanged to keep them"
      • changedOutput schema / properties / trigger / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "additionalProperties": {},
        -        "propertyNames": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      },
        -      "name": {
        -        "type": "string"
        -      },
        -      "next": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "port": {
        -              "type": "string"
        -            },
        -            "ref": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "port",
        -            "ref"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "operation": {
        -        "type": "string"
        -      },
        -      "ref": {
        -        "description": "The node's id: name it in workflow.update as after, ref or {{steps.<ref>.<path>}}",
        -        "type": "string"
        -      },
        -      "type": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "ref",
        -      "name",
        -      "type",
        -      "config",
        -      "next"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "config": {
        +        "additionalProperties": {},
        +        "description": "Secrets (authorization, API keys, tokens) read as ••••••; send them back unchanged to keep them",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "next": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "port": {
        +              "type": "string"
        +            },
        +            "ref": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "port",
        +            "ref"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "operation": {
        +        "type": "string"
        +      },
        +      "ref": {
        +        "description": "The node's id: name it in workflow.update as after, ref or {{steps.<ref>.<path>}}",
        +        "type": "string"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "ref",
        +      "name",
        +      "type",
        +      "config",
        +      "next"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Addedworking_hours.update
    • Changedworkspace.search6 fields changed
      • removedOutput schema / properties / results / items / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / name / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / parentSheetId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / parentSheetId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / snippet / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / snippet / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedworkspace.structure6 fields changed
      • removedOutput schema / properties / spaces / items / properties / folders / items / properties / parentId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / spaces / items / properties / folders / items / properties / parentId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / spaces / items / properties / items / items / properties / folderId / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / spaces / items / properties / items / items / properties / folderId / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / spaces / items / properties / items / items / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / spaces / items / properties / items / items / properties / name / type
        Added value: +[
        +  "string",
        +  "null"
        +]
  5. 61 tool updates
    • Addedaccess.grant
    • Addedaccess.read
    • Addedaccess.revoke
    • Addedaccess.update
    • Addedapp.unpublish
    • Addedbooking_link.update
    • Addeddashboard.create
    • Addeddashboard.delete
    • Addeddashboard.restore
    • Addeddashboard.update
    • Addedfolder.create
    • Addedfolder.delete
    • Addedfolder.restore
    • Addedfolder.update
    • Addedform.create
    • Addedform.delete
    • Addedform.restore
    • Addedform.update
    • Addedinbound_email.regenerate
    • Addedinbound_email.rename
    • Addeditem_tree.duplicate
    • Addeditem_tree.move
    • Changeditem.create_humanized3 fields changed
      • addedOutput schema / properties / sheetId
        Added value: +{
        +  "description": "Sheet the row was created in",
        +  "type": "number"
        +}
      • addedOutput schema / properties / spaceId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Space of that sheet; null for a sheet outside a space"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "itemId",
        -  "url"
        -]New value: +[
        +  "itemId",
        +  "url",
        +  "sheetId",
        +  "spaceId"
        +]
    • Changeditem.create_many3 fields changed
      • addedOutput schema / properties / sheetId
        Added value: +{
        +  "description": "Sheet the rows are in",
        +  "type": "number"
        +}
      • addedOutput schema / properties / spaceId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Space of that sheet; null for a sheet outside a space"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "batchId",
        -  "created",
        -  "updated",
        -  "skipped",
        -  "skippedCount",
        -  "url"
        -]New value: +[
        +  "batchId",
        +  "created",
        +  "updated",
        +  "skipped",
        +  "skippedCount",
        +  "url",
        +  "sheetId",
        +  "spaceId"
        +]
    • Changeditem.update_many3 fields changed
      • addedOutput schema / properties / sheetId
        Added value: +{
        +  "description": "Sheet the rows are in",
        +  "type": "number"
        +}
      • addedOutput schema / properties / spaceId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Space of that sheet; null for a sheet outside a space"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "batchId",
        -  "created",
        -  "updated",
        -  "skipped",
        -  "skippedCount",
        -  "url"
        -]New value: +[
        +  "batchId",
        +  "created",
        +  "updated",
        +  "skipped",
        +  "skippedCount",
        +  "url",
        +  "sheetId",
        +  "spaceId"
        +]
    • Changedpage.create2 fields changed
      • addedInput schema / properties / spaceId / description
        Added value: +"Target space. Omit to use the space the user is on."
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "markdown",
        -  "spaceId"
        -]New value: +[
        +  "name",
        +  "markdown"
        +]
    • Addedpage.delete
    • Changedpage.edit2 fields changed
      • addedOutput schema / properties / spaceId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Space the page is in"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "pageId",
        -  "name",
        -  "op",
        -  "previousContent",
        -  "previousContentTooLarge"
        -]New value: +[
        +  "pageId",
        +  "name",
        +  "spaceId",
        +  "op",
        +  "previousContent",
        +  "previousContentTooLarge"
        +]
    • Addedpage.restore
    • Addedpage.update
    • Changedsheet.add_attribute11 fields changed
      • changedInput schema / properties / dataType / enum
        Previous value: -[
        -  "Short Text",
        -  "Long Text",
        -  "Number",
        -  "Date",
        -  "DateRange",
        -  "Email",
        -  "URL",
        -  "PhoneNumber",
        -  "CheckBox",
        -  "Status",
        -  "Select",
        -  "Multi-Select",
        -  "Employee",
        -  "Employee List",
        -  "Team",
        -  "Team List",
        -  "Job",
        -  "Job List",
        -  "Actor",
        -  "File List",
        -  "Document",
        -  "Location",
        -  "Address",
        -  "Duration",
        -  "Link",
        -  "Vote",
        -  "Goal",
        -  "Code",
        -  "Relation"
        -]New value: +[
        +  "Short Text",
        +  "Long Text",
        +  "Number",
        +  "Date",
        +  "DateRange",
        +  "Email",
        +  "URL",
        +  "PhoneNumber",
        +  "CheckBox",
        +  "Status",
        +  "Select",
        +  "Multi-Select",
        +  "Employee",
        +  "Employee List",
        +  "Team",
        +  "Team List",
        +  "Job",
        +  "Job List",
        +  "Actor",
        +  "File List",
        +  "Document",
        +  "Location",
        +  "Address",
        +  "Duration",
        +  "Link",
        +  "Vote",
        +  "Goal",
        +  "Code",
        +  "Relation",
        +  "Formula",
        +  "Mirror",
        +  "Rollup",
        +  "Rate",
        +  "Timer",
        +  "Pipeline",
        +  "Summary",
        +  "DocX",
        +  "Button"
        +]
      • changedInput schema / properties / options / description
        Previous value: -"Choices for Status / Select / Multi-Select fields, in display order — `language` for a Code field — or `relatedSheetId` (+ `twoWay`) for a Relation."New value: +"Choices for Status / Select / Multi-Select fields, in display order — `language` for a Code field — `relatedSheetId` (+ `twoWay`) for a Relation — or the settings of a Formula, Mirror, Rollup, Rate, Pipeline, Summary or Button field."
      • addedInput schema / properties / options / properties / field
        Added value: +{
        +  "description": "Mirror: the related sheet's field to show. Rollup: the Number field to aggregate (not for COUNT).",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / formula
        Added value: +{
        +  "description": "Formula only: fields in braces, e.g. `{Price} * {Quantity}`; functions IF, round, days_between…",
        +  "maxLength": 2000,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / function
        Added value: +{
        +  "description": "Rollup only: how the related rows are aggregated.",
        +  "enum": [
        +    "COUNT",
        +    "DISTINCT_COUNT",
        +    "SUM",
        +    "AVG",
        +    "MIN",
        +    "MAX"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / relation
        Added value: +{
        +  "description": "Mirror / Rollup only: the name of a Relation field on this sheet.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / returnType
        Added value: +{
        +  "description": "Formula only: what it returns. Default number.",
        +  "enum": [
        +    "number",
        +    "text"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / stages
        Added value: +{
        +  "description": "Pipeline only: the stages in order; won stages `succeed`, lost ones `failed`.",
        +  "items": {
        +    "properties": {
        +      "color": {
        +        "type": "string"
        +      },
        +      "outcome": {
        +        "description": "Default open",
        +        "enum": [
        +          "open",
        +          "succeed",
        +          "failed"
        +        ],
        +        "type": "string"
        +      },
        +      "title": {
        +        "maxLength": 80,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "title"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 30,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / options / properties / stars
        Added value: +{
        +  "description": "Rate only: number of stars (2–20), default 5.",
        +  "maximum": 20,
        +  "minimum": 2,
        +  "type": "integer"
        +}
      • addedInput schema / properties / options / properties / template
        Added value: +{
        +  "description": "Summary only: text with fields in braces, e.g. `{Company} — {Stage}`.",
        +  "maxLength": 4000,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / workflow
        Added value: +{
        +  "description": "Button only: the name of a workflow on this sheet with a manual trigger.",
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Addedsheet.convert_to_task
    • Changedsheet.create2 fields changed
      • addedOutput schema / properties / spaceId
        Added value: +{
        +  "description": "Space the sheet landed in",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "sheetId"
        -]New value: +[
        +  "sheetId",
        +  "spaceId"
        +]
    • Addedsheet.delete
    • Changedsheet.remove_attribute4 fields changed
      • addedInput schema / properties / confirmFileLoss
        Added value: +{
        +  "description": "Remove a File List field whose files are deleted for good. Only once the user accepts it.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / attributeId
        Added value: +{
        +  "description": "The removed field",
        +  "type": "number"
        +}
      • addedOutput schema / properties / name
        Added value: +{
        +  "description": "Its name",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "ok"
        -]New value: +[
        +  "ok",
        +  "attributeId",
        +  "name"
        +]
    • Addedsheet.restore
    • Changedsheet.schema2 fields changed
      • addedOutput schema / properties / attributes / items / properties / default
        Added value: +{
        +  "description": "The value a new row starts with"
        +}
      • addedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / archived
        Added value: +{
        +  "type": "boolean"
        +}
    • Addedsheet.update
    • Changedsheet.update_attribute28 fields changed
      • addedInput schema / properties / checkboxStyle
        Added value: +{
        +  "description": "Checkbox only.",
        +  "enum": [
        +    "checkbox",
        +    "toggle",
        +    "switch"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / date
        Added value: +{
        +  "description": "Date only: how the date and the time are written.",
        +  "properties": {
        +    "dateFormat": {
        +      "enum": [
        +        "Compact",
        +        "Full Date",
        +        "Relative",
        +        "Month/Day/Year",
        +        "Day/Month/Year",
        +        "Year/Month/Day"
        +      ],
        +      "type": "string"
        +    },
        +    "timeFormat": {
        +      "enum": [
        +        "12 hour",
        +        "24 hour"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / default
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "minItems": 1,
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The value new rows start with, as a human value: a choice title, a member, team or job name (a list for list fields), `creator` for whoever adds the row, or `today` for a Date's creation day. null clears it."
        +}
      • addedInput schema / properties / icon
        Added value: +{
        +  "description": "A Bootstrap icon name, e.g. `bi-star`.",
        +  "maxLength": 80,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / isUnique
        Added value: +{
        +  "description": "Title, Short Text, URL, Phone Number and Email only: refuse duplicate values.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / language
        Added value: +{
        +  "description": "Code only.",
        +  "enum": [
        +    "plain",
        +    "html",
        +    "json",
        +    "typescript",
        +    "javascript",
        +    "sql",
        +    "css",
        +    "markdown"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / number
        Added value: +{
        +  "description": "Number only: currency or number format (e.g. Euro), decimal places, and how it shows (NUMBER, BAR…).",
        +  "properties": {
        +    "decimals": {
        +      "maximum": 10,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "format": {
        +      "enum": [
        +        "Number",
        +        "Number with commas",
        +        "Percent",
        +        "Dollar",
        +        "Euro",
        +        "Riyal",
        +        "Rand",
        +        "Real",
        +        "Pound",
        +        "Ruble",
        +        "Rupee",
        +        "Rupiah",
        +        "Yen",
        +        "Yuan",
        +        "Won",
        +        "Canadian dollar",
        +        "Franc"
        +      ],
        +      "type": "string"
        +    },
        +    "showAs": {
        +      "enum": [
        +        "NUMBER",
        +        "BAR",
        +        "RING",
        +        "GAUGE",
        +        "RATE"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / options / properties / field
        Added value: +{
        +  "description": "Mirror: the related sheet's field to show. Rollup: the Number field to aggregate (not for COUNT).",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / formula
        Added value: +{
        +  "description": "Formula only: fields in braces, e.g. `{Price} * {Quantity}`; functions IF, round, days_between…",
        +  "maxLength": 2000,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / function
        Added value: +{
        +  "description": "Rollup only: how the related rows are aggregated.",
        +  "enum": [
        +    "COUNT",
        +    "DISTINCT_COUNT",
        +    "SUM",
        +    "AVG",
        +    "MIN",
        +    "MAX"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / items / items / properties / archived
        Added value: +{
        +  "description": "Select / Multi-Select only: true hides the choice from pickers; rows keep it. false brings it back.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / options / properties / items / items / properties / isDefault
        Added value: +{
        +  "description": "true makes this choice the field's default for new rows (on Multi-Select, adds it); false removes it.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / options / properties / items / items / properties / title / description
        Added value: +"Required for a new option; a live one keeps its title."
      • removedInput schema / properties / options / properties / items / items / required
        Removed value: -[
        -  "title"
        -]
      • addedInput schema / properties / options / properties / relation
        Added value: +{
        +  "description": "Mirror / Rollup only: the name of a Relation field on this sheet.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / returnType
        Added value: +{
        +  "description": "Formula only: what it returns. Default number.",
        +  "enum": [
        +    "number",
        +    "text"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / stages
        Added value: +{
        +  "description": "Pipeline only: the stages in order; won stages `succeed`, lost ones `failed`.",
        +  "items": {
        +    "properties": {
        +      "color": {
        +        "type": "string"
        +      },
        +      "outcome": {
        +        "description": "Default open",
        +        "enum": [
        +          "open",
        +          "succeed",
        +          "failed"
        +        ],
        +        "type": "string"
        +      },
        +      "title": {
        +        "maxLength": 80,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "title"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 30,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / options / properties / stars
        Added value: +{
        +  "description": "Rate only: number of stars (2–20), default 5.",
        +  "maximum": 20,
        +  "minimum": 2,
        +  "type": "integer"
        +}
      • addedInput schema / properties / options / properties / template
        Added value: +{
        +  "description": "Summary only: text with fields in braces, e.g. `{Company} — {Stage}`.",
        +  "maxLength": 4000,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / options / properties / workflow
        Added value: +{
        +  "description": "Button only: the name of a workflow on this sheet with a manual trigger.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / options / required
        Removed value: -[
        -  "items"
        -]
      • addedInput schema / properties / order
        Added value: +{
        +  "description": "Choice ids in their new order, each live id exactly once. On Status, either every choice or every choice of one stage; a choice keeps its stage.",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / relation
        Added value: +{
        +  "description": "Relation only: how linked rows are shown and picked.",
        +  "properties": {
        +    "filter": {
        +      "anyOf": [
        +        {
        +          "properties": {
        +            "conditionOperator": {
        +              "enum": [
        +                "AND",
        +                "OR"
        +              ],
        +              "type": "string"
        +            },
        +            "filters": {
        +              "items": {
        +                "properties": {
        +                  "attribute": {
        +                    "description": "A field name of the related sheet",
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "conditionOperator": {
        +                    "enum": [
        +                      "AND",
        +                      "OR"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "filters": {
        +                    "items": {},
        +                    "type": "array"
        +                  },
        +                  "queryOperator": {
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "value": {}
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "required": [
        +            "filters"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Which related rows can be picked, in sheet.read's `filters` shape, fields and values by name"
        +    },
        +    "form": {
        +      "anyOf": [
        +        {
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The related sheet's form or peek a link opens"
        +    },
        +    "subtitle": {
        +      "anyOf": [
        +        {
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "A related sheet's field shown under each link; null clears it"
        +    },
        +    "view": {
        +      "anyOf": [
        +        {
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The related sheet's view the picker lists rows from"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / selectStyle
        Added value: +{
        +  "description": "Select / Multi-Select only.",
        +  "enum": [
        +    "dropdown",
        +    "toggle"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / attributeId
        Added value: +{
        +  "description": "The field that changed",
        +  "type": "number"
        +}
      • addedOutput schema / properties / changed
        Added value: +{
        +  "description": "The inputs that were applied, e.g. name, number, order, default",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / name
        Added value: +{
        +  "description": "Its name after the change",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "ok"
        -]New value: +[
        +  "ok",
        +  "attributeId",
        +  "name",
        +  "changed"
        +]
    • Addedspace.create
    • Addedspace.delete
    • Addedspace.restore
    • Addedspace.update
    • Changedsteps.apply13 fields changed
      • addedInput schema / properties / doc / additionalProperties
        Added value: +false
      • addedInput schema / properties / doc / properties / dashboards
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "description": {
        +        "type": "string"
        +      },
        +      "icon": {
        +        "type": "string"
        +      },
        +      "name": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "ref": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "sheet": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "$ref": {
        +                "minLength": 1,
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "$ref"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "properties": {
        +              "$existing": {
        +                "properties": {
        +                  "sheetId": {
        +                    "description": "An existing sheet in this workspace (from workspace.structure)",
        +                    "exclusiveMinimum": 0,
        +                    "maximum": 9007199254740991,
        +                    "type": "integer"
        +                  }
        +                },
        +                "required": [
        +                  "sheetId"
        +                ],
        +                "type": "object"
        +              }
        +            },
        +            "required": [
        +              "$existing"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "widgets": {
        +        "items": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "ref",
        +      "name",
        +      "sheet",
        +      "widgets"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / doc / properties / forms / items / properties / sheet / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "$ref": {
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "$ref"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "$existing": {
        +        "properties": {
        +          "sheetId": {
        +            "description": "An existing sheet in this workspace (from workspace.structure)",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "sheetId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "$existing"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / doc / properties / forms / items / properties / sheet / properties
        Removed value: -{
        -  "$ref": {
        -    "minLength": 1,
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / doc / properties / forms / items / properties / sheet / required
        Removed value: -[
        -  "$ref"
        -]
      • removedInput schema / properties / doc / properties / forms / items / properties / sheet / type
        Removed value: -"object"
      • addedInput schema / properties / doc / properties / pages / items / properties / content
        Added value: +{
        +  "items": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / doc / properties / sheets / items / properties / remove
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / doc / properties / sheets / items / properties / target
        Added value: +{
        +  "properties": {
        +    "sheetId": {
        +      "exclusiveMinimum": 0,
        +      "maximum": 9007199254740991,
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "sheetId"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / doc / properties / spaceHome
        Added value: +{
        +  "properties": {
        +    "widgets": {
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "widgets"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / doc / properties / workflows
        Added value: +{
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {
        +      "actions": {
        +        "items": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "active": {
        +        "description": "true = publish it so it runs now; omit to leave a draft",
        +        "type": "boolean"
        +      },
        +      "name": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "ref": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "sheet": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "$ref": {
        +                "minLength": 1,
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "$ref"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "properties": {
        +              "$existing": {
        +                "properties": {
        +                  "sheetId": {
        +                    "description": "An existing sheet in this workspace (from workspace.structure)",
        +                    "exclusiveMinimum": 0,
        +                    "maximum": 9007199254740991,
        +                    "type": "integer"
        +                  }
        +                },
        +                "required": [
        +                  "sheetId"
        +                ],
        +                "type": "object"
        +              }
        +            },
        +            "required": [
        +              "$existing"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "trigger": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "ref",
        +      "name",
        +      "sheet",
        +      "trigger",
        +      "actions"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / inboundAddresses
        Added value: +{
        +  "description": "Email to this sheet: give the user this address; each email sent to it creates an item",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "active": {
        +        "type": "boolean"
        +      },
        +      "address": {
        +        "type": "string"
        +      },
        +      "sheetId": {
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "sheetId",
        +      "address",
        +      "active"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / workflows
        Added value: +{
        +  "description": "One per workflow: active = running; error = why it was not created or turned on — tell the user",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "active": {
        +        "type": "boolean"
        +      },
        +      "error": {
        +        "type": "string"
        +      },
        +      "id": {
        +        "type": "string"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "ref": {
        +        "type": "string"
        +      },
        +      "sheetId": {
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "ref",
        +      "name",
        +      "active"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedtask.create3 fields changed
      • addedOutput schema / properties / sheetId
        Added value: +{
        +  "description": "Task sheet the task was created in",
        +  "type": "number"
        +}
      • addedOutput schema / properties / spaceId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Space of that sheet; null for a sheet outside a space"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "taskId"
        -]New value: +[
        +  "taskId",
        +  "sheetId",
        +  "spaceId"
        +]
    • Changedview.create12 fields changed
      • addedInput schema / properties / contentField
        Added value: +{
        +  "description": "BLOG only: the Document field whose pages are the posts. Default: the sheet's first one.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / dateField / description
        Previous value: -"CALENDAR only: attribute CODE of the Date field to place events on."New value: +"Date field name or code that places rows on a CALENDAR, GANTT_CHART or TIME_LINE."
      • addedInput schema / properties / filter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "The sheet.read filter form: `{ conditionOperator: \"AND\", filters: [{ attribute: \"Stage\", queryOperator: \"NEQ\", value: \"Won\" }] }`. `attribute` is a field name or code; Status, Select, member and team values may be their names. Groups nest.",
        +      "properties": {
        +        "conditionOperator": {
        +          "default": "AND",
        +          "enum": [
        +            "AND",
        +            "OR"
        +          ],
        +          "type": "string"
        +        },
        +        "filters": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "minItems": 1,
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "filters"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Rows the view shows. `null` clears the filter."
        +}
      • changedInput schema / properties / groupBy / description
        Previous value: -"KANBAN only: attribute CODE of the Status/Select field to group columns by."New value: +"Field name or code to group by: a board's columns (Status/Select), or a table's or card view's groups."
      • addedInput schema / properties / hiddenFields
        Added value: +{
        +  "description": "Field names or codes to hide (TABLE, KANBAN and CARD views).",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / resourceField
        Added value: +{
        +  "description": "TIME_LINE only: the field whose values become the timeline's rows, e.g. Assignee. Default: the title.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / shownFields
        Added value: +{
        +  "description": "Field names or codes to show again (TABLE, KANBAN and CARD views).",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / sort
        Added value: +{
        +  "description": "Row order, up to three keys; `field` is a name or code. `[]` clears it.",
        +  "items": {
        +    "properties": {
        +      "direction": {
        +        "enum": [
        +          "asc",
        +          "desc"
        +        ],
        +        "type": "string"
        +      },
        +      "field": {
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "field",
        +      "direction"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 3,
        +  "type": "array"
        +}
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "TABLE",
        -  "KANBAN",
        -  "CALENDAR",
        -  "GALLERY"
        -]New value: +[
        +  "TABLE",
        +  "KANBAN",
        +  "CALENDAR",
        +  "GALLERY",
        +  "GANTT_CHART",
        +  "TIME_LINE",
        +  "CARD",
        +  "EMAIL",
        +  "BLOG"
        +]
      • addedOutput schema / properties / sheetId
        Added value: +{
        +  "description": "Sheet the view was added to",
        +  "type": "number"
        +}
      • addedOutput schema / properties / spaceId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Space of that sheet; null outside a space or when unknown"
        +}
      • addedOutput schema / required
        Added value: +[
        +  "sheetId",
        +  "spaceId"
        +]
    • Addedview.delete
    • Addedview.restore
    • Addedwidget.create
    • Addedwidget.delete
    • Addedwidget.restore
    • Addedwidget.update
    • Addedworkflow.delete
    • Addedworkflow.from_template
    • Addedworkflow.list
    • Addedworkflow.publish
    • Addedworkflow.read
    • Addedworkflow.restore
    • Addedworkflow.toggle
    • Addedworkflow.unpublish
    • Addedworkflow.update
  6. 2 tool updates
    • Changedpage.read1 field changed
      • changedOutput schema / properties / body / description
        Previous value: -"Page text, capped at 4000 chars"New value: +"Page text, capped at 15,000 chars"
    • Changedsheet.read3 fields changed
      • addedInput schema / properties / documents
        Added value: +{
        +  "default": "full",
        +  "description": "Document and Description cells: `full` markdown (default), an 80-char plain-text `preview`, or `omit` them",
        +  "enum": [
        +    "full",
        +    "preview",
        +    "omit"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Return only these attributes (names or codes) plus `id`; use it to scan many rows per call",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / sort
        Added value: +{
        +  "description": "Row order, up to three keys applied in turn; `field` is an attribute name or code. Newest first = `[{ field: \"ModifiedAt\", direction: \"desc\" }]` (recently changed) or CreatedAt desc (recently added)",
        +  "items": {
        +    "properties": {
        +      "direction": {
        +        "enum": [
        +          "asc",
        +          "desc"
        +        ],
        +        "type": "string"
        +      },
        +      "field": {
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "field",
        +      "direction"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 3,
        +  "minItems": 1,
        +  "type": "array"
        +}
  7. 32 tool updates
    • First observedcalendar.propose_times
    • First observedcalendar.read
    • First observedcomment.post
    • First observeddashboard.read
    • First observedfile.confirm_upload
    • First observedfile.request_upload
    • First observeditem.archive
    • First observeditem.create_humanized
    • First observeditem.create_many
    • First observeditem.undo_batch
    • First observeditem.update_humanized
    • First observeditem.update_many
    • First observedmember.read
    • First observedpage.create
    • First observedpage.edit
    • First observedpage.read
    • First observedsheet.add_attribute
    • First observedsheet.aggregate
    • First observedsheet.create
    • First observedsheet.read
    • First observedsheet.remove_attribute
    • First observedsheet.rename
    • First observedsheet.restore_attribute
    • First observedsheet.schema
    • First observedsheet.set_dependencies
    • First observedsheet.update_attribute
    • First observedsteps.apply
    • First observedtask.create
    • First observedtask.read
    • First observedview.create
    • First observedworkspace.search
    • First observedworkspace.structure

Publisher details

Operator
Atwork Solutions · Publisher source
Operator website
https://atwork.so
Vendor relationship
First-party
Restrictions
Not applicable

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources