MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Other

StockLens

Scores for the largest companies in each market with no account. Sign in for analysis and screening.

Checks passed
12 / 22

2 failed · 8 not measured

Median response
551 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
11

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Outdated check

Last connection measurement is over 24 hours old. Current availability is unknown.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
004
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
400
Publisher identityCan the publisher be traced to its source?
222

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 551 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name stocklens-mcp-server.

  • Pass
    Lists tools

    tools/list returned 11 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 551 ms over 1 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 551 ms over 1 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    1 of 1 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Not measured
    Stable tool list

    Fewer than two successful probes in 30 days, so tool-list stability is not measured.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Pass
    Parameters documented

    41 of 41 parameters have a description (100%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Fail
    Website matches publisher

    The website host does not match the reverse-domain namespace.

  • Fail
    Source repo linked

    No repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Pass
    Recently updated

    Updated 2026-11-10T00:56:21.938739Z, within 180 days.

  • Not measured
    Open-source licence

    No GitHub repository to ask about a licence.

Start using StockLens

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http stocklens https://mcp.stocklens.com/mcp

Capabilities

Tools 11

add_to_watchlist

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.

Discovered
add_to_watchlist_batch

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.

Discovered
discover_stocks

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. Every list is computed inside one listing market: the one named in macro_in or exchange_in, otherwise the United States, and market and market_name in the result name it, so always say which market the rows are from. For another market (US, CA, EU, CH, GB, JP), call again naming it; never merge or compare lists across markets. multiple_markets and market_not_covered mean nothing was ranked: relay message. 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_shortlist_summary 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. A successful result counts once toward the person's weekly research allowance; a RATE_LIMITED result states the limit and when it renews, so relay it and do not call again before then.

Discovered
fetch_analysis_result

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, relay its message as given; never invent or rotate progress narration. In that state, or when 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.

Discovered
get_market_summary

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 largest companies in each market; 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. State available standing inside the complete reading, led by Fundamental then the coarse Composite band, with standing.universe, each band's population and standing.as_of. Each listing market is its own universe; different markets may be read side by side, never ranked on one scale. StockLens supplies bands for US, Japan, Eurozone, UK and Canada when the market has at least 200 eligible companies. Never compute bands, quote exact numeric ranks or percentiles, or turn a standing change into a company fact. Relay standing_definition coverage exclusions and standing.message for available, outside_universe and unavailable. If standing is absent, say it could not be supplied. For a legacy plan_limited result, mention it only when the person asks where the company stands, ranks or compares; otherwise keep the score reading silent about that limit. Say: Standing is not included in your current plan. To change your plan, visit stocklens.com/pricing. One ticker per call. For companies the person names use get_shortlist_summary. For any other top, best, worst or filtered request call discover_stocks, and never choose the companies for a ranking yourself. A successful result counts once toward the person's weekly research allowance; a RATE_LIMITED result states the limit and when it renews, so relay it and do not call again before then.

Discovered
get_portfolio_insights

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. A successful result counts once toward the person's weekly research allowance; a RATE_LIMITED result states the limit and when it renews, so relay it and do not call again before then.

Discovered
get_shortlist_summary

Read 1 to 10 companies the person names in one call, in their order. Each row returns a verdict; scored rows supply the complete nightly reading, with scores, reasons, freshness and standing when available. It does not discover companies, sort the market, start analyses or change a portfolio. Use discover_stocks for market screens. State available standing inside the complete reading, led by Fundamental then the coarse Composite band, with standing.universe, each band's population and standing.as_of. Each listing market is its own universe; different markets may be read side by side, never ranked on one scale. StockLens supplies bands for US, Japan, Eurozone, UK and Canada when the market has at least 200 eligible companies. Never compute bands, quote exact numeric ranks or percentiles, or turn a standing change into a company fact. Relay standing_definition coverage exclusions and standing.message for available, outside_universe and unavailable. If standing is absent, say it could not be supplied. For a legacy plan_limited result, mention it only when the person asks where the company stands, ranks or compares; otherwise keep the score reading silent about that limit. Say: Standing is not included in your current plan. To change your plan, visit stocklens.com/pricing. Definitions appear once in standing_definition; each scored reading keeps its own date, and only available bands supply populations. Do not present different dates as a same-night comparison. Relay non-scored company statuses per row. Preserve a supplied free-save remedy and ask for consent before any save. Ask about ambiguous rows; never guess. For informational purposes, not investment advice. A successful result counts once toward the person's weekly research allowance; a RATE_LIMITED result states the limit and when it renews, so relay it and do not call again before then.

Discovered
initiate_analysis

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.

Discovered
inspect_reading

Explain why an exact StockLens reading says something, using evidence already produced; no credits, new analysis or writes. Use for a selected score reason, 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 selected_reason SOURCE_METRIC supplies its own saved interpretation; RELATED_ASSESSMENT is context, not evidence for that reason. Narrative sentences stay unbound. 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.

Discovered
ping

Health check. Returns pong.

Discovered
remove_from_watchlist

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.

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected551 ms11