Koskamo

Qanvo Stock Screener MCP

This official MCP server allows AI assistants and agents to screen global stocks, options, ETFs, and crypto using plain English queries. It provides access to validated market data, enabling users to create interactive screens with sparklines, metrics, and filters. The server supports setting one-click email alerts and integrates directly with the Qanvo app for saving and sharing screens.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Qanvo Stock Screener MCP logo, by QanvoVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Qanvo
You need:sign in with your Qanvo account (OAuth)create an API key and send it as a bearer token
MCP endpoint (Streamable HTTP)
https://qanvo.app/mcp
Vendor documentation

What you can do with it

  • Screen global stocks, options, ETFs and crypto in plain English
  • Set email alerts on any screen
  • Open interactive Qanvo Screener inside the chat
  • Access validated market data for AI agents

Source and maintenance

Vendor evidenceRegistry 1.1.0

Protocol and capabilities

Server
qanvo 1.2
MCP protocol
2025-06-18
Tools
19 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {},
  "logging": {},
  "resources": {},
  "extensions": {
    "io.modelcontextprotocol/ui": {}
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Qanvo screens global stocks, ETFs and crypto from a validated market database (300+ metrics, options analytics, 51 exchanges). Ask market_query in plain English; it returns its interpretation, the criteria it applied, typed columns (pct values are fractions) and up to 200 rows. Use refine_market_query to adjust a result, and describe_metrics to look up exact metric definitions. Pass market (e.g. US) to limit results to one country's listings. Each market_query/refine call spends the key owner's Qanvo credits; describe_metrics is free. create_alert turns a plain-English screen (or an earlier result) into an email alert: Qanvo re-runs it after the close, before the open or weekly and emails the account when stocks enter or leave it. list_alerts, update_alert (schedule, pause/resume) and delete_alert manage them. Alert runs use no credits. In apps that show interactive views (Claude, ChatGPT), every market_query and refine_market_query result also appears as a live Qanvo Screener grid under your reply: sortable, with view tabs, extra columns, an alert button, a refine box and a link to the full Screener. When it does, don't repeat the table in prose: give the takeaways (how many matched, what stands out, the few names worth a look, any caveat) and let the grid carry the rows. In text-only clients, or when the user asks for a table, present the rows yourself as usual; you always receive the full result either way. A result's warnings can include lines starting "Data caveat:" (a missing earnings date, analyst estimates in another currency, a market cap that couldn't be computed, a crypto asset whose data looks unreliable). Always pass these on to the user in a short sentence naming the affected rows, and don't present those numbers as fact. Screens work best phrased like a user would type them: the universe (market cap, sector, country), the criteria with thresholds, and how to rank, e.g. "US large caps over $10B more than 15% below their 52-week high with earnings in the next 10 days, soonest first". Keep relative dates relative ("next week", "last 30 days"). When a screen is time-based (recent crosses, upcoming earnings, new highs, insider or congressional trades), offer to turn it into an email alert. Research data only, not investment advice.

Tools

19 advertised

delete_alert — Delete an alert
Advertised by the server during the last successful anonymous check.
Advertised destructive

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

delete_alert input schema
{
  "type": "object",
  "required": [
    "alert_id"
  ],
  "properties": {
    "alert_id": {
      "type": "integer",
      "description": "alert_id to delete."
    }
  }
}
delete_alert annotations
{
  "title": "Delete an alert",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
qanvo_app_sparklines — Screen sparklines (app)
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

qanvo_app_sparklines input schema
{
  "type": "object",
  "required": [
    "session_id",
    "query_id",
    "listing_ids"
  ],
  "properties": {
    "query_id": {
      "type": "string"
    },
    "session_id": {
      "type": "string"
    },
    "listing_ids": {
      "type": "array",
      "items": {
        "type": "integer"
      }
    }
  }
}
qanvo_app_sparklines annotations
{
  "title": "Screen sparklines (app)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
qanvo_app_share — Share link (app)
Advertised by the server during the last successful anonymous check.

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

qanvo_app_share input schema
{
  "type": "object",
  "required": [
    "session_id",
    "query_id"
  ],
  "properties": {
    "query_id": {
      "type": "string"
    },
    "session_id": {
      "type": "string"
    }
  }
}
qanvo_app_share annotations
{
  "title": "Share link (app)",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
update_alert — Change or pause an alert
Advertised by the server during the last successful anonymous check.

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).

update_alert input schema
{
  "type": "object",
  "required": [
    "alert_id"
  ],
  "properties": {
    "name": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "New name."
    },
    "enabled": {
      "type": [
        "boolean",
        "null"
      ],
      "default": null,
      "description": "false pauses the alert, true resumes it."
    },
    "alert_id": {
      "type": "integer",
      "description": "alert_id from list_alerts or create_alert."
    },
    "query_id": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "query_id of a refined version of the alert's screen (same session)."
    },
    "schedule": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "New schedule: after_close, pre_open or weekly."
    },
    "notify_when": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "changes or always."
    }
  }
}
update_alert annotations
{
  "title": "Change or pause an alert",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_alert — Create an email alert
Advertised by the server during the last successful anonymous check.

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.

create_alert input schema
{
  "type": "object",
  "properties": {
    "name": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "A short name for the alert; defaults to the screen's title."
    },
    "market": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Optional market (ISO country code such as US, GB, IN); also sets whose trading hours the schedule follows."
    },
    "prompt": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "The screen in plain English. Omit when passing query_id and session_id."
    },
    "query_id": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "query_id of an earlier market_query result to alert on."
    },
    "schedule": {
      "type": "string",
      "default": "after_close",
      "description": "after_close (default), pre_open or weekly."
    },
    "session_id": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "session_id of that result."
    },
    "notify_when": {
      "type": "string",
      "default": "changes",
      "description": "changes (default: only when stocks enter or leave) or always."
    }
  }
}
create_alert annotations
{
  "title": "Create an email alert",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
qanvo_app_columns — Screen columns (app)
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

qanvo_app_columns input schema
{
  "type": "object",
  "required": [
    "session_id",
    "query_id",
    "columns"
  ],
  "properties": {
    "columns": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "query_id": {
      "type": "string"
    },
    "session_id": {
      "type": "string"
    }
  }
}
qanvo_app_columns annotations
{
  "title": "Screen columns (app)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
refine_market_query — Refine a screen
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

refine_market_query input schema
{
  "type": "object",
  "required": [
    "query_id",
    "session_id",
    "instruction"
  ],
  "properties": {
    "market": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Optional market (ISO country code); use the same one as the query being refined."
    },
    "query_id": {
      "type": "string",
      "description": "query_id of the result to refine."
    },
    "session_id": {
      "type": "string",
      "description": "session_id of that result."
    },
    "instruction": {
      "type": "string",
      "description": "The refinement in plain English."
    }
  }
}
refine_market_query annotations
{
  "title": "Refine a screen",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
qanvo_app_share_email — Email a screen (app)
Advertised by the server during the last successful anonymous check.
Open-world

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

qanvo_app_share_email input schema
{
  "type": "object",
  "required": [
    "session_id",
    "query_id",
    "to"
  ],
  "properties": {
    "to": {
      "type": "string"
    },
    "note": {
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "query_id": {
      "type": "string"
    },
    "session_id": {
      "type": "string"
    }
  }
}
qanvo_app_share_email annotations
{
  "title": "Email a screen (app)",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
qanvo_app_result — Screen result (app)
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

qanvo_app_result input schema
{
  "type": "object",
  "required": [
    "session_id",
    "query_id"
  ],
  "properties": {
    "market": {
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "query_id": {
      "type": "string"
    },
    "session_id": {
      "type": "string"
    }
  }
}
qanvo_app_result annotations
{
  "title": "Screen result (app)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
describe_metrics — Look up metric definitions
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

describe_metrics input schema
{
  "type": "object",
  "properties": {
    "search": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Optional search text."
    }
  }
}
describe_metrics annotations
{
  "title": "Look up metric definitions",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_alerts — List email alerts
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_alerts input schema
{
  "type": "object",
  "properties": {}
}
list_alerts annotations
{
  "title": "List email alerts",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
market_query — Screen the market
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

market_query input schema
{
  "type": "object",
  "required": [
    "prompt"
  ],
  "properties": {
    "market": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "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": {
      "type": "string",
      "description": "The market question in plain English."
    },
    "session_id": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Optional session id from a previous result to group queries."
    }
  }
}
market_query annotations
{
  "title": "Screen the market",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
qanvo_app_alert_create — Create alert (app)
Advertised by the server during the last successful anonymous check.

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

qanvo_app_alert_create input schema
{
  "type": "object",
  "required": [
    "session_id",
    "query_id",
    "name",
    "schedule",
    "notify_when"
  ],
  "properties": {
    "name": {
      "type": "string"
    },
    "market": {
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "query_id": {
      "type": "string"
    },
    "schedule": {
      "type": "string"
    },
    "session_id": {
      "type": "string"
    },
    "notify_when": {
      "type": "string"
    }
  }
}
qanvo_app_alert_create annotations
{
  "title": "Create alert (app)",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
qanvo_app_alert_options — Alert options (app)
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

qanvo_app_alert_options input schema
{
  "type": "object",
  "properties": {
    "market": {
      "type": [
        "string",
        "null"
      ],
      "default": null
    }
  }
}
qanvo_app_alert_options annotations
{
  "title": "Alert options (app)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
qanvo_app_thresholds — Edit screen thresholds (app)
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

qanvo_app_thresholds input schema
{
  "type": "object",
  "required": [
    "session_id",
    "query_id",
    "values"
  ],
  "properties": {
    "market": {
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "values": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "query_id": {
      "type": "string"
    },
    "session_id": {
      "type": "string"
    }
  }
}
qanvo_app_thresholds annotations
{
  "title": "Edit screen thresholds (app)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
qanvo_app_security — Security detail (app)
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

qanvo_app_security input schema
{
  "type": "object",
  "required": [
    "listing_id"
  ],
  "properties": {
    "listing_id": {
      "type": "integer"
    }
  }
}
qanvo_app_security annotations
{
  "title": "Security detail (app)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
qanvo_app_alerts — Alerts (app)
Advertised by the server during the last successful anonymous check.
Advertised read-only

App only: the account's alerts.

qanvo_app_alerts input schema
{
  "type": "object",
  "properties": {}
}
qanvo_app_alerts annotations
{
  "title": "Alerts (app)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
qanvo_app_alert_update — Update alert (app)
Advertised by the server during the last successful anonymous check.

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

qanvo_app_alert_update input schema
{
  "type": "object",
  "required": [
    "alert_id"
  ],
  "properties": {
    "name": {
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "enabled": {
      "type": [
        "boolean",
        "null"
      ],
      "default": null
    },
    "alert_id": {
      "type": "integer"
    },
    "query_id": {
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "schedule": {
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "notify_when": {
      "type": [
        "string",
        "null"
      ],
      "default": null
    }
  }
}
qanvo_app_alert_update annotations
{
  "title": "Update alert (app)",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
qanvo_app_catalog — Metric catalog (app)
Advertised by the server during the last successful anonymous check.
Advertised read-only

App only: the screenable metrics for the column chooser.

qanvo_app_catalog input schema
{
  "type": "object",
  "properties": {}
}
qanvo_app_catalog annotations
{
  "title": "Metric catalog (app)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

qanvo-screen

Advertised by the server during the last successful anonymous check.

Qanvo Screener: an interactive, sortable grid of a screen's results with view tabs, extra columns, sparklines, alerts and a refine box

qanvo-screen URI
ui://qanvo/screen/v2

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
386 ms
95th percentile latency
386 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 386 ms · metadata changed · 19 tool(s), 1 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http qanvo-stock-screener-mcp https://qanvo.app/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add qanvo-stock-screener-mcp --url https://qanvo.app/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable qanvo-stock-screener-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "qanvo-stock-screener-mcp": {
      "url": "https://qanvo.app/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "qanvo-stock-screener-mcp": {
      "type": "streamableHttp",
      "url": "https://qanvo.app/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start qanvo-stock-screener-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "qanvo-stock-screener-mcp": {
      "type": "http",
      "url": "https://qanvo.app/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http qanvo-stock-screener-mcp https://qanvo.app/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "qanvo-stock-screener-mcp": {
      "url": "https://qanvo.app/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "qanvo-stock-screener-mcp": {
      "serverUrl": "https://qanvo.app/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Qanvo Stock Screener MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Qanvo Stock Screener MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing