Skip to main content
Glama

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 keys

  • REST API proxy — User profiles, tweets, search (mock + optional live Twitter API v2)

  • MCP server — Official Registry + npm (@xflux/xflux-mcp-server) for Claude Desktop & Cursor

  • Dashboard — 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-server

Docs: 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

  • Node.js 20+

  • PostgreSQL database (local, Neon, Supabase, or Vercel Postgres)

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 池化连接)时

  1. 项目首页 → Connect

  2. 选择 ORMs → Prisma,或选 Transaction pooler(端口 6543)

  3. 复制 Transaction 连接串 → 填入 DATABASE_URL,末尾加 ?pgbouncer=true

  4. DIRECT_URL 仍用 5432 直连(Connect → Direct connection 或 Overview 里的值)

变量

从哪里找

端口

DIRECT_URL

Connect → Direct connection,或 Project Overview

5432

DATABASE_URL

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 dev

Local database options:

Option

Command

When to use

SQLite (default)

DATABASE_URL="file:./dev.db"

Quick local dev, no install

Docker Postgres

npm run db:up then use postgres URL in .env

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"

Open http://localhost:3000

Environment Variables

Variable

Required

Description

DATABASE_URL

Yes

file:./dev.db (local SQLite) or PostgreSQL URL (production)

NEXTAUTH_URL

Yes

App URL (e.g. http://localhost:3000)

NEXTAUTH_SECRET

Yes

Random 32+ char secret

TWITTER_BEARER_TOKEN

No

Twitter API v2 bearer token for live data

STRIPE_* / BILLING_CHECKOUT_ENABLED

Prod

Live billing on Vercel — see docs/STRIPE.md

Generate a secret:

openssl rand -base64 32

API Usage

After registering, use your API key:

curl -H "Authorization: Bearer xflux_YOUR_KEY" \
  http://localhost:3000/api/v1/users/elonmusk

Endpoints

Method

Path

Description

GET

/api/v1/users/:username

User profile

GET

/api/v1/users/:username/tweets

User timeline

GET

/api/v1/tweets/:id

Tweet by ID

GET

/api/v1/search?q=keyword

Search tweets

POST

/api/v1/tweets

Post tweet (requires OAuth setup)

Deploy to Vercel

Option A: Vercel CLI

npm i -g vercel
vercel login
vercel

Option B: GitHub Integration

  1. Push to GitHub:

    git add .
    git commit -m "Initial XFlux MVP"
    git remote add origin YOUR_REPO_URL
    git push -u origin main
  2. Import project at vercel.com/new

  3. Add environment variables in Vercel dashboard:

    • DATABASE_URL — from Vercel Postgres or Neon

    • NEXTAUTH_URL — your production URL (e.g. https://xflux.vercel.app)

    • NEXTAUTH_SECRET — random secret

    • TWITTER_BEARER_TOKEN — optional

  4. After first deploy, run database migration:

    npx prisma db push

    Or add a build step with Vercel Postgres integration.

Vercel Postgres Setup

  1. In Vercel project → Storage → Create Database → Postgres

  2. Change prisma/schema.prisma datasource provider from sqlite to postgresql

  3. Connect to project — DATABASE_URL is auto-injected

  4. Redeploy (build runs prisma db push or 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 schema

Roadmap

  • 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)

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 tools
xflux_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax hits (default 20)
monitor_idYesMonitor id from xflux_list_monitors

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTweet ID

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesHandle without @, e.g. elonmusk

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 20)
usernameYesHandle without @

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_hitsNoInclude up to 3 recent hits per monitor (default false)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesSearch query, e.g. from:elonmusk or "fed rate" lang:en
limitNoMax results (default 20)

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoWindow in days (default 14)
limitNoMax claims (default 20)
nicheNoOptional niche filter
excludeNoComma-separated @handles to exclude

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoOnly accounts with a call in the last N days (default 14)
limitNoMax accounts to return (default 4)
nicheNoOptional niche filter
excludeNoComma-separated @handles to exclude (already tracked)

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoClaim window in days (default 14)
limitNoMax claims (default 20)
usernameYesHandle without @

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 9 tool updatesv0.1.0
    • First observedxflux_get_monitor_hits
    • First observedxflux_get_tweet
    • First observedxflux_get_user
    • First observedxflux_get_user_tweets
    • First observedxflux_list_monitors
    • First observedxflux_search_tweets
    • First observedxflux_smart_money_claims
    • First observedxflux_smart_money_list
    • First observedxflux_smart_money_profile

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables reading public X (Twitter) content like profiles, tweets, and search results via a stealth browser, without official API costs.
    11
    13 PyPI
    MIT
  • A
    license
    C
    quality
    B
    maintenance
    Enables 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.
    100
    11
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to fully automate X/Twitter interactions including searching, posting, engaging, and managing multiple accounts without paid API keys.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    1
    MIT