# Qanvo Stock Screener (remote · qanvo.app)

Screen global stocks, options, ETFs and crypto in plain English, and set email alerts on any screen.

- Trust score: 79/100 (medium)
- Change this week: +43
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `qanvo.app`: 79/100 (this document), [markdown](https://verifymcp.io/servers/app-qanvo-screener/qanvo.md), [page](https://verifymcp.io/servers/app-qanvo-screener/qanvo)

## Channel facts

- Endpoint: `https://qanvo.app/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.1.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 89/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 77/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3530 tokens (~113/item across 31 items; 30 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 17/100
  - Stability observed for 5 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 85/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 56% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 32 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

## Install

### How do I install the Qanvo Stock Screener MCP server?

Qanvo Stock Screener is a hosted endpoint at https://qanvo.app/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http app-qanvo-screener 'https://qanvo.app/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "app-qanvo-screener": {
      "url": "https://qanvo.app/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "app-qanvo-screener": {
      "type": "http",
      "url": "https://qanvo.app/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.app-qanvo-screener]
url = "https://qanvo.app/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "app-qanvo-screener": {
      "type": "remote",
      "url": "https://qanvo.app/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add app-qanvo-screener --url 'https://qanvo.app/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  app-qanvo-screener:
    url: "https://qanvo.app/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "app-qanvo-screener": {
      "Transport": "http",
      "Url": "https://qanvo.app/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add app-qanvo-screener -t streamable-http -u 'https://qanvo.app/mcp'
```

### Other

```json
{
  "mcpServers": {
    "app-qanvo-screener": {
      "type": "http",
      "url": "https://qanvo.app/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 79, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-04 (score 78, +1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “my_option_positions” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 2801 → 3530
- [functional improvement] Tool coverage: 47% → 56%
- [functional] New tool “my_closed_option_trades”
- [functional] New tool “my_option_expirations”
- [functional] New tool “my_option_orders”
- [functional] New tool “my_option_payoff”
- [functional] New tool “my_option_premium”
- [functional] New tool “option_chain”
- [cosmetic] “my_option_positions” added an optional parameter “account”
- [cosmetic] “my_option_positions” added an optional parameter “symbol”

### 2026-11-03 (score 77, +1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [functional regression] Schema quality: 2238 → 2801
- [functional improvement] Tool coverage: 40% → 47%
- [functional] New tool “my_option_positions”
- [functional] New tool “my_orders”
- [functional] New tool “my_portfolio”
- [functional] New tool “my_transactions”
- [functional] New tool “refresh_portfolio”

### 2026-11-01 (score 76, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “create_alert” rewrote its description, which is the text the model reads
- [security] Tool “describe_metrics” rewrote its description, which is the text the model reads
- [security] Tool “market_query” rewrote its description, which is the text the model reads
- [functional regression] Tool coverage: 100% → 40%
- [functional improvement] Schema quality: 168 → 111
- [functional improvement] Stability: unverified → 0.03
- [functional improvement] Schema quality: unverified → 100
- [functional] The server now declares the “resources” capability
- [functional] First check of Capabilities: pass
- [functional] Schema quality: excellent → good
- [functional] New resource “qanvo-screen”
- [functional] Server version: 1.1 → 1.2
- [functional] New tool “qanvo_app_alert_create”
- [functional] New tool “qanvo_app_alert_options”
- [functional] New tool “qanvo_app_alert_update”
- [functional] New tool “qanvo_app_alerts”
- [functional] New tool “qanvo_app_catalog”
- [functional] New tool “qanvo_app_columns”
- [functional] New tool “qanvo_app_result”
- [functional] New tool “qanvo_app_security”
- [functional] New tool “qanvo_app_share”
- [functional] New tool “qanvo_app_share_email”
- [functional] New tool “qanvo_app_sparklines”
- [functional] New tool “qanvo_app_thresholds”

### 2026-10-31 (score 76, +40)

- [security improvement] Transport: unverified → pass
- [security improvement] Injection markers: unverified → pass
- [security] First check of Judged manipulation: pass
- [security] Authorization: Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent
- [functional] First check of Schema quality: fail
- [functional] First check of Destructive annotations: 100
- [functional] First check of Tool coverage: 100

### 2026-10-28 (score 36, 0)

- [security] First check of Authorization: partial

### 2026-10-27 (score 36)

First indexed and scored.

## MCP tools (30)

### `describe_metrics` (~60 tokens)

Look up metric definitions

Look up the canonical metrics available for screening. Without search: every metric name, grouped by category. With search (e.g. 'IV rank', 'yield'): matching metrics with format and exact definition.

Input parameters:

- `search` (string|null): Optional search text.

### `qanvo_app_alerts` (~19 tokens)

Alerts (app)

App only: the account's alerts.

### `refine_market_query` (~108 tokens)

Refine a screen

Modify a previous market_query result (e.g. 'only semiconductors', 'add IV rank and sort by it'). Keeps the prior filters unless the instruction changes them.

Input parameters:

- `instruction` (string, required): The refinement in plain English.
- `market` (string|null): Optional market (ISO country code); use the same one as the query being refined.
- `query_id` (string, required): query_id of the result to refine.
- `session_id` (string, required): session_id of that result.

### `qanvo_app_result` (~59 tokens)

Screen result (app)

App only: a saved screen result in the account, for hosts that don't pass a result's _meta to the app.

Input parameters:

- `market` (string|null)
- `query_id` (string, required)
- `session_id` (string, required)

### `qanvo_app_alert_update` (~81 tokens)

Update alert (app)

App only: points an existing alert at the screen on display, or changes its schedule or name.

Input parameters:

- `alert_id` (integer, required)
- `enabled` (boolean|null)
- `name` (string|null)
- `notify_when` (string|null)
- `query_id` (string|null)
- `schedule` (string|null)

### `my_transactions` (~121 tokens)

My transactions

The user's brokerage transactions, newest first (synced daily, a day late): buys, sells, dividends, interest, fees, option assignments and expirations, deposits.

Input parameters:

- `days` (integer): Look-back in days (default 365).
- `limit` (integer): Rows (default 200, max 1000).
- `symbol` (string|null): Optional ticker.
- `type` (string|null): Optional type: BUY, SELL, DIVIDEND, INTEREST, FEE, OPTIONASSIGNMENT, OPTIONEXPIRATION, CONTRIBUTION ...

### `create_alert` (~339 tokens)

Create an email alert

Turn a screen into an email alert. Give a plain-English screen in `prompt` (it runs like market_query and uses the same
credits), or the query_id and session_id of an earlier result. Qanvo then re-runs that screen's saved query on a fixed
schedule (no AI, no credits) and emails the account's address when stocks enter or leave the results, or every time.
Schedules follow the market's exchange hours: "after_close" (once that day's prices are in: usually that evening for US
stocks, early next morning for other markets), "pre_open" (an hour before the open, trading days) or "weekly" (first trading day, before the open). Today's
list is emailed straight away. Example: prompt "stocks crossing above their 200-day average on twice their average
volume", schedule "after_close". Research alerts only, not investment advice.

Input parameters:

- `market` (string|null): Optional market (ISO country code such as US, GB, IN); also sets whose trading hours the schedule follows.
- `name` (string|null): A short name for the alert; defaults to the screen's title.
- `notify_when` (string): changes (default: only when stocks enter or leave) or always.
- `prompt` (string|null): The screen in plain English. Omit when passing query_id and session_id.
- `query_id` (string|null): query_id of an earlier market_query result to alert on.
- `schedule` (string): after_close (default), pre_open or weekly.
- `session_id` (string|null): session_id of that result.

### `my_orders` (~78 tokens)

My orders

The user's recent orders straight from their brokerages (live): status, action, quantity, limit and execution prices. Read-only: Qanvo never places or changes orders.

Input parameters:

- `days` (integer): Look-back in days, 1-90 (default 30).
- `state` (string): all, open or executed (default all).

### `qanvo_app_alert_create` (~70 tokens)

Create alert (app)

App only: saves the screen on display as an email alert.

Input parameters:

- `market` (string|null)
- `name` (string, required)
- `notify_when` (string, required)
- `query_id` (string, required)
- `schedule` (string, required)
- `session_id` (string, required)

### `refresh_portfolio` (~39 tokens)

Refresh my portfolio

Pulls the latest holdings, balances and transactions from the user's brokerages now (they also refresh on their own every 15 minutes when asked about).

### `qanvo_app_columns` (~53 tokens)

Screen columns (app)

App only: catalog columns for the rows of a saved screen result (view tabs, column chooser).

Input parameters:

- `columns` (array, required)
- `query_id` (string, required)
- `session_id` (string, required)

### `my_option_orders` (~155 tokens)

My option orders & premiums

The user's option orders with premiums in dollars (credit +, debit -): action, contract, contracts, fill price, status, times, plus totals (credits, debits, net premium, by underlying, by day). Up to 90 days live from the brokerages; longer from synced fills. Read-only: Qanvo never places orders.

Input parameters:

- `days` (integer): Look-back days: 1-90 live, up to 3650 from history. Default 30.
- `side` (string): all, sell (credits) or buy (debits). Default all.
- `status` (string): all, filled or working. Default all.
- `symbol` (string|null): Optional underlying ticker.

### `my_option_positions` (~111 tokens)

My option positions

The user's open option positions across every connected broker, priced now (mark, underlying, moneyness, intrinsic/extrinsic, premium captured, breakeven, delta, IV, theta/day, dollar delta, coverage, earnings/ex-dividend before expiry) plus portfolio totals (net theta, dollar delta, vega, short premium open vs cost to close).

Input parameters:

- `account` (string|null): Optional account key (A1, A2...).
- `symbol` (string|null): Optional underlying ticker.

### `market_query` (~288 tokens)

Screen the market

Screen global stocks (and crypto) with a natural-language question and get a typed dataset back.
Examples: "quality large caps 15% below their 52-week high with IV rank above 60 and no earnings in
30 days", "wheel candidates with 30-delta put yield above 20% annualized", "software companies over
$5B growing revenue 20%+". Returns the interpretation (how ambiguous terms were resolved), filter
criteria, typed columns (with format hints: pct values are fractions, usd values are dollars),
up to 200 rows, data as-of dates and warnings. Each call creates a saved research query; pass
session_id to keep related queries together. You always get the full rows to analyze. Where the chat shows
the interactive Qanvo Screener under the result, the user already sees every row there: give the takeaways
rather than retyping the table. Where it doesn't, present the rows as usual. Research data only, not
investment advice.

Input parameters:

- `market` (string|null): Optional market: an ISO country code such as US, GB, IN, JP or CN limits results to listings trading there (one listing per company). Omit for all markets.
- `prompt` (string, required): The market question in plain English.
- `session_id` (string|null): Optional session id from a previous result to group queries.

### `qanvo_app_catalog` (~22 tokens)

Metric catalog (app)

App only: the screenable metrics for the column chooser.

### `qanvo_app_thresholds` (~70 tokens)

Edit screen thresholds (app)

App only: changes a screen's numeric thresholds (an edited filter chip) and reruns the same SQL. No AI, no credits.

Input parameters:

- `market` (string|null)
- `query_id` (string, required)
- `session_id` (string, required)
- `values` (object, required)

### `delete_alert` (~45 tokens)

Delete an alert

Delete an alert permanently (its screen and saved research stay). To stop emails temporarily, use update_alert with enabled=false instead.

Input parameters:

- `alert_id` (integer, required): alert_id to delete.

### `qanvo_app_sparklines` (~54 tokens)

Screen sparklines (app)

App only: ~3 months of daily closes for rows of a saved screen result.

Input parameters:

- `listing_ids` (array, required)
- `query_id` (string, required)
- `session_id` (string, required)

### `qanvo_app_security` (~39 tokens)

Security detail (app)

App only: one listing's drill-down (screening row, prices, quarters, earnings, news).

Input parameters:

- `listing_id` (integer, required)

### `qanvo_app_share_email` (~70 tokens)

Email a screen (app)

App only: emails the screen on display (top matches and a live link) to an address the user typed. 10 a day.

Input parameters:

- `note` (string|null)
- `query_id` (string, required)
- `session_id` (string, required)
- `to` (string, required)

### `qanvo_app_alert_options` (~42 tokens)

Alert options (app)

App only: the alert schedules for a market, with when each next runs, and the plan's alert limit.

Input parameters:

- `market` (string|null)

### `my_option_expirations` (~71 tokens)

My expiration ladder

The user's upcoming expirations: per expiry the positions, contracts, ITM shorts, short premium open and cost to close, long value, underlyings, and earnings/ex-dividend dates falling before it.

Input parameters:

- `days` (integer): Expiries within this many days. Default 45.

### `list_alerts` (~44 tokens)

List email alerts

List this account's screen alerts: name, the screen's prompt, schedule, on/paused, next check, last email and how many stocks entered or left last time.

### `option_chain` (~106 tokens)

Option chain

One expiry of a US stock's option chain around the current price (delayed market data): per strike the call and put last trade, change, delta, theta, IV, open interest and volume, plus the available expirations. Omit expiration for the nearest.

Input parameters:

- `expiration` (string|null): yyyy-MM-dd; omit for the nearest.
- `strikes` (integer): Strikes around the price, 4-40. Default 16.
- `symbol` (string, required)

### `qanvo_app_share` (~50 tokens)

Share link (app)

App only: a public link to the screen on display (today's matches, re-run live for whoever opens it).

Input parameters:

- `query_id` (string, required)
- `session_id` (string, required)

### `my_portfolio` (~134 tokens)

My portfolio

The user's connected brokerage accounts, all brokers aggregated (read-only): account values, cash, margin, and each
holding with weight, market value, cost basis, unrealized P&L and Qanvo market data (sector, P/E, forward P/E, dividend
yield, next earnings, RSI, IV rank). Use for any question about what they own. For filtered or computed views of their
holdings ("my holdings with P/E over 30", "dividend income from my stocks"), use market_query instead.

Input parameters:

- `limit` (integer): Holdings to return, largest first (default 100).

### `my_option_payoff` (~81 tokens)

My P/L at expiry

P&L at expiry across a price range for everything the user holds on one underlying (shares plus every option leg), with breakevens and best/worst outcome in range. Arithmetic, not a forecast.

Input parameters:

- `high` (number|null): Optional high price.
- `low` (number|null): Optional low price.
- `symbol` (string, required)

### `update_alert` (~166 tokens)

Change or pause an alert

Change an alert's schedule (after_close, pre_open, weekly), when it emails (changes or always) or name, pause/resume it with enabled, or point it at a refined version of its screen with query_id (a refine_market_query result in the same session; today's list is emailed again).

Input parameters:

- `alert_id` (integer, required): alert_id from list_alerts or create_alert.
- `enabled` (boolean|null): false pauses the alert, true resumes it.
- `name` (string|null): New name.
- `notify_when` (string|null): changes or always.
- `query_id` (string|null): query_id of a refined version of the alert's screen (same session).
- `schedule` (string|null): New schedule: after_close, pre_open or weekly.

### `my_option_premium` (~99 tokens)

My option premium history

The user's option premium history: credits, debits and net by month and by underlying, retention, contracts sold/bought, average days to expiry at open, and the closed-trade record (realized P&L, win rate, average win/loss, expired, assigned).

Input parameters:

- `months` (integer): Months back including this one, 1-120. Default 12.
- `symbol` (string|null): Optional underlying ticker.

### `my_closed_option_trades` (~111 tokens)

My closed option trades

The user's closed option trades matched open-to-close (first in, first out): contract, side, dates, contracts, open and close amounts, realized P&L, how it ended (closed, expired, assigned), days held. Newest first.

Input parameters:

- `limit` (integer): Rows, default 200.
- `months` (integer): Closed within the last N months. Default 12.
- `side` (string): all, short or long.
- `symbol` (string|null)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/app-qanvo-screener/qanvo#diagnostics

## Score history

- 2026-11-05: 79
- 2026-11-04: 78
- 2026-11-03: 77
- 2026-11-02: 76
- 2026-11-01: 76
- 2026-10-31: 76
- 2026-10-30: 36
- 2026-10-29: 36
- 2026-10-28: 36
- 2026-10-27: 36

## Common questions

### What is the Qanvo Stock Screener MCP server?

Qanvo Stock Screener is an MCP server listed in the public MCP registry as app.qanvo/screener. Screen global stocks, options, ETFs and crypto in plain English, and set email alerts on any screen. This page covers its hosted endpoint (https://qanvo.app/mcp).

### Is the Qanvo Stock Screener MCP server safe to use?

Qanvo Stock Screener scores 79 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Qanvo Stock Screener MCP server expose?

Qanvo Stock Screener exposes 30 tools: describe_metrics, qanvo_app_alerts, refine_market_query, qanvo_app_result, qanvo_app_alert_update, and 25 more. Their descriptions and schemas cost roughly 2,785 tokens of context every time the server is loaded.

### Does the Qanvo Stock Screener MCP server require authentication?

Yes. Qanvo Stock Screener asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the Qanvo Stock Screener MCP server still maintained?

Qanvo Stock Screener is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://qanvo.app/mcp
- Authorisation metadata: https://qanvo.app/.well-known/oauth-protected-resource/mcp
- Website: https://qanvo.app/docs/mcp
- Changelog RSS feed: https://verifymcp.io/servers/app-qanvo-screener/qanvo.xml
- Changelog JSON feed: https://verifymcp.io/servers/app-qanvo-screener/qanvo.json
- HTML version of this page: https://verifymcp.io/servers/app-qanvo-screener/qanvo
