Skip to main content
Glama
zezeron
by zezeron

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

No installation required - connect directly to hosted server:

npx -y mcp-remote https://mcp.tweetsave.org/sse

Local (npx)

npx -y tweetsave-mcp

Installation

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/sse

Claude 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.json

  • Claude Desktop (Windows): %APPDATA%\Claude\claude_desktop_config.json

  • Cursor: ~/.cursor/mcp.json

  • Windsurf: ~/.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:

OpenCode

opencode mcp add

Then follow prompts:

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-mcp

Claude 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

url

string

required

Tweet URL or ID

response_format

'markdown' | 'json'

'markdown'

Output format

tweetsave_get_thread

Fetch a tweet thread (connected tweets).

Parameter

Type

Default

Description

url

string

required

Any tweet URL in thread

response_format

'markdown' | 'json'

'markdown'

Output format

tweetsave_to_blog

Convert tweet to blog post format.

Parameter

Type

Default

Description

url

string

required

Tweet URL or ID

include_engagement

boolean

true

Include likes/retweets

response_format

'markdown' | 'json'

'markdown'

Output format

tweetsave_batch

Fetch multiple tweets at once.

Parameter

Type

Default

Description

urls

string[]

required

Array of URLs (max 10)

response_format

'markdown' | 'json'

'markdown'

Output format

tweetsave_extract_media

Extract direct media URLs from a tweet.

Parameter

Type

Default

Description

url

string

required

Tweet URL or ID

media_type

'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 PM

Blog 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.9K

Limitations

  • 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

Available Tools

5 tools
tweetsave_batchBatch Fetch TweetsA
Read-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]"

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYesArray of tweet URLs or IDs (max 10)
response_formatNoOutput format: 'markdown' or 'json'markdown

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 URLsA
Read-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:

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesTweet URL or tweet ID
media_typeNoType of media to extract: 'all', 'photos', or 'videos'all

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ThreadA
Read-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:

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL or ID of any tweet in the thread
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 TweetA
Read-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:

Note: Does not fetch replies. Use tweetsave_to_blog for a complete blog post with formatting.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesTweet URL or tweet ID. Examples: 'https://x.com/user/status/123456' or '123456'
response_formatNoOutput format: 'markdown' for human-readable or 'json' for structured datamarkdown

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 PostA
Read-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:

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesTweet URL or tweet ID to convert
include_engagementNoInclude engagement metrics (likes, retweets, etc.)
response_formatNoOutput format: 'markdown' for blog post or 'json' for structured datamarkdown

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A4.3/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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