mastodon-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MASTODON_URL | No | Your instance, e.g. https://mastodon.social | |
| MASTODON_ACCOUNTS | No | JSON array, for several accounts across instances | |
| MASTODON_MCP_HOME | No | Where the account store lives | |
| MASTODON_AUDIT_LOG | No | Append-only log of every attempted write | |
| MASTODON_HTTP_HOST | No | For --http | |
| MASTODON_HTTP_PORT | No | For --http | |
| MASTODON_READ_ONLY | No | Hide every write from the tool list | |
| MASTODON_HTTP_TOKEN | No | Bearer token required by --http | |
| MASTODON_LOGIN_PORT | No | Loopback port for the OAuth redirect | |
| MASTODON_MAX_RETRIES | No | Retries on 429 and 5xx | |
| MASTODON_ACCESS_TOKEN | No | An access token for it | |
| MASTODON_DEFAULT_ACCOUNT | No | Which handle acts when a tool names none | |
| MASTODON_ALLOW_DESTRUCTIVE | No | 0 blocks posting, editing and deleting | |
| MASTODON_REQUEST_TIMEOUT_MS | No | Per-request deadline | |
| MASTODON_MIN_REQUEST_INTERVAL_MS | No | Spacing between requests |
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
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_accountsA | Every Mastodon account this server can act as, and which instance each lives on. Mastodon is federated, so an account is a token plus an instance: the same handle on two servers is two different people. Use the handle from here as the |
| whoamiA | Authenticate against the instance and return the live profile. Use this to confirm a token still works, or when the user says 'me' or 'my' and you need their handle. |
| get_instance_infoA | What this instance actually allows: the character limit, how many attachments and poll options, media size ceilings, the software version, and the server rules. Worth reading before drafting anything long, because the character limit is per instance and ranges from 500 to 11,000. |
| update_profileA | Change your display name, bio, or the four metadata fields on your profile. Only the arguments you pass are changed. Public the moment it runs, so it needs confirm: true. |
| post_statusA | Publish a status. Handles text, media with alt text, a content warning, a poll, a reply, visibility, and native scheduling. The character limit is per instance, so check get_instance_info before drafting anything long: it ranges from 500 to 11,000. Public the moment it runs, so it needs confirm: true. |
| post_threadA | Publish several statuses as one thread, each replying to the last. Every part is checked against this instance's character limit before anything is posted, so a thread never half-publishes because part four was too long. Media, a poll and the content warning apply to the first part. Public the moment it runs, so it needs confirm: true. |
| edit_statusA | Change the text, content warning, media alt text or poll of a status that is already published. Mastodon keeps a public revision history and the post keeps its boosts, replies and favourites, which is why editing beats delete-and-repost. Call get_status_source first to get the exact text you are editing. Public the moment it runs, so it needs confirm: true. |
| get_status_sourceA | The plain-text source of one of your own statuses, exactly as it was typed, plus its content warning. This is what to edit from: the rendered content is HTML with links rewritten, so editing that back would mangle every link in the post. |
| get_status_historyA | Every published version of a status, oldest first. Mastodon keeps edits public, so this works for anyone's post, not only your own. |
| delete_statusA | Delete one of your own statuses. This cannot be undone and it discards every boost, reply and favourite it had. To fix a mistake, prefer edit_status, which keeps all of that. Needs confirm: true. |
| get_statusA | A single status by id, with its media, poll, link preview and engagement counts. |
| get_threadA | A status together with everything above and below it, nested into the real reply tree. Mastodon returns two flat lists and leaves the structure to you; this rebuilds it. Read this before replying, so the reply lands with context. |
| list_scheduled_statusesA | Statuses queued with scheduled_at that have not published yet. |
| reschedule_statusA | Change when a scheduled status will publish. Minimum five minutes ahead. |
| cancel_scheduled_statusB | Cancel a status that was scheduled but has not published. |
| get_favouritesA | Statuses a connected account has favourited, newest first. |
| get_bookmarksA | Statuses a connected account has bookmarked. Unlike favourites, bookmarks are private. |
| favourite_statusC | Favourite a status. |
| unfavourite_statusC | Remove your favourite from a status. |
| boost_statusA | Boost a status to your followers. To add a comment instead, post a status quoting its URL: Mastodon has no native quote post. |
| unboost_statusB | Undo a boost. |
| bookmark_statusA | Bookmark a status. Bookmarks are private, unlike favourites, which the author can see. |
| unbookmark_statusC | Remove a bookmark. |
| pin_statusC | Pin one of your own statuses to the top of your profile. |
| unpin_statusA | Unpin a status from your profile. |
| mute_conversationA | Stop being notified about replies to this thread, without leaving it. The tool nobody reaches for until a post goes unexpectedly wide. |
| unmute_conversationB | Start being notified about this thread again. |
| vote_pollA | Vote in a poll by option index, counting from zero. A vote cannot be changed or taken back, so it needs confirm: true. |
| translate_statusA | Translate a status into your language using the instance's translation backend. Only works on instances that have configured one, which is a minority, so a 404 here means the feature is off rather than that the status is missing. |
| get_favourited_byB | The accounts that favourited a status. Federation means this is only who your instance knows about, not necessarily everyone. |
| get_boosted_byB | The accounts that boosted a status, as far as your instance knows. |
| reportA | Report an account, optionally with specific statuses, to your instance's moderators. Optionally forwards to the account's home instance. This reaches human moderators, so it needs confirm: true. |
| get_home_timelineA | Statuses from the accounts and hashtags you follow, newest first. Pass since_hours to read a time window rather than a fixed count. |
| get_local_timelineA | Everything public posted by accounts on your own instance. On a small themed instance this is the most useful timeline there is; on mastodon.social it is a firehose. |
| get_federated_timelineA | Everything public your instance has federated in from the rest of the network. Large and unfiltered: use search or a hashtag timeline if you are looking for something specific. |
| get_hashtag_timelineA | Public statuses carrying a hashtag. Hashtags are how discovery works on Mastodon, since there is no algorithmic feed, so this is the main way to find a conversation. |
| get_list_timelineA | Statuses from the accounts on one of your lists. Find list ids with get_lists. |
| get_account_statusesA | Statuses by one account, newest first. Use exclude_replies when studying how someone writes, so replies do not dominate the sample. |
| searchA | Search for accounts, statuses or hashtags. Pasting a URL here with resolve on is also how you pull in a remote post or profile your instance has never seen. Note that most instances do not full-text search public statuses: a thin result set is usually the instance's policy rather than a bad query. |
| get_trendsA | What is trending on this instance right now: hashtags, statuses, or links. Trends are per instance, not network-wide, so a small themed server shows something completely different from mastodon.social. |
| get_followed_hashtagsB | Hashtags you follow. Following a hashtag puts every public post carrying it into your home timeline, which is how you build a feed on a network with no algorithm. Neither existing Mastodon MCP server exposes this. |
| follow_hashtagA | Follow a hashtag, so every public post carrying it appears in your home timeline. The main way to build a feed on Mastodon. |
| unfollow_hashtagB | Stop a hashtag's posts appearing in your home timeline. |
| browse_directoryA | Accounts that have opted into being discoverable, newest or most recently active first. Scoped to your own instance unless you ask for the wider network. A way to find people on a network with no recommendation engine. |
| get_suggested_followsA | Accounts the instance suggests you follow, with the reason for each suggestion. |
| get_conversationsA | Direct conversations, newest first, each with its participants and last message. Mastodon direct messages are statuses with visibility 'direct', not a separate inbox, so anyone mentioned in one can see it. Neither existing Mastodon MCP server exposes conversations at all. |
| get_accountA | Full profile for any account: bio, counts, the metadata fields with their verification state, and whether you follow each other. Accepts @user@instance, a bare local username, or a numeric id. Resolves accounts your instance has never seen before. |
| get_followersA | Accounts that follow a given account. Pages automatically past the 40-per-request ceiling. |
| get_followingA | Accounts a given account follows. Pages automatically. |
| get_relationshipsA | For each account named, whether you follow them, whether they follow you, and whether either of you has muted or blocked the other. One call for a whole list: use this before a bulk follow or unfollow rather than reading each profile. |
| follow_accountA | Follow an account. On a locked account this sends a follow request instead. |
| unfollow_accountC | Stop following an account. |
| mute_accountA | Hide an account from your timelines without them knowing. Private and reversible; unlike a block, they can still see and reply to you. |
| unmute_accountC | Stop hiding an account. |
| block_accountA | Block an account. This is visible to them, removes any follow in either direction, and hides your posts from them. Reversible, but the follows do not come back. Needs confirm: true. |
| unblock_accountA | Remove a block. Any follows the block severed do not come back; both sides have to follow again. |
| block_domainA | Hide every account on an entire instance and remove their followers. This is the blunt instrument for a server that is a persistent problem rather than one account. Needs confirm: true. |
| unblock_domainA | Lift a domain block. Followers removed by the block are not restored. |
| get_mutesC | Accounts you have muted. |
| get_blocksC | Accounts you have blocked. |
| get_endorsementsB | Accounts you feature on your own profile. |
| get_blocked_domainsC | Whole instances you have blocked. |
| get_follow_requestsA | Accounts waiting for you to approve their follow. Only meaningful on a locked account. |
| answer_follow_requestA | Approve or reject a pending follow request. Rejecting is silent; they are not told. |
| get_notificationsA | Mentions, boosts, favourites, follows, poll results and edits to posts you interacted with. Filter by type to get only the ones that need an answer: 'mention' is the one a person actually has to deal with. |
| get_read_positionA | The last notification and home-timeline entry you marked read, shared across every client on this account. Pass the returned id as since_id to fetch only what is new. |
| mark_readA | Record how far you have read, so the next get_notifications with since_id returns only what is new. Syncs to the web app and every other client. Affects only your own view. |
| dismiss_notificationB | Remove a single notification from the list. This is not undoable. |
| clear_notificationsA | Delete all notifications permanently. This is not the same as marking them read, and there is no undo. Needs confirm: true. |
| get_listsC | Your curated lists. Pass a list id to get_list_timeline to read it, which is the closest thing Mastodon has to a custom feed. |
| create_listB | Create a curated list. Add accounts to it with add_to_list. |
| delete_listA | Delete a list. The accounts on it are not affected, only the list. Needs confirm: true. |
| get_list_membersC | The accounts on one of your lists. |
| add_to_listA | Add accounts to a list. You have to already follow an account before you can put it on a list, which is the error people hit here. |
| remove_from_listA | Remove accounts from a list. They are not unfollowed. |
| get_announcementsA | Announcements from the people who run your instance: downtime, rule changes, moderation decisions. Worth checking when something stops working. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| catch-up | Summarise what happened while you were away |
| draft-thread | Turn an idea into a thread, without posting it |
| find-my-people | Find accounts worth following on a topic |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| mastodon-accounts | |
| mastodon-concepts | |
| mastodon-output-format |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/navidmoazzez/mastodon-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server