@xcreener/mcp
OfficialThis MCP server provides a local stdio bridge to XCREENER's XQL screener API, enabling AI assistants to validate, explain, and execute XQL queries against live market data across Crypto, Forex, Indices, Commodities, and Metals, without writing HTTP glue code. Key capabilities:
Validate XQL queries (
xql_validate): Check syntax without hitting live data.Explain XQL queries (
xql_explain): Get execution plan and human‑readable explanation.Run XQL queries (
xql_run): Execute against real‑time data, returning matching instruments.Natural language reference (
xql_nl_reference): Map plain‑English trading phrases to XQL syntax.Multi‑market screening: Target any supported market – Crypto, Forex, Indices, Commodities, Metals.
Technical analysis: Use indicators like RSI, SMA, ATR, custom
letvariables, and more.Safe workflow: Validate before running to avoid wasted live‑data round trips.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@xcreener/mcpWhich metals are oversold on the 1h chart?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@xcreener/mcp
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 buildThen point your client at node dist/index.js with XCREENER_API_KEY set in its environment.
Configuration
Variable | Required | Description |
| 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 |
| Tool | Validate XQL query text by parsing and planning it, without executing it against live data. |
| Tool | Parse and plan an XQL query, returning its execution plan and a human-readable explanation. |
| Tool | Parse, plan, and execute an XQL query against live market data, returning matching instruments. |
| 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) < 30XCREENER: 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 > 0XCREENER: 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 > 0XCREENER: 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 > 0XCREENER: 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 typecheckThe 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 toolsxql_explainA
Parse and plan an XQL query, returning its execution plan and a human-readable explanation.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Raw XQL query text |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Raw XQL query text |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Raw XQL query text |
TDQS
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.
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.
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.
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.
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.
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 tool update
v0.2.0- Added
xql_nl_reference
3 tool updates
v0.1.0- First observed
xql_explain - First observed
xql_run - First observed
xql_validate
TDQS
Scored across 4 tools
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.
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.
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.
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
Related MCP Connectors
Query SEC EDGAR filings, XBRL financials, and company data through MCP. STDIO & Streamable HTTP.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
TradeOS MCP: ticker search, My Agent, chart TA, macro news. npm stdio or HTTP.
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for screening Indian stocks and mutual funds by wrapping screener.in and Morningstar India, enabling fundamental queries from Claude or Cursor.-
- AlicenseAqualityBmaintenanceMCP server for TradingView's market screener API, enabling stock, forex, crypto, and ETF screening, technical analysis, and investor workflows via Claude or CLI.12290 npm50MIT
- AlicenseBqualityBmaintenanceA 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.26MIT
- AlicenseNot gradedqualityBmaintenanceA 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 npmMIT