tweetsave-mcp
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., "@tweetsave-mcpconvert this tweet to a blog post: https://x.com/user/status/123"
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.
Features
Fetch tweets with full content, media, and engagement metrics
Convert tweets to formatted blog posts
Extract media URLs (photos, videos, GIFs)
Batch fetch multiple tweets (up to 10)
Support for quote tweets and polls
Markdown and JSON output formats
Related MCP server: x-mcp-server
Quick Start
Remote MCP (Recommended)
No installation required - connect directly to hosted server:
npx -y mcp-remote https://mcp.tweetsave.org/sseLocal (npx)
npx -y tweetsave-mcpInstallation
Remote MCP (Recommended)
Connect to hosted server - no local installation needed.
Claude Code
# Global (all projects)
claude mcp add -s user tweetsave -- npx -y mcp-remote https://mcp.tweetsave.org/sse
# Project only
claude mcp add tweetsave -- npx -y mcp-remote https://mcp.tweetsave.org/sseClaude Desktop / Cursor / Windsurf
Add to your MCP configuration:
{
"mcpServers": {
"tweetsave": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.tweetsave.org/sse"]
}
}
}Config file locations:
Claude Desktop (macOS):
~/Library/Application Support/Claude/claude_desktop_config.jsonClaude Desktop (Windows):
%APPDATA%\Claude\claude_desktop_config.jsonCursor:
~/.cursor/mcp.jsonWindsurf:
~/.codeium/windsurf/mcp_config.json
VS Code
Create .vscode/mcp.json in your workspace:
{
"servers": {
"tweetsave": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.tweetsave.org/sse"]
}
}
}Gemini CLI
gemini mcp add tweetsave "npx -y mcp-remote https://mcp.tweetsave.org/sse"JetBrains IDEs
Settings → Tools → MCP Server → Add:
Name: TweetSave
Command: npx
Arguments: -y mcp-remote https://mcp.tweetsave.org/sse
OpenCode
opencode mcp addThen follow prompts:
Name: tweetsave
Type: Remote
OAuth: No
Antigravity
Click ... menu → MCP → Manage MCP Server → View raw config:
{
"mcpServers": {
"tweetsave": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.tweetsave.org/sse"]
}
}
}Local Installation
For offline use or development.
Claude Code
# Global (all projects)
claude mcp add -s user tweetsave -- npx -y tweetsave-mcp
# Project only
claude mcp add tweetsave -- npx -y tweetsave-mcpClaude Desktop / Cursor / Windsurf
{
"mcpServers": {
"tweetsave": {
"command": "npx",
"args": ["-y", "tweetsave-mcp"]
}
}
}Available Tools
tweetsave_get_tweet
Fetch a single tweet with all content.
Parameter | Type | Default | Description |
| string | required | Tweet URL or ID |
| 'markdown' | 'json' | 'markdown' | Output format |
tweetsave_get_thread
Fetch a tweet thread (connected tweets).
Parameter | Type | Default | Description |
| string | required | Any tweet URL in thread |
| 'markdown' | 'json' | 'markdown' | Output format |
tweetsave_to_blog
Convert tweet to blog post format.
Parameter | Type | Default | Description |
| string | required | Tweet URL or ID |
| boolean | true | Include likes/retweets |
| 'markdown' | 'json' | 'markdown' | Output format |
tweetsave_batch
Fetch multiple tweets at once.
Parameter | Type | Default | Description |
| string[] | required | Array of URLs (max 10) |
| 'markdown' | 'json' | 'markdown' | Output format |
tweetsave_extract_media
Extract direct media URLs from a tweet.
Parameter | Type | Default | Description |
| string | required | Tweet URL or ID |
| 'all' | 'photos' | 'videos' | 'all' | Filter type |
Output Examples
Markdown Format
## @itsPaulAi (Paul Couvert)
This is so good 🔥
You can run this new model on a laptop which is:
- 100% open source
- Only 3B active parameters (!!)
---
**Engagement**: 228 likes | 15 retweets | 29.9K views
**Posted**: January 19, 2026 at 08:02 PMBlog Post Format
# This is so good 🔥 You can run this new model...
*A post by @itsPaulAi*
**Author**: Paul Couvert ([@itsPaulAi](https://x.com/itsPaulAi))
**Published**: January 19, 2026 at 08:02 PM
**Read time**: 1 min read
---
[Content here]
---
## Engagement
- **Likes**: 228
- **Retweets**: 15
- **Views**: 29.9KLimitations
No replies/comments: FxTwitter API doesn't support fetching replies
Rate limits: FxTwitter has rate limits for heavy usage
Private tweets: Cannot access protected/private accounts
License
MIT
Contributing
Contributions welcome! Please open an issue or PR.
Support
Twitter: @zezeron
Available Tools
5 toolstweetsave_batchBatch Fetch TweetsARead-onlyIdempotent
Fetch multiple tweets at once (max 10).
Useful for:
Collecting tweets from a list
Building a feed from multiple sources
Comparing multiple tweets
Args:
urls (string[]): Array of tweet URLs or IDs (max 10)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Array of tweets or a combined feed in markdown format.
Examples:
"Fetch these tweets: [url1, url2, url3]"
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Array of tweet URLs or IDs (max 10) | |
| response_format | No | Output format: 'markdown' or 'json' | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive; description adds batch limit and output format details, consistent with annotations.
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?
Extremely concise: single sentence for purpose, bullet list for use cases, then args/returns/examples; no wasted words.
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?
Describes return as 'Array of tweets or a combined feed in markdown format' which is acceptable but could be more precise about tweet object structure; no output schema required.
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 already covers both parameters with descriptions and enums; description repeats them without adding new meaning; baseline 3 per high schema coverage.
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?
Clearly states 'Fetch multiple tweets at once (max 10)' with specific verb and resource, and the max limit distinguishes it from sibling tools like get_tweet.
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?
Provides explicit use cases (collecting from list, building feed, comparing) implying when to use, but does not explicitly state when not to use or list alternatives; sibling names help differentiate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tweetsave_extract_mediaExtract Media URLsARead-onlyIdempotent
Extract direct media URLs (photos, videos, GIFs) from a tweet.
Returns direct URLs that can be downloaded or embedded. Video URLs are the highest quality available.
Args:
url (string): Tweet URL or tweet ID
media_type ('all' | 'photos' | 'videos'): Filter by media type (default: 'all')
Returns: List of media items with:
type (photo/video/gif)
url (direct download URL)
dimensions (width/height)
duration (for videos)
Examples:
"Get all media from this tweet: https://x.com/user/status/123"
"Extract video URLs from tweet 123456"
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Tweet URL or tweet ID | |
| media_type | No | Type of media to extract: 'all', 'photos', or 'videos' | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, etc. Description adds useful behavioral details like 'Video URLs are the highest quality available' and return structure, enhancing transparency beyond annotations.
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?
Description is well-organized with sections (Args, Returns, Examples), concise, and front-loaded with the main purpose. Every sentence adds value without 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 no output schema, description provides return structure (type, url, dimensions, duration), which covers key aspects. It lacks error handling or limits, but is sufficient for basic use.
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 coverage is 100%, so baseline is 3. Description adds examples and clarifies that 'url' can be a URL or ID, and explains the media_type filter with defaults, providing extra semantic value.
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?
Description clearly states 'Extract direct media URLs' and specifies types (photos, videos, GIFs). It distinguishes from siblings like tweetsave_get_tweet which likely returns tweet text, making the tool's specific resource and action unambiguous.
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?
Description provides clear context for when to use this tool (extracting media) and includes examples. However, it does not explicitly state when not to use it or compare with sibling tools, so it lacks exclusions but offers sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tweetsave_get_threadGet Tweet ThreadARead-onlyIdempotent
Fetch a tweet thread (multiple connected tweets by the same author).
Note: Current implementation fetches the main tweet. Full thread crawling requires additional API access.
Args:
url (string): URL or ID of any tweet in the thread
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Array of tweets in the thread with all content and media.
Examples:
"Get the full thread from this tweet: https://x.com/user/status/123"
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL or ID of any tweet in the thread | |
| response_format | No | Output format: 'markdown' for human-readable or 'json' for structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds that it fetches the main tweet only and full thread requires additional API access, which is useful behavioral context beyond annotations.
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?
Concise: purpose, note, args, returns, examples in a few sentences. Front-loaded and no fluff.
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?
No output schema, but description states 'Array of tweets with all content and media.' Provides examples. Sufficient for the tool's complexity.
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 coverage is 100% (baseline 3). Description explains url as 'URL or ID of any tweet in the thread' and response_format with 'human-readable or structured data', including an example, adding value beyond enum values.
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?
States 'Fetch a tweet thread (multiple connected tweets by the same author).' Specific verb+resource, clearly distinguishes from siblings like tweetsave_get_tweet (single tweet) and tweetsave_to_blog (conversion).
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?
Provides a caveat about current implementation only fetching the main tweet and that full thread requires additional API access. This guides when-to-use but does not explicitly name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tweetsave_get_tweetGet TweetARead-onlyIdempotent
Fetch a single tweet with all its content including text, media (photos, videos, GIFs), polls, and engagement metrics.
This tool retrieves tweet data from Twitter/X using the FxTwitter API. It returns the tweet content, author info, media URLs, and engagement stats.
Args:
url (string): Tweet URL or tweet ID
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Tweet data including:
Author info (name, username, avatar)
Tweet text
Media URLs (photos, videos)
Engagement (likes, retweets, replies, views)
Poll data (if applicable)
Quote tweet (if applicable)
Examples:
"Get tweet from https://x.com/elonmusk/status/123456"
"Fetch this tweet: 123456789"
Note: Does not fetch replies. Use tweetsave_to_blog for a complete blog post with formatting.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Tweet URL or tweet ID. Examples: 'https://x.com/user/status/123456' or '123456' | |
| response_format | No | Output format: 'markdown' for human-readable or 'json' for structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds behavioral context by mentioning the use of the FxTwitter API, the output format options (markdown/json), and the return data structure including author info, media URLs, and engagement stats. While it does not discuss rate limits or authentication, the combination of annotations and description provides sufficient transparency.
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 structured and front-loaded: first sentence states purpose, followed by paragraphs for arguments, returns, examples, and notes. Every sentence adds value without redundancy. It is appropriately sized for the tool's complexity.
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 absence of an output schema, the description provides a good overview of return data (author, text, media, engagement, polls, quote tweets). It also notes limitations. However, it could be more precise about the exact fields and nesting structure, leaving some ambiguity for agents that need strict parsing guidance.
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?
With 100% schema description coverage, the description adds significant meaning beyond the schema: it explains that `url` can be a tweet URL or ID and provides examples; for `response_format`, it clarifies the two options and their purposes. The 'Returns' section elaborates on the output, compensating for the lack of an output 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 that the tool fetches a single tweet with all its content, including text, media, polls, and engagement metrics. It distinguishes from sibling tools by noting that it does not fetch replies and directs users to `tweetsave_to_blog` for complete blog post formatting.
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 explicit guidance on when to use: to retrieve a single tweet. It also specifies what not to use it for (fetching replies) and offers an alternative tool (`tweetsave_to_blog`) for related tasks. Examples of input formats (URL or ID) further clarify usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tweetsave_to_blogConvert Tweet to Blog PostARead-onlyIdempotent
Convert a tweet into a formatted blog post with title, content, media, and metadata.
This tool transforms a tweet into a readable blog post format, perfect for:
Archiving tweets
Creating content from threads
Generating blog posts from viral tweets
Args:
url (string): Tweet URL or tweet ID
include_engagement (boolean): Include likes/retweets/etc. (default: true)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: BlogPost with:
Generated title from tweet content
Author info with avatar
Formatted content with media
Tags from hashtags
Read time estimate
Engagement summary
Source link
Examples:
"Convert this tweet to a blog post: https://x.com/user/status/123"
"Make a blog from tweet 123456789"
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Tweet URL or tweet ID to convert | |
| include_engagement | No | Include engagement metrics (likes, retweets, etc.) | |
| response_format | No | Output format: 'markdown' for blog post or 'json' for structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly (true), destructive (false), and idempotent (true). The description adds context on what the tool produces (BlogPost with fields) and the transformation process, enhancing understanding.
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?
Description is well-structured with sections for purpose, use cases, arguments, return values, and examples. Every sentence adds value, no 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 3 parameters, no nested objects, and no output schema, the description covers the tool's functionality thoroughly, including return fields, formats, and use cases. It is complete for effective agent usage.
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 coverage is 100% with parameter descriptions. Description repeats and elaborates on parameters, adds examples, and explains the effect of 'include_engagement' and 'response_format', providing additional semantics beyond the 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 'Convert a tweet into a formatted blog post', specifying the verb (convert) and distinct resource (tweet to blog post). It differentiates from siblings like get_tweet or extract_media by focusing on transformation and formatting.
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?
Description lists specific use cases (archiving, content creation, generating blog posts) and includes example prompts, but does not explicitly contrast with sibling tools or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose: fetching single tweets, multiple tweets, threads, extracting media, and converting to blog format. There is no overlap or ambiguity in their intended use.
All tools share the 'tweetsave_' prefix and use snake_case. However, 'tweetsave_batch' is a noun form while others use verbs (get, extract, to), showing minor inconsistency.
With 5 tools, the server is well-scoped for its purpose of retrieving and converting tweets. Each tool earns its place without being excessive or insufficient.
Core retrieval and conversion operations are covered, but missing save-to-storage or search capabilities. The server name implies saving, yet no tool persists tweets locally.
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
X/Twitter reads, search, monitors and posting. Pay-per-call in USDC — no signup, no API keys.
Turn any URL or text into Twitter threads, LinkedIn posts, Instagram captions, YouTube titles and…
Web scraping for AI agents. Converts URLs to clean, LLM-ready Markdown with anti-bot bypass.
X (formerly Twitter) posts, profiles, and search for AI agents. Free key, self-minted, no signup.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to automate Twitter/X interactions with over 140 tools, requiring no API key.496486Apache 2.0
- AlicenseAqualityAmaintenanceEnables reading public X (Twitter) content like profiles, tweets, and search results via a stealth browser, without official API costs.11MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to fully automate X/Twitter interactions including searching, posting, engaging, and managing multiple accounts without paid API keys.MIT
- AlicenseNot gradedqualityCmaintenanceConverts X (Twitter) posts into JSON, PDF, PNG, Markdown, or Slack/Discord messages using public endpoints, no API key or login required.MIT
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/zezeron/tweetsave-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server