mastodon-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DEBUG | No | Enable verbose logging | false |
| READ_ONLY | No | Disable all write operations | false |
| MASTODON_INSTANCE | Yes | Mastodon instance URL (e.g. https://mastodon.social or just mastodon.social) | |
| MASTODON_MCP_HOST | No | HTTP transport bind address | 127.0.0.1 |
| MASTODON_MCP_PORT | No | HTTP transport port | 8000 |
| MASTODON_ACCESS_TOKEN | Yes | OAuth access token | |
| MASTODON_MCP_TRANSPORT | No | Transport: stdio or streamable-http | stdio |
| MASTODON_MCP_STATELESS_HTTP | No | Disable HTTP session state | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| instance_infoA | Get information about the connected Mastodon instance. Returns: str: JSON with instance name, description, version, rules, etc. |
| account_verifyA | Get the authenticated account's own profile. Returns: str: JSON with account id, username, display_name, followers_count, etc. |
| account_getB | Get a Mastodon account by its numeric ID. |
| account_searchB | Search for accounts by username or display name. |
| account_statusesC | Get statuses posted by a specific account. |
| account_followersC | Get followers of an account. |
| account_followingB | Get accounts that a given account follows. |
| account_followC | Follow an account. |
| account_unfollowC | Unfollow an account. |
| account_muteC | Mute an account. |
| account_unmuteB | Unmute an account. |
| account_blockC | Block an account. |
| account_unblockC | Unblock an account. |
| account_relationshipsA | Get the authenticated user's relationship to one or more accounts. |
| account_updateB | Update the authenticated account's profile. |
| timeline_homeB | Get the authenticated user's home timeline. |
| timeline_localB | Get the local (instance) public timeline. |
| timeline_publicB | Get the federated public timeline. |
| timeline_hashtagC | Get statuses with a specific hashtag. |
| status_getB | Get a single status by ID. |
| status_contextB | Get ancestors and descendants of a status (thread context). |
| status_postC | Post a new status (toot). |
| status_deleteB | Delete a status posted by the authenticated account. |
| status_favouriteA | Favourite (like) a status. |
| status_unfavouriteC | Remove a favourite from a status. |
| status_reblogB | Reblog (boost) a status. |
| status_unreblogB | Remove a reblog (unboost) of a status. |
| status_bookmarkC | Bookmark a status. |
| status_unbookmarkB | Remove a bookmark from a status. |
| status_favourited_byC | Get accounts that favourited a status. |
| status_reblogged_byA | Get accounts that reblogged a status. |
| notifications_getC | Get notifications for the authenticated account. |
| notification_dismissC | Dismiss (clear) a single notification. |
| notifications_clearA | Dismiss all notifications for the authenticated account. Returns: str: JSON confirmation. |
| searchC | Search Mastodon for accounts, statuses, and hashtags. |
| trending_tagsC | Get trending hashtags on the instance. |
| trending_statusesB | Get trending statuses on the instance. |
| trending_linksA | Get trending links (articles) on the instance. |
| favouritesC | Get statuses favourited by the authenticated account. |
| bookmarksB | Get statuses bookmarked by the authenticated account. |
| lists_getB | Get all lists created by the authenticated account. Returns: str: JSON list of list objects with id and title. |
| list_accountsC | Get accounts in a specific list. |
| list_createC | Create a new list. |
| list_deleteC | Delete a list. |
| list_accounts_addB | Add accounts to a list. |
| list_accounts_deleteC | Remove accounts from a list. |
| poll_voteC | Vote in a poll. |
| follow_requestsA | Get pending follow requests for the authenticated account. |
| follow_request_authorizeC | Approve a follow request. |
| follow_request_rejectC | Reject a follow request. |
| mutesB | Get accounts muted by the authenticated account. |
| blocksB | Get accounts blocked by the authenticated account. |
| media_postC | Upload a media file (image, video, audio) to Mastodon. |
| directoryC | Browse the profile directory of the instance. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 54 tools
Most tools map to clearly distinct resource+action pairs (account_get vs account_follow vs status_reblog), and the domain vocabulary is well-known. Minor overlaps exist, e.g. account_search vs the general search tool, and the notification_get/dismiss/clear trio requires reading descriptions to distinguish granularity.
The dominant pattern is noun_verb (account_get, status_post, list_create), but there are notable deviations: bare nouns with no verb (mutes, blocks, favourites, bookmarks, search, directory) and scrambled multi-part names (list_accounts_add, follow_request_authorize). Plurals are also inconsistent within the same family (notifications_get vs notification_dismiss).
54 tools is a very heavy surface for an agent to navigate and is well past the 25+ threshold for concern. The breadth of the Mastodon API justifies many of them individually, but the set would benefit from consolidation (e.g. generic follow/mute/block with an action parameter).
Coverage is broad and lifecycle-aware: accounts, statuses, timelines, lists, notifications, polls, media, follow requests, mutes/blocks, and trending data are all present with create/delete/action variants. Gaps remain around direct-message/conversation tools, status editing (only status_delete exists despite account_update), and list updates, but core workflows are covered.