Dutify
Server Details
One hosted MCP server for the whole Dutify suite: project management (tasks, sprints, views, custom fields), Dutify Hub call recordings, transcripts and Lens chat, Codexum wiki pages, and Roadmarq feature requests and bugs. Auth: X-API-Key header with a Dutify personal key (du_live_...). Docs: https://github.com/dutifyai/dutify-mcp
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 191 tools
Domain prefixes (fr_, hub_, pm_, wiki_) clearly partition the surface, and within each domain verbs (get/list/create/update/delete/set) are distinct. Some genuine overlap exists: find_my_workspace/list_workspaces/whoami/list_accounts/hub_get_workspace all serve workspace discovery, and hub_get_audio_url/media_url/preview_url are close cousins. A capable agent can still disambiguate, but a handful of clusters require reading descriptions carefully.
Most tools follow a predictable domain_prefix + verb_noun pattern (pm_create_task, wiki_get_page, fr_comment_bug). The root-level tools break the pattern: some are unprefixed verb_noun (list_boards, list_spaces), one is a bare noun (whoami). Within prefixed families it's very consistent.
191 tools is an extreme surface for any single MCP endpoint, far beyond the 3-15 recommended. The breadth (project management + meetings/hub + wiki + feedback requests across a dozen sub-areas) partially explains it, but the count makes discovery, onboarding, and correct selection substantially harder.
CRUD coverage across tasks, sprints, views, custom fields, teams, webhooks, automations, wiki pages/spaces/attachments, feedback requests/bugs, and recordings is thorough. Minor gaps exist (e.g. some settings endpoints like PM notification channel PUT and saved-filter edits are explicitly not exposed), but the surface is largely complete for its domains.
Available Tools
191 toolsfind_my_workspaceBRead-onlyIdempotentInspect
Unified Dutify find_my_workspace: fresh credential/workspace discovery. Does not require a selected workspace or reserve quota.
Inputs: account, workspace.
fr_comment_bugAInspect
Add a comment to a bug report. Pass isInternal=true for internal-only. API-key scope: feedback:comments:write.
Inputs: content (required), shortId (required), account, workspace, +1 more.
fr_comment_requestAInspect
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.
Inputs: content (required), shortId (required), account, workspace, +1 more.
fr_create_bugAInspect
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.
Inputs: title (required), boardSlug (required), account, severity, +7 more.
fr_create_requestAInspect
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.
Inputs: title (required), boardSlug (required), account, category, +2 more.
fr_delete_bugADestructiveInspect
Permanently delete a bug report. Requires Manage Queue permission. Irreversible. API-key scope: feedback:bugs:write.
Inputs: shortId (required), account, workspace.
fr_delete_requestADestructiveInspect
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.
Inputs: shortId (required), account, workspace.
fr_get_bugARead-onlyIdempotentInspect
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.
Inputs: shortId (required), account, workspace.
fr_get_requestARead-onlyIdempotentInspect
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.
Inputs: shortId (required), account, workspace.
fr_list_bugsARead-onlyIdempotentInspect
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.
Inputs: boardSlug (required), status, account, severity, +1 more.
fr_list_requestsARead-onlyIdempotentInspect
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.
Inputs: boardSlug (required), q, page, size, +5 more.
fr_moderate_bugADestructiveInspect
Approve, reject, or mark a bug as spam. Action is case-insensitive. Requires Manage Queue permission. API-key scope: feedback:moderation:write.
Inputs: action (required), shortId (required), account, workspace.
fr_moderate_requestADestructiveInspect
Approve, reject, or mark a feature request as spam. Action is case-insensitive. Requires Manage Queue permission. API-key scope: feedback:moderation:write.
Inputs: action (required), shortId (required), account, workspace.
fr_set_bug_assigneeADestructiveInspect
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.
Inputs: shortId (required), account, workspace, assigneeId, +1 more.
fr_set_bug_statusBDestructiveInspect
Change a bug status by name (lenient match against the board's bug-status set). API-key scope: feedback:bugs:write.
Inputs: status (required), shortId (required), account, workspace.
fr_set_bug_visibilityBDestructiveInspect
Toggle a bug's public visibility. Security bugs stay private regardless. API-key scope: feedback:bugs:write.
Inputs: shortId (required), isPublic (required), account, workspace.
fr_set_request_statusADestructiveInspect
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.
Inputs: status (required), shortId (required), account, workspace.
fr_toggle_bug_affectedADestructiveInspect
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.
Inputs: shortId (required), account, workspace.
fr_vote_requestBDestructiveInspect
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.
Inputs: shortId (required), emoji, account, workspace.
get_api_catalogBRead-onlyIdempotentInspect
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.
Inputs: service (required), tag, account, workspace.
get_endpoint_examplesARead-onlyIdempotentInspect
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, etc. Pass the resource tag (e.g. "Wiki Pages (Lite)", "Milestone Articles"). Optionally narrow with operationId (e.g. "createPage") and name (e.g. "full" or "full-tiptap") — both names appear in the per-tag detail response so an agent can pick exactly the example it needs without paying tokens for the rest. Returns the catalog JSON; the example payloads are under operations[*].requestBodyExamples[name].value.
Tag list (lightweight) is at GET /v1/api-catalog. Per-tag detail (schemas, no example bodies) is at GET /v1/api-catalog/{tag}. This tool calls the third tier — GET /v1/api-catalog/{tag}/examples — which carries the heavy payloads.
Inputs: tag (required), name, account, workspace, +1 more.
hub_clear_call_custom_promptADestructiveInspect
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.
Inputs: id (required), account, workspace.
hub_clear_event_custom_promptADestructiveInspect
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.
Inputs: eventId (required), account, workspace.
hub_clear_series_custom_promptADestructiveInspect
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.
Inputs: seriesMasterId (required), account, workspace.
hub_count_callsARead-onlyIdempotentInspect
Return the total number of calls visible to the actor user. Use to plan pagination. Requires recordings:read scope.
Inputs: account, workspace.
hub_count_search_callsARead-onlyIdempotentInspect
Count of calls matching a search query. Pair with hub_search_calls for paginated UIs. Requires recordings:read scope.
Inputs: query, account, workspace.
hub_delete_callADestructiveInspect
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.
Inputs: id (required), account, workspace.
hub_get_audio_urlARead-onlyIdempotentInspect
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.
Inputs: recordingId (required), account, workspace, expiryMinutes.
hub_get_callARead-onlyIdempotentInspect
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 returntop-level
clickupList/jiraProjectId/airtableBaseId/airtableTableId— populated when this call has been pushed to that vendortop-level
summaryApplied/actionItemsApplied/etc. (bool) — has the summary/etc. been pushed?call.id(integer) — INTERNAL Zoom/Meet/Teams call id, NOT for /usercall/{id} pathscall.callUuid(string) — whathub_send_call_to_jira/clickup/airtablewant ascallUUIDcall.attendees(string, often "") — NOT a structured arraycall.recordings[i].id(integer) — recording id for /recording/{id}/audio-url etc.call.recordings[i].summary/keyPoints/actionItems/enhancedNotes— markdown STRINGS, not arrays; the CALLER's own version (generated from their workspace prompt, per-call prompt, notes and note template), never another participant'scall.recordings[i].userNotes— only the caller's own desktop notes, null otherwise Requires recordings:read scope.
Inputs: id (required), account, workspace.
hub_get_custom_promptARead-onlyIdempotentInspect
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.
Inputs: account, workspace.
hub_get_default_workspaceARead-onlyIdempotentInspect
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.
Inputs: account, workspace.
hub_get_media_urlARead-onlyIdempotentInspect
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.
Inputs: recordingId (required), account, workspace, expiryMinutes.
hub_get_preferred_integrationARead-onlyIdempotentInspect
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.
Inputs: account, workspace.
hub_get_preview_urlARead-onlyIdempotentInspect
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.
Inputs: recordingId (required), account, workspace, expiryMinutes.
hub_get_recording_progressARead-onlyIdempotentInspect
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.
Inputs: recordingId (required), account, workspace.
hub_get_workspaceARead-onlyIdempotentInspect
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.
Inputs: account, workspace.
hub_lens_chatADestructiveInspect
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 synthesis-heavy queries; the MCP timeout is generous to allow this. Requires lens:chat scope.
Inputs: lastMessage (required), account, history, workspace.
hub_list_calendar_eventsARead-onlyIdempotentInspect
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 calendar:read scope.
Inputs: endDate (required), startDate (required), account, workspace.
hub_list_callsARead-onlyIdempotentInspect
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.
Inputs: page, size, account, workspace.
hub_list_integrationsARead-onlyIdempotentInspect
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 user. Requires integrations:read scope.
Inputs: account, workspace.
hub_list_membersARead-onlyIdempotentInspect
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.
Inputs: account, workspace.
hub_regenerate_summaryADestructiveInspect
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 recordings:write scope.
Inputs: recordingId (required), account, saveToDb, workspace.
hub_reprocess_recordingADestructiveInspect
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.
Inputs: recordingId (required), account, workspace, regenerate.
hub_search_callsARead-onlyIdempotentInspect
Free-text search across call name, description, attendees, and recording transcript content. Returns paginated UserCallDTO results. Requires recordings:read scope.
Inputs: page, size, query, account, +1 more.
hub_send_call_to_airtableADestructiveInspect
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".
Inputs: baseId (required), callUUID (required), tableIds (required), account, +1 more.
hub_send_call_to_clickupADestructiveInspect
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".
Inputs: callUUID (required), selectedListId (required), account, workspace.
hub_send_call_to_jiraADestructiveInspect
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 bad cloudId/project/expired tokens. To confirm landing, call hub_get_call again and check that jiraProjectId is populated.
Inputs: cloudId (required), callUUID (required), projectIds (required), account, +1 more.
hub_set_call_custom_promptADestructiveInspect
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 rebuild that version. Requires recordings:write scope.
Inputs: id (required), customPrompt (required), account, workspace.
hub_set_custom_promptADestructiveInspect
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.
Inputs: customPrompt (required), account, workspace.
hub_set_default_workspaceADestructiveInspect
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. Requires user-settings:write scope.
Inputs: clear, account, workspace.
hub_set_event_custom_promptADestructiveInspect
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.
Inputs: eventId (required), customPrompt (required), account, workspace.
hub_set_preferred_integrationADestructiveInspect
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.
Inputs: preferredIntegration (required), account, workspace.
hub_set_series_custom_promptADestructiveInspect
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.
Inputs: customPrompt (required), seriesMasterId (required), account, workspace, +1 more.
list_accountsARead-onlyIdempotentInspect
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-Dutify-Accounts header), returns every configured account. Call this first when you do not know which account names are available.
Inputs: account, workspace.
list_boardsARead-onlyIdempotentInspect
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.
Inputs: account, workspace.
list_spacesARead-onlyIdempotentInspect
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.
Inputs: account, workspace.
list_workspacesBRead-onlyIdempotentInspect
Unified Dutify list_workspaces: fresh credential/workspace discovery. Does not require a selected workspace or reserve quota.
Inputs: account, workspace.
pm_add_comment_reactionADestructiveInspect
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.
Inputs: reactionType (required), taskIdentifier (required), commentIdentifier (required), account, +1 more.
pm_add_tasks_to_sprintADestructiveInspect
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.
Inputs: taskIdentifiers (required), sprintIdentifier (required), account, workspace.
pm_add_team_memberADestructiveInspect
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.
Inputs: userUuid (required), identifier (required), account, workspace.
pm_bulk_change_task_typeADestructiveInspect
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-key scope: tasks:write.
Inputs: taskType (required), taskIdentifiers (required), account, workspace.
pm_cancel_invitationADestructiveInspect
Revoke a pending workspace invitation by its identifier. Caller needs MANAGE_USERS permission. Returns 204. API-key scope: users:write.
Inputs: invitationIdentifier (required), account, workspace.
pm_change_member_roleADestructiveInspect
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: this endpoint is HTTP PUT on the collection path (not PATCH on a sub-resource). API-key scope: workspaces:write.
Inputs: userUuid (required), workspaceAccessLevelId (required), account, workspace.
pm_clone_viewAInspect
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.
Inputs: scope (required), identifier (required), name, account, +2 more.
pm_complete_sprintADestructiveInspect
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.
Inputs: sprintIdentifier (required), account, workspace, rolloverSprintIdentifier.
pm_configure_task_sharingADestructiveInspect
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.
Inputs: taskIdentifier (required), shared, account, expiresAt, +12 more.
pm_confirm_import_mappingsADestructiveInspect
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 'custom_field'). API-key scope: imports:write.
Inputs: jobIdentifier (required), columnMappings (required), account, workspace.
pm_count_unread_notificationsARead-onlyIdempotentInspect
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.
Inputs: account, workspace.
pm_create_automationAInspect
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 action/condition/trigger types. API-key scope: automations:write.
Inputs: name (required), actions (required), triggers (required), active, +7 more.
pm_create_custom_fieldAInspect
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 supported keys from pm_list_reference_data (custom-field-icon-options). Reuse suitable existing fields before creating another; color dropdown/label options consistently. CREATING A FIELD IS NOT ENOUGH TO MAKE IT VISIBLE: a custom field only shows up where it's added to a view's columns. After creating fields for a list, finish by creating/updating a view (pm_create_view / pm_update_view) whose columns include these fields, or the list keeps a defaults-only, empty-looking view. API-key scope: custom_fields:write.
Inputs: name (required), type (required), scope (required), color, +5 more.
pm_create_folderAInspect
Create a folder inside a space. Space identified by name. API-key scope: folders:write.
Inputs: name (required), space (required), account, workspace, +1 more.
pm_create_listAInspect
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 bare list, reuse/add relevant custom fields with emoji/color header metadata, refresh pm_get_workspace_context, then use pm_list_views and pm_update_view to configure the auto-created primary view with explicit ordered columns and useful grouping/sorting. Verify the saved configuration before reporting completion. API-key scope: lists:write.
Inputs: name (required), space (required), icon, color, +4 more.
pm_create_spaceAInspect
Create a new space in the current workspace. Description / icon / color / isPrivate are optional metadata. Returns LiteSpaceResponse. API-key scope: spaces:write.
Inputs: name (required), icon, color, account, +4 more.
pm_create_sprintAInspect
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.
Inputs: name (required), groupIdentifier (required), goal, account, +3 more.
pm_create_sprint_groupAInspect
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.
Inputs: name (required), spaceIdentifier (required), account, workspace, +2 more.
pm_create_tagAInspect
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.
Inputs: name (required), spaceIdentifier (required), account, textColor, +2 more.
pm_create_taskAInspect
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_…). For subtasks, set parent to a task key or identifier (omit list and the parent's list is used). Task type is OPTIONAL: omit taskType to inherit the closest non-null default along the three-level chain list → folder → space. There's NO workspace-level fallback — if all three are null the task is created untyped (taskType: null in the response), which is a valid persistent state. Use pm_list_task_types to see what types this workspace has (9 SYSTEM rows seeded at workspace creation, plus any CUSTOM ones). MANDATORY CUSTOM FIELDS: a list can mark custom fields required (isMandatory, per field via pm_get_workspace_context). Populate them in customFields on create AND update — the API rejects a write that leaves one empty with HTTP 400 errorCode VALIDATION_ERROR, details.field = the field's display name; the message also names it (e.g. Mandatory custom field 'Priority' requires a value). Fix and retry; don't ask the user as a substitute. API-key scope: tasks:write.
Inputs: title (required), list, tags, level, +16 more.
pm_create_task_commentAInspect
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.
Inputs: ref (required), text (required), account, replyTo, +2 more.
pm_create_task_relationshipBInspect
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.
Inputs: ref (required), type (required), target (required), account, +1 more.
pm_create_teamAInspect
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.
Inputs: name (required), icon, alias, color, +4 more.
pm_create_viewAInspect
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 back to system defaults, so custom fields you just created will NOT appear and the view looks empty. This is the most common mistake here: do not create a view and forget to select its columns. If unsure which custom-field column identifiers exist for this scope, call pm_get_workspace_context first instead of guessing. Columns and filters are applied atomically with the create — invalid columnIdentifier or filter shape rolls the whole create back with 400, so a 201 always means the view exists and is fully configured. In columns, the list order is display order and omitted columns are hidden. Keep new custom-field/header names plain; custom-field icons belong in emoji/color metadata. API-key scope: views:write.
Inputs: name (required), type (required), scope (required), sortBy, +8 more.
pm_create_webhookAInspect
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, pass a new secret to pm_update_webhook. Event types: Project Management events are dash-cased (e.g. "task-created", "task-status-changed", "comment-added"); wiki (Codexum) events are dotted and start with "wiki." (e.g. "wiki.page.published", "wiki.comment.added"); feature-request (Roadmarq) events start with "feedback." (e.g. "feedback.request.created", "feedback.bug.created"). Call pm_list_webhook_event_types for the full list with each type's product and allowed scopes. An unscoped webhook may mix products. Optionally narrow delivery to one entity with scopeType plus scopeEntityIdentifier: SPACE / FOLDER / TASK_LIST / TASK (identifier), WIKI_SPACE (space key), WIKI_PAGE (page id; covers its descendants), FEEDBACK_BOARD (board slug or id; stored and listed as the board UUID), FEEDBACK_REQUEST / FEEDBACK_BUG (short key such as "FR-12", or id); omit both for workspace-wide delivery. A scoped webhook may only list event types of its scope's product. Wiki and feature-request events need the API key to hold that product's read scope, and every delivery is re-checked: an event is sent only while the webhook creator can still see the item. Security bugs are not delivered to webhooks created with an API key: includeSecurityBugs can only be turned on by a workspace admin signed in as a person. Envelope: {version, id, type, timestamp, workspaceIdentifier, source ("pm" | "codexum" | "roadmarq"), eventId (stable across webhooks and replays; use it to de-duplicate), data}. Payloads are thin: no content bodies, comment text or emails. Retries fire at +0s / +1min / +5min (3 attempts total) and treat both 4xx and 5xx as failures. The URL must be publicly reachable: Dutify refuses private, loopback, link-local, CGNAT and IPv6 ULA addresses, localhost, bare hostnames and *.svc / *.cluster.local names (400 WEBHOOK_URL_NOT_ALLOWED) at create, update and resume, and re-checks it on every attempt. Redirects are not followed; http:// is accepted for public addresses. API-key scope: webhooks:write.
Inputs: url (required), eventTypes (required), name, secret, +4 more.
pm_delete_automationADestructiveInspect
Delete an automation rule. Returns 204. Existing audit log rows are preserved. API-key scope: automations:write.
Inputs: identifier (required), account, workspace.
pm_delete_custom_fieldADestructiveInspect
Delete a custom field and all its values. Requires FULL access. 204. API-key scope: custom_fields:write.
Inputs: identifier (required), account, workspace.
pm_delete_folderADestructiveInspect
Soft-delete a folder and its child lists+tasks. Requires FULL access. 204. API-key scope: folders:write.
Inputs: identifier (required), account, workspace.
pm_delete_listADestructiveInspect
Soft-delete a list and its tasks. Requires FULL access. 204. API-key scope: lists:write.
Inputs: identifier (required), account, workspace.
pm_delete_saved_filterADestructiveInspect
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.
Inputs: id (required), listIdentifier (required), account, workspace.
pm_delete_sprintADestructiveInspect
Soft-delete a sprint. Tasks lose their sprint association but remain in their lists. 204 on success. API-key scope: sprints:write.
Inputs: sprintIdentifier (required), account, workspace.
pm_delete_tagADestructiveInspect
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.
Inputs: identifier (required), account, workspace.
pm_delete_taskADestructiveInspect
Delete a task by ref. Cascade-deletes subtasks. Requires FULL access (not just EDIT). Returns 204 on success. API-key scope: tasks:write.
Inputs: ref (required), account, workspace.
pm_delete_task_commentADestructiveInspect
Delete a comment. Only the original author may delete. Returns 204. API-key scope: tasks:write.
Inputs: ref (required), commentIdentifier (required), account, workspace.
pm_delete_task_relationshipADestructiveInspect
Delete a relationship by identifier. Returns 204. API-key scope: tasks:write.
Inputs: ref (required), relationshipIdentifier (required), account, workspace.
pm_delete_teamADestructiveInspect
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.
Inputs: identifier (required), account, workspace.
pm_delete_time_entryADestructiveInspect
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.
Inputs: timeEntryId (required), taskIdentifier (required), account, workspace.
pm_delete_viewADestructiveInspect
Delete a view by identifier. Mandatory views (system-created defaults) return 409 Conflict. Returns 204 on success. API-key scope: views:write.
Inputs: identifier (required), account, workspace.
pm_delete_webhookADestructiveInspect
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.
Inputs: webhookIdentifier (required), account, workspace.
pm_describe_status_priority_level_endpointsARead-onlyIdempotentInspect
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/response bodies for whichever path it picks.
Inputs: account, workspace.
pm_get_automationARead-onlyIdempotentInspect
Fetch a single automation by identifier. Returns the full AutomationDTO including triggers, condition tree, and actions. API-key scope: automations:read.
Inputs: identifier (required), account, workspace.
pm_get_automation_auditARead-onlyIdempotentInspect
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.
Inputs: identifier (required), account, workspace.
pm_get_current_userARead-onlyIdempotentInspect
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.
Inputs: account, workspace.
pm_get_dashboardARead-onlyIdempotentInspect
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.
Inputs: scope (required), account, workspace, scopeIdentifier.
pm_get_import_jobARead-onlyIdempotentInspect
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.
Inputs: jobIdentifier (required), account, workspace.
pm_get_notification_settingsARead-onlyIdempotentInspect
Read the current user's aggregated notification settings: {pm, codexum, roadmarq}. pm holds the Project Management settings; codexum (wiki) and roadmarq (feedback) each hold appChannel, emailChannel and browserChannel, each {settings: {key: true|false}}. Use this to find out which notification is on before asking the user to flip one; pm_update_notification_channel changes the codexum and roadmarq ones. API-key scope: users:read.
Inputs: account, workspace.
pm_get_sprintBRead-onlyIdempotentInspect
Fetch a sprint by identifier. Returns SprintDTO with task statistics. API-key scope: sprints:read.
Inputs: sprintIdentifier (required), account, workspace.
pm_get_sprint_burndownARead-onlyIdempotentInspect
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.
Inputs: sprintIdentifier (required), account, workspace.
pm_get_sprint_tasksARead-onlyIdempotentInspect
List all tasks currently in the sprint. Returns an array of full TaskDTO. API-key scope: sprints:read.
Inputs: sprintIdentifier (required), account, workspace.
pm_get_subtasksBRead-onlyIdempotentInspect
List the direct subtasks (one level deep) of a parent task by ref. API-key scope: tasks:read.
Inputs: ref (required), limit, cursor, account, +1 more.
pm_get_tagARead-onlyIdempotentInspect
Fetch a single tag by identifier. Returns the TagDTO (identifier, name, backgroundColor, textColor). API-key scope: tags:read.
Inputs: identifier (required), account, workspace.
pm_get_taskARead-onlyIdempotentInspect
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 displayKey is null or absent. API-key scope: tasks:read.
Inputs: ref (required), account, workspace.
pm_get_task_sharingARead-onlyIdempotentInspect
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 custom-field identifiers exposed (sharedCustomFieldIdentifiers). Requires at least VIEW access to the task. API-key scope: tasks:read.
Inputs: taskIdentifier (required), account, workspace.
pm_get_teamARead-onlyIdempotentInspect
Fetch a team by identifier. Returns the full TeamDTO with members. API-key scope: teams:read.
Inputs: identifier (required), account, workspace.
pm_get_viewARead-onlyIdempotentInspect
Fetch a view by identifier (vw_…). API-key scope: views:read.
Inputs: identifier (required), account, workspace.
pm_get_webhookARead-onlyIdempotentInspect
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.
Inputs: webhookIdentifier (required), account, workspace.
pm_get_webhook_usageARead-onlyIdempotentInspect
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.
Inputs: account, workspace.
pm_get_workspace_contextARead-onlyIdempotentInspect
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 to find every list. Only what you can see is returned; anything visible inside a folder you can't see is listed under the nearest visible parent. Pass shallow=true to skip per-list statuses/priorities for a faster tree-only response. Each per-list custom field carries an isMandatory flag — fields with isMandatory=true MUST be supplied in customFields when creating/updating a task in that list, or the write is rejected with 400 VALIDATION_ERROR. API-key scope: workspaces:read.
Inputs: space, account, shallow, workspace, +4 more.
pm_get_workspace_user_avatar_urlARead-onlyIdempotentInspect
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.
Inputs: userUuid (required), account, workspace.
pm_leave_workspaceADestructiveInspect
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.
Inputs: account, workspace.
pm_list_automations_for_folderARead-onlyIdempotentInspect
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.
Inputs: folderIdentifier (required), account, workspace.
pm_list_automations_for_listARead-onlyIdempotentInspect
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.
Inputs: listIdentifier (required), account, workspace.
pm_list_automations_for_spaceARead-onlyIdempotentInspect
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.
Inputs: spaceIdentifier (required), account, workspace.
pm_list_comment_reactionsARead-onlyIdempotentInspect
List reactions on a task comment. Page-style pagination (page/size). API-key scope: tasks:read.
Inputs: taskIdentifier (required), commentIdentifier (required), page, size, +2 more.
pm_list_import_jobsARead-onlyIdempotentInspect
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.
Inputs: page, account, pageSize, workspace.
pm_list_invitationsARead-onlyIdempotentInspect
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.
Inputs: account, workspace.
pm_list_notificationsARead-onlyIdempotentInspect
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.
Inputs: page, size, account, workspace, +3 more.
pm_list_reference_dataARead-onlyIdempotentInspect
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, formula, … Use the
identifierfrom each row as thefieldTypevalue when creating a custom field via /v1/lists/{id}/custom-fields or pm_create_custom_field.custom-field-icon-options: Custom-field icon catalogue: supported iconNames, emojiNames, and defaultIconsByFieldType. Use one of these keys as the
emojivalue; keep custom-field names plain. Agent preference: choose a semantically matching emojiNames key when available (severity/urgency=fire, target/goal=direct_hit, launch=rocket, approval/success=white_check_mark, location=pushpin, budget=moneybag); use iconNames for structural/type affordances like CalendarBlank.resource-view-types: Resource view types: list (1), board (2), table (3), dashboard (4), gantt (5), calendar (6), gallery (7), whiteboard (9). The numeric
typeIdis what /v1/views and view-config endpoints accept.status-types: Status type enum — ACTIVE, DONE, CLOSED. Used when grouping tasks or filtering for visibility.
activity-types: Activity log event types — status_changed, task_created, comment_added, automation_executed, etc.
automation-action-types: Automation action types — SET_STATUS, SET_PRIORITY, SET_ASSIGNEES, ADD_COMMENT, etc. Use when building an automation rule.
automation-condition-types: Automation condition types (predicate categories) — STATUS, PRIORITY, DUE_DATE, CUSTOM_FIELD, etc.
automation-field-operators: Operators valid in automation condition predicates — equals, not_equals, greater_than, in, is_set, etc.
access-levels: Entity access levels — VIEW, COMMENT, EDIT, FULL — used in user/team access grants.
workspace-access-level-permissions: Workspace role → permission map (OWNER/ADMIN/MEMBER/GUEST). Tells you which capabilities each role grants.
Auth: the resources are @PermitAll for anonymous callers, but the ApiKeyScopeFilter still gates API-key requests. The metadata:read scope covers custom-field-types / custom-field-icon-options / resource-view-types / status-types / activity-types / access-levels / workspace-access-level-permissions. The three automation-* categories live under /v1/automation/* and require automations:read instead. If the API key lacks the required scope the call returns 403 — pick a category your key covers, or have the user mint a key with both metadata:read and automations:read.
Inputs: category (required), account, workspace.
pm_list_saved_filtersARead-onlyIdempotentInspect
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.
Inputs: listIdentifier (required), account, workspace.
pm_list_sprint_groupsARead-onlyIdempotentInspect
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.
Inputs: spaceIdentifier (required), account, workspace.
pm_list_task_commentsARead-onlyIdempotentInspect
List comments on a task by ref. Cursor-paginated. API-key scope: tasks:read.
Inputs: ref (required), limit, cursor, account, +1 more.
pm_list_task_relationshipsARead-onlyIdempotentInspect
List all relationships where the task is owner OR child. Cursor-paginated. API-key scope: tasks:read.
Inputs: ref (required), limit, cursor, account, +1 more.
pm_list_task_typesARead-onlyIdempotentInspect
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 setting a default with pm_set_default_task_type. API-key scope: workspaces:read.
Inputs: account, workspace.
pm_list_teamsARead-onlyIdempotentInspect
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.
Inputs: page, size, account, workspace, +2 more.
pm_list_time_entriesARead-onlyIdempotentInspect
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.
Inputs: taskIdentifier (required), page, size, account, +3 more.
pm_list_viewsARead-onlyIdempotentInspect
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.
Inputs: scope (required), limit, cursor, account, +2 more.
pm_list_webhook_deliveriesARead-onlyIdempotentInspect
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.
Inputs: webhookIdentifier (required), size, limit, cursor, +2 more.
pm_list_webhook_event_typesARead-onlyIdempotentInspect
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.
Inputs: account, workspace.
pm_list_webhooksARead-onlyIdempotentInspect
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 includeSecurityBugs; for a FEEDBACK_BOARD scope, scopeEntityIdentifier is the board UUID, also when it was set by slug. API-key scope: webhooks:read.
Inputs: all, url, account, workspace.
pm_list_workspace_membersARead-onlyIdempotentInspect
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 error — don't assume it's the full roster. To enumerate everyone, page (page is 0-based) until you have collected totalCount. size is capped at 100 and a value >100 is a 400, not clamped. Use search (case-insensitive substring on first/last name or email, applied before paging) to find a specific member instead of paging blindly. Side effect: updates the caller's last-active timestamp. API-key scope: workspaces:read.
Inputs: page, size, search, account, +3 more.
pm_log_timeAInspect
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.
Inputs: timeSpent (required), taskIdentifier (required), notes, account, +2 more.
pm_mark_all_notifications_readADestructiveInspect
Mark every unread notification in the active workspace as read for the current user. API-key scope: notifications:write.
Inputs: account, workspace.
pm_mark_notification_readADestructiveInspect
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.
Inputs: identifier (required), account, workspace.
pm_read_activity_logARead-onlyIdempotentInspect
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 (parse the response, then JSON.parse(entry.data)). API-key scope: activity_log:read.
Inputs: scope (required), identifier (required), mode, size, +3 more.
pm_remove_comment_reactionADestructiveInspect
Remove a reaction by identifier. Only the user who added the reaction may remove it. 204. API-key scope: tasks:write.
Inputs: taskIdentifier (required), commentIdentifier (required), reactionIdentifier (required), account, +1 more.
pm_remove_tasks_from_sprintADestructiveInspect
Remove task-sprint associations. Tasks remain in their lists. Pass identifiers (tsk_…), not task keys. Returns updated SprintDTO. API-key scope: sprints:write.
Inputs: taskIdentifiers (required), sprintIdentifier (required), account, workspace.
pm_remove_team_memberADestructiveInspect
Remove a single user from a team. Returns 204. Requires MANAGE_TEAMS. API-key scope: teams:write.
Inputs: userUuid (required), identifier (required), account, workspace.
pm_remove_workspace_memberADestructiveInspect
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.
Inputs: deletionUserUuid (required), account, workspace.
pm_replay_webhook_deliveryADestructiveInspect
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, so it differs from the envelope id. Every replay re-checks access first: a wiki or feature-request event whose item the webhook creator can no longer see is not replayed (404). API-key scope: webhooks:write.
Inputs: webhookIdentifier (required), deliveryIdentifier (required), account, workspace.
pm_save_filterADestructiveInspect
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. Max 10 groups, max 20 filters per group.
No PATCH/PUT exists — to edit, delete + re-create. API-key scope: filters:write.
Inputs: filterGroups (required), listIdentifier (required), name, account, +1 more.
pm_search_tasksARead-onlyIdempotentInspect
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 API references, not display labels. API-key scope: tasks:read.
Inputs: q, tag, limit, space, +11 more.
pm_send_invitationADestructiveInspect
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.
Inputs: email (required), workspaceAccessLevelId (required), account, workspace.
pm_set_default_task_typeADestructiveInspect
Set the task type new tasks get when they are created without one, on a list, folder or space. A new task takes the default of its list, then folder, then space. taskType is a name (e.g. "Bug") or identifier, or null to clear this level so it inherits from the level above. Existing tasks keep their type; use pm_bulk_change_task_type for those. Get the list, folder or space identifier from pm_get_workspace_context. API-key scope: lists:write, folders:write or spaces:write for the level changed, plus workspaces:read to look up the type. Returns {container, identifier, taskType, taskTypeIdentifier}.
Inputs: taskType (required), container (required), identifier (required), account, +1 more.
pm_start_sprintADestructiveInspect
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.
Inputs: sprintIdentifier (required), account, workspace.
pm_test_webhookADestructiveInspect
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 setting up two-way communication. Returns the resulting delivery record (status, attempt, timestamps) — inspect it (or pm_list_webhook_deliveries) to confirm the endpoint accepted it. API-key scope: webhooks:write.
Inputs: webhookIdentifier (required), account, workspace.
pm_transfer_workspace_ownershipADestructiveInspect
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.
Inputs: transferToUserUuid (required), resultingOwnerAccessLevelId (required), account, workspace.
pm_update_automationADestructiveInspect
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.
Inputs: identifier (required), name, active, account, +5 more.
pm_update_current_userADestructiveInspect
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.
Inputs: fullName (required), account, workspace.
pm_update_custom_fieldBDestructiveInspect
Update custom-field metadata (name / description / emoji / color / isPrivate). API-key scope: custom_fields:write.
Inputs: identifier (required), name, color, emoji, +4 more.
pm_update_folderBDestructiveInspect
Update folder metadata by identifier (fld_…). All fields optional. API-key scope: folders:write.
Inputs: identifier (required), icon, name, color, +4 more.
pm_update_listBDestructiveInspect
Update list metadata by identifier (tl_…). All fields optional. API-key scope: lists:write.
Inputs: identifier (required), icon, name, color, +4 more.
pm_update_notification_channelADestructiveInspect
Turn individual Codexum (wiki) or Roadmarq (feedback) notifications on or off for one delivery channel (app, email or browser) of the current user. Pass settings as a map of setting key to true|false; only the keys you send change, the others keep their value (every key starts on). Codexum keys: pageUpdated, pageSharedWithMe, mentionedInPage, pageComments. Roadmarq keys: newFeedback, feedbackStatusChanged, feedbackVotes, feedbackComments. Returns the whole channel after the update: {settings: {key: true|false}} with every key of the module. pm_get_notification_settings shows the current values. Project Management notifications are not changed here: PM uses PUT /v1/users/settings/notifications/{channel}, which this server does not expose as a tool. API-key scope: users:write.
Inputs: module (required), channel (required), settings (required), account, +1 more.
pm_update_sprintADestructiveInspect
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.
Inputs: sprintIdentifier (required), goal, name, account, +3 more.
pm_update_tagADestructiveInspect
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.
Inputs: identifier (required), name, account, textColor, +2 more.
pm_update_taskADestructiveInspect
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.
Inputs: ref (required), list, tags, level, +16 more.
pm_update_task_commentADestructiveInspect
Update an existing comment. Only the original author may edit. API-key scope: tasks:write.
Inputs: ref (required), text (required), commentIdentifier (required), account, +2 more.
pm_update_teamADestructiveInspect
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.
Inputs: identifier (required), icon, name, alias, +5 more.
pm_update_viewADestructiveInspect
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 pm_get_workspace_context. Header icons belong in custom-field emoji/color metadata. Read back the rich resource-view configuration for verification; Lite GET/list responses omit columns and filters. API-key scope: views:write.
Inputs: identifier (required), name, sortBy, account, +6 more.
pm_update_webhookADestructiveInspect
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 URL. Re-scope with scopeType plus scopeEntityIdentifier (same values as pm_create_webhook), or pass clearScope: true to make the webhook workspace-wide again. includeSecurityBugs sets whether feature-request security bugs are delivered; omit it to keep the stored value. An API key can turn it off but not on (403): only a workspace admin signed in as a person can turn it on. The URL must be publicly reachable: Dutify refuses private, loopback, link-local, CGNAT and IPv6 ULA addresses, localhost, bare hostnames and *.svc / *.cluster.local names (400 WEBHOOK_URL_NOT_ALLOWED) at create, update and resume, and re-checks it on every attempt. Redirects are not followed; http:// is accepted for public addresses. API-key scope: webhooks:write.
Inputs: webhookIdentifier (required), url, name, active, +8 more.
whoamiARead-onlyIdempotentInspect
Unified Dutify whoami: fresh credential/workspace discovery. Does not require a selected workspace or reserve quota.
Inputs: account, workspace.
wiki_check_public_slugARead-onlyIdempotentInspect
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.
Inputs: slug (required), spaceKey (required), account, workspace.
wiki_confirm_attachmentADestructiveInspect
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.
Inputs: pageId (required), attachmentId (required), account, workspace.
wiki_create_pageAInspect
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-friendly reference of every node and mark, call get_endpoint_examples with tag="Wiki Pages (Lite)" (and optionally name="full-tiptap"). Optional parent slug to nest under another page. Returns the created page DTO. 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:write.
Inputs: title (required), spaceKey (required), icon, parent, +4 more.
wiki_create_spaceAInspect
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 visibility ONLY; it does NOT publish the space to the public web — use wiki_set_public_settings for that. Requires workspace-level edit access. API-key scope: wiki:spaces:write.
Inputs: key (required), name (required), icon, account, +5 more.
wiki_delete_attachmentADestructiveInspect
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.
Inputs: pageId (required), attachmentId (required), account, workspace.
wiki_delete_pageADestructiveInspect
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 on success. API-key scope: wiki:pages:write.
Inputs: slug (required), spaceKey (required), account, permanent, +1 more.
wiki_delete_spaceADestructiveInspect
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.
Inputs: spaceKey (required), account, workspace.
wiki_get_pageARead-onlyIdempotentInspect
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.
Inputs: slug (required), spaceKey (required), format, account, +1 more.
wiki_get_public_settingsARead-onlyIdempotentInspect
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 visibility only. Requires space admin. API-key scope: wiki:spaces:read.
Inputs: spaceKey (required), account, workspace.
wiki_get_spaceARead-onlyIdempotentInspect
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.
Inputs: spaceKey (required), account, workspace.
wiki_get_space_with_pagesARead-onlyIdempotentInspect
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_pages is lighter. API-key scope: wiki:spaces:read.
Inputs: spaceKey (required), account, workspace.
wiki_list_attachmentsARead-onlyIdempotentInspect
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.
Inputs: pageId (required), account, workspace.
wiki_list_pagesARead-onlyIdempotentInspect
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.
Inputs: spaceKey (required), limit, parent, account, +1 more.
wiki_list_spacesARead-onlyIdempotentInspect
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.
Inputs: account, workspace.
wiki_move_pageADestructiveInspect
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). Returns the moved page DTO. 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:write.
Inputs: slug (required), spaceKey (required), account, afterPage, +3 more.
wiki_request_attachment_uploadAInspect
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); then (3) call wiki_confirm_attachment to activate it. To embed the result as an image, add a TipTap image node with no src — { type:"image", attrs:{ attachmentId, pageId, width, height, align } }, width <= ~660 and height proportional — via wiki_update_page (content payload). Do NOT embed base64 data: URIs; they render distorted. Max 25 MB; system-executable file types are rejected. pageId is the page UUID (wiki_get_space_with_pages tree node id). API-key scope: wiki:attachments:write.
Inputs: pageId (required), filename (required), sizeBytes (required), contentType (required), +2 more.
wiki_retrieveARead-onlyIdempotentInspect
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 relevant), status and updatedAt. This is retrieval-augmented generation (RAG) over wiki content, NOT a page finder — to merely LOCATE or LIST pages by title/keyword use wiki_search. Defaults to the top 5 chunks; pass limit to widen. Fails open to keyword retrieval if the embedding provider is unavailable. 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:search:read.
Inputs: query (required), limit, account, spaceKey, +1 more.
wiki_searchARead-onlyIdempotentInspect
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. Optionally scope to a single space by passing spaceKey. Defaults to hybrid (keyword + semantic) ranking; pass mode to override. 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:search:read.
Inputs: q (required), mode, limit, account, +2 more.
wiki_set_public_settingsADestructiveInspect
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[]), showReactions, showPageViews, showLastUpdated, showAuthor, viewMode ("space"|"helpcenter"), heroTitle, heroSubtitle. Provided fields are merged onto the current settings (read-modify-write), so unspecified fields are preserved. Minimal publish: { isEnabled: true, customSlug: "my-docs" }. ⚠️ HIGH-TRUST / OUTWARD-FACING: enabling makes the space readable by ANYONE on the internet — confirm with the user before publishing. Requires space ADMIN. API-key scope: wiki:spaces:write.
Inputs: spaceKey (required), account, viewMode, heroTitle, +9 more.
wiki_update_pageADestructiveInspect
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 normal workspace access. Use it for citations; it does not make the page public. API-key scope: wiki:pages:write.
Inputs: slug (required), spaceKey (required), title, account, +3 more.
wiki_update_spaceADestructiveInspect
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.
Inputs: spaceKey (required), icon, name, account, +5 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityCmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs117 npm46 PyPIMIT
- AlicenseAqualityDmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.169 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityCmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.