Toolpin Monitor a server

Dutify

io.github.dutifyai/dutify · v0.1.1 · MCP 2025-11-25

Whole Dutify suite in one server: Hub call recordings, projects, Codexum wiki, Roadmarq requests.

Reachability reachable
checked 2026-10-26 05:31 UTC
Registry status active
Tools pinned 189
812b61561008
Tools last changed unchanged since first capture 2026-10-25
Repo last push 2026-10-24
as of 2026-10-26
GitHub stars 0
as of 2026-10-26

Provenance

Registry namespace io.github.dutifyai (GitHub-account verified by the official registry)
Repository github.com/dutifyai/dutify-mcp
Website https://dutify.ai
Remote endpoints
https://mcp.dutify.ai (streamable-http)

Observed changes

When (UTC)EventDetail
2026-10-25 05:31 first capture 189 tools pinned

Pinned tool definitions (189)

ToolDescription
whoami Unified Dutify whoami: fresh credential/workspace discovery. Does not require a selected workspace or reserve quota.
list_accounts 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...
find_my_workspace Unified Dutify find_my_workspace: fresh credential/workspace discovery. Does not require a selected workspace or reserve quota.
list_workspaces Unified Dutify list_workspaces: fresh credential/workspace discovery. Does not require a selected workspace or reserve quota.
list_boards 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.
list_spaces 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.
get_endpoint_examples 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...
wiki_search 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_retrieve 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...
wiki_list_pages 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...
wiki_get_page 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...
wiki_create_page 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...
wiki_update_page 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,...
wiki_move_page 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);...
wiki_delete_page 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...
wiki_get_page_share 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...
wiki_enable_page_share 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...
wiki_disable_page_share 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`.
wiki_list_spaces 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`...
wiki_get_space 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....
wiki_get_space_with_pages 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...
wiki_create_space 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...
wiki_update_space 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`.
wiki_delete_space 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`.
wiki_get_public_settings 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`,...
wiki_check_public_slug 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_set_public_settings 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`...
wiki_list_attachments 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...
wiki_request_attachment_upload 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...
wiki_confirm_attachment 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...
wiki_delete_attachment 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...
fr_list_requests 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:...
fr_get_request 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...
fr_create_request 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`.
fr_set_request_status 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`.
fr_comment_request 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`.
fr_vote_request 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`.
fr_moderate_request Approve, reject, or mark a feature request as spam. Action is case-insensitive. Requires `Manage Queue` permission. API-key scope: `feedback:moderation:write`.
fr_delete_request 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`.
fr_list_bugs 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`.
fr_get_bug 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...
fr_create_bug 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`.
fr_set_bug_status Change a bug status by name (lenient match against the board's bug-status set). API-key scope: `feedback:bugs:write`.
fr_set_bug_assignee 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`.
fr_set_bug_visibility Toggle a bug's public visibility. Security bugs stay private regardless. API-key scope: `feedback:bugs:write`.
fr_toggle_bug_affected 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`.
fr_comment_bug Add a comment to a bug report. Pass isInternal=true for internal-only. API-key scope: `feedback:comments:write`.
fr_moderate_bug Approve, reject, or mark a bug as spam. Action is case-insensitive. Requires `Manage Queue` permission. API-key scope: `feedback:moderation:write`.
fr_delete_bug Permanently delete a bug report. Requires `Manage Queue` permission. Irreversible. API-key scope: `feedback:bugs:write`.
pm_get_workspace_context 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...
pm_get_dashboard 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`.
pm_search_tasks 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...
pm_get_task 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...
pm_get_subtasks List the direct subtasks (one level deep) of a parent task by ref. API-key scope: `tasks:read`.
pm_create_task 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:...
pm_update_task 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...
pm_delete_task Delete a task by ref. Cascade-deletes subtasks. Requires FULL access (not just EDIT). Returns 204 on success. API-key scope: `tasks:write`.
pm_list_task_types 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...
pm_bulk_change_task_type 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...
pm_list_task_comments List comments on a task by ref. Cursor-paginated. API-key scope: `tasks:read`.
pm_create_task_comment 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`.
pm_update_task_comment Update an existing comment. Only the original author may edit. API-key scope: `tasks:write`.
pm_delete_task_comment Delete a comment. Only the original author may delete. Returns 204. API-key scope: `tasks:write`.
pm_list_task_relationships List all relationships where the task is owner OR child. Cursor-paginated. API-key scope: `tasks:read`.
pm_create_task_relationship 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`.
pm_delete_task_relationship Delete a relationship by identifier. Returns 204. API-key scope: `tasks:write`.
pm_create_space Create a new space in the current workspace. Description / icon / color / isPrivate are optional metadata. Returns LiteSpaceResponse. API-key scope: `spaces:write`.
pm_create_folder Create a folder inside a space. Space identified by name. API-key scope: `folders:write`.
pm_update_folder Update folder metadata by identifier (fld_…). All fields optional. API-key scope: `folders:write`.
pm_delete_folder Soft-delete a folder and its child lists+tasks. Requires FULL access. 204. API-key scope: `folders:write`.
pm_create_list 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....
pm_update_list Update list metadata by identifier (tl_…). All fields optional. API-key scope: `lists:write`.
pm_delete_list Soft-delete a list and its tasks. Requires FULL access. 204. API-key scope: `lists:write`.
pm_create_custom_field 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...
pm_update_custom_field Update custom-field metadata (name / description / emoji / color / isPrivate). API-key scope: `custom_fields:write`.
pm_delete_custom_field Delete a custom field and all its values. Requires FULL access. 204. API-key scope: `custom_fields:write`.
pm_list_views 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`.
pm_get_view Fetch a view by identifier (vw_…). API-key scope: `views:read`.
pm_create_view 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....
pm_update_view 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...
pm_delete_view Delete a view by identifier. Mandatory views (system-created defaults) return 409 Conflict. Returns 204 on success. API-key scope: `views:write`.
pm_clone_view 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`.
pm_list_sprint_groups 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`.
pm_create_sprint_group 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...
pm_create_sprint 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`.
pm_get_sprint Fetch a sprint by identifier. Returns SprintDTO with task statistics. API-key scope: `sprints:read`.
pm_update_sprint 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`.
pm_delete_sprint Soft-delete a sprint. Tasks lose their sprint association but remain in their lists. 204 on success. API-key scope: `sprints:write`.
pm_start_sprint 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`.
pm_complete_sprint 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...
pm_add_tasks_to_sprint 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`.
pm_remove_tasks_from_sprint Remove task-sprint associations. Tasks remain in their lists. Pass identifiers (tsk_…), not task keys. Returns updated SprintDTO. API-key scope: `sprints:write`.
pm_get_sprint_tasks List all tasks currently in the sprint. Returns an array of full TaskDTO. API-key scope: `sprints:read`.
pm_get_sprint_burndown 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`.
pm_create_webhook Create an outgoing webhook subscription for the current workspace. The response includes a one-time `secret` (HMAC-SHA256 key used to verify the X-Webhook-Signature-256 header on delivery). SAVE THIS SECRET IMMEDIATELY — subsequent...
pm_list_webhooks List all webhook subscriptions registered in the current workspace. The HMAC `secret` is NOT included — only present in the original create response. API-key scope: `webhooks:read`.
pm_get_webhook_usage 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...
pm_get_webhook 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`.
pm_update_webhook 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....
pm_delete_webhook 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`.
pm_test_webhook 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...
pm_list_webhook_deliveries 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...
pm_replay_webhook_delivery 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. Replays use the same payload, signature, and X-Webhook-Delivery...
pm_read_activity_log 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...
pm_list_notifications 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`,...
pm_count_unread_notifications 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`.
pm_mark_notification_read 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`.
pm_mark_all_notifications_read Mark every unread notification in the active workspace as read for the current user. API-key scope: `notifications:write`.
pm_list_time_entries 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`.
pm_log_time 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...
pm_delete_time_entry 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`.
pm_list_saved_filters 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`.
pm_save_filter 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,...
pm_delete_saved_filter 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`.
pm_add_comment_reaction 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...
pm_list_comment_reactions List reactions on a task comment. Page-style pagination (page/size). API-key scope: `tasks:read`.
pm_remove_comment_reaction Remove a reaction by identifier. Only the user who added the reaction may remove it. 204. API-key scope: `tasks:write`.
pm_list_reference_data 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...
pm_get_task_sharing 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,...
pm_configure_task_sharing 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....
pm_create_tag 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...
pm_get_tag Fetch a single tag by identifier. Returns the TagDTO (identifier, name, backgroundColor, textColor). API-key scope: `tags:read`.
pm_update_tag 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`.
pm_delete_tag 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`.
pm_list_teams 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`.
pm_create_team 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`.
pm_get_team Fetch a team by identifier. Returns the full TeamDTO with members. API-key scope: `teams:read`.
pm_update_team 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_delete_team 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`.
pm_add_team_member 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`.
pm_remove_team_member Remove a single user from a team. Returns 204. Requires MANAGE_TEAMS. API-key scope: `teams:write`.
pm_get_current_user 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...
pm_update_current_user 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`.
pm_get_notification_settings 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...
pm_update_notification_channel 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,...
pm_get_workspace_user_avatar_url 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...
pm_list_automations_for_list 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`.
pm_list_automations_for_folder 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`.
pm_list_automations_for_space 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`.
pm_get_automation Fetch a single automation by identifier. Returns the full AutomationDTO including triggers, condition tree, and actions. API-key scope: `automations:read`.
pm_create_automation 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...
pm_update_automation 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...
pm_delete_automation Delete an automation rule. Returns 204. Existing audit log rows are preserved. API-key scope: `automations:write`.
pm_get_automation_audit 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...
pm_list_workspace_members 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...
pm_change_member_role 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...
pm_remove_workspace_member 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...
pm_transfer_workspace_ownership 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...
pm_leave_workspace 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...
pm_list_invitations 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`.
pm_send_invitation 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...
pm_cancel_invitation Revoke a pending workspace invitation by its identifier. Caller needs MANAGE_USERS permission. Returns 204. API-key scope: `users:write`.
pm_list_import_jobs 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...
pm_get_import_job 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`.
pm_confirm_import_mappings 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...
pm_describe_status_priority_level_endpoints 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...
hub_get_workspace 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...
hub_list_members 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....
hub_get_custom_prompt 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...
hub_set_custom_prompt 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...
hub_get_preferred_integration 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.
hub_set_preferred_integration 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.
hub_get_default_workspace 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.
hub_set_default_workspace 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...
hub_list_integrations 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,...
hub_get_recording_progress 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.
hub_regenerate_summary 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...
hub_reprocess_recording 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...
hub_get_audio_url 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...
hub_get_media_url 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.
hub_get_preview_url 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.
hub_list_calls 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.
hub_count_calls Return the total number of calls visible to the actor user. Use to plan pagination. Requires recordings:read scope.
hub_get_call 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...
hub_search_calls Free-text search across call name, description, attendees, and recording transcript content. Returns paginated UserCallDTO results. Requires recordings:read scope.
hub_count_search_calls Count of calls matching a search query. Pair with `hub_search_calls` for paginated UIs. Requires recordings:read scope.
hub_delete_call 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.
hub_send_call_to_jira 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_send_call_to_clickup 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".
hub_send_call_to_airtable 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 =...
hub_list_calendar_events 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 /...
hub_set_event_custom_prompt 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....
hub_clear_event_custom_prompt 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.
hub_set_series_custom_prompt 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.
hub_clear_series_custom_prompt 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...
hub_set_call_custom_prompt 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...
hub_clear_call_custom_prompt 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.
hub_lens_chat 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)....
get_api_catalog 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.
Get alerted when this changes. Email the moment io.github.dutifyai/dutify drifts, dies, or revives.

Status badge

Toolpin status badge for io.github.dutifyai/dutify

[![Toolpin](https://toolpin.dev/badge/io.github.dutifyai/dutify.svg)](https://toolpin.dev/servers/io.github.dutifyai/dutify)

Maintain this server? Add the badge to your README. It links your users to this live status page.