--- dimensions: type: primary: implementation detail: advanced level: intermediate standard_title: Reverse Invocation Tool language: en title: Tool description: This document details how plugins can reverse invoke Tool services within the Dify platform. It covers three types of tool invocation methods calling installed tools (Built-in Tool), calling Workflow as Tool, and calling custom tools (Custom Tool). Each method includes corresponding entry points and interface parameter descriptions. --- Reverse invoking a Tool means that a plugin can call other tool-type plugins within the Dify platform. If you are unfamiliar with the basic concepts of reverse invocation, please first read [Reverse Invocation of Dify Services](/plugin-dev-en/9241-reverse-invocation.mdx). Consider the following scenarios: * A tool-type plugin has implemented a function, but the result is not as expected, requiring post-processing of the data. * A task requires a web scraper, and you want the flexibility to choose the scraping service. * You need to aggregate results from multiple tools, but it's difficult to handle using a Workflow application. In these cases, you need to call other existing tools within your plugin. These tools might be from the marketplace, a self-built Workflow as a Tool, or a custom tool. These requirements can be met by calling the `self.session.tool` field of the plugin. ### Calling Installed Tools Allows the plugin to call various tools installed in the current Workspace, including other tool-type plugins. **Entry Point** ```python self.session.tool ``` **Interface** ```python def invoke_builtin_tool( self, provider: str, tool_name: str, parameters: dict[str, Any] ) -> Generator[ToolInvokeMessage, None, None]: pass ``` Here, `provider` is the plugin ID plus the tool provider name, formatted like `langgenius/google/google`. `tool_name` is the specific tool name, and `parameters` are the arguments passed to the tool. ### Calling Workflow as Tool For more information on Workflow as Tool, please refer to the [Tool Plugin documentation](/plugin-dev-en/0222-tool-plugin.mdx). (Note: Original link `/plugin-dev-zh/9223-tool` does not exist in English list, linked to closest match). **Entry Point** ```python self.session.tool ``` **Interface** ```python def invoke_workflow_tool( self, provider: str, tool_name: str, parameters: dict[str, Any] ) -> Generator[ToolInvokeMessage, None, None]: pass ``` In this case, `provider` is the ID of this tool, and `tool_name` is specified during the creation of the tool. ### Calling Custom Tool **Entry Point** ```python self.session.tool ``` **Interface** ```python def invoke_api_tool( self, provider: str, tool_name: str, parameters: dict[str, Any] ) -> Generator[ToolInvokeMessage, None, None]: pass ``` Here, `provider` is the ID of this tool, and `tool_name` is the `operation_id` from the OpenAPI specification. If it doesn't exist, it's the `tool_name` automatically generated by Dify, which can be found on the tool management page. ## Related Resources - [Reverse Invocation of Dify Services](/plugin-dev-en/9241-reverse-invocation.mdx) - Understand the fundamental concepts of reverse invocation - [Reverse Invocation App](/plugin-dev-en/9242-reverse-invocation-app.mdx) - Learn how to call Apps within the platform - [Reverse Invocation Model](/plugin-dev-en/9242-reverse-invocation-model.mdx) - Learn how to call model capabilities within the platform - [Tool Plugin Development Guide](/plugin-dev-en/0211-getting-started-dify-tool.mdx) - Learn how to develop tool plugins - [Advanced Tool Plugins](/plugin-dev-en/0222-tool-plugin.mdx) - Learn about advanced features like Workflow as Tool (Note: Original link `/plugin-dev-zh/9223-tool` does not exist in English list, linked to closest match) {/* Contributing Section DO NOT edit this section! It will be automatically generated by the script. */} --- [Edit this page](https://github.com/langgenius/dify-docs/edit/main/plugin-dev-en/9242-reverse-invocation-tool.mdx) | [Report an issue](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml)