A tool plugin uses two YAML files: a provider file that declares credentials and lists the tools, and one tool file per callable tool. See General Specifications for the full schema.Create provider/flomo.yaml:
identity: author: yourname name: flomo label: en_US: Flomo Note zh_Hans: Flomo 浮墨笔记 description: en_US: Add notes to your Flomo account directly from Dify. zh_Hans: 直接从 Dify 添加笔记到您的 Flomo 账户。 icon: icon.pngcredentials_for_provider: api_url: type: secret-input required: true label: en_US: API URL zh_Hans: API URL placeholder: en_US: https://flomoapp.com/iwh/{token}/{secret}/ help: en_US: Flomo API URL from your Flomo account settings. zh_Hans: 从您的 Flomo 账户设置中获取的 API URL。tools: - tools/flomo.yamlextra: python: source: provider/flomo.py
Create tools/flomo.yaml:
identity: name: flomo author: yourname label: en_US: Save to Flomo zh_Hans: 保存到 Flomodescription: human: en_US: Save the conversation content as a Flomo note. zh_Hans: 将对话内容保存为 Flomo 笔记。 llm: > Saves content to the user's Flomo account. Use this tool when the user asks to save, capture, or remember the current message. Takes a single `content` parameter containing the text to save.parameters: - name: content type: string required: true label: en_US: Note content zh_Hans: 笔记内容 human_description: en_US: Content to save as a note in Flomo. zh_Hans: 要保存为 Flomo 笔记的内容。 llm_description: The text to save as a Flomo note. form: llmextra: python: source: tools/flomo.py
Create a utility module in utils/flomo_utils.py for API interaction:
import requestsdef send_flomo_note(api_url: str, content: str) -> None: """ Send a note to Flomo via the API URL. Raises requests.RequestException on network errors, and ValueError on invalid status codes or input. """ api_url = api_url.strip() if not api_url: raise ValueError("API URL is required and cannot be empty.") if not api_url.startswith('https://flomoapp.com/iwh/'): raise ValueError( "API URL should be in the format: https://flomoapp.com/iwh/{token}/{secret}/" ) if not content: raise ValueError("Content cannot be empty.") headers = {'Content-Type': 'application/json'} response = requests.post(api_url, json={"content": content}, headers=headers, timeout=10) if response.status_code != 200: raise ValueError(f"API URL is not valid. Received status code: {response.status_code}")
You can find your debug URL and key in the Dify dashboard: click the Plugins icon in the top-right corner, then click the debug icon. Copy the API Key and Host Address (the host already includes the port).
2
Install dependencies and run
pip install -r requirements.txtpython -m main
Your plugin will connect to your Dify instance in debug mode.
3
Test functionality
In your Dify instance, navigate to plugins and find your debugging plugin (marked as “debugging”).
Add your Flomo API credentials and test sending a note.
You’ve built a functioning Dify plugin that connects with an external API service! This same pattern works for integrating with thousands of services - from databases and search engines to productivity tools and custom APIs.
Documentation
Write your README.md in English (en_US) describing functionality, setup, and usage examples
Localization
Create additional README files like readme/README_zh_Hans.md for other languages