Skip to main content
If you’re building your own AI agent, copilot, or workflow runner, you can register individual Duvo Agents as callable tools that your agent invokes when its work enters Duvo’s domain. Your agent stays in control of the overall workflow — Duvo handles the specific operational task and hands the result back.

When to embed Duvo vs. build the capability yourself

Common patterns:
  • An editor-agent reviews a document and delegates any compliance action to a Duvo Agent.
  • A customer copilot triages a request and hands a regulated branch (refund, escalation) to Duvo, where a human can approve it.
  • An internal AI workbench catalogs Duvo Agents as named skills and routes work to them by category.

How it works

Your agent connects to the Duvo MCP server (https://api.duvo.ai/v2/mcp). Every Duvo Public API endpoint is auto-exposed as an MCP tool. Your agent calls those tools to start Runs, poll for completion, respond to human-in-the-loop requests, and collect results — all through a standard MCP interface.
For a guide on connecting your MCP host to the Duvo MCP server and authenticating, see The Duvo MCP server.

Scoping which Agents your agent can call

The Duvo MCP server exposes tools for the full Public API. Your agent can call listAgents to discover all Agents visible to its API key, then filter by name or ID to invoke specific ones. Narrowing scope with API keys: Each API key is scoped to a team and inherits the permissions of the user who created it. To limit a parent agent to a subset of Agents, create a dedicated Duvo user with access only to the relevant Agents and generate an API key for that user. This prevents the parent agent from accidentally discovering or starting Agents it shouldn’t touch. Discovering Agents at startup:

How an Agent appears as a tool

When your agent calls listAgents, each Agent is returned with metadata your agent can use to decide which one to invoke. Here is a trimmed example of the response (additional fields omitted for brevity):
The key fields your agent needs are id, name, and latest_build.revision_description. The name and description come from what was entered in the Duvo dashboard — edit them there to make the Agent self-describing for your agent. Tips for writing agent-friendly Agent metadata:
  • Name: use a verb phrase — “Process Refund Request”, “Triage Support Ticket”, “Update Inventory Record”.
  • Revision description (latest_build.revision_description): explain the input the Agent expects and the output it produces — “Takes a customer complaint email body. Returns a triage decision (escalate / auto-resolve / needs-more-info) with a one-sentence rationale.”
The Agent’s AOP governs what the agent actually does. The name and description only affect how clearly your parent agent can decide when to call it.

Invocation patterns

All Run endpoints are on the base URL https://api.duvo.ai/v2. Starting a Run is team-scoped (POST /teams/{team_id}/runs); reading and responding to a Run is addressed by run_id.
Start a Run, then poll getRun until the status is completed, failed, or stopped. Suitable for short-running Agents (under a few minutes).

Trust and guardrails

What the parent agent can’t do:
  • The parent agent operates under the permissions of its API key. It cannot bypass Connection-level authorization — if the Agent uses a Gmail Connection that the API key’s user can’t access, the Run will fail with a permissions error.
  • The parent agent cannot modify the Agent’s AOP or Connections through an MCP tool call without the corresponding write endpoints, which should be locked down for service accounts.
Audit trail: Every Run started via the API is recorded with the API key’s user identity in the Duvo audit log. If multiple parent agents share the same key, their Runs are indistinguishable. Create separate API keys per parent agent to maintain a clean audit trail. See Audit Log and Activity Tracking for how to export and query the log.
High-risk actions: Agents that take irreversible actions (send emails, delete records, submit transactions) should have Human-in-the-Loop gates in their AOP. A parent agent that responds to HITL requests programmatically bypasses those gates — only do this if your agent has verified the action is safe. See Guardrails for High-Risk Automations for the full risk framework.
Rate limits: All Public API rate limits apply to MCP tool calls: 5,000 requests per minute per API key. Long-polling loops should still sleep between polls (5-30 seconds) to avoid burning through quota during busy periods.

End-to-end example: email triage with a human approval gate

A parent agent monitors an inbound email queue. When it receives a complaint that touches a financial policy, it delegates to a Duvo Agent, waits for a human to approve the proposed response, then sends the final email.
What happens step by step:

Parent agent starts the Run

The parent agent starts a Run on the “Complaint Triage” Agent with the raw email body.

Duvo drafts and pauses

Duvo’s Agent reads the complaint, connects to the order system via its configured Connection, drafts a refund proposal, and pauses — asking an operator to approve before sending.

Parent agent surfaces the request

The parent agent detects waiting, fetches the HITL request, and surfaces the draft to an on-call operator (via a chat message, Slack notification, or UI).

Operator decides

The operator approves or rejects. The parent agent relays that decision back to Duvo.

Duvo completes the Run

Duvo sends the approved response and marks the Run completed.

Parent agent continues

The parent agent reads the final result and continues its own workflow.

The Duvo MCP server

How to configure authentication and connect any MCP-compatible host

Connect a custom MCP to Duvo

The inverse direction: bring your own tools into Duvo Agents

Running Agents via API

Full API reference for Runs, messages, and HITL responses

Guardrails for High-Risk Automations

Risk framework for delegating irreversible actions

Audit Log and Activity Tracking

How to trace which agent started which Run