ploy_answer
ChatGPTSubmit answers to a pending request using its requestId and seq as requestSeq, or send a freeform message. Supports text, choices, approval, boolean, and skip; question and choice indexes are zero-based. Returns a receipt or browser handoff.
ploy_artifact
ChatGPTRead one Ploy artifact's available public content and references. Inline content over 256 KiB is omitted with contentOmitted: true. Returns dashboardUrl for the full artifact or editing.
ploy_artifacts
ChatGPTList a bounded page of artifact metadata and public references in artifact-ID order. Returns nextCursor for continuation and dashboardUrl for viewing or editing. Inline content is excluded.
ploy_delete
ChatGPTDelete an idle Ploy and return confirmation. Active or queued work produces a conflict.
ploy_document
ChatGPTRead Markdown by documentId or exact path in the authorized workspace, up to 10,000 UTF-16 code units per page. Continue at nextOffset with the returned updatedAt version; a changed version returns an error so reading can restart. Does not edit the document.
ploy_documents
ChatGPTList document IDs, titles, and paths in the authorized workspace, newest updated first. Optional search matches document titles. nextOffset continues with the same search; read content with ploy_document. Pages can shift as documents are added, edited, or deleted.
ploy_form_submissions
ChatGPTList captured form submissions for a site, newest first. Supports form name/page URL and date filters. Metadata only by default; includeData returns submitted field values without collected IP addresses or user agents. nextOffset continues with the same filters. Pages can shift as submissions are added or deleted.
ploy_get
ChatGPTGet a Ploy's title, identity, and dashboard path.
ploy_get_started
ChatGPTUse at the start of a conversation. Returns the workspace's first sites (whether each has content), recent Ploys, and the next step to offer the user. Direct read; never starts an agent run.
ploy_list
ChatGPTList a bounded page of Ploys in the authorized workspace. Returns metadata and nextCursor for continuation.
ploy_mark_read
ChatGPTSet a Ploy's read timestamp to the current time and return confirmation. Repeated calls advance the timestamp.
ploy_questions
ChatGPTGet the latest pending questions with their requestId and seq. A null request means no questions are pending.
ploy_read
ChatGPTRead one bounded page of public conversation events and current activity. Returns nextCursor even on empty pages, hasMore for pagination, and dashboardUrl for browser handoffs.
ploy_recover
ChatGPTRecover interrupted or stalled work in a Ploy. Returns an accepted run and starting sequence, or log_quiet when there is no recoverable work. May resume agent actions and consume credits.
ploy_send
ChatGPTContinue an existing Ploy by queuing a message or steering an eligible running turn. Returns a durable receipt; the idempotencyKey deduplicates retries of the same message.
ploy_site_publish
ChatGPTPublish the current saved site to production without an agent turn. Requires site-publish and data-read permissions and a siteId from ploy_sites or a site artifact. Returns a durable operationId, not completion; poll ploy_site_publish_status. Retain the idempotencyKey when retrying this publish; use a new key for a new publish. Does not change automatic agent-publish permission.
ploy_site_publish_status
ChatGPTRead a production publish operation using its siteId and operationId. Returns in_progress, succeeded, or failed with deployment statuses and URLs. Poll at intervals of at least two seconds while in_progress. Failure details are available at dashboardUrl. Does not start a publish or an agent turn.
ploy_site_status
ChatGPTCheck a site's clone progress and preview readiness using its site ID. Returns state, stage, and sandbox status. This does not report production deployment status or publish the site.
ploy_sites
ChatGPTList site IDs and titles in the authorized workspace, with optional title search. Use a returned site ID for visitors, site status, and form submissions. nextOffset continues with the same filters.
ploy_start
ChatGPTCreate a Ploy and submit its first message to the agent. Returns a durable receipt while work continues. Reference web pages can be named by URL in the message; the agent fetches them. Retries with the same idempotencyKey do not create another Ploy or message.
ploy_stop
ChatGPTStop active or queued work in a Ploy. Returns the stop state and whether a durable stop was recorded.
ploy_update
ChatGPTRename a Ploy and return its updated metadata.
ploy_upload
ChatGPTUpload a private attachment of up to 10 MiB from exactly one source: file (a file the user attached in ChatGPT), url (Ploy downloads a public http(s) file, so no bytes pass through the model), contentText (UTF-8 text files), or contentBase64. Returns a confirmed fileId for a later start, message, or answer. Uploading alone does not send a message.
ploy_visitors
ChatGPTList enriched visitors for a site in the authorized workspace without an agent turn. Returns identified people and companies, excluding anonymous traffic, raw IPs, and vendor payloads; seenOn and appIdentity add where a visitor was seen and what the site's own app identify() calls say about them. Pages are ordered by identification time; nextOffset continues with the same filters. Pages can shift during enrichment.
ploy_workspaces
ChatGPTList a bounded page of workspaces authorized by this connection: the pinned workspace for a workspace grant, or eligible workspaces in the authorized organization. Supply a returned workspace ID on workspace tool calls. nextOffset continues pagination. Workspace selection follows the user's explicit choice in this conversation, not ambient client context or list order. If no workspace is selected, call ploy_workspaces. Use the sole authorized workspace without asking only after checking the complete list from offset 0 through nextOffset null. With multiple workspaces, ask the user to choose before any workspace-scoped call; listing does not select one. Resolve supplied names through ploy_workspaces; ask the user if a name has no match or multiple matches. Prefer MCP form elicitation when available; otherwise ask in chat. Reuse the choice for this conversation unless the user changes it.
ploydb_column
ChatGPTadd: send columns as an array of {label, type, config?} to create all names and types together and return columns in input order. The table may have at most 97 fields including existing fields and title. Single label/type/config is also supported in one call; no separate rename or retype is needed. Batch schema jobs run sequentially; on failure refresh the schema and add only missing columns; delete: remove field and its values; rename: change label, retaining fieldId and secret protection; retype: convert existing values, retaining applicable configuration, and fail if conversion is blocked; secret: mark a column secret, preserving explicit human settings. Agents cannot unmask columns. Read ploydb_columns first. LONG_TEXT is Markdown rich text, suitable for fancy descriptions. RELATION only references rows in this same table; cross-table targets are rejected. Primary title stays TEXT. Managed columns and prompt invariants remain enforced by the domain service.
ploydb_columns
ChatGPTRead a table's columns, immutable field IDs, labels, types, configuration, secret status, and per-column filterOperators. Load before querying or editing rows. User-facing tables must use labels as headers; keep IDs for tool arguments only.
ploydb_database
ChatGPTcreate: create an empty database with displayName; delete: archive a database by ploydbId, owner/admin only; rename: change displayName while retaining identity and table data. Database creation does not create a table.
ploydb_databases
ChatGPTList a bounded page of ready databases in the authorized workspace. Continue using nextOffset. Use a returned database ID for table discovery. PloyDB stores durable structured data shared with the dashboard and deployed sites; use separate tables for entities, typed columns for values, and row updates for changing data. Avoid one database per row, JSON blobs for queryable properties, or schema changes to represent individual records.
ploydb_import_csv
ChatGPTAppend up to 1,000 rows from CSV text, at most 256,000 characters, to an existing table. Read columns first; headers must uniquely match non-secret, non-managed column labels. Sync-owned fields cannot be written, including empty cells. Import uses permissive CSV coercion, unlike interactive row writes; inspect saved values afterward. Does not upsert or delete. One idempotencyKey per unchanged import deduplicates rows. Create tables and columns separately. Split larger files into chunks with distinct keys.
ploydb_operation
ChatGPTPoll a duplication receipt's operationId in its original workspace. in_progress is not completion; succeeded includes the new table identity; failed requires inspection before a new operation. Poll at least two seconds apart.
ploydb_row
ChatGPTadd: supply rows (an array of up to 100 field-ID-keyed value objects) and idempotencyKey to create a batch and return rows in input order. Retain the key and unchanged data/order on retry; inserted counts newly created rows, while rows includes existing records on retry. Single values remains supported without a key; update: patch supplied values by rowId, null clears a cell; delete: remove row by rowId. Read schema and current rows first. For LONG_TEXT rich text, send a Markdown string with headings, emphasis, lists, or links; do not send HTML or an editor JSON document. Pass expectedVersion for updates to detect concurrent edits. Secret and managed-column writes are refused. Updates return the saved row with secrets masked; use labels when presenting it. After an unknown add result, inspect rows before retrying to avoid duplicates.
ploydb_rows
ChatGPTRead one bounded page of rows or CSV. filters are ANDed {field: fieldId, op, value}; sort is [{field: fieldId, dir: asc|desc}]. Use each column's filterOperators: eq/neq exact values, contains text substring, gt/gte/lt/lte ordered values, list_contains/list_not_contains one list member, is_null/is_not_null without value. CHECKBOX writes and filters accept booleans, but returned cells use 1/0; DATE accepts YYYY-MM-DD; SELECT/STATUS use option IDs; list members use option/person/row IDs for their type. search matches non-secret searchable columns. Secret columns allow only presence filters, no sort. Continue nextCursor with identical filters/sort/search; concurrent changes can shift pages. values remain field-ID-keyed: present column labels to the user. CSV exports a page with labeled headers, masked secrets, and continuation metadata, not a complete snapshot.
ploydb_table
ChatGPTcreate: supply name, optional titleColumnName (default Name), and optional columns with label/type/config to create the schema in one call. columns are additional to the required TEXT title, at most 97 total; explicit columns omit starter content. skipStarterContent=true creates only the title when columns are omitted, without blank rows or generic Property columns; delete: remove table and all rows; rename: change name without changing its ID; duplicate: start a durable copy of schema and rows using operationKey. Duplicate returns a receipt, not completion; poll ploydb_operation. Reuse the same operationKey on duplicate retries. Read tables before mutation; deletes lose data.
ploydb_tables
ChatGPTList tables and their column schemas in a database. IDs remain stable across rename; display names are metadata. Columns return secret status and valid filter operators. SELECT and STATUS values use config.options IDs; use their labels when presenting records.