StockLens
Server Details
Scores for the 600 largest stocks with no account. Sign in for analysis, screening and a watchlist.
- Status
- Healthy
- Uptime
- 100.0% over 38 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 8 tools
Most tools are clearly distinct: watchlist management (add/remove), analysis lifecycle (initiate/fetch), single-stock summary (get_market_summary), watchlist overview (get_portfolio_insights), and screening (discover_stocks). The only mild ambiguity is between get_market_summary and get_portfolio_insights, but their descriptions explicitly differentiate single-ticker vs. watchlist scope.
Tool names mostly follow a verb_noun pattern: add_to_watchlist, remove_from_watchlist, get_market_summary, get_portfolio_insights, fetch_analysis_result, initiate_analysis, discover_stocks. The pattern is consistent and readable, with only minor variation between 'get_' and 'fetch_' prefixes.
8 tools is well-scoped for a stock analysis server: watchlist CRUD, analysis initiation/retrieval, market summary, screening, and health check. Each tool earns its place and the count is within the ideal range.
The core workflow is covered: add stocks to watchlist, get summaries, initiate and fetch analyses, screen the market, and remove stocks. Minor gaps exist (no update watchlist item, no bulk add, no explicit transaction/holding tools), but the stated purpose of analysis and watchlist tracking is well covered.
Available Tools
8 toolsadd_to_watchlistAdd To WatchlistAInspect
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 | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Stock ticker symbol to add to the watchlist (e.g. AAPL). Exactly one ticker per call. | |
| exchange | No | Exchange code (e.g. NASDAQ). Optional - resolved automatically if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | Yes | |
| ticker | Yes | |
| exchange | Yes | |
| plan_limit | Yes | |
| company_name | No | |
| total_holdings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the description doesn't need to restate those. It adds useful behavioral context: plan capacity limits, the result states the limit, and the tool does not execute trades or record holdings/transactions. It also clarifies the one-ticker-per-call constraint, which is beyond the schema's pattern. Minor gap: it doesn't describe the exact success/error response shape, but the output schema exists and the description covers the key behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loads the core action and purpose, and every sentence earns its place. The capacity/plan note and the explicit exclusions are valuable and not redundant with the schema or annotations. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, 1 required, output schema present, no nested objects), the description is nearly complete. It covers the action, scope, plan limits, and exclusions. The only minor gap is that it doesn't explicitly state what a successful response contains, but the output schema exists and the description's behavioral notes are sufficient for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds value by reinforcing that exactly one ticker per call is allowed and that the exchange is optional and resolved automatically if omitted. It doesn't add much beyond the schema, but the baseline for high coverage is 3, and the description's explicit one-ticker constraint and exchange-resolution note push it to a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Add'), a specific resource ('one stock ticker to the authenticated user's StockLens watchlist'), and the purpose ('tracked and scored going forward'). It also clearly distinguishes itself from sibling tools by explicitly saying it does NOT execute trades, record a holding/transaction, or accept more than one ticker per call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use this tool (adding a ticker to a watchlist) and explicitly excludes related actions (trades, holdings, transactions). It also mentions plan capacity limits and directs users to stocklens.com for plan changes. However, it does not explicitly name sibling alternatives like remove_from_watchlist or discover_stocks, so the when-not-to-use guidance is implied rather than fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_stocksDiscover StocksARead-onlyInspect
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 | Required | Description | Default |
|---|---|---|---|
| page | No | 0-based page of results, 0-500. Default 0. | |
| limit | No | Number of matches to return (the N in top/bottom N), 1-100. Default 10. | |
| sort_by | No | One of the 6 StockLens scores or a non-score signal to sort by. Default composite_score. | |
| macro_in | No | Restrict to these macro regions. Omitted = no restriction. | |
| direction | No | top = highest first, bottom = lowest first. Default top. | |
| sector_in | No | Restrict to these GICS sectors. Omitted = no restriction. | |
| exchange_in | No | Restrict to these exchanges. Omitted = no restriction. | |
| industry_in | No | Restrict to these GICS industries. Omitted = no restriction. | |
| search_text | No | Free-text company name/ticker search, up to 80 characters. | |
| volume_floor | No | Minimum average trading volume. Omitted = no floor. | |
| market_cap_band | No | Restrict to this market-cap band. Omitted = no cap restriction. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| scope | Yes | |
| as_of_date | No | |
| access_tier | Yes | |
| data_source | Yes | |
| hard_locked | Yes | |
| rows_returned | Yes | |
| scores_locked | Yes | |
| total_matches | No | |
| config_context | Yes | |
| effective_sort | Yes | |
| reach_capped_at | No | |
| upgrade_message | No | |
| sort_substituted | No | |
| effective_direction | Yes | |
| quota_remaining_today | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds crucial behavior beyond that: it explicitly states the tool does NOT execute trades or give personalized recommendations, and discloses plan-dependent behaviors (free accounts get locked results with zero stocks when sorting by score, with a plan message to relay verbatim). It also promises not to return more stocks than the structured result contains, which is extra safety context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although longer than average, every sentence earns its place: the purpose is front-loaded, the alternatives and exclusions are stated early, and plan behaviors are packed efficiently. There is no fluff, redundancy, or tangential information, and the structure flows logically from purpose to constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters, 4 enums, plan differences, and a locked-result edge case, the description covers all essential operational details. It explains the reach caps, the free-account locked behavior, and explicitly rules out trade execution and personalized advice. The output schema exists, so return value explanation is unnecessary. Nothing an agent needs to call correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The tool description does not add new semantics beyond what the schema already documents; it only paraphrases the filtering and sorting capabilities. No additional format, syntax, or edge-case details are provided, so it does not elevate beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Screen'), a resource ('StockLens nightly-analyzed universe'), and a precise scope (filtering by region/exchange/sector/etc., sorting, and returning top/bottom N). It also differentiates itself from siblings by explicitly naming get_market_summary and stating it is the only ranking/comparison tool. This makes it immediately distinguishable from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('any top N, best/worst, highest/lowest scored, or filtered market-wide request') and when not to (never fabricate from get_market_summary or general knowledge). It also provides plan-specific usage constraints (free vs Pro/Max reach limits) and the locked-result behavior for free accounts sorting by score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_analysis_resultFetch Analysis ResultARead-onlyIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| analysis_id | Yes | The analysis_id returned by initiate_analysis |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | Yes | |
| result | No | |
| status | Yes | |
| analysis_id | Yes | |
| progress_pct | No | |
| error_message | No | |
| retry_after_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context: it does not wait for completion, returns the current state once, and explains what complete results include. This goes beyond the annotations and clarifies the non-blocking, one-shot nature of the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, then details about statuses, retry behavior, and exclusions. It is slightly longer than necessary but every sentence adds functional value, and the logical flow is clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers all essential aspects: status values, progress, retry timing, complete result contents, and explicit exclusions. The presence of an output schema means return format details are not needed, and the description fully equips an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter analysis_id is fully described in the schema. The description reiterates that it must come from initiate_analysis and that no ticker is accepted, but this does not add substantial semantic value beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches the result or progress of a previously initiated StockLens analysis, using a specific verb and resource. It explicitly distinguishes itself from siblings by stating it does NOT start a new analysis, does NOT rank or screen stocks, and does NOT accept a ticker, which makes it unambiguous among the sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use guidance: after initiate_analysis, and when-not-to-use: for multi-stock lists use discover_stocks, and it clarifies that it only accepts analysis_id. It also gives retry guidance with retry_after_seconds and advises checking again only if the user asks to continue, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_summaryGet Market SummaryARead-onlyIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Stock ticker symbol (e.g. AAPL MSFT TSLA) | |
| exchange | No | Exchange code (e.g. NASDAQ NYSE). Optional - resolved automatically if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | Yes | |
| rating | Yes | |
| sector | Yes | |
| ticker | Yes | |
| exchange | Yes | |
| industry | Yes | |
| watchlist | No | |
| data_source | Yes | |
| company_name | Yes | |
| analysis_date | Yes | |
| domain_scores | Yes | |
| key_strengths | No | |
| config_context | Yes | |
| key_challenges | No | |
| composite_score | Yes | |
| watchlist_offered | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint and idempotentHint, and the description adds meaningful behavioral context: tier-based access, the TIER_INSUFFICIENT error semantics ('NOT a statement that the stock is unscored'), the nightly data derivation, and the instruction not to tell users a stock is unscored. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but every sentence contributes: return payload, access tiers, error semantics, use case, and exclusions. It front-loads the core purpose and the key constraints before moving to edge cases, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover safety, the description fills the remaining gaps: when to call it, what tier restrictions apply, how to interpret TIER_INSUFFICIENT, and which sibling to use for multi-stock queries. An agent has everything needed to invoke it correctly and avoid common mistakes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description adds value by explicitly constraining input to a single ticker and clarifying that exchange is optional and auto-resolved. It also reinforces that the tool cannot accept multi-ticker or ranking-style input, which is useful parameter-level guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Retrieve the latest StockLens composite analysis summary for a stock ticker.' It also distinguishes this tool from siblings by explicitly stating it does NOT rank, sort, filter, or list multiple stocks, and points to discover_stocks for those cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit use case: 'Use this to quickly assess a stock before deciding whether to run a full analysis.' It also provides clear exclusions: any 'top N', 'best/worst', 'highest/lowest scored', or filtered multi-stock request should call discover_stocks instead, and repeated calls to assemble a ranking are forbidden.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolio_insightsGet Portfolio InsightsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | Yes | |
| watchlist | Yes | |
| tier_limited | Yes | |
| total_holdings | Yes | |
| aggregate_signal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds valuable context beyond that: plan-based capacity limits (Free up to 10 stocks, Pro/Max unlimited) and the fact that scores/grades may be absent when no completed score exists. These are useful behavioral details not in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero wasted words. It front-loads the core purpose, then packs in capacity limits, missing-data behavior, and a sibling reference, all in a compact, scannable format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters, clear read-only annotations, and an output schema (which presumably describes the returned data), the description fully covers what it returns, plan constraints, and exclusions, leaving no gaps for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so per guidelines the baseline is 4. The description adds no parameter-specific info (none needed) and correctly states it accepts no ticker/filter arguments, which clarifies the lack of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), resource ('StockLens analysis summaries for the authenticated user's watchlist'), and clearly distinguishes itself from siblings by explicitly excluding ticker/filter arguments and market-wide ranking, pointing to discover_stocks for that. This makes the tool's unique purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use it ('to give users an overview of their portfolio's analytical health') and when not to (does NOT rank/screen outside watchlist) and names the alternative (discover_stocks). This is exactly the when/when-not guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
initiate_analysisInitiate AnalysisADestructiveInspect
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 | Required | Description | Default |
|---|---|---|---|
| depth | No | 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. | |
| ticker | Yes | Stock ticker symbol (e.g. AAPL) | |
| exchange | No | Exchange code (e.g. NASDAQ). Optional - resolved automatically if omitted. | |
| time_range | No | 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 calibrated band: short_2_wk (Short-term), medium_1_mo (Medium-term), long_1_yr (Long-term). Default medium_1_mo. The legacy medium_2_mo and long_2_yr aliases are still accepted and resolve to medium_1_mo and long_1_yr respectively. | |
| risk_tolerance | No | 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 facts. low=Defensive, medium=Balanced, high=Growth. Default medium. | |
| analysis_emphasis | No | 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 mismatch is rejected as a validation error before any credit is consumed. | |
| evidence_history_family | No | 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->LONG_HISTORY); a mismatch is rejected as a validation error before any credit is consumed. Does not select a representative range on its own. |
Output Schema
| Name | Required | Description |
|---|---|---|
| depth | Yes | |
| scope | Yes | |
| status | Yes | |
| analysis_id | Yes | |
| credit_type | Yes | |
| new_run_started | Yes | |
| reused_existing | Yes | |
| estimated_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructiveHint=true and readOnlyHint=false, so the description doesn't need to restate mutation. It adds critical context: credit consumption, asynchronous completion, reuse behavior, concurrent handling, and what the receipt reports. It goes beyond the annotation by explaining that credit charge may not be complete and that identical initiations get retry guidance, which is valuable for an agent managing side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and comprehensive, which is appropriate for a complex tool, but it could be tightened. It front-loads the core purpose and async behavior, then covers exclusions and plan details. Some redundancy exists (e.g., credit mentions appear multiple times), and the length might reduce scannability, but every sentence contributes to avoiding misuse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 params, credit implications, async flow, plan variations), the description covers all critical aspects: what returns immediately, how to get results, reuse and concurrency, plan differences, and what it does not do. Combined with the detailed schema and output schema, an agent has enough to call it correctly. Minor gaps: it doesn't specify typical analysis_id format or timeout expectations, but these are less critical given the guidance to fetch results separately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with rich descriptions including enums, defaults, and alignment rules (e.g., risk_tolerance and analysis_emphasis). The description adds meaningful context beyond the schema: it clarifies that time_range is not a price forecast, that analysis_emphasis mismatches are rejected before credit consumption, and that evidence_history_family doesn't select a range on its own. These additions earn a 3, but since the schema already carries most of the semantic weight, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool initiates a full StockLens AI analysis for a specific stock, with explicit scoping (single ticker) and immediate vs asynchronous behavior. It distinguishes itself from siblings by naming discover_stocks for multi-stock requests and fetch_analysis_result for retrieving results, so an agent knows exactly what this tool does and what it doesn't.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance (initiate analysis, retrieve results separately), when-not-to (does not screen, rank, compare, or trade), and names the alternative (discover_stocks for multi-stock, fetch_analysis_result for results). It also covers concurrency, credit consumption, and plan differences, leaving no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingPingARead-onlyIdempotentInspect
Health check — returns pong to verify MCP connectivity
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | Connectivity status — "ok" when the MCP server is reachable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds the concrete behavioral fact that the tool returns 'pong', which the agent can expect and check. This goes beyond what annotations provide, justifying a score above baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence containing only essential information: purpose, return value, and use case. No padding, no redundancy. Every word contributes to an agent's ability to understand and invoke the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-input, trivial-behavior tool with an output schema and safety annotations already present, the description provides everything needed to call it correctly. The agent knows what the tool doeshare and what to expect in response, leaving no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so schema description coverage is 100% vacuously. There is nothing for the description to clarify about parameters. According to the baseline, 0 params earns a 4, and the description appropriately says nothing about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: a health check that returns pong to verify MCP connectivity. It distinguishes the tool from all stock-analysis siblings, which serve entirely different functions. The resource ('MCP connectivity') and expected behavior ('returns pong') are clearly named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool: whenever an agent needs to confirm MCP connectivity. It does not explicitly mention alternatives or exclusions, but the purpose is so distinct from sibling tools that no ambiguity exists. This meets the 'clear context' level, though not the 'explicit when-not/alternatives' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_watchlistRemove From WatchlistADestructiveIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Stock ticker symbol to remove from the watchlist (e.g. AAPL). Exactly one ticker per call. | |
| exchange | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | Yes | |
| ticker | Yes | |
| removed | Yes | |
| exchange | Yes | |
| total_holdings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true. The description adds valuable behavioral context: the operation is destructive only to the watchlist entry, not to holdings/transactions, and it enforces one-ticker-per-call. This meaningfully exceeds annotation-only information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: primary action, critical exclusions/constraints, and cardinality. The most important scoping information is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with a full schema, annotations, and an output schema present, the description is complete. It covers scope, authentication context, destructive limits, and the one-item constraint, so an agent has what it needs to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents ticker and exchange well, including the exchange-matching ambiguity behavior. The description reinforces the one-ticker rule but adds no new parameter meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact operation: 'Remove one stock ticker from the authenticated user's StockLens watchlist.' It distinguishes itself from adding, trading, and holding deletion, and explicitly clarifies scope and cardinality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-not-to-use guidance: does not execute trades, does not delete holdings or transactions, and cannot remove watchlist items with recorded transactions. It does not name a specific alternative tool for those cases, but the exclusions are explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
fetch_analysis_result2 fields changed- added
Output schema / properties / result / properties / domains / items / properties / contributionAdded value: +{ + "type": "string" +} - removed
Output schema / properties / result / properties / domains / items / properties / weightRemoved value: -{ - "type": [ - "null", - "number" - ] -}
1 tool update
- Changed
discover_stocks1 field changed- added
Output schema / properties / sort_substitutedAdded value: +{ + "type": "boolean" +}
1 tool update
- Changed
get_market_summary2 fields changed- added
Output schema / properties / watchlistAdded value: +{ + "additionalProperties": false, + "properties": { + "message": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "tracked": { + "type": "boolean" + } + }, + "required": [ + "tracked", + "tool", + "message" + ], + "type": [ + "null", + "object" + ] +} - added
Output schema / properties / watchlist_offeredAdded value: +{ + "type": "boolean" +}
3 tool updates
- Changed
add_to_watchlist1 field changed- changed
Input schema / properties / exchange / descriptionPrevious value: -"Exchange code (e.g. NASDAQ). Optional — auto-resolved via StockLens autocomplete if omitted."New value: +"Exchange code (e.g. NASDAQ). Optional - resolved automatically if omitted."
- Changed
discover_stocks2 fields changed- added
Output schema / properties / hard_lockedAdded value: +{ + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "rows", - "scores_locked", - "access_tier", - "rows_returned", - "effective_sort", - "effective_direction", - "config_context", - "data_source", - "scope" -]New value: +[ + "rows", + "scores_locked", + "hard_locked", + "access_tier", + "rows_returned", + "effective_sort", + "effective_direction", + "config_context", + "data_source", + "scope" +]
- Changed
initiate_analysis1 field changed- changed
Input schema / properties / exchange / descriptionPrevious value: -"Exchange code (e.g. NASDAQ). Optional."New value: +"Exchange code (e.g. NASDAQ). Optional - resolved automatically if omitted."
2 tool updates
- Added
add_to_watchlist - Added
remove_from_watchlist
5 tool updates
- Added
discover_stocks - Changed
fetch_analysis_result2 fields changed- added
Output schema / properties / scopeAdded value: +{ + "enum": [ + "single_analysis_result" + ], + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "analysis_id", - "status" -]New value: +[ + "analysis_id", + "status", + "scope" +]
- Changed
get_market_summary3 fields changed- added
Input schema / properties / ticker / patternAdded value: +"^[A-Za-z][A-Za-z.\\-]{0,9}$" - added
Output schema / properties / scopeAdded value: +{ + "enum": [ + "single_ticker" + ], + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "ticker", - "exchange", - "company_name", - "sector", - "industry", - "composite_score", - "rating", - "domain_scores", - "analysis_date", - "config_context", - "data_source" -]New value: +[ + "ticker", + "exchange", + "company_name", + "sector", + "industry", + "composite_score", + "rating", + "domain_scores", + "analysis_date", + "config_context", + "data_source", + "scope" +]
- Changed
get_portfolio_insights2 fields changed- added
Output schema / properties / scopeAdded value: +{ + "enum": [ + "user_watchlist" + ], + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "watchlist", - "total_holdings", - "tier_limited" -]New value: +[ + "watchlist", + "total_holdings", + "tier_limited", + "scope" +]
- Changed
initiate_analysis3 fields changed- added
Input schema / properties / ticker / patternAdded value: +"^[A-Za-z][A-Za-z.\\-]{0,9}$" - added
Output schema / properties / scopeAdded value: +{ + "enum": [ + "single_analysis_receipt" + ], + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "analysis_id", - "status", - "estimated_seconds", - "depth", - "credit_type", - "new_run_started", - "reused_existing" -]New value: +[ + "analysis_id", + "status", + "estimated_seconds", + "depth", + "credit_type", + "new_run_started", + "reused_existing", + "scope" +]
1 tool update
- Changed
fetch_analysis_result4 fields changed- added
Output schema / properties / result / properties / domains / items / properties / confidenceAdded value: +{ + "type": [ + "null", + "number" + ] +} - added
Output schema / properties / result / properties / domains / items / properties / insider_key_metricsAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "label", + "value" + ], + "type": "object" + }, + "type": [ + "null", + "array" + ] +} - added
Output schema / properties / result / properties / domains / items / properties / news_key_articlesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "conviction": { + "type": "number" + }, + "published_at": { + "type": "string" + }, + "publisher": { + "type": "string" + }, + "rating": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "title", + "publisher", + "url", + "published_at", + "rating", + "conviction" + ], + "type": "object" + }, + "type": [ + "null", + "array" + ] +} - added
Output schema / properties / result / properties / domains / items / properties / weightAdded value: +{ + "type": [ + "null", + "number" + ] +}
1 tool update
- Changed
initiate_analysis1 field changed- changed
Input schema / properties / depth / descriptionPrevious value: -"Analysis depth: standard or plus. Standard uses LENS_AI credit. Plus uses LENS_AI_PLUS credit and may add AI narratives. Default standard."New value: +"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."
5 tool updates
- First observed
fetch_analysis_result - First observed
get_market_summary - First observed
get_portfolio_insights - First observed
initiate_analysis - First observed
ping
Related MCP Connectors
Free stock, ETF & crypto analysis: 10-point score, verdict and key metrics for any ticker.
Screen and score stocks with the Quality Screener engine: filters, custom scores, and history.
Brina Gap valuation, screener and market score for US-listed stocks. SEC data, free, no key.
Technical analysis (RSI, MA, signal score) for 9,400+ global stocks, by ticker or name.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceAnalyze stocks with financial ratios, comparisons, and sector performance data.7 npm25 PyPIMIT
- FlicenseNot gradedqualityBmaintenanceEnables AI clients to analyze stocks and get scored BUY/HOLD/SELL assessments with technical and fundamental data for Indian (NSE/BSE) and US markets.-
- AlicenseAqualityAmaintenanceFree stock, ETF & crypto analysis for AI agents: 10-point score, descriptive verdict and all key metrics for any ticker. Remote MCP server (Streamable HTTP, no auth, nothing to install) at https://www.stoxlyonline.com/api/mcp, plus a stdio server (server.js) for platforms that run MCP servers as a local process. Rate limit: 30 tool calls per IP per hour. Docs: https://www.stoxlyonline.com/mcp42MIT
- AlicenseBqualityBmaintenanceAnalyzes the instrument currently open on your TradingView chart using 311 published quantitative models and free market data, returning a confidence-scored verdict with position sizing. Supports universe scanning and verified Pine Script export.381MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.