Mastodon MCP
With this server, you can interact with Mastodon by creating and managing toots with various customizable options:
Create and publish text content as toots
Customize visibility (public, unlisted, private, or direct)
Mark content as sensitive with a boolean parameter
Add spoiler warnings/text before toot content
Attach media files (images, videos, audio)
Provide alt text for media attachments
Schedule toots for future posting using ISO 8601 datetime format
Used for secure credential management to store and retrieve Mastodon API tokens, ensuring secure access to Mastodon accounts without hardcoding credentials.
Provides tools for posting content to Mastodon, including creating toots with customizable visibility and content warnings, uploading and attaching media files (images, videos, audio), and adding alt text to media attachments.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Mastodon MCPpost a toot about my new blog post with a screenshot"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Mastodon MCP
A Model Context Protocol server that provides tools for interacting with Mastodon. Currently supports creating toots with optional media attachments.
Features
Create toots with customizable visibility and content warnings
Upload and attach media files (images, videos, audio)
Add alt text/descriptions to media attachments
Schedule toots for a future time
Secure credential management using environment variables or 1Password CLI
Related MCP server: MCP Twitter
Prerequisites
Node.js 18+
pnpm
A Mastodon account and API access token
Optionally, 1Password CLI (
op) installed and configured if using 1Password for credential management.
Installation
# Clone the repository
git clone [repository-url]
cd mastodon-mcp
# Install dependencies
pnpm install
# Build the project
pnpm buildConfiguration
The tool requires a Mastodon API token. You can provide this token in one of the following ways:
Environment Variable (Recommended for simplicity): Set the
MASTODON_ACCESS_TOKENenvironment variable:export MASTODON_ACCESS_TOKEN="your_mastodon_api_token"1Password: Store your token at:
op://Personal/Floss.Social Key/notesPlain
You can optionally set the Mastodon instance URL via environment variable:
export MASTODON_INSTANCE_URL="https://your.instance.social"If not set, it defaults to https://floss.social.
Usage
Start the MCP server:
pnpm startThe server exposes a single tool mastodon_create_toot with the following parameters:
content(required): The text content of your tootvisibility: One of "public", "unlisted", "private", or "direct" (default: "public")sensitive: Boolean flag for sensitive content (default: false)spoiler_text: Warning text shown before the content (default: "")media_file: Path to a media file to attachmedia_description: Alt text/description for the attached mediascheduled_at: Optional ISO 8601 datetime to schedule the toot for a future time (e.g., "2024-07-04T10:00:00-07:00")
Example Usage with MCP Inspector
Start the inspector:
npx @modelcontextprotocol/inspector node dist/mcp-server.jsOpen http://localhost:5173 in your browser
Use the tool with parameters like:
{
"content": "Hello from MCP!",
"visibility": "public",
"media_file": "/path/to/image.jpg",
"media_description": "A beautiful sunset",
"scheduled_at": "2025-01-01T12:00:00Z"
}Development
# Run in development mode with auto-reloading
pnpm dev
# Build the project
pnpm build
# Run the built server
pnpm startSecurity
No credentials are hardcoded in the codebase
API tokens can be securely managed via environment variables or retrieved from 1Password.
API responses are git-ignored to prevent accidental credential leaks
License
ISC
Available Tools
4 toolsmastodon_create_tootB
Create a new toot (status) on Mastodon, optionally with media attachments
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | The text content of the toot | |
| visibility | No | The visibility level of the toot | public |
| sensitive | No | Mark the toot as sensitive content | |
| spoiler_text | No | Text to be shown as a warning before the actual content | |
| media_file | No | Path to a media file to attach (image, video, or audio) | |
| media_description | No | Alt text / description for the attached media | |
| scheduled_at | No | Optional ISO 8601 datetime string to schedule the toot for a future time. Examples: 2024-01-01T10:00:00Z, 2024-01-01T10:00:00+01:00 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions creating a toot (implying a write/mutation operation) and optional media attachments, but doesn't disclose behavioral traits like authentication requirements, rate limits, error conditions, or what happens on success/failure. For a mutation tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that is front-loaded with the core purpose ('Create a new toot on Mastodon') and includes a useful qualifier ('optionally with media attachments'). There is zero waste or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool (creating content) with no annotations and no output schema, the description is incomplete. It doesn't address authentication needs, rate limits, error handling, or what the tool returns. For a 7-parameter tool that performs a write operation, more contextual information is necessary to guide an AI agent effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 7 parameters thoroughly. The description adds minimal value by mentioning 'optionally with media attachments,' which loosely relates to the media_file and media_description parameters, but doesn't provide additional meaning beyond what the schema specifies. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Create a new toot') and resource ('on Mastodon'), and distinguishes it from sibling tools by specifying it's for posting content rather than retrieving timelines, tags, or searching. It also mentions the optional media attachments feature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites (e.g., authentication needs), when not to use it, or how it differs from other posting methods if they exist. It only states what it does without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mastodon_get_timelineB
Fetch posts from Mastodon timelines (home, public, or local)
| Name | Required | Description | Default |
|---|---|---|---|
| timeline_type | No | Type of timeline to fetch | home |
| limit | No | Number of posts to fetch (1-40) | |
| max_id | No | Get posts older than this ID | |
| since_id | No | Get posts newer than this ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the fetch action but doesn't mention authentication requirements, rate limits, pagination behavior (beyond max_id/since_id parameters), or what the return format looks like. For a read operation with zero annotation coverage, this leaves significant behavioral gaps unaddressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose. Every word earns its place - 'fetch posts' establishes action, 'Mastodon timelines' specifies resource, and '(home, public, or local)' provides essential context. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what authentication is needed, what the return format looks like, how pagination works beyond parameter names, or error conditions. The description provides basic purpose but lacks essential context for effective tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all parameters well-documented in the schema itself. The description adds no additional parameter semantics beyond what the schema provides - it mentions timeline types but doesn't explain their differences or usage contexts. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'fetch' and resource 'posts from Mastodon timelines', specifying three timeline types. It distinguishes from siblings like create_toot (write vs read) and search (specific vs general), though could be more explicit about differentiation from trending_tags. Purpose is clear but sibling differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by listing timeline types (home, public, local), suggesting when to use each variant. However, it doesn't explicitly state when to choose this tool over alternatives like search or trending_tags, nor does it provide exclusions or prerequisites. Usage is contextually implied but not explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mastodon_get_trending_tagsB
Get currently trending hashtags on Mastodon
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of trending hashtags to fetch (1-20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but offers minimal information. It doesn't mention rate limits, authentication requirements, data freshness (e.g., how 'currently' is defined), or response format. This leaves significant gaps in understanding how the tool behaves beyond its basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It's front-loaded with the core purpose ('Get currently trending hashtags on Mastodon'), making it easy to parse quickly. Every part of the sentence contributes directly to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete for effective use. It doesn't explain what the tool returns (e.g., list of hashtags with metadata like usage counts), potential errors, or behavioral constraints like rate limiting. For a tool with no structured behavioral data, this minimal description leaves too many unanswered questions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter-specific information beyond what's already in the schema, which has 100% coverage for the single 'limit' parameter. Since the schema fully documents the parameter's purpose, range, and default, the baseline score of 3 is appropriate—the description doesn't compensate but doesn't need to given the comprehensive schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get') and resource ('currently trending hashtags on Mastodon'), making the tool's purpose immediately understandable. It distinguishes itself from siblings like mastodon_get_timeline (which retrieves timeline posts) and mastodon_search (which searches content), focusing specifically on trending hashtags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention scenarios where trending hashtags are needed over other data sources, nor does it reference sibling tools like mastodon_search that might overlap in functionality for hashtag-related queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mastodon_searchC
Search for accounts, hashtags, or posts on Mastodon
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query text | |
| type | No | Type of content to search for | |
| limit | No | Number of results to return (1-40) | |
| resolve | No | Whether to resolve non-local accounts/statuses | |
| following | No | Only search accounts the user is following |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but only states the basic action without details on permissions, rate limits, pagination, or response format. It doesn't mention whether this is a read-only operation, what authentication is required, or how results are structured, which are critical for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a search tool with 5 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain return values, error conditions, or behavioral nuances, leaving significant gaps for the agent to operate effectively in this context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter-specific information beyond what the input schema already provides, as schema description coverage is 100%. The schema fully documents all parameters (query, type, limit, resolve, following) with descriptions, enums, defaults, and constraints, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Search') and resource ('accounts, hashtags, or posts on Mastodon'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this search tool from sibling tools like 'mastodon_get_timeline' or 'mastodon_get_trending_tags', which also retrieve content but with different approaches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'mastodon_get_trending_tags' for hashtag discovery or 'mastodon_get_timeline' for chronological posts. It lacks context about use cases, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v1.0.0- Added
mastodon_get_timeline - Added
mastodon_get_trending_tags - Added
mastodon_search
1 tool update
- First observed
mastodon_create_toot
TDQS
Each tool has a clearly distinct purpose: creating posts, fetching timelines, retrieving trending tags, and searching. There is no overlap in functionality, making it easy for an agent to select the right tool for each task without confusion.
All tool names follow a consistent 'mastodon_verb_noun' pattern with snake_case, using clear verbs like create, get, and search. This predictability enhances usability and reduces cognitive load for agents.
With 4 tools, the server is well-scoped for basic Mastodon interactions, covering posting, reading, trending, and searching. It could be slightly expanded for completeness, but the count is reasonable and each tool earns its place.
The tools cover core read and write operations (create toots, get timelines/search) but lack update/delete functions for posts, account management, or media handling. This creates minor gaps that agents might need to work around for full lifecycle coverage.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Model Context Protocol server for Studex tools, notifications, and profile integrations
A Model Context Protocol server for Wix AI tools
Mastodon MCP — public Mastodon data via mastodon.social (no auth required)
Related MCP Servers
- AlicenseCqualityDmaintenanceA Model Context Protocol (MCP) server for managing social media posts, currently supporting X (formerly Twitter).37MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI models and applications to interact directly with Twitter/X, providing capabilities to create posts, reply to tweets, retrieve user data, and manage account actions.1711MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI assistants to create and manage Twitter drafts on Typefully, supporting features like thread creation, scheduling, and retrieving published content.6MIT
- AlicenseNot gradedqualityDmaintenanceModel Context Protocol server that enables programmatic interaction with Twitter API, allowing users to post tweets, search for content, and retrieve user timelines through standardized MCP tools.19MIT
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/The-Focus-AI/mastodon-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server