NestDaddy

Duvo MCP

io.github.duvoai/duvo · v2026-05-24

Governed retail, FMCG, and CPG operational tools: runs, cases, approvals, audit-ready execution.

Connect Remote server

Terminal
claude mcp add --transport http duvo https://api.duvo.ai/v1/mcp --header "Authorization: Bearer <YOUR_API_KEY>"
~/.cursor/mcp.json
{
  "mcpServers": {
    "duvo": {
      "url": "https://api.duvo.ai/v1/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_API_KEY>"
      }
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "duvo": {
      "type": "http",
      "url": "https://api.duvo.ai/v1/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_API_KEY>"
      }
    }
  }
}
Claude Desktop
Settings > Connectors > Add custom connector
URL: https://api.duvo.ai/v1/mcp

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

  • listAgentMemoryFiles

    List the memory files stored for an agent.

  • getAgentMemoryFile

    Get the contents of a single memory file for an agent.

  • listPluginCatalog

    List plugins that can be referenced by name in a build's plugins array. Builds may also reference any public GitHub repository URL (https://github.com/owner/repo) as a plugin; those are not enumerated here.

  • createSchedule

    Create a schedule for an agent. The schedule fires against the agent's live build. The authenticated user owns the schedule. On a team with revisions, a repeating schedule for an Agent in an automation joins that automation's revisions: one matching a schedule the automation alr…

  • updateSchedule

    Update fields on an existing schedule. Only supplied fields are changed; omitted fields retain their current values. Owners may update their own schedules; team superadmins may update any schedule on agents in the current team. A schedule that belongs to an automation with revis…

  • deleteSchedule

    Delete a schedule. Owners may delete their own schedules; team superadmins may delete any schedule on agents in the current team. Deleting a schedule that belongs to an automation with revisions stops it for its owner at once; the automation's revisions keep the schedule for any…

  • getTeam

    Get a team by ID. The caller must be scoped to the requested team.

  • startNativeOAuth

    Start an OAuth-based connection with a native provider (Gmail, Google Sheets, Outlook, etc.). The provider path parameter is the native OAuth provider key from listIntegrations, not the integration type. Returns an authorization URL that must be opened in a browser by a human en…

  • authorizeMcpOAuth

    Start an OAuth-based connection with a remote MCP server using Dynamic Client Registration. Returns an authorization URL the user must open in a browser; once they grant consent, Duvo creates the matching connection and redirects the browser to the optional `returnUrl`.

  • checkMcpOAuth

    Probe an MCP server URL to discover whether it supports OAuth Dynamic Client Registration. Returns the authorization endpoint and required scopes when supported. Useful as a precursor to `/v2/teams/:team_id/connections/oauth/mcp/start` or `/v2/teams/:team_id/connections`. Perfor…

  • listPulseDashboards

    List your Duvo Pulse dashboards (live, agent-generated visualizations of your Duvo data). Ordered most recently updated first, except scope=automation, which is ordered by creation time (then id) so the whole scope can be read with the after_id cursor without a concurrent change…

  • createPulseDashboard

    Create a new Duvo Pulse dashboard from a natural-language prompt (e.g. 'open cases by queue this week') and dispatch the first generation turn. Generation is asynchronous — poll GET /artifacts/{artifactId} until status is completed. The dashboard is private to you unless you set…

  • getPulseDashboard

    Get a Duvo Pulse dashboard's metadata and generation status. When status is completed and html_code_present is true, fetch the rendered HTML from GET /artifacts/{artifactId}/render; the conversation is served by GET /artifacts/{artifactId}/messages.

  • getPulseDashboardHtml

    Serve a Duvo Pulse dashboard's rendered HTML document (text/html, not JSON). 404 until the first generation turn has produced HTML.

  • getPulseDashboardPdf

    Render a Duvo Pulse dashboard to a PDF document (application/pdf, not JSON). 404 until the first generation turn has produced HTML; 409 for an openui dashboard, whose substrate this exporter cannot render.

  • exportPulseDashboardHtml

    Render a Duvo Pulse dashboard to a self-contained static HTML snapshot (text/html, data baked in). 404 until the first generation turn has produced HTML; 409 for an openui dashboard, whose substrate this exporter cannot render.

  • updatePulseDashboard

    Update a Duvo Pulse dashboard's settings — rename it. Only the creator can update it.

  • publishPulseDashboard

    Publish (share) a Duvo Pulse dashboard to your whole team or your whole organization, or revert it to private (creator only). When publishing, set permission to 'view' (teammates see the dashboard) or 'edit' (teammates can also iterate on it); organization-wide viewers outside t…

  • deletePulseDashboard

    Delete a Duvo Pulse dashboard. Only the creator can delete it.

  • duplicatePulseDashboard

    Duplicate a Duvo Pulse dashboard, producing an idle clone of the current rendered dashboard. The conversation history, shares, and connections are not copied.

  • sendPulseDashboardMessage

    Send an instruction to iterate on a Duvo Pulse dashboard (e.g. 'make it a bar chart', 'filter to last 14 days'). The creator can always iterate; teammates can too when the Pulse is published to the team with edit access. The agent regenerates asynchronously — poll GET /artifacts…

  • createPulseDashboardAttachmentUploadUrl

    Issue a presigned upload URL for a file to attach to a Duvo Pulse dashboard message (e.g. an HTML dashboard to copy, or a screenshot to match). POST the file bytes to the returned upload_url as multipart form data under the field name 'file', then pass the returned attachment_id…

  • getPulseDashboardAttachmentDownloadUrl

    Mint a short-lived presigned URL to download or preview a file attached to a Duvo Pulse dashboard message. Returns 404 once the dashboard's sandbox has expired and the file is gone (about 12 hours).

  • refreshPulseDashboard

    Trigger an on-demand data refresh of a Duvo Pulse dashboard. The dashboard regenerates its connection-sourced values in the background — poll GET /artifacts/{artifactId} for status.

  • stopPulseDashboardMessage

    Stop an in-flight Duvo Pulse generation turn. Requires edit access to the dashboard. Flips the dashboard to 'interrupted' and keeps any streamed-so-far reply; stopping when nothing is generating is a successful no-op.

  • listPulseDashboardConnections

    List the connections (data sources) attached to a Duvo Pulse dashboard (requires edit access).

  • attachPulseDashboardConnection

    Attach one of your connections (data sources) to a Duvo Pulse dashboard so the agent can use its tools (requires edit access).

  • detachPulseDashboardConnection

    Detach a connection (data source) from a Duvo Pulse dashboard (requires edit access).

  • answerPulseDashboardQuestion

    Answer a pending question the Duvo Pulse agent asked and resume the paused run (creator or team editors). Use the toolCallId from the dashboard's message transcript.

  • listPulseDashboardMessages

    List the chat transcript of a Duvo Pulse dashboard's live version (requires edit access). Returns the most recent page by default, oldest first within the page; pass `before` (a message id from a previous page) to walk back through older messages. Messages from other version bra…

  • listPulseDashboardComments

    List the comment threads on a Duvo Pulse dashboard (requires view access). Each thread carries its author, the dashboard element it is pinned to, its replies oldest-first, and whether it has been marked complete.

  • createPulseDashboardComment

    Start a comment thread on a Duvo Pulse dashboard (requires view access). Pass `element` — captured from the dashboard canvas — to pin the thread to one element; omit it for a comment on the dashboard as a whole.

  • createPulseDashboardCommentReply

    Reply to a comment thread on a Duvo Pulse dashboard (requires view access). `commentId` must be a thread root; threads are one level deep. A thread already marked complete still accepts replies and stays complete.

  • setPulseDashboardCommentResolution

    Mark a Duvo Pulse dashboard comment thread complete, or reopen it (requires view access). Pass the target state in `resolved`; the call is idempotent, and the response carries the thread with `resolved_at` and `resolved_by` set or cleared.

  • deletePulseDashboardComment

    Delete a comment or reply on a Duvo Pulse dashboard. Allowed for the comment's author and for the dashboard's creator. Deleting a thread root keeps its replies, rendered under a deleted opening comment.

  • listPulseDashboardVersions

    List the version history of a Duvo Pulse dashboard, newest first (requires edit access). Use the version id with the restore and version-render endpoints.

  • getPulseDashboardVersionHtml

    Serve a specific version's rendered HTML document for a Duvo Pulse dashboard (text/html, requires edit access).

  • restorePulseDashboardVersion

    Restore a previous version of a Duvo Pulse dashboard, making it live again (requires edit access). Non-destructive — it moves the head pointer to the chosen version.

  • createSandbox

    Create a new sandbox for file uploads. The returned sandbox_id can be passed to POST /v2/teams/:team_id/runs to stage data for a run.

  • createSandboxUploadUrl

    Get a presigned URL for uploading a file into a sandbox. Use for files larger than 10MB; smaller files can be uploaded directly via POST /v2/sandboxes/:sandbox_id/files.

  • listSandboxFiles

    List files in a sandbox directory.

  • uploadSandboxFile

    Upload a file directly to the sandbox. Maximum file size is 10MB. For larger files, use POST /v2/sandboxes/:sandbox_id/upload-urls.

  • getRunEvaluation

    Get the latest evaluation analysis for a specific agent run (Run).

  • getEvalScores

    Aggregate evaluation counts and flag distribution for an Assignment's Jobs since the given timestamp.

  • getEvalRubrics

    List the evaluation rubrics a Run is scored against: the platform default rubrics plus the Agent-specific rubrics for a build. Defaults to the Agent's live build; pass build_id to target the revision a specific Run ran against.

  • createEvalRubric

    Add one Agent-specific evaluation rubric to a build. A build may hold at most 5 custom rubrics by default (25 on teams with the newer rubric generator enabled); this fails with 409 once the build's ceiling is reached, and the error message states it. Defaults to the Agent's live…

  • replaceEvalRubrics

    Replace a build's entire Agent-specific evaluation rubric set in one call (at most 5 rubrics by default, 25 on teams with the newer rubric generator enabled). Existing custom rubrics are removed and the supplied list becomes the new set; pass an empty array to clear them. Defaul…

  • updateEvalRubric

    Edit a single Agent-specific evaluation rubric's title and/or description. The edit produces a NEW rubric (with a new id and slug) so previously scored Runs stay attributed to the original criterion; the response contains the new rubric.

  • deleteEvalRubric

    Remove a single Agent-specific evaluation rubric. Future Runs on the build are no longer scored against it.

  • listAgentSchedules

    List the schedules you own on an agent. Returns only your own schedules, whoever you are. Callers with an elevated team role can read every member's schedules on the agent, including who created each one, via `GET /agents/{agent_id}/schedules/all`.

  • listAllAgentSchedules

    List every team member's schedules on an agent, including who created each one. Requires an elevated team role; callers without one receive 403 and should use `GET /agents/{agent_id}/schedules`, which returns only the schedules they own.

  • listAgentCaseTriggers

    List the case triggers configured for an agent. Each trigger automatically dispatches the agent to run cases added to a queue.

  • previewAgentCaseTriggerConflicts

    Preview which other agents would conflict with this agent's case trigger if it pointed at the given queue. Does not modify the trigger.

  • getAgentCaseTrigger

    Retrieve a single case trigger by id.

  • createAgentCaseTrigger

    Create a case trigger for an agent. An agent may have at most one case trigger; this returns 409 if one already exists.

  • updateAgentCaseTrigger

    Update fields on a case trigger. Only the trigger creator or a builder/admin can disable an enabled trigger or change its queue, and only a builder/admin can change queue concurrency.

  • deleteAgentCaseTrigger

    Delete a case trigger. Only the trigger creator or a builder/admin can delete it.

  • listAgentTriggers

    List the trigger definitions the authenticated user owns on an agent (Agent in the Duvo UI). Triggers start a Run automatically when an external event fires (e.g. an email arrives or a Linear issue is created).

  • upsertAgentTrigger

    Create or update the authenticated user's trigger for an integration on an agent. The integration must already be connected to the agent (its OAuth connection set up in the Duvo dashboard). Set `enabled: false` to pause a trigger without deleting it. An agent holds one trigger p…

  • deleteAgentTrigger

    Permanently delete one of your own event triggers on an agent. The agent stops starting Runs for that event and the trigger's filter config is lost. To keep the trigger but stop it firing, upsert it with `enabled: false` instead.

  • listAgentTriggerTypes

    List the trigger types available for an agent, grouped by integration. Use the returned `integration_slug` and `trigger_type` values when creating a trigger.

  • createAgentSlackTrigger

    Create a Slack channel trigger on an agent (Agent in the Duvo UI): the agent starts a Run whenever a matching message is posted in the channel. An agent can carry one trigger per channel, so call this once per channel. The Slack workspace must be installed for the team AND bound…

  • listAgentSlackTriggers

    List the Slack channel triggers you own on an agent (Agent in the Duvo UI), oldest first. Each trigger's `filter_config` carries the watched `channelId`, `channelName`, Slack `workspaceId`, and `matchRule`. Capped at 100 triggers per agent.

  • updateSlackTrigger

    Update a Slack channel trigger you own — repoint it at another channel, change which messages match, or pause and resume it with `enabled`. Only the supplied fields change. Resuming a paused trigger requires the Slack connection it runs off to still be available on the agent; ch…

  • listAgentSlackBoundWorkspaces

    List the Slack workspaces bound to an agent build that you can create channel triggers for. Creating a Slack channel trigger for any other workspace is rejected, so start here to pick a valid `slack_team_id` and `integration_instance_id`.

  • deleteSlackTrigger

    Permanently delete a Slack channel trigger you own. The agent stops starting Runs for that channel. To keep the trigger but stop it firing, update it with `enabled: false` instead.

  • acceptRevisionGeneration

    Accept the reviewed generated configuration and complete the builder run. The saved draft is not activated.

  • generateRevision

    Generate agent instructions or code into a saved draft. Poll the returned builder run, answer questions if requested, then accept or decline the reviewed checkpoint. This never activates the revision.

  • promoteRevision

    Promote a draft or historic revision to the live version. The live revision is the one used by triggers and new runs. Fails if the revision is already live, if a draft revision still has an active builder run, or with 409 if the agent's automation runs as the team and the revisi…

  • resumeBuilderRun

    Resume a builder run that is waiting for user input

  • cancelBuilderRun

    Cancel a running builder run and pause its sandbox

  • createRevision

    Create a new revision for an existing agent.

  • declineRevisionGeneration

    Discard generated changes by restoring checkpoint_config and completing the builder run. The saved draft is not activated.

  • getRevision

    Get a revision by ID.

  • getBuilderRun

    Get the status of a builder run

  • getRevisionBody

    Read one section of a revision's config as plain text, in character ranges: the AOP (`input`) or the code-step program (`source`). Use it instead of getRevision when the text is large; listAgents with `config=light` reports each agent's `input_chars` and `source_chars`.

  • listAgentRevisions

    List revisions for an agent. Pass `config=light` to leave each revision's config out of the page and get its sizes instead; read the AOP with getRevisionBody.

  • updateRevision

    Update a revision's configuration, name, description, or handover targets. Returns the updated revision.

  • duplicateAgent

    Duplicate an existing agent into a new agent named "Copy of <name>", carrying over its configuration. Use the include_* flags in the (optional) body to control what is copied; all default on except memory. Requires the Lead Builder team role or above.

  • getAgent

    Get an agent by ID. The response carries no revision config: use listAgentRevisions and getRevision for a revision, and getRevisionBody to read a large AOP in character ranges.

Headers

NameDescription
Authorization
Required, secret
Bearer token for an approved Duvo workspace.

Details

Endpointhttps://api.duvo.ai/v1/mcp (Streamable HTTP)
First published24 May 2026
Last updated24 May 2026
Registry nameio.github.duvoai/duvo

More security servers See all

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