The CoreThesis MCP server
Institutional-grade equity research as MCP tools. SEC filings, earnings, news, press, and macro context — loaded straight into your AI.
Quickstart
Two minutes.
Paste into claude_desktop_config.json (or your client's MCP config), restart, and ask the model about any ticker in the universe.
{
"mcpServers": {
"corethesis": {
"url": "https://mcp.corethesis.io/mcp",
"headers": { "Authorization": "Bearer <YOUR_API_KEY>" }
}
}
}What you can look at
Every ticker in the universe works. Some are ready this second; the rest are built when you ask.
Reports already built — no wait. Ask for one ticker ("is PLTR ready?") or the whole list. Free. The Complete Macro Report is on this list too — it just isn’t a ticker, so ask for it by name.
Universe page →Every ticker we can service. Covered means we can build it, not that it is instant — the first request takes about 30 minutes. Pin it to a watchlist and it stays ready.
Browse all tickers →How you keep the non-instant names current: pinned tickers refresh on their own, so they are ready when you next ask.
Your watchlists →Not in the universe at all? Say "request coverage for <TICKER>" and it goes to the team.
Newsletter readers get a free watchlist slot on the instant names — opt in from Settings.
Authentication
Two paths — pick one.
Browser-based PKCE flow. The user approves your client once; you store an access token + refresh token and pass the access token as a Bearer header.
Static `ct_live_…` bearer token created at /keys. Best for scripts, CI, and custom clients where you can't run a browser flow.
Tools
37 actions your AI can invoke, organized by product.
US Stock Market Reports
17 toolsPer-ticker coverage — analysis, news, press releases, and statements from the latest 10-K.
analyze_stockThe Complete Stock Report for a covered ticker — macro context, fundamentals, technicals, news and press, rolled up into one institutional-grade synthesis. Delivered in your chosen voice — Investor (plain and direct) or Analyst (full technical) — set under Settings → Report preferences. Calling this once stamps free duplicates for the six Focused Reports (business model, financial quality, management, market structure, analyst consensus, insider transactions) for the same ticker — they cost nothing until the underlying analysis refreshes.
- ticker : string — Uppercase symbol (e.g. AAPL, NVDA, BRK.B).
get_news_reportAI-summarized news for a ticker — themes, entities, sentiment, and a long-form readout of what actually moved the story.
- ticker : string — Ticker symbol.
get_press_releases_reportAI-summarized company press releases for a ticker — what management said, what changed, what to watch.
- ticker : string — Ticker symbol.
get_stock_business_model_reportBusiness model & competitive position — what the company does, segments, moat, customer concentration, key risks to the model. Free for any ticker you have already run analyze_stock on, until the underlying analysis refreshes.
- ticker : string — Ticker symbol.
get_stock_financial_quality_reportFinancial quality & trajectory — multi-year revenue / margin trajectory, cash-flow quality, balance-sheet strength, capital intensity. Free for any ticker you have already run analyze_stock on.
- ticker : string — Ticker symbol.
get_stock_management_signals_reportManagement signals & capital allocation — capital allocation track record, insider-aligned compensation, recent guidance posture, M&A discipline. Free for any ticker you have already run analyze_stock on.
- ticker : string — Ticker symbol.
get_stock_market_structure_reportMarket structure & price context — liquidity, ownership concentration, short interest, options skew, recent price / volume regime. Free for any ticker you have already run analyze_stock on.
- ticker : string — Ticker symbol.
get_stock_analyst_consensus_reportAnalyst consensus & expectations — sell-side estimates, revisions, dispersion, target prices, upgrade / downgrade history. Free for any ticker you have already run analyze_stock on.
- ticker : string — Ticker symbol.
get_stock_insider_transactions_reportInsider transactions — recent Form 4 buys / sells, cluster patterns, executive vs. director activity, signal strength. Free for any ticker you have already run analyze_stock on.
- ticker : string — Ticker symbol.
get_balance_sheetBalance sheet — assets, liabilities, equity from the latest annual 10-K (26 fields). Annual cadence.
- ticker : string — Ticker symbol.
get_cashflowCash flow statement — operating, investing, financing activities from the latest annual 10-K (21 fields). Annual cadence.
- ticker : string — Ticker symbol.
get_income_statementIncome statement — revenue, costs, margins, EPS from the latest annual 10-K (18 fields). Annual cadence.
- ticker : string — Ticker symbol.
get_articlesRaw news articles AND official press releases for a ticker in one call. Free — never counts against your plan. Use get_news_report / get_press_releases_report when you want a summarized read instead of raw items.
- ticker : string — Ticker symbol.
- days_back : int? — News lookback in days (default 15, max 90).
- months_back : int? — Press-release lookback in months (default 12, max 24).
instant_listThe tickers whose reports are already on file, so they come back the moment you ask — no wait. Free, never counts against your plan. This is a head start, not the edge of coverage: every ticker in the universe works, and anything not already on file should be available about 30 minutes after you ask for it, joining the ready list from then on. The ready set keeps growing. Pass a ticker to check just that one. The Complete Macro Report is on the same list and comes back as its own field — it is the economy rather than a company, so ask for it with get_macro_report.
- ticker : string? — Check one symbol — "is PLTR ready right now?" Pass MACRO for the macro report.
list_tickersLists the full CoreThesis analysis universe (~2,967 US-listed tickers). Free — never counts against your plan. Call without arguments for all symbols plus per-sector counts, or filter by sector / search to get matching names with company details.
- sector : string? — Filter to one sector (case-insensitive).
- search : string? — Substring match on ticker or company name.
get_pre_earnings_shortlistBuilds the week's pre-earnings shortlist in one call. Screens the earnings calendar for the entry window, drops OTC and unlisted names, applies a $10 price floor, pulls true trailing three-month option volume for what survives, applies the option-liquidity floor, trims to the top 20, and tags each row BMO or AMC — confirmed from the calendar where available, web-verified otherwise, excluded rather than guessed. A liquidity screen, not a recommendation.
- days_from : int? — Start of the earnings window, in days from today.
- days_to : int? — End of the earnings window, in days from today.
- opt_window_days : int? — Lookback for the option-volume average.
- max_results : int? — Overflow trim size (default 20).
get_pre_earnings_consensus_researchFor each ticker on the shortlist, returns the four consensus dimensions — where analyst targets sit, how widely they disagree, which way estimates are being revised, and the story the sell side is telling. Covered names come back instantly; anything without a current report comes back with an id you can check, and should be available shortly.
- tickers : string[] — The shortlist tickers.
US Macro Analysis Reports
8 toolsMarket-wide context — monetary, inflation, rates, growth, employment, markets, geopolitics.
get_macro_reportThe Complete Macro Report — monetary policy, inflation, rates, growth, employment, markets, and macro news — woven into one market-wide synthesis. Delivered in your chosen voice — Investor (plain and direct) or Analyst (full technical) — set under Settings → Report preferences.
get_macro_monetary_reportMonetary policy & liquidity — Fed funds (target + effective), Fed balance sheet, USD index, M2 money supply, policy uncertainty.
get_macro_inflation_reportInflation — CPI (headline + core), PCE (headline + core, Fed's preferred), PPI, breakeven inflation, 5Y/5Y forwards.
get_macro_fixed_income_reportFixed income & credit — full Treasury yield curve (1M–30Y), TIPS real yields, recession-signal spreads (10Y–2Y, 10Y–3M), IG / HY / BBB OAS, mortgage rate.
get_macro_growth_reportGrowth & economic activity — real GDP, industrial production, retail sales, consumer sentiment, housing, ISM Manufacturing + Services PMI sub-indices, NFCI.
get_macro_employment_reportEmployment & labor — nonfarm payrolls, U-3 unemployment, jobless claims, participation, average hourly earnings, JOLTS openings + quits.
get_macro_markets_reportMarkets — S&P / Nasdaq / Dow / Russell 2000, VIX (level + percentile + term structure), valuation (P/E, ERP), breadth, put/call, margin debt, COT positioning (SPX / oil / gold), 11 sector ETFs.
get_macro_news_reportMacro news & geopolitics — the top macro and geopolitical stories of the past week.
Account & Utilities
12 toolsWatchlists, history, search, ticker requests, and the self-describing reference.
start_hereAn introduction to CoreThesis for anyone getting to know it — what to say and which tool call each phrase runs, how coverage works (the Instant Report List and the wider universe), how watchlists work and what they cost, the report voice, and the free trial. No arguments: one call returns the whole guide. Free: it never counts against your plan. Greeting CoreThesis by name — "hello CoreThesis" — opens it too.
get_my_historyYour recent fresh-report history on this server — what you queried, when, and whether it succeeded.
- limit : int? — Max rows 1-100 (default 20).
- tool_name : string? — Filter by tool name.
get_report_by_idRe-fetches one of your earlier reports by id — useful for stable citations. Report ids are returned by every report tool.
- report_id : uuid — The report UUID.
search_reportsSearch your past reports by ticker, category, or date range.
- ticker : string? — Filter by ticker.
- from : date? — ISO date — created_at >= this.
- to : date? — ISO date — created_at <= this.
- limit : int? — 1-100 (default 20).
list_watchlistsList all of your saved watchlists, their tickers, and each list's email schedule. Free. Call it before update_watchlist — that tool replaces the whole ticker array.
create_watchlistCreate a new watchlist. Adding a ticker costs 1 fresh report the first time, or 0.5 if it's on the Instant Report List — and nothing if you already have that ticker's current report. After that, 0.5 fresh reports per update, capped at 10 per ticker per month. You're shown the cost and asked to confirm before anything is charged. The Complete Macro Report can be tracked the same way: pass MACRO, and it is priced as an Instant Report List member.
- name : string — Watchlist name (unique per user).
- tickers : string[] — Initial tickers (1-200).
- email_cadence : string? — This list's email schedule: off | daily | weekly | monthly (default weekly).
update_watchlistRename a watchlist, replace its tickers, or set its own email schedule. Only NEW tickers are charged — re-saving a list never re-charges what's already on it. Renaming or changing the schedule is free.
- id : uuid — Watchlist UUID.
- name : string? — New name.
- tickers : string[]? — Replacement ticker list — REPLACES the existing one, so include the tickers you are keeping.
- email_cadence : string? — This list's email schedule: off | daily | weekly | monthly.
set_watchlist_email_settingsHow often CoreThesis emails you about your watchlists. Choose a schedule per watchlist ('per_watchlist') or one bundled email covering everything on one schedule ('bundled', the default). Call with no arguments to read your current setup. Free.
- mode : string? — 'per_watchlist' or 'bundled'. Per-list schedules are kept either way, so switching back and forth loses nothing.
- bundled_cadence : string? — Schedule for the single bundled email: off | daily | weekly | monthly.
- watchlist_id : uuid? — Shortcut to set one list's schedule in the same call. Requires watchlist_cadence.
- watchlist_cadence : string? — Schedule for watchlist_id: off | daily | weekly | monthly.
delete_watchlistDelete one of your watchlists.
- id : uuid — Watchlist UUID.
request_tickerRequest a ticker not yet in the CoreThesis universe. Submitted to our team for review and added if it fits coverage. Idempotent per (user, ticker).
- ticker : string — Ticker to request.
- notes : string? — Optional context (≤500 chars).
get_synthesis_jobChecks the status of an in-flight report generation (returned when a brand-new ticker's first report is still being built).
- job_id : uuid — The id returned with a not-ready-yet response.
get_documentationReturns this reference as structured JSON — so an LLM can self-onboard without leaving the MCP session. Built for the model: for a readable introduction, use start_here.
Resources
Browsable data surfaces.
corethesis://macro/latestLatest macro report.corethesis://ticker/{symbol}/latestMost recent report for a ticker.corethesis://watchlistsUser's watchlists.corethesis://activity/recentUser's recent fresh-report activity.corethesis://catalogueAll tickers currently covered.corethesis://filings/{symbol}/latestLatest filing metadata for a ticker.corethesis://transcripts/{symbol}/latestLatest earnings-call transcript.Prompts
Reusable LLM templates.
daily_briefingBuild a morning briefing on the user's watchlist.
deep_diveLong-form deep dive on a single ticker.
compare_twoHead-to-head comparison of two tickers.
earnings_previewPre-earnings setup: expectations, whisper, positioning.
earnings_recapPost-earnings recap: beat/miss + narrative shift.
risk_scanScan for fresh risk factors in latest filings.
macro_impactHow current macro impacts a specific position.
insider_readInsider-activity read across the watchlist.
sector_sweepSweep a sector for the strongest signal.
thesis_stress_testPressure-test a user-supplied thesis against the latest data.
Use cases
What people actually do with it.
Run analyze_stock on your target, then get_balance_sheet / get_income_statement / get_cashflow to drill into the specific aspect you're unsure about. Same source your AI is already citing — just zoomed in.
list_watchlists → loop analyze_stock + get_news_report on each name. Your AI assembles a ranked overnight briefing tailored to what you actually hold.
Before the print: analyze_stock + get_press_releases_report to capture management posture. After: search_reports to compare prior quarters and flag guidance deltas.
Ticker not in the catalogue? request_ticker queues it for review — idempotent per user, so repeat asks just refresh the timestamp.
Pricing
Two currencies — instant and fresh. No subscription, no monthly cap.
CoreThesis counts in reports, not dollars, and there are two kinds. Instant reports come free with your account and redeem on any Instant Report List ticker — those reports are always current, so you get them the moment you ask. Fresh reports are what you top up with, and they work on every covered ticker — including ones we build on first request.
10 granted at signup · lifetime, no card required · redeem on any Instant Report List ticker, or on the Complete Macro Report
$0.75 each via top-up · redeem on any covered ticker · no subscription, no monthly cap, balance never expires
1 fresh report to add a ticker (0.5 on the Instant Report List, free if you already have that ticker's current report), then 0.5 per update · capped at 10 per ticker per month
Error codes
What your AI will see when something fails.
unauthorizedBearer token missing, invalid, or revoked.quota_exceededTrial reports exhausted and your balance can’t cover the call.not_foundTicker outside catalogue, or report id stale.validation_errorTool args failed input validation.upstream_errorA required data source was temporarily unavailable.What's new
Recent changes, newest first.
Subscriptions are gone. There is nothing to pick and nothing to renew: you start with 10 free fresh reports that never expire, then pay 75¢ per fresh report from a balance you top up. We also removed the usage ceiling from the dashboard, because there isn't one — you'll never see “N of 500” again.
The perk is still completely free — one ticker from the Instant Report List tracked on us, and we'll put it on a watchlist for you (starting one if you don't have any). What's new is that it can be re-pointed once a month rather than at will, so choose carefully. Picked the wrong one? Email support and we'll make a one-time exception. If you'd just paid to add that ticker, we refund it.
Set off, daily, weekly or monthly per watchlist instead of one setting for everything — daily on your portfolio, nothing on a list you're only monitoring. Prefer it all in one email? Keep the bundled schedule, which is still the default. Change a list's schedule on its own page, or the bundled one in Settings → Notifications.
Adding a ticker to a watchlist costs 1 report call, or 0.5 if it's on the Instant Report List — and nothing at all if you already have that ticker's current report. You see the exact cost and confirm before anything is charged, on the dashboard and in conversation. New names don't wait for a scheduled pass either: the report should be available in about 30 minutes.
Ask "what stocks can I look at right now?" and you get the tickers whose reports are already on file, so they come back with no wait. Everything else in the universe still works — ask for it and its report should be available in about 30 minutes, and it joins the ready list from then on.
Ask what CoreThesis can do and get a plain-language tour with copy-pasteable prompts, instead of a machine reference. One call, no arguments: what to say, what you can look at right now, how the report voice works, and what your trial covers.
Adding a ticker to a watchlist now quotes its price before you commit: 0.5 report calls each time that ticker's report updates, capped at 10 report calls per ticker per month. Remove a ticker any time to stop the charges.
No monthly fee and the balance never expires. Pay-as-you-go also covers overage past a plan cap, so a report is never silently refused while you have balance.
Trial and affiliate accounts can now pin the curated catalogue to a watchlist and see tracking work end to end before paying.
analyze_stock, get_news_report, and get_press_releases_report refresh on their own instead of handing you stale text. If we do not already hold a current report you are told when it should be available and given a way to check, never old content presented as new.
Ready to connect?
Start the free trial — no card, no time limit. Paste the snippet, restart your client, ask about any ticker.