
Duvo MCP
Connects Claude to Duvo's governed execution platform for retail and CPG operations. Exposes tools for running supplier onboarding, purchase order handling, invoice matching, inventory replenishment, price updates, and master data workflows as durable cases with approval gates and audit trails. Useful when you need an agent to execute multi-step operational work across ERP systems, supplier portals, and internal tools without building your own orchestration layer. Requires API credentials provisioned after technical demo or pilot approval. Duvo runs the actual write operations after human review, so this isn't just read-only data access or suggestion generation.
- tools
- 80
- auth
- Secret needed
- transport
- HTTP
- last updated
- May 24, 2026
Install
From registry metadata$ npx add-mcp https://api.duvo.ai/v1/mcp --name duvo --header 'Authorization: Bearer ${API_TOKEN}'Run in your terminal. add-mcp asks which agents to add it to, then asks for each value it needs. Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add --transport http duvo https://api.duvo.ai/v1/mcp --header 'Authorization: YOUR_AUTHORIZATION'Run in your terminal. Add --scope user to make it available in every project.
Tools
Verified live · 80 toolsVerified live against the running server on Nov 6, 2026.
listAgentMemoryFilesList the memory files stored for an agent.1 params
List the memory files stored for an agent.
agent_id*stringgetAgentMemoryFileGet the contents of a single memory file for an agent.2 params
Get the contents of a single memory file for an agent.
agent_id*stringpath*stringlistPluginCatalogList 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.
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.
No parameters. Call it with no arguments.
createScheduleCreate 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 a...9 params
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 a...
agent_id*stringcronvaluedayvalueday_of_monthvalueenabled*booleanfrequency*stringevery_5_minutes · every_15_minutes · hourly · daily · workday · weeklyrecurringvaluetimevaluetimezone*stringupdateScheduleUpdate 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 rev...10 params
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 rev...
agent_id*stringcronvaluedayvalueday_of_monthvalueenabledbooleanfrequencystringevery_5_minutes · every_15_minutes · hourly · daily · workday · weeklyrecurringvalueschedule_id*stringtimevaluetimezonestringdeleteScheduleDelete 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 a...2 params
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 a...
agent_id*stringschedule_id*stringgetTeamGet a team by ID. The caller must be scoped to the requested team.1 params
Get a team by ID. The caller must be scoped to the requested team.
team_idstringstartNativeOAuthStart 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...4 params
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...
provider*stringreconnect_instance_idstringreturn_urlstringteam_idstringauthorizeMcpOAuthStart 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`.9 params
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`.
custom_integration_idstringintegration_typestringmcp_server_url*stringname*stringoauth_client_idstringoauth_client_secretstringreconnect_instance_idstringreturn_urlstringteam_idstringcheckMcpOAuthProbe 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`. Perf...1 params
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`. Perf...
mcp_server_url*stringlistPulseDashboardsList 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 chan...4 params
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 chan...
after_idstringlimitintegeroffsetintegerscopestringcreated · shared · team · automationdefault: createdcreatePulseDashboardCreate 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 s...4 params
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 s...
connection_idsarraymessage*stringpermissionstringview · editvisibilitystringprivate · teamgetPulseDashboardGet 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.1 params
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.
artifactId*stringgetPulseDashboardHtmlServe a Duvo Pulse dashboard's rendered HTML document (text/html, not JSON). 404 until the first generation turn has produced HTML.1 params
Serve a Duvo Pulse dashboard's rendered HTML document (text/html, not JSON). 404 until the first generation turn has produced HTML.
artifactId*stringgetPulseDashboardPdfRender 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.2 params
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.
artifactId*stringthemestringlight · darkdefault: lightexportPulseDashboardHtmlRender 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.2 params
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.
artifactId*stringthemestringlight · darkdefault: lightupdatePulseDashboardUpdate a Duvo Pulse dashboard's settings — rename it. Only the creator can update it.2 params
Update a Duvo Pulse dashboard's settings — rename it. Only the creator can update it.
artifactId*stringtitle*stringpublishPulseDashboardPublish (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...3 params
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...
artifactId*stringpermissionstringview · editvisibility*stringprivate · team · organizationdeletePulseDashboardDelete a Duvo Pulse dashboard. Only the creator can delete it.1 params
Delete a Duvo Pulse dashboard. Only the creator can delete it.
artifactId*stringduplicatePulseDashboardDuplicate a Duvo Pulse dashboard, producing an idle clone of the current rendered dashboard. The conversation history, shares, and connections are not copied.1 params
Duplicate a Duvo Pulse dashboard, producing an idle clone of the current rendered dashboard. The conversation history, shares, and connections are not copied.
artifactId*stringsendPulseDashboardMessageSend 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 /artifac...5 params
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 /artifac...
artifactId*stringattachmentsarrayfrom_revision_idstringmessage*stringselected_elementobjectcreatePulseDashboardAttachmentUploadUrlIssue 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_...4 params
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_...
artifactId*stringfilename*stringmime_type*stringsize_bytes*integergetPulseDashboardAttachmentDownloadUrlMint 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).2 params
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).
artifactId*stringattachmentId*stringrefreshPulseDashboardTrigger 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.1 params
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.
artifactId*stringstopPulseDashboardMessageStop 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.2 params
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.
artifactId*stringpartial_textstringlistPulseDashboardConnectionsList the connections (data sources) attached to a Duvo Pulse dashboard (requires edit access).1 params
List the connections (data sources) attached to a Duvo Pulse dashboard (requires edit access).
artifactId*stringattachPulseDashboardConnectionAttach one of your connections (data sources) to a Duvo Pulse dashboard so the agent can use its tools (requires edit access).2 params
Attach one of your connections (data sources) to a Duvo Pulse dashboard so the agent can use its tools (requires edit access).
artifactId*stringconnection_id*stringdetachPulseDashboardConnectionDetach a connection (data source) from a Duvo Pulse dashboard (requires edit access).2 params
Detach a connection (data source) from a Duvo Pulse dashboard (requires edit access).
artifactId*stringconnectionId*stringanswerPulseDashboardQuestionAnswer 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.3 params
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.
answers*objectartifactId*stringtoolCallId*stringlistPulseDashboardMessagesList 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 b...3 params
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 b...
artifactId*stringbeforestringlimitintegerlistPulseDashboardCommentsList 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.4 params
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.
artifactId*stringlimitintegeroffsetintegerstatusstringopen · completecreatePulseDashboardCommentStart 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.4 params
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.
artifactId*stringbody*stringelementobjectrevision_idstringcreatePulseDashboardCommentReplyReply 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.3 params
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.
artifactId*stringbody*stringcommentId*stringsetPulseDashboardCommentResolutionMark 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.3 params
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.
artifactId*stringcommentId*stringresolved*booleandeletePulseDashboardCommentDelete 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.2 params
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.
artifactId*stringcommentId*stringlistPulseDashboardVersionsList the version history of a Duvo Pulse dashboard, newest first (requires edit access). Use the version id with the restore and version-render endpoints.1 params
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.
artifactId*stringgetPulseDashboardVersionHtmlServe a specific version's rendered HTML document for a Duvo Pulse dashboard (text/html, requires edit access).2 params
Serve a specific version's rendered HTML document for a Duvo Pulse dashboard (text/html, requires edit access).
artifactId*stringrevisionId*stringrestorePulseDashboardVersionRestore 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.2 params
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.
artifactId*stringrevisionId*stringcreateSandboxCreate 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.
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.
No parameters. Call it with no arguments.
createSandboxUploadUrlGet 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.2 params
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.
path*stringsandbox_id*stringlistSandboxFilesList files in a sandbox directory.2 params
List files in a sandbox directory.
pathstringsandbox_id*stringuploadSandboxFileUpload a file directly to the sandbox. Maximum file size is 10MB. For larger files, use POST /v2/sandboxes/:sandbox_id/upload-urls.1 params
Upload a file directly to the sandbox. Maximum file size is 10MB. For larger files, use POST /v2/sandboxes/:sandbox_id/upload-urls.
sandbox_id*stringgetRunEvaluationGet the latest evaluation analysis for a specific agent run (Run).2 params
Get the latest evaluation analysis for a specific agent run (Run).
agentId*stringrunId*stringgetEvalScoresAggregate evaluation counts and flag distribution for an Assignment's Jobs since the given timestamp.4 params
Aggregate evaluation counts and flag distribution for an Assignment's Jobs since the given timestamp.
agentId*stringrevision_idstringscopestringall · customsince*stringgetEvalRubricsList 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.2 params
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.
agentId*stringbuild_idstringcreateEvalRubricAdd 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 li...5 params
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 li...
agentId*stringbuild_idstringdescription*stringselected_automation_revision_idvaluetitle*stringreplaceEvalRubricsReplace 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. Defa...4 params
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. Defa...
agentId*stringbuild_idstringrubrics*arrayselected_automation_revision_idvalueupdateEvalRubricEdit 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.5 params
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.
agentId*stringdescriptionstringrubricId*stringselected_automation_revision_idvaluetitlestringdeleteEvalRubricRemove a single Agent-specific evaluation rubric. Future Runs on the build are no longer scored against it.3 params
Remove a single Agent-specific evaluation rubric. Future Runs on the build are no longer scored against it.
agentId*stringrubricId*stringselected_automation_revision_idvaluelistAgentSchedulesList 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`.1 params
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`.
agent_id*stringlistAllAgentSchedulesList 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.1 params
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.
agent_id*stringlistAgentCaseTriggersList the case triggers configured for an agent. Each trigger automatically dispatches the agent to run cases added to a queue.1 params
List the case triggers configured for an agent. Each trigger automatically dispatches the agent to run cases added to a queue.
agent_id*stringpreviewAgentCaseTriggerConflictsPreview which other agents would conflict with this agent's case trigger if it pointed at the given queue. Does not modify the trigger.2 params
Preview which other agents would conflict with this agent's case trigger if it pointed at the given queue. Does not modify the trigger.
agent_id*stringcase_queue_id*stringgetAgentCaseTriggerRetrieve a single case trigger by id.2 params
Retrieve a single case trigger by id.
agent_id*stringtrigger_id*stringcreateAgentCaseTriggerCreate a case trigger for an agent. An agent may have at most one case trigger; this returns 409 if one already exists.4 params
Create a case trigger for an agent. An agent may have at most one case trigger; this returns 409 if one already exists.
agent_id*stringcase_queue_id*stringconcurrencyvalueenabled*booleanupdateAgentCaseTriggerUpdate 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.5 params
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.
agent_id*stringcase_queue_idstringconcurrencyvalueenabledbooleantrigger_id*stringdeleteAgentCaseTriggerDelete a case trigger. Only the trigger creator or a builder/admin can delete it.2 params
Delete a case trigger. Only the trigger creator or a builder/admin can delete it.
agent_id*stringtrigger_id*stringlistAgentTriggersList 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).1 params
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).
agentId*stringupsertAgentTriggerCreate 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...5 params
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...
agentId*stringenabledbooleanfilter_configobjectintegration_slug*stringtrigger_type*stringdeleteAgentTriggerPermanently 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.2 params
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.
agentId*stringtriggerId*stringlistAgentTriggerTypesList the trigger types available for an agent, grouped by integration. Use the returned `integration_slug` and `trigger_type` values when creating a trigger.1 params
List the trigger types available for an agent, grouped by integration. Use the returned `integration_slug` and `trigger_type` values when creating a trigger.
agentId*stringcreateAgentSlackTriggerCreate 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 bou...8 params
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 bou...
agent_id*stringchannel_id*stringchannel_name*stringintegration_instance_idstringis_privatebooleanmatch_rule*valueslack_team_idstringtrigger_type*stringlistAgentSlackTriggersList 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.1 params
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.
agent_id*stringupdateSlackTriggerUpdate 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;...6 params
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;...
channel_idstringchannel_namestringenabledbooleanis_privatebooleanmatch_rulevaluetrigger_id*stringlistAgentSlackBoundWorkspacesList 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`.2 params
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`.
agent_id*stringbuild_id*stringdeleteSlackTriggerPermanently 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.1 params
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.
trigger_id*stringacceptRevisionGenerationAccept the reviewed generated configuration and complete the builder run. The saved draft is not activated.3 params
Accept the reviewed generated configuration and complete the builder run. The saved draft is not activated.
build_id*stringbuilder_run_id*stringexpected_started_at*valuegenerateRevisionGenerate 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.10 params
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.
build_id*stringconversationarraydraft_file_idstringdraft_file_idsarrayinsight_indexnumberprevious_build_idstringprocess_idstringprompt*valuerun_idstringselected_automation_revision_idvaluepromoteRevisionPromote 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, or if a draft revision still has an active builder run.3 params
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, or if a draft revision still has an active builder run.
build_id*stringrevision_descriptionvaluerevision_namestringresumeBuilderRunResume a builder run that is waiting for user input2 params
Resume a builder run that is waiting for user input
answers*objectbuilder_run_id*stringcancelBuilderRunCancel a running builder run and pause its sandbox2 params
Cancel a running builder run and pause its sandbox
builder_run_id*stringstatus*stringcreateRevisionCreate a new revision for an existing agent.8 params
Create a new revision for an existing agent.
agent_id*stringconfigvaluehandover_optionsvaluehandover_target_idsvaluehandover_tovaluename*stringselected_automation_revision_idvaluesource_build_idstringdeclineRevisionGenerationDiscard generated changes by restoring checkpoint_config and completing the builder run. The saved draft is not activated.3 params
Discard generated changes by restoring checkpoint_config and completing the builder run. The saved draft is not activated.
build_id*stringbuilder_run_id*stringexpected_started_at*valuegetRevisionGet a revision by ID.2 params
Get a revision by ID.
agent_id*stringbuild_id*stringgetBuilderRunGet the status of a builder run1 params
Get the status of a builder run
builder_run_id*stringgetRevisionBodyRead 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`.5 params
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`.
agent_id*stringbuild_id*stringlengthintegeroffsetintegersection*stringinput · sourcelistAgentRevisionsList 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.5 params
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.
agent_id*stringconfigstringlight · fulllimitintegeroffsetintegerstatusstringdraft · live · historicupdateRevisionUpdate a revision's configuration, name, description, or handover targets. Returns the updated revision.8 params
Update a revision's configuration, name, description, or handover targets. Returns the updated revision.
build_id*stringconfigobjecthandoverOptionsvaluehandoverTargetIdsvaluehandoverTovaluerevision_descriptionvaluerevision_namevalueselected_automation_revision_idvalueduplicateAgentDuplicate 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.8 params
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.
agent_id*stringinclude_aopbooleaninclude_connectionsbooleaninclude_logins_secretsbooleaninclude_memorybooleaninclude_pluginsbooleaninclude_queuebooleaninclude_skills_filesbooleangetAgentGet 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.1 params
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.
agent_id*stringSponsors
Readme
Details
- Repository
- github.com/duvoai/duvo-website-2026
- Website
- www.duvo.ai
- Transport
- HTTP
- Auth
- Required
- Registry
- MCP registry, active
- Resources
- 16
- Tools verified
- Nov 6, 2026