NestDaddy

Dutify

io.github.dutifyai/dutify · v0.1.2

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

Connect Remote server

Terminal
claude mcp add --transport http dutify https://mcp.dutify.ai --header "X-API-Key: <X_API_KEY>"
~/.cursor/mcp.json
{
  "mcpServers": {
    "dutify": {
      "url": "https://mcp.dutify.ai",
      "headers": {
        "X-API-Key": "<X_API_KEY>"
      }
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "dutify": {
      "type": "http",
      "url": "https://mcp.dutify.ai",
      "headers": {
        "X-API-Key": "<X_API_KEY>"
      }
    }
  }
}
Claude Desktop
Settings > Connectors > Add custom connector
URL: https://mcp.dutify.ai

Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.

Tools 80 found in our last check

  • 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 keys are not returned. In single-account mo…

  • 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 concrete reference of what the doc shape looks l…

  • 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_get_page to read one). To ANSWER a question FROM…

  • 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 you can cite it. Each result has pageSlug, pa…

  • 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 webUrl: a browser link requiring normal wo…

  • 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 access. Use it for citations; it does not m…

  • 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 express — banners, collapsibles, mermaid diagrams…

  • 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, collapsibles, mermaid, etc.); call get_endpo…

  • 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); `newParent` is the slug of the new parent page…

  • 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 /v1/workspaces/{workspaceIdentifier}/wiki/spaces/{spaceKey}/pages/{slug}` with optional `?permanent=true`. Defau…

  • 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 with the URL read just that one page — distinc…

  • 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 auto-generate). Optional `showAuthor` toggles aut…

  • 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` booleans for quick gating. Call this first when…

  • 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. API-key scope: `wiki:spaces:read`.

  • 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 reactions, the caller's effectivePermissio…

  • 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 human display name. Defaults: `isPublic: true…

  • 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`, `showAuthor`, `viewMode` ("space"|"helpcenter…

  • 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:spaces:read`.

  • 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` (true = publish to the web, false = take off…

  • 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 `id`, not the slug). Use to find an attach…

  • 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 upload — sending the EXACT same `Content-Typ…

  • 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 scope: `wiki:attachments:write`.

  • 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 needed. API-key scope: `wiki:attachments:write`.

  • 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: `feedback:requests:read`.

  • 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 Internal Data` permission. API-key scope: `fe…

  • 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 populated only for `View Internal Data` pe…

  • 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 starting in a new workspace. Folders nest at…

  • 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 page of LiteTaskResponse — pass nextCursor bac…

  • 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 query param is required — the MCP injects it au…

  • 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: status/priority/level/taskType are names; assignees are emails…

  • 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 type and nothing else, prefer this with `tas…

  • 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 setting a default with pm_set_default_task_type. AP…

  • pm_set_default_task_type

    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. Exi…

  • 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 (e.g. "Bug") or null to clear the type. Ret…

  • 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. For icon, prefer a semantic emoji name first;…

  • 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 `options` as an array of {value, color?, emoj…

  • 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. ALWAYS pass `columns` listing exactly what…

Headers

NameDescription
X-API-Key
Required, secret
Dutify personal key (du_live_...) from your account settings

Details

Endpointhttps://mcp.dutify.ai (Streamable HTTP)
First published9 Nov 2026
Last updated9 Nov 2026
Registry nameio.github.dutifyai/dutify

More productivity servers See all

Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.