Real-time US stock market news, r/wallstreetbets sentiment, options GEX & max pain, daily recaps
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Get one precomputed AI daily news recap from the database. Use this when the user asks for a daily market recap, today's/yesterday's AI news summary, end-of-day narrative, or what mattered on a specific date. If date is omitted, this automatically returns the latest date with a daily recap, so the AI can answer without asking the user to choose a date. The daily recap synthesizes that date's intraday recap buckets into one market narrative. Set includeIntraday=true only when the user asks how the daily recap was built or wants the source intraday bucket headlines.
US Eastern calendar date, e.g. 2026-05-12. Omit to get the latest available daily recap.
Recap language. 'en' = English, 'zh' = Chinese. Default: 'en'.
If true, append source intraday bucket ids and headlines. Default: false.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Get one precomputed AI daily news recap from the database. Use this when the user asks for a daily market recap, today's/yesterday's AI news summary, end-of-day narrative, or what mattered on a specific date. If date is omitted, this automatically returns the latest date with a daily recap, so the AI can answer without asking the user to choose a date. The daily recap synthesizes that date's intraday recap buckets into one market narrative. Set includeIntraday=true only when the user asks how the daily recap was built or wants the source intraday bucket headlines.
| Argument | Type | Description |
|---|---|---|
| date | string | US Eastern calendar date, e.g. 2026-05-12. Omit to get the latest available daily recap. |
| lang | string | Recap language. 'en' = English, 'zh' = Chinese. Default: 'en'. |
| includeIntraday | boolean | If true, append source intraday bucket ids and headlines. Default: false. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "US Eastern calendar date, e.g. 2026-05-12. Omit to get the latest available daily recap."
},
"lang": {
"enum": [
"en",
"zh"
],
"type": "string",
"description": "Recap language. 'en' = English, 'zh' = Chinese. Default: 'en'."
},
"includeIntraday": {
"type": "boolean",
"description": "If true, append source intraday bucket ids and headlines. Default: false."
}
},
"additionalProperties": false
}List the most recent r/wallstreetbets DD (Due Diligence) posts that have been AI-analyzed. Returns titles only (AI-generated headline + Reddit title), affected tickers with sentiment (bullish/bearish/mixed/neutral), score, comment count, and a postId you can pass to get_dd_post for the full analysis. Cheap to call — no analysis bodies are returned. Use get_dd_post or search_dd to drill into a specific thread.
| Argument | Type | Description |
|---|---|---|
| lang | string | Headline + ticker sentiment language. Default: 'en' |
| limit | number | Number of posts per page (1-50). Default: 10 |
| offset | number | Pagination offset (0-1000). Default: 0 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lang": {
"enum": [
"en",
"zh"
],
"type": "string",
"description": "Headline + ticker sentiment language. Default: 'en'"
},
"limit": {
"type": "number",
"maximum": 50,
"minimum": 1,
"description": "Number of posts per page (1-50). Default: 10"
},
"offset": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Pagination offset (0-1000). Default: 0"
}
},
"additionalProperties": false
}Get the full bilingual AI analysis for one r/wallstreetbets DD post. Returns: AI-generated title, post summary (author's thesis + evidence + holes), discussion summary (top-rated rebuttals, OP responses, irony detection), affected tickers with sentiment, and a fact-check list — each fact-check item has a status (supported / questionable / unsupported / unclear) and source URLs when available. The original Reddit selftext is also included for context. Discover postId via get_dd_list or search_dd.
| Argument | Type | Description |
|---|---|---|
| lang | string | Analysis language. 'en' = English, 'zh' = Chinese. Default: 'en' |
| postId* | string | Reddit post id, e.g. '1tbev9x'. Get from get_dd_list or search_dd. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"postId"
],
"properties": {
"lang": {
"enum": [
"en",
"zh"
],
"type": "string",
"description": "Analysis language. 'en' = English, 'zh' = Chinese. Default: 'en'"
},
"postId": {
"type": "string",
"pattern": "^[a-z0-9_-]{2,32}$",
"description": "Reddit post id, e.g. '1tbev9x'. Get from get_dd_list or search_dd."
}
},
"additionalProperties": false
}Get precomputed AI intraday news recap buckets from the database. Use this when the user asks for intraday news analysis, same-day market narrative, what happened during the trading day, or a specific recap bucket. If bucketId is provided, this returns exactly that bucket. Otherwise it returns all buckets for date, ordered chronologically. If neither date nor bucketId is provided, it automatically returns the latest date that has intraday recap data, so the AI does not need to ask the user for a date first. Returned fields include bucket time window in US Eastern Time, source/news counts, headline, market narrative, and affected tickers. This is read-only and never triggers new AI analysis.
| Argument | Type | Description |
|---|---|---|
| date | string | US Eastern calendar date to fetch, e.g. 2026-05-12. Omit to use the latest date with intraday data. Ignored when bucketId is provided. |
| lang | string | Recap language. 'en' = English, 'zh' = Chinese. Default: 'en'. |
| limit | integer | Maximum buckets to return when bucketId is omitted (1-20). Default: 10. |
| offset | integer | Bucket pagination offset for the selected date (0-100). Default: 0. |
| bucketId | string | Exact intraday bucket id returned by list_news_recaps, e.g. 2026-05-12T14:30ET. Use this for a single bucket. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "US Eastern calendar date to fetch, e.g. 2026-05-12. Omit to use the latest date with intraday data. Ignored when bucketId is provided."
},
"lang": {
"enum": [
"en",
"zh"
],
"type": "string",
"description": "Recap language. 'en' = English, 'zh' = Chinese. Default: 'en'."
},
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Maximum buckets to return when bucketId is omitted (1-20). Default: 10."
},
"offset": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Bucket pagination offset for the selected date (0-100). Default: 0."
},
"bucketId": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}ET$",
"description": "Exact intraday bucket id returned by list_news_recaps, e.g. 2026-05-12T14:30ET. Use this for a single bucket."
}
},
"additionalProperties": false
}Get the latest live financial news from major sources (Wall Street Journal, New York Times, Bloomberg, Financial Times, CNBC, Reuters, Yahoo Finance). Returns pinned headlines (top stories, at offset=0 only) and recent news cards. Each card includes source name, timestamp (ET), title, full article text, and relevant stock tickers. By default, cross-source duplicates of the same story are folded into one card and the other outlets covering it are listed under 'Also reported by' (pass clusterDedupe=false to get every outlet's card separately). Use the 'before' cursor from previous responses to paginate forward through older news.
| Argument | Type | Description |
|---|---|---|
| lang | string | Article language. 'en' = English, 'zh' = Chinese. Default: 'en' |
| limit | number | Number of news items per page (1-20). Default: 15 |
| before | string | Time cursor for forward pagination. Pass the 'time' value of the last item from a previous response. Format: 'YYYY-MM-DD HH:MM:SS ET' |
| offset | number | Pagination offset. 0 = first page with pinned news. Default: 0 |
| sources | string | Comma-separated source filter. Valid values: wsj, nyt, bloomberg, ft, cnbc, reuters, yahoo. Omit for all sources. |
| liveOnly | boolean | Return only real-time live-coverage cards (breaking, fast-moving updates) and hide long-form analysis articles (Bloomberg Latest and the outlets' standalone articles). Use when the user wants the latest developments as they happen. Default: false (includes both live cards and articles). |
Get options chain data and Greek exposure analysis for a stock ticker. Includes spot price, available expiration dates, key levels (gamma flip, call/put walls, max pain, net GEX, bullish score, implied move, P/C OI ratio, total OI/volume), human-readable positioning insights, and per-strike net Greek exposure profiles. Supported Greeks: gamma, vanna, charm, delta, theta, vega. Useful for analyzing options market positioning, dealer hedging flows, and identifying key support/resistance levels.
| Argument | Type | Description |
|---|---|---|
| greeks | string | Comma-separated Greek metrics to include. Valid: gamma, vanna, charm, delta, theta, vega, or 'all'. Default: 'gamma' |
| ticker* | string | Stock ticker symbol (e.g. 'SPY', 'AAPL', 'QQQ'). Case-insensitive. |
| expiration | string | Specific expiration date (YYYY-MM-DD). Omit for nearest available expiration. |
| maxStrikes | integer | How many strikes to show per greek, chosen nearest to the spot price (the most trade-relevant ones). Higher = more complete gamma/greek profile but more tokens; lower = faster, cheaper, easier for small-context models. Default: 12 (compact). Use ~40 for the full profile, or ~6 for a quick glance. Key Levels and Insights are always included regardless. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ticker"
],
"properties": {
"greeks": {
"type": "string",
"description": "Comma-separated Greek metrics to include. Valid: gamma, vanna, charm, delta, theta, vega, or 'all'. Default: 'gamma'"
},
"ticker": {
"type": "string",
"description": "Stock ticker symbol (e.g. 'SPY', 'AAPL', 'QQQ'). Case-insensitive."
},
"expiration": {
"type": "string",
"description": "Specific expiration date (YYYY-MM-DD). Omit for nearest available expiration."
},
"maxStrikes": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "How many strikes to show per greek, chosen nearest to the spot price (the most trade-relevant ones). Higher = more complete gamma/greek profile but more tokens; lower = faster, cheaper, easier for small-context models. Default: 12 (compact). Use ~40 for the full profile, or ~6 for a quick glance. Key Levels and Insights are always included regardless."
}
},
"additionalProperties": false
}Get recent news articles for a specific stock ticker symbol. Articles are sourced from Google News and other financial news aggregators. Returns article titles, publication dates, source names, and URLs. Covers US-listed symbols only (non-US listings such as 9988.HK or 000660.KS are not available). If the ticker is not yet tracked, the system will automatically fetch and index its news on first request (may take a few seconds).
| Argument | Type | Description |
|---|---|---|
| limit | number | Number of articles to return (1-20). Default: 15 |
| offset | number | Pagination offset. Default: 0 |
| ticker* | string | Stock ticker symbol (e.g. 'AAPL', 'TSLA', 'NVDA'). Case-insensitive. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ticker"
],
"properties": {
"limit": {
"type": "number",
"maximum": 20,
"minimum": 1,
"description": "Number of articles to return (1-20). Default: 15"
},
"offset": {
"type": "number",
"minimum": 0,
"description": "Pagination offset. Default: 0"
},
"ticker": {
"type": "string",
"description": "Stock ticker symbol (e.g. 'AAPL', 'TSLA', 'NVDA'). Case-insensitive."
}
},
"additionalProperties": false
}Get recent posts from Donald Trump's Truth Social account (@realDonaldTrump). Each post includes AI-generated stock market impact analysis identifying affected tickers and predicted price directions. By default only returns posts with identified market impact; set showAll=true to include all posts. Use offset to paginate through older posts.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language for the market impact analysis text. 'en' = English, 'zh' = Chinese. Default: 'en' |
| limit | number | Number of posts to return (1-20). Default: 5 |
| offset | number | Pagination offset. Default: 0 |
| showAll | boolean | If true, show all posts including those without market impact. Default: false (market-impact posts only) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lang": {
"enum": [
"en",
"zh"
],
"type": "string",
"description": "Language for the market impact analysis text. 'en' = English, 'zh' = Chinese. Default: 'en'"
},
"limit": {
"type": "number",
"maximum": 20,
"minimum": 1,
"description": "Number of posts to return (1-20). Default: 5"
},
"offset": {
"type": "number",
"minimum": 0,
"description": "Pagination offset. Default: 0"
},
"showAll": {
"type": "boolean",
"description": "If true, show all posts including those without market impact. Default: false (market-impact posts only)"
}
},
"additionalProperties": false
}Get one precomputed AI weekly news recap from the database. Use this when the user asks for a weekly market recap, this week's/last week's AI news summary, or the dominant market themes across a week. Weekly recaps follow ISO week ids in YYYY-Www format and cover Monday through Sunday in US Eastern dates. If weekId is provided, it is used directly. If date is provided, the tool returns the week containing that date. If neither weekId nor date is provided, this automatically returns the latest available weekly recap. Set includeDaily=true only when the user asks for the day-by-day inputs or wants daily source headlines.
| Argument | Type | Description |
|---|---|---|
| date | string | US Eastern date inside the desired week, e.g. 2026-05-12. Ignored when weekId is supplied. |
| lang | string | Recap language. 'en' = English, 'zh' = Chinese. Default: 'en'. |
| weekId | string | ISO week id, e.g. 2026-W19. Takes precedence over date when both are supplied. |
| includeDaily | boolean | If true, append source daily recap dates and headlines. Default: false. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "US Eastern date inside the desired week, e.g. 2026-05-12. Ignored when weekId is supplied."
},
"lang": {
"enum": [
"en",
"zh"
],
"type": "string",
"description": "Recap language. 'en' = English, 'zh' = Chinese. Default: 'en'."
},
"weekId": {
"type": "string",
"pattern": "^\\d{4}-W\\d{2}$",
"description": "ISO week id, e.g. 2026-W19. Takes precedence over date when both are supplied."
},
"includeDaily": {
"type": "boolean",
"description": "If true, append source daily recap dates and headlines. Default: false."
}
},
"additionalProperties": false
}Get the AI-generated analysis report of r/wallstreetbets daily discussion threads. Reports cover market sentiment, trending tickers, notable trades, community mood, and contrarian signals. Each day may have multiple analysis runs as new comments accumulate. Use 'offset' to step back through earlier report posts and 'run' to view a specific analysis run of one post.
| Argument | Type | Description |
|---|---|---|
| run | number | Specific analysis run index within a day (0-indexed). Each day may have multiple runs as new comments come in. Omit for the latest run. |
| lang | string | Report language. 'en' = English, 'zh' = Chinese. Default: 'en' |
| offset | number | Report-post offset, newest first: 0 = the latest daily-discussion post, 1 = the one before, etc. A trading day usually has 2 posts, so this is not a day count. Default: 0 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"run": {
"type": "number",
"minimum": 0,
"description": "Specific analysis run index within a day (0-indexed). Each day may have multiple runs as new comments come in. Omit for the latest run."
},
"lang": {
"enum": [
"en",
"zh"
],
"type": "string",
"description": "Report language. 'en' = English, 'zh' = Chinese. Default: 'en'"
},
"offset": {
"type": "number",
"minimum": 0,
"description": "Report-post offset, newest first: 0 = the latest daily-discussion post, 1 = the one before, etc. A trading day usually has 2 posts, so this is not a day count. Default: 0"
}
},
"additionalProperties": false
}Get raw Reddit comments from the r/wallstreetbets daily discussion thread, top-level comments newest first. Returns one comment per line in a compact threaded format, with 2-space indentation for each reply level; a comment's own line breaks show as ' / '. Each line starts with [S ↩N]: S is the comment's Reddit score (upvotes), refreshed about every 30 minutes for each thread's ~500 best-scored comments (the header gives the time; the newest comments have had little time to collect votes), and ↩N means N replies so far (all levels, omitted when none). Threads whose scores were never refreshed (before 2026-10-25) have no vote counts: their lines show only [↩N]. Bot commands, comments scored 0 or below, and short comments nobody replied to or upvoted are filtered out. Useful for directly analyzing retail investor sentiment, popular tickers, and trading ideas.
| Argument | Type | Description |
|---|---|---|
| date | string | Specific date to get comments for (format: YYYY-MM-DD). Omit for latest available discussion. |
| limit | number | Maximum number of comments to return (1-1500). Default: 500 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"description": "Specific date to get comments for (format: YYYY-MM-DD). Omit for latest available discussion."
},
"limit": {
"type": "number",
"maximum": 1500,
"minimum": 1,
"description": "Maximum number of comments to return (1-1500). Default: 500"
}
},
"additionalProperties": false
}Discover which precomputed AI news recaps are available through the website Time Machine API. Use this automatically when a user asks what AI market recaps exist, asks for an unspecified historical daily/weekly/intraday recap, or needs valid dates/weekIds before calling a detail tool. This returns lightweight metadata only from the website Time Machine API: recap type, date or ISO week, and intraday bucket count. It does not return full narratives. For full text, call get_intraday_news_recaps, get_daily_news_recap, or get_weekly_news_recap using the returned date/weekId/bucketId. Dates are US Eastern calendar dates. Weekly recaps use ISO weeks in YYYY-Www format, Monday through Sunday.
| Argument | Type | Description |
|---|---|---|
| level | string | Filter the discovery results. Default: 'all'. Use 'intraday' for same-day buckets, 'daily' for end-of-day reports, 'weekly' for ISO-week reports. |
| limit | integer | Maximum number of metadata rows to return (1-60). Default: 30. |
| offset | integer | Pagination offset after filtering and sorting latest-first (0-1000). Default: 0. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"level": {
"enum": [
"all",
"intraday",
"daily",
"weekly"
],
"type": "string",
"description": "Filter the discovery results. Default: 'all'. Use 'intraday' for same-day buckets, 'daily' for end-of-day reports, 'weekly' for ISO-week reports."
},
"limit": {
"type": "integer",
"maximum": 60,
"minimum": 1,
"description": "Maximum number of metadata rows to return (1-60). Default: 30."
},
"offset": {
"type": "integer",
"maximum": 1000,
"minimum": 0,
"description": "Pagination offset after filtering and sorting latest-first (0-1000). Default: 0."
}
},
"additionalProperties": false
}Full-text search across r/wallstreetbets DD analyses (separate from /search which only covers news). Powered by Meilisearch, typo-tolerant. Indexes AI title, original Reddit title, tickers, post summary, discussion summary, fact-check claims, and selftext (both languages). Returns titles + tickers only; pass the returned postId to get_dd_post for the full analysis.
| Argument | Type | Description |
|---|---|---|
| lang | string | Headline language preference. Default: 'en' |
| limit | number | Results per page (1-30). Default: 10 |
| query* | string | Search query (2-100 chars). Try a ticker, theme, or keyword. |
| offset | number | Pagination offset (0-1000). Default: 0 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"lang": {
"enum": [
"en",
"zh"
],
"type": "string",
"description": "Headline language preference. Default: 'en'"
},
"limit": {
"type": "number",
"maximum": 30,
"minimum": 1,
"description": "Results per page (1-30). Default: 10"
},
"query": {
"type": "string",
"maxLength": 100,
"minLength": 2,
"description": "Search query (2-100 chars). Try a ticker, theme, or keyword."
},
"offset": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Pagination offset (0-1000). Default: 0"
}
},
"additionalProperties": false
}Full-text search across all news articles from Wall Street Journal, New York Times, Bloomberg, Financial Times, CNBC, Reuters, Yahoo Finance. Powered by Meilisearch for fast, typo-tolerant search. Results can be filtered by source and sorted by relevance (default) or time. Native-language results are ranked higher when a language preference is set.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language preference. Native-language results rank higher. Default: 'en' |
| sort | string | Sort order: 'relevance' (default) or 'time' (newest first) |
| limit | number | Number of results per page (1-20). Default: 15 |
| query* | string | Search query string (2-100 characters) |
| offset | number | Pagination offset. Default: 0 |
| sources | string | Comma-separated source filter. Valid: wsj, nyt, bloomberg, ft, cnbc, reuters, yahoo. Omit for all sources. |
| aiSummary | boolean | Return a concise AI-written summary instead of each result's full article body (fewer tokens, faster scanning); keep false when you need the complete text. Default: false. |
| marketOnly | boolean | Filter to market/finance-relevant results only, dropping general politics/lifestyle coverage. Default: false. |
| aiSummary | boolean | Return a concise AI-written summary (~80 words) in place of each article's full body. Use it to scan many stories quickly or to save tokens; keep false (full text) when you need to quote or deeply analyze the complete article. Default: false. |
| marketOnly | boolean | Filter to market/finance-relevant stories only, dropping general politics, sports and lifestyle coverage. Use when the user wants pure market news. Default: false (all news). |
| clusterDedupe | boolean | When several outlets report the SAME story, fold them into ONE card and list the others under 'Also reported by' (cross-source corroboration) instead of returning near-duplicate cards. Keeps the feed concise. Default: true. Set false only when you need each outlet's separate wording/framing, or want to gauge how many outlets covered a story. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lang": {
"enum": [
"en",
"zh"
],
"type": "string",
"description": "Article language. 'en' = English, 'zh' = Chinese. Default: 'en'"
},
"limit": {
"type": "number",
"maximum": 20,
"minimum": 1,
"description": "Number of news items per page (1-20). Default: 15"
},
"before": {
"type": "string",
"description": "Time cursor for forward pagination. Pass the 'time' value of the last item from a previous response. Format: 'YYYY-MM-DD HH:MM:SS ET'"
},
"offset": {
"type": "number",
"minimum": 0,
"description": "Pagination offset. 0 = first page with pinned news. Default: 0"
},
"sources": {
"type": "string",
"description": "Comma-separated source filter. Valid values: wsj, nyt, bloomberg, ft, cnbc, reuters, yahoo. Omit for all sources."
},
"liveOnly": {
"type": "boolean",
"description": "Return only real-time live-coverage cards (breaking, fast-moving updates) and hide long-form analysis articles (Bloomberg Latest and the outlets' standalone articles). Use when the user wants the latest developments as they happen. Default: false (includes both live cards and articles)."
},
"aiSummary": {
"type": "boolean",
"description": "Return a concise AI-written summary (~80 words) in place of each article's full body. Use it to scan many stories quickly or to save tokens; keep false (full text) when you need to quote or deeply analyze the complete article. Default: false."
},
"marketOnly": {
"type": "boolean",
"description": "Filter to market/finance-relevant stories only, dropping general politics, sports and lifestyle coverage. Use when the user wants pure market news. Default: false (all news)."
},
"clusterDedupe": {
"type": "boolean",
"description": "When several outlets report the SAME story, fold them into ONE card and list the others under 'Also reported by' (cross-source corroboration) instead of returning near-duplicate cards. Keeps the feed concise. Default: true. Set false only when you need each outlet's separate wording/framing, or want to gauge how many outlets covered a story."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"lang": {
"enum": [
"en",
"zh"
],
"type": "string",
"description": "Language preference. Native-language results rank higher. Default: 'en'"
},
"sort": {
"enum": [
"relevance",
"time"
],
"type": "string",
"description": "Sort order: 'relevance' (default) or 'time' (newest first)"
},
"limit": {
"type": "number",
"maximum": 20,
"minimum": 1,
"description": "Number of results per page (1-20). Default: 15"
},
"query": {
"type": "string",
"maxLength": 100,
"minLength": 2,
"description": "Search query string (2-100 characters)"
},
"offset": {
"type": "number",
"minimum": 0,
"description": "Pagination offset. Default: 0"
},
"sources": {
"type": "string",
"description": "Comma-separated source filter. Valid: wsj, nyt, bloomberg, ft, cnbc, reuters, yahoo. Omit for all sources."
},
"aiSummary": {
"type": "boolean",
"description": "Return a concise AI-written summary instead of each result's full article body (fewer tokens, faster scanning); keep false when you need the complete text. Default: false."
},
"marketOnly": {
"type": "boolean",
"description": "Filter to market/finance-relevant results only, dropping general politics/lifestyle coverage. Default: false."
}
},
"additionalProperties": false
}