mcp-server-mattermost

mcp-server-mattermost

Lets AI assistants read, search, and post messages in Mattermost channels, manage threads, reactions, files, and users with 38 tools.

Category
Visit Server

README

<div align="center">

<img src="https://raw.githubusercontent.com/cloud-ru-tech/mcp-server-mattermost/main/assets/logo.svg" alt="mcp-server-mattermost" width="120">

mcp-server-mattermost

Let AI assistants read, search, and post in your Mattermost workspace

38 tools · Channels · Messages · Reactions · Threads · Files · Users

MCP Server PyPI version Docker Pulls Tests Python 3.10+ License: MIT Docs

</div>

Features

Channels — list, create, join, manage channels and DMs<br> Messages — send, search, edit, delete with rich attachments<br> Reactions & Threads — emoji reactions, pins, full thread history<br> Users & Teams — lookup, search, status<br> Files — upload, metadata, download links<br> Bookmarks — save links and files in channels (Entry+ edition)

Example Queries

Once configured, you can ask your AI assistant:

  • "List all channels and find where the deployment discussion is happening"
  • "What did I miss in #engineering since yesterday morning?"
  • "Show me my unread channels and summarize the threads I was mentioned in"
  • "Send a build status alert to #engineering with a red attachment"
  • "Search for messages about the outage last week and summarize"
  • "Summarize this thread and post the key decisions"
  • "Find who worked on the authentication bug last week"
  • "Upload the report.pdf to #general and share the link"

Available Tools

<details> <summary>Channels (11 tools)</summary>

Tool Description Key Parameters
list_public_channels List public channels in a team team_id
list_my_channels List your channels with unread counts team_id ✓, only_unread
get_channel Get channel details by ID channel_id
get_channel_by_name Get channel by name team_id, channel_name
create_channel Create a new channel team_id, name, display_name
join_channel Join a public channel channel_id
leave_channel Leave a channel channel_id
mark_channel_viewed Mark a channel as viewed (reset unread counters) channel_id
get_channel_members List channel members channel_id
add_user_to_channel Add user to channel channel_id, user_id
create_direct_channel Create DM channel user_id_1, user_id_2

</details>

<details> <summary>Messages (5 tools)</summary>

Tool Description Key Parameters
post_message Send a message to a channel channel_id, message ✓, attachments
get_channel_messages Get messages: recent, unread window, or since timestamp channel_id ✓, unread_only, since
search_messages Search messages by term team_id, terms
update_message Edit a message post_id, message ✓, attachments
delete_message Delete a message post_id

</details>

<details> <summary>Reactions & Threads (6 tools)</summary>

Tool Description Key Parameters
add_reaction Add emoji reaction post_id, emoji_name
remove_reaction Remove emoji reaction post_id, emoji_name
get_reactions Get all reactions on a post post_id
pin_message Pin a message post_id
unpin_message Unpin a message post_id
get_thread Get thread messages post_id

</details>

<details> <summary>Users (5 tools)</summary>

Tool Description Key Parameters
get_me Get current user info
get_user Get user by ID user_id
get_user_by_username Get user by username username
search_users Search users term
get_user_status Get online status user_id

</details>

<details> <summary>Teams (3 tools)</summary>

Tool Description Key Parameters
list_teams List your teams
get_team Get team details team_id
get_team_members List team members team_id

</details>

<details> <summary>Files (3 tools)</summary>

Tool Description Key Parameters
upload_file Upload a file channel_id, file_path
get_file_info Get file metadata file_id
get_file_link Get download link file_id

</details>

<details> <summary>Bookmarks (5 tools) — Requires Entry+ edition</summary>

Note: Requires Entry, Professional, Enterprise, or Enterprise Advanced edition (not available in Team Edition). Minimum version: v10.1.

Tool Description Key Parameters
list_bookmarks List channel bookmarks channel_id
create_bookmark Create link or file bookmark channel_id, display_name, bookmark_type
update_bookmark Update bookmark properties channel_id, bookmark_id
delete_bookmark Delete a bookmark channel_id, bookmark_id
update_bookmark_sort_order Reorder bookmark channel_id, bookmark_id, new_sort_order

</details>

Quick Start

  1. Get a Mattermost bot token
  2. Add to your MCP client config:
{
  "mcpServers": {
    "mattermost": {
      "command": "uvx",
      "args": ["mcp-server-mattermost"],
      "env": {
        "MATTERMOST_URL": "https://your-server.com",
        "MATTERMOST_TOKEN": "your-token"
      }
    }
  }
}
  1. Restart your client

Full setup guide — Claude Desktop, Cursor, Claude Code, Opencode, Docker, pip

Configuration

Variable Required Default Description
MATTERMOST_URL Yes Mattermost server URL
MATTERMOST_AUTH_MODE No static_token Auth mode: static_token, client_token, or oauth_proxy
MATTERMOST_TOKEN Conditional Bot or personal token. Required for static_token.
MATTERMOST_TIMEOUT No 30 Request timeout in seconds
MATTERMOST_MAX_RETRIES No 3 Max retry attempts
MATTERMOST_VERIFY_SSL No true Verify SSL certificates
MATTERMOST_LOG_LEVEL No INFO Logging level
MATTERMOST_LOG_FORMAT No json Log output format: json or text
MATTERMOST_API_VERSION No v4 Mattermost API version

For client_token and oauth_proxy modes — including Mattermost OAuth App registration, all MATTERMOST_OAUTH_* settings, and MCP client connection — see Authentication.

Docker

Stdio mode (default)

docker run -i --rm \
  -e MATTERMOST_URL=https://your-mattermost.com \
  -e MATTERMOST_TOKEN=your-token \
  legard/mcp-server-mattermost

<details> <summary>Claude Desktop config</summary>

{
  "mcpServers": {
    "mattermost": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "MATTERMOST_URL=https://your-mattermost.com",
        "-e", "MATTERMOST_TOKEN=your-token",
        "legard/mcp-server-mattermost"
      ]
    }
  }
}

</details>

HTTP mode (production)

docker run -d -p 8000:8000 \
  -e MCP_TRANSPORT=http \
  -e MCP_HOST=0.0.0.0 \
  -e MATTERMOST_URL=https://your-mattermost.com \
  -e MATTERMOST_TOKEN=your-token \
  legard/mcp-server-mattermost

Health check: curl http://localhost:8000/health

HTTP mode with Mattermost OAuth proxy

Register a Mattermost OAuth 2.0 Application first:

Mattermost field Production value
Is Trusted Yes
Is Public Client No
Callback URLs https://mcp.example.com/oauth/callback/mm

Then run the MCP server:

docker run -d -p 8000:8000 \
  -e MCP_TRANSPORT=http \
  -e MCP_HOST=0.0.0.0 \
  -e MATTERMOST_AUTH_MODE=oauth_proxy \
  -e MATTERMOST_URL=https://mattermost.internal \
  -e MATTERMOST_OAUTH_MATTERMOST_PUBLIC_URL=https://mattermost.example.com \
  -e MATTERMOST_OAUTH_MCP_PUBLIC_URL=https://mcp.example.com \
  -e MATTERMOST_OAUTH_CLIENT_ID=your-mattermost-oauth-app-id \
  -e MATTERMOST_OAUTH_CLIENT_TYPE=confidential \
  -e MATTERMOST_OAUTH_CLIENT_SECRET=your-mattermost-oauth-app-secret \
  legard/mcp-server-mattermost

If your Mattermost login uses Keycloak SSO, users authenticate through Keycloak inside the Mattermost OAuth login flow. The MCP server does not need a Keycloak client.

Connect Claude Code with Dynamic Client Registration:

claude mcp add --transport http mattermost https://mcp.example.com/mcp

Do not pass --client-id for this server; the MCP client registers with the MCP server, and the MCP server uses the fixed Mattermost OAuth App upstream.

Environment Variables (Docker)

Variable Default Description
MCP_TRANSPORT stdio Transport: stdio or http
MCP_HOST 127.0.0.1 HTTP bind host (use 0.0.0.0 in Docker)
MCP_PORT 8000 HTTP port

Documentation

📖 mcp-server-mattermost.readthedocs.io

Development

# Clone and install
git clone https://github.com/cloud-ru-tech/mcp-server-mattermost
cd mcp-server-mattermost
uv sync --dev

# Run unit tests
uv run pytest

# Run integration tests (requires Docker or external Mattermost)
uv run pytest tests/integration -v

# Type checking
uv run mypy src/

# Linting
uv run ruff check src/ tests/

# Run locally
MATTERMOST_URL=https://... MATTERMOST_TOKEN=... uv run mcp-server-mattermost

Integration Tests

Integration tests run against a real Mattermost server via Docker (Testcontainers) or external server.

# With Docker (Testcontainers) — automatic setup
uv run pytest tests/integration -v

# Against external Mattermost server
export MATTERMOST_URL=https://your-server.com
export MATTERMOST_TOKEN=your-bot-token
uv run pytest tests/integration -v

# Run specific test module
uv run pytest tests/integration/test_channels.py -v

Integration tests are excluded from the default pytest run. Unit tests run with:

uv run pytest  # Unit tests only

Debugging

Use the MCP Inspector to debug:

npx @modelcontextprotocol/inspector uvx mcp-server-mattermost

Contributing

Contributions welcome! See CONTRIBUTING.md for guidelines.

License

MIT — see LICENSE for details.


<div align="center">

Built with FastMCP · Mattermost API v4

</div>

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured