| name | parallax-should-i-buy |
| description | "Quick stock evaluation: company overview, Parallax factor scores, financial health, score trends, macro context, dividends, news, and analyst outlook. Plain language output. Accepts plain ticker (AAPL) or RIC (AAPL.O). NOT for portfolio analysis (use /parallax-morning-brief), not for full due diligence (use /parallax-due-diligence), not for backtesting (use /backtest)." |
Should I Buy
Quick, plain-language stock evaluation using Parallax MCP tools.
Usage
/parallax-should-i-buy AAPL
/parallax-should-i-buy MSFT.O
/parallax-should-i-buy 005930.KS
/parallax-should-i-buy AAPL zh-CN
/parallax-should-i-buy 005930.KS th
Accepts plain tickers (auto-converts to RIC) or RIC format directly. Optional second positional arg sets the output language โ one of en (default), zh-CN, zh-TW, zh-HK, th. Anything else falls back to en with a warning.
Workflow
Execute using mcp__claude_ai_Parallax__* tools. JIT-load _parallax/parallax-conventions.md for execution mode, RIC resolution, fallback patterns, and HK ambiguity protocol. JIT-load _parallax/house-view/loader.md for active-view validation and single-stock conflict surfacing.
Step 0 โ Tool Loading & Active House View
Call ToolSearch with query "+Parallax" to load the deferred MCP tool schemas before the first mcp__claude_ai_Parallax__* call.
Per loader.md ยง1-ยง2 + ยง7.1/ยง7.2/ยง7.3. If view present, capture tilt vector + excludes. Do NOT apply tilts to scoring. During output rendering (see Output Format below), surface: (a) the blanket House View Note immediately after The Scores (ยง7.1), (b) an inline peer-suggest token at the Risk vs Peers section if Parallax's peer-suggest sits on a view-UW sector or the excludes list (ยง7.2), (c) an inline tension banner at The Scores if total_score โฅ 7 AND the stock's sector is UW in the view (ยง7.3). Flag, do not filter โ peer suggestions stay in the table.
Step 1 โ Resolve Ticker
Use get_company_info with the plain ticker or RIC. If empty, retry with exchange suffixes per shared conventions. For .HK/numeric codes, apply the HK ambiguity cross-check.
Step 2 โ Fire data calls in parallel
Once RIC is confirmed, call all of the following simultaneously:
| Tool | Parameters | Notes |
|---|
get_peer_snapshot | symbol | Factor scores + peer ranking |
get_financials | symbol, statement="summary" | Revenue/income narrative |
get_score_analysis | symbol | 52-week factor trend (server default) |
get_stock_outlook | symbol, aspect="analyst_targets" | Price targets |
get_stock_outlook | symbol, aspect="recommendations" | Buy/hold/sell |
get_stock_outlook | symbol, aspect="risk_return" | Risk/return vs peers |
get_stock_outlook | symbol, aspect="dividends", limit as int 8 (non-default; default is 20 โ see conventions ยง0.1) | Dividend history |
get_news_synthesis | symbol | Async โ don't block output |
Step 3 โ Macro context
After Step 1 resolves (need company info for market reasoning):
- Call
list_macro_countries to check coverage.
- Identify relevant markets (home market + key revenue geographies). Cap at 2 markets.
- Call
macro_analyst with component="tactical" for each relevant covered market.
If no covered markets are relevant, skip macro section.
Step 4 โ Interpret and explain
- Call
explain_methodology for any notably high (โฅ8) or low (โค3) factor score.
- Synthesize all data into plain-language output.
- Apply graceful fallback patterns from shared conventions for any missing data.
Output Format
Present as a friendly, structured report. When an active house view is loaded, JIT-load _parallax/house-view/render_helpers.md and route every ยง7 flag through render_view_conflict() โ do not hand-construct the strings.
- The Company (what they do, how big)
- The Scores (simple table with plain-English interpretation; include 52-week trend direction โ e.g., "Quality trending up from 5.8 to 7.2")
- If view active: check ยง7.3 tension condition (
total_score >= 7.0 AND view.tilts.sectors[stock_sector] <= -1). If true, render the tension banner via render_view_conflict(kind="score_tension", ...) directly below the scores table.
- House View Note (only if view active and stock conflicts with view) โ render via
render_view_conflict(kind="blanket", ...) per loader.md ยง7.1. This section appears HERE โ immediately after The Scores โ so the reader sees the view lens before reading the rest. Not at the bottom of the output.
- Financial Health (green/yellow/red traffic light metaphor)
- Macro Context (2-3 sentences on the relevant economic environment โ skip if no covered markets)
- Dividends (yield, consistency, recent changes โ or "Not a dividend payer" if none)
- Risk vs Peers (risk/return profile relative to peer group)
- If view active AND
get_peer_snapshot.suggestion returned a peer: check ยง7.2 condition (peer's sector tilt โค -1 in view, or peer ticker on excludes). If true, render the inline token via render_view_conflict(kind="peer_suggest", ...) immediately under the Risk vs Peers section. Flag, do not filter โ the peer stays in the table.
- Recent News (bullets)
- Analyst View (price target range, consensus)
- Bottom Line (balanced 2-sentence summary โ pros and cons, not a recommendation)
Append audit log entry per loader.md ยง6.
If active view: use the view-aware disclaimer per loader.md ยง5. Otherwise:
"This is informational analysis based on Parallax factor scores, not investment advice. All outputs should be reviewed by qualified professionals before any investment decisions."
Step 5 โ Translate output (conditional, terminal)
This step runs ONLY when the user supplied a second positional arg AND that arg is not en.
Imperative directive โ do not skip. Capture two things from the rendered English output before invoking the translator:
- The full body โ every section in the Output Format above, in order: The Company, The Scores, House View Note (if rendered), Financial Health, Macro Context, Dividends, Risk vs Peers, Recent News, Analyst View, Bottom Line, audit log entry, Disclaimer. Both the audit log entry (per loader.md ยง6) and the Disclaimer (per loader.md ยง5 if view active, otherwise the standard wording at the bottom of this file) are in scope.
- Which disclaimer variant was rendered (view-aware vs. standard). Used by the boundary check below.
Variant routing (mechanism is explicit โ the translator skill has no parameter slot, only prose; we use a delimited routing block so the translator does not echo it). Invoke the appropriate translator skill with the input shaped as follows:
ROUTING DIRECTIVE โ DO NOT TRANSLATE OR ECHO THIS BLOCK:
target_variant: <variant>
source_language: en
begin_content_below_separator: true
---
<rendered prose body>
Variant routing table:
zh-CN โ /translate-chinese-finance, target_variant: zh-CN
zh-TW โ /translate-chinese-finance, target_variant: zh-TW
zh-HK โ /translate-chinese-finance, target_variant: zh-HK โ the routing block is REQUIRED for HK because otherwise the Chinese translator pauses to ask the user (per its SKILL.md Greater-China default rules) and breaks the automated chain.
th โ /translate-thai-finance โ target_variant line may be omitted (Thai has no branching), but the routing block (with the marker line and --- separator) is still REQUIRED so the translator does not echo any leading meta into output.
The translator skill consumes the rendered prose, NOT the raw MCP tool responses. Do not pass get_company_info JSON or get_score_analysis payloads through the translator โ they are structural data, not narrative.
Translator-failure handling:
- If the translator fails or returns an empty/partial result, output the original English with a one-line warning footer:
> Translation to <lang> failed; output shown in English. Re-run if the issue is transient.
- If the language arg is unrecognized (anything other than the five values listed in Usage), output the original English with:
> Language '<arg>' not supported; output shown in English. Supported: en, zh-CN, zh-TW, zh-HK, th.
- Translator output replaces the English output in the chat; do not show both.
Disclaimer boundary check. Translators are instructed to preserve disclaimer wording per _parallax/parallax-conventions.md ยง9, but compliance is not guaranteed. After translation completes, if the disclaimer is missing from the translated output:
-
First try a single-section re-translation pass. Invoke the same translator skill with the same routing block (variant unchanged), passing only the original English disclaimer text as the body. Append the result to the translated output. This keeps the entire output in the target language for the common case (translator merely dropped the disclaimer).
-
If the re-translation pass fails or returns empty, fall back to appending the original English disclaimer text โ but use the disclaimer that was actually rendered in the English output (view-aware per loader.md ยง5 if the session has an active house view, otherwise the standard wording). Do NOT re-append the standard disclaimer unconditionally โ that would substitute the wrong text in any view-active session.
-
Audit, do not surface. When the boundary check fires (either step 1 or step 2), record the event in the existing audit log entry's notes field per loader.md ยง6.2 (e.g., notes: "disclaimer boundary check fired โ re-translated" or notes: "disclaimer boundary check fired โ english fallback"). Do NOT add a custom key to the audit entry โ loader.md ยง6.3 forbids skill-specific custom keys; notes is the schema-compliant landing spot for free-text traces. Do NOT add a user-visible footer โ the appended content is correct either way and a technical English note in an otherwise translated document defeats the purpose of the re-translation pass.