Skip to main content

Overview

TypingMind plugin can be completely described using a JSON object. Below is the description of each feature of the plugin and their corresponding JSON schema. Plugin name, title, icon, overview, GitHub source URL, and authentication type, and permissions are defined as the following example:
You can use these values in permissions:
  • read_user_message: read the latest user message and its attachments.
  • read_chat_attachments: read the chat files that the AI sends in typingmind-attachment parameters.
User settings example:
Plugin context example:
OAuth config example:
Plugin functions is defined as an array of multiple function. Here is an example for a function with HTTP Action implementation type.
Here is an example for a function with JavaScript implementation type.
Here is an example for a function with MCP implementation type.

Chat file parameters

A parameter of the type typingmind-attachment gets a file from the chat. An array of this type gets more than one file. If the plugin has the read_chat_attachments permission, the JavaScript function receives the files in resources.attachments.
For more information, refer to Chat file parameters.

JavaScript source files

For plugins hosted on GitHub, a JavaScript entry in pluginFunctions can use codeFile instead of an inline code string. This keeps the implementation in a separate .js file. codeFile is a path relative to the repository root, where plugin.json is stored. For example, "codeFile": "functions/add-numbers.js" loads that file from the same repository and branch as plugin.json. Example function configuration in plugin.json:
Contents of functions/add-numbers.js:
The file must define a top-level function with the same name as openaiSpec.name.
  • Use codeFile only in JavaScript entries in pluginFunctions. Set "implementationType": "javascript" in these entries.
  • Existing inline code strings are still supported. If both codeFile and code are set, the file contents take precedence.
  • TypingMind reads the file during GitHub import and stores its contents as code. The file is not fetched on each function call.
  • Import fails if the referenced file cannot be fetched; it does not fall back to inline code.
  • For standalone JSON imports or the JSON Editor, include the implementation in code. File references are resolved by the GitHub importer.

Function execution and output settings

These fields belong to each function object in pluginFunctions: Supported output types: For content_blocks, each embedded resource includes a filename URI and either literal text or base64 blob contents. See Give text and files to the AI for the return format and binary-file examples. This example defines an offline JavaScript function that creates a text attachment:
task_description is a function parameter supplied by the AI. TypingMind displays it in the active activity group header and the tool call row. It is separate from the function-level networkAccess and outputType settings. To read files already in the conversation, add read_chat_attachments to the plugin’s permissions and declare attachment parameters with the typingmind-attachment type. See Chat file parameters.

Complete example

Below is a complete example JSON source for the “Web Search (Serp)” plugin: