Login

Plugin Development Guide

Extend ModelFlow's capabilities. Build tools, commands, and integrations that every model can call.

What is a ModelFlow Plugin?

A plugin is a ModelFlow extension module that provides universal capabilities to all AI models. It can be a CLI tool, an API integration, or an automation script. Plugins communicate with ModelFlow through standardized interfaces, callable by any model — OpenAI, DeepSeek, Kimi, and more.

Plugin Types

🔧 Command Plugin

Expose CLI commands to models. Invoke explicitly with /tool-name in chat, or let models auto-select in workflows.

🔗 Integration Plugin

Connect external services — databases, cloud storage, SaaS APIs. Models can query data, create resources, trigger flows.

🖥️ UI Plugin

Inject custom UI — visualization panels, chart rendering, interactive forms. Built with HTML/CSS/JS, linked to model outputs.

Create Your First Plugin

  1. Understand plugin structure

    Each plugin contains a manifest.json descriptor and tool implementations. Tools declare inputs via JSON Schema and return results via stdout/files. A minimal plugin needs just one manifest + one executable script.

  2. Write manifest.json

    The manifest defines name, version, description, and tool list. Each tool declares: name, description, parameters (JSON Schema), and a run command. Models use the description to automatically decide when to invoke a tool.

  3. Implement tool logic

    Tools can be any executable — shell scripts, Python, Node.js, Rust binaries. Receive JSON parameters via stdin, output results as JSON to stdout. Supports text output, file paths, and structured data.

  4. Test & Publish

    Place your plugin folder in ModelFlow's plugins directory for local testing. Post in the Plugin Community for review. After security review, your plugin will be listed in the official catalog.

manifest.json Reference

Every plugin root directory must contain a manifest.json. Full schema:

{
  "name": "my-plugin",
  "version": "1.0.0",
  "description": "A short description of what this plugin does",
  "author": "your-name",
  "tools": [
    {
      "name": "search-files",
      "description": "Search files in the workspace by pattern",
      "parameters": {
        "type": "object",
        "properties": {
          "pattern": { "type": "string", "description": "Glob pattern to match" },
          "path":    { "type": "string", "description": "Directory to search in" }
        },
        "required": ["pattern"]
      },
      "run": "node tools/search.js"
    }
  ]
}
nameUnique identifier, kebab-case
versionSemantic version
descriptionWhat the plugin does; models use this to decide when to call
authorAuthor name or org
toolsArray of tool objects
tools[].runLaunch command, relative to plugin root