admin_destroy
ChatGPTDelete admin resources: favorite (A sidebar favorite for the authenticated user); favoriteFolder (A user-created folder for organizing favorite items in the sidebar); label (A team-scoped tag used to categorize tasks, documents, files, and other workspace entities); role (A team-scoped permission set assigned to team members). Pass {resource, operation: "delete", id}. Batch delete: bulkDelete — pass {resource, operation: "bulkDelete", ids:[…], onError?}. Bulk deletes are NOT idempotent-safe on retry: deleting an already-deleted row reports resource_not_found, not success. If the response is lost, re-query the ids to see what actually remains and delete only those — do not blind-retry the batch, and do not read a resource_not_found on a lost-response retry as "the delete failed".
admin_mutate
ChatGPTCreate or update admin resources: favorite (A sidebar favorite for the authenticated user); favoriteFolder (A user-created folder for organizing favorite items in the sidebar); label (A team-scoped tag used to categorize tasks, documents, files, and other workspace entities); role (A team-scoped permission set assigned to team members). Pass {resource, operation} plus the resource's writable fields. Batch writes: bulkCreate, bulkUpdate — pass {resource, operation, items:[…], onError?}. Recovering a bulkCreate depends on whether you got a result envelope back. GOT ONE: trust it — it is index-aligned, rows marked ok are created, and you may send a NEW batch containing only the rows that never got created. NO ENVELOPE (timeout / lost response): resend the SAME items in the SAME order — that exact batch is deduplicated per row and replays what already landed instead of re-creating it. Do NOT re-split it or drop items first; that changes the dedup key and DOES create duplicates. bulkUpdate carries no dedup key, so it is safe to resend only because each item is an absolute field set — never resend one whose values are relative to the current value. Clearing a value: a field whose type includes "null" accepts an explicit JSON null to clear it (for an FK, to unlink it). Omitting a key leaves that field UNCHANGED — omission and null are different requests, so send only the keys you mean to change.
admin_query
ChatGPTRead (list / get / search) admin resources: auditEvent (A read-only, immutable audit-trail record of MCP tool-calls); customField (A custom-field DEFINITION (read-only): name, type, associations, and dropdown options); favorite (A sidebar favorite for the authenticated user); favoriteFolder (A user-created folder for organizing favorite items in the sidebar); label (A team-scoped tag used to categorize tasks, documents, files, and other workspace entities); role (A team-scoped permission set assigned to team members). Pass {resource, operation} plus the operation's args.
communication_destroy
ChatGPTDelete communication resources: chat (A team-scoped conversation (group chat, direct message, or project general-discussion)); checkIn (A team-scoped recurring or ad-hoc check-in attached to a form); checkInRequest (One scheduled or manually triggered occurrence of a CheckIn); message (A message in a chat, task comment thread, document comment, file comment, annotation thread, or message thread (reply)). Pass {resource, operation: "delete", id}. Batch delete: bulkDelete — pass {resource, operation: "bulkDelete", ids:[…], onError?}. Bulk deletes are NOT idempotent-safe on retry: deleting an already-deleted row reports resource_not_found, not success. If the response is lost, re-query the ids to see what actually remains and delete only those — do not blind-retry the batch, and do not read a resource_not_found on a lost-response retry as "the delete failed".
communication_mutate
ChatGPTCreate or update communication resources: chat (A team-scoped conversation (group chat, direct message, or project general-discussion)); checkIn (A team-scoped recurring or ad-hoc check-in attached to a form); checkInRequest (One scheduled or manually triggered occurrence of a CheckIn); message (A message in a chat, task comment thread, document comment, file comment, annotation thread, or message thread (reply)). Pass {resource, operation} plus the resource's writable fields. Also links/unlinks relations via addAssignees, addRespondedBy, addSubscribers, removeAssignees, removeRespondedBy, removeSubscribers — pass {resource, operation, id, ids}. Batch writes: bulkCreate, bulkUpdate — pass {resource, operation, items:[…], onError?}. Recovering a bulkCreate depends on whether you got a result envelope back. GOT ONE: trust it — it is index-aligned, rows marked ok are created, and you may send a NEW batch containing only the rows that never got created. NO ENVELOPE (timeout / lost response): resend the SAME items in the SAME order — that exact batch is deduplicated per row and replays what already landed instead of re-creating it. Do NOT re-split it or drop items first; that changes the dedup key and DOES create duplicates. bulkUpdate carries no dedup key, so it is safe to resend only because each item is an absolute field set — never resend one whose values are relative to the current value. Clearing a value: a field whose type includes "null" accepts an explicit JSON null to clear it (for an FK, to unlink it). Omitting a key leaves that field UNCHANGED — omission and null are different requests, so send only the keys you mean to change. Default to the surface you are working in (on a task → comment on that task). Before DMing a person or opening a discussion, take the channel from the user's intent; if it is unstated, verify rather than guess.
communication_query
ChatGPTRead (list / get / search) communication resources: chat (A team-scoped conversation (group chat, direct message, or project general-discussion)); checkIn (A team-scoped recurring or ad-hoc check-in attached to a form); checkInRequest (One scheduled or manually triggered occurrence of a CheckIn); message (A message in a chat, task comment thread, document comment, file comment, annotation thread, or message thread (reply)). Pass {resource, operation} plus the operation's args. A 1:1 direct chat has no name, so never hunt one by listing or sorting chats: {resource:"chat", operation:"list", recipientMemberId:<a TeamMember id>} returns the caller's direct chat with that member. SENDING a DM needs no chat id at all — communication_mutate message create takes recipientMemberId directly.
knowledge_destroy
ChatGPTDelete knowledge resources: annotation (A drawing or comment-anchor placed on a file); document (A project-scoped rich-text document (Nifty native doc)); file (An uploaded file attached to a project, task, document, message, or folder). Pass {resource, operation: "delete", id}. Batch delete: bulkDelete — pass {resource, operation: "bulkDelete", ids:[…], onError?}. Bulk deletes are NOT idempotent-safe on retry: deleting an already-deleted row reports resource_not_found, not success. If the response is lost, re-query the ids to see what actually remains and delete only those — do not blind-retry the batch, and do not read a resource_not_found on a lost-response retry as "the delete failed".
knowledge_mutate
ChatGPTCreate or update knowledge resources: annotation (A drawing or comment-anchor placed on a file); document (A project-scoped rich-text document (Nifty native doc)); file (An uploaded file attached to a project, task, document, message, or folder). Pass {resource, operation} plus the resource's writable fields. Also links/unlinks relations via addLabels, addSubscribers, removeLabels, removeSubscribers — pass {resource, operation, id, ids}. Batch writes: bulkCreate, bulkUpdate — pass {resource, operation, items:[…], onError?}. Recovering a bulkCreate depends on whether you got a result envelope back. GOT ONE: trust it — it is index-aligned, rows marked ok are created, and you may send a NEW batch containing only the rows that never got created. NO ENVELOPE (timeout / lost response): resend the SAME items in the SAME order — that exact batch is deduplicated per row and replays what already landed instead of re-creating it. Do NOT re-split it or drop items first; that changes the dedup key and DOES create duplicates. bulkUpdate carries no dedup key, so it is safe to resend only because each item is an absolute field set — never resend one whose values are relative to the current value. Clearing a value: a field whose type includes "null" accepts an explicit JSON null to clear it (for an FK, to unlink it). Omitting a key leaves that field UNCHANGED — omission and null are different requests, so send only the keys you mean to change. Create a document to move long-form content into a collaborative space — pass content (Markdown) to author the body up front. A document body is append-only after creation: extend it with append, read it with the content query operation; update changes the shell (name/locked/archived) and cannot rewrite the body. File bytes are uploaded out-of-band — prefer attaching an existing file over creating one.
knowledge_query
ChatGPTRead (list / get / search) knowledge resources: annotation (A drawing or comment-anchor placed on a file); document (A project-scoped rich-text document (Nifty native doc)); file (An uploaded file attached to a project, task, document, message, or folder). Pass {resource, operation} plus the operation's args. Read verb ops: content (Read a document body as Markdown — the rich-text content, which list and get do not return). For project-scoped resources here (document): "search" REQUIRES projectId (no workspace-wide fallback — omitting it errors project_not_specified); "list" does NOT require it (omitting it falls back to a workspace-wide scan).
people_query
ChatGPTRead (list / get / search) people resources: member (A person inside a team workspace); presenceStatus (A reusable team-scoped template for member statuses — e.g., "In a meeting", "Focus time", "Out of office"). Pass {resource, operation} plus the operation's args.
planning_destroy
ChatGPTDelete planning resources: form (A team-scoped form (survey / intake / check-in) whose structure is a set of ordered fields, each with a type, a label, optional multiple-choice options, and optional conditional-logic rules); goal (A team objective with tracked progress (full CRUD)); goalGroup (A team-scoped grouping for organizing related goals (e.g., "Q2 OKRs", "Engineering initiatives")); list (A project-scoped task container); portfolio (A team-scoped grouping of projects); project (A top-level container in the Nifty workspace); projectFolder (A project folder — a grouping of projects inside a portfolio); status (A project-scoped status column for tasks (Kanban column, list stage)). Pass {resource, operation: "delete", id}. Batch delete: bulkDelete — pass {resource, operation: "bulkDelete", ids:[…], onError?}. Bulk deletes are NOT idempotent-safe on retry: deleting an already-deleted row reports resource_not_found, not success. If the response is lost, re-query the ids to see what actually remains and delete only those — do not blind-retry the batch, and do not read a resource_not_found on a lost-response retry as "the delete failed".
planning_mutate
ChatGPTCreate or update planning resources: form (A team-scoped form (survey / intake / check-in) whose structure is a set of ordered fields, each with a type, a label, optional multiple-choice options, and optional conditional-logic rules); goal (A team objective with tracked progress (full CRUD)); goalGroup (A team-scoped grouping for organizing related goals (e.g., "Q2 OKRs", "Engineering initiatives")); list (A project-scoped task container); portfolio (A team-scoped grouping of projects); project (A top-level container in the Nifty workspace); projectFolder (A named grouping of projects inside a portfolio); status (A project-scoped status column for tasks (Kanban column, list stage)). Pass {resource, operation} plus the resource's writable fields. Also links/unlinks relations via addAssignees, addGoals, addHiddenFor, addMembers, removeAssignees, removeGoals, removeHiddenFor, removeMembers — pass {resource, operation, id, ids}. Batch writes: bulkCreate, bulkUpdate — pass {resource, operation, items:[…], onError?}. Recovering a bulkCreate depends on whether you got a result envelope back. GOT ONE: trust it — it is index-aligned, rows marked ok are created, and you may send a NEW batch containing only the rows that never got created. NO ENVELOPE (timeout / lost response): resend the SAME items in the SAME order — that exact batch is deduplicated per row and replays what already landed instead of re-creating it. Do NOT re-split it or drop items first; that changes the dedup key and DOES create duplicates. bulkUpdate carries no dedup key, so it is safe to resend only because each item is an absolute field set — never resend one whose values are relative to the current value. Clearing a value: a field whose type includes "null" accepts an explicit JSON null to clear it (for an FK, to unlink it). Omitting a key leaves that field UNCHANGED — omission and null are different requests, so send only the keys you mean to change. Add a list to an existing project for new work; create a whole project only for a genuinely new initiative. A list groups tasks (its Roadmap visibility is automatic); a status is a task's lifecycle stage; a goal is a cross-project, org-level objective (not project-level date grouping — use a list for that). Configure what you create to the user's stated purpose rather than taking kitchen-sink defaults: on project create pass only the modules that fit — OMITTING them enables ALL 8 feature tabs, which clutters a focused project (content calendar → [tasks, calendar, files]; bug tracker → [tasks]; knowledge base → [documents, files]). A lean setup the user can extend beats a cluttered one.
planning_query
ChatGPTRead (list / get / search) planning resources: form (A team-scoped form (survey / intake / check-in) whose structure is a set of ordered fields, each with a type, a label, optional multiple-choice options, and optional conditional-logic rules); goal (A team objective with tracked progress (full CRUD)); goalGroup (A team-scoped grouping for organizing related goals (e.g., "Q2 OKRs", "Engineering initiatives")); list (A project-scoped task container); portfolio (A team-scoped grouping of projects); project (A top-level container in the Nifty workspace); projectFolder (A project folder — a grouping of projects inside a portfolio); status (A project-scoped status column for tasks (Kanban column, list stage)). Pass {resource, operation} plus the operation's args. For project-scoped resources here (list, status): "search" REQUIRES projectId (no workspace-wide fallback — omitting it errors project_not_specified); "list" does NOT require it (omitting it falls back to a workspace-wide scan).
reporting_destroy
ChatGPTDelete reporting resources: reportChart (A team-scoped saved reporting chart that aggregates task data (live, events, or historical) across one or more projects); timeEntry (A member's time-tracked interval on a task — list/get return only YOUR entries unless your role holds viewTimeReports, which widens them to your whole team (filter memberId for one person; search NEVER widens, so build team reports with list)). Pass {resource, operation: "delete", id}. Batch delete: bulkDelete — pass {resource, operation: "bulkDelete", ids:[…], onError?}. Bulk deletes are NOT idempotent-safe on retry: deleting an already-deleted row reports resource_not_found, not success. If the response is lost, re-query the ids to see what actually remains and delete only those — do not blind-retry the batch, and do not read a resource_not_found on a lost-response retry as "the delete failed".
reporting_mutate
ChatGPTCreate or update reporting resources: reportChart (A team-scoped saved reporting chart that aggregates task data (live, events, or historical) across one or more projects); timeEntry (A member's time-tracked interval on a task (and optionally a project)). Pass {resource, operation} plus the resource's writable fields. Also links/unlinks relations via addProjects, removeProjects — pass {resource, operation, id, ids}. Batch writes: bulkCreate, bulkUpdate — pass {resource, operation, items:[…], onError?}. Recovering a bulkCreate depends on whether you got a result envelope back. GOT ONE: trust it — it is index-aligned, rows marked ok are created, and you may send a NEW batch containing only the rows that never got created. NO ENVELOPE (timeout / lost response): resend the SAME items in the SAME order — that exact batch is deduplicated per row and replays what already landed instead of re-creating it. Do NOT re-split it or drop items first; that changes the dedup key and DOES create duplicates. bulkUpdate carries no dedup key, so it is safe to resend only because each item is an absolute field set — never resend one whose values are relative to the current value. Concurrency-safe updates: on a single-row update, pass expectedUpdatedAt = the updatedAt from the read your edit is based on; a stale_write (409) means the row changed since — re-read it, re-derive your change, and retry with the fresh updatedAt (never a timestamp echoed by the error). The guard requires at least one field change. Bulk items do not accept it: with onError absent, one item carrying it rejects the WHOLE batch client-side (0 HTTP calls); onError:'continue' ships the valid rows and returns per-item errors. Clearing a value: a field whose type includes "null" accepts an explicit JSON null to clear it (for an FK, to unlink it). Omitting a key leaves that field UNCHANGED — omission and null are different requests, so send only the keys you mean to change.
reporting_query
ChatGPTRead (list / get / search) reporting resources: projectActivity (A read-only, append-only per-project ACTIVITY FEED row: WHO triggered WHICH domain event in a project); reportChart (A team-scoped saved reporting chart that aggregates task data (live, events, or historical) across one or more projects); timeEntry (A member's time-tracked interval on a task — list/get return only YOUR entries unless your role holds viewTimeReports, which widens them to your whole team (filter memberId for one person; search NEVER widens, so build team reports with list)). Pass {resource, operation} plus the operation's args.
tasks_destroy
ChatGPTDelete tasks resources: checklist (A named, ordered container of checklist items on a task); checklistItem (A single completable line inside a checklist); reminder (A scheduled reminder anchored to a task); task (A unit of work in a project); tasksLayout (A saved task-board VIEW/LAYOUT for a user (per-user, optionally per-project): the board type + a config object (filters, grouping, sort, hidden columns, calendar range, etc.)). Pass {resource, operation: "delete", id}. Batch delete: bulkDelete — pass {resource, operation: "bulkDelete", ids:[…], onError?}. Bulk deletes are NOT idempotent-safe on retry: deleting an already-deleted row reports resource_not_found, not success. If the response is lost, re-query the ids to see what actually remains and delete only those — do not blind-retry the batch, and do not read a resource_not_found on a lost-response retry as "the delete failed".
tasks_mutate
ChatGPTCreate or update tasks resources: checklist (A named, ordered container of checklist items on a task); checklistItem (A single completable line inside a checklist); reminder (A scheduled reminder anchored to a task); task (A unit of work in a project); tasksLayout (A saved task-board VIEW/LAYOUT for a user (per-user, optionally per-project): the board type + a jsonb config (filters, grouping, sort, hidden columns, calendar range, etc.)). Pass {resource, operation} plus the resource's writable fields. Also links/unlinks relations via addAssignees, addConnectedTasks, addHiddenFor, addLabels, addSubscribers, removeAssignees, removeConnectedTasks, removeHiddenFor, removeLabels, removeSubscribers — pass {resource, operation, id, ids}. Batch writes: bulkCreate, bulkUpdate — pass {resource, operation, items:[…], onError?}. Recovering a bulkCreate depends on whether you got a result envelope back. GOT ONE: trust it — it is index-aligned, rows marked ok are created, and you may send a NEW batch containing only the rows that never got created. NO ENVELOPE (timeout / lost response): resend the SAME items in the SAME order — that exact batch is deduplicated per row and replays what already landed instead of re-creating it. Do NOT re-split it or drop items first; that changes the dedup key and DOES create duplicates. bulkUpdate carries no dedup key, so it is safe to resend only because each item is an absolute field set — never resend one whose values are relative to the current value. Clearing a value: a field whose type includes "null" accepts an explicit JSON null to clear it (for an FK, to unlink it). Omitting a key leaves that field UNCHANGED — omission and null are different requests, so send only the keys you mean to change. Structure work with native fields, not prose: a tick-off step → a checklistItem; a step someone owns/schedules (its own assignee, due date, or status) → a subtask (a task with parentTaskId); a typed attribute recorded across tasks (budget / priority / a date) → a customField. Categorize a task by status (lifecycle stage), label (free-form, multiple per task), or customField (typed, one value per field). HARD RULE: before writing a bulleted or numbered list of actionable items inside a description, STOP — each line is a subtask or checklistItem per the mapping above; a work-list buried in prose is an anti-pattern (a description holds rationale/context/ evidence only). Mirror a source doc's hierarchy: a phase/milestone → a list or task, its steps → subtasks, a step's checks → checklistItems. "Lean, not kitchen-sink" governs FEATURES (modules, statuses, custom fields, views), NOT decomposition — splitting real work into subtasks/checklist is expected structure, not clutter.
tasks_query
ChatGPTRead (list / get / search) tasks resources: checklist (A named, ordered container of checklist items on a task); checklistItem (A single completable line inside a checklist); reminder (A scheduled reminder anchored to a task); task (A unit of work in a project); tasksLayout (A saved task-board VIEW/LAYOUT for a user (per-user, optionally per-project): the board type + a config object (filters, grouping, sort, hidden columns, calendar range, etc.)). Pass {resource, operation} plus the operation's args. For project-scoped resources here (task): "search" REQUIRES projectId (no workspace-wide fallback — omitting it errors project_not_specified); "list" does NOT require it (omitting it falls back to a workspace-wide scan).
get_analytics_overview
Claudeget_inventory_item
Claudeget_inventory_summary
Claudeget_labels
Claudeget_profit_and_loss_report
Claudesearch_inventory
Claudesearch_orders
Claude