Stoat Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Stoat Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A Model Context Protocol (MCP) server for the Stoat chat platform. Gives AI assistants structured access to Stoat servers, channels, messages, and users.
Built with FastMCP and stoat.py.
pip install stoat-mcpOr run from source:
git clone https://github.com/mdlopresti/stoat-mcp.git
cd stoat-mcp
pip install -e ".[dev]"Set required environment variables:
export STOAT_TOKEN="your-bot-token"
export STOAT_SERVER_ID="your-server-id"Run the server:
stoat-mcpAll configuration is via environment variables:
| Variable | Required | Default | Description |
|---|---|---|---|
STOAT_TOKEN | Yes | — | Bot authentication token |
STOAT_SERVER_ID | Yes | — | Stoat server ID to operate on |
STOAT_ENABLE_WRITE | No | false | Master switch for all write operations |
STOAT_ENABLE_SEND_MESSAGE | No | false | Enable send_message tool |
STOAT_ENABLE_SEND_DM | No | false | Enable send_direct_message tool |
STOAT_CHANNEL_ALLOWLIST | No | "" | Comma-separated channel IDs (empty = all allowed) |
STOAT_CHANNEL_BLOCKLIST | No | "" | Comma-separated channel IDs (empty = none blocked) |
All write operations (sending messages, creating channels, etc.) are disabled by default. To enable them:
# Enable all write operations
export STOAT_ENABLE_WRITE=true
# Or enable specific operations
export STOAT_ENABLE_SEND_MESSAGE=true
export STOAT_ENABLE_SEND_DM=trueRestrict which channels the MCP server can access:
# Only allow these channels (empty = all channels)
export STOAT_CHANNEL_ALLOWLIST="channel-id-1,channel-id-2"
# Block these channels (applied before allowlist)
export STOAT_CHANNEL_BLOCKLIST="private-channel-id"The blocklist takes precedence: a channel in both lists is blocked.
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"stoat": {
"command": "stoat-mcp",
"env": {
"STOAT_TOKEN": "your-bot-token",
"STOAT_SERVER_ID": "your-server-id"
}
}
}
}Add to your project's .mcp.json:
{
"mcpServers": {
"stoat": {
"command": "stoat-mcp",
"env": {
"STOAT_TOKEN": "your-bot-token",
"STOAT_SERVER_ID": "your-server-id"
}
}
}
}| Category | Tool | Tier | Description |
|---|---|---|---|
| Channels | list_channels | Read | List all accessible text channels |
| Channels | get_channel_info | Read | Get metadata for a specific channel |
| Channels | create_channel | Write | Create a new text channel |
| Channels | delete_channel | Write | Delete a text channel |
| Messages | get_channel_messages | Read | Read message history from a channel |
| Messages | send_message | Write | Send a message to a channel |
| Users | list_users | Read | List server members |
| Users | get_user_info | Read | Get profile data for a specific user |
| DMs | get_direct_messages | Read | Read DM history with a user |
| DMs | send_direct_message | Write | Send a direct message to a user |
| Search | search_messages | Read | Search messages across channels |
| Threads | get_thread_replies | Read | Get replies in a message thread |
| Threads | reply_to_thread | Write | Reply to a message thread |
| Reactions | add_reaction | Write | Add an emoji reaction to a message |
| Reactions | remove_reaction | Write | Remove an emoji reaction from a message |
| Files | upload_file | Write | Upload a file to a channel |
stoat-mcp is the first MCP server for the Stoat (formerly Revolt) platform.
This MCP server creates a combination that requires careful consideration:
This combination means a malicious message in a channel could potentially instruct the AI to exfiltrate private data from other channels by sending it somewhere attacker-controlled.
STOAT_ENABLE_WRITE or STOAT_ENABLE_SEND_MESSAGE when you specifically need the AI to send messages.STOAT_CHANNEL_BLOCKLIST="private-channel,admin-channel"STOAT_CHANNEL_ALLOWLIST="ai-channel,support-channel"# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run specific test file
pytest tests/test_config.pyMIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.