Skip to main content
Glama
jsilets

twscrape-twitter-mcp

by jsilets

twscrape-twitter-mcp

PyPI CI Python License: MIT MCP

An MCP server that reads X (Twitter): posts, threads, replies, quotes, and search. It wraps twscrape and uses your own logged-in session, so there's no paid X API and no developer account. Tools return clean markdown shaped for an agent to read, including image, video, and GIF URLs and any external links in a post.

Works with any MCP client over the two standard transports — local stdio and hosted Streamable HTTP.

Tools

Tool

Returns

read_tweet(url_or_id)

One post as markdown.

read_thread(url_or_id, max_replies=50)

Root post + the author's self-thread + top replies.

read_replies(url_or_id, limit=50)

Replies to a post.

read_quotes(url_or_id, limit=30)

Quote-tweets (best-effort, search-based).

user_timeline(username, limit=40, include_replies=False)

A user's recent posts, newest first. Set include_replies=True to include replies.

search(query, limit=20, product="Latest")

Search results. Supports from:, has:media, min_faves:, etc.

user_profile(username)

A user's profile as markdown: bio, location, follower/following/tweet counts, join date.

Related MCP server: x-mcp

Install

uv tool install twscrape-twitter-mcp     # or: pipx install twscrape-twitter-mcp

Then authenticate once (next section) and verify:

twscrape-twitter-mcp smoke               # reads one public tweet end-to-end

Authenticate

Reads run against your own X session. Pick one path:

1. Launch a dedicated browser (recommended). Opens a separate Chrome/Brave profile with a DevTools port, you sign in to X once, and the session is captured. It does not touch your daily browser or automate X's login flow.

twscrape-twitter-mcp login --launch-browser chrome   # or: brave

2. Attach to a dedicated browser profile. Only use this when you already run an isolated Chromium profile with a debug port. Browser debugging exposes browser data, and recent Chrome versions do not enable it for the default profile.

# macOS
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --remote-debugging-port=9222 --user-data-dir=/tmp/x-mcp-browser
# Linux:   google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/x-mcp-browser
# Windows: "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --user-data-dir=%TEMP%\x-mcp-browser

twscrape-twitter-mcp login --attach                  # add --cdp-url for a non-default port

3. Headless / CI (raw cookies). A server can't open your desktop browser, so add a session from auth_token + ct0 cookies. Run this without cookie flags to enter values through hidden prompts, rather than leaving secrets in shell history:

twscrape-twitter-mcp init

The captured session is reused across restarts. Run login --launch-browser chrome again when it expires, or to add burner sessions for rate-limit rotation. twscrape-twitter-mcp accounts lists the pool.

Use burner accounts, not your main — see Legal.

Connect your client

The server runs locally over stdio. Most MCP clients take a JSON block like this:

{
  "mcpServers": {
    "x": {
      "command": "twscrape-twitter-mcp",
      "args": ["serve", "--transport", "stdio"]
    }
  }
}

Client-specific equivalents:

claude mcp add x --scope user -- twscrape-twitter-mcp serve --transport stdio

Add the JSON block above to claude_desktop_config.json (Settings → Developer → Edit Config).

[mcp_servers.x]
command = "twscrape-twitter-mcp"
args = ["serve", "--transport", "stdio"]
{
  "mcpServers": {
    "x": {
      "command": "twscrape-twitter-mcp",
      "args": ["serve", "--transport", "stdio"]
    }
  }
}
{
  "servers": {
    "x": {
      "command": "twscrape-twitter-mcp",
      "args": ["serve", "--transport", "stdio"]
    }
  }
}

For a hosted private instance (see Deploy), point a preconfigured client at the HTTP endpoint with a bearer token. This is static bearer auth, not an OAuth sign-in flow.

{
  "mcpServers": {
    "x": {
      "url": "https://YOUR-APP.example.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}

Then ask, e.g. "read this thread: <url>".

Deploy

Run the server always-on and reachable over HTTP (POST /mcp). It ships as a container; Cloudflare Workers won't work because twscrape is Python with native deps.

A headless container can't open your desktop browser, so authenticate locally first (login --attach writes storage_state.json under TWSCRAPE_TWITTER_MCP_HOME), then ship that session to the host — copy the file to the mounted volume, or run the cookie-based init over SSH. The server reloads a persisted session on boot.

Always set a token when exposing HTTP — anyone who can reach the endpoint can use your X session:

export TWSCRAPE_TWITTER_MCP_AUTH_TOKEN=$(openssl rand -hex 32)
fly launch --no-deploy
fly volumes create twscrape_twitter_mcp_data --size 1
fly secrets set TWSCRAPE_TWITTER_MCP_AUTH_TOKEN=$(openssl rand -hex 32)
fly deploy
# seed a session onto the volume through hidden prompts:
fly ssh console -C "twscrape-twitter-mcp init"

Point Railway at this repo (it reads railway.json + Dockerfile), add a volume mounted at /data, set TWSCRAPE_TWITTER_MCP_AUTH_TOKEN, and seed a session via the Railway shell with twscrape-twitter-mcp init.

Clients send Authorization: Bearer <token>.

Configuration

Env var

Default

Purpose

TWSCRAPE_TWITTER_MCP_HOME

~/.config/twscrape-twitter-mcp

Where the sqlite account pool lives. Point at a volume in prod.

TWSCRAPE_TWITTER_MCP_DB

$TWSCRAPE_TWITTER_MCP_HOME/accounts.db

Override the pool path directly.

TWSCRAPE_TWITTER_MCP_AUTH_TOKEN

(unset)

Required bearer token for HTTP transport.

TWSCRAPE_TWITTER_MCP_PROXY

(unset)

Global proxy for every account.

TWSCRAPE_TWITTER_MCP_CDP_URL

http://127.0.0.1:9222

Browser DevTools endpoint for login --attach.

TWSCRAPE_TWITTER_MCP_DEFAULT_LIMIT

40

Default timeline and search result count (1–100).

PORT

8080

HTTP port (Railway injects this).

How it works

The hard part of reading X — GraphQL signing, the x-client-transaction-id header, TLS fingerprinting — lives entirely in twscrape, which is pinned. This package is a read-only MCP layer on top and never touches that machinery. When X changes something and reads break, the fix is a version bump, not reverse-engineering.

Limits

  • X can expire, rate-limit, or suspend the account behind your session.

  • Protected, deleted, geo-blocked, or otherwise restricted posts may not be readable.

  • Quote-tweet coverage is search-based and incomplete.

  • Search results depend on X's current search behavior and can vary by session.

  • It does not decrypt browser cookie stores — use browser attach or cookie init.

Reading X with your own logged-in session may violate X's Terms of Service, and accounts used for scraping can be rate-limited or suspended. Use burner accounts, not your main. Provided as-is for research and personal use; you are responsible for how you use it.

License

MIT.

Credits

The hard scraping work is twscrape by vladkens. This is a read-only MCP layer on top — go star it.

Available Tools

8 tools
auth_statusA
Read-only

Check whether this server has an active X session, without exposing cookies.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true. The description adds a valuable behavioral guarantee ('without exposing cookies') that is not covered by annotations. No contradiction.

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 a single, front-loaded sentence with no wasted words. Every word adds meaning.

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?

With no parameters and an output schema present, the description is complete for this simple check tool. The sibling context further clarifies its distinct purpose.

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?

The tool has zero parameters and an empty input schema. The baseline for zero-param tools is 4; the description correctly avoids unnecessary parameter details.

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 uses a specific verb ('Check') with a clear resource ('active X session') and scope ('this server'). It clearly differentiates from sibling tools which all focus on reading social media content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used for verifying server auth status but does not explicitly state when to use it or mention alternatives. No exclusions or context are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_quotesA
Read-only

Read quote-tweets of an X post (best-effort, via search:quoted_tweet_id). Coverage is partial, X does not expose a complete quotes endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
url_or_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, but the description adds important behavioral context: 'best-effort' and 'coverage is partial, X does not expose a complete quotes endpoint.' This goes beyond the structured annotations and provides critical expectations about data completeness.

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?

Two concise sentences front-load the purpose and immediately follow with the key limitation. No filler or redundant information, every sentence earns its place.

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 the tool's simplicity, the output schema, and annotations, the description covers the essential aspects: what it does, how it does it, and its limitations. No critical behavioral detail is missing for a read-only, best-effort quote retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not explain what url_or_id or limit mean. While parameter names are intuitive, the description fails to compensate for the lack of schema documentation, leaving the agent without explicit guidance on usage constraints like limit's default/maximum.

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 states a specific verb ('Read') and resource ('quote-tweets of an X post'), and distinguishes from siblings like read_replies and read_tweet. It also mentions the method via search:quoted_tweet_id, making the purpose 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?

The description clearly indicates this tool is for quote-tweets, which differentiates it from reading a tweet or replies. However, it does not explicitly mention when not to use it or point to alternatives (e.g., 'use read_replies for replies'), so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_repliesA
Read-only

Read the replies to an X post as markdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
url_or_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only and external nature are covered. The description adds the markdown output format, which is useful. However, it does not disclose other behaviors like pagination, rate limits, or how the limit parameter affects results. With annotations present, this is acceptable but not rich.

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 a single, focused sentence that front-loads the action and output format. Every word earns its place, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and has an output schema, so the description need not explain return values. However, it lacks guidance on parameter semantics (particularly limit) and usage context. Given the low schema coverage, the description partially compensates but leaves gaps that the agent must infer from the name and siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain parameters. It implies url_or_id refers to the X post, but does not explicitly describe the accepted format (URL vs ID) or the meaning of 'limit'. The parameter names and constraints exist in the schema, but the description adds minimal semantic value beyond the obvious.

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 uses a specific verb 'Read' with a clear resource ('replies to an X post') and output format ('as markdown'). It distinguishes from siblings like read_tweet (single post) and read_thread (thread), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the tool name and description ('Read the replies') but no explicit guidance is given about when to use this versus alternatives like read_quotes or user_timeline. The sibling names provide context, but the description does not mention them or exclude other scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_threadA
Read-only

Read a full X thread as markdown: the root post, the author's self-thread, and top replies. Pass any tweet in the thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
url_or_idYes
max_repliesNo
include_repliesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses the output format (markdown) and the structural components returned (root, self-thread, top replies). It also reveals a convenient behavior: any tweet in the thread can serve as the input. This adds meaningful context without contradicting 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?

The description is two sentences long with no filler. It front-loads the primary purpose, then gives a practical input tip. Every word contributes to understanding the tool.

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?

With an output schema present and read-only annotations, the description covers the core behavior well: what is read, in what format, and how to specify the thread. It doesn't explain how max_replies affects 'top replies' or timing behavior, but the schema defaults and output schema reduce the need for that detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate. It only hints at the meaning of url_or_id ('Pass any tweet in the thread') but provides no explanation for max_replies or include_replies. Even though the parameter names are somewhat self-explanatory, the description fails to add value beyond what the schema already states.

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 identifies the tool's purpose with a specific verb ('Read') and resource ('full X thread as markdown'). It explicitly lists the thread components (root post, author's self-thread, top replies), making it distinct from sibling tools like read_tweet or read_replies.

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?

The phrase 'Pass any tweet in the thread' gives concrete guidance on how to invoke the tool. While it doesn't explicitly contrast with alternatives, the description's emphasis on 'full thread' and 'top replies' implies it is intended for thread-level reading rather than single-tweet or replies-only use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_tweetA
Read-only

Read a single X post by URL or numeric id. Returns clean markdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
url_or_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is known. The description adds that output is 'clean markdown', which informs the agent about response formatting. This adds value beyond annotations without contradicting them.

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?

Two sentences, direct and free of filler. The action and key input are front-loaded.

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?

For a single-parameter read tool with readOnly and openWorld annotations plus an output schema, the description provides sufficient context: what it does, how to specify input, and what output to expect. It doesn't cover edge cases, but these are less critical given the tool's simplicity.

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?

The input schema has no property descriptions, so the description's note that the parameter accepts a URL or numeric id adds necessary semantics. However, it doesn't elaborate on formats or edge cases, leaving some ambiguity.

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 the tool reads a single X post, specifying input as URL or numeric id, which distinguishes it from sibling tools like read_thread or read_replies that handle conversations or contextual posts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for individual posts but does not explicitly state when to prefer it over siblings like read_thread or read_replies. It provides context ('single') but lacks explicit alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

user_profileA
Read-only

Read an X user's profile by handle. Returns clean markdown.

Pass the handle with or without a leading @.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this with 'Read'. It adds valuable behavior beyond annotations by specifying the return format ('clean markdown') and the parameter flexibility (with or without @). This is more than the baseline requirement given the existing 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?

Two short sentences, front-loaded with the core purpose, no wasted words. Every phrase adds value, including the return format and handle guidance.

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 the tool has only one parameter, clear annotations, an output schema, and a low complexity, the description fully covers the essentials: what it does, how to provide input, and what format to expect. No critical gaps remain.

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?

The schema has 0% description coverage, so the description must compensate. It does so by clarifying that 'username' means the X handle and that it may include a leading @. Though brief, this fully covers the single parameter's meaning and format.

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 states a specific verb ('Read') and resource ('X user's profile'), and distinguishes this tool from siblings like read_tweet and user_timeline by focusing specifically on the profile rather than posts or timelines. The handle-based identifier is clearly specified.

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?

The description makes the usage context clear: you use this tool when you need a user's profile by handle. It also provides input formatting guidance (optional leading @). It does not explicitly name alternatives or exclusions, but the context is unambiguous enough for an AI agent to select correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

user_timelineA
Read-only

Read a user's recent posts as markdown, newest first.

Pass the handle with or without a leading @. Set include_replies=True to include the user's replies alongside their standalone posts.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
usernameYes
include_repliesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the agent knows it's safe. The description adds valuable behavioral details: returns markdown, newest-first ordering, handle normalization, and include_replies behavior. These go beyond what annotations provide, though it could mention pagination or error conditions.

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 two sentences, front-loaded with the core purpose, and adds no fluff. Every sentence contributes useful information, making it highly concise and readable.

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?

For a simple read tool with an output schema and readOnly annotation, the description covers the essential usage, input flexibility, and return format. It lacks details on pagination or edge cases, but these are likely in the output schema or not critical for basic invocation.

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 description coverage is 0%, so the description must compensate. It explains the username parameter (handle with/without @) and include_replies, but does not mention the limit parameter or its default/max behavior. The limit is somewhat self-evident from the schema, but the description doesn't fully cover all parameters.

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 the tool reads a user's recent posts as markdown, newest first. The verb 'Read' plus the resource 'user's recent posts' is specific, and the format/order details distinguish it from siblings like read_tweet or user_profile.

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?

The description gives clear context for using this tool (reading a user's timeline) and includes practical usage instructions for the username format (with or without @) and the include_replies parameter. It doesn't explicitly mention when not to use it, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct aspect of X data: auth status, individual tweets, user profiles, threads, replies, quotes, timelines, and search. Even though read_thread and read_replies both involve replies, their scopes are clearly differentiated.

Naming Consistency4/5

The naming is mostly consistent with snake_case and a read_* prefix for the data access tools, but auth_status, user_profile, user_timeline, and search follow a different pattern. This minor inconsistency does not hinder usability.

Tool Count5/5

Eight tools provide a well-scoped coverage for a read-only Twitter client. Each tool serves a clear purpose and the count is within the ideal range for a focused server.

Completeness4/5

The tool set covers the core read workflows: tweets, profiles, threads, replies, quotes, timelines, and search. Minor gaps exist, such as no ability to fetch a user's followers/following or to paginate through large result sets, but these are reasonable for the stated purpose.

Maintenance

ActivityActive
ResponsivenessNo issues

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

  • F
    license
    Not graded
    quality
    B
    maintenance
    Read-only MCP server for public X/Twitter search and retrieval via twitter.2-38.com
  • A
    license
    B
    quality
    B
    maintenance
    Read-only X/Twitter research MCP server using xAI's Responses API. Supports OAuth login for X Premium users and falls back to API key authentication.
    5
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for the Twitter/X read API, enabling search, user profiles, tweets, followers, and more via natural language.
    94
    149
    MIT

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/jsilets/twscrape-twitter-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server