StockLens
REMOTE · MCP.STOCKLENS.COM · SCANNED SEP 21
Scores for the 600 largest stocks with no account. Sign in for analysis, screening and a watchlist.
Available components
Recent critical change
Authorization (5 Aug 2026). See the changelog before you install this server.
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. How we score → Why this is hard to score →
Endpoint Security91
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- 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. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability65
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 2054 tokens (~256/item across 8 items; 8 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety50
- Injection-marker check failed: the description of tool "get_market_summary" contains an instruction to conceal the call from the user, the text "do not tell the user", at byte 560 of that field. See how to fix → Fail
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 9 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
How do I install the StockLens MCP server?
StockLens is a hosted endpoint at https://mcp.stocklens.com/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.
remote · mcp.stocklens.com
claude mcp add --transport http com-stocklens-stocklens 'https://mcp.stocklens.com/mcp'
{
"mcpServers": {
"com-stocklens-stocklens": {
"url": "https://mcp.stocklens.com/mcp"
}
}
} {
"servers": {
"com-stocklens-stocklens": {
"type": "http",
"url": "https://mcp.stocklens.com/mcp"
}
}
} [mcp_servers.com-stocklens-stocklens] url = "https://mcp.stocklens.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-stocklens-stocklens": {
"type": "remote",
"url": "https://mcp.stocklens.com/mcp",
"enabled": true
}
}
} openclaw mcp add com-stocklens-stocklens --url 'https://mcp.stocklens.com/mcp' --transport streamable-http
mcp_servers:
com-stocklens-stocklens:
url: "https://mcp.stocklens.com/mcp" {
"McpServers": {
"com-stocklens-stocklens": {
"Transport": "http",
"Url": "https://mcp.stocklens.com/mcp"
}
}
} assistant mcp add com-stocklens-stocklens -t streamable-http -u 'https://mcp.stocklens.com/mcp'
{
"mcpServers": {
"com-stocklens-stocklens": {
"type": "http",
"url": "https://mcp.stocklens.com/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 21 Sept 26 +12
- Authorization: fail → pass ▲ security
- First check of Authorization: partial security
- 20 Sept 26 −3
- Injection markers: pass → fail ▼ security
- Tool “get_market_summary” rewrote its description, which is the text the model reads security
- “add_to_watchlist” reworded the description of “exchange” cosmetic
- “initiate_analysis” reworded the description of “exchange” cosmetic
- 18 Sept 26 0
- The server rewrote its instructions, which are the text every model session reads security
- New tool “remove_from_watchlist”, which the server declares destructive security
- Tool “discover_stocks” rewrote its description, which is the text the model reads security
- Tool “get_portfolio_insights” rewrote its description, which is the text the model reads security
- Tool “initiate_analysis” rewrote its description, which is the text the model reads security
- Schema quality: 275 → 245 ▲ functional
- MCP protocol: Implements a current MCP spec version (2026-07-28). functional
- Destructive annotations: pass → 100 functional
- MCP protocol version: 2025-11-25 → 2026-07-28 functional
- New tool “add_to_watchlist” functional
- 6 Sept 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “fetch_analysis_result” rewrote its description, which is the text the model reads security
- Tool “get_market_summary” rewrote its description, which is the text the model reads security
- Tool “get_portfolio_insights” rewrote its description, which is the text the model reads security
- Tool “initiate_analysis” rewrote its description, which is the text the model reads security
- Schema quality: 197 → 275 ▼ functional
- New tool “discover_stocks” functional
- 4 Sept 26 0
- Stability: 0.97 → pass security
- 3 Sept 26 +1
- Stability: fail → 0.97 functional
- 26 Aug 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 84 to 88.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 21 Sept 2026 · Probed https://mcp.stocklens.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=mcp.stocklens.com | CN=GeoTrust TLS RSA CA G1,OU=www.digicert.com,O=DigiCert Inc,C=US | 23 Jul 2026 | 23 Jan 2027 | RSA 2048 | SHA256-RSA | 31b868b39b29d80ff3c3b0517082a07 |
| SANs: mcp.stocklens.com | ||||||
| CN=GeoTrust TLS RSA CA G1,OU=www.digicert.com,O=DigiCert Inc,C=US (CA) | CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US | 2 Nov 2017 | 2 Nov 2027 | RSA 2048 | SHA256-RSA | d07782a133fc6f9a57296e131ffd179 |
| CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US (CA) | CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US | 1 Aug 2013 | 15 Jan 2038 | RSA 2048 | SHA256-RSA | 33af1e6a711a9a0bb2864b11d09fae5 |
Background: What to check on a remote MCP endpoint →
DNSSEC secure
Validation of mcp.stocklens.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| stocklens.com. | present | 2371 | 13 | Verified |
| mcp.stocklens.com. | Verified address RRset verified with the apex keys |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer realm="mcp.stocklens.com", resource_metadata="https://mcp.stocklens.com/.well-known/oauth-protected-resource", scope="openid profile email"
Bearer realm="mcp.stocklens.com", resource_metadata="https://mcp.stocklens.com/.well-known/oauth-protected-resource", scope="openid profile email" Protected resource metadata
| Document | https://mcp.stocklens.com/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | Yes |
| Resource | https://mcp.stocklens.com/mcp |
| Authorisation server | https://mcp.stocklens.com |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.stocklens.com/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.stocklens.com/mcp | HTTPS enforced | 301 | https://mcp.stocklens.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_to_watchlist Add To Watchlist ~153
Add one stock ticker to the authenticated user's StockLens watchlist so it is tracked and scored going forward. Free tracks up to 10 stocks; Pro and Max plans track an unlimited number of stocks. If the watchlist is already at its plan capacity, the result states the limit and that plan changes happen at stocklens.com after sign-in. Does NOT execute trades, does NOT record a holding or transaction, and does NOT accept more than one ticker per call.
| Name | Type | Req | Description |
|---|---|---|---|
| exchange | string | – | Exchange code (e.g. NASDAQ). Optional - resolved automatically if omitted. |
| ticker | string | yes | Stock ticker symbol to add to the watchlist (e.g. AAPL). Exactly one ticker per call. |
| Name | Type | Req | Description |
|---|---|---|---|
| company_name | null|string | – | – |
| exchange | string | yes | – |
| plan_limit | null|integer | yes | – |
| scope | string | yes | – |
| ticker | string | yes | – |
| total_holdings | integer | yes | – |
No examples provided.
discover_stocks Discover Stocks ~464
Screen the StockLens nightly-analyzed universe by macro region, exchange, sector, industry, market-cap band, and trading volume, then sort by any of the 6 StockLens scores or a non-score signal, returning the top or bottom N matches. This is the only StockLens tool that ranks or compares across multiple stocks — use it for any "top N", "best/worst", "highest/lowest scored", or filtered market-wide request; never fabricate such a list from get_market_summary or general knowledge. Free accounts can browse by market cap, volume, popularity, or ticker (StockLens scores hidden) with reach capped at 100 matches; sorting by a StockLens score returns a locked result naming zero stocks, with a plan message to relay verbatim. Pro and Max plans include full score sort with precise scores; Pro reach is capped at 5,000 matches, Max is unlimited. Does NOT execute trades, does NOT give personalized recommendations, and does NOT return more stocks than the structured result actually contains.
| Name | Type | Req | Description |
|---|---|---|---|
| direction | string | – | top = highest first, bottom = lowest first. Default top. |
| exchange_in | null|array | – | Restrict to these exchanges. Omitted = no restriction. |
| industry_in | null|array | – | Restrict to these GICS industries. Omitted = no restriction. |
| limit | integer | – | Number of matches to return (the N in top/bottom N), 1-100. Default 10. |
| macro_in | null|array | – | Restrict to these macro regions. Omitted = no restriction. |
| market_cap_band | string | – | Restrict to this market-cap band. Omitted = no cap restriction. |
| page | integer | – | 0-based page of results, 0-500. Default 0. |
| search_text | string | – | Free-text company name/ticker search, up to 80 characters. |
| sector_in | null|array | – | Restrict to these GICS sectors. Omitted = no restriction. |
| sort_by | string | – | One of the 6 StockLens scores or a non-score signal to sort by. Default composite_score. |
| volume_floor | string | – | Minimum average trading volume. Omitted = no floor. |
| Name | Type | Req | Description |
|---|---|---|---|
| access_tier | string | yes | – |
| as_of_date | null|string | – | – |
| config_context | object | yes | – |
| data_source | string | yes | – |
| effective_direction | string | yes | – |
| effective_sort | string | yes | – |
| hard_locked | boolean | yes | – |
| quota_remaining_today | null|integer | – | – |
| reach_capped_at | null|integer | – | – |
| rows | null|array | yes | – |
| rows_returned | integer | yes | – |
| scope | string | yes | – |
| scores_locked | boolean | yes | – |
| total_matches | null|integer | – | – |
| upgrade_message | null|string | – | – |
No examples provided.
fetch_analysis_result Fetch Analysis Result ~159
Fetch the result or progress of a previously initiated StockLens analysis. Returns status (in_progress/complete/failed), progress percentage, and full result when complete. Each call returns the current state once; it does not wait for completion. While status is in_progress, retry_after_seconds is the earliest sensible time to check again — check again only if the user asks to continue. Complete results include composite score, domain breakdowns, key insights, and may include a Plus Analysis AI narrative. Does NOT start a new analysis and does NOT rank or screen stocks — call discover_stocks for a multi-stock list. Does NOT accept a ticker; only the analysis_id from initiate_analysis.
| Name | Type | Req | Description |
|---|---|---|---|
| analysis_id | string | yes | The analysis_id returned by initiate_analysis |
| Name | Type | Req | Description |
|---|---|---|---|
| analysis_id | string | yes | – |
| error_message | null|string | – | – |
| progress_pct | null|integer | – | – |
| result | null|object | – | – |
| retry_after_seconds | null|integer | – | – |
| scope | string | yes | – |
| status | string | yes | – |
No examples provided.
get_market_summary Get Market Summary ~279
Retrieve the latest StockLens composite analysis summary for a stock ticker. Returns composite score (0-100), an overall rating, per-domain scores and grades, and key strengths and challenges. No account is required for the 600 largest companies StockLens scores. A signed-in caller reaches further (Free the same 600, Pro the top 5,000, Max the whole scored universe) and always reads anything on their own watchlist, however deep it ranks. Outside that surface the call is refused with TIER_INSUFFICIENT, which is NOT a statement that the stock is unscored: do not tell the user StockLens has no analysis for it. Data is derived from the most recent nightly analysis run. Use this to quickly assess a stock before deciding whether to run a full analysis. Does NOT accept more than one ticker and does NOT rank, sort, filter, or list multiple stocks — for any "top N", "best/worst", "highest/lowest scored", or filtered multi-stock request, call discover_stocks instead; never assemble a ranking by calling this tool repeatedly and inventing an order.
| Name | Type | Req | Description |
|---|---|---|---|
| exchange | string | – | Exchange code (e.g. NASDAQ NYSE). Optional - resolved automatically if omitted. |
| ticker | string | yes | Stock ticker symbol (e.g. AAPL MSFT TSLA) |
| Name | Type | Req | Description |
|---|---|---|---|
| analysis_date | string | yes | – |
| company_name | string | yes | – |
| composite_score | number | yes | – |
| config_context | object | yes | – |
| data_source | string | yes | – |
| domain_scores | null|array | yes | – |
| exchange | string | yes | – |
| industry | string | yes | – |
| key_challenges | null|array | – | – |
| key_strengths | null|array | – | – |
| rating | null|string | yes | – |
| scope | string | yes | – |
| sector | string | yes | – |
| ticker | string | yes | – |
| watchlist | null|object | – | – |
| watchlist_offered | boolean | – | – |
No examples provided.
get_portfolio_insights Get Portfolio Insights ~123
Retrieve StockLens analysis summaries for the authenticated user's watchlist. Returns available composite scores and grades for watchlisted stocks; either value may be absent when no completed score exists. Returns the full watchlist up to the plan's capacity — Free tracks up to 10 stocks; Pro and Max plans track an unlimited number. Use this to give users an overview of their portfolio's analytical health. Does NOT accept a ticker or filter arguments and does NOT rank or screen stocks outside the user's own watchlist — call discover_stocks for a market-wide ranked or filtered list.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| aggregate_signal | null|string | – | – |
| scope | string | yes | – |
| tier_limited | boolean | yes | – |
| total_holdings | integer | yes | – |
| watchlist | null|array | yes | – |
No examples provided.
initiate_analysis Initiate Analysis ~615
Initiate a full StockLens AI analysis for a specific stock. Starting a new run may consume one Analysis credit (LENS_AI) or one Plus Analysis credit (LENS_AI_PLUS, which may add AI narratives). Returns an analysis_id immediately — completion is asynchronous. Retrieve status or results with a separate fetch_analysis_result call when the user asks for them. A recent matching analysis may be reused; the receipt explicitly reports new_run_started and reused_existing without claiming an asynchronous credit charge has completed. Concurrent identical initiations receive retry guidance. Free supports the standard Analysis only; Pro and Max plans include Plus Analysis. Does NOT screen, rank, or compare across multiple stocks — call discover_stocks for any multi-stock or "top N" request. Does NOT execute trades, place orders, or move funds. Does NOT accept more than one ticker per call.
| Name | Type | Req | Description |
|---|---|---|---|
| analysis_emphasis | string | – | Optional. RISK_EMPHASIS | BALANCED | FUNDAMENTAL_GROWTH_EMPHASIS. Must agree with the emphasis implied by risk_tolerance (low->RISK_EMPHASIS, medium->BALANCED, high->FUNDAMENTAL_GROWTH_EMPHASIS); a m… |
| depth | string | – | Analysis depth: standard or plus. Standard consumes an Analysis credit (LENS_AI). Plus consumes a Plus Analysis credit (LENS_AI_PLUS) and may add AI narratives. Default standard. |
| evidence_history_family | string | – | Optional. SHORT_HISTORY | MEDIUM_HISTORY | LONG_HISTORY. Must agree with the family implied by time_range (short_2_wk->SHORT_HISTORY, medium_1_mo/medium_2_mo->MEDIUM_HISTORY, long_1_yr/long_2_yr->LON… |
| exchange | string | – | Exchange code (e.g. NASDAQ). Optional - resolved automatically if omitted. |
| risk_tolerance | string | – | Analysis focus — reweights how much the analysis weighs downside/quality risk vs. growth/fundamentals. NOT a personal risk or suitability assessment, and it never changes the company's underlying fac… |
| ticker | string | yes | Stock ticker symbol (e.g. AAPL) |
| time_range | string | – | Time horizon — shapes which signals the analysis weighs most (shorter horizons favor price action, momentum and news; longer favor fundamentals and quality). Not a price forecast. One window per cali… |
| Name | Type | Req | Description |
|---|---|---|---|
| analysis_id | string | yes | – |
| credit_type | string | yes | – |
| depth | string | yes | – |
| estimated_seconds | integer | yes | – |
| new_run_started | boolean | yes | – |
| reused_existing | boolean | yes | – |
| scope | string | yes | – |
| status | string | yes | – |
No examples provided.
ping Ping ~17
Health check — returns pong to verify MCP connectivity
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | yes | Connectivity status — "ok" when the MCP server is reachable |
No examples provided.
remove_from_watchlist Remove From Watchlist ~136
Remove one stock ticker from the authenticated user's StockLens watchlist. Does NOT execute trades and does NOT delete a recorded holding or its transactions — a watchlist item with recorded transactions cannot be removed through this tool. Does NOT accept more than one ticker per call.
| Name | Type | Req | Description |
|---|---|---|---|
| exchange | string | – | Exchange code (e.g. NASDAQ). Optional — when omitted, the ticker is matched against your own watchlist; if it is tracked on more than one exchange you will be asked which one. |
| ticker | string | yes | Stock ticker symbol to remove from the watchlist (e.g. AAPL). Exactly one ticker per call. |
| Name | Type | Req | Description |
|---|---|---|---|
| exchange | string | yes | – |
| removed | boolean | yes | – |
| scope | string | yes | – |
| ticker | string | yes | – |
| total_holdings | integer | yes | – |
No examples provided.
What is the StockLens MCP server?
StockLens is an MCP server listed in the public MCP registry as com.stocklens/stocklens. Scores for the 600 largest stocks with no account. Sign in for analysis, screening and a watchlist. This page covers its hosted endpoint (https://mcp.stocklens.com/mcp).
Is the StockLens MCP server safe to use?
StockLens scores 87 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 StockLens MCP server expose?
StockLens exposes 8 tools: add_to_watchlist, discover_stocks, fetch_analysis_result, get_market_summary, get_portfolio_insights, and 3 more. Their descriptions and schemas cost roughly 1,946 tokens of context every time the server is loaded.
Does the StockLens MCP server require authentication?
Yes. StockLens 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 StockLens MCP server still maintained?
StockLens is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.