Skip to content
⌘K

Plugin Architecture

A plugin is a TypeScript module that exports a MondayMorningPlugin and contributes MCP tools.

export interface MondayMorningPlugin {
id: string;
name: string;
description: string;
version: string;
category: PluginCategory;
tier?: 'free' | 'pro';
tools: PluginToolDefinition[];
register(context: PluginContext): Promise<void>;
onEnable?(): Promise<void>;
onDisable?(): Promise<void>;
onProjectSwitch?(projectPath: string): Promise<void>;
}
  • Bundled — inside the MCP server, shipped with the app.
  • Community — ~/.monday-morning/plugins/{id}/. A folder loads if it has an index.js (or index.ts).

At startup the registry discovers both locations, validates each plugin’s shape, checks its tier against your entitlement, then merges its tools into the catalog. A plugin whose id or tool name collides with a built-in is refused.

Plugins get a PluginContext with the project path, the server’s path helpers, and a logger.

tier: 'pro' means the plugin loads only for Pro or Team. If tier can’t be resolved, gating fails open rather than silently removing tools.