Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

StockLens

REMOTE · MCP.STOCKLENS.COM

Scores for the 600 largest stocks with no account. Sign in for analysis, screening and a watchlist.

0 this week 89 Trust /100

Last scanned (9 hours ago)

Scores higher than 97% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Finance and Payments

Recent critical change

Authorization (5 Aug 2026). See the changelog before you install this server.

Trust breakdown (7 categories)

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
Schema Quality & AI Usability60
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3753 tokens (~375/item across 10 items; 10 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 Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 11 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
What we tested

Checks we ran (13)

  • TLS certificate
  • Authorization
  • HTTPS
  • HSTS header
  • DNSSEC
  • Transport
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Does not apply to this hosted endpoint (2)

  • Supply Chain SecurityScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.
  • Provenance & TransparencyScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.

The score does not measure everything. What the score does not measure →

Changelog

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.

  • 5 Nov 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “discover_stocks” rewrote its description, which is the text the model 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 “initiate_analysis” rewrote its description, which is the text the model reads security
    • Schema quality: 3325 → 3753 ▼ functional
    • New tool “inspect_reading” functional
  • 21 Oct 26 0
    • Tool “fetch_analysis_result” rewrote its description, which is the text the model reads security
  • 20 Oct 26 0
    • Tool “discover_stocks” rewrote its description, which is the text the model reads security
  • 18 Oct 26 0
    • Tool “add_to_watchlist” 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 “remove_from_watchlist” rewrote its description, which is the text the model reads security
    • Schema quality: 296 → 354 ▼ functional
    • New tool “add_to_watchlist_batch” functional
    • “add_to_watchlist” added an optional parameter “portfolio_id” cosmetic
    • “add_to_watchlist” added an optional parameter “portfolio_name” cosmetic
    • “get_portfolio_insights” added an optional parameter “portfolio_id” cosmetic
    • “get_portfolio_insights” added an optional parameter “portfolio_name” cosmetic
    • “remove_from_watchlist” added an optional parameter “portfolio_id” cosmetic
    • “remove_from_watchlist” added an optional parameter “portfolio_name” cosmetic
    • Tool “add_to_watchlist” changed its title: Add To Watchlist → Add to Portfolio cosmetic
    • Tool “get_portfolio_insights” changed its title: Get Portfolio Insights → Get Portfolio cosmetic
    • Tool “remove_from_watchlist” changed its title: Remove From Watchlist → Remove from Portfolio cosmetic
  • 17 Oct 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “get_market_summary” 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
  • 16 Oct 26 −1
    • Tool “discover_stocks” rewrote its description, which is the text the model 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 “initiate_analysis” rewrote its description, which is the text the model reads security
    • Schema quality: 263 → 294 ▼ functional
    • “discover_stocks” reworded the description of “sort_by” cosmetic
    • “initiate_analysis” reworded the description of “depth” cosmetic
  • 28 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Sept 26 0
    • Tool “get_market_summary” rewrote its description, which is the text the model reads security
Diagnostics

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 5 Nov 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. DS published 19718 13 Verified
stocklens.com. DS published 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
MCP tools · 10 exposed · ~3,660 tokens

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 →

Tool Tokens
add_to_watchlist ~277

Add one company to one of the person's StockLens portfolios as a company they follow, so its score stays readable here. Call it only when the person has asked for it or agreed to an offer. Without portfolio_id or portfolio_name it adds to the default portfolio, and the result names the portfolio that received it. Relay the result's message, which says where the company went. A status other than added is an answer, not an error: relay its message and act on next_step. After an add the person accepted from a get_market_summary offer, call get_market_summary again to answer their question. One ticker per call; for a list of companies, use add_to_watchlist_batch. It does not trade, record a holding or move money.

NameTypeReqDescription
exchangestring–Exchange code (e.g. NASDAQ). Optional. Resolved automatically if omitted.
portfolio_idstring–The id of the portfolio to add to, as get_portfolio_insights lists it. Optional: without it or portfolio_name the company goes to the default portfolio.
portfolio_namestring–The name of the portfolio to add to, as the person names it (exact, case does not matter). Optional.
tickerstringyesStock ticker symbol (e.g. AAPL). Exactly one ticker per call.
NameTypeReqDescription
candidatesnull|array––
company_countnull|integer––
company_namenull|string––
exchangestring––
is_defaultnull|boolean––
messagestringyes–
modestring––
next_stepnull|object––
plan_limitnull|integer––
portfolio_countnull|integer––
portfolio_idstring––
portfolio_namestring––
portfoliosnull|array––
scopestringyes–
statusstringyes–
tickerstring––

No examples provided.

add_to_watchlist_batch ~396

Add a list of companies the person gave you, up to 100 rows, to one of their StockLens portfolios, in two calls. First call with confirm false: nothing is added and every row returns its outcome. Relay summary_line and message, then every row that is not a plain add, grouped by outcome, and name the plain adds in one line; name the portfolio only when portfolio_count is above 1. Ask which rows to add. Then call with confirm true, the preview_id, the same rows, the same portfolio and the confirmed_indexes the person approved. Send only rows the person gave you. For an ambiguous row, ask which listing using its candidates; never pick one. Add a not_covered row only if the person asks for it. A changed list or a different portfolio needs a new preview; preview_mismatch means the preview expired or no longer matches, so preview again. Without portfolio_id or portfolio_name it uses the default portfolio. It does not trade, record holdings or move money.

NameTypeReqDescription
confirmbooleanyesfalse previews the list and adds nothing. true adds the rows of confirmed_indexes from the preview that preview_id names.
confirmed_indexesnull|array–The index of every row the person approved, from the preview. Required when confirm is true.
portfolio_idstring–The id of the portfolio to add to, as get_portfolio_insights lists it. Optional: without it or portfolio_name the list goes to the default portfolio.
portfolio_namestring–The name of the portfolio to add to, as the person names it (exact, case does not matter). Optional.
preview_idstring–The preview_id the preview returned. Required when confirm is true.
rowsnull|arrayyesThe companies the person gave you, one per row, in their order. Never add a row they did not name.
NameTypeReqDescription
capacitynull|object––
company_countnull|integer––
is_defaultnull|boolean––
messagestring––
next_stepnull|object––
portfolio_countnull|integer––
portfolio_idstring––
portfolio_namestring––
portfoliosnull|array––
preview_idstring––
reasonstring––
rowsnull|array––
scopestringyes–
statusstringyes–
summarynull|object––
summary_linestring––

No examples provided.

discover_stocks ~589

Screen the companies StockLens scores nightly by region, exchange, sector, industry, market-cap band and trading volume, sorted by one of the six StockLens scores or by market cap, volume or ticker, and return the top or bottom N. Popularity ordering is unavailable: analysis_volume and user_volume are retired and return VALIDATION_ERROR without running a screen. For a popularity request, ask the person to choose a supported ordering. Use it for any top N, best, worst, highest, lowest or filtered request across the companies StockLens scores, and never build such a list from get_market_summary or general knowledge; to compare only companies the person names, call get_market_summary for each instead. It has no valuation, price-target or growth filter; say so rather than calling a score sort one. status ranked means the requested order was used. When a ranked result carries message, relay it; it states what the ranking covers, so never present the rows as a ranking of more than that. browse_substituted means a score order was asked for and market-cap order with scores hidden was returned, so never describe those rows as ranked by score. locked means no companies are named; relay message verbatim. What the caller can sort and how far it reaches is in access_tier and reach_capped_at; signed_in_as names the account they belong to. Report every returned row in its actual order and retain the population and access/substitution message. Where reading_ref and inspection are supplied, inspect only the company the person asks about; never fetch every row. It does not trade and gives no personal recommendations.

NameTypeReqDescription
directionstring–top = highest first, bottom = lowest first. Default top.
exchange_innull|array–Restrict to these exchanges. Omitted = no restriction.
industry_innull|array–Restrict to these GICS industries. Omitted = no restriction.
limitinteger–Number of matches to return (the N in top/bottom N), 1 to 100. Default 10.
macro_innull|array–Restrict to these macro regions. Omitted = no restriction.
market_cap_bandstring–Restrict to this market-cap band. Omitted = no cap restriction.
pageinteger–0-based page of results, 0 to 500. Default 0.
search_textstring–Free-text company name/ticker search, up to 80 characters.
sector_innull|array–Restrict to these GICS sectors. Omitted = no restriction.
sort_bystring–One of the 6 StockLens scores, market_cap, volume or ticker. Default composite_score. Popularity ordering is unavailable.
volume_floorstring–Minimum average trading volume. Omitted = no floor.
NameTypeReqDescription
access_tierstringyes–
as_of_datenull|string––
config_contextobjectyes–
data_sourcestringyes–
effective_directionstringyes–
effective_sortstringyes–
hard_lockedbooleanyes–
messagenull|string––
next_stepnull|object––
quota_remaining_todaynull|integer––
reach_capped_atnull|integer––
rowsnull|arrayyes–
rows_returnedintegeryes–
scopestringyes–
scores_lockedbooleanyes–
signed_in_asstring––
sort_substitutedboolean––
statusstringyes–
total_matchesnull|integer––

No examples provided.

fetch_analysis_result ~369

Return the progress or result of an analysis started with initiate_analysis, by its analysis_id. Each call returns the current state once and does not wait. While status is in_progress, or narrative.status is pending or running, check again only when the person asks, and no sooner than retry_after_seconds. A failed status is an answer; relay error_message. A complete result is the saved report: the composite score and rating word, the evidence word (Full, Core or Low), each domain's score, grade word and contribution (cornerstone, major, supporting or contextual), its key_drivers (up to three, each with its evidence), lens and domain_coverage, and its written summaries (domain conclusions, synthesis, key strengths and challenges) at either depth once narrative.status is ready. Until then relay message: pending or running means they are still being written, and you may briefly summarize the scores and evidence supplied but never write a summary, cause or reason the result does not contain; failed means they could not be completed, and the scores and evidence stand. When reading_ref and inspection are supplied, use inspect_reading for available selected evidence in chat, without another run. Preserve every material qualification; do not repeat bound findings as additional independent reasons. Other web cards, charts and per-anchor Explain views remain on the web. Offer report_url as Open saved report to inspect factor values, peer context and ranked contributors where supplied; sign in to the owning StockLens account. It can open before the written summaries finish, and opening it does not start another run. Say how much a domain counts only with its contribution word, never as a number or share. It does not accept a ticker and does not rank companies.

NameTypeReqDescription
analysis_idstringyesThe analysis_id returned by initiate_analysis
NameTypeReqDescription
analysis_idstringyes–
base_digeststring–Identifies the saved scores and evidence of a complete result. It stays the same when the written summaries arrive.
deterministic_ready_atstring–When the scores and evidence were saved, ahead of the written summaries (ISO 8601). Absent when the report was saved together with its summaries.
error_messagenull|string––
inspectionnull|object––
messagestring–A sentence to relay as given, present when the written summaries of a complete result are not ready: they are still being written, or could not be completed.
narrativenull|object–The state of the written summaries (the domain conclusions, the synthesis, and the key strengths and challenges) of a complete result.
progress_pctnull|integer––
reading_refstring––
report_urlstring–Open this saved report for factor values, peer context and ranked contributors through Explain where supplied. Sign in to the owning StockLens account. Reading it does not start another analysis. Pre…
resultnull|object––
retry_after_secondsnull|integer––
scopestringyes–
statusstringyes–

No examples provided.

get_market_summary ~465

One company's latest nightly StockLens score: the composite score (0 to 100) and its rating word, the domain scores with their grade words, the named signals that most shaped the reading (up to three, each with its evidence), the business-model lens where one applies, and any domain that was not scored in it. Use the rating word for the company and grade words only for a domain. A higher Risk score means a stronger risk posture and less downside concern. Without an account, scores answer for the 600 largest companies by market value; a signed-in account also reaches any company in its own portfolios. A result with a status other than scored is an answer, not an error; do not retry it unchanged. Relay its message; not_in_surface means the company is scored and outside the caller's reach, never that StockLens has no analysis. Then act on next_step: for ask_user, ask the person and call the named tool only if they agree; mention an offer on a scored result at most once per conversation. Every result carries freshness; a stale result is StockLens's last computed reading for that listing, not last night's, and should be quoted with its date. When freshness.requested_ticker is present, say which listing was served and what was asked. When reading_ref and inspection are supplied, inspect_reading explains already-produced evidence without a new run. Copy its labelled arguments. A nightly reference grants only public score/reason and admitted conflict evidence, never private assessment depth. If the person explicitly wants a new analysis, explain that a fresh analysis provides a saved web report with that evidence where available. It requires sign-in and may use an Analysis credit; ask whether they want one before calling initiate_analysis. A snapshot request alone is never permission to start a run. One ticker per call. To compare companies the person names, call it once for each. For any other top, best, worst or filtered request call discover_stocks, and never choose the…

NameTypeReqDescription
exchangestring–Exchange code (e.g. NASDAQ NYSE). Optional. Resolved automatically if omitted.
tickerstringyesStock ticker symbol (e.g. AAPL MSFT TSLA). Exactly one ticker per call.
NameTypeReqDescription
analysis_datestring––
analysis_offeredboolean––
candidatesnull|array––
company_namestring––
composite_scorenull|number––
config_contextnull|object––
domain_coveragenull|object––
domain_scoresnull|array––
exchangestring––
freshnessnull|object––
industrystring––
inspectionnull|object––
key_driversnull|array––
lensnull|object––
messagestring––
next_stepnull|object––
ratingnull|string––
reading_refstring––
scopestringyes–
sectorstring––
statusstringyes–
tickerstringyes–
watchlist_offeredboolean––

No examples provided.

get_portfolio_insights ~316

Read one of the person's StockLens portfolios: every company in it, each marked holding or watching with its score and rating word, and the portfolio's average score and rating word, its change over 7 and 30 nights, its largest sector share and its biggest movers over 7 nights, each with a driver of its latest reading that points the same way. Without portfolio_id or portfolio_name it reads the default portfolio. portfolios lists every portfolio the person owns and appears only when there is more than one: then name the portfolio you read once and offer the others by name. With one portfolio, never name it. A portfolio the person does not own returns portfolio_not_found with the choices; never guess. Relay message, caption, trust and concentration as written. If a window says insufficient_data, say so; do not estimate a change. config_changed marks a window in which StockLens changed how it scores, so part of that change is the method, not the market. The scores are the ones get_market_summary serves, as of as_of. It does not rank or screen companies outside the portfolio; call discover_stocks for that. It holds no money figures and gives no personal advice.

NameTypeReqDescription
portfolio_idstring–The id of the portfolio to read, as a portfolios list gives it. Optional: without it or portfolio_name the default portfolio is read.
portfolio_namestring–The name of the portfolio to read, as the person names it (exact, case does not matter). Optional.
NameTypeReqDescription
as_ofstring––
average_composite_scorenull|integer––
captionstring––
companiesnull|array––
company_countnull|integer––
concentrationnull|object––
fund_countinteger––
holdings_countinteger––
is_defaultnull|boolean––
messagestring––
movers_windowstring––
next_stepnull|object––
populationstring––
portfolio_countnull|integer––
portfolio_idstring––
portfolio_namestring––
portfoliosnull|array––
ratingstring––
scopestringyes–
scored_company_countnull|integer––
scored_holdings_countinteger––
statusstringyes–
tier_limitednull|boolean––
top_moversnull|array––
trustnull|array––
window_changenull|object––

No examples provided.

initiate_analysis ~660

Start a fresh StockLens analysis of one company, only when the person asks for one or agrees to an offer of one in a get_market_summary result. A new run may use one Analysis credit, or one Plus Analysis credit when depth is plus; the result says if the person's plan does not include it. Use inspect_reading for already-produced evidence when its exact reference is available; an evidence question alone never authorizes a run. Both depths include written domain summaries and synthesis when produced; Plus adds deeper synthesis and extra web cards where available. The assistant result is condensed; the saved web report has the factor cards and Explain views. It returns an analysis_id at once and finishes asynchronously; fetch the result with fetch_analysis_result when the person asks for it. new_run_started and reused_existing say whether a recent matching analysis was reused. One ticker per call. It does not rank or compare companies, and does not trade or move money.

NameTypeReqDescription
analysis_emphasisstring–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…
depthstring–Analysis depth: standard or plus. Both include written domain summaries and synthesis when produced. Plus uses deeper synthesis and adds extra cards in the web report where available. Standard uses a…
evidence_history_familystring–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…
exchangestring–Exchange code (e.g. NASDAQ). Optional. Resolved automatically if omitted.
risk_tolerancestring–Analysis focus. It 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 f…
tickerstringyesStock ticker symbol (e.g. AAPL). Exactly one ticker per call.
time_rangestring–Time horizon. It 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 ca…
NameTypeReqDescription
analysis_idstringyes–
credit_typestringyes–
depthstringyes–
estimated_secondsintegeryes–
new_run_startedbooleanyes–
reused_existingbooleanyes–
scopestringyes–
statusstringyes–

No examples provided.

inspect_reading ~338

Explain why an exact StockLens reading says something, using evidence already produced; no credits, new analysis or writes. Use for a selected finding, qualification or assessment, including momentum, authorized moat or Beneish where produced. Copy reading_ref and the labelled view/selector from inspection arguments; overview is the default. A clear evidence request authorizes this read without another permission question. Follow a returned overview continuation only when more saved choices are needed; each call reads this same exact reading. Keep the company, date, reading kind/depth and all material context. USED_IN_ASSESSMENT, RELATED_OBSERVATION and FUTURE_CHECK have different roles. A standalone observation has no assessment-relative role; produced inapplicability can be inspected for its explanation, without a calculated score. Assessment-level unions do not prove per-sentence witnesses, a group is not a causal pair, and shared observations are not independent corroboration. Unknown, gated, expired and uncaptured detail stays typed; never substitute today's reading, retry unchanged or start a run to fill it. Pending/failed narrative does not erase deterministic evidence. Avoid repeating the same bound meaning as both narrative and finding. Only the four declared views are supported; this is not full structural inspection of every web card. An exact report link is optional.

NameTypeReqDescription
reading_refstringyesExact reading_ref returned by StockLens. Never reconstruct from a ticker or date.
selectorstring–Copy the selector from inspection.arguments, including an optional overview continuation. Required for other views.
viewstring–Copy from inspection.arguments; default overview. Only overview, finding, assessment or observation.
NameTypeReqDescription
as_ofstring––
assessmentnull|object––
availabilitystringyes–
binding_availabilitystring––
companynull|object––
coveragenull|array––
detail_expires_atstring––
evidencenull|array––
evidence_scopestring––
findingnull|object––
inspectionnull|array––
kindstring––
limitationsnull|array––
messagestring––
narrativenull|object––
reading_refstringyes–
reasonstring––
report_urlstring––
scopestringyes–
statusstringyes–
verdictnull|object––
viewstringyes–

No examples provided.

ping ~13

Health check. Returns pong.

Input schema present but exposes no named parameters.

NameTypeReqDescription
statusstringyesConnectivity status: "ok" when the MCP server is reachable

No examples provided.

remove_from_watchlist ~237

Remove one company from one of the person's StockLens portfolios. Call it only when the person has asked for it. Without portfolio_id or portfolio_name it removes from the default portfolio, and the result names the portfolio. Relay the result's message. A status other than removed is an answer, not an error. A holding with recorded transactions is not removed here; the result says where to do it. One ticker per call. It does not trade or delete transactions.

NameTypeReqDescription
exchangestring–Exchange code (e.g. NASDAQ). Optional. When omitted, the ticker is matched against the portfolio; if it is there on more than one exchange you will be asked which.
portfolio_idstring–The id of the portfolio to remove from, as get_portfolio_insights lists it. Optional: without it or portfolio_name the default portfolio is used.
portfolio_namestring–The name of the portfolio to remove from, as the person names it (exact, case does not matter). Optional.
tickerstringyesStock ticker symbol (e.g. AAPL). Exactly one ticker per call.
NameTypeReqDescription
company_countnull|integer––
exchangestring––
is_defaultnull|boolean––
messagestringyes–
modestring––
next_stepnull|object––
portfolio_countnull|integer––
portfolio_idstring––
portfolio_namestring––
portfoliosnull|array––
scopestringyes–
statusstringyes–
tickerstring––

No examples provided.

Install

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

# add to Claude Code
claude mcp add --transport http com-stocklens-stocklens 'https://mcp.stocklens.com/mcp'
Common questions

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 89 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 10 tools: add_to_watchlist, add_to_watchlist_batch, discover_stocks, fetch_analysis_result, get_market_summary, and 5 more. Their descriptions and schemas cost roughly 3,660 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 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What did VerifyMCP test on the StockLens MCP server?

VerifyMCP ran 13 checks on StockLens, covering TLS certificate, Authorization, HTTPS, HSTS header and 9 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.