---
title: "Tools: MCP servers, custom code, and built-in capabilities"
description: "Connect your MCP servers and Python code once, then assign them to agents that also get built-in web research and code execution."
lang: en
lastUpdated: 2026-10-23
url: https://duale.ai/en/product/tools
---

<Hero
  eyebrow="Tools"
  title={
<>
  AI agents that work through your MCP servers, <AccentText>under your own rules.</AccentText>
</>
}
  subtitle="Connect your MCP servers and your own code once, then choose which agents use them. Web research and code execution come built in. Each Task returns one result your team can use."
  primaryCta={{ label: "Plan your first use case with us", dialog: "contact" }}
  secondaryCta={{ label: "Start with the Python SDK", href: "https://duale.ai/en/docs/sdk.md" }}
/>

<Section title="Equip each agent for its work" subtitle="Your agents read and update your systems, research the web and run calculations.">
  <CardGrid columns={2}>
    <Card title="Your MCP servers" icon="layers" href="https://duale.ai/en/docs/tools/mcp-connections.md">
      Connect the servers your teams and vendors already run, then give their Tools to the agents that need them.
    </Card>

    <Card title="Your own code" icon="code" href="https://duale.ai/en/docs/sdk/tools.md">
      Turn the Python functions in your application into Tools. Every change they make follows your business rules.
    </Card>

    <Card title="Built-in Web research" icon="globe" href="https://duale.ai/en/docs/web.md">
      Every Task can search the public web, read the pages it needs and cite them in its result.
    </Card>

    <Card title="Built-in code execution" icon="lightning-bolt" href="https://duale.ai/en/docs/agent-harness/code-execution.md">
      Every Task can run Python or JavaScript to calculate, compare and transform data. Each run is isolated from your
      systems.
    </Card>
  </CardGrid>
</Section>

<Section title="Connect once, reuse everywhere" subtitle="Every new use case starts with its Tools in place, because your platform team connects each system for the whole company.">
  <CardGrid columns={3}>
    <Card title="One MCP Connection per system" icon="commit">
      Connect each MCP server once, with its own credentials. Every agent you assign uses that connection, so no
      application team rebuilds the integration.
    </Card>

    <Card title="You choose the agents" icon="lock-closed">
      Give each agent only the systems its work needs. Your support agent reaches the service desk, and your finance
      agent reaches the ERP.
    </Card>

    <Card title="Access changes without a release" icon="check">
      In the Dashboard, allow or block an MCP Connection's calls, or remove an agent from it. Every Task picks up the
      change at its next step.
    </Card>
  </CardGrid>

  Each agent uses its Tools under [its own identity](https://duale.ai/en/product/identity-and-access.md). [Usage
  analytics](https://duale.ai/en/product/usage-analytics.md) shows the success rate of each MCP Connection. For your company documents,
  agents use [Libraries](https://duale.ai/en/product/libraries.md).
</Section>

<Section title="Reach systems that only your network can see" subtitle="Your own code runs next to your private systems and decides each change before it happens.">
  Your ERP, databases and internal tools stay private. Your Python functions run in your own application, inside your
  network, and your application opens the connection to Duale AI. The functions read and update those systems with your
  own permissions. When a change needs a person's decision, your function can record it as a proposal for that person to
  approve.

  ```mermaid
  flowchart LR
      accTitle: How an agent reaches your private systems
      accDescr {
        Inside your network, your Python functions apply your rules to your
        private systems and open an outbound connection. Your MCP servers, Web
        research and code execution complete the Tools you gave the agent. Each
        delegated Task uses those Tools and returns one result to your team.
      }

      Systems["Your private systems"]
      Functions["Your Python functions, inside your network"]
      MCP["Your MCP servers"]
      BuiltIn["Web research and code execution"]
      Tools["The Tools you gave this agent"]
      Task["Delegated Task"]
      Result["One result for your team"]

      Functions -->|apply your rules| Systems
      Functions -->|outbound connection| Tools
      MCP --> Tools
      BuiltIn --> Tools
      Tools --> Task
      Task --> Result
  ```
</Section>

<Section title="See every source at work in one Task" subtitle="Illustrative example. A sales team delegates the quarterly review of a key account before its renewal.">
  In one Task, the agent reads the open tickets in your service desk through its MCP server. Your own function returns
  the usage and invoices from your ERP. Web research finds the customer's latest public news, and code execution
  calculates the quarter's trends. The account manager receives one review:

  - **Usage**: up 14% on the previous quarter.
  - **Support**: three open tickets, all about delivery times; the oldest is 12 days old.
  - **News**: the customer announced a new distribution site on 2 October, with a link to its press release.
  - **Next step**: a volume tier at renewal, recorded by your function as a proposal for the account manager to approve.
</Section>

<Section title="Start with work that spans your systems" subtitle="Your systems, Web research and code execution, combined in the work your teams hand over.">
  <CardGrid columns={2}>
    <Card title="Sales" icon="file-text" href="https://duale.ai/en/use-cases/sales.md">
      Get a sourced brief on each account before the meeting, with the new facts recorded in your CRM. Your own code
      makes every write to your records.
    </Card>

    <Card title="Due diligence" icon="globe" href="https://duale.ai/en/use-cases/finance/due-diligence.md">
      Get one due diligence memo with every finding sourced. Web research covers the press, and the figures are
      calculated from the accounts.
    </Card>
  </CardGrid>
</Section>

<Section title="Before you open your systems to your agents">
  <CardGrid columns={3}>
    <Card title="One fixed price per Task" icon="check">
      A standard Task costs €0.10 and a fast Task €0.20, excluding VAT. [See pricing](https://duale.ai/en/product/pricing.md)
    </Card>

    <Card title="Your choice of hosting" icon="globe">
      Use the managed service, hosted in the European Union, or run the Platform in your own infrastructure.
    </Card>

    <Card title="Unlimited agents" icon="person">
      Add agents as your teams and use cases grow.
    </Card>
  </CardGrid>
</Section>

## Questions about Tools

### Can an agent's Tools use a test copy before our live systems

Yes. The agent can work on a test copy, such as your CRM sandbox, before you grant it the live system. [See which
systems your agents can count on in Usage analytics](https://duale.ai/en/product/usage-analytics.md), then [see when to create
separate connections](https://duale.ai/en/docs/tools/mcp-connections.md#before-you-create-the-connection).

### Do our MCP servers keep their own access rules when our agents call them

Yes. The permissions you set in your own system keep applying, whichever agent calls your MCP server. [See how
Identity and access limits each agent](https://duale.ai/en/product/identity-and-access.md), then [see which account reaches each
server](https://duale.ai/en/docs/tools/mcp-connections.md#know-which-identity-reaches-the-server).

### Can we see what an agent did in our systems

Yes. In the Dashboard, each Task shows every call it made to your Tools and how each one ended. [See how Usage
analytics follows each Task](https://duale.ai/en/product/usage-analytics.md), then [read what each outcome
means](https://duale.ai/en/docs/agent-harness.md#read-a-tool-call-outcome).

### Does a Task cost more when it calls more Tools

No. A Task keeps its fixed price, standard or fast, Web research and code execution included. [See the price per
Task](https://duale.ai/en/product/pricing.md), then [see the Tools built into every Task](https://duale.ai/en/docs/tools.md#built-in-tools).

<Cta title="Connect your first system, then delegate the work that needs it." primaryCta={{ label: "Plan your first use case with us", dialog: "contact" }} secondaryCta={{ label: "Start with the Python SDK", href: "https://duale.ai/en/docs/sdk.md" }} />

## Related content

- [Create and manage MCP Connections](https://duale.ai/en/docs/tools/mcp-connections.md)
- [Tool limits: Source, MCP catalog, and Agent Identity](https://duale.ai/en/docs/tools/limits.md)
- [Tools: sources, Built-in Tools, and source choice](https://duale.ai/en/docs/tools.md)
- [Documentation: integration, capabilities, and limits](https://duale.ai/en/docs.md)
- [Connect an MCP client to the documentation server](https://duale.ai/en/docs/mcp.md)
- [MCP server compatibility, authentication, and call contract](https://duale.ai/en/docs/tools/reference.md)

---

## Sitemap

See the full [Markdown sitemap](https://duale.ai/sitemap.md) for all pages.
