mastodon-mcp-server
A comprehensive MCP (Model Context Protocol) server for Mastodon integration. Enables AI assistants and other MCP clients to interact with Mastodon instances — read timelines, post statuses, manage accounts, search, and more.
Features
- Timelines: home, local, public, hashtag
- Statuses: post, delete, favourite, reblog, bookmark
- Accounts: follow, unfollow, block, mute, relationships, profile update
- Notifications: read, dismiss individual or all
- Search: accounts, statuses, hashtags
- Trending: tags, statuses, links
- Lists: create, delete, manage members
- Media: upload attachments
- Polls: vote
- Read-only mode: safe browsing without write access
- STDIO and HTTP transports: works with any MCP-compatible client
Installation
Debian 13+ / Ubuntu 24+
apt install mastodon-mcp-server
pip
pip install mastodon-mcp-server
From source
git clone https://github.com/VitexSoftware/mastodon-mcp-server.git
cd mastodon-mcp-server
pip install -e .
Configuration
Copy .env.example to .env and fill in your credentials:
cp .env.example .env
| Variable | Required | Default | Description |
|---|---|---|---|
MASTODON_INSTANCE |
yes | — | Mastodon instance URL (e.g. https://mastodon.social or just mastodon.social) |
MASTODON_ACCESS_TOKEN |
yes | — | OAuth access token |
READ_ONLY |
no | true |
Disable all write operations |
MASTODON_MCP_TRANSPORT |
no | stdio |
Transport: stdio or streamable-http |
MASTODON_MCP_HOST |
no | 127.0.0.1 |
HTTP transport bind address |
MASTODON_MCP_PORT |
no | 8000 |
HTTP transport port |
MASTODON_MCP_STATELESS_HTTP |
no | false |
Disable HTTP session state |
DEBUG |
no | false |
Enable verbose logging |
Getting an Access Token
- Go to your Mastodon instance → Preferences → Development → New application
- Grant required scopes:
read,write,follow - Copy the Your access token value
Client Setup
Claude Code (CLI)
claude mcp add --scope user mastodon /usr/bin/mastodon-mcp \
-e MASTODON_INSTANCE=mastodon.social \
-e MASTODON_ACCESS_TOKEN=your-token-here
Claude Desktop
~/.config/claude/claude_desktop_config.json:
{
"mcpServers": {
"mastodon": {
"command": "mastodon-mcp",
"env": {
"MASTODON_INSTANCE": "https://mastodon.social",
"MASTODON_ACCESS_TOKEN": "your-token-here"
}
}
}
}
Warp Terminal
~/.warp/mcp_config.json:
{
"mcpServers": {
"mastodon": {
"command": "/usr/bin/mastodon-mcp",
"args": [],
"env": {
"MASTODON_INSTANCE": "https://mastodon.social",
"MASTODON_ACCESS_TOKEN": "your-token-here"
}
}
}
}
VSCode (GitHub Copilot / Continue)
~/.config/Code/User/mcp.json:
{
"servers": {
"MastodonMCP": {
"type": "stdio",
"command": "/usr/bin/mastodon-mcp",
"args": [],
"env": {
"MASTODON_INSTANCE": "https://mastodon.social",
"MASTODON_ACCESS_TOKEN": "your-token-here"
}
}
}
}
HTTP transport (any MCP client)
MASTODON_MCP_TRANSPORT=streamable-http mastodon-mcp
Usage
usage: mastodon-mcp [-h] [--version]
Model Context Protocol server for Mastodon integration.
options:
-h, --help show this help message and exit
--version show program's version number and exit
Environment variables:
MASTODON_INSTANCE Mastodon instance URL (required)
MASTODON_ACCESS_TOKEN OAuth access token (required)
MASTODON_MCP_TRANSPORT Transport mode: stdio (default) or streamable-http
MASTODON_MCP_HOST HTTP bind address (default: 127.0.0.1)
MASTODON_MCP_PORT HTTP port (default: 8000)
MASTODON_MCP_STATELESS_HTTP Disable HTTP session state (default: false)
READ_ONLY Restrict to read-only operations (default: true)
DEBUG Enable verbose logging (default: false)
Available Tools
Instance
| Tool | Description |
|---|---|
instance_info |
Instance name, description, version, rules |
Accounts
| Tool | Description |
|---|---|
account_verify |
Own profile |
account_get |
Account by numeric ID |
account_search |
Search accounts by username or display name |
account_statuses |
Posts by an account |
account_followers / account_following |
Social graph |
account_follow / account_unfollow |
Follow management |
account_block / account_unblock |
Block management |
account_mute / account_unmute |
Mute management |
account_relationships |
Relationship to one or more accounts |
account_update |
Update own display name, bio, locked status |
Timelines
| Tool | Description |
|---|---|
timeline_home |
Home timeline (followed accounts) |
timeline_local |
Local instance public timeline |
timeline_public |
Federated public timeline |
timeline_hashtag |
Statuses with a specific hashtag |
Statuses
| Tool | Description |
|---|---|
status_get |
Single status by ID |
status_context |
Thread ancestors and descendants |
status_post |
Post a new status (supports CW, visibility, media, polls) |
status_delete |
Delete own status |
status_favourite / status_unfavourite |
Favourite management |
status_reblog / status_unreblog |
Boost management |
status_bookmark / status_unbookmark |
Bookmark management |
status_favourited_by / status_reblogged_by |
Who engaged with a status |
Notifications
| Tool | Description |
|---|---|
notifications_get |
List notifications (filterable by type) |
notification_dismiss |
Dismiss a single notification |
notifications_clear |
Clear all notifications |
Search & Discovery
| Tool | Description |
|---|---|
search |
Search accounts, statuses, and hashtags |
trending_tags |
Trending hashtags |
trending_statuses |
Trending statuses |
trending_links |
Trending links/articles |
directory |
Browse the instance profile directory |
Collections
| Tool | Description |
|---|---|
favourites |
Own favourited statuses |
bookmarks |
Own bookmarked statuses |
mutes |
Muted accounts |
blocks |
Blocked accounts |
Lists
| Tool | Description |
|---|---|
lists_get |
All lists |
list_accounts |
Accounts in a list |
list_create / list_delete |
Create/delete lists |
list_accounts_add / list_accounts_delete |
Add/remove list members |
Polls
| Tool | Description |
|---|---|
poll_vote |
Vote in a poll |
Follow Requests
| Tool | Description |
|---|---|
follow_requests |
Pending follow requests |
follow_request_authorize / follow_request_reject |
Accept/reject requests |
Media
| Tool | Description |
|---|---|
media_post |
Upload image/video/audio attachment |
Future Tools (Mastodon.py ≥ 2.x / Mastodon server ≥ 3.5)
The following tools are implemented but commented out in server.py. Uncomment them when your distribution ships python3-mastodon >= 2.0.1 (already available on Debian 13/trixie):
| Tool | Requirement |
|---|---|
status_update |
Edit a status (server 3.5+) |
status_history |
Edit history (server 3.5+) |
status_source |
Plain-text source for editing |
status_translate |
Translate a status (server 4.0+) |
conversations |
Direct-message conversations |
scheduled_statuses |
List scheduled posts |
scheduled_status_update |
Reschedule a post |
scheduled_status_delete |
Cancel a scheduled post |
notifications_unread_count |
Unread notification count |
Testing
# Offline (tool registration + helper functions + version check)
python3 scripts/test_server.py
# With live instance
MASTODON_INSTANCE=mastodon.social \
MASTODON_ACCESS_TOKEN=your-token \
python3 scripts/test_server.py
Architecture
The server uses a bundled stdlib-only MCP implementation (mastodon_mcp_server/_mcp.py) so it has no dependency on python3-fastmcp or its deep dependency chain. This makes packaging for Debian/Ubuntu straightforward. The implementation is compatible with the FastMCP decorator API (@mcp.tool()).
Citation
This project is built on Mastodon.py. If you use it in academic work, please cite:
@article{Diener2026,
author = {Diener, Lorenz and Delcourt, Corentin},
title = {Mastodon.py: A Python library for the Mastodon API},
journal = {Journal of Open Source Software},
year = {2026},
volume = {11},
number = {120},
pages = {8946},
doi = {10.21105/joss.08946},
url = {https://doi.org/10.21105/joss.08946}
}
See Mastodon.py's CITATION.cff for details.
License
MIT — Vítězslav Dvořák info@vitexsoftware.cz
Release files for mastodon-mcp-server 1.0.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mastodon_mcp_server-1.0.5.tar.gz | 29.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mastodon_mcp_server-1.0.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 42.7 kB
Release files / mastodon_mcp_server-1.0.5.tar.gz
| Download URL | mastodon_mcp_server-1.0.5.tar.gz |
|---|---|
| Size | 29.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f7a60f024e68ab7beb10a1f92281708cf85055c6754d9cf991128cdc71591a74
|
|
BLAKE2b-256 checksum How to use checksums |
2796f3ea59bbd05a4237ec6709d6862dcdeaba54237b0bc544f98dbec7c99809
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.5
|
Release files / mastodon_mcp_server-1.0.5-py3-none-any.whl
| Download URL | mastodon_mcp_server-1.0.5-py3-none-any.whl |
|---|---|
| Size | 12.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2396577f41a3592af1513be12aedc15efd75414f84057861744f426b4af06f09
|
|
BLAKE2b-256 checksum How to use checksums |
b93dbb272b85a09e512c14aa990c3a121a4a911e5ad9be3411494b1aba1eebd0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.5
|