xflux
XFlux
Affordable & stable X/Twitter API proxy service — MVP built with Next.js 15, TypeScript, Prisma, and PostgreSQL.
Features (MVP)
Landing page — Marketing site with pricing and feature overview
User auth — Email/password registration and login (NextAuth)
API Keys — Generate and manage
xflux_*API keysREST API proxy — User profiles, tweets, search (mock + optional live Twitter API v2)
MCP server — Official Registry + npm (
@xflux/xflux-mcp-server) for Claude Desktop & CursorDashboard — Usage stats, API logs, quota tracking
Monitors — KOL tweet monitoring task management
Billing — Stripe Checkout subscriptions (Starter / Growth / Pro / Scale); see docs/STRIPE.md
Related MCP server: Spectre
MCP (Claude / Cursor)
Published on the MCP Registry as io.github.yxs1640-png/xflux and on npm as @xflux/xflux-mcp-server.
export XFLUX_API_KEY=xflux_your_key_here
npx -y @xflux/xflux-mcp-serverDocs: https://www.xfluxapi.com/docs/integrations/mcp
Tech Stack
Next.js 15 (App Router)
TypeScript
Tailwind CSS 4
Prisma + PostgreSQL
NextAuth.js
Recharts
Architecture
Vercel — Next.js app, auth, dashboard, public
/api/v1/*Fly.io —
api-server/(Consumer API proxy) +Dockerfile.worker(Monitor 轮询)Supabase — PostgreSQL
See docs/DEPLOYMENT.md for Vercel + Fly.io deployment.
Quick Start
Prerequisites
Supabase 数据库配置
Supabase 新版界面里,连接串不在 Project Settings → Database,而在:
项目首页顶部 → 点击 Connect 按钮
只有 DIRECT_URL 时(本地开发够用)
Project Overview 里若已有 DIRECT_URL(端口 5432),在 .env 里 两个变量都填同一个值 即可:
DATABASE_URL="你的DIRECT_URL完整连接串"
DIRECT_URL="你的DIRECT_URL完整连接串"示例格式:
DATABASE_URL="postgresql://postgres:你的密码@db.abcdefgh.supabase.co:5432/postgres"
DIRECT_URL="postgresql://postgres:你的密码@db.abcdefgh.supabase.co:5432/postgres"然后执行:
npx prisma db push
npm run dev需要 DATABASE_URL(6543 池化连接)时
项目首页 → Connect
选择 ORMs → Prisma,或选 Transaction pooler(端口 6543)
复制 Transaction 连接串 → 填入
DATABASE_URL,末尾加?pgbouncer=trueDIRECT_URL仍用 5432 直连(Connect → Direct connection 或 Overview 里的值)
变量 | 从哪里找 | 端口 |
| Connect → Direct connection,或 Project Overview | 5432 |
| Connect → Transaction pooler / ORMs → Prisma | 6543 |
本地开发用 5432 直连即可;部署 Vercel 时再把
DATABASE_URL换成 6543 池化连接。
部署到 Vercel 时,在 Environment Variables 里添加 DATABASE_URL、DIRECT_URL、NEXTAUTH_URL、NEXTAUTH_SECRET。
Setup
cd ~/Projects/xflux
npm install
cp .env.example .env
# Default uses SQLite — no Postgres install needed
npx prisma db push
npm run devLocal database options:
Option | Command | When to use |
SQLite (default) |
| Quick local dev, no install |
Docker Postgres |
| Match production locally |
Neon (cloud) | Paste URL from neon.tech | No Docker, free tier |
For Docker Postgres, change prisma/schema.prisma provider back to postgresql and set:
DATABASE_URL="postgresql://xflux:xflux@localhost:5432/xflux?schema=public"
Environment Variables
Variable | Required | Description |
| Yes |
|
| Yes | App URL (e.g. |
| Yes | Random 32+ char secret |
| No | Twitter API v2 bearer token for live data |
| Prod | Live billing on Vercel — see docs/STRIPE.md |
Generate a secret:
openssl rand -base64 32API Usage
After registering, use your API key:
curl -H "Authorization: Bearer xflux_YOUR_KEY" \
http://localhost:3000/api/v1/users/elonmuskEndpoints
Method | Path | Description |
GET |
| User profile |
GET |
| User timeline |
GET |
| Tweet by ID |
GET |
| Search tweets |
POST |
| Post tweet (requires OAuth setup) |
Deploy to Vercel
Option A: Vercel CLI
npm i -g vercel
vercel login
vercelOption B: GitHub Integration
Push to GitHub:
git add . git commit -m "Initial XFlux MVP" git remote add origin YOUR_REPO_URL git push -u origin mainImport project at vercel.com/new
Add environment variables in Vercel dashboard:
DATABASE_URL— from Vercel Postgres or NeonNEXTAUTH_URL— your production URL (e.g.https://xflux.vercel.app)NEXTAUTH_SECRET— random secretTWITTER_BEARER_TOKEN— optional
After first deploy, run database migration:
npx prisma db pushOr add a build step with Vercel Postgres integration.
Vercel Postgres Setup
In Vercel project → Storage → Create Database → Postgres
Change
prisma/schema.prismadatasource provider fromsqlitetopostgresqlConnect to project —
DATABASE_URLis auto-injectedRedeploy (build runs
prisma db pushor migrate)
Project Structure
src/
├── app/ # Next.js App Router pages & API routes
│ ├── api/v1/ # Public REST API (proxy)
│ ├── dashboard/ # Authenticated dashboard
│ ├── docs/ # API documentation
│ └── pricing/ # Pricing page
├── components/ # React components
└── lib/ # Auth, DB, quota, Twitter proxy
prisma/
└── schema.prisma # Database schemaRoadmap
Stripe billing (Live on production — docs/STRIPE.md)
Real-time WebSocket monitoring
Telegram/Discord notifications
Account pool management
CLI tool
Batch DM / posting queue (Bull/Redis)
Legal Notice
This project interacts with X/Twitter data. Ensure compliance with X Developer Agreement and applicable laws. Use official APIs when possible.
License
MIT
Available Tools
9 toolsxflux_get_monitor_hitsA
List recent hits for one XFlux monitor (read-only). Use after xflux_list_monitors when the user wants alert history for a watched @account. Create/edit monitors in the Dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max hits (default 20) | |
| monitor_id | Yes | Monitor id from xflux_list_monitors |
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 does disclose that the call is read-only and depends on a monitor_id obtained elsewhere, which is useful. However it says nothing about result ordering (recency?), pagination/truncation behavior for large hit volumes, or auth requirements, which are real gaps for a history-listing 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?
Three short sentences, front-loaded with the core action, then prerequisite, then the out-of-scope pointer. No filler or repetition of schema content.
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 simple read-only list tool with full schema coverage and no output schema, the definition covers purpose, prerequisite, and scope adequately. It stops short of describing what a 'hit' record contains or how results are ordered, which would fully close the loop.
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% – both monitor_id (with its provenance note) and limit (with default 20 and 1-100 range) are fully documented in the schema. The description adds no syntax, default, or format detail beyond that, so the baseline 3 applies.
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 a specific verb and resource with scope: 'List recent hits for one XFlux monitor.' The parenthetical '(read-only)' and the reference to 'one monitor' distinguish it from the sibling xflux_list_monitors, so an agent can tell them apart without opening either schema.
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?
Explicitly gives the ordering prerequisite ('Use after xflux_list_monitors'), the triggering intent ('when the user wants alert history for a watched @account'), and routes the excluded operations (create/edit) to the Dashboard. When-to-use, prerequisite, and alternative are all covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xflux_get_tweetA
Fetch one public tweet/post by numeric status ID via XFlux. Use when the user pastes a tweet ID or needs a single post's text and engagement.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Tweet ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does carry some load: it discloses that only public tweets are reachable and that the result includes text and engagement metrics, which usefully sets expectations about return shape. It says nothing about auth/API-key requirements, behavior for deleted or protected IDs, or rate limits — meaningful gaps for a tool whose safety profile is otherwise undocumented.
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?
Two tight sentences: what it does first, when to use it second. No filler, no restatement of the tool name.
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 one-parameter read tool with no output schema, the description adequately signals the returned content and the public-only scope. It stops short of covering failure modes (invalid/private ID) or auth prerequisites, which is the only remaining gap.
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% (the single 'id' param is documented), so the baseline is 3. The description adds a real qualifier by specifying the ID is numeric and a status ID, resolving the ambiguity left by a string-typed param generically labeled 'Tweet ID'.
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 a specific verb and resource ('Fetch one public tweet/post') plus the lookup key ('numeric status ID'), and the singleton scope clearly separates it from siblings like xflux_search_tweets and xflux_get_user_tweets without the agent opening any schema.
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?
Gives explicit triggering conditions: when the user pastes a tweet ID, or needs a single post's text and engagement. It does not explicitly name the alternatives (e.g. search when only text/keywords are known), so the when-not case is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xflux_get_userA
X/Twitter profile lookup via XFlux. Use when the user asks for a public Twitter/X user profile, bio, follower counts, or verified status by @username. Read-only; not for posting.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Handle without @, e.g. elonmusk |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the read-only, non-posting nature of the operation, which is the most important safety signal, but says nothing about auth requirements, rate limits, suspended/protected-account behavior, or error cases.
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?
Two compact sentences, purpose first and the usage/negative constraint second. No filler and nothing buried.
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?
A single-parameter read tool with no output schema; the description covers what it does, when to use it, which fields come back, and that it is read-only. That is sufficient for an agent to select and call it correctly.
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% and the schema already documents the single parameter with format guidance ('Handle without @'). The description's 'by @username' adds no syntax detail and is slightly less precise than the schema; baseline 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?
States a specific verb and resource ('X/Twitter profile lookup') and enumerates the fields returned (bio, follower counts, verified status). It implicitly separates itself from the tweet-oriented siblings, but never names them, so an agent must infer that this is not the tool for tweets.
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?
Gives an explicit trigger condition ('Use when the user asks for a public Twitter/X user profile...') plus a negative bound ('not for posting'). It does not, however, route to the obvious alternative (xflux_get_user_tweets) for a user's posts, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xflux_get_user_tweetsA
Fetch a public X/Twitter user timeline via XFlux. Use when the user asks what someone posted lately, KOL latest tweets, or to summarize a handle's recent activity.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 20) | |
| username | Yes | Handle without @ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description must carry the full behavioral burden. It does disclose one meaningful constraint – the timeline must be 'public' – which implies private/protected accounts are not retrievable, but it says nothing about auth requirements, rate limits, result ordering, pagination, or how the default limit behaves.
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?
Two tight sentences, with the core action front-loaded before the usage triggers. Minor filler remains ('via XFlux') and jargon ('KOL') that a non-domain agent may not resolve, but nothing is redundant.
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 low-complexity two-parameter read tool this is close to sufficient, but with no output schema the agent gets no hint of what a result contains or over what time window 'recent' spans. The description also does not mention the default/max result behavior that a caller should know before invoking.
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 both 'username' ('Handle without @') and 'limit' ('Max results (default 20)') documented in the schema. The description adds no parameter meaning beyond that, so the baseline 3 applies.
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 a specific verb and resource: fetch a public X/Twitter user timeline. 'User timeline' is distinguishable from xflux_search_tweets and xflux_get_tweet, but the description never names or contrasts those siblings, so the differentiation is only implied.
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 concrete triggering scenarios: 'what someone posted lately', 'KOL latest tweets', or summarizing a handle's recent activity. That is clear when-to-use guidance, but there is no statement of when NOT to use it or which sibling to pick for keyword search vs. single-tweet lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xflux_list_monitorsA
List the user's XFlux account monitors (read-only): @targets, keywords, status, webhook flag, optional recent hits. Use when they ask what they are watching on XFlux. Creating monitors requires the Dashboard, not this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| include_hits | No | Include up to 3 recent hits per monitor (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does declare itself read-only and discloses the returned fields plus the 3-hit cap on recent hits. It says nothing about authentication requirements, rate limits, or pagination, which are meaningful for an account-scoped listing 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?
Two tight sentences with the core purpose and return contents front-loaded, and the exclusion last. Every clause earns its place; nothing is padding.
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?
With no output schema, the description correctly compensates by listing the fields returned and the read-only nature, which is enough to call the tool confidently. Auth/precondition details are the remaining omission for a zero-annotation, account-scoped tool.
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?
Only one optional parameter, and the schema already documents include_hits at 100% coverage including the 3-hit default. The description's 'optional recent hits' phrasing loosely mirrors it but adds no syntax or default detail beyond the schema, so baseline 3 applies.
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 a specific verb and resource ('List the user's XFlux account monitors') and enumerates what comes back (@targets, keywords, status, webhook flag, recent hits). It also distinguishes itself from creation flows, which the sibling list confirms is handled elsewhere.
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?
Gives a clear trigger ('when they ask what they are watching on XFlux') and an explicit exclusion ('Creating monitors requires the Dashboard, not this tool'). It misses a natural routing cue to the sibling xflux_get_monitor_hits for deeper hit history, since this tool caps at 3 hits per monitor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xflux_search_tweetsA
Search recent public tweets/posts on X/Twitter via XFlux (same operators as X search: from:, lang:, quotes). Use when the user wants tweet search, keyword monitoring research, cashtag/hashtag scans, or agent research over live X content. Prefer this over scraping.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query, e.g. from:elonmusk or "fed rate" lang:en | |
| limit | No | Max results (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the whole disclosure burden. It does surface two real behavioral facts — results are limited to "recent" content and to "public" posts — but says nothing about authentication requirements, rate limits, pagination, or result shape, which matters for a live-data search endpoint.
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?
Two sentences, front-loaded with the core verb+resource and then the usage conditions. Every clause is doing work; the only slight slack is the trailing enumeration of research use cases.
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 simple two-parameter search tool with no output schema, the description covers purpose, query dialect, and recency/public scope adequately. It leaves the caller without any sense of response volume or paging behavior, which is a minor gap given the built-in limit parameter.
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% and both parameters are documented inline, including an example query and the limit default/max. The description's operator list (from:, lang:, quotes) largely restates what the schema example already shows, so it adds little beyond the structured baseline.
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 a specific verb and resource ("Search recent public tweets/posts on X/Twitter via XFlux") and adds scope qualifiers (recent, public) plus supported operators. It doesn't explicitly contrast itself with the adjacent xflux_get_user_tweets or xflux_get_tweet siblings, so an agent must infer that this is the keyword-search path rather than the user/tweet-id path.
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?
Gives concrete trigger scenarios: "tweet search, keyword monitoring research, cashtag/hashtag scans, or agent research over live X content," and adds a comparative directive ("Prefer this over scraping"). It names no sibling alternative and states no exclusions, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xflux_smart_money_claimsB
List recent Smart Money prediction/market calls across X accounts via XFlux. Use for a feed of forward-looking claims (macro, trading, crypto, geopolitics). Optional niche and exclude list.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Window in days (default 14) | |
| limit | No | Max claims (default 20) | |
| niche | No | Optional niche filter | |
| exclude | No | Comma-separated @handles to exclude |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: no ordering, deduplication, freshness, pagination, rate-limit, or auth behavior. 'List recent' implies a read operation, but return shape and result semantics of a 'claim' are entirely unstated.
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?
Two tight sentences, front-loaded with the primary action and followed by usage scope; no filler. The trailing 'Optional niche and exclude list' is mild redundancy with the schema but does not bloat the text.
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?
With no output schema and no annotations, the description should carry more: it never indicates what a returned claim looks like, how results are ordered, or how this differs from xflux_smart_money_list/profile. Parameters are fully covered by the schema, so the gap is confined to behavior and sibling routing.
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% and each parameter has an inline description with defaults and bounds, so the baseline of 3 applies. The description only echoes 'niche' and 'exclude' as optional and adds no syntax or semantic detail (e.g., handle format) 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 gives a specific verb ('List') and a well-defined resource ('recent Smart Money prediction/market calls across X accounts via XFlux'), which is clearly more specific than the bare tool name. It does not, however, distinguish itself from the closely named siblings xflux_smart_money_list and xflux_smart_money_profile, leaving the agent to infer the boundary.
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?
'Use for a feed of forward-looking claims (macro, trading, crypto, geopolitics)' states the intended use case explicitly and matches the niche enum values. There is no guidance on when NOT to use it or which sibling to prefer for profiles/lists, but the positive context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xflux_smart_money_listA
Discover ranked Smart Money X/Twitter accounts (macro, trading, crypto, geopolitics) with recent extractable forward-looking market calls. Use when the user wants new KOL/analyst accounts to follow, alpha sources, or predictor discovery — prefer this over googling long analyst prompts. Pass exclude for handles already tracked.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Only accounts with a call in the last N days (default 14) | |
| limit | No | Max accounts to return (default 4) | |
| niche | No | Optional niche filter | |
| exclude | No | Comma-separated @handles to exclude (already tracked) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It does disclose meaningful behavior — results are ranked, restricted to accounts with an extractable forward-looking call inside the days window, and exclude already-tracked handles — but says nothing about auth requirements, rate limits, pagination, or what an empty result means.
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?
Two compact sentences plus one actionable instruction; the discovery purpose and its trigger conditions are front-loaded. The trailing 'prefer this over googling long analyst prompts' is the weakest clause — it consumes space without naming a concrete alternative tool or condition.
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?
All four parameters are optional and fully documented in the schema, and the description covers the discovery intent and filtering behavior. However, with no output schema, the description never indicates what a returned account record contains (handle, rank, call snippets), leaving the response shape unstated for a tool whose value is the ranked list itself.
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 defaults, bounds and an enum all documented in the schema, so baseline is 3. The description's only extra hint ('Pass exclude for handles already tracked') restates the schema description rather than adding format or interaction detail.
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 a specific verb and resource with scope: 'Discover ranked Smart Money X/Twitter accounts ... with recent extractable forward-looking market calls', and names the niche categories covered. It does not explicitly distinguish itself from the closely-named siblings (xflux_smart_money_profile, xflux_smart_money_claims), so the agent must infer that 'list' returns multiple accounts while those operate at claim/profile granularity.
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?
Gives concrete triggers: 'Use when the user wants new KOL/analyst accounts to follow, alpha sources, or predictor discovery', plus a routing hint ('prefer this over googling long analyst prompts'). It omits the inverse condition — e.g. that a known handle should go to xflux_smart_money_profile rather than this discovery tool — so no true when-not/exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xflux_smart_money_profileA
Get one XFlux Smart Money account profile plus recent extracted prediction calls (default last 14 days). Use when digging into a specific @analyst or KOL already found via xflux_smart_money_list.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Claim window in days (default 14) | |
| limit | No | Max claims (default 20) | |
| username | Yes | Handle without @ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. It adds useful composition detail (profile plus recent calls) and a default 14-day window, but says nothing about auth requirements, rate limits, or data freshness. 'Get' implies read-only but this is never stated.
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?
Two tight sentences, front-loaded with the action and return composition, then the usage condition. No filler; every clause earns its place.
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?
With no output schema or annotations, the description adequately explains what is returned (profile plus recent prediction calls) and the default window. It leaves minor gaps around auth/rate behavior, but for a simple read tool it is largely complete.
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 all three parameters are already documented, including the default-14 days note. The description's '(default last 14 days)' merely repeats the schema and adds no syntax or semantics beyond it. Baseline 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?
States a specific verb ('Get') and resource ('one XFlux Smart Money account profile plus recent extracted prediction calls'), and explicitly scopes it to a single account versus the list tool. An agent can distinguish it from xflux_smart_money_list without opening either schema.
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?
Gives a clear when-to-use condition ('digging into a specific @analyst or KOL') and names the prerequisite sibling ('already found via xflux_smart_money_list'). It does not address when not to use it or mention xflux_smart_money_claims as the alternative for claims-only retrieval.
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.
9 tool updates
v0.1.0- First observed
xflux_get_monitor_hits - First observed
xflux_get_tweet - First observed
xflux_get_user - First observed
xflux_get_user_tweets - First observed
xflux_list_monitors - First observed
xflux_search_tweets - First observed
xflux_smart_money_claims - First observed
xflux_smart_money_list - First observed
xflux_smart_money_profile
TDQS
Scored across 9 tools
The core X tools (get_user, search_tweets, get_user_tweets, get_tweet) are cleanly separated by resource and input shape, and descriptions reinforce this. The main soft spots are within the smart-money family: smart_money_list vs smart_money_claims both return account/claim feeds, and smart_money_profile overlaps conceptually with get_user plus claims, though the descriptions do enough to steer selection.
All tools share the xflux_ prefix and most follow a verb_noun pattern (get_user, search_tweets, list_monitors, get_monitor_hits). The smart_money_list/profile/claims group deviates into noun_noun naming, which is a minor inconsistency but still predictable within its sub-family.
Nine tools is well-scoped for a read-only X/Twitter research server, split sensibly between general tweet/user lookups, monitor inspection, and smart-money discovery. No tool appears redundant enough to drop.
The surface covers profile lookup, timeline, keyword search, single-tweet fetch, monitor listing/hits, and smart-money discovery, which is solid lifecycle coverage for a read-only research domain. Gaps are minor but real: no thread/reply traversal, no follower/following lists, and monitor creation is explicitly deferred to the Dashboard, leaving write operations out entirely.
Maintenance
Related MCP Connectors
Read public Twitter/X data: tweets, profiles, followers, search. No X developer account.
X (formerly Twitter) posts, profiles, and search for AI agents. Free key, self-minted, no signup.
X/Twitter reads, search, monitors and posting. Pay-per-call in USDC — no signup, no API keys.
Read-only public X (Twitter) data: profiles, tweets, threads, followers, search. Pay per result.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables reading public X (Twitter) content like profiles, tweets, and search results via a stealth browser, without official API costs.1113 PyPIMIT
- AlicenseCqualityBmaintenanceEnables AI agents to search, read user profiles, timelines, media, follow threads, track trends, and manage accounts on X/Twitter via GraphQL, without browser automation or paid API keys.10011MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to fully automate X/Twitter interactions including searching, posting, engaging, and managing multiple accounts without paid API keys.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to scrape Twitter/X profiles, tweets, and search results without an API key, returning structured JSON with bios, stats, and engagement metrics via x402 micropayments.1MIT