Interact with Microsoft 365 and Office services through the Microsoft Graph API.
Dutify is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Whole Dutify suite in one server: Hub call recordings, projects, Codexum wiki, Roadmarq requests.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http dutify-mcp https://mcp.dutify.ai --header 'X-API-Key: ${X_API_KEY}'
# 2 — ask your agent for something these tools do
# whoami, list_accounts, find_my_workspace and 187 more
It needs X_API_KEY (Dutify personal key (du_live_...) from your account settings): this sends it in the X-API-Key header from your environment, so export it first — its endpoint answers 401 without it.
Dutify costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it. Claude Code reads X_API_KEY (Dutify personal key (du_live_...) from your account settings) from your environment each time it connects and sends it in the X-API-Key header — its endpoint answers 401 without it — so the key stays out of its config: export it in your shell profile (macOS, Linux), or run setx X_API_KEY … and open a new terminal (Windows).
claude mcp add --scope user --transport http dutify-mcp https://mcp.dutify.ai --header 'X-API-Key: ${X_API_KEY}'Reconnect, or start a new session, and the tools appear in the model’s tool list.
It reaches a system of yours, so it needs your own credential rather than the publisher’s: X-API-Key header — Dutify personal key (du_live_...) from your account settings. You set it in your own client’s config, on your machine — this marketplace never holds it.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
190 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Unified Dutify whoami: fresh credential/workspace discovery. Does not require a selected workspace or reserve quota.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List the accounts configured for this MCP session. Returns one entry per account with name (the label the caller passes as the account tool argument) and workspace (the workspace identifier or name declared for that account). API keys are not returned. In single-account mode (X-API-Key with optional X-Dutify-Workspace), returns a single entry with name="default". In multi-account mode (X-Dut
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Unified Dutify find_my_workspace: fresh credential/workspace discovery. Does not require a selected workspace or reserve quota.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Unified Dutify list_workspaces: fresh credential/workspace discovery. Does not require a selected workspace or reserve quota.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List feature-request boards the caller can view in the current workspace. Each entry includes the board slug and the short-ID prefixes (featureRequestKey, bugReportKey) needed to address requests/bugs in follow-up tool calls.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List wiki spaces the caller can view in the current workspace, each with a page count. Use the key field as the space identifier in follow-up wiki tool calls.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fetch the request/response example payloads (full JSON values) for a Dutify API resource tag. Use this when you're about to write rich content via a tool that accepts a TipTap content parameter (e.g. wiki_create_page) and need a concrete reference of what the doc shape looks like — banners, collapsibles, mermaid diagrams, code blocks with language, mentions, inline labels, tables, task lists, et
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tag | string | yes | Resource tag, e.g. "Wiki Pages (Lite)", "Milestone Articles", "Tasks". Pass it verbatim — the case and spacing matter. |
| operationId | string | no | Optional: narrow to one operation. Operation IDs come from the spec; they appear in the per-tag detail response next to each operation summary. |
| name | string | no | Optional: narrow to one named example. Common names: "minimal", "full", "full-tiptap", "full-markdown". Names appear in the per-tag detail response under each operation's requestBody.examples. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Find wiki PAGES by title/keyword in the current workspace. Returns a list of matching pages (slug, title, spaceKey, spaceName, excerpt, status, updatedAt) — no UUIDs, no full body. Use this to LOCATE or LIST pages (then call wiki_get_page to read one). To ANSWER a question FROM wiki content — i.e. get back quotable passages with citations and relevance scores — use wiki_retrieve instead. Optionall
| Parameter | Type | Required | Notes |
|---|---|---|---|
| q | string | yes | Search query string |
| spaceKey | string | no | Optional: restrict search to one space |
| limit | integer | no | Max results (default 20) |
| mode | string | no | Ranking mode (default hybrid): keyword = legacy full-text only, semantic = embeddings only, hybrid = both combined. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Search the wiki by MEANING and get back the most relevant PASSAGES (chunks) with citations and relevance scores. Use this to GROUND or ANSWER a question from wiki content: it returns quotable chunkText plus the source page/section so you can cite it. Each result has pageSlug, pageTitle, spaceKey, spaceName, chunkIndex, headingPath (heading-path breadcrumb), chunkText, score (0..1, higher = more re
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Natural-language question or topic to retrieve passages for |
| spaceKey | string | no | Optional: restrict retrieval to one space |
| limit | integer | no | Max chunks to return (default 5) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List wiki pages in a space. Without parent returns root-level pages; pass a parent slug to list that page's children. Response items have slug, title, status, type (page|folder), parentSlug, updatedAt — no bodies. Page results include webUrl: a browser link requiring normal workspace access. Use it for citations; it does not make the page public. API-key scope: wiki:pages:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | Space key (from list_spaces) |
| parent | string | no | Optional parent page slug |
| limit | integer | no | Max results (default 100, max 500) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Get a wiki page by slug within a space. Default format is Markdown (the body is returned under the markdown field); pass format="tiptap" for raw ProseMirror JSON. Page results include webUrl: a browser link requiring normal workspace access. Use it for citations; it does not make the page public. API-key scope: wiki:pages:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | — |
| slug | string | yes | Page slug |
| format | string | no | Body format (default: markdown) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a wiki page under a space. Pass EITHER markdown (simpler, server converts to TipTap) OR content (TipTap/ProseMirror JSON, mutually exclusive with markdown). Use content when you need rich features that markdown can't express — banners, collapsibles, mermaid diagrams, action buttons, inline labels, mentions, code blocks with language, etc. For the full TipTap doc shape and a copy-frien
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | — |
| title | string | yes | — |
| markdown | string | no | Page body as Markdown. Mutually exclusive with content. |
| content | object | no | Page body as TipTap/ProseMirror JSON. Use for rich content that markdown doesn't support (banners, collapsibles, mermaid, action buttons, inline labels, mentions). Mutually exclusive with markdown. |
| parent | string | no | Optional parent page slug |
| icon | string | no | Optional icon/emoji (e.g. "rocket") |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Update an existing wiki page by slug. Any field left unset preserves the current value. Pass EITHER markdown OR content (TipTap/ProseMirror JSON) for the body — they're mutually exclusive. Use content for rich features (banners, collapsibles, mermaid, etc.); call get_endpoint_examples(tag="Wiki Pages (Lite)") for the full doc shape. Page results include webUrl: a browser link requiring norma
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | — |
| slug | string | yes | — |
| title | string | no | — |
| markdown | string | no | Replacement body as Markdown. Mutually exclusive with content. |
| content | object | no | Replacement body as TipTap/ProseMirror JSON. Mutually exclusive with markdown. Call get_endpoint_examples(tag="Wiki Pages (Lite)") for the full doc shape. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Move a wiki page to a new parent and/or a new space. All body fields are optional and use slugs (resolved server-side in the target space) instead of UUIDs: targetSpaceKey for cross-space moves (omit to stay in the current space); newParent is the slug of the new parent page (omit/null to move to space root); afterPage is the slug of the sibling page to insert after (omit/null to place first
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | Source space key |
| slug | string | yes | Slug of the page to move |
| targetSpaceKey | string | no | Optional target space key for cross-space moves |
| newParent | string/null | no | Optional new parent page slug (omit or null to move to space root) |
| afterPage | string/null | no | Optional sibling page slug to insert after (omit or null to place first) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Archive (soft-delete) or permanently delete a wiki page by slug. Falls through to the non-lite Wiki Pages API since there is no lite delete endpoint — path is DELETE /v1/workspaces/{workspaceIdentifier}/wiki/spaces/{spaceKey}/pages/{slug} with optional ?permanent=true. Default behavior archives the page (soft delete); pass permanent: true to hard-delete (requires admin access). Returns 204 o
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | — |
| slug | string | yes | Slug of the page to delete |
| permanent | boolean | no | If true, permanently deletes instead of archiving. Requires admin access. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Get the public SHARE-LINK status for a single page (PublicShareInfoDTO): isEnabled, publicToken, publicUrl (the shareable link), showAuthor, sharedAt, sharedBy, workspaceAllowsSharing. A per-page share link lets anyone with the URL read just that one page — distinct from publishing a whole space (wiki_set_public_settings). Requires edit access. API-key scope: wiki:pages:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | Uppercase space key |
| slug | string | yes | Page slug |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Enable a public SHARE LINK for a single page, returning a PublicShareInfoDTO with the publicUrl to hand out. Optional token sets a custom URL slug (3-100 chars, lowercase letters/digits/hyphens; 409 if already taken — omit to auto-generate). Optional showAuthor toggles author display. ⚠️ OUTWARD-FACING: anyone with the link can read this page — confirm with the user before enabling. Requires
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | Uppercase space key |
| slug | string | yes | Page slug |
| token | string | no | Optional custom URL token (3-100 chars, lowercase a-z, 0-9, hyphens). Omit to auto-generate. |
| showAuthor | boolean | no | Show the author on the public page |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Disable the public share link for a single page, revoking access via its URL (returns 204). Requires edit access. API-key scope: wiki:pages:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | Uppercase space key |
| slug | string | yes | Page slug |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List every wiki space the caller can see in the current workspace. Each entry has the space's key (use this in subsequent calls), name, description, effectivePermission (view/edit/admin), and canView/canEdit/canAdmin booleans for quick gating. Call this first when an agent needs to figure out which space a wiki action should target. API-key scope: wiki:spaces:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fetch a single wiki space by key. Returns the WikiSpaceDTO (id, key, name, description, icon, color, cover image, visibility flags, permissions, timestamps). For the page tree inside the space, use wiki_get_space_with_pages instead. API-key scope: wiki:spaces:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | Uppercase space key (e.g. "DOCS") |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fetch a wiki space AND its complete page tree in one call. Returns WikiSpaceWithPagesDTO — space metadata plus pages (a recursive tree of WikiPageTreeNodeDTO with slug, title, type=page|folder, hasChildren, children[], view count, top reactions, the caller's effectivePermission per node). Use this to render or traverse the whole space; for a single level (root or one parent's children) wiki_list
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | Uppercase space key |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a new wiki space in the current workspace. key is the unique short identifier used in URLs and subsequent API calls — uppercase letters + digits only, 2-20 chars, must start with a letter (e.g. "DOCS", "ENG2"). name is the human display name. Defaults: isPublic: true (INTERNAL visibility — all workspace members can view), isEditPublic: false. NOTE: isPublic is internal workspace v
| Parameter | Type | Required | Notes |
|---|---|---|---|
| key | string | yes | Uppercase alphanumeric key, 2-20 chars, must start with a letter |
| name | string | yes | Display name, max 200 chars |
| description | string | no | Optional description, max 2000 chars |
| isPublic | boolean | no | INTERNAL visibility — all workspace members can view (default true). NOT public-web publishing; use wiki_set_public_settings to publish. |
| isEditPublic | boolean | no | Editable by all workspace members (default false) |
| icon | string | no | Emoji name (e.g. "rocket") or "icon:<PhosphorName>" (e.g. "icon:BookOpen"). Valid names: GET /v1/custom-field-icon-options (emojiNames bare; iconNames with the "icon:" prefix). |
| iconColor | string | no | Icon color hex code (only for non-emoji icons) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Update a wiki space's metadata. All fields are optional — pass only what you want to change. The space key cannot be changed. Requires edit access to the space. API-key scope: wiki:spaces:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | Uppercase space key |
| name | string | no | New display name |
| description | string | no | New description |
| isPublic | boolean | no | INTERNAL visibility (workspace members). NOT public-web publishing — use wiki_set_public_settings. |
| isEditPublic | boolean | no | — |
| icon | string | no | Emoji name or "icon:<PhosphorName>". Valid names: GET /v1/custom-field-icon-options. |
| iconColor | string | no | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
PERMANENTLY delete a wiki space AND every page inside it. Requires admin access to the space. This is destructive — surface a clear confirmation to the user before calling. Returns 204. API-key scope: wiki:spaces:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | Uppercase space key |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Get a space's PUBLIC-WEB publishing settings (PublicSpaceSettingsDTO): isEnabled (is the space published to the public internet), customSlug (public URL slug), allowedEmojis, showReactions, showPageViews, showLastUpdated, showAuthor, viewMode ("space"|"helpcenter"), heroTitle, heroSubtitle. This is SEPARATE from the space's isPublic flag, which is internal workspace visibilit
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | Uppercase space key |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Check whether a public URL slug is available and validly formatted for a space, before publishing. Returns a SlugAvailabilityDTO. Call this when choosing a customSlug for wiki_set_public_settings. Requires space admin. API-key scope: wiki:spaces:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | Uppercase space key |
| slug | string | yes | Candidate public slug (e.g. "my-docs") |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Publish / unpublish a space to the PUBLIC INTERNET, or update its public-site config. This is the REAL publish switch — NOT the space isPublic flag (which is internal visibility). Pass only the fields you want to change: isEnabled (true = publish to the web, false = take offline), customSlug (public URL slug — validate first with wiki_check_public_slug), allowedEmojis (string[]), `showReac
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceKey | string | yes | Uppercase space key |
| isEnabled | boolean | no | Publish (true) / unpublish (false) the space to the public web |
| customSlug | string | no | Public URL slug (validate with wiki_check_public_slug first) |
| allowedEmojis | array | no | Reaction emojis readers may use; omit = leave unchanged |
| showReactions | boolean | no | — |
| showPageViews | boolean | no | — |
| showLastUpdated | boolean | no | — |
| showAuthor | boolean | no | — |
| viewMode | string | no | "space" (default) or "helpcenter" |
| heroTitle | string | no | Help-center hero title (max 150 chars) |
| heroSubtitle | string | no | Help-center hero subtitle (max 250 chars) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List every attachment on a wiki page (WikiAttachmentDTO[]): id, pageId, filename, contentType, sizeBytes, status (pending|confirmed|failed), uploadedBy/At, confirmedAt. pageId is the page UUID (from wiki_get_space_with_pages tree node id, not the slug). Use to find an attachmentId to reference or delete. API-key scope: wiki:attachments:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pageId | string | yes | Page UUID (tree node id from wiki_get_space_with_pages) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Step 1 of uploading an image/file to a wiki page. Returns { attachmentId, uploadUrl, storageKey }. AFTER calling this you MUST: (2) PUT the raw file bytes to uploadUrl with your OWN HTTP client — the MCP server cannot do this binary upload — sending the EXACT same Content-Type as contentType and a Content-Length equal to sizeBytes (both are baked into the presigned URL; a mismatch 403s);
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pageId | string | yes | Page UUID (tree node id from wiki_get_space_with_pages) |
| filename | string | yes | Original filename, e.g. "diagram.png" |
| contentType | string | yes | MIME type, e.g. "image/png" — must match the PUT Content-Type exactly |
| sizeBytes | integer | yes | Exact file size in bytes — must match the PUT Content-Length exactly |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Step 3 of uploading: confirm that the bytes were successfully PUT to the presigned uploadUrl, activating the attachment. Returns the WikiAttachmentDTO (status becomes "confirmed"). Call only after the byte PUT succeeded. API-key scope: wiki:attachments:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pageId | string | yes | Page UUID |
| attachmentId | string | yes | Attachment UUID from wiki_request_attachment_upload |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Permanently delete an attachment and its stored file (returns 204). Useful for cleaning up unused or leftover uploads. This does not remove image nodes that still reference it in a page body — update the page content separately if needed. API-key scope: wiki:attachments:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pageId | string | yes | Page UUID |
| attachmentId | string | yes | Attachment UUID to delete |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List feature requests on a feedback board (by board slug). Filter by status / category / milestone name (lenient — trimmed + case-insensitive). Pass q to search request titles instead. Paginated via page/size. API-key scope: feedback:requests:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| boardSlug | string | yes | Board slug (from list_boards) |
| status | string | no | Status name filter (e.g. "In Progress") |
| category | string | no | — |
| milestone | string | no | — |
| q | string | no | Title search query (ignores other filters when set) |
| page | integer | no | Zero-based page number (default 0) |
| size | integer | no | Page size (default 20, max 200) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Get a feature request by short ID (e.g. "FR-42"). Returns full detail: title, description, status, category, milestone, voteCount, commentCount, reactions. Internal notes and linkedTaskIds are populated only when the caller has View Internal Data permission. API-key scope: feedback:requests:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | Short ID like "FR-42" |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a new feature request on a board. Category is resolved by name (lenient match). No turnstile token required — API-key authentication is sufficient. Returns the new request with assigned shortId. API-key scope: feedback:requests:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| boardSlug | string | yes | — |
| title | string | yes | — |
| description | string | no | Plain text or markdown body |
| category | string | no | Optional category name |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Change a feature request's status by name. The name is resolved leniently against the request's board's status set (trim + case-insensitive). Returns the updated request detail. API-key scope: feedback:requests:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | — |
| status | string | yes | Status name (e.g. "In Progress") |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Add a comment to a feature request. Pass isInternal=true to make the comment visible only to users with View Internal Data permission. API-key scope: feedback:comments:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | — |
| content | string | yes | Comment body |
| isInternal | boolean | no | Default: false |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Toggle a vote or emoji reaction on a feature request. Passing emoji=null or omitting the field registers a plain upvote. Calling the tool again with the same emoji removes the vote (idempotent toggle). API-key scope: feedback:votes:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | — |
| emoji | string | no | Optional emoji (e.g. "👍") |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Approve, reject, or mark a feature request as spam. Action is case-insensitive. Requires Manage Queue permission. API-key scope: feedback:moderation:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | — |
| action | string | yes | Moderation action |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Permanently delete a feature request. Requires Manage Queue permission. Returns 204 on success. This operation is irreversible — confirm with the user before calling unless the intent is unambiguous. API-key scope: feedback:requests:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List bug reports on a feedback board (by board slug). Filter by severity and/or status name (lenient match). API-key scope: feedback:bugs:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| boardSlug | string | yes | — |
| severity | string | no | Severity level name (lenient match) |
| status | string | no | Bug status name (lenient match) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Get a bug report by short ID (e.g. "BG-99"). Returns full detail: title, reproduction steps, expected/actual result, severity, status, product area, assignee, affectedCount, environment, comments count. Internal notes and linkedIssueUrl populated only for View Internal Data permission. API-key scope: feedback:bugs:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | Short ID like "BG-99" |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a new bug report on a board. Severity and productArea are resolved by name (lenient match). Environment is a free-form map (browser, OS, url, etc.). API-key scope: feedback:bugs:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| boardSlug | string | yes | — |
| title | string | yes | — |
| severity | string | no | Optional severity name |
| productArea | string | no | Optional product area name |
| stepsToReproduce | string | no | — |
| expectedResult | string | no | — |
| actualResult | string | no | — |
| environment | object | no | Free-form map: {browser, os, version, url, ...} |
| isSecurity | boolean | no | Default false. True forces the bug to private regardless of board visibility. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Change a bug status by name (lenient match against the board's bug-status set). API-key scope: feedback:bugs:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | — |
| status | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Assign or unassign a bug. Provide assigneeEmail (resolved case-insensitive against workspace members) OR assigneeId (UUID). Exactly one; both = 400. Passing neither unassigns. API-key scope: feedback:bugs:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | — |
| assigneeEmail | string | no | — |
| assigneeId | string | no | User UUID |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Toggle a bug's public visibility. Security bugs stay private regardless. API-key scope: feedback:bugs:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | — |
| isPublic | boolean | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Toggle the caller's "I'm affected" marker on a bug. Returns the updated bug detail with new affectedCount. API-key scope: feedback:bugs:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Add a comment to a bug report. Pass isInternal=true for internal-only. API-key scope: feedback:comments:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | — |
| content | string | yes | — |
| isInternal | boolean | no | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Approve, reject, or mark a bug as spam. Action is case-insensitive. Requires Manage Queue permission. API-key scope: feedback:moderation:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | — |
| action | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Permanently delete a bug report. Requires Manage Queue permission. Irreversible. API-key scope: feedback:bugs:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shortId | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Single-call workspace orientation: members, spaces (with folders, lists, per-list statuses/priorities/taskTypes/customFields), workspace-level taskTypes, relationshipTypes, tags. The biggest agent-onboarding tool — call it first when starting in a new workspace. Folders nest at any depth: every folder has its own lists and its sub-folders in folders (same shape), so walk folders recursively
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shallow | boolean | no | Skip per-list statuses/priorities (faster) |
| space | string | no | Narrow to one space by name (exact match) |
| includeCustomFields | boolean | no | Default true |
| includeTaskTypes | boolean | no | Default true |
| includeRelationshipTypes | boolean | no | Default true |
| includeTags | boolean | no | Default true |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Get aggregated counts and breakdowns (status / priority / assignee distributions, custom-field summaries) for any scope. Useful for "how is project X doing?" questions without paginating through tasks. API-key scope: dashboards:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| scope | string | yes | — |
| scopeIdentifier | string | no | UUID of space/folder/list (omitted for workspace) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Search tasks across the workspace with name-based filters. status / priority / tag / taskType are repeatable (pass an array). assignee is an email or UUID. q is a free-text search over title + description. Returns a cursor-paginated page of LiteTaskResponse — pass nextCursor back as cursor to paginate. Present title linked to webUrl; show displayKey only when non-empty. key and identifier are AP
| Parameter | Type | Required | Notes |
|---|---|---|---|
| status | array | no | Status names (OR) |
| priority | array | no | Priority names (OR) |
| tag | array | no | Tag names (OR) |
| taskType | array | no | Task type names (OR) |
| assignee | array | no | Assignee emails or UUIDs (OR) |
| parent | string | no | Direct children of this task (key or identifier) |
| q | string | no | Free-text search over title + description |
| space | string | no | Narrow to one space by name |
| listIdentifier | string | no | Narrow to one list by its identifier (lst_…) |
| includeSubtasks | boolean | no | Default true |
| includeClosed | boolean | no | Default false |
| limit | integer | no | Default 50, max 200 |
| cursor | string | no | Opaque cursor from a previous response |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fetch a task by ref. Ref accepts a system identifier (tsk_…) OR a task key (e.g. 'PROJ-42'). Returns LiteTaskResponse with names instead of UUIDs and emails instead of user UUIDs. Internal note: when ref is a task key the workspace query param is required — the MCP injects it automatically. Present title linked to webUrl; show displayKey only when non-empty. Do not display the raw key when display
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ref | string | yes | Task key (PROJ-42) or identifier (tsk_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List the direct subtasks (one level deep) of a parent task by ref. API-key scope: tasks:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ref | string | yes | Parent task key or identifier |
| limit | integer | no | — |
| cursor | string | no | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a task. In the result, title/webUrl are for presentation; displayKey is the optional visible key. Keep key/identifier for API calls and do not expose a hidden raw key in the summary. References are name-based: status/priority/level/taskType are names; assignees are emails; tags are strings (auto-created if missing); customFields is a {name: value} map. list is the task-list identifier (tl
| Parameter | Type | Required | Notes |
|---|---|---|---|
| list | string | no | Task-list identifier (tl_…); omit if parent is set |
| title | string | yes | — |
| description | string | no | — |
| parent | string | no | Parent task key or identifier (for subtasks) |
| nextTo | string | no | Task key/identifier to position next to |
| status | string | no | Status name (e.g. "In Progress") |
| priority | string | no | — |
| level | string | no | — |
| taskType | string | no | — |
| tags | array | no | — |
| assignees | array | no | Emails |
| customFields | object | no | {fieldName: value}. Include every field the list marks mandatory (isMandatory, see pm_get_workspace_context) — a missing required field is rejected with a 400 VALIDATION_ERROR (details.field = field d |
| startDate | string | no | ISO-8601 datetime |
| dueDate | string | no | ISO-8601 datetime |
| estimatedTime | integer | no | Minutes |
| isPrivate | boolean | no | — |
| recurrenceRule | string | no | iCal RRULE string |
| idempotencyKey | string | no | Optional. Pass a UUID to dedupe retries within a 5-minute window. The same key inside the window returns 409 DUPLICATE_REQUEST regardless of body — query by name/identifier to find what was created on |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Partial-update a task by ref. Only fields present in the call are changed. Pass an explicit null to clear nullable fields (dueDate, parent, taskType, etc.). Names resolve leniently against the current effective set. To change just the type and nothing else, prefer this with taskType set; use pm_bulk_change_task_type when changing many tasks at once. API-key scope: tasks:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ref | string | yes | Task key or identifier |
| title | string | no | — |
| description | string/null | no | — |
| list | string/null | no | Move to another list |
| parent | string/null | no | Re-parent (or null to detach) |
| nextTo | string/null | no | — |
| status | string | no | — |
| priority | string/null | no | — |
| level | string/null | no | — |
| taskType | string/null | no | Task type name (e.g. "Bug"); pass null to clear and make the task untyped |
| tags | array | no | — |
| assignees | array | no | — |
| customFields | object | no | — |
| startDate | string/null | no | — |
| dueDate | string/null | no | — |
| estimatedTime | integer/null | no | — |
| timeSpent | integer/null | no | Minutes |
| isPrivate | boolean | no | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Delete a task by ref. Cascade-deletes subtasks. Requires FULL access (not just EDIT). Returns 204 on success. API-key scope: tasks:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ref | string | yes | Task key or identifier |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Return the workspace task-type catalogue (identifier, name, singularName, pluralName, iconKind, iconValue, color, sortOrder, origin SYSTEM/CUSTOM). Use this to discover what types are available before creating/updating tasks, or to translate names to stable identifiers for the cascade-default endpoints. API-key scope: workspaces:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Change the task type for many tasks at once (≤5000 per call). taskIdentifiers are stable wire identifiers (e.g. tsk_…) — task keys (PROJ-42) are NOT accepted here; use pm_search_tasks first if you only have keys. taskType is a name (e.g. "Bug") or null to clear the type. Returns 200 sync for ≤500 tasks; 202 with a {jobId, statusUrl} for larger batches — poll the statusUrl for completion. API-k
| Parameter | Type | Required | Notes |
|---|---|---|---|
| taskIdentifiers | array | yes | Stable task identifiers (tsk_…); 1 to 5000 entries |
| taskType | string/null | yes | Target task type name (resolved against the workspace catalogue), or null to clear the type on all listed tasks |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List comments on a task by ref. Cursor-paginated. API-key scope: tasks:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ref | string | yes | — |
| limit | integer | no | — |
| cursor | string | no | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Add a comment to a task. mentions is an array of emails — the server resolves them to user UUIDs and substitutes @<email> literals in text with mention spans. Pass replyTo (a comment identifier) to thread. API-key scope: tasks:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ref | string | yes | — |
| text | string | yes | Comment body (plain text) |
| mentions | array | no | Emails to @-mention (server resolves to UUIDs) |
| replyTo | string | no | Parent comment identifier (cmt_…) for threaded replies |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Update an existing comment. Only the original author may edit. API-key scope: tasks:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ref | string | yes | Owning task key or identifier |
| commentIdentifier | string | yes | Comment identifier (cmt_…) |
| text | string | yes | — |
| mentions | array | no | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Delete a comment. Only the original author may delete. Returns 204. API-key scope: tasks:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ref | string | yes | — |
| commentIdentifier | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List all relationships where the task is owner OR child. Cursor-paginated. API-key scope: tasks:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ref | string | yes | — |
| limit | integer | no | — |
| cursor | string | no | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a relationship from one task to another. type is the relationship-type name in the workspace (e.g. "Blocking"). target is a task key or identifier. The current task (ref) is the owner. API-key scope: tasks:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ref | string | yes | Owner task key or identifier |
| type | string | yes | Relationship type name |
| target | string | yes | Target task key or identifier |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Delete a relationship by identifier. Returns 204. API-key scope: tasks:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ref | string | yes | Owner task key or identifier |
| relationshipIdentifier | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a new space in the current workspace. Description / icon / color / isPrivate are optional metadata. Returns LiteSpaceResponse. API-key scope: spaces:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| description | string | no | — |
| icon | string | no | Emoji or icon name |
| color | string | no | Hex color code |
| isPrivate | boolean | no | — |
| idempotencyKey | string | no | Optional. Pass a UUID to dedupe retries within a 5-minute window. The same key inside the window returns 409 DUPLICATE_REQUEST regardless of body — query by name/identifier to find what was created on |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a folder inside a space. Space identified by name. API-key scope: folders:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| space | string | yes | Space name |
| name | string | yes | Folder name |
| idempotencyKey | string | no | Optional. Pass a UUID to dedupe retries within a 5-minute window. The same key inside the window returns 409 DUPLICATE_REQUEST regardless of body — query by name/identifier to find what was created on |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Update folder metadata by identifier (fld_…). All fields optional. API-key scope: folders:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Folder identifier (fld_…) |
| name | string | no | — |
| description | string | no | — |
| icon | string | no | — |
| color | string | no | — |
| isPrivate | boolean | no | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Soft-delete a folder and its child lists+tasks. Requires FULL access. 204. API-key scope: folders:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a task list inside a space (optionally inside a folder). Space and folder are identified by name. Omit folder to create the list directly under the space. Prefer setting icon and color on create when the list purpose is known. For icon, prefer a semantic emoji name first; use an icon identifier only when no emoji fits. List setup is not finished after this call: unless the user requested a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| space | string | yes | Space name |
| folder | string | no | Optional folder name |
| name | string | yes | List name |
| icon | string | no | Optional list icon. Prefer semantic emoji names first (rocket, fire, direct_hit, white_check_mark, pushpin, moneybag); use icon identifiers only when no emoji fits. |
| color | string | no | Optional list color, usually a hex color |
| idempotencyKey | string | no | Optional. Pass a UUID to dedupe retries within a 5-minute window. The same key inside the window returns 409 DUPLICATE_REQUEST regardless of body — query by name/identifier to find what was created on |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Update list metadata by identifier (tl_…). All fields optional. API-key scope: lists:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | — |
| name | string | no | — |
| description | string | no | — |
| icon | string | no | — |
| color | string | no | — |
| isPrivate | boolean | no | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Soft-delete a list and its tasks. Requires FULL access. 204. API-key scope: lists:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a custom field at workspace / space / list scope. scope=workspace ignores scopeName; scope=space takes a space name; scope=list takes a list name (first match in the workspace). For dropdown / labels (multi-select) types, pass options as an array of {value, color?, emoji?, orderIndex?}. Keep field names plain for column headers; set semantic emoji/color metadata for visual icons, using su
| Parameter | Type | Required | Notes |
|---|---|---|---|
| scope | string | yes | — |
| scopeName | string | no | Space or list name (omitted for workspace scope) |
| name | string | yes | Plain custom-field display name. Do not prefix names with emoji for icons. |
| type | string | yes | Field type — text, number, date, checkbox, dropdown, labels, url, email, phone, etc. |
| emoji | string | no | Optional icon-picker key for the field icon. Query /v1/custom-field-icon-options for supported keys. Prefer semantically matching emojiNames when available (e.g. severity=fire, target=direct_hit, laun |
| color | string | no | Optional hex color code for the field icon |
| options | array | no | For dropdown/labels types only |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Update custom-field metadata (name / description / emoji / color / isPrivate). API-key scope: custom_fields:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Custom field identifier (cf_…) |
| name | string | no | — |
| description | string | no | — |
| emoji | string | no | — |
| color | string | no | — |
| isPrivate | boolean | no | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Delete a custom field and all its values. Requires FULL access. 204. API-key scope: custom_fields:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List views at a given scope. scope is one of workspace/space/folder/list; scopeIdentifier is the UUID of the parent entity (omit for workspace scope — the MCP's configured workspace is used). Cursor-paginated. API-key scope: views:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| scope | string | yes | — |
| scopeIdentifier | string | no | UUID of space/folder/list (omitted for workspace scope) |
| limit | integer | no | — |
| cursor | string | no | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fetch a view by identifier (vw_…). API-key scope: views:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a view. type is one of list / board / table / dashboard / gantt / calendar / gallery. For a newly created list, prefer configuring its auto-created primary view with pm_update_view; add another view only for a distinct workflow. ALWAYS pass columns listing exactly what should be visible, in display order, INCLUDING every custom field you want shown — a view created without columns falls
| Parameter | Type | Required | Notes |
|---|---|---|---|
| scope | string | yes | — |
| scopeIdentifier | string | no | — |
| name | string | yes | — |
| type | string | yes | — |
| isPrivate | boolean | no | — |
| groupBy | string | no | Field name to group by (status, priority, etc.) |
| sortBy | string | no | — |
| sortDirection | string | no | — |
| filters | array | no | Optional filter groups (FilterGroupDTO shape). |
| columns | array | no | Visible columns in display order — strongly recommended on every create. Each item should include columnIdentifier, isMandatory, and optional fixed. Include every custom field you want viewable; omitt |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Update a view, including the auto-created primary List view when finishing list setup. Configure useful column order, grouping, and sorting instead of leaving a defaults-only view. filters / columns use FilterGroupDTO / ColumnOrderItem shapes. Sending columns replaces the entire selection/order: include every native and custom field that should remain visible. Use raw custom-field identifiers from
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | — |
| name | string | no | — |
| isPrivate | boolean | no | — |
| groupBy | string | no | — |
| sortBy | string | no | — |
| sortDirection | string | no | — |
| filters | array | no | Filter groups (FilterGroupDTO shape) |
| columns | array | no | Column order items |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Delete a view by identifier. Mandatory views (system-created defaults) return 409 Conflict. Returns 204 on success. API-key scope: views:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Clone an existing view into a (possibly different) scope. Requires VIEW on the source and EDIT on the target scope. API-key scope: views:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Source view identifier |
| scope | string | yes | — |
| scopeIdentifier | string | no | — |
| name | string | no | Optional new name (defaults to "<source> (copy)") |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List all sprint groups in a space. Sprint groups are containers for sprints — each group has its own state machine (only one IN_PROGRESS sprint per group). Returns an array of SprintGroupDTO. API-key scope: sprints:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceIdentifier | string | yes | Space identifier (spc_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a sprint group inside a space. name is required (max 100 chars). description is optional (max 2000 chars). defaultDurationDays is the default sprint length used when creating new sprints (1–90 days, optional). API-key scope: sprints:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceIdentifier | string | yes | Space identifier (spc_…) |
| name | string | yes | Sprint group name (max 100 chars) |
| description | string | no | Optional description (max 2000 chars) |
| defaultDurationDays | integer | no | Default sprint duration in days (1–90) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a sprint inside a sprint group. New sprints start in NOT_STARTED state. name required (max 200 chars). goal, startDate, endDate optional (ISO-8601 instants for dates). API-key scope: sprints:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| groupIdentifier | string | yes | Sprint group identifier |
| name | string | yes | — |
| goal | string | no | Sprint goal (max 5000 chars) |
| startDate | string | no | ISO-8601 instant, e.g. 2026-04-14T00:00:00Z |
| endDate | string | no | ISO-8601 instant |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fetch a sprint by identifier. Returns SprintDTO with task statistics. API-key scope: sprints:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sprintIdentifier | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Full update of sprint name, goal, and date window. NOTE: this is a PUT, not a PATCH — fields you omit may be cleared by the backend. Pass every field you want to keep. API-key scope: sprints:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sprintIdentifier | string | yes | — |
| name | string | no | Max 200 chars |
| goal | string | no | Max 5000 chars |
| startDate | string | no | ISO-8601 instant |
| endDate | string | no | ISO-8601 instant |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Soft-delete a sprint. Tasks lose their sprint association but remain in their lists. 204 on success. API-key scope: sprints:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sprintIdentifier | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Transition a sprint from NOT_STARTED to IN_PROGRESS. Only ONE sprint per group can be IN_PROGRESS at a time — starting a sprint while another is in progress will fail. No body. API-key scope: sprints:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sprintIdentifier | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Transition a sprint from IN_PROGRESS to DONE. Optionally pass rolloverSprintIdentifier to move incomplete tasks into a different sprint (typically the next one in the group). Omit the field to leave incomplete tasks unsorted (no rollover). API-key scope: sprints:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sprintIdentifier | string | yes | — |
| rolloverSprintIdentifier | string | no | Optional. Identifier of the sprint to roll over incomplete tasks to. Omit/null to skip rollover. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Associate tasks with a sprint. All tasks must belong to the same space as the sprint group. Pass identifiers (tsk_…), not task keys. Returns updated SprintDTO. API-key scope: sprints:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sprintIdentifier | string | yes | — |
| taskIdentifiers | array | yes | Task identifiers (tsk_…); 1+ required |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Remove task-sprint associations. Tasks remain in their lists. Pass identifiers (tsk_…), not task keys. Returns updated SprintDTO. API-key scope: sprints:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sprintIdentifier | string | yes | — |
| taskIdentifiers | array | yes | Task identifiers (tsk_…); 1+ required |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List all tasks currently in the sprint. Returns an array of full TaskDTO. API-key scope: sprints:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sprintIdentifier | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Return burndown/burnup chart data for the sprint — daily snapshots of remaining vs completed work. Use this to render burndown charts or audit sprint progress over time. API-key scope: sprints:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sprintIdentifier | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create an outgoing webhook subscription for the current workspace. Every delivery is signed with HMAC-SHA256 of the raw body using the webhook secret, sent as X-Webhook-Signature-256: sha256=<hex>. Pass your own secret, or omit it and this tool generates one and returns it as secret in the result. SAVE THE SECRET IMMEDIATELY: pm_get_webhook / pm_list_webhooks never return it; to rotate it, p
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | yes | Public HTTPS endpoint that will receive POSTs |
| name | string | no | Human-readable label for the webhook |
| secret | string | no | Optional HMAC signing secret; omit it to get a generated one, returned once |
| eventTypes | array | yes | Event names from pm_list_webhook_event_types, e.g. ["task-created", "wiki.page.published", "feedback.request.created"] |
| scopeType | string | no | Optional scope narrowing; requires scopeEntityIdentifier when set |
| scopeEntityIdentifier | string | no | The scoped entity: its identifier, a wiki space key, a board slug or id, or a request/bug short key (required when scopeType is set; requires scopeType) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List webhook subscriptions in the current workspace. By default only the webhooks the caller created are listed; pass all: true to list every webhook in the workspace (needs the MANAGE_WEBHOOKS permission, else 403). The HMAC secret is NOT included. Pass url to return only the webhooks whose URL matches it exactly. Each entry reports scopeType, scopeEntityIdentifier, scopeEntityName and incl
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | no | Optional exact-match URL filter |
| all | boolean | no | List every webhook in the workspace, not only the caller's (needs MANAGE_WEBHOOKS) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List every event type a webhook can subscribe to, across Project Management, the wiki (Codexum) and feature requests (Roadmarq). Returns [{type, product ("pm" | "codexum" | "roadmarq"), description, scopes}], where scopes are the scopeType values the type can be narrowed by. Use it to pick eventTypes for pm_create_webhook instead of guessing. API-key scope: webhooks:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Report webhook quota for the current workspace: { userManaged, agentManaged, total, max }. total is the count of active subscriptions and max is the per-workspace cap; agentManaged is the subset created via API keys (like this MCP). Check this before calling pm_create_webhook in bulk — creation fails once total reaches max. API-key scope: webhooks:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fetch a single webhook by identifier. Returns its url / name / eventTypes / scope / active flag; does NOT return the HMAC secret (only available at creation time). API-key scope: webhooks:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| webhookIdentifier | string | yes | Webhook identifier |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Partial-update a webhook subscription. Only fields present in the call are changed (pass-through PATCH-style semantics). Use active: false to pause deliveries without deleting. Updating eventTypes replaces the full subscribed set. Pass secret to rotate the HMAC signing secret: it is stored exactly as given and never returned, so keep your copy. Resuming (active: true) re-checks the stored UR
| Parameter | Type | Required | Notes |
|---|---|---|---|
| webhookIdentifier | string | yes | Webhook identifier |
| url | string | no | — |
| name | string | no | — |
| secret | string | no | New HMAC signing secret (rotation); must not be blank; sent unchanged, never returned |
| eventTypes | array | no | Replacement event-type list (see pm_list_webhook_event_types) |
| active | boolean | no | Toggle delivery on/off without deleting |
| scopeType | string | no | New scope; requires scopeEntityIdentifier when set |
| scopeEntityIdentifier | string | no | The scoped entity: its identifier, a wiki space key, a board slug or id, or a request/bug short key (required when scopeType is set; requires scopeType) |
| clearScope | boolean | no | true removes the scope (workspace-wide delivery); not with scopeType |
| includeSecurityBugs | boolean | no | Feature requests: also deliver security bugs. Omit to keep the current value; an API key can only turn it off |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Delete a webhook subscription permanently. Stops all future deliveries. Returns 204. The HMAC secret cannot be recovered — recreate the webhook to get a new one. API-key scope: webhooks:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| webhookIdentifier | string | yes | Webhook identifier |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fire a synthetic test delivery to a webhook on demand, without waiting for a real workspace event. PM POSTs a webhook-test event with body {"test": true, "message": "This is a test webhook delivery"} to the registered URL, signed with the same X-Webhook-Signature-256 HMAC as live deliveries. Use this to verify a receiver is reachable and that your HMAC signature-verification is correct when sett
| Parameter | Type | Required | Notes |
|---|---|---|---|
| webhookIdentifier | string | yes | Webhook identifier |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List recent delivery attempts for a webhook (most recent first). Each entry includes the event type, response status, attempt count, and timestamps. Useful for diagnosing why a subscriber is missing events. Pagination uses cursor (or page) and size (max 100, default backend-defined). API-key scope: webhooks:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| webhookIdentifier | string | yes | Webhook identifier |
| cursor | string | no | Opaque cursor / page token from a previous response |
| size | integer | no | Page size (max 100) |
| limit | integer | no | Alias for size (max 100) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Re-send a specific past delivery to the webhook URL. Useful when the subscriber was down during the original attempt window or you need to re-trigger downstream processing. A replay re-sends the stored payload bytes, so it keeps the original envelope id and eventId: subscribers MUST treat a repeated eventId as a duplicate. The X-Webhook-Delivery header carries the new delivery id of the replay
| Parameter | Type | Required | Notes |
|---|---|---|---|
| webhookIdentifier | string | yes | Webhook identifier |
| deliveryIdentifier | string | yes | Delivery (attempt) identifier to replay |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Read the activity log for a scope. scope selects the entity type and identifier is that entity's identifier (use the workspace identifier when scope=workspace). mode is either 'full' (this entity AND everything beneath it) or 'own' (this entity only). Cursor-paginated. WARNING: every entry has a data field that is a JSON-encoded STRING — to inspect the payload you must double-parse it (pa
| Parameter | Type | Required | Notes |
|---|---|---|---|
| scope | string | yes | — |
| identifier | string | yes | Entity identifier — workspace identifier when scope=workspace, otherwise the space/list/task identifier. |
| mode | string | no | Default 'full' |
| cursor | string | no | Opaque cursor from a previous response |
| size | integer | no | 1–100 |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List notifications for the current user in the active workspace. NOTE: this endpoint uses PAGE-style pagination (?page=&size=) not cursor-based — unusual for this API. page is 0-indexed; size is 1–100. Optional unreadOnly, sortColumn, sortDirection. API-key scope: notifications:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| unreadOnly | boolean | no | — |
| page | integer | no | 0-indexed page number |
| size | integer | no | 1–100 |
| sortColumn | string | no | — |
| sortDirection | string | no | e.g. 'asc' or 'desc' |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Return the bare unread-notification count (a Long) for the current user in the active workspace. The response body is a single number, not an object. API-key scope: notifications:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Mark a single notification as read. Only the notification owner may do this — calling with another user's notification identifier returns an error. API-key scope: notifications:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Notification identifier |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Mark every unread notification in the active workspace as read for the current user. API-key scope: notifications:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List time entries logged against a task. taskIdentifier must be a stable identifier (tsk_…), not a task key. Supports page/size/sortColumn/sortDirection (page-style). API-key scope: time:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| taskIdentifier | string | yes | Task identifier (tsk_…) |
| page | integer | no | — |
| size | integer | no | 1–100 |
| sortColumn | string | no | — |
| sortDirection | string | no | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Log a time entry against a task. timeSpent is in minutes (0 to 10080 — 7 days max). startedAt is an ISO-8601 instant marking when the tracked work started. notes is optional (max 10000 chars). The user is set server-side from the JWT — do NOT pass userUuid. API-key scope: time:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| taskIdentifier | string | yes | Task identifier (tsk_…) |
| timeSpent | integer | yes | Minutes spent (0–10080, max 7 days) |
| startedAt | string | no | ISO-8601 instant (e.g. 2026-04-14T09:00:00Z) |
| notes | string | no | Optional notes (max 10000 chars) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Delete a time entry from a task. NOTE: timeEntryId is a numeric Long (e.g. 42), NOT a slug/identifier. Returns 204 on success. API-key scope: time:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| taskIdentifier | string | yes | Task identifier (tsk_…) |
| timeEntryId | integer | yes | Numeric time-entry id (Long) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List the current user's saved filters for a list. Filters are USER-scoped — they are not visible to other workspace members. API-key scope: filters:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| listIdentifier | string | yes | List identifier (tl_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a new saved filter on a list. Body is a FilterAggregateDTO with structured filterGroups — each group has a precedingLogic (AND/OR) and a list of filters. Each filter has field, operator (one of: is, equals, not, not_equals, like, greater_than, less_than, greater_or_equal, less_or_equal, is_set, is_not_set, in, not_in), value, optional precedingLogic, and isCustomField flag. Ma
| Parameter | Type | Required | Notes |
|---|---|---|---|
| listIdentifier | string | yes | List identifier (tl_…) |
| name | string | no | Display name for the saved filter |
| filterGroups | array | yes | Filter groups (max 10) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Delete a saved filter you own. NOTE: id is a numeric Long (e.g. 42), NOT a slug. Only the owner may delete. Returns 204. There is NO endpoint to "apply" a saved filter — that is a UI affordance only. API-key scope: filters:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| listIdentifier | string | yes | List identifier (tl_…) |
| id | integer | yes | Numeric filter id (Long) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Add an emoji reaction to a task comment. reactionType is the emoji code (e.g. "thumbs_up", "heart", "smile"). Each user may add at most one reaction of each reactionType per comment. Requires COMMENT-level access on the task. API-key scope: tasks:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| taskIdentifier | string | yes | Task identifier (tsk_…) |
| commentIdentifier | string | yes | Comment identifier (cmt_…) |
| reactionType | string | yes | Emoji code, e.g. "thumbs_up", "heart" |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List reactions on a task comment. Page-style pagination (page/size). API-key scope: tasks:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| taskIdentifier | string | yes | Task identifier (tsk_…) |
| commentIdentifier | string | yes | Comment identifier (cmt_…) |
| page | integer | no | — |
| size | integer | no | 1–100 |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Remove a reaction by identifier. Only the user who added the reaction may remove it. 204. API-key scope: tasks:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| taskIdentifier | string | yes | Task identifier (tsk_…) |
| commentIdentifier | string | yes | Comment identifier (cmt_…) |
| reactionIdentifier | string | yes | Reaction identifier (react_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List a Dutify reference-data enum (status types, custom-field types, view types, automation action/condition types, access levels, etc.). Returns the authoritative set of values the backend accepts — call this BEFORE guessing enum strings on a create/update payload to avoid 400s. Categories: - custom-field-types: Custom-field type catalogue: text, number, dropdown, date, money, file, rollup, for
| Parameter | Type | Required | Notes |
|---|---|---|---|
| category | string | yes | Which reference-data enum to list. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Read a task's current public sharing settings. Returns the full TaskSharingSettingsDTO — shared (is the public link active), publicLink (the share URL when active), expiresAt, and per-field visibility toggles (shareAssignee, shareDescription, shareStatus, sharePriority, shareDueDate, shareComments, shareAttachments, shareCustomFields, shareSubtasks, shareTags) plus the explicit list of custo
| Parameter | Type | Required | Notes |
|---|---|---|---|
| taskIdentifier | string | yes | Task identifier (tsk_…) or short key (e.g. "PROJ-42") |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Enable, disable, or reconfigure public sharing for a task. Pass shared: true to generate a public link (or refresh the configuration); the response includes the resulting publicLink. Pass shared: false to revoke an existing share. All other fields are optional toggles for which slices of the task are visible to a public viewer. Requires FULL access to the task. API-key scope: tasks:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| taskIdentifier | string | yes | Task identifier (tsk_…) or short key |
| shared | boolean | no | true to publish, false to revoke |
| expiresAt | string | no | Optional ISO 8601 timestamp when the share link should auto-expire (e.g. "2026-12-31T23:59:59Z") |
| shareAssignee | boolean | no | Expose assignees on the public view |
| shareDescription | boolean | no | Expose task description |
| shareStatus | boolean | no | Expose current status |
| sharePriority | boolean | no | Expose priority |
| shareDueDate | boolean | no | Expose due date |
| shareComments | boolean | no | Expose comments |
| shareAttachments | boolean | no | Expose file attachments |
| shareCustomFields | boolean | no | Expose custom field values |
| sharedCustomFieldIdentifiers | array | no | Explicit allow-list of custom-field identifiers to expose (when shareCustomFields=true) |
| shareSubtasks | boolean | no | Expose subtasks |
| shareTags | boolean | no | Expose tags |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a new tag in a space. Tags are auto-created on first inline use (e.g. tags: ["urgent"] when creating a task via the Lite API), so use this only when you need to pre-create a tag with specific colors before applying it. Returns the persisted TagDTO with its identifier. API-key scope: tags:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceIdentifier | string | yes | Space identifier (sp_…) |
| name | string | yes | Display name (case-sensitive — duplicates rejected per space) |
| backgroundColor | string | no | Hex background color, e.g. "#3B82F6". Optional — server picks a default. |
| textColor | string | no | Hex foreground color, e.g. "#FFFFFF". Optional. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fetch a single tag by identifier. Returns the TagDTO (identifier, name, backgroundColor, textColor). API-key scope: tags:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Tag identifier (tag_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Rename or recolor an existing tag. All updatable fields are optional — pass only what you want to change. The tag identifier stays the same; any task already tagged keeps the new name and colors automatically. API-key scope: tags:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Tag identifier (tag_…) |
| name | string | no | New display name |
| backgroundColor | string | no | New hex background color |
| textColor | string | no | New hex foreground color |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Delete a tag. The tag is removed from every task that currently carries it; the tasks themselves are not affected. Returns 204. API-key scope: tags:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Tag identifier (tag_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List teams in the current workspace, paginated. Each team carries identifier, name, alias, description, icon, color, and member list. Use pagination if there are many teams. API-key scope: teams:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | Page index, 0-based. Default 0. |
| size | integer | no | Page size, 1–100. Default 20. |
| sortColumn | string | no | Optional sort column (name, createdAt, …) |
| sortDirection | string | no | Sort direction |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create a new team in the current workspace. Returns the persisted TeamDTO including its identifier. Requires the workspace MANAGE_TEAMS permission. API-key scope: teams:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Display name (max 100 chars) |
| alias | string | no | Short alias / @handle (max 100 chars) |
| description | string | no | Optional description (max 10000 chars) |
| icon | string | no | Icon identifier or emoji |
| color | string | no | Hex color, e.g. "#E91E63" |
| memberUuids | array | no | Initial members (user UUIDs). Optional — add members later via pm_add_team_member. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fetch a team by identifier. Returns the full TeamDTO with members. API-key scope: teams:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Team identifier (team_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Update a team's metadata or replace its full member list. All fields are optional — only specified fields change. NOTE: memberUuids, if present, REPLACES the existing membership (not appends). Use pm_add_team_member / pm_remove_team_member for incremental changes. Requires the workspace MANAGE_TEAMS permission. API-key scope: teams:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Team identifier (team_…) |
| name | string | no | Display name (max 100 chars) |
| alias | string | no | Short alias / @handle (max 100 chars) |
| description | string | no | Optional description (max 10000 chars) |
| icon | string | no | Icon identifier or emoji |
| color | string | no | Hex color, e.g. "#E91E63" |
| memberUuids | array | no | COMPLETE replacement list of member UUIDs. Omit to leave membership unchanged. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Delete a team. Removes the team and all of its grants — existing access controls that referenced this team are reduced accordingly. Returns 204. Requires the workspace MANAGE_TEAMS permission. API-key scope: teams:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Team identifier (team_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Add a single user to a team. Pass the user UUID (from pm_list_workspace_members). Idempotent — adding a user who is already a member is a no-op. Requires MANAGE_TEAMS. API-key scope: teams:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Team identifier (team_…) |
| userUuid | string | yes | User UUID to add |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Remove a single user from a team. Returns 204. Requires MANAGE_TEAMS. API-key scope: teams:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Team identifier (team_…) |
| userUuid | string | yes | User UUID to remove |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Get the profile of the human behind the API key — identifier, email, fullName, and the userSettings object. Use this when the agent needs to address the user by name, route a notification to the right preference channel, or confirm "whose API key am I holding". API-key scope: users:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Update the current user's profile. Today the request body has a single field (fullName) — pass the new display name. Returns the updated TaskManagementUserDTO. API-key scope: users:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| fullName | string | yes | New display name shown across the app |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Read the current user's aggregated notification settings — one tree covering every module (comments, mentions, assignments, due dates, automation events, …) and every delivery channel (app / browser / email). Use this to find out which channel is on for a given event before asking the user to flip a flag. API-key scope: users:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Enable or disable a single notification module/channel combination — e.g. email-off for due-date reminders. The module names come from pm_get_notification_settings. Pass enabled: true|false. To bulk-toggle all channels for a module, repeat this tool for each channel; there is no bulk endpoint. API-key scope: users:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| module | string | yes | Module identifier from the aggregated settings — e.g. 'comments', 'mentions', 'assignments', 'due_date', 'automation', 'invitation' |
| channel | string | yes | Delivery channel |
| enabled | boolean | yes | Turn the channel on (true) or off (false) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Return the avatar URL for a specific user in the current workspace. The response is a short-lived signed URL pointing at the user's avatar image — embed it in chat messages, mentions, or attribution UI. Returns null if the user has no avatar set. API-key scope: users:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| userUuid | string | yes | User UUID from pm_list_workspace_members |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List automations scoped to a specific list. Each row is an AutomationDTO with name, active, triggers, conditionNodes, actions, and the owning scope identifiers. API-key scope: automations:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| listIdentifier | string | yes | List identifier (tl_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List automations scoped to a folder. Automations attached at folder level cascade to every list inside that folder unless overridden at the list level. API-key scope: automations:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| folderIdentifier | string | yes | Folder identifier (fld_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List automations scoped to a space. Automations attached at space level cascade to every list and folder inside that space. API-key scope: automations:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spaceIdentifier | string | yes | Space identifier (sp_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fetch a single automation by identifier. Returns the full AutomationDTO including triggers, condition tree, and actions. API-key scope: automations:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Automation identifier (auto_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Create an automation rule. Exactly ONE scope must be set — listIdentifier OR folderIdentifier OR spaceIdentifier. triggers and actions are arrays; conditionNodes is the flattened condition tree (omit for "always-true"). All parameters fields on triggers/actions/conditions are JSON-encoded strings, not nested objects. Before crafting, call pm_list_reference_data to learn the valid act
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Display name (max 200 chars) |
| description | string | no | Optional description (max 2000 chars) |
| active | boolean | no | Start enabled or disabled. Default true on backend. |
| listIdentifier | string | no | Scope: a list (use exactly one of list/folder/space) |
| folderIdentifier | string | no | Scope: a folder |
| spaceIdentifier | string | no | Scope: a space |
| triggers | array | yes | One or more triggers (OR-ed) |
| actions | array | yes | Actions executed in order on trigger |
| conditionNodes | array | no | Optional flat condition tree (AND/OR groups + leaf predicates) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Update an existing automation. All fields except identifier are optional — only specified fields change. triggers, actions, and conditionNodes, when present, REPLACE the existing collection (not append). Use active: false to disable without deleting. API-key scope: automations:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Automation identifier (auto_…) |
| name | string | no | — |
| description | string | no | — |
| active | boolean | no | Enable / disable the rule |
| triggers | array | no | REPLACES existing triggers |
| actions | array | no | REPLACES existing actions |
| conditionNodes | array | no | REPLACES existing condition tree (omit to leave it untouched) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Delete an automation rule. Returns 204. Existing audit log rows are preserved. API-key scope: automations:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Automation identifier (auto_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fetch the execution audit log for an automation. Each row records a single firing — timestamp, triggering task, trigger type, overall execution status (SUCCESS/FAILED/IN_PROGRESS/ROLLED_BACK), and per-action audit detail. Use to debug "did my automation run?" — it is the authoritative answer; the UI does not currently show summary stats. API-key scope: automations:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identifier | string | yes | Automation identifier (auto_…) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List members of the current workspace. Workspace is taken from the MCP config — no need to pass it. RESPONSE IS A PAGINATED ENVELOPE, NOT AN ARRAY: {users: WorkspaceUserDTO[], totalCount, page, size, totalPages} — read members from users (treating the response itself as a list fails). FOOTGUN: size DEFAULTS TO 20 when omitted, so a single call silently returns only the first 20 members and no
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | 0-based page number |
| size | integer | no | Page size, 1–100. DEFAULTS TO 20 if omitted (silent truncation); >100 returns 400. |
| search | string | no | Case-insensitive substring on first name / last name / email; applied before paging, so totalCount reflects matches. |
| sortColumn | string | no | — |
| sortDirection | string | no | 'asc' or 'desc' |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Change a member's workspace access level. userUuid is the target user's UUID (NOT email — call pm_list_workspace_members first to find it). workspaceAccessLevelId is a numeric Long id from the workspace /access-levels catalogue (e.g. 1, 2, 3) — fetch it via the catalog meta tools or your existing endpoint introspection if you don't already have it. Caller needs MANAGE_USERS permission. Note:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| userUuid | string | yes | Target user UUID |
| workspaceAccessLevelId | integer | yes | Numeric access-level id (Long); list /v1/workspaces/{ws}/access-levels to discover |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Remove a member from the workspace. NOTE: the target user UUID is passed as the deletionUserUuid QUERY parameter, not in the path or body. Caller needs MANAGE_USERS permission. Cannot remove the workspace owner — transfer ownership first via pm_transfer_workspace_ownership. Returns 204. API-key scope: workspaces:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| deletionUserUuid | string | yes | UUID of the user to remove |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Transfer workspace ownership to another existing member. Only the current owner can do this, and the target user must already be a member. resultingOwnerAccessLevelId is the numeric access-level id the CURRENT (departing) owner will keep — typically a regular admin/member level. Discover access-level ids via /v1/workspaces/{ws}/access-levels. API-key scope: workspaces:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| transferToUserUuid | string | yes | UUID of the new owner (existing member) |
| resultingOwnerAccessLevelId | integer | yes | Numeric access-level id (Long) the previous owner will be assigned |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Voluntarily leave the current workspace. WARNING: this affects the calling user (the user identity behind the API key) — there is no parameter to pick a different user. The workspace owner cannot leave; they must transfer ownership first. After a successful leave the API key may stop working against this workspace. No body. API-key scope: workspaces:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List pending (not yet accepted, not expired) invitations for the current workspace. Caller needs MANAGE_USERS permission. Returns an array of InvitationDTO. API-key scope: users:read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Send an email invitation to join the current workspace. workspaceAccessLevelId is a numeric Long id (NOT a name like "admin"/"member") — fetch the catalogue from /v1/workspaces/{ws}/access-levels to translate role names to ids before calling. Caller needs MANAGE_USERS permission. Returns 201 on success. API-key scope: users:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| string | yes | Invitee email address | |
| workspaceAccessLevelId | integer | yes | Numeric access-level id (Long); list /v1/workspaces/{ws}/access-levels to discover |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Revoke a pending workspace invitation by its identifier. Caller needs MANAGE_USERS permission. Returns 204. API-key scope: users:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| invitationIdentifier | string | yes | Invitation identifier |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List CSV import jobs for the current workspace, paginated. The actual CSV upload endpoints (/csv and /csv/preview) are multipart/form-data and are not exposed by the MCP — agents that want to start a fresh import must upload via a non-MCP client and then come back here with the returned jobIdentifier. API-key scope: imports:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | 0-indexed page (default 0) |
| pageSize | integer | no | Page size (default 20) |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fetch the current status and progress of a CSV import job by identifier. Use this to poll a job that another client started via /csv or /csv/preview. API-key scope: imports:write.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| jobIdentifier | string | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Confirm column mappings for a previewed CSV import job and start async import processing. Call this AFTER another (non-MCP) client has uploaded the CSV via /csv/preview and produced a job in PREVIEW status. columnMappings is a non-empty array of objects with: csvHeader (exact CSV column name), targetField (e.g. 'title', 'status', or a custom field identifier), and targetType ('builtin' or 'custo
| Parameter | Type | Required | Notes |
|---|---|---|---|
| jobIdentifier | string | yes | — |
| columnMappings | array | yes | — |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Orientation/meta tool: return the canonical REST paths and field shapes for managing the Status, Priority, and Task-Level catalogues at each scope (workspace / space / folder / list). Call this ONCE before reaching for endpoint-example tools — it cuts a 30-tool surface down to a single readable map. The agent can then use the catalog tools (e.g. get_endpoint_examples) to fetch real request/respo
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Get details for the selected workspace (or the workspace bound to a workspace key) (the one this API key was provisioned for). Hub does not currently expose a single-workspace GET, so this returns the matching entry from the user's workspaces list. Requires workspaces:read scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List all members of the selected workspace (or the workspace bound to a workspace key). Each entry includes user UUID, email, name, role, and join timestamp. Useful for "tag this person", "summarize who said what in the last call", etc. Requires members:read scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Get the workspace's custom prompt — house-style instructions that, together with each participant's own per-call prompt, notes and note template, form the instruction set their version of the summary, key points, action items and enhanced notes is generated from (task generation too). Returns { customPrompt: string | null }. Requires workspace-settings:read scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Update the workspace's custom prompt. Pass null or empty string to clear it. Takes effect on the next recording processed, or on hub_regenerate_summary for an existing one; existing recordings are not re-analysed automatically. Requires workspace-settings:write scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| customPrompt | string/null | yes | New prompt text. Pass null to remove the workspace prompt entirely. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Get the workspace's preferred integration target — which task system new actions are routed to by default (Jira, ClickUp, Airtable, PM, etc.). Requires workspace-settings:read scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Set the workspace's preferred integration target. The value should be the integration system name returned by hub_list_integrations (e.g. "JIRA", "CLICKUP", "AIRTABLE", "PM"). Requires workspace-settings:write scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| preferredIntegration | string | yes | IntegrationSystem name as returned by hub_list_integrations. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Get the user's "default workspace" — where new calendar events without an explicit assignment get routed. Returns { workspaceId: uuid | null }. Requires user-settings:read scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Set the user's "default workspace" to the workspace this API key is bound to (future calendar events without an explicit workspace will route here). To clear the default entirely, pass { clear: true }. The MCP fills the workspace UUID from the selected workspace (or the workspace bound to a workspace key) automatically — agents do not need to (and cannot) target a different workspace from this key
| Parameter | Type | Required | Notes |
|---|---|---|---|
| clear | boolean | no | When true, sets the default to null (no default workspace). Default: false. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List all integrations connected to the selected workspace (or the workspace bound to a workspace key). Returns one entry per connected toolkit (Slack, Jira, ClickUp, Airtable, Notion, Gmail, GCal, GitHub, etc.) with system name, connection status, last sync time, and any vendor metadata. Useful for choosing which setPreferredIntegration value is valid, or for reporting connection health to the u
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Get the processing progress of a recording. Returns an integer 0-100 — useful for polling after a hub_reprocess_recording call. Requires recordings:read scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| recordingId | integer | yes | Recording ID (integer, from a call's recordingId field). |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Re-run the analysis for the CALLER's own version of the summary, key points, action items and (when they have notes) enhanced notes, against the existing transcript and using their CURRENT instruction set (workspace prompt, per-call prompt, notes and note template). Other participants' versions are never touched. Cheaper than hub_reprocess_recording. Returns the new summary text. Requires record
| Parameter | Type | Required | Notes |
|---|---|---|---|
| recordingId | integer | yes | Recording ID. |
| saveToDb | boolean | no | Default true. When false, returns the new summary without persisting it (preview mode). |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Re-run the FULL pipeline on a recording: transcription + summary + key points + action items. Slower and more expensive than hub_regenerate_summary. Use when a fresh transcription would meaningfully improve the result (different language detection, speaker diarization fix, etc.). Returns the updated recording DTO. Requires recordings:write scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| recordingId | integer | yes | Recording ID. |
| regenerate | boolean | no | Whether to regenerate downstream artifacts (key points, action items) after the new transcription. Default true on the backend. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Generate a short-lived signed URL to download the recording's audio (typically MP3 or WAV). The URL is valid for expiryMinutes minutes (default 30, max enforced by Hub). The agent should NOT cache the URL — request a fresh one each time the audio is needed. Requires recordings:read scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| recordingId | integer | yes | Recording ID. |
| expiryMinutes | integer | no | How long the URL stays valid. Default 30. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Like hub_get_audio_url but returns the full media (video + audio) when the recording has a video track. Falls back to audio-only when there isn't one. Same expiry semantics. Requires recordings:read scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| recordingId | integer | yes | Recording ID. |
| expiryMinutes | integer | no | How long the URL stays valid. Default 30. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Get a signed URL for the recording's preview thumbnail (a still image or short looping clip). Useful for embedding a card. Same expiry semantics. Requires recordings:read scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| recordingId | integer | yes | Recording ID. |
| expiryMinutes | integer | no | How long the URL stays valid. Default 30. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Page through all calls the actor user can see (their own + any explicitly shared). Returns a list of UserCallDTO. Pagination is page+size; sort order is most-recent first. Requires recordings:read scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | 0-based page index. |
| size | integer | no | Page size (backend default ~20, cap typically 100). |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Return the total number of calls visible to the actor user. Use to plan pagination. Requires recordings:read scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Fetch a single call by ID. Returns the full UserCallDTO. Field map (the DTO is deeply nested): - top-level id (integer) — what /usercall/{id} expects, what list/search return - top-level clickupList/jiraProjectId/airtableBaseId/airtableTableId — populated when this call has been pushed to that vendor - top-level summaryApplied/actionItemsApplied/etc. (bool) — has the su
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | integer | yes | UserCall integer ID — the OUTER id from list/search/etc., NOT the inner call.id. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Free-text search across call name, description, attendees, and recording transcript content. Returns paginated UserCallDTO results. Requires recordings:read scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Search text. Empty string lists all. |
| page | integer | no | 0-based page index. |
| size | integer | no | Page size. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Count of calls matching a search query. Pair with hub_search_calls for paginated UIs. Requires recordings:read scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Search text. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Delete a call by ID. Hard-deletes both the UserCall metadata and the underlying recording media. NOT REVERSIBLE — use with care. Requires recordings:write scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | integer | yes | UserCall ID. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Push a call's extracted tasks into one or more Jira projects under the same cloud. Hub fans the action items out across the listed projects. Requires recordings:write scope AND a Jira integration on the workspace (see hub_list_integrations). IMPORTANT: returns boolean — true means Hub ACCEPTED the request, NOT that it actually landed in Jira. The vendor push happens async and silently fails on
| Parameter | Type | Required | Notes |
|---|---|---|---|
| callUUID | string | yes | Call's UUID — NESTED at hub_get_call.call.callUuid (NOT top-level hub_get_call.uuid). The DTO has two integer ids and one UUID; this is the UUID, not either of the integers. |
| cloudId | string | yes | Jira cloud id (from connected integration). |
| projectIds | array | yes | One or more Jira project ids within the cloud. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Push a call's extracted tasks into a ClickUp list. Requires recordings:write scope AND a ClickUp integration on the workspace. Same return-shape caveat as hub_send_call_to_jira — boolean response = "request accepted", not "actually pushed".
| Parameter | Type | Required | Notes |
|---|---|---|---|
| callUUID | string | yes | Call's UUID — NESTED at hub_get_call.call.callUuid. |
| selectedListId | string | yes | ClickUp list id. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Push a call's extracted tasks into Airtable rows under one base + one or more tables. Requires recordings:write scope AND an Airtable integration on the workspace. Same return-shape caveat as hub_send_call_to_jira — boolean response = "request accepted", not "actually pushed".
| Parameter | Type | Required | Notes |
|---|---|---|---|
| callUUID | string | yes | Call's UUID — NESTED at hub_get_call.call.callUuid. |
| baseId | string | yes | Airtable base id. |
| tableIds | array | yes | One or more Airtable table ids within the base. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
List the actor user's calendar events in a date range. Use this to find the eventId or seriesMasterId a prompt should attach to. Each event includes subject, start/end, whether a recording bot is subscribed, and any eventCustomPrompt / seriesCustomPrompt already set. Events belong to the user across all workspace assignments; workspace assignment is processing context, not ownership. Requires cale
| Parameter | Type | Required | Notes |
|---|---|---|---|
| startDate | string | yes | ISO-8601 start of range, e.g. 2026-09-01T00:00:00Z. Required. |
| endDate | string | yes | ISO-8601 end of range, e.g. 2026-09-30T00:00:00Z. Required. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Set the custom prompt for ONE calendar occurrence. For a series occurrence it is applied TOGETHER with the series prompt (and the workspace prompt), not instead of them; for a one-off meeting it is the meeting's only per-call prompt. Takes effect the next time that meeting is processed. Requires recordings:write scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| eventId | string | yes | Event id from hub_list_calendar_events. |
| customPrompt | string | yes | Instructions for the AI when it analyses this meeting. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Remove one occurrence's own prompt. The series prompt, if any, keeps applying on its own — nothing 'falls back', the series prompt was already in use. Requires recordings:write scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| eventId | string | yes | Event id from hub_list_calendar_events. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Set the custom prompt for an entire recurring series. Applies to every occurrence, IN ADDITION to any occurrence-specific prompt set with hub_set_event_custom_prompt (both are applied when both are set). Requires recordings:write scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| seriesMasterId | string | yes | Series master id from hub_list_calendar_events. |
| customPrompt | string | yes | Instructions for the AI when it analyses meetings in this series. |
| workspaceId | string | no | Optional. Only used when the series has no stored row yet and one must be created. Personal keys may choose a workspace they belong to that permits the key. Workspace keys may choose only the key's wo |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Remove a series' custom prompt. Each occurrence keeps only its own prompt, if it has one. Never clear a series prompt to 'avoid a conflict' with an occurrence prompt: there is no conflict, both apply, and clearing it drops instructions every other occurrence relies on. Requires recordings:write scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| seriesMasterId | string | yes | Series master id from hub_list_calendar_events. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Set the custom prompt on an already-recorded call, by its integer call id. This is the right tool for meetings that never had a calendar event (ad-hoc desktop or bot recordings), and for re-analysing a call differently. It is the CALLER's own prompt: it shapes only their version of the summary, key points, action items and enhanced notes. Stored only — follow it with hub_regenerate_summary to rebu
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | integer | yes | UserCall id (integer), from hub_list_calls. |
| customPrompt | string | yes | Instructions for the AI when it analyses this call. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Remove the caller's own per-call prompt. Their next hub_regenerate_summary uses their instruction set without a per-call prompt. Requires recordings:write scope.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | integer | yes | UserCall id (integer), from hub_list_calls. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Run a Lens chat query against the workspace's knowledge (recordings, calls, transcripts, integrated SaaS data). Returns the synthesized answer as a string. Pass lastMessage (the new user turn) and optionally history (prior turns). For multi-turn conversations the agent SHOULD pass an accumulating history so Lens can resolve references like "the last call we discussed". Calls can take 15-30s on
| Parameter | Type | Required | Notes |
|---|---|---|---|
| lastMessage | string | yes | The new user message to send to Lens. Required. |
| history | array | no | Prior turns in chronological order (oldest first). Each entry is { user, datetime, content }. Optional but recommended for follow-up questions. |
| account | string | no | Multi-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, |
| workspace | string | no | Workspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or |
Discover deployed API tags or a tag schema for one product. Prefers the versioned service-qualified catalog; falls back only when unsupported. Discovery never grants access.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| service | string | yes | — |
| tag | string | no | — |
| account | string | no | — |
| workspace | string | no | — |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Dutify or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| whoami | no tags | |
| list_accounts | no tags | |
| find_my_workspace | no tags | |
| list_workspaces | no tags | |
| list_boards | no tags | |
| list_spaces | no tags | |
| get_endpoint_examples | untrusted-input | untrusted-input: keyword "fetch" |
| wiki_search | no tags | |
| wiki_retrieve | no tags | |
| wiki_list_pages | no tags | |
| wiki_get_page | untrusted-input | untrusted-input: keyword "get_page" |
| wiki_create_page | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| wiki_update_page | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| wiki_move_page | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| wiki_delete_page | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| wiki_get_page_share | untrusted-input | untrusted-input: keyword "get_page" |
| wiki_enable_page_share | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| wiki_disable_page_share | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| wiki_list_spaces | no tags | |
| wiki_get_space | untrusted-input | untrusted-input: keyword "fetch" |
| wiki_get_space_with_pages | untrusted-input | untrusted-input: keyword "fetch" |
| wiki_create_space | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| wiki_update_space | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| wiki_delete_space | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| wiki_get_public_settings | no tags | |
| wiki_check_public_slug | no tags | |
| wiki_set_public_settings | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| wiki_list_attachments | no tags | |
| wiki_request_attachment_upload | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| wiki_confirm_attachment | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| wiki_delete_attachment | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| fr_list_requests | no tags | |
| fr_get_request | no tags | |
| fr_create_request | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| fr_set_request_status | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| fr_comment_request | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| fr_vote_request | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| fr_moderate_request | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| fr_delete_request | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| fr_list_bugs | no tags | |
| fr_get_bug | no tags | |
| fr_create_bug | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| fr_set_bug_status | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| fr_set_bug_assignee | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| fr_set_bug_visibility | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| fr_toggle_bug_affected | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| fr_comment_bug | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| fr_moderate_bug | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| fr_delete_bug | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_get_workspace_context | no tags | |
| pm_get_dashboard | no tags | |
| pm_search_tasks | no tags | |
| pm_get_task | untrusted-input | untrusted-input: keyword "fetch" |
| pm_get_subtasks | no tags | |
| pm_create_task | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_update_task | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_delete_task | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_list_task_types | no tags | |
| pm_bulk_change_task_type | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_list_task_comments | no tags | |
| pm_create_task_comment | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_update_task_comment | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_delete_task_comment | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_list_task_relationships | no tags | |
| pm_create_task_relationship | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_delete_task_relationship | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_create_space | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_create_folder | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_update_folder | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_delete_folder | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_create_list | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_update_list | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_delete_list | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_create_custom_field | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_update_custom_field | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_delete_custom_field | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_list_views | no tags | |
| pm_get_view | untrusted-input | untrusted-input: keyword "fetch" |
| pm_create_view | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_update_view | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_delete_view | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_clone_view | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_list_sprint_groups | no tags | |
| pm_create_sprint_group | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_create_sprint | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_get_sprint | untrusted-input | untrusted-input: keyword "fetch" |
| pm_update_sprint | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_delete_sprint | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_start_sprint | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_complete_sprint | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_add_tasks_to_sprint | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_remove_tasks_from_sprint | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_get_sprint_tasks | no tags | |
| pm_get_sprint_burndown | no tags | |
| pm_create_webhook | external-sinksensitive-source | external-sink: keyword "webhook", declares readOnlyHint: false, openWorldHint: true; sensitive-source: parameter "secret" |
| pm_list_webhooks | external-sink | external-sink: keyword "webhook" |
| pm_list_webhook_event_types | external-sink | external-sink: keyword "webhook" |
| pm_get_webhook_usage | external-sink | external-sink: keyword "webhook" |
| pm_get_webhook | untrusted-inputexternal-sink | untrusted-input: keyword "fetch"; external-sink: keyword "webhook" |
| pm_update_webhook | external-sink | external-sink: keyword "webhook", declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_delete_webhook | external-sink | external-sink: keyword "webhook", declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_test_webhook | external-sink | external-sink: keyword "webhook", declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_list_webhook_deliveries | external-sink | external-sink: keyword "webhook" |
| pm_replay_webhook_delivery | external-sink | external-sink: keyword "webhook", declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_read_activity_log | no tags | |
| pm_list_notifications | no tags | |
| pm_count_unread_notifications | no tags | |
| pm_mark_notification_read | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_mark_all_notifications_read | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_list_time_entries | no tags | |
| pm_log_time | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_delete_time_entry | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_list_saved_filters | no tags | |
| pm_save_filter | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_delete_saved_filter | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_add_comment_reaction | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_list_comment_reactions | no tags | |
| pm_remove_comment_reaction | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_list_reference_data | no tags | |
| pm_get_task_sharing | no tags | |
| pm_configure_task_sharing | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_create_tag | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_get_tag | untrusted-input | untrusted-input: keyword "fetch" |
| pm_update_tag | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_delete_tag | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_list_teams | no tags | |
| pm_create_team | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_get_team | untrusted-input | untrusted-input: keyword "fetch" |
| pm_update_team | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_delete_team | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_add_team_member | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_remove_team_member | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_get_current_user | no tags | |
| pm_update_current_user | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_get_notification_settings | no tags | |
| pm_update_notification_channel | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_get_workspace_user_avatar_url | no tags | |
| pm_list_automations_for_list | no tags | |
| pm_list_automations_for_folder | no tags | |
| pm_list_automations_for_space | no tags | |
| pm_get_automation | untrusted-input | untrusted-input: keyword "fetch" |
| pm_create_automation | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| pm_update_automation | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_delete_automation | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_get_automation_audit | untrusted-input | untrusted-input: keyword "fetch" |
| pm_list_workspace_members | no tags | |
| pm_change_member_role | untrusted-inputexternal-sink | untrusted-input: keyword "fetch"; external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_remove_workspace_member | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_transfer_workspace_ownership | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_leave_workspace | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_list_invitations | no tags | |
| pm_send_invitation | untrusted-inputexternal-sink | untrusted-input: keyword "fetch"; external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_cancel_invitation | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_list_import_jobs | no tags | |
| pm_get_import_job | untrusted-input | untrusted-input: keyword "fetch" |
| pm_confirm_import_mappings | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| pm_describe_status_priority_level_endpoints | untrusted-input | untrusted-input: keyword "fetch" |
| hub_get_workspace | no tags | |
| hub_list_members | no tags | |
| hub_get_custom_prompt | no tags | |
| hub_set_custom_prompt | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_get_preferred_integration | no tags | |
| hub_set_preferred_integration | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_get_default_workspace | no tags | |
| hub_set_default_workspace | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_list_integrations | no tags | |
| hub_get_recording_progress | no tags | |
| hub_regenerate_summary | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_reprocess_recording | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_get_audio_url | untrusted-input | untrusted-input: keyword "download" |
| hub_get_media_url | no tags | |
| hub_get_preview_url | no tags | |
| hub_list_calls | no tags | |
| hub_count_calls | no tags | |
| hub_get_call | untrusted-input | untrusted-input: keyword "fetch" |
| hub_search_calls | no tags | |
| hub_count_search_calls | no tags | |
| hub_delete_call | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_send_call_to_jira | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_send_call_to_clickup | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_send_call_to_airtable | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_list_calendar_events | no tags | |
| hub_set_event_custom_prompt | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_clear_event_custom_prompt | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_set_series_custom_prompt | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_clear_series_custom_prompt | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_set_call_custom_prompt | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_clear_call_custom_prompt | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| hub_lens_chat | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| get_api_catalog | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 0.1.1.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Dutify can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.