welcome
The Balanced Investor Club, the thinking companion for the markets. Educational, not advice.
Should I use this
Quality & Safety
Findings (3)
- LOWin get_institutional_holdings
- LOWin about_us
- LOWin get_my_cocreator_status
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"welcome": {
"url": "https://mcp.thebalancedinvestorclub.com/http"
}
}
}Remote endpoints
https://mcp.thebalancedinvestorclub.com/httpstreamable-httphttps://thebalancedinvestorclub.com/api/mcp/mcpstreamable-httpWhat it can do
Tool inventory
Tools (57)
🟢start_here
Start exploring The Balanced Investor Club. A calm orientation — what we are, what the community is watching right now, and what to try next. Recommended as your first call.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_market_moods(sector, industry, asset_type, mood, only_with_changes, ...)
Browse Market Mood across instruments — The Balanced Investor Club's behavioural read on how short and long-term moving averages align. Educational, never predictive. Filter by sector, asset type, or mood label.
Input Schema
{
"type": "object",
"properties": {
"sector": {
"description": "Filter by sector name (e.g. 'Technology')",
"type": "string"
},
"industry": {
"description": "Filter by industry name",
"type": "string"
},
"asset_type": {
"type": "string",
"enum": [
"stock",
"etf",
"crypto",
"forex"
]
},
"mood": {
"type": "string",
"enum": [
"Strong Bullish",
"Bullish",
"Neutral",
"Bearish",
"Strong Bearish"
]
},
"only_with_changes": {
"description": "Only items where mood changed recently",
"type": "boolean"
},
"limit": {
"description": "Default 20, max 50 for anonymous tier",
"type": "number",
"minimum": 1,
"maximum": 50
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_mood_for_ticker(ticker, history_limit)
Pull the current Market Mood for a single ticker — its history, how often the mood has shifted, and any patterns we've spotted. Educational only. Mood snapshots refresh on a daily cycle and can lag the latest close by one session; use get_close_history for the freshest price.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Ticker symbol (e.g. AAPL, TSLA, BTC-USD)"
},
"history_limit": {
"description": "History points to include, default 60",
"type": "number",
"minimum": 1,
"maximum": 500
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_today_mood_changes(asset_type, mood, limit)
Mood TRANSITIONS today — instruments whose Market Mood label flipped in the last 24h (e.g. Bullish → Neutral). This is NOT price movers; mood changes only. If today is quiet, an empty result is normal — try `list_market_moods` with `only_with_changes` for the latest cycle of transitions across recent days.
Input Schema
{
"type": "object",
"properties": {
"asset_type": {
"type": "string",
"enum": [
"stock",
"etf",
"crypto",
"forex"
]
},
"mood": {
"description": "Only show changes that landed on this mood",
"type": "string",
"enum": [
"Strong Bullish",
"Bullish",
"Neutral",
"Bearish",
"Strong Bearish"
]
},
"limit": {
"type": "number",
"minimum": 1,
"maximum": 50
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_market_pulse
A snapshot of where the market sits right now — random sample of strongly bullish vs strongly bearish names, plus aggregate counts. Great as an opener to ask 'what stands out today?'
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_price_alignment(ticker, ma_type)
How a stock or ETF's price aligns with its short, medium, and long-term moving averages — and the resulting Market Mood. Educational, never predictive. Snapshots refresh on a daily cycle and can lag the latest close by one session; use get_close_history for the freshest price.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock or ETF ticker (e.g. AAPL, SPY)"
},
"ma_type": {
"description": "Moving-average type for the live default-MA read used when no official snapshot exists (default SMA). Ignored when a tuned snapshot is available.",
"type": "string",
"enum": [
"SMA",
"EMA"
]
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_crypto_price_alignment(pair, ma_type)
How a crypto pair's price aligns with its short, medium, and long-term moving averages — and the resulting Market Mood. Educational, never predictive.
Input Schema
{
"type": "object",
"properties": {
"pair": {
"type": "string",
"description": "Crypto pair in ASSET-MARKET format, e.g. BTC-USD, ETH-USD, SOL-USD"
},
"ma_type": {
"description": "Moving-average type for the live default-MA read used when no official snapshot exists (default SMA). Ignored when a tuned snapshot is available.",
"type": "string",
"enum": [
"SMA",
"EMA"
]
}
},
"required": [
"pair"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢compare_tickers(tickers, period)
Side-by-side log-returns for up to 5 tickers — stocks, ETFs, crypto. Volatility, total return, max and min. Date-aligned.
Input Schema
{
"type": "object",
"properties": {
"tickers": {
"minItems": 2,
"maxItems": 5,
"type": "array",
"items": {
"type": "string"
},
"description": "List of 2-5 tickers, e.g. ['AAPL', 'MSFT', 'NVDA']"
},
"period": {
"description": "Default 1Y",
"type": "string",
"enum": [
"1W",
"1M",
"3M",
"6M",
"1Y",
"2Y",
"5Y",
"YTD",
"MAX"
]
}
},
"required": [
"tickers"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_securities_by(field, value, limit, sort)
List every security inside a sector or industry — a way to map the surface before drilling. Returns ticker, name, sector, industry, and optionally market cap. Use this when the user asks 'what's in Technology?', 'show me the Banks industry', or to build a peer set by size for a comps analysis (sort='market_cap').
Input Schema
{
"type": "object",
"properties": {
"field": {
"type": "string",
"enum": [
"sector",
"industry"
],
"description": "Filter dimension"
},
"value": {
"type": "string",
"description": "Filter value, e.g. 'Technology', 'Banks - Diversified'"
},
"limit": {
"description": "Default 30, max 100",
"type": "number",
"minimum": 1,
"maximum": 100
},
"sort": {
"description": "Sort order. 'market_cap' adds a market-cap column (largest first) — ideal for picking comps peers by size. Caps come from our fundamentals cache, so rarely-viewed small names may show '—'. Defaults to 'name'.",
"type": "string",
"enum": [
"name",
"market_cap"
]
}
},
"required": [
"field",
"value"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_ticker_metadata(ticker)
Quick identity check on a ticker — name, sector, industry, exchange, asset type. Useful before going deeper.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Ticker symbol (e.g. AAPL)"
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢search_instruments(query, limit)
Search The Balanced Investor Club's coverage universe across stocks, ETFs, and crypto. Type a ticker, company name, or coin name — same as the search box on the website.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Ticker, name, or coin (e.g. AAPL, Apple, BTC, Tesla)"
},
"limit": {
"description": "Up to 15 results; default 10",
"type": "number",
"minimum": 1,
"maximum": 15
}
},
"required": [
"query"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_sector_returns(sector)
Market-cap-weighted average return for a sector over the last year. Pre-computed daily from public market data. GICS names like 'Consumer Discretionary' or 'Information Technology' are accepted.
Input Schema
{
"type": "object",
"properties": {
"sector": {
"type": "string",
"description": "Sector name. GICS or common labels both work, e.g. 'Technology', 'Healthcare', 'Consumer Discretionary', 'Financials'."
}
},
"required": [
"sector"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_industry_returns(industry)
Same idea as the sector view, narrower scope — average return for a single industry over the last year.
Input Schema
{
"type": "object",
"properties": {
"industry": {
"type": "string",
"description": "Industry name, e.g. 'Software - Application', 'Banks - Diversified'"
}
},
"required": [
"industry"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_income_statement(ticker, frequency, periods)
Income statement for a stock — revenue, costs, profit — the P&L, period by period. Mirrors what the Market Hub shows. Stocks only (not ETFs or crypto).
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock ticker (e.g. AAPL). Financial statements are for stocks only — not ETFs or crypto."
},
"frequency": {
"description": "Reporting frequency. Defaults to quarterly.",
"type": "string",
"enum": [
"quarterly",
"annual"
]
},
"periods": {
"description": "How many periods to include. Defaults to 5; up to 20. If fewer exist, all available periods are returned.",
"type": "number",
"minimum": 1,
"maximum": 20
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_balance_sheet(ticker, frequency, periods)
Balance sheet for a stock — assets, liabilities and equity at each period end. Mirrors what the Market Hub shows. Stocks only.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock ticker (e.g. AAPL). Financial statements are for stocks only — not ETFs or crypto."
},
"frequency": {
"description": "Reporting frequency. Defaults to quarterly.",
"type": "string",
"enum": [
"quarterly",
"annual"
]
},
"periods": {
"description": "How many periods to include. Defaults to 5; up to 20. If fewer exist, all available periods are returned.",
"type": "number",
"minimum": 1,
"maximum": 20
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_cash_flow(ticker, frequency, periods)
Cash flow statement for a stock — cash generated and used across operating, investing and financing. Mirrors what the Market Hub shows. Stocks only.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock ticker (e.g. AAPL). Financial statements are for stocks only — not ETFs or crypto."
},
"frequency": {
"description": "Reporting frequency. Defaults to quarterly.",
"type": "string",
"enum": [
"quarterly",
"annual"
]
},
"periods": {
"description": "How many periods to include. Defaults to 5; up to 20. If fewer exist, all available periods are returned.",
"type": "number",
"minimum": 1,
"maximum": 20
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_dividends(ticker, limit)
Dividend history for a stock or distributing ETF — ex-dividend date, payment date, and amount per share. Mirrors what the Market Hub shows. Not applicable to crypto.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Ticker symbol (e.g. AAPL, VTI). Stocks and distributing ETFs only — not crypto."
},
"limit": {
"description": "How many recent dividends to include. Defaults to 12.",
"type": "number",
"minimum": 1,
"maximum": 40
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_earnings_estimates(ticker, horizon, limit)
Analyst earnings estimates for upcoming quarters AND fiscal years — EPS consensus, revenue, and analyst counts per horizon. Mirrors what the Market Hub shows. Estimates, not forecasts — they shift as each date nears.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock ticker (e.g. AAPL). Earnings estimates are for individual stocks only — not ETFs or crypto."
},
"horizon": {
"description": "Optional filter by reporting horizon. Defaults to ALL horizons (quarters and fiscal years).",
"type": "string",
"enum": [
"quarterly",
"annual"
]
},
"limit": {
"description": "How many periods to include. Defaults to 12 (everything available).",
"type": "number",
"minimum": 1,
"maximum": 12
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_macro_indicators(include_keys, history)
US economic indicators — rates, jobs, growth, energy, metals, agriculture, and markets. Latest reading per indicator plus the change from the prior period. Context behind the market, not a signal about any one stock.
Input Schema
{
"type": "object",
"properties": {
"include_keys": {
"description": "Optional filter — return only these indicator keys (e.g. ['fedfunds', 'treasury10y']). Call without a filter first to see every available key; unknown keys are reported back with the valid list. When a filter is set, each matched indicator also returns its reading history (see `history`).",
"type": "array",
"items": {
"type": "string"
}
},
"history": {
"description": "Readings of history per indicator when include_keys is set. Defaults to 24; if fewer exist, all available readings are returned.",
"type": "number",
"minimum": 2,
"maximum": 60
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_market_calendar(filter, tickers, from, to, limit)
Upcoming earnings and IPOs across the market, next three months. Filter to specific tickers and/or a date range to reach your coverage. Earnings carry analyst-estimate EPS when reported. IPOs carry exchange and price range when available.
Input Schema
{
"type": "object",
"properties": {
"filter": {
"description": "Filter the calendar by event type. Defaults to all.",
"type": "string",
"enum": [
"all",
"earnings",
"ipos"
]
},
"tickers": {
"description": "Only events for these symbols (e.g. ['AAPL','MSFT','NVDA']). Without it the whole market is returned — use this to reach a coverage list.",
"type": "array",
"items": {
"type": "string"
}
},
"from": {
"description": "Only events on or after this date (YYYY-MM-DD).",
"type": "string"
},
"to": {
"description": "Only events on or before this date (YYYY-MM-DD).",
"type": "string"
},
"limit": {
"description": "Max events to return per section. Defaults to 25.",
"type": "number",
"minimum": 1,
"maximum": 50
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_valuation_inputs(ticker)
DCF building blocks for a stock in one call — current price, shares outstanding, beta, net debt, trailing FCF, 4-year FCF history and CAGR, revenue growth, and the 10-year Treasury as risk-free rate. The same pre-computed inputs the site's Valuation Lab uses; saves stitching five separate calls.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock ticker (e.g. AAPL). Stocks only — a DCF isn't meaningful for ETFs or crypto."
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_close_history(ticker, asset_type, range, interval, include_recent)
Daily close-price history for a stock, ETF, or crypto pair over a selected range. Summary stats by default (start, end, high close, low close, percent change). Optionally returns the most recent N daily closes.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Ticker (e.g. AAPL, SPY) or crypto pair (e.g. BTC-USD, ETH-USD)."
},
"asset_type": {
"description": "Asset type. Defaults to 'stock'. Use 'crypto' for pairs like BTC-USD.",
"type": "string",
"enum": [
"stock",
"crypto"
]
},
"range": {
"description": "Time range. Defaults to 1Y.",
"type": "string",
"enum": [
"1W",
"1M",
"3M",
"6M",
"1Y",
"2Y",
"ALL"
]
},
"interval": {
"description": "Sampling interval for the returned closes (last close of each week/month). Defaults to daily. Combine with range='ALL' and include_recent=60 for up to 5 years of monthly closes.",
"type": "string",
"enum": [
"daily",
"weekly",
"monthly"
]
},
"include_recent": {
"description": "Optional: also return the most recent N closes at the chosen interval (max 60).",
"type": "number",
"minimum": 1,
"maximum": 60
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_earnings_transcript(ticker, quarter, offset, limit)
Full earnings call transcript for a company and fiscal quarter — management remarks and the analyst Q&A, speaker by speaker. The primary source for guidance, segment color, and management tone. Long: use offset/limit to page through big calls.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock ticker (e.g. AAPL). Transcripts cover individual companies only."
},
"quarter": {
"type": "string",
"pattern": "^\\d{4}Q[1-4]$",
"description": "Fiscal quarter of the call, e.g. '2026Q1'. ⚠️ FISCAL, not calendar — and for a company whose fiscal year is offset they are different years. NVDA's quarter ending 2026-04-30 is 2027Q1, not 2026Q1; asking for 2026Q1 returns a call from May 2025 with no error. Do not derive this label from a calendar date. If unsure, try the label and check the speakers' own dates in the transcript before using anything from it."
},
"offset": {
"description": "Skip the first N speaker turns. Defaults to 0.",
"type": "number",
"minimum": 0
},
"limit": {
"description": "Speaker turns to return. Defaults to all.",
"type": "number",
"minimum": 1,
"maximum": 200
}
},
"required": [
"ticker",
"quarter"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_insider_transactions(ticker, limit)
Recent insider transactions for a company — who bought or sold, role, shares, and price. Insider activity is context, not a signal: executives sell for many reasons.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock ticker (e.g. AAPL). Individual companies only."
},
"limit": {
"description": "Transactions to include, newest first. Defaults to 20.",
"type": "number",
"minimum": 1,
"maximum": 100
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_market_movers(list, limit)
Top gainers, losers and most actively traded US tickers from the last completed session. Small illiquid names can dominate the gainers list — the volume column is there so you can judge. Movement is not merit.
Input Schema
{
"type": "object",
"properties": {
"list": {
"description": "Which list to return. Defaults to all three.",
"type": "string",
"enum": [
"gainers",
"losers",
"most_active"
]
},
"limit": {
"description": "Rows per list. Defaults to 10.",
"type": "number",
"minimum": 1,
"maximum": 20
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_institutional_holdings(ticker, limit)
Institutional ownership of a company — total holders, ownership percentage, how many increased vs decreased positions, and the largest holders. Quarterly 13F data: always at least one quarter behind.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock ticker (e.g. AAPL). Individual companies only."
},
"limit": {
"description": "Top holders to include. Defaults to 10.",
"type": "number",
"minimum": 1,
"maximum": 50
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢discover_community_watchlists(asset_type, sort_by, limit)
Browse public watchlists curated by our research team at The Balanced Investor Club. Filter by asset type or sort by what's popular.
Input Schema
{
"type": "object",
"properties": {
"asset_type": {
"type": "string",
"enum": [
"stock",
"etf",
"crypto",
"forex"
]
},
"sort_by": {
"description": "Default: popular",
"type": "string",
"enum": [
"popular",
"recent",
"mostItems"
]
},
"limit": {
"type": "number",
"minimum": 1,
"maximum": 30
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_watchlist_by_slug(slug)
Open a community watchlist by its slug — see the full list of constituents (tickers, sector, industry, asset type) plus follower count. Use the slug returned by `discover_community_watchlists`.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Watchlist slug, e.g. 'ai-and-tech-infrastructure'"
}
},
"required": [
"slug"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_instrument_popularity(ticker)
How many community watchlists include a given ticker — a simple read on what the club is tracking.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Ticker symbol"
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_curated_lists(ticker)
Backtested cross-MA strategies tuned for a specific ticker by The Balanced Investor Club — short/medium/long moving-average periods plus 1-year return, 3-year Sharpe, and trade count. Educational read on what historically lined up; never advice.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Ticker symbol"
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_fundamentals(ticker)
Company fundamentals for a stock — market cap, P/E, EPS, dividend yield, 52-week range, and up to 20 quarters of EPS history vs analyst consensus. Mirrors what the website shows in /analysis.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock ticker (e.g. AAPL). Not applicable to ETFs or crypto."
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_news(ticker, limit)
Recent news mentioning a ticker, with article-level sentiment. Mirrors what the website shows in /analysis.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock, ETF, or crypto ticker (e.g. AAPL, SPY, BTC-USD)"
},
"limit": {
"description": "Up to 20 articles; default 10",
"type": "number",
"minimum": 1,
"maximum": 20
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_etf_profile(ticker, holdings_limit)
Profile of an ETF — net assets, expense ratio, dividend yield, top holdings, and sector breakdown. Mirrors what the website shows in /analysis for ETFs.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "ETF ticker (e.g. SPY, QQQ, VTI)"
},
"holdings_limit": {
"description": "Top holdings to show; default 10",
"type": "number",
"minimum": 1,
"maximum": 20
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_instrument_overview(ticker)
Everything we offer about a single instrument in one shot — identification, current Market Mood + price alignment, fundamentals (stocks) or holdings (ETFs), and recent news. Equivalent of opening the /analysis page on the website. Mood and price-alignment snapshots refresh on a daily cycle and can lag the latest close by one session.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Stock, ETF, or crypto ticker (e.g. AAPL, SPY, BTC-USD)"
}
},
"required": [
"ticker"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢about_us
Who we are. Philosophy, framework, what we are — and what we are NOT. The thinking companion for the markets.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_pricing
Pricing tiers at The Balanced Investor Club — what each one unlocks. No sales pitch.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢whoami
A quick hello — your name, plan, how long you've been with The Balanced Investor Club, and today's date from our servers. Call this before stamping a date on any deliverable: the date here is authoritative, and a date you recall is not.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_my_watchlists(limit)
Read your private and followed watchlists at The Balanced Investor Club. Returns names, item counts, and how many people are following you on each.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Max watchlists per section; default 20",
"type": "number",
"minimum": 1,
"maximum": 50
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢search_my_watchlists(query)
Search across your own watchlists, the curated/official ones, and shared community lists by name. Returns up to 5 matches per bucket.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 2,
"maxLength": 100,
"description": "Search query (2-100 chars)"
}
},
"required": [
"query"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢check_ticker_in_my_watchlists(ticker, asset_type)
Quickly check whether a specific ticker is already in any watchlist you own or follow. Useful before adding it again.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Ticker symbol (e.g. AAPL, BTC-USD)"
},
"asset_type": {
"type": "string",
"enum": [
"stock",
"etf",
"crypto",
"forex"
],
"description": "Asset type for the ticker"
}
},
"required": [
"ticker",
"asset_type"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_my_trades(status, ticker, limit, include_notes, include_paper)
Your trades from the Trading Journal at The Balanced Investor Club. Optionally filter by status or ticker. Set include_notes to read back the thesis and lesson you wrote on each trade. Your data, your patterns — never advice.
Input Schema
{
"type": "object",
"properties": {
"status": {
"description": "Filter by trade status",
"type": "string",
"enum": [
"Open",
"Closed"
]
},
"ticker": {
"description": "Filter to a specific ticker",
"type": "string"
},
"limit": {
"description": "Trades to return; default 20",
"type": "number",
"minimum": 1,
"maximum": 50
},
"include_notes": {
"description": "Include the thesis, exit reason, lesson and notes written on each trade. Off by default because they are long — turn it on when looking at a handful of trades, not a whole book.",
"type": "boolean"
},
"include_paper": {
"description": "Include paper/practice trades, which are excluded from your stats. Off by default, matching the journal on the site.",
"type": "boolean"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_my_journal_stats
Pre-aggregated stats from your Trading Journal — counts, win rate, P&L, profit factor, and emotion analytics. A calm mirror, no judgement.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_my_trust_score
Your Trust Score and what built it — discipline, sizing, journaling, drawdown control. A read on your own behaviour, not a verdict.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_my_cocreator_status
Your Co-Creator status at The Balanced Investor Club — tier, days until renewal, monthly progress on the 2 feedback + 2 invite obligations, lifetime totals.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_my_briefing
Your daily briefing at The Balanced Investor Club — a read on your own activity: morning brief, journal counts, the instruments you follow, mood highlights, activity, and your learning journey. A mirror, never advice.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_watchlist(name, description, is_public, alert_frequency)
Create a new Stock Tracker — a place for the instruments you want to keep an eye on. Names are unique per user.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Name of the Stock Tracker, e.g. 'My Tech Picks' or 'Dividend Champions'. 1–100 characters."
},
"description": {
"description": "Optional. What's the focus of this list? Up to 500 characters.",
"type": "string",
"maxLength": 500
},
"is_public": {
"description": "If true, others can discover and follow this Stock Tracker. Defaults to false (only visible to you).",
"type": "boolean"
},
"alert_frequency": {
"description": "Alert frequency for changes. Defaults to none.",
"type": "string",
"enum": [
"none",
"daily",
"weekly",
"monthly"
]
}
},
"required": [
"name"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡add_to_watchlist(ticker, watchlist, asset_type, ma_type, added_price)
Add an instrument to one of your Stock Trackers. Stocks, ETFs, and crypto pairs are supported. Pre-checks for duplicates so you don't end up with the same ticker twice.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Ticker symbol (e.g. AAPL, SPY, BTC-USD)."
},
"watchlist": {
"type": "string",
"description": "Name of one of your Stock Trackers (e.g. 'My Tech Picks') or its id."
},
"asset_type": {
"type": "string",
"enum": [
"stock",
"etf",
"crypto",
"forex"
],
"description": "Asset type. Required by the underlying endpoint."
},
"ma_type": {
"description": "Moving Average Type. Defaults to EMA (Exponential).",
"type": "string",
"enum": [
"EMA",
"SMA"
]
},
"added_price": {
"description": "Optional: the price when added, for entry-price tracking.",
"type": "number",
"exclusiveMinimum": 0
}
},
"required": [
"ticker",
"watchlist",
"asset_type"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴remove_from_watchlist(ticker, watchlist, asset_type)
Remove an instrument from one of your Stock Trackers. This will remove the instrument from your stock tracker. This action cannot be undone.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Ticker symbol to remove (e.g. AAPL)."
},
"watchlist": {
"type": "string",
"description": "Name of the Stock Tracker the ticker is in, or its id."
},
"asset_type": {
"description": "Optional: helps disambiguate if the same ticker exists in multiple asset types.",
"type": "string",
"enum": [
"stock",
"etf",
"crypto",
"forex"
]
}
},
"required": [
"ticker",
"watchlist"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢follow_watchlist(watchlist_slug, alert_frequency)
Follow a public Stock Tracker so it shows up on your stock tracker page. Get updates when instruments are added or removed.
Input Schema
{
"type": "object",
"properties": {
"watchlist_slug": {
"type": "string",
"description": "Slug of the public Stock Tracker to follow (e.g. 'ai-tech-infrastructure'). Find slugs via discover_community_watchlists."
},
"alert_frequency": {
"description": "How often to receive alerts. Defaults to none.",
"type": "string",
"enum": [
"none",
"daily",
"weekly",
"monthly"
]
}
},
"required": [
"watchlist_slug"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴unfollow_watchlist(watchlist_slug)
Stop following a public Stock Tracker. It disappears from your stock tracker page and you stop receiving its updates. Your own Stock Trackers are unaffected.
Input Schema
{
"type": "object",
"properties": {
"watchlist_slug": {
"type": "string",
"description": "Slug or name of the Stock Tracker you're following. get_my_watchlists lists them."
}
},
"required": [
"watchlist_slug"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡update_watchlist(watchlist, name, description, is_public, show_anonymous, ...)
Update one of your Stock Trackers — rename it, change the description, make it public or private, or change how often it alerts you. Only the fields you pass are changed.
Input Schema
{
"type": "object",
"properties": {
"watchlist": {
"type": "string",
"description": "Name, slug or id of the Stock Tracker to update."
},
"name": {
"description": "New name. 1–100 characters.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"description": {
"description": "New description. Up to 500 characters.",
"type": "string",
"maxLength": 500
},
"is_public": {
"description": "True makes it discoverable and followable by others. False makes it visible only to you.",
"type": "boolean"
},
"show_anonymous": {
"description": "When public, hide your identity as the author.",
"type": "boolean"
},
"alert_frequency": {
"description": "How often this Stock Tracker alerts you to changes.",
"type": "string",
"enum": [
"none",
"daily",
"weekly",
"monthly"
]
}
},
"required": [
"watchlist"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴delete_watchlist(watchlist, confirm_name)
Delete one of your Stock Trackers permanently, along with every instrument in it. If it was public, its followers lose it too. This cannot be undone.
Input Schema
{
"type": "object",
"properties": {
"watchlist": {
"type": "string",
"description": "Name, slug or id of the Stock Tracker to delete."
},
"confirm_name": {
"type": "string",
"description": "The exact name of the Stock Tracker, typed back, to confirm the deletion. Ask the user for it — do not fill this in on their behalf."
}
},
"required": [
"watchlist",
"confirm_name"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪log_trade(ticker, direction, entry_date, entry_price, quantity, ...)
Log a trade you've already made into your Trading Journal — ticker, direction, entry date, price, and quantity, plus an optional thesis and how you felt. This records a past decision; it never executes anything. Stocks, ETFs, and crypto only.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Ticker or crypto pair (e.g. AAPL, SPY, BTC-USD)."
},
"direction": {
"type": "string",
"enum": [
"Long",
"Short"
],
"description": "Trade direction."
},
"entry_date": {
"type": "string",
"description": "Entry date — ISO date (YYYY-MM-DD) or datetime."
},
"entry_price": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Entry price per share/unit."
},
"quantity": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Quantity / position size."
},
"thesis": {
"description": "Optional: why this trade? What's your conviction?",
"type": "string",
"maxLength": 500
},
"notes": {
"description": "Optional: anything else to remember.",
"type": "string",
"maxLength": 1000
},
"emotional_state": {
"description": "Optional emotional state on a -4 to +4 scale: -4 Panic, -3 Fearful, -2 Anxious, -1 Uneasy, 0 Neutral, 1 Calm, 2 Confident, 3 Very Confident, 4 Euphoric.",
"type": "number",
"minimum": -4,
"maximum": 4
},
"is_test_trade": {
"description": "Mark this as a paper/practice trade. Paper trades are kept out of your real performance stats — win rate, P&L, and the emotion breakdown. Defaults to false (a real trade). Use true when trying something out, so you don't pollute your own record.",
"type": "boolean"
},
"confirm_duplicate": {
"description": "Set true to log even if a matching trade (same ticker, date, direction) already exists.",
"type": "boolean"
}
},
"required": [
"ticker",
"direction",
"entry_date",
"entry_price",
"quantity"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪close_trade(trade_id, ticker, exit_price, exit_date, exit_reason, ...)
Close an open trade in your Trading Journal with an exit reflection — exit price, date, and optionally how you felt and what you learned. Identify the trade by id, or by ticker if you have a single open position for it.
Input Schema
{
"type": "object",
"properties": {
"trade_id": {
"description": "The trade id (from list_my_trades). Preferred when known.",
"type": "string"
},
"ticker": {
"description": "Alternative to trade_id: the ticker of your single open trade.",
"type": "string"
},
"exit_price": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Exit price per share/unit."
},
"exit_date": {
"type": "string",
"description": "Exit date — ISO date (YYYY-MM-DD) or datetime."
},
"exit_reason": {
"description": "Optional: why you exited.",
"type": "string",
"maxLength": 200
},
"emotional_state": {
"description": "Optional emotional state on a -4 to +4 scale: -4 Panic, -3 Fearful, -2 Anxious, -1 Uneasy, 0 Neutral, 1 Calm, 2 Confident, 3 Very Confident, 4 Euphoric.",
"type": "number",
"minimum": -4,
"maximum": 4
},
"lesson_learned": {
"description": "Optional: a post-trade reflection — what you learned.",
"type": "string",
"maxLength": 1000
}
},
"required": [
"exit_price",
"exit_date"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡update_trade(trade_id, entry_price, quantity, thesis, notes, ...)
Update fields on an existing trade in your Trading Journal — entry price, quantity, thesis, notes, how you felt at entry, or the lesson you took from it. Identify the trade by id.
Input Schema
{
"type": "object",
"properties": {
"trade_id": {
"type": "string",
"description": "The trade id (from list_my_trades)."
},
"entry_price": {
"description": "New entry price.",
"type": "number",
"exclusiveMinimum": 0
},
"quantity": {
"description": "New quantity.",
"type": "number",
"exclusiveMinimum": 0
},
"thesis": {
"description": "Updated thesis — why this trade.",
"type": "string",
"maxLength": 500
},
"notes": {
"description": "Updated notes.",
"type": "string",
"maxLength": 1000
},
"emotional_state": {
"description": "Optional emotional state on a -4 to +4 scale: -4 Panic, -3 Fearful, -2 Anxious, -1 Uneasy, 0 Neutral, 1 Calm, 2 Confident, 3 Very Confident, 4 Euphoric. (entry)",
"type": "number",
"minimum": -4,
"maximum": 4
},
"lesson_learned": {
"description": "What you took away from this trade. Can be written long after the exit — the lesson usually arrives later than the P&L.",
"type": "string",
"maxLength": 1000
},
"is_test_trade": {
"description": "Reclassify the trade: true makes it a paper trade (excluded from your stats), false makes it a real one. Use delete_trade if what you want is to take a mistaken entry out of your record.",
"type": "boolean"
}
},
"required": [
"trade_id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴delete_trade(trade_id, confirm)
Take a trade out of your Trading Journal stats — for a mis-entry, a duplicate, or a practice trade you logged by mistake. The trade stops counting towards your win rate, P&L and emotion breakdown. The row itself is kept (the journal has no hard delete, by design), so the record of what you actually did stays honest.
Input Schema
{
"type": "object",
"properties": {
"trade_id": {
"type": "string",
"description": "The trade id to remove from your stats (from list_my_trades)."
},
"confirm": {
"type": "boolean",
"description": "Must be true. Confirms the user asked for this trade to stop counting."
}
},
"required": [
"trade_id",
"confirm"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢import_trades(csv_data, source, skip_header)
Import a batch of trades into your Trading Journal from a CSV export — Tradervue, TraderSync, Interactive Brokers, Degiro, or a generic CSV. Paste the CSV contents (including the header row). Columns are matched flexibly, so 'symbol'/'ticker', 'shares'/'quantity' and similar all work. Rows that can't be read are reported back rather than silently dropped.
Input Schema
{
"type": "object",
"properties": {
"csv_data": {
"type": "string",
"minLength": 1,
"description": "The CSV contents, header row included. Needs at least ticker, entry date, entry price and quantity columns."
},
"source": {
"description": "Which platform the export came from. Defaults to generic, which matches columns by name.",
"type": "string",
"enum": [
"tradervue",
"tradersync",
"ibkr",
"degiro",
"generic"
]
},
"skip_header": {
"description": "Whether the first row is a header. Defaults to true.",
"type": "boolean"
}
},
"required": [
"csv_data"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence