Skip to main content
Glama
xcreener

@xcreener/mcp

Official
by xcreener

@xcreener/mcp

npm version license

Local stdio MCP bridge for XCREENER's XQL screener API — validate, explain, and run XQL queries from Claude Desktop, Cursor, Windsurf, or any stdio MCP client.

About XCREENER

XCREENER is a market screener that scans Crypto, Forex, Indices, Commodities, and Metals simultaneously, so you don't have to check charts one at a time. It's built for beginner traders through ready-made screeners as well as for developers and AI agents, who can express custom conditions in XCREENER Query Language (XQL) and run them instantly via a REST API or MCP. Learn more at xcreener.com.

Related MCP server: tradingview-mcp-server

What this MCP server does

This package is the local stdio bridge to XCREENER's XQL API specifically. It exposes xql_validate, xql_explain, xql_run, and xql_nl_reference as MCP tools, so any stdio MCP client can check and execute XQL screens against live market data without you writing any HTTP glue code.

Installation

Claude Desktop (.mcpb)

Download the latest xcreener.mcpb from this repo's Releases page, then double-click it to install — Desktop asks for your API key in a masked field as part of that same dialog. No JSON to hand-edit, no separate Node install.

Other MCP clients (npx)

Add this to your client's MCP server config (e.g. Cursor, Windsurf, Claude Code):

{
  "mcpServers": {
    "xcreener": {
      "command": "npx",
      "args": ["-y", "@xcreener/mcp"],
      "env": { "XCREENER_API_KEY": "your-api-key" }
    }
  }
}

From source

git clone https://github.com/xcreener/xcreener-mcp.git
cd xcreener-mcp
npm install
npm run build

Then point your client at node dist/index.js with XCREENER_API_KEY set in its environment.

Configuration

Variable

Required

Description

XCREENER_API_KEY

Yes

Your XCREENER API key, from xcreener.com/account/api-key.

The key is checked lazily — an invalid or missing key won't stop the server from starting, it'll just surface as an auth error the first time a tool is called.

Available tools

Name

Type

Description

xql_validate

Tool

Validate XQL query text by parsing and planning it, without executing it against live data.

xql_explain

Tool

Parse and plan an XQL query, returning its execution plan and a human-readable explanation.

xql_run

Tool

Parse, plan, and execute an XQL query against live market data, returning matching instruments.

xql_nl_reference

Tool

Reference document mapping natural-language trading phrases to XQL syntax.

Example session

Under the hood, the assistant calls the xql_nl_reference tool, translates your plain-English ask into an XQL query, and calls xql_validate/xql_run — what you see is just the human-visible conversation. A few real examples:

Multi-market screen

You: check all markets and see which instruments are oversold at the moment

XCREENER runs (same query per market — CRYPTO, FOREX, INDICES, METALS, COMMODITIES):

market = "CRYPTO"
timeframe = h1
columns = [rsi(14)]
sort = rsi(14) asc
rsi(14) < 30

XCREENER: Oversold (RSI(14) < 30, hourly) across all markets:

Market

Symbol

RSI(14)

Crypto

BTCUSDT

26.3

Crypto

ETHUSDT

27.5

Crypto

XRPUSDT

28.0

Commodities

WHEATUSD

21.0

Commodities

CORNUSD

22.6

Forex, Indices, and Metals had no oversold matches.

Single-market snapshot

You: can you give me updates on how the metals are doing?

XCREENER runs:

market = "METALS"
timeframe = h1
let uptrend = close > sma(50)
columns = [close, roc(1), rsi(14), uptrend]
sort = roc(1) desc
close > 0

XCREENER: Metals snapshot, hourly:

Symbol

Close

1h ROC

RSI(14)

Trend (vs SMA50)

XPTUSD (Platinum)

1,637.98

+0.03%

54.8

Uptrend

XAGUSD (Silver)

57.48

+0.02%

38.6

Downtrend

XAUUSD (Gold)

4,043.69

+0.01%

41.0

Downtrend

Overall: fairly quiet, no oversold/overbought extremes (all RSI 38–55). Platinum's the strongest — up-trending with the best momentum — while gold and silver are drifting below their 50-hour average.

Cross-pair aggregate analysis

You: which currency is the weakest and strongest?

XCREENER runs:

market = "FOREX"
timeframe = h1
columns = [close, roc(1)]
sort = roc(1) desc
close > 0

XCREENER: Based on the 1h ROC across all 28 pairs (aggregating each currency's average move against the other seven):

Rank

Currency

Avg 1h Strength

1 (strongest)

CHF

+0.0414%

2

JPY

+0.0184%

...

8 (weakest)

USD

-0.0421%

Strongest: CHF — up against every other major this hour. Weakest: USD — sold broadly against EUR, GBP, AUD, JPY, and CHF alike.

Actionable trade plan

You: NZD looks like the strongest currency this week — which pair should I long based on that, and what stop-loss/take-profit levels make sense?

XCREENER runs:

market = "FOREX"
timeframe = h1
symbols = ["NZDUSD"]
columns = [close, atr(14), sma(50), highest(high, 20), lowest(low, 20), w::lowest(low, 52), rsi(14)]
close > 0

XCREENER: Idea: Long NZDUSD — the cleanest multi-timeframe confluence: NZD is the #2 strongest currency of the week, daily is non-conflicting, and hourly shows an uptrend (close 0.5881 > SMA(50) 0.5846) with bullish-but-not-overbought momentum (RSI(14) 60.8).

Level

Rationale

Entry

~0.5881

Current price

Stop Loss

0.5845

Below the 20h swing low and h1 SMA(50); ~3× ATR(14)

TP1

0.5940

~1.6:1 R:R, partial scale-out

TP2

0.6093

Weekly 52-week high, ~5.9:1 R:R

Not financial advice — a technical read off the pulled data; confirm against execution/spread costs before entering.

Development

npm run dev         # tsup --watch
npm run build        # build dist/index.js
npm run build:mcpb   # build + pack dist-mcpb/xcreener.mcpb
npm run lint
npm run typecheck

The build produces a single bundled ESM file (dist/index.js) with all dependencies inlined via tsup, so both the npm package and the .mcpb bundle ship without node_modules.

License

MIT — see LICENSE.

Available Tools

4 tools
xql_explainA

Parse and plan an XQL query, returning its execution plan and a human-readable explanation.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesRaw XQL query text

TDQS

A3.8/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 burden. It discloses the output type (execution plan and explanation) but does not explicitly state that the query is not executed, nor describe any side effects, permissions, or error behavior. Given the tool's simplicity, this is adequate 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 15-word sentence that leads with the key actions and includes the output in a compact, easily parsed format. No wasted words.

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

Completeness4/5

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

For a tool with one parameter, no output schema, and no annotations, the description provides the essential information: what it does and what it returns. It lacks guidance on when to choose this over related tools, but the core functionality is 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?

The schema description 'Raw XQL query text' fully covers the single parameter, so baseline is 3. The tool description reinforces that the input is an XQL query but adds no additional syntactic or semantic detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verbs 'Parse and plan' and identifies the resource as 'an XQL query'. It clearly differentiates from siblings (xql_validate, xql_run) by stating it returns an execution plan and explanation, which is neither validation nor execution.

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?

No explicit usage guidance or alternatives are mentioned. The description's implied use case is understanding query execution, but it does not contrast with xql_validate or xql_run or state when not to use it.

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

xql_nl_referenceA

Fetch the XQL natural-language reference document, mapping retail-trader phrasing to valid XQL syntax and documenting hard limits (300-bar lookback ceiling, closed market/timeframe enums, the atr no-source-argument exception, etc.). Call this before writing a query, or after xql_validate/xql_explain/xql_run returns isError: true, to see the exact construct you likely got wrong.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosing behavior. It states the operation is a fetch (read-only) and describes the content and purpose. It doesn't mention potential absence of side effects or error behavior, but the simple retrieval nature is reasonably transparent.

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, with no fluff. The first sentence packs concrete examples of what the reference contains; the second provides direct usage guidance. Every phrase earns its place relative to the tool's simplicity.

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 (0 params, no output schema, no annotations), the description is complete: it states the return type (reference document), key contents, and when to call it. It also references sibling tools appropriately, fully covering the context needed for correct use.

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

Parameters4/5

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

The tool has zero parameters, and the baseline for 0-param tools is 4. The description doesn't need to explain parameters; the schema confirms no inputs. The description adds semantic value by explaining the tool's role, which is sufficient.

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 fetches the XQL natural-language reference document and specifies its contents (mapping retail phrasing to syntax, hard limits). It distinguishes from siblings (xql_validate/xql_explain/xql_run) by positioning itself as the reference lookup rather than an execution or validation tool.

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?

Explicit usage guidance is provided: call before writing a query, or after sibling tools return isError: true. This directly addresses when to use this tool versus the alternatives, giving clear context and an actionable trigger.

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

xql_runA

Parse, plan, and execute an XQL query against live market data, returning matching instruments. Call xql_validate on the query first to catch syntax errors before spending a live-data round trip on this call.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesRaw XQL query text

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 behavioral disclosure burden. It mentions 'live-data round trip' and 'executing against live market data', implying cost/latency, but does not disclose whether the operation is read-only, potential error modes, or required permissions.

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 primary purpose and followed by a concise usage instruction. Every sentence contributes value without redundancy.

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

Completeness4/5

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

For a one-parameter tool with no output schema, the description adequately explains the action, return type (matching instruments), and the recommended validation workflow. It lacks details on error handling or response format, but these are not 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 schema fully describes the query parameter as 'Raw XQL query text' (100% coverage). The description adds context about executing against live data, but does not significantly augment the schema's parameter meaning.

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's purpose with a specific verb ('execute') and resource ('XQL query against live market data'), and distinguishes it from siblings by mentioning xql_validate as a pre-step. It accurately describes the return of matching instruments.

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

Usage Guidelines5/5

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

The description explicitly instructs to call xql_validate first to catch syntax errors before using this tool, providing clear when-to-use guidance and an alternative. This differentiates it from xql_validate and implies the workflow.

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

xql_validateA

Validate XQL query text by parsing and planning it, without executing it against live data.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesRaw XQL query text

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description bears the transparency burden. It discloses the key non-execution behavior, which is valuable safety context. However, it does not describe what happens on invalid input (e.g., error handling) or any side effects beyond planning.

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 sentence, front-loaded with the action and resource. Every word contributes value, with no redundancy or unnecessary detail.

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 simple one-parameter tool, the description covers purpose, input, and key behavioral constraint. However, it omits what the tool returns or how success/failure is indicated, which is a notable gap given there is no output schema to fill this in.

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 100% coverage with a description for the 'query' parameter. The tool description adds no additional semantic meaning beyond what the schema already provides, matching the baseline.

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 validates XQL query text by parsing and planning it. The phrase 'without executing it against live data' explicitly differentiates it from sibling tool xql_run, 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 implies the tool is for checking query validity before execution. The qualifier 'without executing it against live data' provides clear context for when to use it, though it does not explicitly name alternative tools or exclusion scenarios.

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. 1 tool updatev0.2.0
    • Addedxql_nl_reference
  2. 3 tool updatesv0.1.0
    • First observedxql_explain
    • First observedxql_run
    • First observedxql_validate

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct role: validate parses/plans without execution, explain returns the execution plan and explanation, run executes against live data, and nl_reference fetches documentation. There is no overlap in purpose despite validate and explain sharing a parsing/planning step.

Naming Consistency4/5

All tool names share the consistent 'xql_' prefix, but the pattern after the prefix is not perfectly uniform: three use a verb (validate, explain, run) while one uses a noun phrase (nl_reference). Still readable and predictable, with minor deviation.

Tool Count5/5

With only 4 tools, the server is tightly focused on XQL query operations: validate, explain, run, and reference. Each tool serves a necessary function in the query workflow without redundancy.

Completeness5/5

The tool surface covers the full query lifecycle: reference for syntax, validate for error checking, explain for plan analysis, and run for execution. No obvious gaps exist given the stated purpose of an XQL query server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for screening Indian stocks and mutual funds by wrapping screener.in and Morningstar India, enabling fundamental queries from Claude or Cursor.
    -
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for TradingView's market screener API, enabling stock, forex, crypto, and ETF screening, technical analysis, and investor workflows via Claude or CLI.
    12
    290 npm
    50
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    A resilient MCP server wrapping FiinQuant/FiinQuantX Python SDK for Claude Desktop and Cursor, providing market data, fundamental analysis, screening, and technical indicators via stdio with timeouts, error envelopes, and free-tier guards.
    26
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A thin stdio proxy to Quantustik's hosted MCP server, providing live S&P 500 signals, forecasts, and market data for MCP clients that only support local stdio servers.
    58 npm
    MIT