answer_reporting_standards
ChatGPTAnswer a reporting-framework / financial-statement-preparation question for a controller, auditor or CFO — with paragraph-level standard citations AND real-world filing examples of how companies implement it. Pro plan, Pro trial or Team (spends Clarifo's LLM budget). The filing evidence is sourced precisely: the question is mapped to the indexed `ifrs_tags / topic_tags vocabulary (e.g. "lease accounting" → IFRS 16 / leases) and the search pulls the pages actually tagged with that standard, falling back to semantic search when no tags match (e.g. US filings). It is further enriched with the company's curated accounting-policy text from its analytical profile (the policy-level "how they implement it"), returned under accounting_context. **Interactive example (rendering instruction):** When the detected standard has a curated teaching example (e.g. IFRS 15 cost-to-cost construction simulator, IFRS 16 lease liability model), the response includes an interactive_example object. This is a **rendering instruction, not supplementary data** — present it to the user as a step-by-step walkthrough rather than consuming it silently as background context: the example's presets side by side and five_steps / scenarios as structured tables with the key numbers. Do not build it into an app-style widget (no sliders, toggles or simulators); see the server's "Charts" guidance. Args: question: The reporting question. Examples: "How is a defined-benefit pension liability measured and disclosed under IAS 19?", "What's the required structure of a condensed interim statement under IAS 34?", "What does Reg S-X require in the balance sheet of a 10-K?". company: Optional company (name or ticker) to source the implementation examples from. Omit to draw examples across the corpus (good for "how do companies generally disclose…"). framework: "ifrs" (default), "us_gaap", "local_gaap" (FI/SE/DK), or "multi" for a cross-framework answer. question_kind: "standard_rule" (default — the rule itself), "structure" (where it goes in the statements), "preparation" (how to prepare/draft it), "sec_filing" (10-K/10-Q form mechanics), or "comparison" (framework-vs-framework). locale: "en" (default), "fi" or "sv". include_examples: When true (default), ground the answer in real filing disclosures and return them under implementation_examples. jurisdiction_hint: Optional jurisdiction nudge (e.g. "Finland", "Sweden", "US domestic filer"). Returns: { "answer": "...", the controller/auditor answer "framework": "ifrs", "question_kind": "standard_rule", "standard_references": [ paragraph-level citations {"standard": "IFRS 16", "paragraph": "47", ...} ], "contextual_links": [ {"title": ..., "url": ..., "source": ...} ], "implementation_examples": [ how companies actually disclose it {"company": ..., "year": ..., "page_id": ..., "excerpt": "..."} ], "accounting_context": [ curated per-company policy text {"company": ..., "tags": [...], "text": "..."} ], "sourcing": "tag_filtered", or "semantic" "detected_standards": ["IFRS 16"], tags mapped from the question "citations": [...], [page_id] filing anchors "coverage": {...}, "interactive_example": { when a teaching example matches "standard": "IFRS 15", "topic": "construction_over_time", "defaults": {...}, "ranges": {...}, "presets": [...], "five_steps": [...], "company_evidence": [...], filing-sourced, each with source_page_ids; absent when no gated filing text backs it "evidence_source": "weaviate" or "none" } } On failure: {"error": "..."}`.
company_events
ChatGPTSEC 8-K corporate events — single company or cross-company. Two scopes in one tool: - company (default): 8-K events for one US company, newest first. Pass `summarise=True for per-event-type counts and acquisition aggregates instead of individual events. Use for "any M&A at Microsoft last year?", "summary of NVIDIA 8-K activity". - **cross_company**: cross-company 8-K firehose filtered by event type, index (S&P 500), industry, or explicit company list. Each event carries its issuer info. Use for "every executive departure in the S&P 500 this week", "healthcare M&A last 30 days". Args: scope: "company" (default) or "cross_company". company: Company name, ticker, or CIK. Required for scope="company". since_date: YYYY-MM-DD lower bound (default: last 365 days for company scope, last 30 days for cross_company). until_date: YYYY-MM-DD upper bound. event_types: Filter to specific derived categories. Valid: acquisition, disposition, executive_change, director_change, material_contract, default, bankruptcy, covenant_breach, amendment, auditor_change, earnings, guidance_update, other. item_numbers: Filter by raw 8-K item numbers, e.g. ["2.01"]. limit: Cap on returned rows (max 500). Ignored in summarise mode. summarise: When True (company scope only), return per-type counts and acquisition aggregates instead of individual events. index: Cross-company scope only. Currently "sp500". industry: Cross-company scope only. ILIKE substring match on USCompanies.industry. companies: Cross-company scope only. Explicit issuer list (names or tickers). Returns: **Company scope (list):** {company_name, ticker, cik, since_date, events[]}. **Company scope (summarise):** {company_name, ticker, cik, summary: {event_count, by_event_type, acquisitions}}. **Cross-company scope:** {since_date, filters, events[]}` with per-event issuer info.
compare_companies
ChatGPTCompare two or more companies side-by-side on key financial metrics. Fetches financials for each company and returns a structured comparison table. Can mix Nordic and US companies — e.g. "Neste vs ExxonMobil". Rendering: present the comparison as a formatted table with companies as columns and metrics as rows. With 3+ annual periods, a peer trend line (one line per company) may be added — draw it yourself per the server's "Charts" guidance (static chart, Clarifo theme, source line: primary filing + Clarifo; no widgets). Quarterly mode is a single-period comparison and has nothing to chart. In ChatGPT (with output="python") or a host that cannot draw: `render_chart(source_tool="compare_companies", source_args=...) with the same arguments. Args: companies: List of company names or tickers to compare (2–5 companies). Names and tickers are both accepted and resolved through the shared MCP entity resolver, so ["NVIDIA", "AMD", "Intel"] and ["NVDA", "AMD", "INTC"] resolve to the same three companies. Examples: ["Neste", "ExxonMobil"], ["Nokia", "Ericsson"], ["Apple", "MSFT", "GOOGL"] years: Number of recent years to include in the comparison (default 3). Ignored when period_type="quarterly" — quarterly mode returns a single period per company. period_type: "annual" (default) or "quarterly". Quarterly mode pins the same quarter across companies and adds deterministically computed margins (gross / operating / ebitda / net / fcf) to the response. year: Pin quarterly mode to a specific fiscal year (e.g. 2026). Omit to let each company resolve its own latest quarter. **This is the company's own fiscal year**, not the calendar year. Apple's fiscal year 2026 runs October 2025 - September 2026; Microsoft's runs July 2025 - June 2026. quarter: Pin quarterly mode to a specific fiscal quarter (1-4). Forces period_type="quarterly" when set with the default period_type. **This is the company's own fiscal quarter number, not the calendar quarter.** For companies with non-standard fiscal years (Apple FY ends September, Microsoft FY ends June, NVIDIA FY ends January, Walmart FY ends January), fiscal Q2 maps to a different calendar period than for calendar-year companies. When comparing companies with different fiscal calendars, check each company's period_end in the response to verify which calendar period the data actually covers. A fiscal_calendar_warning is added to the response when the requested companies' period_end dates diverge by more than 45 days. Returns: { "companies": [ { "company_name": "Neste Oyj", "display_name": "Neste Oyj", "market": "nordic", "currency": "EUR", "latest_year": { "year": "2025", "revenue": ..., "gross_profit": ..., "gross_margin": 8.3, "operating_income": ..., "operating_margin": 3.7, "ebitda": ..., "ebitda_margin": 5.2, "net_income": ..., "net_margin": 2.1, "eps_diluted": ..., "total_assets": ..., "total_equity": ..., "roe": 6.4, "roa": 2.8, "operating_cash_flow": ..., "free_cash_flow": ..., "capital_expenditures": ..., "fcf_margin": 1.5 }, "latest_quarter": { "period": {"label": "Q1 2026", "year": 2026, "quarter": 1}, "metrics": {"revenue": ..., "ebitda": ..., ...} }, "by_year": { "2025": {...}, "2024": {...}, ... } }, ... ], "kpis": ["revenue", "gross_profit", "gross_margin", ...], "not_found": [] } latest_year includes deterministically computed margins (gross, operating, EBITDA, net, FCF) and return ratios (ROE, ROA). latest_quarter is auto-attached for each company using the most recent available quarter — no separate call needed. latest_price is auto-attached per company (annual and quarterly mode alike) whenever a stored close exists: {ticker, price, currency, trading_date, source, freshness_status, is_usable_for_live_quote, age_trading_days}. It is the most recent close from Clarifo's local price stores (delayed, typically T-1) — honest freshness metadata included, never a live intraday tick. When the user explicitly wants a live/current quote, follow up with get_stock_price per company (optionally require_live=true`), which can fetch a fr…
compare_segments
ChatGPTCompare segment data for 2–5 US companies on one metric and period window. companies: US company names or tickers. metric: revenue, operating_income, gross_profit, assets or depreciation_amortization. axis: business, product, geographic, consolidation or a raw XBRL axis. periods: most-recent rows per segment; year pins the fiscal year. member_filter: case-insensitive label/member substrings, e.g. ["Data Center"]. Returns companies, not_found, coverage_notes and filing evidence sources. Reads stored SEC XBRL data only; segment definitions may differ between issuers.
dd_quickscan
ChatGPTRun a pre-due-diligence evidence pack for a single target company. Fans out three branches in parallel and merges them into one structured payload. No LLM inference happens on Clarifo's side — you (the calling model) do the reasoning over the evidence returned. - Financial trends: revenue, EBIT, operating margin and operating cash flow over the last `years years (default 4), pinned to the target as a single-company series, plus a derived **cash conversion** series (operating cash flow / EBIT, in per cent). Cash conversion is the most diagnostic single number in a pre-DD screen — growth and margin can both look healthy while cash fails to follow earnings. IMPORTANT: every series is a **reported** IFRS/US-GAAP figure (see trend_basis). Companies carrying restructuring, acquisition amortisation or impairments inside the operating line publish an "adjusted"/"comparable" EBIT that can differ by a factor of two or more. Do not compare these series against a headline comparable figure without the bridge — the earnings_quality evidence bucket retrieves the reconciliation text so you can build it. - **Materiality evidence**: recency-bounded (recency_years), topic_tags-filtered retrieval across five buckets — audit report / KAM / going concern, governance changes, risks and covenants, outlook and subsequent events, and earnings quality (the reported → comparable bridge). Returns materiality_evidence with the chunks *and* Clarifo's rubric (triggers, quantified severity cut-offs, closed topic taxonomy). Apply that rubric rather than inventing your own, and cite each chunk's source_id. - **CSRD disclosure coverage** (EU only, skipped on market="US"): per-ESRS-disclosure topic_tags-driven retrieval with chunk-volume calibration (1 chunk → 25 %, 7+ → 85 %) plus keyword reinforcement. Returns overall + per-pillar (E/S/G) coverage, ranked gaps and priority actions. Note this measures **how much is disclosed**, not the quality of the disclosure — treat it as a coverage indicator, not a compliance verdict. The tool does NOT replace bespoke DD — it only looks at public filings and Weaviate-indexed content. Args: company: Target company name or ticker. Examples: "Konecranes", "KCR.HE", "Caterpillar", "CAT". Fuzzy matching supported via the skill's peer-resolution pass. market: "auto" (default), "EU" or "US". "US" skips the CSRD branch entirely (no SEC Climate Disclosure Rule equivalent yet). "auto" lets the financial trend skill detect from the target name. language: Language for labels, rubric and gap descriptions. "en" (default) or "fi". years: Trend window in years (2–10, default 4). include_csrd: Toggle the CSRD branch on / off. market="US" overrides this to False regardless. include_materiality: Toggle the materiality branch. recency_years: Restrict filing retrieval to the last N fiscal years (default 2 — the latest annual report plus the current year's interims). Pass 0 to search all indexed history. If nothing is found inside the window the skill retries unbounded once and says so in coverage. materiality_search_limit: Max filing chunks to return (4–60, default 24). document_types: Optional retrieval filter, e.g. ["annual_report", "interim_report"]. Returns: {company, market, language, years, financial_trends, trend_basis, materiality_evidence, csrd_summary, sources, coverage, audit}. financial_trends — one entry per metric with status (ok / no_data / error), the period series, latest / prior values, YoY change and basis. Includes the derived cash_conversion entry. trend_basis — {basis, note}: which accounting basis the series are on, and why that matters. materiality_evidence — {mode, instructions, rubric, chunk_count, chunks[]}. Each chunk carries source_id, title, bucket, document_type, year and content. Apply rubric to chunks. csrd_summary — overall %, E/S/G pillar coverage, recommended framework, scope wave, top-5 key_gaps and priority_actions. None` when the…
detect_inflection_points
ChatGPTDetect statistically significant break points in a US company's financial metric history using a deterministic z-score method. No LLM arithmetic — every value is drawn from SEC EDGAR filings. In annual mode each series point and inflection carries a `source link to the owning 10-K/20-F and the response includes a deduped top-level sources[] + source_policy (render citation_markdown, never the raw page_id); quarterly mode reads standalone quarters from validated snapshots, which carry no per-quarter filing anchor. The skill computes year-over-year (annual) or year-over-quarter (quarterly, same calendar quarter vs. prior year to remove seasonality bias) growth changes, then flags every period where the absolute z-score exceeds z_threshold relative to the company's own baseline volatility. Use this when the user asks where the *biggest inflections* or *turning points* occurred in a company's revenue, profitability, or margin history — not just what the most recent numbers are. Args: company: Company name, ticker, or CIK (US only in v0.2). metrics: Metrics to scan. Supported values: Raw metrics (YoY % change): "revenue", "ebit", "ebitda", "net_income". Derived margins (YoY percentage-point change): "operating_margin", "ebitda_margin", "net_margin". Defaults to ["revenue", "ebit", "operating_margin"]. frequency: "annual" (default) — year-over-year on 10-K data. "quarterly" — year-over-quarter (Q1 2025 vs Q1 2024, etc.) on 10-Q data. Requires the company to have at least min_history same-quarter pairs. z_threshold: Standard deviations above/below the mean growth rate to flag as an inflection. Default 2.0 (captures roughly the most extreme 5% of annual moves). Lower to catch more moderate shifts; raise to restrict to only major breaks. top_k: Maximum inflections to return per metric (1–25, default 5). Ranked by absolute z-score; the global cross-metric ranking is available in the inflections list which is sorted the same way. min_history: Minimum number of YoY / YoQ growth points required before detection runs on a metric. Metrics below this threshold are skipped and noted in quality_notes. Default 5. market: "us" only in v0.2. Nordic support is planned for v0.3. Returns: {company, market, frequency, metrics, series, inflections, coverage, narrative_queries, quality_notes, params}. inflections — list of break points sorted by absolute z-score: {metric, metric_label, year, quarter (quarterly only), value, prior_value, growth, z_score, direction, severity}. narrative_queries — one ready-to-run query per inflection for search_filing_content: {metric, year, quarter, query, year_range}. quality_notes — list of warnings for metrics with insufficient data. On error: {"error": "..."}`.
discover_companies
ChatGPTDiscover companies by qualitative business profile (semantic search). Use this when the user asks "which companies do X" or "find me companies that look like Y" — questions where the matching criterion is the business description, not a numerical metric. The skill searches the `CompanyProfile Weaviate collection (LLM-generated analytical profiles for Nordic FI/SE/DK and US companies) using hybrid semantic + keyword search, returning a curated company list ranked by fit. For **metric-based** ranking (revenue growth, profitability, size), call screen_companies instead. For **document passages** matching a phrase, call search_filing_content. This tool is the qualitative counterpart that returns curated company candidates without diving into raw filing chunks. The response is purely qualitative — no revenue, growth or margin figures are attached. When the user's question also needs figures, follow up with get_company_financials, get_financial_statement, screen_companies or get_company_snapshot on the returned company names. Args: query: Natural-language description of what the user is looking for. Examples: "US wind energy operators with offshore exposure", "Nordic SaaS companies serving the financial sector", "Companies similar to Vestas Wind Systems". limit: How many companies to return. Defaults to 10, capped at 50. locale: Profile locale to search — "en" (default) or "fi". country: Optional ISO-2 country code filter ("FI", "SE", "DK", "US", …). Joins to public.companies for the filter. market: Optional coarser scope: "nordic" ≡ FI/SE/DK/NO/IS or "us" ≡ US. Ignored if country is set. tag_filters: Optional per-section tag intersections against the profile's tag arrays. Supported sections: products_services, customers, geography, risks, accounting. Example: {"geography": ["United States"], "products_services": ["wind"]}. hybrid_alpha: 0.0 = pure keyword (BM25), 1.0 = pure vector. Defaults to 1.0. Profiles are narratively dense, so the semantic index answers this question well on its own, and any value below 1.0 additionally runs Weaviate's BM25 scorer — a rate-limited path (see backend/search/core/retrieval.py) that may be refused while the keyword search page is busy. size_weight: 0.0–1.0 tie-break that lifts larger companies (by latest revenue) within the semantically-eligible pool, so big, well-known issuers are not buried below small caps that merely echo the query wording. Defaults to 0.3 (semantic stays primary). Set 0.0 for pure semantic ranking when you specifically want niche/small-cap matches. Each returned company carries a blended_score when the tie-break is active; score remains the raw semantic score. Returns: { "companies": [ { "company_name": "Vestas Wind Systems A/S", "official_name": "Vestas Wind Systems A/S", "ticker": "VWS.CO", "country": "DK", "industry": "Renewable Energy", "market": "nordic", "profile_snippet": "Vestas designs, manufactures, installs ...", "matched_tags": {"products_services": ["wind", "turbines"]}, "page_id": "companyprofile::en::vestas-wind-systems-a-s", "locale": "en", "score": 0.78 } ], Company-profile pointers, NOT filing citations. Each row's page_id is "companyprofile::<locale>::<slug>" — a link to the company's LLM-generated analytical profile page, not a filing. cite-sources renders these as source_kind="company_profile" (evidence_strength "model_inference") linking to /companies/<name>, never a filing snapshot. For filing-backed evidence to quote, follow up with search_filing_content / research_company. "search_results": [...], "coverage": {"weaviate_hits": 12, "after_country_filter": 10, "returned": 10} } On invalid input or empty backend: {"error": "..."}`.
document_summary
ChatGPTSummarise or compare companies' annual/interim reports. Pro plan, Pro trial or Team (spends Clarifo's LLM budget). Two modes: - single (default): structured, citation-anchored summary of one company's filing. Use instead of pulling a whole filing into your own context. Works for Nordic (HEL, STO) and US (NYSE, NASDAQ). - compare: side-by-side comparison of two companies' filings on a structured, citation-anchored basis. Use for cross-company questions about risk factors, AI exposure, dividend policy, segment performance. Every claim retains a `[page_id: ...] marker in the prose — an internal anchor, not a citation. You do **not** have to resolve those one by one: the response now also carries a sources[] block of cite-sources evidence cards for exactly the pages the summary cites, each with a ready-made citation_markdown and a source_url that resolves to the filing page (Nordic PDF snapshot) or the filing (SEC EDGAR), plus a source_policy. Render citation_markdown to the user; never print the raw page_id. (get_filing_snapshot remains available to resolve any single marker on demand.) Args: mode: "single" (default) or "compare". company: Company name or ticker. Required for single mode. company_a: First company. Required for compare mode. company_b: Second company. Required for compare mode. year: Fiscal year (single mode). Omit for the latest. year_a: Fiscal year for company A (compare mode). year_b: Fiscal year for company B (compare mode). document_type: "annual" (default) or "interim". quarter: Quarter 1-4 for interim (single mode). quarter_a: Quarter for company A interim (compare mode). quarter_b: Quarter for company B interim (compare mode). focus: Topic to emphasise (e.g. "AI risk factors", "capital allocation", "climate disclosures"). locale: "en" (default) or "fi". Returns: **Single:** {company, year, document_type, docid, summary, pages_used, total_pages, truncated, model, sources, source_policy} — sources are evidence cards for the pages the summary cites (citation_label / citation_markdown / source_url), or one filing-level card when the model kept no markers. **Compare:** {company_a: {...}, company_b: {...}, focus, comparison, model, sources, source_policy} — sources merges both companies' evidence cards under unique cmp_N ids (each card keeps its company). On miss: {"error": "...", ...}`.
fetch_edgar_filing_on_demand
ChatGPTFetch one US SEC filing directly from EDGAR as a transient fallback when `search_filing_content returns no rows for it. Use this ONLY when: - search_filing_content (with the same company + year) returned zero results and the diagnostic said the filing text has not been indexed for this company; AND - the user's question needs the actual filing text — a citation, a management commentary quote, a risk-factor paragraph. Do NOT use this to: - fill history for many years — the skill refuses batch use via a 15/hour global and 3/hour per-company rate limit; - fetch financial numbers (use get_company_financials or get_financial_statement — the XBRL numeric data is already indexed and does not need on-demand retrieval); - fetch 8-Ks (use company_events — 8-K events already have a dedicated indexed store with structured item categorisation); - fetch Nordic filings — this skill is US SEC only. Args: company: Company name, ticker, or CIK. Resolved through the shared entity resolver to a US filer. year: Calendar year of the filing's report_date (fiscal period-end year). For offset-fiscal-year filers, this is the calendar year the fiscal year ended in. form_type: "10-K" (default) or "10-Q". No other form is supported — 20-F, S-1, DEF 14A etc. fall outside the parser's calibrated shape. quarter: Required for form_type="10-Q". One of 1-4, matching the fiscal quarter number (Q1=March, Q2=June, Q3=September, Q4=December to within one month of the fiscal calendar). query: Optional keyword or short phrase. When supplied, the returned section list is filtered to sections containing at least one query token (whole-word, case-insensitive). Prefer this over pulling the full document to keep the response small. Returns: {company, filing, sections[], meta} on success — see the skill's SKILL.md for the exact shape. Each section carries item_number, item_title, text, chars. On soft failure (rate limit, filing not found, resolver miss) returns {"error": "<reason>", "detail": "<human string>"}. Common error values: rate_limit_global, rate_limit_company, filing_not_found, unsupported_form_type, not_a_us_filer, edgar_fetch_failed. The meta.note reminds callers that the result is transient: the filing is not persisted to Postgres or Weaviate, and a follow-up query for the same filing costs another rate-limit slot. Provenance: Reads the SEC submissions index (data.sec.gov/submissions/CIK<10-digit>.json) to locate the filing and then fetches the primary document (www.sec.gov/Archives/...). No other host is reachable. The compliant SEC User-Agent is set from the SEC_USER_AGENT` env var.
forecast_financials
ChatGPTProject a financial metric forward for a company, with the historical series it is built on and an honest read on fit quality. Works for both Nordic (HEL, STO; ESEF/iXBRL) and US (NYSE, NASDAQ; SEC EDGAR) companies. The projection is deterministic — no LLM arithmetic — and every forecast point is anchored to the company's own filed history. Rendering: present `historical and forecast as a table and summarise cagr, r_squared and quality_notes in prose. When the projection is the point, add one line chart — solid history, dashed forecast — drawn yourself per the server's "Charts" guidance (static chart, Clarifo theme, source line: primary filing + "Clarifo calculation"; no widgets). In ChatGPT (with output="python") or a host that cannot draw: render_chart(source_tool="forecast_financials", source_args=...) with the same arguments. Methods: - "auto" (default): log-linear (compounding) when all history is positive and there are ≥3 years, else a linear fit. - "log_linear": force the compounding model (requires positive history). - "linear": ordinary least squares on the raw values. - "driver": you supply the growth assumption via growth_rate (forced automatically whenever growth_rate is set). Args: company: Company name or ticker. Examples: "Apple", "AAPL", "Neste", "Kemira". Fuzzy matching supported. metric: One of "revenue", "ebit", "ebitda", "net_income", "operating_cash_flow", "free_cash_flow". (ebitda is Nordic-only.) horizon: Number of future years to project (1–10, default 3). method: "auto" (default), "log_linear", "linear" or "driver". growth_rate: Driver assumption as a fraction. Either a single value (e.g. 0.08 for 8% every year) or a list of per-year fractions (e.g. [0.12, 0.10, 0.08]). When set, method is forced to "driver". market: Restrict to "nordic" or "us". Omit to auto-detect. Returns: { "company": "Apple Inc.", "market": "us", "metric": "revenue", "method_used": "log_linear", "frequency": "annual", "historical": [{"year": 2021, "value": ...}, ...], "forecast": [{"year": 2025, "value": ...}, ...], "cagr": 0.11, "r_squared": 0.98, "horizon": 3, "coverage": {"history_points": 5, "first_year": 2020, "last_year": 2024}, "quality_notes": [...] } On miss: {"error": "..."}`.
generate_visual_cards
ChatGPTValidate + render a VisualStoryContent v2 object you authored — no LLM call. REQUIRED FIRST STEP — call ``get_visual_cards_guide`` before this tool. The guide is a static, no-cost markdown returner that documents every template with when-to-use guidance, all chart types (including `radial_gauge), annotation grammar, editorial rules and a gold-standard example story. Stories authored without reading the guide routinely miss the design vocabulary — wrong templateId, missing mode, unbalanced stats, no cover card — and the renderer then falls back to defaults that drop most of the design intent. Skip the guide only for a follow-up render of a story you *just* authored in the same turn using the guide's rules. You (the caller) already have the analysis in context, so author the cards yourself and pass them here. This tool runs them through the Clarifo visual-cards house rules deterministically — structure, palettes, themes, chart specs and per-card colours all come from Clarifo and are enforced server-side — and returns a VisualStoryContent v2 object the Clarifo frontend renders. No provider is called, so this costs nothing on Clarifo's LLM budget. Nothing off-brand can ship: an invalid field is dropped and the renderer falls back to its default. Typical flow: (1) call get_visual_cards_guide to load the authoring rules; (2) gather data with the read tools (research_company, get_company_financials, search_filing_content …); (3) author the VisualStoryContent v2 JSON per the guide; (4) call this tool. **Authoring contract (only these are read; everything else is dropped):** Top level:: {"company", "period", "industry", "palette", one of: graphite_navy | deep_green | midnight_teal | burgundy | graphite | bone "language", "fi" | "en" "numberFormat": {"locale":"en","currency":"EUR","scale":"auto","decimals":1}, "cards": [ ... ]} 4–7 cards; the FIRST is the cover Each card:: {"kind": "data", card 0 is forced to "cover" "category": "GROWTH", short ALL-CAPS eyebrow "headline": "...", REQUIRED (≤12 words) — no headline, no card "deck": "...", optional subhead ≤90 chars "lede": "...", "outcome": "...", "source": "...", "stat": {"value": "+12%", "label": "NI revenue YoY", "raw": 0.12}, "chart": { ... }, see chart payloads below "mode": "B", optional A (white) | B (dark navy) | C (beige) "templateId": "chart_brief", optional, allowlisted (see guide) "stats": [{"value":"48","label":"plants"}], ≤4 key-figure tiles "segments": [{"icon":"shopping_cart","title":"Grocery", "figure":"52%","figureLabel":"of EBIT"}], image_split_stats rows "extraCharts": [{"title":"EBIT","chart":{...}}], ≤2, chart_grid panels "quote": {"text":"...","source":"CEO, Q1 call"}, both fields required "annotations": [{"text":"19% CAGR","kind":"trendline", "anchor":{"kind":"series","series":0,"index":0}, "anchorTo":{"kind":"series","series":0,"index":2}, "emphasis":"positive"}], ≤6, cartesian charts only "mirror": true} two-column templates: chart left Template allowlist: process_journey | process_serpentine | process_stickers | hero_donut | duo_circles | sunrise_split | waffle_stat | quote_poster | statement_highlight | chart_brief | orbit_feature | company_profile | chart_grid | heatmap_ladder | minimal_pulse | image_hero | image_split | image_split_stats | feature_grid | metric_gauge. Image templates auto-fill imageUrl with a curated on-industry photo — never invent URLs. Chart payloads (chart.type` ∈ line | area | bar | stacked_bar | bar_line_combo | donut | world_map | table | process_steps | radial_gauge | none):: bar: {"type":"bar","unit":"%","bars":[{"label":"NI","value":12}]} line/area: {"type":"line","xLabels":["2024","2025"], "series":[{"name":"Revenue","points":[4.3,4.5]}],"unit":"€B"} stacked_bar: {"type":"stacked_bar","xLabels":[...], "segments":[{"name":"MN","values":[10,9]}]} bar_line_combo: {"type":"bar_line_combo","xLabels":[...], "bars":{"name":"Revenue","values":[19.2,19.4]}, "line":{"name":"Margin","values":[9,11],"unit":"%"}} donut/table/ {"type":"donut","slices":…
get_ceo_barometer
ChatGPTServe the CEO Barometer board (methodology `ceo-tone-v1): how upbeat or cautious CEOs sound in their own published reviews, by market, sector, size tier and company, with per-company QoQ / YoY, the dominant tone dimension and the market trend series. It measures tone, not company performance. How to read the numbers: * index is calibrated, not a -100...+100 score. 100 = the average tone of Nordic companies in 2020-2023, so values above 100 are normal; companies range from about 0 to 200. Tone bands are fixed: >= 108 pos, <= 73 neg, else neu. * TypeSafe Jev scores six dimensions per review on a 0-4 scale (jev_scores, with jev_confidence): confidence, demand, profitability, growth_ambition, caution and external_blame. Silence on a topic is the lowest score, never a missing value. Caution and external blame lower the index. * jev_evidence (per company) explains each displayed column (1-10) with a substring-verified quote from the review and a short comment, plus an independent blind cross-check. uncertain: true marks a cell where the two raters land in different bands. A cell may have a comment but no quote when no passage could be verified verbatim. A cell with stale: true was written for an earlier score: do not present it as the explanation. * Do not compare markets by level: US rows come from shareholder letters and MD&A (genre: us_letter), Nordic rows from CEO reviews in interim or annual reports. trend_constant_composition is the like-for-like trend. Args: period: Reporting period_end as YYYY-MM-DD (e.g. "2026-03-31"). When omitted, anchors on the newest period that clears the minimum-reporters floor (a fresh single-filer period cannot hijack the default board). company: Optional company name (e.g. "Nokia") — when set, the response focuses on that one company via a compact company_signal block (index / QoQ / YoY / peer percentile / short trend) and restricts companies[] to matching entries. Legal suffixes (Oyj, AB, plc, …) are stripped for matching. include_themes: Kept for backward compatibility; the legacy per-theme blob no longer exists. Per-column quotes and comments are in jev_evidence. include_companies: When true, returns the full companies[] list. Off by default so the market view is compact; ignored when company is set (the filtered companies[] is always returned then). include_trend_members: When true, returns the per-period, per-company membership blob, for recomputing the trend over a custom company subset. Off by default because it is heavy (dozens of periods × hundreds of companies); a chart of the market trend needs only trend. history_periods: How many trend points to keep, newest last. Default 4 (roughly one year of quarters). Pass 0 to keep the full trend. Returns: {market, period, periods, release, distribution, sectors, markets, cap_tiers, companies[], trend[], company_signal?, trend_members[]?}. release marks the anchored period as "locked" (finalised) or "provisional"` (still filling in); provisional periods are kept off the canonical trend line so a changing company set never reads as a sentiment move.
get_company_financials
ChatGPTGet structured key financial figures for a company. Returns revenue, gross profit, operating income, net income, EPS, total assets, equity, operating cash flow, and capital expenditures as a time series grouped by year. By default the response also includes a `latest_period section with the most recent data (annual OR quarterly, whichever is fresher) — answering "what is the latest revenue?" without requiring the caller to inspect every year. Works for both Nordic (HEL, STO) and US (NYSE, NASDAQ) companies. If market is not specified, both markets are tried automatically. **Rendering:** present by_year as a formatted table and highlight latest_period. When a 3+ year trend is the point, add a line chart — draw it yourself per the server's "Charts" guidance (static chart, Clarifo theme, source line: primary filing + Clarifo; no widgets). In ChatGPT (with output="python") or a host that cannot draw: render_chart(source_tool="get_company_financials", source_args=...) with the same arguments. **Latest-period selection (default period_type="auto"):** - Apple (FY2025 ends 2025-09-27, Q1/2025 ends 2025-03-29) → FY2025 wins - Kemira (FY2024 ends 2024-12-31, Q3/2025 ends 2025-09-30) → Q3/2025 wins Args: company: Company name or ticker. Examples: "Neste", "NESTE", "Apple", "AAPL", "Microsoft", "MSFT". Fuzzy matching supported. years: Number of recent annual years to include in by_year (default 5, max 10). Does not affect latest_period. market: Restrict to "nordic" or "us". Omit to auto-detect. period_type: Selection mode for latest_period: "auto" (default — newest annual or quarterly), "annual" (newest fiscal year), "quarterly" (newest quarter — also adds a by_quarter time series, Nordic and US), "both" (annual by_year + quarterly by_quarter in one response). quarters: Number of most recent quarters in by_quarter. Nordic: default 12, max 40. US: default 8, max 20. Only used when period_type is "quarterly" or "both". Each quarterly value carries provenance: status (reported_standalone/derived_subtraction/ manual) and formula for derived values. Nordic values add confidence, validated_against_fy and source_page_ids (resolvable via get_filing_snapshot); US values add derived, tag, form_type, accession_number and period_end of the 10-Q / 10-K fact. US quarters are discrete three-month XBRL values — year-to-date facts are never served as a quarter; Q4 (no 10-Q exists) is FY - (Q1+Q2+Q3) with derived: true. year: Pin latest_period to a specific fiscal year. **This is the company's own fiscal year**, not the calendar year. Apple's fiscal year 2026 runs October 2025 - September 2026. Check latest_period.period_end in the response to verify which calendar period the data covers. quarter: Pin latest_period to a specific fiscal quarter (1-4). If given, period_type is forced to "quarterly". **This is the company's own fiscal quarter number, not the calendar quarter.** Apple's fiscal Q2 is January - March (calendar Q1). Always check period_end in the response to verify the actual calendar period. When the pinned period has no structured data (e.g. the quarter's report is not ingested yet), latest_period comes back as {"available": false, "reason": "requested_period_not_available", ...} with a nearest_available` snapshot of the newest period that does exist — it is never silently substituted with a different period. Returns: { "company_name": "Neste Oyj", "display_name": "Neste Oyj", "market": "nordic", "by_year": { "2023": {"revenue": 21990000000, ...}, "2022": { ... } }, "latest_period": { "period_label": "Q3/2024", "period_type": "quarterly", "year": 2024, "quarter": 3, "period_end": "2024-09-30", "source": "eu_avainluvut_q", "metrics": {"revenue": {"value": 5800000000, "unit": "EUR", ...}} }, // period_type="quarterly"/"both" (US buckets add "derived" and // per-metric form_type / accession_number / tag): "by_quarter": { "Q2/2025": { "year": 2025, "quarter": 2, "peri…
get_company_profile
ChatGPTGet Clarifo's analytical profile for a company. Returns a structured narrative covering what the company does, how it distributes, where it operates, its strategy, key risks (with materiality classifications), and critical accounting policies. Same content the company-page Overview tab renders. Use this for discovery and qualitative context — to understand a company before drilling into numbers, or to provide the LLM with enough business context that it can interpret the financial figures meaningfully. The profile is LLM-generated from filings. The response includes `source = "clarifo_analytical_profile" so the caller can clearly distinguish analytical content from filing-grade data (get_financial_statement / search_filing_content). Args: company: Company name or ticker. Fuzzy matching is supported (e.g. "Fiskars", "FSKRS.HE", "60P", "60 Degrees Pharma"). locale: "en" (default) or "fi". The skill falls back to the other locale if the requested one is empty. include_full_text: When False (default), returns short preview texts (~1–2 paragraphs per section, much smaller token footprint). When True, returns the full multi-paragraph narrative for each section. Returns: { "company_name": "60 Degrees Pharmaceuticals, Inc.", "locale": "en", "source": "clarifo_analytical_profile", "updated_at": "2025-04-01T12:00:00Z", "overview": "60 Degrees Pharmaceuticals (60P) is a U.S.-based ...", "products_services": {"text": "...", "tags": [...]}, "customers": {"text": "...", "tags": [...]}, "geography": {"text": "...", "tags": [...]}, "strategy": "...", "risks": {"text": "...", "tags": [...]}, "accounting": {"text": "...", "tags": [...]}, "structured": {...}, "sources": [ {"source_kind": "company_profile", "evidence_strength": "model_inference", "document_type": "company_profile", "citation_markdown": "[60 Degrees Pharmaceuticals, Inc. Company Profile](https://.../en/companies/...)", "source_url": "https://.../en/companies/60%20Degrees%20Pharmaceuticals%2C%20Inc."} ], "source_policy": {"citation_mode": "claim_level", "display": {...}} } The sources entry is honestly tagged as a company_profile (evidence_strength="model_inference") linking to the company profile page — it is NOT filing-grade evidence. For filing-backed source verification use search_filing_content / get_filing_snapshot. When the company is unknown or has no profile yet: {"error": "No profile found", "company": "...", "locale": "..."}`.
get_company_snapshot
ChatGPTGet a compact snapshot of a COMPANY: key financials, profile summary, entity classification, and latest filings — in a single call. Use this as the quick entry point for company-level questions. For a deeper dossier that also searches filing content, use `research_company. For deeper single-aspect dives, follow up with get_financial_statement, search_filing_content, or get_revenue_geography. NOTE: this is unrelated to get_filing_snapshot, which resolves a page_id into a source URL. Args: company: Company name or ticker (e.g. "Neste", "AAPL"). years: Number of recent years for financials (default 3). identifier: Alias of company (accepted for client tolerance). ticker: Alias of company (accepted for client tolerance). name: Alias of company (accepted for client tolerance). Returns: { "company_name": "Neste Oyj", "display_name": "Neste Oyj", "market": "nordic", "ticker": "NESTE.HE", "entity_type": "operating", "financials": { ... }, "profile_summary": "...", "latest_filings": [ ... ], "stock_price": { "ticker": "NESTE.HE", "price": ..., "currency": "EUR", "trading_date": "...", "source": "...", "freshness_status": "live|recent|stale", "is_usable_for_live_quote": true, "age_trading_days": 0 } } stock_price is the most recent close from Clarifo's local price stores (delayed, typically T-1) and is attached whenever one exists — check freshness_status before presenting it as current. For an explicitly live/refreshed quote, follow up with get_stock_price (optionally require_live=true); for a price chart, get_stock_price with days=N`.
get_filing_snapshot
ChatGPTResolve a single `page_id to a viewable filing source (PNG snapshot or SEC link). This is a CITATION tool, not a company overview — for the latter use get_company_snapshot. Use this for citation / transparency: every figure returned by get_financial_statement (and search_filing_content) carries a page_id in pdf_info. Calling this tool with that id returns the URL of the page so the answer can include a verifiable source. Behaviour: - **Nordic filing with a preview**: kind="rendered_png" and snapshot_url points to the per-page PNG preview. - **Nordic filing that can be previewed on demand**: kind="snapshot_endpoint" and snapshot_url points to the canonical snapshot endpoint. - **US filing**: kind="edgar_link" and snapshot_url points to the SEC EDGAR document. - **Preview not yet available** (older or just-ingested filings): available=false with a reason. The caller can still cite company_name, year, page_number. CITATION RENDERING — never print the raw page_id (or a [page_id: ...] marker) to the user. Print citation_markdown instead: a ready-made "[Company Q2 2026, p. 4](https://...)" Markdown link when available=true, or the plain citation_label text with no link (e.g. "Company Q2 2026, p. 4") when available=false — never fabricate a link to a page that has no preview yet. **Point at the exact spot:** pass highlight = the figure you cite, exactly as printed on the page ("229,4", "215,938"), or a short verbatim quote from it. citation_markdown then opens the page with that figure / sentence highlighted (Nordic page image) or scrolled to and marked (SEC document). Use it for every figure-level citation. **Full page text:** search tools return 500-700 character excerpts that often stop mid-sentence (e.g. just before an accounting policy's conclusion). Pass include_text=true to get the page's complete indexed text under page_text, and adjacent_pages=1 (max 2) to add the pages before and after — a policy note often starts on the previous page or ends on the next. Read the text before stating what a policy says; do not infer a conclusion an excerpt cut off. Args: page_id: Page identifier returned in pdf_info from other tools. Format example: "722df34e9f191a97518a8560755cb9e9_20". dpi: Render resolution for Nordic PNG snapshots (default 150). include_text: Also return the full indexed text of the page(s). adjacent_pages: With include_text, also return this many pages on each side (0-2). max_chars_per_page: Per-page text cap (default 12000, max 30000); truncated: true marks a page that hit it. highlight: Optional figure (as printed) or short quote to highlight on the page; adds highlight_url and points citation_markdown at it. Returns: { "page_id": "...", "available": true, "kind": "rendered_png" | "snapshot_endpoint" | "edgar_link" | "viewer_link", "snapshot_url": "https://...", "company_name": "Neste Oyj", "year": "2024", "quarter": null, "document_type": "annual_report", "page_number": 12, "dpi": 150, "citation_label": "Neste Oyj 2024, p. 12", "citation_markdown": "[Neste Oyj 2024, p. 12](https://...)" } On miss: available=false with a reason string, plus citation_label/citation_markdown (link-free) so the caller can still cite the page by name in plain text. With include_text=true the response adds:: "page_text": [ {"page_id": "..._137", "page_number": 137, "is_requested_page": false, "content": "...", "chars": 4210, "truncated": false, "source_url": "https://..."}, {"page_id": "..._138", "page_number": 138, "is_requested_page": true, ...} ], "page_text_coverage": {"requested": 3, "with_text": 3, "missing": []} Pages with no indexed text are listed in missing` (cover pages, pages the indexer skipped, or a US filing whose tenant could not be routed) — say so rather than guessing their content.
get_financial_statement
ChatGPTGet a full financial statement (income statement, balance sheet, or cash flow) for a company. Includes metric labels (Finnish for Nordic, English-translated Finnish for US) and currency annotations. Use this when you need the line-item detail behind the headline figures — building timelines, multi-year trend charts, or peer comparison tables. For a compact KPI summary, use `get_company_financials instead. Works for Nordic companies (HEL, STO; ESEF/iXBRL annual filings) and US companies (NYSE, NASDAQ; SEC EDGAR XBRL). The output shape is identical across both markets so timeline rendering can ignore the source. **Quarterly coverage differs by market.** US companies have quarterly line items (10-Q). Nordic companies do NOT: ESEF filings are annual-only and interim reports are not ingested at line-item level, so a quarterly request for a Nordic company returns an explicit quarterly_line_items_not_available error with alternatives (get_company_financials(period_type="quarterly") for headline figures, search_filing_content for interim report text). **Default behaviour without a year/quarter:** returns the latest periods of the requested period_type (annual). period_type="auto" mixes annual and quarterly rows sorted newest first for US companies; for Nordic companies it returns annual rows with a note field. Args: company: Company name or ticker. Examples: "Fiskars", "Neste", "AAPL", "Apple". statement: One of "income_statement" (tuloslaskelma), "balance_sheet" (tase), "cash_flow" (rahavirtalaskelma). Default: "income_statement". years: Maximum number of most recent periods to return (1–25, default 10). Applies to whichever period_type is chosen. market: Restrict to "nordic" or "us". Omit to auto-detect (both markets are probed concurrently; Nordic wins on a tie). period_type: "annual" (default), "quarterly", or "auto" (mixes both, newest first). year: Filter to a specific fiscal year (e.g. 2024). **This is the company's own fiscal year**, not the calendar year. quarter: Filter to a specific fiscal quarter (1-4). **This is the company's own fiscal quarter number, not the calendar quarter.** Apple's fiscal Q2 is January - March (calendar Q1). Always check period_end in each returned period to verify the actual calendar dates. When set, period_type should typically be "quarterly" or "auto". min_coverage: Optional per-period completeness filter. Every period is scored based on how many core line items are populated: "complete" (≥80% of core), "partial" (30–79%), "sparse" (<30%). Set to drop periods below the band — e.g. min_coverage="partial" omits the "one stray fact was ingested" case that would otherwise pose as a normal period. Omit to keep every period and rely on the per-period coverage_status field to decide. Returns: { "company_name": "Fiskars", "market": "nordic", "statement": "income_statement", "period_type": "annual", "periods": [ { "year": 2024, "quarter": null, "period": "2024", "coverage_status": "complete", "available_core_metrics": 8, "expected_core_metrics": 8, "missing_core_metrics": [], "metrics": { "revenue": { "metric_name": "Liikevaihto", "value": 1250.5, "unit": "MEUR", "currency": "EUR", "source_url": "https://.../api/pdf-snapshot?page_id=...", "page_id": "..." }, ... } }, ... ], "coverage_summary": { "complete": 3, "partial": 0, "sparse": 1, "total": 4, "core_metric_set": ["revenue", "operating_income", ...] }, "sources": [ {"citation_markdown": "[Fiskars 2024 ...](https://...)", "source_url": "https://...", "source_kind": "s3_pdf", ...} ], "source_policy": {"citation_mode": "claim_level", "display": {...}} } Each period's metric cells carry per-figure provenance — a source_url (and page_id for a Nordic PDF-snapshot page, or an accession_number for a US filing) — and the response carries a deduped top-level sources[] of cite-sources evidence cards plus a source_policy`. Nordic links resolve to the ESEF iXBRL viewer or a page-precise PDF snapshot; US links resolve to the SEC ED…
get_industry_valuation_benchmark
ChatGPTIndustry-level valuation + profitability benchmark: the median and p25/p75 spread of P/E, P/B, EV/EBITDA, EV/EBIT, margins, ROE and revenue growth across the industry's peer set. Use this to answer "what does industry X trade at?", "is company Y cheap vs its industry?", or "how wide is the valuation spread in this sector?" — without rerunning a full industry analysis. The numbers are computed deterministically and persisted by the industry analysis; this tool reads the latest stored snapshot. Args: industry: Industry name or group key (e.g. `"gold miners", "kullankaivajat", "gold_miners"). Resolved via the industry synonym mapper. market: Market scope the benchmark was computed for — "all" (default), or a nationality-filter tag such as "us", "suomalainen", "stockholm" (or a +-joined combination). Returns: {industry_group, industry_display_name, market, as_of_date, year, peer_count, constituents, stats:{metric:{count,median,p25,p75,...}}, headline_medians} — or {"error": ...}` when no benchmark is stored yet for that industry/market (run an industry analysis to populate it).
get_revenue_geography
ChatGPTGet a company's revenue split by country and region for one fiscal year. Use this when the question is about where revenue comes from — exposure to specific markets, geographic concentration, region-level shifts. For other financial questions (totals, margins, trends) use `get_company_financials. For broader business context use get_company_profile. **Rendering:** present countries and regions as a table with revenue shares. When the split is the point, add a horizontal bar chart of shares — draw it yourself per the server's "Charts" guidance (static chart, Clarifo theme, source line: primary filing + Clarifo; no widgets). In ChatGPT (with output="python") or a host that cannot draw: render_chart(source_tool="get_revenue_geography", source_args=...) with the same arguments. Coverage: - **Nordic** (Helsinki, Stockholm): country breakdowns extracted from PDF annual reports. Currency typically EUR or SEK, in millions. - **US** (NYSE, NASDAQ): country + region breakdowns from SEC 10-K XBRL dimensional facts. Currency USD, in millions. Mappable countries (countries) come back with ISO alpha-2 codes — these are what the frontend's revenue map colours. Regions (regions) carry their own grouping label (e.g. "EMEA", "Asia Pacific", "North America") and are *not* expanded into countries server-side — the caller decides how to combine them with country-level figures (some filers report both, in which case summing them would double-count). For analytical work, prefer country-level rows when available. The other bucket holds the company's catch-all "other countries" aggregate (e.g. aapl:OtherCountriesMember). It can be sizeable (40%+ for filers that disclose only the top 1-2 countries) but is never broken down further. Args: company: Company name, ticker, or CIK. Examples: "Apple", "AAPL", "0000320193", "Neste", "Microsoft", "MSFT". Fuzzy matching is supported. year: Fiscal year to query (e.g. 2024). Default: most recent available annual filing. Returns: { "company_name": "Apple Inc.", "company_id": "aapl", "market": "us", "year": 2025, "currency": "USD", "unit": "milj_usd", values are millions of currency "total_revenue": 416161.0, "total_revenue_mappable": 216167.0, "countries": [ {"name": "United States", "iso_alpha2": "US", "revenue": 151790.0, "page_id": "0000320193-25-000079"}, ... ], "regions": [ {"name": "Asia Pacific", "entity_type": "multi_region", "revenue": 67680.0, "page_id": "..."} ], "other": [ {"name": "Other countries (US filing)", "entity_type": "other", "revenue": 199994.0, "page_id": "0000320193-25-000079"} ], "additive_layer": "country+other", "total_revenue_reconciliation": { "group_revenue": 416161.0, "coverage_of_group_revenue": 1.0 } } **total_revenue is one layer, never the sum of all rows.** Filers disclose geography at several granularities at once and those layers overlap by construction (an "Europe" row and a "Finland" row describe the same euros). additive_layer names the layer used; total_revenue_reconciliation shows the consolidated group revenue for the same period and what share of it the rows cover. A coverage below 1.0 is normal — most filers break out only part of their revenue by geography. overlap_warning explains any layer that was excluded (per-segment rows, parent-company rows, duplicate extractions). Returns {"error": "...", "company": "..."}` when the company cannot be resolved or has no revenue-by-geography data on file.
get_sector_peer_set
ChatGPTReturn a curated peer set for a sector/country workflow. Args: sector: Sector key. Currently `"construction" maps to the curated nordic-construction preset when FI/SE/Nordic countries are requested. countries: Optional country filter, e.g. ["FI", "SE"]. The returned peer set is filtered to these countries when provided. preset: Optional explicit preset slug, e.g. "nordic-construction". Returns: {sector_scope, peer_set, available_presets}. peer_set entries include input, resolved_name, ticker, country, sector_tag, resolution_source and resolution_status` so the caller can audit the universe before running comparisons.
get_segment_financials
ChatGPTRetrieve one US company's segment metrics across fiscal periods. metric: revenue, operating_income, gross_profit, assets or depreciation_amortization. axis: business, product, geographic, consolidation or a raw XBRL axis. periods: most-recent rows per segment (default 8); year pins the fiscal year. member_filter: case-insensitive substrings of labels or raw XBRL members; named members are found across axes (e.g. NVIDIA Data Center). Returns segments and filing evidence references into sources[]. Reads stored data only.
get_stock_price
ChatGPTStock price for a listed company — latest close or historical series. Mode selection (automatic): - `days=0 and no start_date/end_date (default) → the most recent completed-session closing price, looked up via web search (~15 min delay). Every result carries freshness metadata: freshness_status (live / recent / stale), is_usable_for_live_quote, age_seconds and age_trading_days. The lookup is cached for prefer_cache_seconds; pass force_refresh=true to bypass. Pass require_live=true when the user explicitly asks for a live price — if the best observation is stale, the call fails with failure_kind="stale_price" and best_observation. - days>0 or start_date/end_date given → historical daily closing prices from Clarifo's internal database (delayed T-1, up to 5 years / 1825 days). Use ISO start_date / end_date (YYYY-MM-DD) for an exact window, or days=N for a trailing lookback. When start_date/end_date are given they take precedence over days. Returns a series of {date, close, volume} plus summary with total_return_pct, period high/low, and significant_moves (>=5% single-day changes). **Rendering**: when the window matters, draw a static line chart (x=date, y=close) from series yourself per the server's "Charts" guidance (Clarifo theme, source line: exchange prices + Clarifo; no widgets). In ChatGPT (with output="python") or a host that cannot draw: render_chart(source_tool="get_stock_price", source_args={...same args...}). At least one of ticker or company_name must be supplied. **Follow-up "what happened here?"** (history mode): when the user points at a date range on the chart, gather context by calling company_events, search_filings, search_filing_content, get_ceo_barometer for that window. Combine with the price move to explain causality. Returns (latest mode): {ticker, company_id, price, currency, share_class, trading_date, price_type, fetched_at, source, confidence, cache_hit, freshness_status, ...}. Returns (history mode): {company, ticker, currency, data_points, period, summary, series}. On error: {"error": "...", "failure_kind": "..."}`.
get_valuation_history
ChatGPTReturn historical valuation multiples for a listed company. Each data point represents P/E, P/B, P/S, EV/EBITDA, EV/EBIT, EV/Sales and FCF yield as of one trading day, pre-computed from that day's closing price and the latest annual fundamentals. Data is delayed by one day (up to yesterday). At least one of `company_name or ticker must be supplied. days controls the lookback window (default 365, max 1825). Returns {company, ticker, data_points, period, series} where series is a list of daily multiples snapshots. **Rendering:** when the trend matters, draw a static line chart (x=date, one line per multiple) from series yourself per the server's "Charts" guidance (Clarifo theme, source line ending "Clarifo calculation"; no widgets). In ChatGPT (with output="python") or a host that cannot draw: render_chart(source_tool="get_valuation_history", source_args={...same args...}). On error: {"error": "...", "failure_kind": "..."}`.
get_visual_cards_guide
ChatGPTReturn the full authoring guide for `generate_visual_cards (markdown). Call this ONCE before authoring a VisualStoryContent v2 object. It documents everything the validator accepts — all 20 rich templates with when-to-use guidance, every chart type (including radial_gauge`), annotations, key-figure tiles, segment rows, quotes, image effects, the editorial house rules (one card = one claim, headline/lede length budgets, no repetition) — and a gold-standard example story to pattern-match against. Static content, no database or LLM call. Costs nothing on Clarifo's LLM budget.
get_workspace_item
ChatGPTRead the full content of a single item from one of your workspaces. Covers workspaces you own and workspaces shared with you (user taken from the authenticated MCP session, access enforced). Long text bodies are capped to keep the response lean — `content_truncated flags when that happened. Args: workspace_id: The workspace the item belongs to. item_id: The item's id (from list_workspace_items`). Returns: {"item_id": ..., "type": "report", "title": ..., "content": {...}, "content_truncated": false, "unfinished": false, ...} On miss / no access: {"error": "..."}.
governance
ChatGPTDEF 14A proxy data for US companies — board, NEO pay, CEO pay ratio, say-on-pay. Three modes: - snapshot (default): single proxy for one company (latest or pinned to `fiscal_year). Use for "what does Apple's CEO earn?", "is NVIDIA's board independent?". - **trend**: multi-year board-composition and pay trend for one company in a single call. Use for "how has NVIDIA's board changed over time?", "how has the CEO pay ratio developed?". - **peer**: rank a peer set on a single governance metric. Use for "compare CEO pay ratio across Big Tech", "S&P 500 banks by board independence". Args: mode: "snapshot" (default), "trend", or "peer". company: Company name, ticker, or CIK. Required for snapshot and trend modes. companies: Peer set (2+ identifiers). Required for peer mode. fiscal_year: Pin to a specific fiscal year (snapshot and peer modes). Omit for the most recent proxy. years: Trend mode — cap on rows returned (newest-first, max 25, default 8). from_year: Trend mode — lower bound on fiscal year. to_year: Trend mode — upper bound on fiscal year. metric: Peer mode — "ceo_pay_ratio" (default), "ceo_total_pay", "board_independence", "female_director_ratio", "median_employee_pay", "sop_percent_for". direction: Peer mode — "desc" (default) or "asc". Returns: **Snapshot:** {company_name, ticker, cik, proxy: {fiscal_year, filing_date, board, executive_compensation, insider_ownership, say_on_pay, ceo_pay_ratio, source_url}}. **Trend:** {company_name, ticker, cik, trend: [{fiscal_year, board_size, independent_ratio, ceo_total_pay_usd, ceo_pay_ratio, ...}]}. **Peer:** {metric, direction, peers: [{company_name, ticker, value, proxy}], companies_not_resolved, coverage, missing}`.
insider_activity
ChatGPTSEC Form 4 insider trading for a US company. Three modes: - summary (default): aggregate counts and net USD by reporter class (C-level vs 10%-owner) and transaction type. Pass `granularity ("quarter" or "month") for a per-period trend instead. Use for "is the CEO buying?", "net insider flow last quarter?", "insider purchases over the 2020s?". - **clusters**: detect cluster trades — multiple distinct C-level insiders trading the same direction inside a rolling window (Cohen-Malloy-Pomorski conviction signal). Ranked by conviction score. Use for "any coordinated insider buying at Apple?". - **transactions**: raw Form 4 rows newest-first. Use for "every Elon Musk Form 4 in 2026". Args: company: Company name, ticker, or CIK. mode: "summary" (default), "clusters", or "transactions". since_date: YYYY-MM-DD lower bound (default: last 365 days). until_date: YYYY-MM-DD upper bound. include_derivatives: Include option grants/exercises (default False). Used in summary and transactions modes. granularity: Summary mode only — "quarter" or "month" to get a per-period trend instead of aggregate. periods: Summary trend mode only — cap on trend buckets (newest-first, max 60). direction: Clusters mode only — "purchase" (default) or "sale". window_days: Clusters mode only — rolling window in calendar days (1-365, default 90). min_insiders: Clusters mode only — minimum distinct C-level insiders (default 2, must be >=2). min_total_value: Clusters mode only — USD threshold. top_k: Clusters mode only — cap on returned clusters after dedup + ranking (default 5; 0 = all maximal clusters). include_raw: Clusters mode only — include pre-dedup candidate windows (audit use only). transaction_types: Transactions mode only — subset of ["purchase", "sale", "award", "exercise", "other"]. reporter_class: Transactions mode only — "officer" / "director" / "ten_pct_owner" / "c_level". reporter_cik: Transactions mode only — pin to a single insider. limit: Transactions mode only — row cap (default 50, max 1000). Returns: **Summary (aggregate):** {company_name, ticker, cik, summary: {transaction_count, net_value_usd, by_type, by_reporter_class}}. **Summary (trend):** {company_name, ticker, cik, granularity, trend[]}. **Clusters:** {company_name, ticker, cik, direction, window_days, clusters[]} conviction-ranked. **Transactions:** {company_name, ticker, cik, transactions[]}` newest-first with EDGAR source_url per row.
intelligence
ChatGPTAnomaly-detection intelligence over one company or a universe. One tool, three operations — pick with `op: **op="brief"** (default) — plain-language brief on what changed in ONE company's numbers, grounded in measured anomaly signals + filing citations + CEO quotes. Requires company. Use for "what happened at NVIDIA?", "were Y's results unusual?", "mitä yhtiölle X kuuluu?". Pro-plan tool (LLM-narrated). Advanced: brief_operation picks the provenance surface — "brief" (default) generates a fresh narrative, "history" lists past persisted versions, "get_version" returns one version by version_id, "diff" compares from_version_id → to_version_id with a deterministic why-changed line. **op="discovery"** — anomaly-ranked watchlist across the universe: which companies have the strongest anomaly signals right now? No company argument. Use for "any red flags right now?", "which US companies are deteriorating?", "where should I look for trouble?". Transparent score (validated signal weights + departure-from-normal + calibrated big misses). Filter by sector and min_score; cap with limit. **op="dna"** — how does ONE company report vs. peers across six measured dimensions (earnings-quality, inventory posture, reporting practice, guidance credibility, ...)? Requires company. Use for "aggressive accounting?", "does management hit guidance?", "can we trust their outlook?". Follow up with search_filing_content for the filing passages behind any dimension. Optional signal narrows to one dimension. Entry-point disambiguation: - Overview / financials → get_company_snapshot / get_company_financials, NOT op="brief". - Rank by a financial metric → screen_companies, NOT op="discovery". - Historical structural break points → detect_inflection_points, NOT op="brief". Args: op: One of "brief" (default), "discovery", "dna". company: Required for brief and dna; ignored for discovery. period: brief only — the reporting period the engine keyed (e.g. "2024" for FY, "2024-Q2" for a quarterly read). Omit to use the freshest period the engine has. max_signals: brief only (1–10, default 3). More does not necessarily improve the prose. language: brief and dna. "en" (default) or "fi". Pass the language the user wrote in. knowledge_cutoff: brief only. ISO YYYY-MM-DD for a point-in-time view. brief_operation: brief only, provenance surface (see above). version_id / from_version_id / to_version_id: brief + brief_operation="get_version" / "diff". limit: discovery only (default 20). sector: discovery only (e.g. "Technology"). min_score: discovery only (default 0.5). signal: dna only — one of the six dimensions to narrow to. Returns: Shape matches the picked operation — see the per-op fields below. On unknown op: {"error": "..."}`.
list_company_segments
ChatGPTList the XBRL segment axes and members reported by a US company. company: US company name or ticker. Returns company_name, cik and axes. Reads stored SEC XBRL facts; no external fetch or mutation.
list_workspace_items
ChatGPTList the items in your own Clarifo workspace (notes, uploaded files, analyses, reports), including work that is still in progress. Covers workspaces you own and workspaces shared with you (share link or your Team) — the user is taken from the authenticated MCP session. Returns item metadata and a short preview, not full bodies; use `get_workspace_item for an item's content. Args: workspace_id: Which workspace to read. Omit to use your workspace automatically; if you have several, the tool returns the list of workspace ids to choose from. only_unfinished: When true, return only items still in progress (files whose text is still being extracted, drafts, pending/generating items). types: Optional filter, e.g. ["file", "report"]`. Valid types: text, source, analysis, search_result, chat_message, report, file. limit: Max items to return (1–200, default 50). Returns: {"workspace_id": "...", "total": 12, "items": [ {"item_id": "...", "type": "file", "title": "Q3 deck.pdf", "processing_status": "pending", "unfinished": true, "preview": "...", "updated_at": "..."} ]} If you have multiple workspaces and none was specified: {"needs_workspace_id": true, "workspaces": [...]}. If not authenticated: {"error": "..."}.
ownership
ChatGPT13F institutional ownership (US filers). One tool, three modes. ``mode="issuer"`` — who owns a US issuer. Requires `company (name, ticker or CIK). Default: latest quarter's top holders ranked by USD value. Pass any of quarters / since / until to switch to a per-quarter concentration trend (total value, holder count, top-10 concentration). Use for "largest holders of NVIDIA", "how has NVIDIA's institutional ownership developed?". **mode="manager"** — what a 13F manager holds. Requires manager_cik (e.g. "1067983" for Berkshire Hathaway, "102909" for Vanguard). Default: latest quarter's holdings ranked by USD value. Pass quarters / since / until to switch to a per-quarter book-value trend. Use for "Berkshire's portfolio", "how has Vanguard's 13F value grown?". **mode="pair"** — one manager's position history in one issuer. Requires both manager_cik and company. Returns the quarterly history (equity + put + call blocks per quarter). Use for "has Berkshire been adding to AAPL?", "did BlackRock cut its Tesla stake?". PUT / CALL option positions are excluded from the issuer and manager modes — those track ownership, not options activity. The pair mode keeps them as separate blocks. **Rendering:** snapshots read best as a ranked table (or horizontal bars for 5+ holders); trend modes as a line chart. Draw it yourself per the server's "Charts" guidance (static chart, Clarifo theme, source line: SEC 13F filings + Clarifo; no widgets). In ChatGPT (with output="python") or a host that cannot draw: render_chart(source_tool="ownership", source_args={...same args...}). Args: mode: One of "issuer" (default), "manager", "pair". company: Company name, ticker or CIK. Required for issuer and pair modes; ignored otherwise. manager_cik: 13F manager CIK. Required for manager and pair modes; ignored otherwise. period: YYYY-MM-DD quarter-end date for the snapshot ("latest by default"). Only used by issuer + manager snapshot mode; ignored on pair and on trend paths. limit: Cap on returned holders / holdings (max 200, default 25). Ignored on trend paths and on pair mode. quarters: On issuer / manager, activates trend mode with a cap on returned quarters (newest-first, max 40, default 8). On pair mode, sets how many quarters back to fetch (default 8, max 40). since: YYYY-MM-DD lower bound on the quarter-end date; activates trend mode on issuer / manager. Ignored on pair. until: YYYY-MM-DD upper bound on the quarter-end date; activates trend mode on issuer / manager. Ignored on pair. Returns: issuer: {company_name, ticker, cik, period, holders[]} or the trend shape {company_name, ticker, cik, since, until, trend[]}. manager: {manager_cik, manager_name, period, holdings[]} or {manager_cik, manager_name, since, until, trend[]}. pair: {manager_cik, manager_name, company_name, ticker, history[]}. On empty coverage, carries diagnostic.reason = "no_13f_data_yet"`.
render_chart
ChatGPTDraw a Clarifo chart of a result you already fetched. Two outputs: - `output="python" — **ChatGPT and any host with a python / code tool.** Returns a ready-to-run matplotlib script with every number, label, colour and the source line embedded server-side. Run it unchanged in your python tool; it ends with plt.show(), which makes the chart appear in your answer. Do not edit the numbers, do not save the figure to a file and never write a Markdown image link () — it renders as a broken image. - output="image" (default) — a PNG image block, for hosts that show MCP images to the user inline (Claude). ChatGPT does NOT show MCP images to the user: use output="python" there. Call it only when a chart earns its place (a trend over 3+ periods, a peer comparison over time, a ranking of 4+ names, a sensitivity grid); a single figure or a two-row comparison needs a sentence or a table. One call per metric: for "revenue and operating margin" call it twice with metric="revenue" and metric="operating_margin". Pass the name of the tool you called and **the same arguments you passed it**. The data is re-fetched and the chart is computed server-side from the filings — never pass figures yourself, there is no parameter for them. Chartable tools: compare_companies (multi-year: one line per company for metric, calendar-year aligned; single period: KPI table), forecast_financials, get_company_financials, ownership (all three modes), get_revenue_geography, get_stock_price (history mode, i.e. with days or a date range), get_valuation_history, screen_companies, screen_metric_trend, screen_quality_growers, value_company. Args: source_tool: Name of the tool whose result to chart. source_args: The arguments you passed to that tool, verbatim. metric: Which metric to chart where the source carries several (compare_companies: revenue (default), operating_margin, net_income, gross_margin, free_cash_flow, ...). output: "python" (ChatGPT / code tools) or "image"` (PNG). Returns: python: the script plus run instructions and the source line to print under the chart. image: a one-line description plus the PNG.
reporting_change
ChatGPTAnalyse how an in-flight IASB/EFRAG reporting project affects companies. Three modes in one tool: - assess (default): per-company impact assessment grounded in filings. Returns scope assessment, baseline evidence with graded verification states, gap assessment, and unresolved questions. Use for "how would IFRS 20 affect Neste?", "DRM impact on Nordea?". Omit `company to get the project card + evidence- checklist definition only. - **screen**: graded exposure screening across a company universe. Returns per-company classification (likely_relevant / potentially_relevant / no_public_evidence_found / likely_not_ relevant / not_assessable). Use for "which Finnish companies may be affected by IFRS 20?", "ESRS-40a exposure in Swedish banks?". - **card**: composed article-ready roadmap card (eight sections: What changed, Why it matters, Who may be affected, What to check now, Company filing example, What happens next, Primary sources, Confidence). Also carries visual_cards_outline. Use for "IFRS 20 reporting change card". Known projects: "Risk Mitigation Accounting" (aka DRM), "IAS 28 Fair Value Option Amendments", "IFRS 20" (rate-regulated activities), "ESRS-40a" (ESRS for non-EU groups). Passing an unknown project returns the valid list. All modes are deterministic — no LLM spend. Args: project: Project name, id or alias — e.g. "IFRS 20", "DRM", "ias28-fair-value-option", "ESRS-40a". mode: "assess" (default), "screen", or "card". company: Company name or ticker (fuzzy-resolved). Used in assess mode (impact target) and card mode (filing example). Ignored in screen mode. companies: Explicit company list (max 15, fuzzy-resolved). Used in screen mode (universe) and card mode (Who may be affected). Ignored in assess. industry: Industry filter for screen / card (e.g. "banking", "energy"). Ignored when companies is given. country: Country filter ("FI", "SE", ...) for screen / card. Ignored when companies is given. top_n: Universe size for screen / card when companies is omitted (default 10, max 15). assess_depth: "full" (default — evidence + gap assessment) or "scoping" (scope signals only, cheaper). Only used in assess mode. as_of: Optional assessment date (echoed in assess output). Returns: **Assess mode:** {project, scope_assessment, baseline_evidence, gap_assessment, unresolved_questions, official_sources, filing_sources, source_policy, publication_gate}. **Screen mode:** {project, companies (sorted most-relevant first, each with classification + confidence + reasons + evidence), methodology_audit, official_sources, source_policy}. **Card mode:** {project, card (eight sections), visual_cards_outline, source_policy}. Cite filing_sources[].citation_markdown / evidence[]. citation_markdown verbatim — never raw page_id` strings.
research_company
ChatGPTComprehensive company research combining financials, filing content, and analytical profile in a single call. This is the recommended starting point for company-level questions. Instead of calling search_filing_content, get_company_financials, and get_company_profile separately, this tool runs them in parallel and returns a unified result. What it does: 1. Resolves the company name (fuzzy matching, ticker support) 2. Fetches structured financial data (revenue, margins, growth) 3. Searches filing text for each topic (MD&A, Risk Factors, guidance) 4. Retrieves the analytical profile if available When to use this vs. individual tools: - Use `research_company when you need a broad understanding of a company — "tell me about D.R. Horton", "why did KB Home's revenue decline?", "what are Nokia's key risks?" - Use individual tools when you need a specific, narrow piece of data (e.g. just the balance sheet, just one filing's text). **Date semantics in the response:** - period_end is the calendar date the period closes (e.g. 2025-09-27 for Apple's FY2025). - year always means the *fiscal* year that closes at period_end — never the filing date or the calendar year. - period_label is the human-readable form ("FY2025", "Q3/2025"). Args: company: Company name or ticker. Fuzzy matching supported. Examples: "D.R. Horton", "DHI", "KB Home", "Neste", "Nokia" topics: List of topics to search in filing text (max 5). Defaults to the first three entries of the shared filing-topic vocabulary (backend/search/analysis_facets): revenue trajectory, risks, outlook. Examples: ["mortgage rates impact", "inventory levels", "order backlog trends"] year: Restrict filing content search to a specific *fiscal* year. years: Number of annual periods for financial data (default 3, max 5). concise: When True, return a slimmed-down payload — top 1 hit per topic (instead of 3), 220-char content snippets (instead of 800), and the profile is reduced to its overview + risks previews only. Roughly 70% smaller token footprint. Use in agentic workflows where the model only needs to know the shape of what the company does before deciding whether to drill in. Returns: { "company": { "name": "HORTON D R INC /DE/", "ticker": "DHI", "market": "us" }, "financials": { "by_year": {"2025": {...}, "2024": {...}}, "latest_period": {...}, "data_quality_warnings": [...] }, "filing_content": { "revenue development, growth, earnings trajectory, profitability": [ {"content": "...", "content_title": "Item 7 - MD&A", ...} ], "risks and uncertainties, risk factors, near-term risks": [...] }, "profile": { "overview": "...", "risks": "..." }, "sources": ["10-K FY2025", "10-Q Q1/2026", "XBRL financial data"] } financials carries the same integrity fields the standalone get_company_financials returns, so a figure quoted from here is exactly the figure that tool would give: - data_quality_warnings — a PDF-extracted figure that conflicts with the consolidated filing fact, or a metric the two internal pipelines disagreed on and which side won. Present only when something was actually flagged or corrected. - latest_period.metrics_available: false — the period resolved but has no structured figures ingested yet; superseded_period` names it when an older period with real figures was used instead.
resolve_entities
ChatGPTResolve a batch of company names/tickers to canonical entities. Use this before running per-company analysis on a list, so the downstream loop drives off CIKs/canonical names rather than the user's raw strings (avoiding the per-tool fuzzy-match drift that used to put two companies into a single `research_company` response). The resolver is cached, so a hot list — say the same five Nordic industrials called repeatedly — costs effectively zero on the second invocation. Args: companies: List of inputs to resolve. Each entry can be a ticker ("DHI", "AAPL"), an official name ("HORTON D R INC /DE/"), or a brand name ("D.R. Horton", "Google"). Order is preserved in the response. Returns: { "resolved": [ { "input": "DHI", "name": "HORTON D R INC /DE/", "cik": "0000882184", "ticker": "DHI", "market": "us", "confidence": 1.0, "source": "ticker_exact" }, ... ], "unresolved": ["TOTALLY_UNKNOWN_TICKER"], "total": 6, "matched": 5 }
score_ceo_sentiment_for_company
ChatGPTScore one company's CEO review on the six CEO-Barometer themes right now, without waiting for the always-on batch refresh. Returns the fresh −100…+100 sentiment index, per-theme scores with verbatim quotes and chunk-verified citations, plus the resolved reporting period. The tool does NOT persist the result — the CEO-Barometer snapshot table is written by the batch refresh cron only, so get_ceo_barometer will reflect the new number on its next scheduled run. Use this tool when a reader wants the live read for a specific company between refreshes, or when validating a freshly published CEO review before the batch job picks it up. Args: company: Canonical company name as used in Weaviate (usually the lowercase legal shortname, e.g. `"kesko", "neste", "nokia"). Not a ticker. year: Optional reporting-period year. Omit to score the freshest period the company has published. quarter: Optional reporting period quarter (1=Q1 / 2=H1 / 3=Q3 / 4=FY). Only used when year is set. language: "fi" (default) or "en" — controls both the LLM rubric language and the citation formatting. Returns: {company_name, official_name, period_end, period_type, index, tone, dominant_theme, themes, document_id, model} on success. {"error": "...", "available_periods": [...]}` when the company has no CEO-review chunks for the requested period (Weaviate returns no rows, or the chunk metadata is stale). Pro-plan only: this tool runs Clarifo's own LLM against your query, so the spend is billed to us, not to your host. Free / trial / Plus subscribers get an upgrade pointer instead.
screen_companies
ChatGPTRank or screen the company universe by a financial metric. Use this for cross-company questions ("which Finnish companies grew revenue most in 2024?", "top 20 Swedish companies by EBITDA"). For single-company detail use `get_financial_statement or get_company_financials instead. **Rendering:** present the ranked results as a formatted table. For 5+ companies a horizontal bar chart may be added — draw it yourself per the server's "Charts" guidance (static chart, Clarifo theme, source line: primary filing + Clarifo; no widgets). A short list you are about to summarise in a sentence needs no chart. In ChatGPT (with output="python") or a host that cannot draw: render_chart(source_tool="screen_companies", source_args=...) with the same arguments. **Coverage notes:** - Main list (HEL + STO): ~190 companies with annual data. Includes First North companies in pre-aggregated metrics (revenue, EBIT, EBITDA, net_income, marketcap) but NOT in detailed ESEF/iXBRL line items (esef_facts). For First North companies, use screen_companies for screening and search_filing_content for filing detail. - US (NYSE + NASDAQ): ~1400 companies from SEC EDGAR 10-K filings. - compare_years > 3 may return fewer results for Nordic data where older filings have not been ingested. **Growth mode and negative values:** When one or both of the anchor/compare values are negative (e.g. a loss-making company), growth_pct is set to null and the response includes trend ("deteriorating", "improving", "turned_positive", "turned_negative") and delta_absolute instead. This prevents misleading percentage values like "+303 %" for deepening losses. Args: metric: Metric to rank by. The skill picks the right backend automatically: - Pre-aggregated Nordic metrics (fastest): "revenue", "gross_profit", "ebit", "ebitda", "net_income", "operating_cash_flow", "free_cash_flow", "marketcap", "personnel", "eps_diluted", "shares_outstanding". - Granular IFRS line items (Nordic esef_facts): "cost_of_sales", "operating_profit", "profit_before_tax", "income_tax_expense", "research_and_development_expense", "selling_and_marketing_expense", "administrative_expense", "finance_costs", "finance_income", "total_assets", "current_assets", "non_current_assets", "total_equity", "equity_attributable_to_owners", "total_liabilities", "current_liabilities", "non_current_liabilities", "cash_and_equivalents", "investing_cash_flow", "financing_cash_flow". - Filing-extracted KPIs (Nordic avainluvut): "order_book" (tilauskanta), "order_intake", "equity_ratio", etc. - US (USFinancialFacts, US-GAAP tags): every metric listed above except ebit, ebitda, free_cash_flow, marketcap, personnel, eps_diluted, shares_outstanding, order_book, order_intake, equity_ratio. Coverage matches the Nordic ESEF backend so the same metric key works cross-market. - Derived margin metrics (Nordic + US): "gross_margin", "operating_margin", "ebit_margin", "net_margin", "net_profit_margin". Ratio (0.25 = 25 %), computed in SQL from the underlying numerator and revenue — no LLM math. - "ebitda_margin": Nordic via ebitda / revenue (keymetrics column); US via (operating_income + depreciation_amortization) / revenue — no canonical US-GAAP EBITDA tag exists, so the numerator is synthesised from the two reported components. Companies missing a standalone D&A tag are excluded from the US ranking — the screener never silently treats missing D&A as zero. - "ebitda": Nordic from keymetrics; US derived same as ebitda_margin numerator (operating_income + depreciation_amortization). - "fcf_margin": Nordic via free_cash_flow / revenue; US via (operating_cash_flow − capex) / revenue. Companies that did not file a capex line are excluded — the screener never silently treats missing capex as zero. mode: "growth" (default) ranks by year-over-year growth %. `"val…
screen_companies_multi
ChatGPTScreen companies by multiple financial criteria in a single call. Each filter specifies a metric and a constraint (growth range or value range). Only companies passing ALL filters are returned. This replaces the pattern of calling `screen_companies multiple times and manually joining by company name. Args: filters: List of filter objects. Each has: - metric (required): metric name (same as screen_companies). - mode: "growth" (default) or "value". - growth_min: minimum growth % (growth mode only). - growth_max: maximum growth % (growth mode only). - value_min: minimum absolute value. - value_max: maximum absolute value. - compare_years: years back for growth (default 1). Example: [ {"metric": "revenue", "mode": "growth", "growth_min": 15}, {"metric": "ebit", "mode": "value", "value_min": 0}, {"metric": "marketcap", "mode": "value", "value_max": 500000000} ] country: Scope. Pass "Nordic" (also accepts "Nordics" / "Scandinavia") to screen every Helsinki + Stockholm issuer in one call — do NOT call twice with "FI" and "SE" and merge the results yourself, the "Nordic" scope already runs the Nordic backend across both exchanges in a single pass. Other values: "FI" (Helsinki only), "SE" (Stockholm only), "US" (NYSE + NASDAQ). Omit for all markets. include_types: Entity type filter (["operating"] recommended). top_n: Max companies to return (default 20). rank_by: Index into filters to use as the ranking metric (default 0 = first filter). index: Restrict the universe to a market index (e.g. "sp500"). When set, country is forced to "US". See screen_companies` for supported indices. Returns: { "filters_applied": [...], "companies": [...], "coverage": {"passed_all": 15, "returned": 15} }
screen_metric_trend
ChatGPTBuild a multi-period time series for one financial metric across a peer group — the "is it cheap/expanding vs. its peers and its own history?" chart, with every cell traceable to one filing period. Rendering: a peer trend across 3+ periods is usually clearer as a line chart (one line per company) — draw it yourself per the server's "Charts" guidance (static chart, Clarifo theme, source line: primary filing + Clarifo; no widgets). Otherwise present `series_data as a formatted peer-comparison table with periods as columns. In ChatGPT (with output="python") or a host that cannot draw: render_chart(source_tool="screen_metric_trend", source_args=...) with the same arguments. Two ways to choose the companies: - **Explicit peers**: pass peers=["Costco", "Walmart", "Target"] (names or tickers, Nordic and/or US, mixed is fine). - **Ranked group**: omit peers and the tool ranks the top top_n companies by rank_metric (defaults to metric), filtered by countries / industry / tag_slugs. Margins (gross_margin, operating_margin, ebit_margin, ebitda_margin, net_margin) are computed deterministically from the underlying numerator/revenue pair — no LLM arithmetic. ebit_margin pins to a true EBIT figure (keymetrics ebit / US-GAAP operating_income) and is distinct from operating_margin, which uses the IFRS operating_profit line on the ESEF backend. The output is shaped for a chart: see chart_series and series_data. Args: metric: Metric to trend. Pre-aggregated Nordic + US: "revenue", "gross_profit", "ebit", "ebitda", "net_income", "operating_cash_flow", "free_cash_flow"; margins as above; plus granular ESEF line items (annual only) and US-GAAP tags. ebitda / ebitda_margin are Nordic-only (no canonical US-GAAP EBITDA tag). peers: Explicit company list (names or tickers). When given, ranking filters are ignored. countries: Restrict the ranked universe to ["FI"], ["SE"], ["DK"], ["US"] or a combination. Omit to scan all covered markets. industry: Free-text substring match on the company's industry. tag_slugs: Precise sector/theme taxonomy filter. top_n: Ranked-mode peer-group size (1–25, default 8). Ignored when peers is given. window: Number of periods in the series (2–20, default 5). anchor_year: Most-recent period to anchor on. Omit for the latest available. frequency: "annual" (default) or "quarterly". Quarterly is supported on the Nordic keymetrics backend only; pairing it with an ESEF-only metric or countries=["US"] returns an explicit error. rank_metric: Metric used to pick the ranked peer group (defaults to metric). Ignored when peers is given. strict_resolution: In explicit-peer mode, fail closed on cross-market ties or ambiguous matches instead of silently choosing. Returns: The skill's payload: {metric, metric_label, unit, frequency, anchor_period, periods, companies, series_data, chart_series, coverage, backends_used}. On invalid input: {"error": "..."}`.
screen_quality_growers
ChatGPTMulti-year pattern screens. `pattern="quality_growth" (default): revenue CAGR + positive and improving EBIT + positive operating cash flow, excluding non-operating entity types. pattern="turnaround": companies where a turnaround may be under way (see below). This is a composite screen equivalent to calling screen_companies 3–4 times and intersecting manually. Inspired by Fundsmith / Terry Smith style quality-growth investing. **Rendering:** present the companies as a ranked table showing the quality metrics. For 5+ companies a horizontal bar chart of revenue CAGR may be added — draw it yourself per the server's "Charts" guidance (static chart, Clarifo theme, source line: primary filing + "Clarifo calculation"; no widgets). In ChatGPT (with output="python") or a host that cannot draw: render_chart(source_tool="screen_quality_growers", source_args=...) with the same arguments. A company must pass ALL criteria: 1. Revenue CAGR over compare_years ≥ min_revenue_cagr 2. EBIT positive in the anchor year 3. EBIT margin improving (anchor > compare period) 4. Operating cash flow positive in the anchor year 5. Entity type is "operating" (no investment vehicles / REITs / banks) **pattern="turnaround"** — use for "turnaround candidates", "recovering companies", "käänneyhtiöt", "yhtiöt joissa käänne tapahtumassa". A company qualifies when it had prior trouble in T-3..T-1 (net income or EBIT < 0, EBIT margin down >= 3 pp from its peak, or a revenue drop <= -3 %) AND the latest reported fiscal year T improved (profit / EBIT swung positive, loss narrowed >= 30 %, EBIT margin +2 pp from the trough, revenue back to growth, or the decline slowed). Each candidate carries turnaround_score (0-100), stage (early / confirmed), the signals and prior_trouble with their numbers, a 5-year series and a per-year source trace; rules echoes every threshold. Annual data only (ESEF + avainluvut for Nordic, 10-K XBRL for US). The screen is deterministic and spends no LLM: to confirm a candidate, call search_filing_content for restructuring / cost-savings / recovery language and judge it against rules. Only country, industry, stage, min_revenue_eur and top_n apply; min_revenue_cagr / compare_years / max_marketcap are ignored. Args: country: Scope. Pass "Nordic" to screen every Helsinki + Stockholm issuer in one call — do NOT call twice with "FI" and "SE" and merge the results yourself, the "Nordic" scope already runs the Nordic backend across both exchanges in a single pass and returns them pre-merged and pre-ranked. Also accepts "Nordics" / "Scandinavia" as aliases for the same scope. Other values: "FI" (Helsinki only), "SE" (Stockholm only), "US" (NYSE + NASDAQ). Omit to screen all markets (Nordic + US) concurrently. min_revenue_cagr: Minimum revenue CAGR % (default 10). compare_years: Look-back window in years (default 3). max_marketcap: Optional upper bound on market cap (native currency). top_n: Max results to return (default 20). pattern: "quality_growth" (default) or "turnaround". stage: turnaround only — "early" (improving, not yet profitable or not proven) or "confirmed" (back to profit with a profit/EBIT swing or margin recovery). Omit for both. industry: turnaround only — sector / industry term resolved through the shared taxonomy (e.g. "automakers", "construction", "autonvalmistajat"`). min_revenue_eur: turnaround only — latest-year revenue floor in EUR (default 20 000 000) so shells cannot dominate. Returns (quality_growth): { "quality_criteria": { ... }, "companies": [ { "company_name": "...", "quality_metrics": { "revenue_cagr_pct": 18.5, "ebit_anchor": 12000000, "ebit_margin_anchor_pct": 8.2, "ebit_margin_compare_pct": 6.1, "operating_cash_flow_anchor": 15000000 }, ... } ], "coverage": { "passed_quality_filter": 12, "returned": 12 } }
screen_segments
ChatGPTRank stored US company segment rows by metric value or year-on-year growth. metric: revenue, operating_income, gross_profit, assets or depreciation_amortization. axis: business, product, geographic, consolidation or a raw XBRL axis. year/quarter: fiscal anchor (quarter 1–4 forces quarterly); compare_years: growth lookback. screen_mode: value or growth; growth bounds are percentages, value bounds are USD. member_filter: case-insensitive label/member substrings. companies: explicit universe; industry: keyword or keyword list; index: sp500. include_types: operating, bank, reit, holding or investment_vehicle. top_n: 1–100 rows; direction: desc or asc. Returns ranked rows, coverage and inline SEC filing source URLs. Reads stored data only; no external search or mutation.
search_filing_content
ChatGPTSemantic search within the full text of company filings (annual reports, interim reports, stock exchange releases, SEC filings). This tool finds passages relevant to the query using vector similarity — great for qualitative questions, strategy, risk factors, guidance, etc. Searches both Nordic (HEL, STO) and US (NYSE, NASDAQ) filings. Company name resolution: The tool automatically resolves brand names and tickers to canonical database names (e.g. "D.R. Horton" → "HORTON D R INC /DE/", "DHI" → same). You do not need to know the exact database name. Entity detection: If you mention a company name in the query text without setting the `company parameter, the tool will try to detect it and suggest using the company parameter for better results. **Important:** This is a semantic (vector) search. Results are ranked by meaning similarity, not exact keyword match. A high score means the passage is semantically related to your query — always verify that the returned company_name matches the company you asked about. Recall improves when the query itself carries synonyms and, for Nordic filings, both English and local-language terms (e.g. "impairment goodwill arvonalentuminen liikearvo") — you are the query rewriter. **Tag filters (deterministic, no LLM):** filings are indexed with a controlled tag vocabulary. Passing topic_tags / ifrs_tags restricts results to pages actually tagged with those concepts — far more precise than vector similarity alone for accounting-policy and disclosure questions. If you pass neither, the server auto-detects tags from the query text using the same synonym tables the indexer used and reports what it applied in the response's tag_filters block (disable with auto_detect_tags=False). A tag filter that matches nothing is automatically retried without tags (tag_filters.applied: false), so tags can only help recall, never silently zero it. **Citing sources to the user:** every result carries a ready-made citation_label and citation_markdown (a human-readable label linked to source_url). Print those verbatim when citing. page_id is Clarifo's internal anchor for follow-up tool calls (get_filing_snapshot, clarifo://filing/{page_id}) — never show a raw page_id string in user-facing text. Args: query: Natural language search query. Examples: - "Neste renewable diesel production capacity 2023" - "Nokia 5G risk factors" - "Apple dividend policy" - "D.R. Horton revenue decline mortgage rates" company: Optionally restrict to a specific company (name or ticker). Fuzzy matching supported: "D.R. Horton", "DHI", "KB Home" all work. year: Optionally restrict to a specific year. quarter: Optionally restrict to a fiscal quarter (1-4). Note that the quarter field is unpopulated for part of the corpus, so a quarter filter can exclude relevant pages — prefer it only when the question is explicitly about one quarter's interim report. document_type: Optionally filter by logical type: "annual_report", "interim_report", "stock_exchange_release", "10-K", "10-Q", etc. Aliases are normalized server-side — "annual_report" also matches filings indexed as "financial_statement"/"10-K"/"20-F", and Nordic names like "tilinpäätös"/"årsredovisning" work. You do not need to know Clarifo's internal taxonomy. market: Limit search to a specific market: "nordic" or "us". Omit to auto-detect from the company name, or search Nordic by default for unscoped queries. limit: Number of passages to return (default 5, max 20). include_adjacent_pages: When true, also fetch the page before and after each Nordic hit from the same document (marked is_adjacent_page with supports: "context"). Use for accounting-policy / disclosure questions where the policy text regularly starts on the previous page or continues on the next one. US filings are unaffected. Excerpts here are capped at 500 characters (1500 for tables); for the full text of a page call get_filing_snapshot with include_text=true. index: Restrict the search to a market index. Currently only "sp500"` is supported (US-…
search_filings
ChatGPTSearch for company filings (annual reports, interim reports, stock exchange releases). `mode="calendar" answers *when* filings come out instead: scheduled interim / annual report dates from the report calendar for the window from_date..to_date (default today .. +14 days, max 120 days, past dates allowed), optionally for one company or market (nordic, us, OMXH, OMXS). Each event carries published: true once the report is in Clarifo — then read it with mode="filings" / search_filing_content. Use it for "which companies report this week?", "when is Neste's Q3?", "what came out today?". Never guess a date the calendar does not return. mode="season" answers "how is the Q3 earnings season going?": who has reported a calendar quarter (year_from + quarter; default the latest ended quarter), breadth and medians of revenue / margin / EPS change vs. a year earlier, growth momentum vs. the previous quarter, per-company signals, a sector breakdown (heatmap-ready), outliers, the largest companies' standing and the largest companies still to report. market: us (default, S&P 500), nordic, HEL/fi, STO/se or all. company (comma-separated) = companies to report on individually (watchlist). to_date = as-of date. Figures are deterministic (SEC XBRL / validated Nordic quarterly facts); feed them to render_chart or generate_visual_cards for a heatmap or cards. Returns a list of matching documents with company name, year, quarter, document type, and a docid you can use with search_filing_content. **Company name resolution:** Automatically resolves brand names and tickers to canonical database names. "D.R. Horton", "DHI", "KB Home" all work. Exact ticker matches are prioritized in results. **Date semantics in the response:** Each filing carries three independent date-shaped fields. They are not interchangeable, and any "this filing is from 2025" reasoning needs to start from the field that fits the question: - fiscal_year — the fiscal year the filing reports on. This is the canonical "year" for comparisons across companies. Apple's FY2025 closes 2025-09-27, Lennar's FY2025 closes 2025-11-30, D.R. Horton's FY2025 closes 2025-09-30. Always populated. - period_end — the actual calendar end date of the reporting period (ISO-8601). The only field safe to compare across companies on a literal calendar timeline. - filed_date — when the document was filed with the regulator. Useful for "what came out this week" questions, but the *contents* describe fiscal_year / period_end, not filed_date. - year (legacy) — alias of fiscal_year. Always populated; the historical year: null case is treated as a data bug, not a valid response. The year_from / year_to filters operate on fiscal_year. period_end / filed_date coverage: for US per-filing results (result_kind: "filing") both are sourced from the real SEC filing index and populated whenever a confident (form_type, fiscal-year) match exists. For US company-level fallback rows (result_kind: "company_index" — one row per issuer, not per filing) and for all Nordic rows, per-filing date metadata is not yet tracked; when either field can't be populated the filing carries a metadata_quality object instead of a silently-missing key, e.g. {"period_end": "missing"} (US, no confident match) or {"period_end": "not_tracked_for_nordic_filings", "filed_date": "not_tracked_for_nordic_filings"}` (Nordic). Args: company: Company name or ticker symbol. Fuzzy matching supported. Examples: "Neste", "NESTE", "Nokia", "Apple", "AAPL", "D.R. Horton", "DHI", "KB Home" year_from: Earliest fiscal year to include (e.g. 2020). year_to: Latest fiscal year to include (e.g. 2024). document_type: Filter by document type. Options: "annual_report", "interim_report", "stock_exchange_release", "10-K", "10-Q", "8-K" (US SEC filings) market: Limit to a specific market: "nordic" (HEL, STO) or "us" (NYSE, NASDAQ). Exchange-style aliases are accepted and normalized ("HEL", "STO", "O…
search_filings_sql
ChatGPTKeyword text search directly on filing tables (PostgreSQL). Reaches filings that `search_filing_content (Weaviate semantic search) cannot: US filings 2015-2024 whose text has not been vectorized yet, and any year parsed faster than it is indexed. Also useful as a fast, deterministic path when you already know the company, year, and document type and don't need semantic recall. **When to use this instead of search_filing_content:** 1. You need historical US filings (2015-2024) and search_filing_content returned nothing. 2. You have a tightly scoped query (company + year + doctype) and want exact keyword matches, not semantic similarity. **When NOT to use this:** for cross-company discovery, broad topical searches, or when you don't know the company. Use search_filing_content for those. Results carry evidence-card sources with citation_markdown — cite those verbatim. page_id is an internal anchor for get_filing_snapshot; never show it to the user. Args: company: Company name, ticker, or CIK (required). Examples: "Microsoft", "MSFT", "0000789019". query: Natural language question. Keywords are extracted and OR-combined via ILIKE. Up to 8 keywords used; keywords present on most in-scope pages are dropped (keywords_dropped). Matching is literal: Nordic pages are often stored in Finnish/Swedish, so include local-language terms ("liikevaihto", "intäkter"). year: Fiscal year filter (e.g. 2020). quarter: Quarter filter (1-4). When the quarter column is unpopulated (common in older filings), the search automatically retries including untagged rows and reports quarter_filter_relaxed: true`. document_type: Logical type or corpus spelling: "10-K", "10-Q", "annual_report", "interim_report", "20-F", etc. Aliases are expanded automatically ("annual_report" also matches "financial_statement"/"10-K"/"20-F"). market: "us" or "nordic". Auto-detected from the company if omitted. limit: Max rows (default 20, max 50). Returns: { "results": [{ "page_id": "...", "docid": "...", "year": 2016, "document_type": "10-K", "page_number": 42, "section_name": "Item 7. MD&A", "company_name": "MICROSOFT CORP", "content_excerpt": "Revenue for fiscal 2016 ...", "match_score": 3 }], "sources": [{"citation_markdown": "[...](...)", ...}], "source_policy": {...}, "total_matches": 17, "keywords_used": ["revenue", "cloud"], "keywords_dropped": ["with"], only when non-empty "no_match_diagnostics": {...}, only when results is empty: reason + hint for the retry "quarter_filter_relaxed": false, "resolution": {"input_company": "...", "resolved_name": "...", ...} }
value_company
ChatGPTCompany valuation — from a quick multiples snapshot to a full DCF model. Four modes: - `"forward_dcf" (default): intrinsic enterprise / equity / per-share value from projected free cash flow, with a WACC × growth sensitivity grid and a quality read. - "reverse_dcf": solve for the explicit-period FCF growth the **current market price** implies — "what's priced in?". Needs a price: pass current_share_price, or leave it unset and the tool reads the latest completed close from Clarifo's database so per-share upside and reverse DCF work end-to-end without manual price input. - "implied_expectations": **two-axis sensitivity grid** — for each (x, y) pair on the two chosen operating drivers, compute the DCF per-share value under otherwise-fixed assumptions. Answers "what has to be true operationally for today's price to make sense?" — e.g. revenue growth × operating margin, or revenue growth × FCF margin. Supported axes: revenue_cagr, operating_margin, fcf_margin, terminal_growth, wacc, fcf_conversion, tax_rate. Axes and values default to a sensible ladder when omitted. Base values for the non-varied drivers are derived from the trailing-3y history (median operating margin, revenue CAGR, FCF/NOPAT conversion), overridable via base_* / fcf_conversion. - "multiples": trailing valuation multiples (P/E, P/B, P/S, EV/EBITDA, EV/Sales, FCF yield) from a stored daily close and the latest annual fundamentals. No modelling assumptions needed — use for "what's NVIDIA's P/E?", "is Apple expensive on an EV/EBITDA basis?". Only company and optionally market, current_share_price, shares_outstanding are used; all DCF parameters are ignored. Works for Nordic (HEL, STO; ESEF/iXBRL) and US (NYSE, NASDAQ; SEC EDGAR) companies. Free-cash-flow history (operating cash flow minus capex) and the latest balance sheet (debt, cash, equity) are pulled from filings; the math is deterministic. **Every assumption is yours to set.** Anything left None is derived from data (WACC via CAPM with a data-derived cost of debt and a sector-aware beta ladder, FCF growth via historical CAGR) and echoed back under assumptions and inputs for audit. **Sector applicability:** the response carries sector, industry and sector_fit ("ok" / "caution" / "unsuitable"). For banks and insurers ("unsuitable") an OCF-based DCF is conceptually wrong — present the result as illustrative only and relay the quality_notes explanation; a dividend-discount or excess-return model is the accepted approach for those companies. **Rendering:** present sensitivity_grid.cells as a formatted table and highlight the contour where implied_upside crosses zero; reverse_dcf / multiples read best as KPI tables. The sensitivity modes may add one static heatmap (implied_expectations as growth x margin, forward_dcf as WACC x growth) — draw it yourself per the server's "Charts" guidance (Clarifo theme, signed colors with the value printed in each cell, source line: primary filing + "Clarifo calculation"; no sliders or other widgets). In ChatGPT (with output="python") or a host that cannot draw: render_chart(source_tool="value_company", source_args=...) with the same arguments. **Price policy:** unless current_share_price is passed, the tool reads the latest stored completed daily close from stock_daily_closes. No live price lookup or keymetrics-implied price fallback is used. price.source and price.trading_date identify the observation. Weekends and holidays use the last available trading day. If no stored price exists, the tool returns a missing-price error. Args: company: Company name or ticker (e.g. "Fiskars", "Neste", "AAPL"). mode: "forward_dcf" (default), "reverse_dcf", "implied_expectations", or "multiples". market: Restrict to "nordic" or "us". Omit to auto-detect. wacc: Discount rate as a fraction (e.g. 0.09). Default: CAPM. fcf_growth: Explicit-period FCF growth as a fraction (e.g. 0.06`). Default: historical CAG…
answer_reporting_standards
Claudeassess_reporting_change
Claudecompany_events
Claudecompare_companies
Claudecompare_document_summaries
Claudecompare_segments
Claudedd_quickscan
Claudedetect_inflection_points
Claudediscover_companies
Claudedocument_summary
Claudeforecast_financials
Claudegenerate_visual_cards
Claudeget_ceo_barometer
Claudeget_company_financials
Claudeget_company_profile
Claudeget_company_snapshot
Claudeget_document_summary
Claudeget_filing_snapshot
Claudeget_financial_statement
Claudeget_governance
Claudeget_governance_for_year
Claudeget_governance_trend
Claudeget_ifrs15_construction_example
Claudeget_industry_valuation_benchmark
Claudeget_insider_activity
Claudeget_insider_activity_trend
Claudeget_insider_clusters
Claudeget_institutional_ownership
Claudeget_institutional_ownership_trend
Claudeget_manager_portfolio
Claudeget_manager_portfolio_trend
Claudeget_position_history
Claudeget_recent_corporate_events
Claudeget_reporting_change_card
Claudeget_revenue_geography
Claudeget_sector_peer_set
Claudeget_segment_financials
Claudeget_stock_price
Claudeget_top_institutional_holders
Claudeget_valuation_multiples
Claudeget_visual_cards_guide
Claudeget_workspace_item
Claudegovernance
Claudeinsider_activity
Claudelist_company_events
Claudelist_company_segments
Claudelist_insider_transactions
Claudelist_workspace_items
Claudepeer_compare_governance
Claudereporting_change
Clauderesearch_company
Clauderesolve_entities
Claudescore_ceo_sentiment_for_company
Claudescreen_companies
Claudescreen_companies_multi
Claudescreen_metric_trend
Claudescreen_quality_growers
Claudescreen_reporting_exposure
Claudescreen_segments
Claudesearch_filing_content
Claudesearch_filings
Claudesearch_filings_sql
Claudesegment_analysis
Claudesummarise_company_events
Claudevalue_company
Claude