Backfill realistic test data into a Mattermost server using the Mattermost MCP tools. Creates users, teams, channels, and natural conversations. Use when the user asks to populate a Mattermost instance, create test data, set up a demo environment, seed conversations, or backfill a Mattermost server. Also provides guidance on reading, searching, and interacting with Mattermost via MCP tools.
68
82%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Populate a Mattermost server with realistic test data and interact with it using the connected Mattermost MCP tools.
| Tool | Purpose |
|---|---|
create_user | Create user accounts (username, email, password, names, nickname, optional profile_image) |
create_team | Create teams (name, display_name, type O=open/I=invite, description, optional team_icon) |
create_channel | Create channels (name, display_name, type O=public/P=private, team_id, purpose, header) |
create_post | Post as the authenticated bot/admin user (channel_id, message, optional root_id for replies, optional attachments) |
create_post_as_user | Post as a specific user via username/password login - critical for realistic multi-user conversations |
add_user_to_team | Add a user to a team by user_id and team_id |
add_user_to_channel | Add a user to a channel by user_id and channel_id |
dm_self | Send a DM to yourself (the authenticated user) |
| Tool | Purpose |
|---|---|
get_channel_info | Look up channel by ID, display_name, or name. Optional team_id scope |
get_channel_members | List members of a channel with pagination |
get_team_info | Look up team by ID, display_name, or name |
get_team_members | List members of a team with pagination |
read_channel | Read recent posts from a channel (limit, since timestamp) |
read_post | Read a specific post and its thread |
search_posts | Search posts by query, optional team_id/channel_id scope |
search_users | Search users by username, email, or name |
Follow this order to avoid missing dependencies:
Ask the user what kind of environment they want. If they don't specify, offer a default scenario. Key questions:
Merge user instructions with the defaults below. User instructions always take priority.
create_team:
name: url-friendly-name (lowercase, hyphens)
display_name: Human Readable Name
type: O (open) or I (invite-only)
description: Brief team descriptionSave the returned team_id for subsequent calls.
Create users with realistic, diverse profiles. For each user, define a persona that guides their communication style throughout all conversations.
Guidelines:
first.last format for usernamesfirst.last@example.com)Testpassword1! for all test users (simple, meets complexity requirements)Save each returned user_id.
Persona template (track internally, do not post):
Name: [Full Name]
Username: [first.last]
Role: [Job title]
Style: [Communication traits - e.g., concise and technical, friendly and verbose, asks lots of questions]
Expertise: [Domain strengths]Call add_user_to_team for each user with the team_id from Step 2.
Create channels appropriate for the team theme. Always include:
For each channel, provide a meaningful purpose and header.
Save each returned channel_id.
Call add_user_to_channel for each user+channel combination. Not every user needs to be in every channel - match membership to roles.
This is the most important step. Use create_post_as_user to post as each user with their username and password.
Message variety:
Thread usage:
root_id to create threaded replies for detailed discussionsPersona consistency:
Natural flow:
For each channel, create 2-4 distinct conversation threads. Example patterns:
Problem-solving thread:
Coordination thread:
Knowledge-sharing thread:
Casual thread (for #random):
search_users: term="john" # Find users by name/email
get_team_info: team_display_name="Engineering" # Find team by name
get_channel_info: channel_display_name="General" # Find channel by nameread_channel: channel_id="...", limit=50 # Recent messages
read_channel: channel_id="...", since="2024-01-01T00:00:00Z" # Since timestamp
read_post: post_id="...", include_thread=true # Full thread
search_posts: query="deployment", team_id="..." # Search by keywordget_team_members: team_id="...", limit=50, page=0
get_channel_members: channel_id="...", limit=50, page=0name must be URL-friendly (lowercase, hyphens, no spaces). display_name is what users see.O for open, I for invite-only. Most test scenarios want O.O for public, P for private.root_id to the parent post's ID. The channel_id must match the parent post's channel.create_post_as_user, you need the password you set during user creation. Keep it consistent.For a fast demo with minimal data:
This produces a believable workspace in ~30 tool calls.
b16652d
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.