get_user
Profile
Profile of one X user by handle. 1 credit.
freshhandlerequired
io.xdataapiPublished by xdataapi.ioOfficial publisherv0.3.2Updated Oct 28, 2026
Read-only public X (Twitter) data: profiles, tweets, threads, followers, search. Pay per result.
Hosted MCP server for read-only public X (Twitter) data: profiles, tweets, threads, followers and search, billed per result in prepaid credits.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.xdataapi%2Fxdataapi/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Add this to your client's mcpServers config.
{
"mcpServers": {
"xdataapi-x-twitter-data": {
"type": "http",
"url": "https://api.xdataapi.io/mcp"
}
}
}Read-only public X (Twitter) data for developers and AI agents. Profiles, tweets, timelines, threads, followers, and search with the x.com operators. One credit per tweet or profile returned. Empty results and errors are free.
https://api.xdataapi.io (OpenAPI 3.1: openapi.yaml, also at https://api.xdataapi.io/openapi.yaml)https://api.xdataapi.io/mcp (Streamable HTTP, OAuth or x-api-key)Not affiliated with X Corp. Public data only. No write endpoints.
Claude Code, as a plugin — the server plus a skill that teaches the search operators and the cost rules:
Or the server on its own, in any MCP client:
The server signs you in with OAuth on first use. Clients without OAuth pass a key instead:
Stdio-only clients can bridge with mcp-remote:
Tools: get_user, get_users, get_user_tweets, get_followers, get_following, get_follower_ids,
search_tweets, get_tweet, get_tweets, get_thread, get_replies, get_quotes, get_retweeters,
get_balance. All read-only. Listed on the official MCP Registry as io.xdataapi/xdataapi.
Every response carries credits_charged and balance_remaining. Pages return next_cursor; pass it back as cursor.
TypeScript, npm install xdataapi:
Python, pip install xdataapi:
The TypeScript client has no runtime dependencies; npm install xdataapi pulls one package.
Both are generated from openapi.yaml by sdk/generate.sh; the source
is in sdk/typescript and sdk/python. Nothing in them is hand-written
except the small wrapper in sdk/typescript/src/index.ts and the READMEs, so an API change means
regenerating rather than editing.
Installable tools for agent frameworks. Each one carries the credit cost in every tool description, so
the model can see what a plan costs before it runs it, and each takes a max_results cap so one agent
step cannot empty the balance.
For anything else, see examples/: CrewAI, the Vercel AI SDK, and the OpenAI Agents SDK. An agent that speaks MCP needs none of them.
Prepaid credit packs from $10. Credits never expire. No per-call minimum. Rate limit rises with lifetime spend. Details: https://xdataapi.io/#pricing
[email protected]. Security reports: https://xdataapi.io/.well-known/security.txt
Source: README.md at commit 31f4716
Profile
Profile of one X user by handle. 1 credit.
freshhandlerequiredProfiles, batch
Profiles of up to 100 X users by handle in one call. 1 credit per profile found.
freshhandlesrequiredUser tweets
Latest tweets of a user, newest first. 1 credit per tweet.
userrequiredcountfreshcursorFollowers
Followers of a user. 0.1 credit per profile. Not every account tier can read this; a 403 is free.
userrequiredcountfreshcursorFollower ids
Numeric ids of the followers of a user, no profiles. 0.02 credit per id. Same page as get_followers, so a page read there is a cache hit here. A 403 is free.
userrequiredcountfreshcursorFollowing
Accounts a user follows. 0.1 credit per profile. Not every account tier can read this; a 403 is free.
userrequiredcountfreshcursorSearch
X advanced search. q takes the x.com operators. 1 credit per tweet or profile. product Latest is always available; Top may answer 403 (free).
qrequiredcountfreshcursorproductTweet
One tweet by numeric id, with its author. 1 credit.
idrequiredfreshTweets, batch
Up to 100 tweets by numeric id in one call. 1 credit per tweet found.
idsrequiredfreshThread
A tweet with its thread and replies; the focal tweet comes first. 1 credit per tweet returned.
idrequiredfreshcursorReplies
Direct replies to a tweet, one page. 1 credit per reply.
idrequiredfreshcursorQuotes
Tweets that quote a tweet, newest first. 1 credit per tweet.
idrequiredcountfreshcursorRetweeters
Accounts that retweeted a tweet. 0.5 credit per profile. Not every account tier can read this; a 403 is free.
idrequiredcountfreshcursorBalance
Credits left on this key and its rate limit. Free.
Takes no parameters.
100% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
claude plugin marketplace add xdataapi/xdataapiclaude plugin install xdataapi@xdataapiclaude mcp add --transport http xdataapi https://api.xdataapi.io/mcp{ "mcpServers": { "xdataapi": { "url": "https://api.xdataapi.io/mcp", "headers": { "x-api-key": "xd_live_..." } } }}{ "mcpServers": { "xdataapi": { "command": "npx", "args": ["-y", "mcp-remote", "https://api.xdataapi.io/mcp", "--header", "x-api-key:${XDATAAPI_KEY}"], "env": { "XDATAAPI_KEY": "xd_live_..." } } }}curl "https://api.xdataapi.io/v1/tweets/search?q=from:x%20since:2026-09-01&count=20" \ -H "x-api-key: xd_live_..."import { xdataapi } from 'xdataapi';const api = xdataapi({ apiKey: process.env.XDATAAPI_KEY! });const { data } = await api.searchTweets({ query: { q: 'from:x', count: 20 } });from xdataapi import AuthenticatedClientfrom xdataapi.api.tweets import search_tweetsclient = AuthenticatedClient(base_url="https://api.xdataapi.io", token=KEY, prefix="", auth_header_name="x-api-key")page = search_tweets.sync(client=client, q="from:x", count=20)