Scores for the 600 largest stocks with no account. Sign in for analysis, screening and a watchlist.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
Stock ticker symbol (e.g. AAPL). Exactly one ticker per call.
Exchange code (e.g. NASDAQ). Optional. Resolved automatically if omitted.
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.
The name of the portfolio to add to, as the person names it (exact, case does not matter). Optional.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
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.
| Argument | Type | Description |
|---|---|---|
| ticker* | string | Stock ticker symbol (e.g. AAPL). Exactly one ticker per call. |
| exchange | string | Exchange code (e.g. NASDAQ). Optional. Resolved automatically if omitted. |
| portfolio_id | string | 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_name | string | The name of the portfolio to add to, as the person names it (exact, case does not matter). Optional. |
{
"type": "object",
"required": [
"ticker"
],
"properties": {
"ticker": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9.\\-]{0,19}$",
"description": "Stock ticker symbol (e.g. AAPL). Exactly one ticker per call."
},
"exchange": {
"enum": [
"NYSE",
"NASDAQ",
"AMEX",
"OTC",
"CBOE",
"TSX",
"TSXV",
"CNQ",
"NEO",
"MEX",
"B3",
"SANTIAGO",
"BUE",
"BVC",
"LSE",
"EURONEXT_PARIS",
"EURONEXT_AMSTERDAM",
"EURONEXT_BRUSSELS",
"EURONEXT_LISBON",
"EURONEXT_DUBLIN",
"XETRA",
"SIX",
"BME",
"MILAN",
"OSLO",
"OMX_STOCKHOLM",
"OMX_HELSINKI",
"OMX_COPENHAGEN",
"WSE",
"VIE",
"ATH",
"PRA",
"BUD",
"IST",
"ICE",
"RIS",
"TAL",
"MCX",
"TSE",
"HKEX",
"SHANGHAI",
"SHENZHEN",
"ASX",
"TWSE",
"SGX",
"NSE",
"KRX",
"BSE",
"KOE",
"JKT",
"KLS",
"SET",
"NZE",
"HOSE",
"TWO",
"TADAWUL",
"JSE",
"TLV",
"DFM",
"EGX",
"DOH",
"KUW"
],
"type": "string",
"description": "Exchange code (e.g. NASDAQ). Optional. Resolved automatically if omitted."
},
"portfolio_id": {
"type": "string",
"description": "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_name": {
"type": "string",
"description": "The name of the portfolio to add to, as the person names it (exact, case does not matter). Optional."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| rows* | null | array | The companies the person gave you, one per row, in their order. Never add a row they did not name. |
| confirm* | boolean | false previews the list and adds nothing. true adds the rows of confirmed_indexes from the preview that preview_id names. |
| preview_id | string | The preview_id the preview returned. Required when confirm is true. |
| portfolio_id | string | 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_name |
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 only the rows returned. It does not trade and gives no personal recommendations.
| Argument | Type | Description |
|---|---|---|
| page | integer | 0-based page of results, 0 to 500. Default 0. |
| limit | integer | Number of matches to return (the N in top/bottom N), 1 to 100. Default 10. |
| sort_by | string | One of the 6 StockLens scores, market_cap, volume or ticker. Default composite_score. Popularity ordering is unavailable. |
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. It omits the web reader's factor cards, charts and per-anchor Explain views. 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.
| Argument | Type | Description |
|---|---|---|
| analysis_id* | string | The analysis_id returned by initiate_analysis |
{
"type": "object",
"required": [
"analysis_id"
],
"properties": {
"analysis_id": {
"type": "string",
"description": "The analysis_id returned by initiate_analysis"
}
},
"additionalProperties": false
}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. If the person asks for factor values, peer context or ranked contributors beyond this snapshot, 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 companies for a ranking yourself.
| Argument | Type | Description |
|---|---|---|
| ticker* | string | Stock ticker symbol (e.g. AAPL MSFT TSLA). Exactly one ticker per call. |
| exchange |
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.
| Argument | Type | Description |
|---|---|---|
| portfolio_id | string | 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_name | string | The name of the portfolio to read, as the person names it (exact, case does not matter). Optional. |
{
"type": "object",
"properties": {
"portfolio_id": {
"type": "string",
"description": "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_name": {
"type": "string",
"description": "The name of the portfolio to read, as the person names it (exact, case does not matter). Optional."
}
},
"additionalProperties": false
}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 it for a requested evidence gap beyond the nightly snapshot, such as factor values, peer context or ranked contributors. 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.
| Argument | Type | Description |
|---|---|---|
| depth | string | 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 an Analysis credit (LENS_AI); Plus uses a Plus Analysis credit (LENS_AI_PLUS). Default standard. |
| ticker* | string | Stock ticker symbol (e.g. AAPL). Exactly one ticker per call. |
| exchange | string | Exchange code (e.g. NASDAQ). Optional. Resolved automatically if omitted. |
| time_range | string | 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 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. |
Health check. Returns pong.
No arguments.
{
"type": "object",
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| ticker* | string | Stock ticker symbol (e.g. AAPL). Exactly one ticker per call. |
| exchange | string | 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_id | string | 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_name | string | The name of the portfolio to remove from, as the person names it (exact, case does not matter). Optional. |
{
"type": "object",
"required": [
"ticker"
],
"properties": {
"ticker": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9.\\-]{0,19}$",
"description": "Stock ticker symbol (e.g. AAPL). Exactly one ticker per call."
},
"exchange": {
"enum": [
"NYSE",
"NASDAQ",
"AMEX",
"OTC",
"CBOE",
"TSX",
"TSXV",
"CNQ",
"NEO",
"MEX",
"B3",
"SANTIAGO",
"BUE",
"BVC",
"LSE",
"EURONEXT_PARIS",
"EURONEXT_AMSTERDAM",
"EURONEXT_BRUSSELS",
"EURONEXT_LISBON",
"EURONEXT_DUBLIN",
"XETRA",
"SIX",
"BME",
"MILAN",
"OSLO",
"OMX_STOCKHOLM",
"OMX_HELSINKI",
"OMX_COPENHAGEN",
"WSE",
"VIE",
"ATH",
"PRA",
"BUD",
"IST",
"ICE",
"RIS",
"TAL",
"MCX",
"TSE",
"HKEX",
"SHANGHAI",
"SHENZHEN",
"ASX",
"TWSE",
"SGX",
"NSE",
"KRX",
"BSE",
"KOE",
"JKT",
"KLS",
"SET",
"NZE",
"HOSE",
"TWO",
"TADAWUL",
"JSE",
"TLV",
"DFM",
"EGX",
"DOH",
"KUW"
],
"type": "string",
"description": "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_id": {
"type": "string",
"description": "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_name": {
"type": "string",
"description": "The name of the portfolio to remove from, as the person names it (exact, case does not matter). Optional."
}
},
"additionalProperties": false
}| string |
| The name of the portfolio to add to, as the person names it (exact, case does not matter). Optional. |
| confirmed_indexes | null | array | The index of every row the person approved, from the preview. Required when confirm is true. |
{
"type": "object",
"required": [
"rows",
"confirm"
],
"properties": {
"rows": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "One company as the person wrote it: a ticker (AAPL), a listing (SHOP.TO) or a company name."
},
"exchange": {
"enum": [
"NYSE",
"NASDAQ",
"AMEX",
"OTC",
"CBOE",
"TSX",
"TSXV",
"CNQ",
"NEO",
"MEX",
"B3",
"SANTIAGO",
"BUE",
"BVC",
"LSE",
"EURONEXT_PARIS",
"EURONEXT_AMSTERDAM",
"EURONEXT_BRUSSELS",
"EURONEXT_LISBON",
"EURONEXT_DUBLIN",
"XETRA",
"SIX",
"BME",
"MILAN",
"OSLO",
"OMX_STOCKHOLM",
"OMX_HELSINKI",
"OMX_COPENHAGEN",
"WSE",
"VIE",
"ATH",
"PRA",
"BUD",
"IST",
"ICE",
"RIS",
"TAL",
"MCX",
"TSE",
"HKEX",
"SHANGHAI",
"SHENZHEN",
"ASX",
"TWSE",
"SGX",
"NSE",
"KRX",
"BSE",
"KOE",
"JKT",
"KLS",
"SET",
"NZE",
"HOSE",
"TWO",
"TADAWUL",
"JSE",
"TLV",
"DFM",
"EGX",
"DOH",
"KUW"
],
"type": "string",
"description": "Exchange code (e.g. NASDAQ). Optional."
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1,
"description": "The companies the person gave you, one per row, in their order. Never add a row they did not name."
},
"confirm": {
"type": "boolean",
"description": "false previews the list and adds nothing. true adds the rows of confirmed_indexes from the preview that preview_id names."
},
"preview_id": {
"type": "string",
"description": "The preview_id the preview returned. Required when confirm is true."
},
"portfolio_id": {
"type": "string",
"description": "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_name": {
"type": "string",
"description": "The name of the portfolio to add to, as the person names it (exact, case does not matter). Optional."
},
"confirmed_indexes": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"maximum": 99,
"minimum": 0
},
"maxItems": 100,
"description": "The index of every row the person approved, from the preview. Required when confirm is true.",
"uniqueItems": true
}
},
"additionalProperties": false
}| macro_in | null | array | Restrict to these macro regions. Omitted = no restriction. |
| direction | string | top = highest first, bottom = lowest first. Default top. |
| sector_in | null | array | Restrict to these GICS sectors. Omitted = no restriction. |
| exchange_in | null | array | Restrict to these exchanges. Omitted = no restriction. |
| industry_in | null | array | Restrict to these GICS industries. Omitted = no restriction. |
| search_text | string | Free-text company name/ticker search, up to 80 characters. |
| volume_floor | string | Minimum average trading volume. Omitted = no floor. |
| market_cap_band | string | Restrict to this market-cap band. Omitted = no cap restriction. |
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"maximum": 500,
"minimum": 0,
"description": "0-based page of results, 0 to 500. Default 0."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Number of matches to return (the N in top/bottom N), 1 to 100. Default 10."
},
"sort_by": {
"enum": [
"composite_score",
"fundamental_score",
"technical_score",
"risk_score",
"sentiment_score",
"macro_score",
"ticker",
"market_cap",
"volume"
],
"type": "string",
"description": "One of the 6 StockLens scores, market_cap, volume or ticker. Default composite_score. Popularity ordering is unavailable."
},
"macro_in": {
"type": [
"null",
"array"
],
"items": {
"enum": [
"US",
"CA",
"EU",
"CH",
"GB",
"JP"
],
"type": "string"
},
"description": "Restrict to these macro regions. Omitted = no restriction."
},
"direction": {
"enum": [
"top",
"bottom"
],
"type": "string",
"description": "top = highest first, bottom = lowest first. Default top."
},
"sector_in": {
"type": [
"null",
"array"
],
"items": {
"enum": [
"BASIC_MATERIALS",
"COMMUNICATION_SERVICES",
"CONSUMER_CYCLICAL",
"CONSUMER_DEFENSIVE",
"ENERGY",
"FINANCIAL_SERVICES",
"HEALTHCARE",
"INDUSTRIALS",
"REAL_ESTATE",
"TECHNOLOGY",
"UTILITIES",
"UNKNOWN"
],
"type": "string"
},
"description": "Restrict to these GICS sectors. Omitted = no restriction."
},
"exchange_in": {
"type": [
"null",
"array"
],
"items": {
"enum": [
"NYSE",
"NASDAQ",
"AMEX",
"OTC",
"CBOE",
"TSX",
"TSXV",
"CNQ",
"NEO",
"MEX",
"B3",
"SANTIAGO",
"BUE",
"BVC",
"LSE",
"EURONEXT_PARIS",
"EURONEXT_AMSTERDAM",
"EURONEXT_BRUSSELS",
"EURONEXT_LISBON",
"EURONEXT_DUBLIN",
"XETRA",
"SIX",
"BME",
"MILAN",
"OSLO",
"OMX_STOCKHOLM",
"OMX_HELSINKI",
"OMX_COPENHAGEN",
"WSE",
"VIE",
"ATH",
"PRA",
"BUD",
"IST",
"ICE",
"RIS",
"TAL",
"MCX",
"TSE",
"HKEX",
"SHANGHAI",
"SHENZHEN",
"ASX",
"TWSE",
"SGX",
"NSE",
"KRX",
"BSE",
"KOE",
"JKT",
"KLS",
"SET",
"NZE",
"HOSE",
"TWO",
"TADAWUL",
"JSE",
"TLV",
"DFM",
"EGX",
"DOH",
"KUW"
],
"type": "string"
},
"description": "Restrict to these exchanges. Omitted = no restriction."
},
"industry_in": {
"type": [
"null",
"array"
],
"items": {
"enum": [
"STEEL",
"SILVER",
"OTHER_PRECIOUS_METALS",
"GOLD",
"COPPER",
"ALUMINUM",
"PAPER_LUMBER_FOREST_PRODUCTS",
"INDUSTRIAL_MATERIALS",
"CONSTRUCTION_MATERIALS",
"CHEMICALS_SPECIALTY",
"CHEMICALS",
"AGRICULTURAL_INPUTS",
"TELECOMMUNICATIONS_SERVICES",
"INTERNET_CONTENT_INFORMATION",
"PUBLISHING",
"BROADCASTING",
"ADVERTISING_AGENCIES",
"ENTERTAINMENT",
"TRAVEL_LODGING",
"TRAVEL_SERVICES",
"SPECIALTY_RETAIL",
"LUXURY_GOODS",
"HOME_IMPROVEMENT",
"RESIDENTIAL_CONSTRUCTION",
"DEPARTMENT_STORES",
"PERSONAL_PRODUCTS_SERVICES",
"LEISURE",
"GAMBLING_RESORTS_CASINOS",
"FURNISHINGS_FIXTURES_APPLIANCES",
"RESTAURANTS",
"AUTO_PARTS",
"AUTO_MANUFACTURERS",
"AUTO_RECREATIONAL_VEHICLES",
"AUTO_DEALERSHIPS",
"APPAREL_RETAIL",
"APPAREL_MANUFACTURERS",
"APPAREL_FOOTWEAR_ACCESSORIES",
"PACKAGING_CONTAINERS",
"TOBACCO",
"GROCERY_STORES",
"DISCOUNT_STORES",
"HOUSEHOLD_PERSONAL_PRODUCTS",
"PACKAGED_FOODS",
"FOOD_DISTRIBUTION",
"FOOD_CONFECTIONERS",
"AGRICULTURAL_FARM_PRODUCTS",
"EDUCATION_TRAINING_SERVICES",
"BEVERAGES_WINERIES_DISTILLERIES",
"BEVERAGES_NON_ALCOHOLIC",
"BEVERAGES_ALCOHOLIC",
"URANIUM",
"SOLAR",
"OIL_GAS_REFINING_MARKETING",
"OIL_GAS_MIDSTREAM",
"OIL_GAS_INTEGRATED",
"OIL_GAS_EXPLORATION_PRODUCTION",
"OIL_GAS_EQUIPMENT_SERVICES",
"OIL_GAS_ENERGY",
"OIL_GAS_DRILLING",
"COAL",
"SHELL_COMPANIES",
"INVESTMENT_BANKING_INVESTMENT_SERVICES",
"INSURANCE_SPECIALTY",
"INSURANCE_REINSURANCE",
"INSURANCE_PROPERTY_CASUALTY",
"INSURANCE_LIFE",
"INSURANCE_DIVERSIFIED",
"INSURANCE_BROKERS",
"FINANCIAL_MORTGAGES",
"FINANCIAL_DIVERSIFIED",
"FINANCIAL_DATA_STOCK_EXCHANGES",
"FINANCIAL_CREDIT_SERVICES",
"FINANCIAL_CONGLOMERATES",
"FINANCIAL_CAPITAL_MARKETS",
"BANKS_REGIONAL",
"BANKS_DIVERSIFIED",
"BANKS",
"ASSET_MANAGEMENT",
"ASSET_MANAGEMENT_BONDS",
"ASSET_MANAGEMENT_INCOME",
"ASSET_MANAGEMENT_LEVERAGED",
"ASSET_MANAGEMENT_CRYPTOCURRENCY",
"ASSET_MANAGEMENT_GLOBAL",
"MEDICAL_SPECIALTIES",
"MEDICAL_PHARMACEUTICALS",
"MEDICAL_INSTRUMENTS_SUPPLIES",
"MEDICAL_HEALTHCARE_PLANS",
"MEDICAL_HEALTHCARE_INFORMATION_SERVICES",
"MEDICAL_EQUIPMENT_SERVICES",
"MEDICAL_DISTRIBUTION",
"MEDICAL_DIAGNOSTICS_RESEARCH",
"MEDICAL_DEVICES",
"MEDICAL_CARE_FACILITIES",
"DRUG_MANUFACTURERS_SPECIALTY_GENERIC",
"DRUG_MANUFACTURERS_GENERAL",
"BIOTECHNOLOGY",
"WASTE_MANAGEMENT",
"TRUCKING",
"RAILROADS",
"AEROSPACE_DEFENSE",
"MARINE_SHIPPING",
"INTEGRATED_FREIGHT_LOGISTICS",
"AIRLINES_AIRPORTS_AIR_SERVICES",
"GENERAL_TRANSPORTATION",
"MANUFACTURING_TOOLS_ACCESSORIES",
"MANUFACTURING_TEXTILES",
"MANUFACTURING_MISCELLANEOUS",
"MANUFACTURING_METAL_FABRICATION",
"INDUSTRIAL_DISTRIBUTION",
"INDUSTRIAL_SPECIALTIES",
"INDUSTRIAL_POLLUTION_TREATMENT_CONTROLS",
"ENVIRONMENTAL_SERVICES",
"INDUSTRIAL_MACHINERY",
"INDUSTRIAL_INFRASTRUCTURE_OPERATIONS",
"INDUSTRIAL_CAPITAL_GOODS",
"CONSULTING_SERVICES",
"BUSINESS_EQUIPMENT_SUPPLIES",
"STAFFING_EMPLOYMENT_SERVICES",
"RENTAL_LEASING_SERVICES",
"ENGINEERING_CONSTRUCTION",
"SECURITY_PROTECTION_SERVICES",
"SPECIALTY_BUSINESS_SERVICES",
"CONSTRUCTION",
"CONGLOMERATES",
"ELECTRICAL_EQUIPMENT_PARTS",
"AGRICULTURAL_MACHINERY",
"AGRICULTURAL_COMMODITIES_MILLING",
"REIT_SPECIALTY",
"REIT_RETAIL",
"REIT_RESIDENTIAL",
"REIT_OFFICE",
"REIT_MORTGAGE",
"REIT_INDUSTRIAL",
"REIT_HOTEL_MOTEL",
"REIT_HEALTHCARE_FACILITIES",
"REIT_DIVERSIFIED",
"REAL_ESTATE_SERVICES",
"REAL_ESTATE_DIVERSIFIED",
"REAL_ESTATE_DEVELOPMENT",
"REAL_ESTATE_GENERAL",
"INFORMATION_TECHNOLOGY_SERVICES",
"HARDWARE_EQUIPMENT_PARTS",
"COMPUTER_HARDWARE",
"ELECTRONIC_GAMING_MULTIMEDIA",
"SOFTWARE_SERVICES",
"SOFTWARE_INFRASTRUCTURE",
"SOFTWARE_APPLICATION",
"SEMICONDUCTORS",
"MEDIA_ENTERTAINMENT",
"COMMUNICATION_EQUIPMENT",
"TECHNOLOGY_DISTRIBUTORS",
"CONSUMER_ELECTRONICS",
"RENEWABLE_UTILITIES",
"REGULATED_WATER",
"REGULATED_GAS",
"REGULATED_ELECTRIC",
"INDEPENDENT_POWER_PRODUCERS",
"DIVERSIFIED_UTILITIES",
"GENERAL_UTILITIES",
"UNKNOWN"
],
"type": "string"
},
"description": "Restrict to these GICS industries. Omitted = no restriction."
},
"search_text": {
"type": "string",
"description": "Free-text company name/ticker search, up to 80 characters."
},
"volume_floor": {
"enum": [
"100K",
"500K",
"1M",
"5M"
],
"type": "string",
"description": "Minimum average trading volume. Omitted = no floor."
},
"market_cap_band": {
"enum": [
"MEGA",
"LARGE",
"MID",
"SMALL",
"MICRO"
],
"type": "string",
"description": "Restrict to this market-cap band. Omitted = no cap restriction."
}
},
"additionalProperties": false
}| string |
| Exchange code (e.g. NASDAQ NYSE). Optional. Resolved automatically if omitted. |
{
"type": "object",
"required": [
"ticker"
],
"properties": {
"ticker": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9.\\-]{0,19}$",
"description": "Stock ticker symbol (e.g. AAPL MSFT TSLA). Exactly one ticker per call."
},
"exchange": {
"enum": [
"NYSE",
"NASDAQ",
"AMEX",
"OTC",
"CBOE",
"TSX",
"TSXV",
"CNQ",
"NEO",
"MEX",
"B3",
"SANTIAGO",
"BUE",
"BVC",
"LSE",
"EURONEXT_PARIS",
"EURONEXT_AMSTERDAM",
"EURONEXT_BRUSSELS",
"EURONEXT_LISBON",
"EURONEXT_DUBLIN",
"XETRA",
"SIX",
"BME",
"MILAN",
"OSLO",
"OMX_STOCKHOLM",
"OMX_HELSINKI",
"OMX_COPENHAGEN",
"WSE",
"VIE",
"ATH",
"PRA",
"BUD",
"IST",
"ICE",
"RIS",
"TAL",
"MCX",
"TSE",
"HKEX",
"SHANGHAI",
"SHENZHEN",
"ASX",
"TWSE",
"SGX",
"NSE",
"KRX",
"BSE",
"KOE",
"JKT",
"KLS",
"SET",
"NZE",
"HOSE",
"TWO",
"TADAWUL",
"JSE",
"TLV",
"DFM",
"EGX",
"DOH",
"KUW"
],
"type": "string",
"description": "Exchange code (e.g. NASDAQ NYSE). Optional. Resolved automatically if omitted."
}
},
"additionalProperties": false
}| risk_tolerance | string | 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 facts. low=Defensive, medium=Balanced, high=Growth. Default medium. |
| analysis_emphasis | string | Optional. RISK_EMPHASIS | BALANCED | FUNDAMENTAL_GROWTH_EMPHASIS. Must agree with the emphasis implied by risk_tolerance (low->RISK_EMPHASIS, medium->BALANCED, high->FUNDAMENTAL_GROWTH_EMPHASIS); a mismatch is rejected as a validation error before any credit is consumed. |
| evidence_history_family | string | Optional. SHORT_HISTORY | MEDIUM_HISTORY | LONG_HISTORY. Must agree with the family implied by time_range (short_2_wk->SHORT_HISTORY, medium_1_mo/medium_2_mo->MEDIUM_HISTORY, long_1_yr/long_2_yr->LONG_HISTORY); a mismatch is rejected as a validation error before any credit is consumed. Does not select a representative range on its own. |
{
"type": "object",
"required": [
"ticker"
],
"properties": {
"depth": {
"enum": [
"standard",
"plus"
],
"type": "string",
"description": "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 an Analysis credit (LENS_AI); Plus uses a Plus Analysis credit (LENS_AI_PLUS). Default standard."
},
"ticker": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9.\\-]{0,19}$",
"description": "Stock ticker symbol (e.g. AAPL). Exactly one ticker per call."
},
"exchange": {
"enum": [
"NYSE",
"NASDAQ",
"AMEX",
"OTC",
"CBOE",
"TSX",
"TSXV",
"CNQ",
"NEO",
"MEX",
"B3",
"SANTIAGO",
"BUE",
"BVC",
"LSE",
"EURONEXT_PARIS",
"EURONEXT_AMSTERDAM",
"EURONEXT_BRUSSELS",
"EURONEXT_LISBON",
"EURONEXT_DUBLIN",
"XETRA",
"SIX",
"BME",
"MILAN",
"OSLO",
"OMX_STOCKHOLM",
"OMX_HELSINKI",
"OMX_COPENHAGEN",
"WSE",
"VIE",
"ATH",
"PRA",
"BUD",
"IST",
"ICE",
"RIS",
"TAL",
"MCX",
"TSE",
"HKEX",
"SHANGHAI",
"SHENZHEN",
"ASX",
"TWSE",
"SGX",
"NSE",
"KRX",
"BSE",
"KOE",
"JKT",
"KLS",
"SET",
"NZE",
"HOSE",
"TWO",
"TADAWUL",
"JSE",
"TLV",
"DFM",
"EGX",
"DOH",
"KUW"
],
"type": "string",
"description": "Exchange code (e.g. NASDAQ). Optional. Resolved automatically if omitted."
},
"time_range": {
"enum": [
"short_2_wk",
"medium_1_mo",
"medium_2_mo",
"long_1_yr",
"long_2_yr"
],
"type": "string",
"description": "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 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": {
"enum": [
"low",
"medium",
"high"
],
"type": "string",
"description": "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 facts. low=Defensive, medium=Balanced, high=Growth. Default medium."
},
"analysis_emphasis": {
"enum": [
"RISK_EMPHASIS",
"BALANCED",
"FUNDAMENTAL_GROWTH_EMPHASIS"
],
"type": "string",
"description": "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": {
"enum": [
"SHORT_HISTORY",
"MEDIUM_HISTORY",
"LONG_HISTORY"
],
"type": "string",
"description": "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."
}
},
"additionalProperties": false
}