StockLens
Scores for the 600 largest stocks with no account. Sign in for analysis, screening and a watchlist.
我該用這個嗎
品質與安全性
發現項目(1)
- LOW在 fetch_analysis_result 中
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"stocklens": {
"url": "https://mcp.stocklens.com/mcp"
}
}
}遠端端點
https://mcp.stocklens.com/mcpstreamable-http它能做什麼
工具清單
工具(8)
🟡add_to_watchlist(ticker, exchange)
Add one company to the authenticated user's default StockLens portfolio 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. If the portfolio is already at the limit of the person's current plan, the result says so. After an add the person accepted from a get_market_summary offer, call get_market_summary again to answer their question. Does NOT execute trades, does NOT record a holding or transaction, and does NOT accept more than one ticker per call.
輸入結構描述
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock ticker symbol (e.g. AAPL). Exactly one ticker per call.",
"pattern": "^[A-Za-z0-9][A-Za-z0-9.\\-]{0,19}$"
},
"exchange": {
"type": "string",
"description": "Exchange code (e.g. NASDAQ). Optional. Resolved automatically if omitted.",
"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"
]
}
},
"required": [
"ticker"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"ticker": {
"type": "string"
},
"exchange": {
"type": "string"
},
"company_name": {
"type": [
"null",
"string"
]
},
"total_holdings": {
"type": "integer"
},
"plan_limit": {
"type": [
"null",
"integer"
]
},
"scope": {
"type": "string",
"enum": [
"user_watchlist_update"
]
}
},
"required": [
"ticker",
"exchange",
"total_holdings",
"plan_limit",
"scope"
],
"additionalProperties": false
}🟢discover_stocks(macro_in, exchange_in, sector_in, industry_in, market_cap_band, ...)
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, popularity or ticker, and return the top or bottom N. This is the only StockLens tool that ranks or compares companies: use it for any top N, best, worst, highest, lowest or filtered request, and never build such a list from get_market_summary or general knowledge. 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. 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. Report only the rows returned. It does not trade and gives no personal recommendations.
輸入結構描述
{
"type": "object",
"properties": {
"macro_in": {
"type": [
"null",
"array"
],
"items": {
"type": "string",
"enum": [
"US",
"CA",
"EU",
"CH",
"GB",
"JP"
]
},
"description": "Restrict to these macro regions. Omitted = no restriction."
},
"exchange_in": {
"type": [
"null",
"array"
],
"items": {
"type": "string",
"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"
]
},
"description": "Restrict to these exchanges. Omitted = no restriction."
},
"sector_in": {
"type": [
"null",
"array"
],
"items": {
"type": "string",
"enum": [
"BASIC_MATERIALS",
"COMMUNICATION_SERVICES",
"CONSUMER_CYCLICAL",
"CONSUMER_DEFENSIVE",
"ENERGY",
"FINANCIAL_SERVICES",
"HEALTHCARE",
"INDUSTRIALS",
"REAL_ESTATE",
"TECHNOLOGY",
"UTILITIES",
"UNKNOWN"
]
},
"description": "Restrict to these GICS sectors. Omitted = no restriction."
},
"industry_in": {
"type": [
"null",
"array"
],
"items": {
"type": "string",
"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"
]
},
"description": "Restrict to these GICS industries. Omitted = no restriction."
},
"market_cap_band": {
"type": "string",
"description": "Restrict to this market-cap band. Omitted = no cap restriction.",
"enum": [
"MEGA",
"LARGE",
"MID",
"SMALL",
"MICRO"
]
},
"volume_floor": {
"type": "string",
"description": "Minimum average trading volume. Omitted = no floor.",
"enum": [
"100K",
"500K",
"1M",
"5M"
]
},
"sort_by": {
"type": "string",
"description": "One of the 6 StockLens scores or a non-score signal to sort by. Default composite_score.",
"enum": [
"composite_score",
"fundamental_score",
"technical_score",
"risk_score",
"sentiment_score",
"macro_score",
"analysis_volume",
"user_volume",
"ticker",
"market_cap",
"volume"
]
},
"direction": {
"type": "string",
"description": "top = highest first, bottom = lowest first. Default top.",
"enum": [
"top",
"bottom"
]
},
"limit": {
"type": "integer",
"description": "Number of matches to return (the N in top/bottom N), 1 to 100. Default 10.",
"minimum": 1,
"maximum": 100
},
"page": {
"type": "integer",
"description": "0-based page of results, 0 to 500. Default 0.",
"minimum": 0,
"maximum": 500
},
"search_text": {
"type": "string",
"description": "Free-text company name/ticker search, up to 80 characters."
}
},
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ranked",
"browse_substituted",
"locked"
]
},
"rows": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"rank": {
"type": "integer"
},
"ticker": {
"type": "string"
},
"exchange": {
"type": "string"
},
"company_name": {
"type": [
"null",
"string"
]
},
"sector": {
"type": [
"null",
"string"
]
},
"industry": {
"type": [
"null",
"string"
]
},
"macro_code": {
"type": [
"null",
"string"
],
"description": "Listing geography of the exchange (US, CA, EU, CH, GB, JP, or GLOBAL when unmapped), the same value macro_in filters on."
},
"market_cap": {
"type": [
"null",
"integer"
]
},
"volume": {
"type": [
"null",
"integer"
]
},
"composite_score": {
"type": [
"null",
"number"
]
},
"fundamental_score": {
"type": [
"null",
"number"
]
},
"technical_score": {
"type": [
"null",
"number"
]
},
"risk_score": {
"type": [
"null",
"number"
]
},
"sentiment_score": {
"type": [
"null",
"number"
]
},
"macro_score": {
"type": [
"null",
"number"
]
},
"rating": {
"type": [
"null",
"string"
]
},
"above_universe_median": {
"type": [
"null",
"boolean"
]
}
},
"required": [
"rank",
"ticker",
"exchange"
],
"additionalProperties": false
}
},
"scores_locked": {
"type": "boolean"
},
"hard_locked": {
"type": "boolean"
},
"access_tier": {
"type": "string",
"enum": [
"FREE",
"PRO",
"MAX"
]
},
"message": {
"type": [
"null",
"string"
]
},
"reach_capped_at": {
"type": [
"null",
"integer"
]
},
"rows_returned": {
"type": "integer"
},
"total_matches": {
"type": [
"null",
"integer"
]
},
"effective_sort": {
"type": "string"
},
"sort_substituted": {
"type": "boolean"
},
"effective_direction": {
"type": "string"
},
"as_of_date": {
"type": [
"null",
"string"
]
},
"config_context": {
"type": "object",
"properties": {
"bucket_type": {
"type": "string"
},
"term": {
"type": "string"
}
},
"required": [
"bucket_type",
"term"
],
"additionalProperties": false
},
"data_source": {
"type": "string"
},
"quota_remaining_today": {
"type": [
"null",
"integer"
]
},
"next_step": {
"type": [
"null",
"object"
],
"properties": {
"kind": {
"type": "string",
"enum": [
"call_tool",
"ask_user",
"human_action"
]
},
"tool": {
"type": "string"
},
"arguments": {
"type": [
"null",
"object"
],
"properties": {
"ticker": {
"type": "string"
}
},
"required": [
"ticker"
],
"additionalProperties": false
},
"options": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
}
},
"description": {
"type": "string"
}
},
"required": [
"kind"
],
"additionalProperties": false
},
"scope": {
"type": "string",
"enum": [
"screened_universe"
]
}
},
"required": [
"status",
"rows",
"scores_locked",
"hard_locked",
"access_tier",
"rows_returned",
"effective_sort",
"effective_direction",
"config_context",
"data_source",
"scope"
],
"additionalProperties": false
}🟢fetch_analysis_result(analysis_id)
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, 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 carries 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), key strengths and challenges, and for a Plus Analysis a written narrative. 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.
輸入結構描述
{
"type": "object",
"properties": {
"analysis_id": {
"type": "string",
"description": "The analysis_id returned by initiate_analysis"
}
},
"required": [
"analysis_id"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"analysis_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"in_progress",
"complete",
"failed"
]
},
"progress_pct": {
"type": [
"null",
"integer"
]
},
"retry_after_seconds": {
"type": [
"null",
"integer"
]
},
"result": {
"type": [
"null",
"object"
],
"properties": {
"symbol": {
"type": "string"
},
"exchange": {
"type": "string"
},
"analysis_source_exchange": {
"type": [
"null",
"string"
]
},
"canonical_company_key": {
"type": [
"null",
"string"
]
},
"company_name": {
"type": "string"
},
"risk_tolerance": {
"type": "string"
},
"credit_type": {
"type": "string"
},
"current_price": {
"type": [
"null",
"number"
]
},
"price_change": {
"type": [
"null",
"number"
]
},
"price_change_percent": {
"type": [
"null",
"number"
]
},
"time_range_display": {
"type": "string"
},
"risk_tolerance_display": {
"type": "string"
},
"analysis_date": {
"type": "string"
},
"exchange_timezone": {
"type": "string"
},
"display_composite_score": {
"type": [
"null",
"integer"
]
},
"display_rating": {
"type": [
"null",
"string"
]
},
"evidence": {
"type": "string"
},
"domains": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"domain": {
"type": "string"
},
"score": {
"type": "integer"
},
"grade": {
"type": "string"
},
"contribution": {
"type": "string"
},
"analysis": {
"type": "string"
},
"insider_key_metrics": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"label",
"value"
],
"additionalProperties": false
}
},
"news_key_articles": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"publisher": {
"type": "string"
},
"url": {
"type": "string"
},
"published_at": {
"type": "string"
},
"tone": {
"type": "string"
},
"conviction": {
"type": "number"
}
},
"required": [
"title",
"publisher",
"url",
"published_at",
"tone",
"conviction"
],
"additionalProperties": false
}
}
},
"required": [
"domain",
"score",
"grade",
"analysis"
],
"additionalProperties": false
}
},
"synthesis_report": {
"type": [
"null",
"string"
]
},
"key_strengths": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"domain": {
"type": [
"null",
"string"
]
},
"point": {
"type": "string"
},
"impact": {
"type": "string"
}
},
"required": [
"point",
"impact"
],
"additionalProperties": false
}
},
"key_challenges": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"domain": {
"type": [
"null",
"string"
]
},
"point": {
"type": "string"
},
"impact": {
"type": "string"
}
},
"required": [
"point",
"impact"
],
"additionalProperties": false
}
},
"evidence_history_family": {
"type": [
"null",
"string"
]
},
"analysis_emphasis": {
"type": [
"null",
"string"
]
},
"requested_time_range": {
"type": [
"null",
"string"
]
},
"capacity_assessed": {
"type": [
"null",
"boolean"
]
},
"predictive_status": {
"type": [
"null",
"string"
]
},
"filing_facts_note": {
"type": "string"
},
"filing_facts": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"fact_type": {
"type": "string"
},
"reading": {
"type": "string"
},
"form_type": {
"type": "string"
},
"filing_date": {
"type": "string"
},
"quote": {
"type": "string"
}
},
"required": [
"fact_type",
"reading",
"form_type",
"filing_date",
"quote"
],
"additionalProperties": false
}
}
},
"required": [
"symbol",
"exchange",
"company_name",
"risk_tolerance",
"credit_type",
"time_range_display",
"risk_tolerance_display",
"analysis_date",
"exchange_timezone",
"domains"
],
"additionalProperties": false
},
"error_message": {
"type": [
"null",
"string"
]
},
"scope": {
"type": "string",
"enum": [
"single_analysis_result"
]
}
},
"required": [
"analysis_id",
"status",
"scope"
],
"additionalProperties": false
}🟢get_market_summary(ticker, exchange)
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. One ticker per call. It does not rank, sort or list companies: for any top, best, worst or filtered request call discover_stocks, and never build a ranking from repeated calls.
輸入結構描述
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock ticker symbol (e.g. AAPL MSFT TSLA). Exactly one ticker per call.",
"pattern": "^[A-Za-z0-9][A-Za-z0-9.\\-]{0,19}$"
},
"exchange": {
"type": "string",
"description": "Exchange code (e.g. NASDAQ NYSE). Optional. Resolved automatically if omitted.",
"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"
]
}
},
"required": [
"ticker"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"scored",
"not_in_surface",
"not_covered",
"ambiguous",
"not_found"
]
},
"ticker": {
"type": "string"
},
"exchange": {
"type": "string"
},
"company_name": {
"type": "string"
},
"sector": {
"type": "string"
},
"industry": {
"type": "string"
},
"composite_score": {
"type": [
"null",
"number"
]
},
"rating": {
"type": [
"null",
"string"
]
},
"domain_scores": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"domain": {
"type": "string"
},
"score": {
"type": "number"
},
"grade": {
"type": "string"
}
},
"required": [
"domain",
"score",
"grade"
],
"additionalProperties": false
}
},
"key_drivers": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"domain": {
"type": [
"null",
"string"
]
},
"kind": {
"type": "string",
"enum": [
"SUPPORTIVE",
"HEADWIND",
"MIXED",
"COVERAGE_GAP",
"NEUTRAL_NOT_MATERIAL"
]
},
"label": {
"type": "string"
},
"context": {
"type": [
"null",
"string"
]
},
"metric": {
"type": [
"null",
"string"
]
}
},
"required": [
"kind",
"label"
],
"additionalProperties": false
}
},
"lens": {
"type": [
"null",
"object"
],
"properties": {
"label": {
"type": "string"
}
},
"required": [
"label"
],
"additionalProperties": false
},
"domain_coverage": {
"type": [
"null",
"object"
],
"properties": {
"not_scored": {
"type": [
"null",
"array"
],
"items": {
"type": "string",
"enum": [
"Fundamental",
"Technical",
"Risk",
"Sentiment",
"Macro"
]
}
},
"sentiment_sources_note": {
"type": "string",
"description": "The Sentiment evidence this reading did not use and why, as one sentence to relay as given, for example: Evidence not read in this analysis: earnings calls (none found recently)."
}
},
"additionalProperties": false
},
"analysis_date": {
"type": "string"
},
"freshness": {
"type": [
"null",
"object"
],
"properties": {
"state": {
"type": "string",
"enum": [
"current",
"aging",
"stale"
]
},
"last_scored": {
"type": "string"
},
"age_days": {
"type": "integer"
},
"requested_ticker": {
"type": "string"
}
},
"required": [
"state",
"last_scored",
"age_days"
],
"additionalProperties": false
},
"config_context": {
"type": [
"null",
"object"
],
"properties": {
"time_range": {
"type": "string"
},
"risk_tolerance": {
"type": "string"
}
},
"required": [
"time_range",
"risk_tolerance"
],
"additionalProperties": false
},
"message": {
"type": "string"
},
"candidates": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"ticker": {
"type": "string"
},
"exchange": {
"type": "string"
},
"company_name": {
"type": "string"
}
},
"required": [
"ticker",
"exchange",
"company_name"
],
"additionalProperties": false
}
},
"next_step": {
"type": [
"null",
"object"
],
"properties": {
"kind": {
"type": "string",
"enum": [
"call_tool",
"ask_user",
"human_action"
]
},
"tool": {
"type": "string"
},
"arguments": {
"type": [
"null",
"object"
],
"properties": {
"ticker": {
"type": "string"
}
},
"required": [
"ticker"
],
"additionalProperties": false
},
"options": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
}
},
"description": {
"type": "string"
}
},
"required": [
"kind"
],
"additionalProperties": false
},
"watchlist_offered": {
"type": "boolean"
},
"scope": {
"type": "string",
"enum": [
"single_ticker"
]
}
},
"required": [
"status",
"ticker",
"scope"
],
"additionalProperties": false
}🟢get_portfolio_insights
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 capacity of the person's current plan; tier_limited says whether it was cut short. 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.
輸入結構描述
{
"type": "object",
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"watchlist": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"ticker": {
"type": "string"
},
"company_name": {
"type": "string"
},
"composite_score": {
"type": [
"null",
"number"
]
},
"composite_grade": {
"type": [
"null",
"string"
]
},
"exchange": {
"type": "string"
},
"analysis_date": {
"type": [
"null",
"string"
]
}
},
"required": [
"ticker",
"company_name",
"exchange"
],
"additionalProperties": false
}
},
"total_holdings": {
"type": "integer"
},
"tier_limited": {
"type": "boolean"
},
"aggregate_signal": {
"type": [
"null",
"string"
]
},
"scope": {
"type": "string",
"enum": [
"user_watchlist"
]
}
},
"required": [
"watchlist",
"total_holdings",
"tier_limited",
"scope"
],
"additionalProperties": false
}🔴initiate_analysis(ticker, exchange, time_range, risk_tolerance, evidence_history_family, ...)
Start a full StockLens analysis of one company, only when the person asks for one. A new run may use one Analysis credit, or one Plus Analysis credit when depth is plus; Plus adds a written narrative and the result says if the person's plan does not include it. 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.
輸入結構描述
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock ticker symbol (e.g. AAPL). Exactly one ticker per call.",
"pattern": "^[A-Za-z0-9][A-Za-z0-9.\\-]{0,19}$"
},
"exchange": {
"type": "string",
"description": "Exchange code (e.g. NASDAQ). Optional. Resolved automatically if omitted.",
"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"
]
},
"time_range": {
"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.",
"enum": [
"short_2_wk",
"medium_1_mo",
"medium_2_mo",
"long_1_yr",
"long_2_yr"
]
},
"risk_tolerance": {
"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.",
"enum": [
"low",
"medium",
"high"
]
},
"evidence_history_family": {
"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.",
"enum": [
"SHORT_HISTORY",
"MEDIUM_HISTORY",
"LONG_HISTORY"
]
},
"analysis_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.",
"enum": [
"RISK_EMPHASIS",
"BALANCED",
"FUNDAMENTAL_GROWTH_EMPHASIS"
]
},
"depth": {
"type": "string",
"description": "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.",
"enum": [
"standard",
"plus"
]
}
},
"required": [
"ticker"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"analysis_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"pending",
"in_progress",
"complete",
"failed"
]
},
"estimated_seconds": {
"type": "integer"
},
"depth": {
"type": "string",
"enum": [
"standard",
"plus"
]
},
"credit_type": {
"type": "string",
"enum": [
"LENS_AI",
"LENS_AI_PLUS"
]
},
"new_run_started": {
"type": "boolean"
},
"reused_existing": {
"type": "boolean"
},
"scope": {
"type": "string",
"enum": [
"single_analysis_receipt"
]
}
},
"required": [
"analysis_id",
"status",
"estimated_seconds",
"depth",
"credit_type",
"new_run_started",
"reused_existing",
"scope"
],
"additionalProperties": false
}🟢ping
Health check. Returns pong.
輸入結構描述
{
"type": "object",
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Connectivity status: \"ok\" when the MCP server is reachable"
}
},
"required": [
"status"
],
"additionalProperties": false
}🔴remove_from_watchlist(ticker, exchange)
Remove one company from the authenticated user's default StockLens portfolio. Does NOT execute trades and does NOT delete a recorded holding or its transactions; a holding with recorded transactions cannot be removed through this tool. Does NOT accept more than one ticker per call.
輸入結構描述
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock ticker symbol (e.g. AAPL). Exactly one ticker per call.",
"pattern": "^[A-Za-z0-9][A-Za-z0-9.\\-]{0,19}$"
},
"exchange": {
"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.",
"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"
]
}
},
"required": [
"ticker"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"ticker": {
"type": "string"
},
"exchange": {
"type": "string"
},
"removed": {
"type": "boolean"
},
"total_holdings": {
"type": "integer"
},
"scope": {
"type": "string",
"enum": [
"user_watchlist_update"
]
}
},
"required": [
"ticker",
"exchange",
"removed",
"total_holdings",
"scope"
],
"additionalProperties": false
}社群
證據