{"slug": "show-hn-mcp-server-so-ai-agents-can-screen-markets-in-plain-english", "title": "Show HN: MCP server so AI agents can screen markets in plain English", "summary": "XCREENER released an open-source MCP server that lets AI agents screen Crypto, Forex, Indices, Commodities, and Metals markets using plain English. The local stdio bridge exposes XQL validate, explain, run, and natural-language reference tools to Claude Desktop, Cursor, Windsurf, and other stdio MCP clients, with a one-click installer and no manual JSON configuration required.", "body_md": "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.\n\n[XCREENER](https://xcreener.com) 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](https://xcreener.com).\n\nThis package is the local stdio bridge to XCREENER's XQL API specifically. It exposes `xql_validate`\n\n, `xql_explain`\n\n, `xql_run`\n\n, and `xql_nl_reference`\n\nas MCP tools, so any stdio MCP client can check and execute XQL screens against live market data without you writing any HTTP glue code.\n\nDownload the latest `xcreener.mcpb`\n\nfrom this repo's [Releases](https://github.com/xcreener/xcreener-mcp/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.\n\nAdd this to your client's MCP server config (e.g. Cursor, Windsurf, Claude Code):\n\n```\n{\n  \"mcpServers\": {\n    \"xcreener\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@xcreener/mcp\"],\n      \"env\": { \"XCREENER_API_KEY\": \"your-api-key\" }\n    }\n  }\n}\ngit clone https://github.com/xcreener/xcreener-mcp.git\ncd xcreener-mcp\nnpm install\nnpm run build\n```\n\nThen point your client at `node dist/index.js`\n\nwith `XCREENER_API_KEY`\n\nset in its environment.\n\n| Variable | Required | Description |\n|---|---|---|\n`XCREENER_API_KEY` |\nYes | Your XCREENER API key, from\n|\n\nThe key is checked lazily — an invalid or missing key won't stop the server from starting, it'll just surface as an `auth`\n\nerror the first time a tool is called.\n\n| Name | Type | Description |\n|---|---|---|\n`xql_validate` |\nTool | Validate XQL query text by parsing and planning it, without executing it against live data. |\n`xql_explain` |\nTool | Parse and plan an XQL query, returning its execution plan and a human-readable explanation. |\n`xql_run` |\nTool | Parse, plan, and execute an XQL query against live market data, returning matching instruments. |\n`xql_nl_reference` |\nTool | Reference document mapping natural-language trading phrases to XQL syntax. |\n\nUnder the hood, the assistant calls the `xql_nl_reference`\n\ntool, translates your plain-English ask into an XQL query, and calls `xql_validate`\n\n/`xql_run`\n\n— what you see is just the human-visible conversation. A few real examples:\n\n**Multi-market screen**\n\nYou:check all markets and see which instruments are oversold at the moment\n\nXCREENER runs(same query per market —`CRYPTO`\n\n,`FOREX`\n\n,`INDICES`\n\n,`METALS`\n\n,`COMMODITIES`\n\n):\n\n```\nmarket = \"CRYPTO\"\ntimeframe = h1\ncolumns = [rsi(14)]\nsort = rsi(14) asc\nrsi(14) < 30\n```\n\nXCREENER:Oversold (RSI(14) < 30, hourly) across all markets:\n\nMarket 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.\n\n**Single-market snapshot**\n\nYou:can you give me updates on how the metals are doing?\n\nXCREENER runs:\n\n``` js\nmarket = \"METALS\"\ntimeframe = h1\nlet uptrend = close > sma(50)\ncolumns = [close, roc(1), rsi(14), uptrend]\nsort = roc(1) desc\nclose > 0\n```\n\nXCREENER:Metals snapshot, hourly:\n\nSymbol 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.\n\n**Cross-pair aggregate analysis**\n\nYou:which currency is the weakest and strongest?\n\nXCREENER runs:\n\n```\nmarket = \"FOREX\"\ntimeframe = h1\ncolumns = [close, roc(1)]\nsort = roc(1) desc\nclose > 0\n```\n\nXCREENER:Based on the 1h ROC across all 28 pairs (aggregating each currency's average move against the other seven):\n\nRank Currency Avg 1h Strength 1 (strongest) CHF +0.0414% 2 JPY +0.0184% ... 8 (weakest) USD -0.0421%\n\nStrongest: CHF— up against every other major this hour.Weakest: USD— sold broadly against EUR, GBP, AUD, JPY, and CHF alike.\n\n**Actionable trade plan**\n\nYou: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?\n\nXCREENER runs:\n\n```\nmarket = \"FOREX\"\ntimeframe = h1\nsymbols = [\"NZDUSD\"]\ncolumns = [close, atr(14), sma(50), highest(high, 20), lowest(low, 20), w::lowest(low, 52), rsi(14)]\nclose > 0\n```\n\nXCREENER: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).\n\nLevel 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\n\nNot financial advice — a technical read off the pulled data; confirm against execution/spread costs before entering.\n\n```\nnpm run dev         # tsup --watch\nnpm run build        # build dist/index.js\nnpm run build:mcpb   # build + pack dist-mcpb/xcreener.mcpb\nnpm run lint\nnpm run typecheck\n```\n\nThe build produces a single bundled ESM file (`dist/index.js`\n\n) with all dependencies inlined via tsup, so both the npm package and the `.mcpb`\n\nbundle ship without `node_modules`\n\n.\n\nMIT — see [LICENSE](/xcreener/xcreener-mcp/blob/main/LICENSE).", "url": "https://wpnews.pro/news/show-hn-mcp-server-so-ai-agents-can-screen-markets-in-plain-english", "canonical_source": "https://github.com/xcreener/xcreener-mcp", "published_at": "2026-08-02 14:38:46+00:00", "updated_at": "2026-08-02 14:52:52.353896+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-tools"], "entities": ["XCREENER", "Claude Desktop", "Cursor", "Windsurf", "XQL"], "alternates": {"html": "https://wpnews.pro/news/show-hn-mcp-server-so-ai-agents-can-screen-markets-in-plain-english", "markdown": "https://wpnews.pro/news/show-hn-mcp-server-so-ai-agents-can-screen-markets-in-plain-english.md", "text": "https://wpnews.pro/news/show-hn-mcp-server-so-ai-agents-can-screen-markets-in-plain-english.txt", "jsonld": "https://wpnews.pro/news/show-hn-mcp-server-so-ai-agents-can-screen-markets-in-plain-english.jsonld"}}