Screen and score stocks with the Quality Screener engine: filters, custom scores, and history.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Quality Screener.
auth_statusWhether a token is present and which user it authenticates as.
account_profileThe signed-in user's profile (email, username, organization).
healthAPI and database health check.
scores_topTop tickers by quality score, as a `{ticker: score}` map.
scores_listList scored tickers with optional filters.
scores_showFull score row(s) for a single ticker.
A standalone Model Context Protocol (MCP) server that exposes the Quality Screener stock-screening engine as tools for AI agents (Claude, Cursor, and any other MCP client).
Once connected, an agent can screen and filter the scored universe, compute custom quality scores, inspect score history, manage saved scoring systems, and generate shareable screen links β acting as the signed-in user, against the same data they see in the web dashboard.
CustomScoreConfigEach MCP tool maps to one Quality Screener REST endpoint. The server attaches
the caller's bearer token to every outbound request (header
X-Stobot-CLI-Token, Authorization: Bearer β¦ also accepted) and returns the
decoded JSON. There is no business logic in the server itself β it is a typed,
authenticated faΓ§ade over the API.
It runs in two transport modes:
| Transport | Use | Authentication |
|---|---|---|
stdio (default) | A local agent (e.g. Claude Code) launches the server as a subprocess | Token from $QSCREENER_TOKEN or ~/.config/qscreener/credentials.json |
streamable-http | A remote, externally reachable deployment (e.g. Railway) | End-to-end MCP OAuth 2.0 β the client opens the browser once, then sends the token automatically; or a per-request X-Stobot-CLI-Token header |
Over HTTP the MCP endpoint is served at /mcp.
The easiest way to use the server is to point your MCP client at the hosted deployment. No token to copy β the client triggers a browser sign-in on first connect:
On first use your browser opens the Quality Screener sign-in page. Approve once, and the agent stays connected. You need a Quality Screener account; the agent inherits exactly your access.
Requires uv.
With Docker:
By default the container runs the streamable-http transport on port 8080.
All configuration is via environment variables, resolved at startup.
| Env var | Default | Meaning |
|---|---|---|
QSCREENER_API_URL | http://localhost:8001 | Base URL of the Quality Screener backend API the tools call |
QSCREENER_MCP_TRANSPORT | stdio | stdio, streamable-http, or sse |
QSCREENER_WEBSITE_URL | http://localhost:3001 | Web-app base URL used to build the OAuth browser-login link and shareable screen URLs |
QSCREENER_MCP_PUBLIC_URL | http://localhost:{PORT|8080} | Publicly reachable base URL of this server; used to build the OAuth callback URL |
PORT | β | Bind port for HTTP transports (Railway sets this automatically) |
QSCREENER_MCP_PORT | 8080 | Bind port fallback when PORT is unset |
QSCREENER_MCP_HOST | 0.0.0.0 | Bind host for HTTP transports |
QSCREENER_TOKEN | β | Bearer-token override for stdio mode (single user) |
QSCREENER_CONFIG_DIR | ~/.config/qscreener | Directory holding credentials.json for stdio mode |
The server resolves a bearer token for each call with the following precedence:
X-Stobot-CLI-Token, then Authorization: Bearer <token>.$QSCREENER_TOKEN environment variable.$QSCREENER_CONFIG_DIR/credentials.json β the token field.For a streamable-http deployment, authentication is fully automated via the
MCP OAuth flow:
/oauth/callback.The token is validated on each request by calling the backend's
/v1/cli/auth/whoami endpoint, so a revoked or expired token is rejected
immediately. The server never persists user tokens.
Mint a token through the browser login flow and store it locally, then run the server over stdio:
Or set QSCREENER_TOKEN directly for CI / scripted use.
All tools require authentication. Filters use OR logic within a filter and AND logic across filters. Market caps are always in USD.
| Tool | Signature | Description |
|---|---|---|
auth_status | auth_status() | Whether a token is present and which user it authenticates as. |
account_profile | account_profile() | The signed-in user's profile (email, username, organization). |
health | health() | API and database health check. |
| Tool | Signature | Description |
|---|---|---|
scores_top | scores_top(limit=20) | Top tickers by quality score, as a {ticker: score} map. |
scores_list | scores_list(ticker=None, sectors=None, industries=None, countries=None, currencies=None, exchanges=None, min_score=None, max_score=None, min_market_cap_usd=None, max_market_cap_usd=None, sort_by="quality_score", sort_order="desc", offset=0, limit=50, include_duplicates=False) | List scored tickers with optional filters. |
scores_show | scores_show(ticker) | Full score row(s) for a single ticker. |
scores_for_tickers | scores_for_tickers(tickers, scoring_system_id=None) | Current scores for a specific list of tickers, under default scoring or a saved scoring system. Unknown tickers are omitted. |
scores_statistics | scores_statistics(sectors=None, min_score=None, max_score=None, min_market_cap_usd=None, max_market_cap_usd=None) | Min / max / average score statistics for a filtered universe. |
scores_market_cap | scores_market_cap(sectors=None, min_score=None) | Aggregated total market cap (USD) for a filtered universe. |
score_compute | score_compute(config, scoring_universe=None, sectors=None, industries=None, regions=None, countries=None, currencies=None, exchanges=None, min_market_cap_usd=None, max_market_cap_usd=None, sort_by="quality_score", sort_order="desc", offset=0, limit=50, include_duplicates=False) | Compute custom scores from a CustomScoreConfig. scoring_universe picks the peer group (changes the scores); the other filters select rows (do not). |
| Tool | Signature | Description |
|---|---|---|
screen_share | screen_share(config) | Persist a CustomScoreConfig and return a public, copy-pasteable share link (url, slug, created, view_count). Content-addressed: an identical config returns the same link. |
| Tool | Signature | Description |
|---|---|---|
filters_list | filters_list() | Available filter values (sectors, industries, countries, currencies, exchanges). |
tickers_list | tickers_list(limit=None) | Available tickers, optionally truncated to limit. |
tickers_search | tickers_search(query) | Search available tickers by case-insensitive substring. |
Dates are YYYY-MM-DD. Pass scoring_system_id to compute history against a
saved scoring system instead of the default quality score.
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/quality-screener)<a href="https://allmcps.com/mcp/quality-screener"><img src="https://allmcps.com/api/badge/quality-screener?style=directory" alt="Quality Screener on AllMCPs" /></a>