Mattermost Agents plugin supporting multiple LLMs https://mattermost.com/copilot
  • Go 70%
  • TypeScript 29%
  • JavaScript 0.4%
  • Makefile 0.4%
  • Go Template 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Christopher Speller 4491b8a6b9
Convert the webapp UI to @mattermost/compass-ui (#1068)
* webapp: add @mattermost/compass-ui and runtime CSS loading

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: render ToggleSwitch with compass-ui Switch

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: use compass-ui Button in ConfirmationDialog

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: bump compass-ui to alpha.12 and add simplebar-react

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: remove unused checkbox, ask AI input, and no-bots page components

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: build System Console form items on compass-ui inputs, selects, radios and checkboxes

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: replace react-select pickers with compass-ui Combobox

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: build dot menus on compass-ui IconButton, PopoverMenu and MenuItem

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: fix lint in dot menu item

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: use compass-ui AdminPanel, EmptyState and Tag for System Console panels and license chips

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: convert System Console and access control UI to compass-ui

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* e2e: drive compass-ui pickers, tabs and switches by role

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: convert RHS, bot posts and tool cards to compass-ui

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: convert agents, custom prompts, tour and modals to compass-ui

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: remove legacy button, pill and spinner primitives

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* e2e: follow compass-ui tabs and tour close button in agent specs

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: show a placeholder for unset System Console selects

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: put inline checkbox test ids on the input

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: show the effective default bot in the System Console

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* e2e: find the MCP OAuth callback copy button from its row

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: bump compass-ui to alpha.13

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: use compass-ui alpha.13 labels, pass-through and action states instead of workarounds

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: regenerate package-lock with npm 11 to match CI

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: clear picker results on failed search and keep picks during selection reload

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: polish System Console Compass UI for services, bots, and MCP

Co-authored-by: Cursor <cursoragent@cursor.com>

* e2e: find the Open Agents action on the bots moved notice as a button

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

* webapp: tokenize Compass chrome and share underline tabs

Replace hardcoded card/panel spacing with design tokens, extract shared underline tabs (prompts + MCP + agent config), and polish prompts modal row/radio interactions.

Co-authored-by: Cursor <cursoragent@cursor.com>

* webapp: use medium size for Custom Prompts modal

Co-authored-by: Cursor <cursoragent@cursor.com>

* webapp: name BooleanItem radio groups for accessibility

Co-authored-by: Cursor <cursoragent@cursor.com>

* webapp: keep pin keyboard activation from opening prompt row

Co-authored-by: Cursor <cursoragent@cursor.com>

* webapp: improve modal focus, tab keyboard nav, and radio group a11y

Co-authored-by: Cursor <cursoragent@cursor.com>

* webapp: use divider-style rows for agent and prompt lists, pad prompts menu

Co-authored-by: Cursor <cursoragent@cursor.com>

* webapp: fix modal Escape/focus, animate delete agent dialog, wire confirm dialog close button

Co-authored-by: Cursor <cursoragent@cursor.com>

* webapp: fix lint errors in agent config and custom prompts

Co-authored-by: Cursor <cursoragent@cursor.com>

* webapp: ignore hidden or exiting dialogs in modal Escape handler

Co-authored-by: Cursor <cursoragent@cursor.com>

* webapp: fix stale agent name in delete dialog for empty display names

Co-authored-by: Cursor <cursoragent@cursor.com>

* webapp: fix no-undefined lint error in delete agent dialog

Co-authored-by: Cursor <cursoragent@cursor.com>

* webapp: let Tab reach every control in ConfirmationDialog

Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Christopher Speller <crspeller@users.noreply.github.com>
Co-authored-by: Matthew Birtch <2040554+matthewbirtch@users.noreply.github.com>
2026-10-05 05:44:43 -07:00
.agents/skills/agent-browser Add agent-browser skill (#687) 2026-04-30 07:25:37 -07:00
.claude/agents Enable secure tool calling in channels (#491) 2026-02-12 13:36:21 -05:00
.config/notice-file updated NOTICE.txt and configuration (#285) 2025-01-28 09:56:40 -04:00
.github feat(abac): add shared access policy editor (#972) 2026-09-09 14:59:08 -04:00
accesscontrol feat(abac): add PEP package and access-policy API (#971) 2026-09-09 14:59:08 -04:00
api fix: share one Bifrost client per service across agents (#1013) 2026-09-29 05:22:08 -07:00
assets Attach Anthropic sandbox-created files to agent replies automatically (#967) 2026-09-02 07:54:52 -04:00
audit feat(abac): add PEP package and access-policy API (#971) 2026-09-09 14:59:08 -04:00
autoreply feat(abac): add PEP package and access-policy API (#971) 2026-09-09 14:59:08 -04:00
bifrost fix: share one Bifrost client per service across agents (#1013) 2026-09-29 05:22:08 -07:00
bots fix: share one Bifrost client per service across agents (#1013) 2026-09-29 05:22:08 -07:00
build Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
channels Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
chunking Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
cmd/evalviewer Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
config Align Agents licensing with the four-level tier chart (#1037) 2026-09-25 05:02:51 -07:00
conversation Continue conversations after rejected tool calls (#996) 2026-09-28 08:37:50 -07:00
conversations fix: respect auto-run policies for plugin MCP tools (#1049) 2026-09-29 05:52:06 -07:00
customprompts Align Agents licensing with the four-level tier chart (#1037) 2026-09-25 05:02:51 -07:00
dev OpenTelemetry tracing (#542) 2026-05-07 06:51:14 -07:00
docs Update webapp for React 19 host runtime (Mattermost 12) (#1046) 2026-09-25 10:19:32 -07:00
e2e Convert the webapp UI to @mattermost/compass-ui (#1068) 2026-10-05 05:44:43 -07:00
embeddings Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
enterprise Align Agents licensing with the four-level tier chart (#1037) 2026-09-25 05:02:51 -07:00
evals Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
external/pluginmcp Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
files MM-70203: align file access with server policy checks (#1022) 2026-09-23 07:06:13 -07:00
format Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
i18n Align Agents licensing with the four-level tier chart (#1037) 2026-09-25 05:02:51 -07:00
img Cleanup of package structure for comprehensability. (#281) 2025-01-21 07:33:28 -08:00
indexer Fix recurring flaky e2e and indexer tests (#1051) 2026-09-25 05:46:12 -07:00
llm fix: omit dynamic MCP tool workflow from prompt when meta-tools are disabled (#1048) 2026-09-29 05:24:01 -07:00
llmcontext Align Agents licensing with the four-level tier chart (#1037) 2026-09-25 05:02:51 -07:00
loadtest Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
mcp fix: respect auto-run policies for plugin MCP tools (#1049) 2026-09-29 05:52:06 -07:00
mcpserver Remove Channel Automation plugin support (#1034) 2026-09-25 08:08:37 -07:00
meetings Align Agents licensing with the four-level tier chart (#1037) 2026-09-25 05:02:51 -07:00
metrics Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
mmapi MM-70203: align file access with server policy checks (#1022) 2026-09-23 07:06:13 -07:00
mmtools Align Agents licensing with the four-level tier chart (#1037) 2026-09-25 05:02:51 -07:00
postgres Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
prompts fix: omit dynamic MCP tool workflow from prompt when meta-tools are disabled (#1048) 2026-09-29 05:24:01 -07:00
public/bridgeclient Remove Channel Automation plugin support (#1034) 2026-09-25 08:08:37 -07:00
react MM-69523: Bump Go module path to /v2 (#861) 2026-07-01 06:17:05 -07:00
scripts feat: per-tool config with vetted tool seeding and user provider toggles (#520) 2026-03-27 10:26:26 -07:00
search Align Agents licensing with the four-level tier chart (#1037) 2026-09-25 05:02:51 -07:00
server fix: respect auto-run policies for plugin MCP tools (#1049) 2026-09-29 05:52:06 -07:00
store Make LLM Bridge services independent of agents (#983) 2026-09-23 04:12:18 -07:00
streaming Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
subtitles [MM-69856] Append Zoom chat continuation lines to prior message (#927) 2026-07-28 15:47:11 -04:00
telemetry feat(abac): add PEP package and access-policy API (#971) 2026-09-09 14:59:08 -04:00
threads MM-69523: Bump Go module path to /v2 (#861) 2026-07-01 06:17:05 -07:00
toolrunner fix: reject malformed AskUserQuestion arguments so the model re-asks instead of showing an approval card (#1040) 2026-09-23 09:00:21 -07:00
webapp Convert the webapp UI to @mattermost/compass-ui (#1068) 2026-10-05 05:44:43 -07:00
websearch Add SearXNG web search provider (#923) 2026-09-09 07:49:03 -04:00
.editorconfig Plugin Template 2023-05-03 05:00:50 -07:00
.gitignore Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
.golangci.yml Modernize and simplify the Go codebase (#995) 2026-09-02 10:13:37 -07:00
.mockery.yml MM-69523: Bump Go module path to /v2 (#861) 2026-07-01 06:17:05 -07:00
.nvmrc Rename Go module from mattermost-plugin-ai to mattermost-plugin-agents (#574) 2026-04-08 06:09:05 -07:00
AGENTS.md Remove Channel Automation plugin support (#1034) 2026-09-25 08:08:37 -07:00
CLAUDE.md Adopt AGENTS.md and simplify build system for AI coding agents (#721) 2026-05-07 07:34:50 -07:00
cursor_cloud_supplement.md webapp: fix console warnings, dead 'ai' DM lookup, and Escape on agent config (#1047) 2026-09-25 08:08:19 -07:00
go.mod MM-70203: align file access with server policy checks (#1022) 2026-09-23 07:06:13 -07:00
go.sum MM-70203: align file access with server policy checks (#1022) 2026-09-23 07:06:13 -07:00
go.tools.mod Adding server side localization (#196) 2024-06-04 14:08:07 -07:00
go.tools.sum Adding server side localization (#196) 2024-06-04 14:08:07 -07:00
LICENSE.enterprise Introduce source available folder. Move multiple LLMs to enterprise. (#108) 2024-01-18 14:36:49 -08:00
LICENSE.txt Apply and enforce file-level license headers (#282) 2025-01-24 17:03:41 -04:00
Makefile Make LLM Bridge services independent of agents (#983) 2026-09-23 04:12:18 -07:00
NOTICE.txt Remove built-in GitHub and Jira issue tools (#586) 2026-04-01 08:26:43 -07:00
plugin.json MM-67524: update manifest settings declaration and drop unread setting keys (#1035) 2026-09-28 04:55:05 -07:00
README.md docs: correct minimum server version in README (#980) 2026-08-18 07:52:48 -04:00
skills-lock.json Add agent-browser skill (#687) 2026-04-30 07:25:37 -07:00

Mattermost Agents Plugin Download Latest Master Build

The Mattermost Agents Plugin integrates AI capabilities directly into your Mattermost workspace. Run any local LLM on your infrastructure or connect to cloud providers - you control your data and deployment.

The Mattermost Agents AI Plugin is an extension for mattermost that provides functionality for self-hosted and vendor-hosted LLMs

Key Features

  • Multiple AI Assistants: Configure different agents with specialized personalities and capabilities
  • Thread & Channel Summarization: Get concise summaries of long discussions with a single click
  • Action Item Extraction: Automatically identify and extract action items from threads
  • Meeting Transcription: Transcribe and summarize meeting recordings
  • Semantic Search: Find relevant content across your Mattermost instance using natural language
  • Smart Reactions: Let AI suggest contextually appropriate emoji reactions
  • Direct Conversations: Chat directly with AI assistants in dedicated channels
  • Flexible LLM Support: Use local models (Ollama, vLLM, etc.), cloud providers (OpenAI, Anthropic, Azure), or any OpenAI-compatible API

Documentation

Comprehensive documentation is available in the /docs directory:

  • User Guide: Learn how to interact with AI features
  • Admin Guide: Detailed installation and configuration instructions
  • Load Testing: Configure the in-process mock LLM and load-test-ng Agents controller
  • Provider Setup: Configuration for supported LLM providers
  • Feature Documentation: Detailed guides for individual features
    • Channel Summaries: Use the Ask Agents about this channel button to summarize and analyze channel activity

Installation

  1. Download the latest release from the releases page. You can also download the experimental latest master
  2. Upload and enable the plugin through the Mattermost System Console
  3. Configure your desired LLM provider settings

System Requirements

  • Mattermost Server v11.9.0+
  • PostgreSQL database with pgvector extension for semantic search capabilities
  • Network access to your chosen LLM provider

Quick Start

After installation, complete these steps to get started:

  1. Navigate to System Console > Plugins > Agents
  2. Create an agent and configure it with your LLM provider credentials
  3. Set permissions for who can access the agent
  4. Open the Agents panel from any channel using the AI icon in the right sidebar
  5. Start interacting with your AI assistant

For detailed configuration instructions, see the Admin Guide.

Integration

Bridge Client

The plugin provides a Go client library for other Mattermost plugins and the Mattermost server to interact with the AI plugin's LLM Bridge API. This allows you to easily add AI capabilities to your own plugins or server-side features.

See the Bridge Client README for installation and usage instructions.

Development

Prerequisites

  • Go 1.24+
  • Node.js 24.11+
  • Access to an LLM provider (OpenAI, Anthropic, etc.)

Local Setup

  1. Setup your Mattermost development environment by following the Mattermost developer setup guide. If you have a remote mattermost server you want to develop to you can skip this step.

  2. Setup your Mattermost plugin development environment by following the Plugin Developer setup guide.

  3. Clone the repository:

git clone https://github.com/mattermost/mattermost-plugin-agents.git
cd mattermost-plugin-agents
  1. Optional. If you are developing to a remote server, setup environment variables to deploy:
MM_SERVICESETTINGS_SITEURL=http://localhost:8065
MM_ADMIN_USERNAME=<YOUR_USERNAME>
MM_ADMIN_PASSWORD=<YOUR_PASSWORD>
  1. Run deploy to build the plugin
make deploy

Other make commands

  • Run make help for a list of all make commands
  • Run make check-style to verify code style
  • Run make test to run the test suite
  • Run make e2e to run the e2e tests
  • Run make evals to run prompt evaluations interactively (with TUI)
  • Run make evals-ci to run prompt evaluations in CI mode (non-interactive)

Benchmark Tests

The streaming code has benchmark tests to measure performance and detect regressions:

# Run all streaming benchmarks
go test -bench=. -benchmem ./llm/... ./streaming/...

# Run specific benchmark
go test -bench=BenchmarkStreamToPost -benchmem ./streaming/...

# Run with CPU profiling
go test -bench=BenchmarkReadAll -cpuprofile=cpu.prof ./llm/...

Benchmarks cover:

  • ReadAll() stream consumption with varying response sizes
  • TokenUsageLoggingWrapper interception overhead
  • StreamToPost() full processing pipeline with WebSocket events

Multi-Provider Evaluation Support

The evaluation system supports testing with multiple LLM providers: OpenAI, Anthropic, and Azure OpenAI. By default, evaluations run against all providers, but you can target specific ones:

# Run with all providers (default)
make evals

# Run with only Anthropic
LLM_PROVIDER=anthropic make evals

# Run with OpenAI and Azure
LLM_PROVIDER=openai,azure make evals

# Use a specific model
ANTHROPIC_MODEL=claude-3-opus-20240229 make evals

See cmd/evalviewer/README.md for complete documentation on environment variables and configuration options.

License

This repository is licensed under Apache-2, except for the server/enterprise directory which is licensed under the Mattermost Source Available License. See Mattermost Source Available License to learn more.