Plugins

Three classes of plugins

ClassDefined inSource format
Built-in (compiled into the app)src/utils/plugins.tsTypeScript Plugin object literal
Always-on (shipped as separate modules)src/utils/web-search-plugin.ts, doc-parse-plugin.ts, artifacts-plugin.ts, code-exec-plugin.ts, file-ops-plugin.ts, local-fs-native-plugin.tsTypeScript module exporting a Plugin default
User-installeddb.installedPluginsV2LobeChat JSON / Gradio manifest / MCP server config

Built-in plugins (compiled in)

Plugin idPurposeEnabled by default
aiaw-timeReturns current timeNo (deemed useless)
aiaw-calculatorMath via expr-evalYes
aiaw-whisperAudio transcriptionYes
aiaw-video-transcriptVideo transcript extractionYes
aiaw-fluxImage generation (Gradio)Yes
aiaw-emotionsAudio emotion classificationYes
aiaw-mermaidMermaid diagram renderingYes

Always-on built-in modules

These live in their own files in src/utils/:

ModuleCapabilityCritical detail
web-search-plugin.tsSearXNG meta-search + Jina Reader crawlNeeds SEARXNG_BASE_URL env. Without it, the plugin throws at first use. Supports engines: google/bing/baidu/duckduckgo/npm/pypi/github/arxiv/google_scholar/z-library/reddit/imdb/brave/wikipedia/pinterest/unsplash/vimeo/youtube/bilibili
doc-parse-plugin.tsParse PDF/Word/Excel to textNeeds DOC_PARSE_BASE_URL. Without it, no parsing.
code-exec-plugin.tsRun Python in browser via Pyodide 0.26.4Loads from https://cdn.jsdelivr.net/pyodide/v0.26.4/full/pyodide.js on first use. Supports matplotlib/numpy/pandas via Pyodide packages. No backend needed.
file-ops-plugin.tsRead/write/list/mkdir/copy/move/delete on the device filesystemNative side uses capacitor-plugin-shell-exec. Sandbox index in localStorage under key aiaw_file_index_v2.
local-fs-native-plugin.tsDesktop-only filesystem access via Tauri shellOnly loaded on Tauri; throws on mobile/web.
artifacts-plugin.tsConvert assistant replies to editable Artifact documentsDisabled by default; toggle in Settings → Artifacts Settings.

User-installed plugins (third-party)

Add via Plugins page (top toolbar + button):

Plugin typeSource formatHow to add
LobeChatLobeChat plugin JSON (manifest with identifier, api, version)Paste JSON or import .json file
GradioGradio app URL or manifestProvide URL; client introspects the manifest
HuggingFaceHF Space URLConverted internally to a Gradio manifest
MCPServer config (see below)"+" → Add MCP Plugin

MCP (Model Context Protocol) in detail

The MCP client (src/utils/mcp-client.ts) supports three transports:

TransportRequired setupWhere it works
stdioSpawn a subprocess with a shell commandDesktop only (Tauri). Throws on web/Capacitor.
httpStreamable HTTP URL with optional headersEverywhere
sseServer-Sent Events URLEverywhere

For stdio, the platform runs sh -c "<command>" (Windows: cmd /c) via Tauri shell. Connection pool keeps each MCP client alive for 5 minutes (idle timeout), refreshable via the Refresh button on the Plugins page.

An MCP plugin entry looks like:

{
  "id": "mcp-searxng",
  "title": "SearXNG MCP",
  "transport": {
    "type": "http",
    "url": "https://mcp.example.com/searxng",
    "headers": { "Authorization": "Bearer ..." }
  }
}

Discovery: the app fetches the URL, queries the MCP tools/list, prompts/list, resources/list endpoints, and exposes them as assistant tools.

Enabling a plugin on an assistant

  1. Open the assistant (Settings → Assistants → pick one, or via workspace → Assistants).
  2. Click the plugin chip area; a dropdown shows available plugins.
  3. Select plugins → configure per-plugin settings (e.g. for web-search, set SearXNG URL).
  4. Save assistant. From now on, the model can call those tools during conversations.