> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dify.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Dify Tools

> Manage tools that enable LLMs to interact with external services and APIs

Add tools to your apps so the LLM can call external services and APIs to access real-time data or perform actions, such as web searches, database queries, or content processing.

Use tools in:

* Workflow / Chatflow apps, as standalone [Tool nodes](/en/self-host/use-dify/nodes/tools) or within [Agent nodes](/en/self-host/use-dify/nodes/agent#tool-configuration)
* [Agent apps](/en/self-host/use-dify/build/agent#extend-the-agent-with-dify-tools)

Manage all your tools from **Integrations** > **Tools**.

## Tool Types

<Tabs>
  <Tab title="Tool Plugin">
    Ready-to-use tools from Dify and the community for common utilities and popular services. Built-in ones like Current Time work out of the box; install more from the [Marketplace](https://marketplace.dify.ai/).

    Some tool plugins, such as Google and GitHub, need authentication first. Set workspace-level credentials in **Integrations** > **Tools** > **Tool Plugin**, or in the tool's settings inside an app or node.
  </Tab>

  <Tab title="Swagger API as Tool">
    Integrate a service that isn't available as a tool plugin by importing its OpenAPI (Swagger) specification.

    Paste the schema, import it from a URL, or start from the provided example, and Dify generates the tool interface for you.
  </Tab>

  <Tab title="Workflow as Tool">
    Turn any Workflow that starts with a User Input node into a tool, so you can reuse multi-step logic across apps. Chatflows cannot be used as tools.

    <Frame>
      <img src="https://mintcdn.com/dify-6c0370d8/gyesM3ime6gTaYSO/images/use-dify/workspace/workflow-as-tool.png?fit=max&auto=format&n=gyesM3ime6gTaYSO&q=85&s=4a69505044abf525c0393b64209a2c60" alt="Workflow as Tool" width="870" height="848" data-path="images/use-dify/workspace/workflow-as-tool.png" />
    </Frame>
  </Tab>

  <Tab title="MCP">
    Connect an [MCP server](https://modelcontextprotocol.io/) to import its tools into Dify. An MCP server wraps external resources, such as databases, file systems, or APIs, and exposes them through a standard interface, so your apps can call them like any other tool.

    <Tip>
      To publish one of your own Dify apps *as* an MCP server instead, see [Publish as an MCP Server](/en/self-host/use-dify/publish/publish-mcp).
    </Tip>

    ### Connect an MCP Server

    <Info>
      Only MCP servers with [HTTP transport](https://modelcontextprotocol.io/docs/learn/architecture#transport-layer) are supported.
    </Info>

    Add a server by providing its URL, a name, and a unique server identifier. Dify connects, authorizes if needed, and imports the server's tools so your apps can call them.

    You can update the tool list later to pull the server's latest tools, though doing so can break an app if a tool it uses is removed or changed.

    <Note>
      * Apps reference a server by its identifier. If you change it later, the server's tools stop working in apps that used the old one; re-add the tools in each affected app to restore them.
      * Exported apps reference servers by identifier too, so to run one in another workspace, recreate the same servers there with matching identifiers.
    </Note>

    ### Authentication

    **Dynamic Client Registration** (on by default) lets Dify obtain OAuth credentials from the server automatically, so you don't register an application yourself. Leave it on whenever the server supports it.

    Turn it off when the server doesn't support automatic registration, or when you must use your team's existing OAuth application. Enter its **Client ID** and **Client Secret**, then register the redirect URL Dify shows.

    ### Advanced Options

    **Custom headers**: Send additional HTTP headers with every request to the server. Commonly used for servers that authenticate with a static token or API key (e.g., `Authorization: Bearer <token>`) rather than OAuth, but applicable whenever the server expects custom headers.

    **Timeouts**: Control how long Dify waits on the server. Raise the request timeout when the server is slow to respond, and the SSE read timeout for long-running, streamed results. Change them only if you hit timeout errors.
  </Tab>
</Tabs>
