FinBrain MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FINBRAIN_API_KEY | Yes | Your FinBrain API key |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| available_marketsB | List available markets (e.g., 'S&P 500'). |
| available_tickersC | List available tickers for a dataset. |
| available_regionsA | List markets grouped by region. Use region codes for filtering in other endpoints. |
| app_ratings_by_tickerC | Normalized app ratings with paging over |
| analyst_ratings_by_tickerC | Normalized analyst ratings:
{
format: "json",
ticker, name,
series: [{date, rating_type, institution, signal,
target_price_from, target_price_to, target_price_raw}, ...],
series_count, series_total
}
CSV returns the sliced |
| house_trades_by_tickerD | Normalized US House trades:
{
format: "json",
ticker, name,
series: [{date, representative, trade_type,
amount_min, amount_max, amount_exact, amount_raw,
disclosure_date, owner, amount_as_filed, amount_flag}, ...],
series_count, series_total
}
|
| senate_trades_by_tickerC | Normalized US Senate trades:
{
format: "json",
ticker, name,
series: [{date, senator, trade_type,
amount_min, amount_max, amount_exact, amount_raw,
disclosure_date, owner, amount_as_filed, amount_flag}, ...],
series_count, series_total
}
|
| corporate_lobbying_by_tickerC | Normalized corporate lobbying filings:
{
format: "json",
ticker, name,
series: [{date, filing_uuid, filing_year, quarter,
client_name, registrant_name,
income, expenses, issue_codes, government_entities,
cik}, ...],
series_count, series_total
}
CSV returns the sliced |
| insider_transactions_by_tickerC | Normalized insider transactions with paging over |
| linkedin_metrics_by_tickerC | Normalized LinkedIn metrics:
JSON:
{
format: "json",
ticker, name,
series: [{date, employee_count, followers_count}, ...], # paged
series_count, series_total
}
CSV:
CSV text of the sliced |
| options_put_callC | Normalized options put/call time series. JSON: { format: "json", ticker, name, series: [{date, put_call_ratio, call_count, put_count}, ...], # paged series_count, series_total } CSV: CSV text of the sliced series. |
| predictions_by_marketC | Screener-based market predictions (flat rows with expected_* percentages). Filters by market name or region. |
| predictions_by_tickerC | Normalized ticker prediction with a time series: { ticker, name, type, last_update, expected_short/mid/long, series: [{date, mid, low, high}, ...], } |
| news_sentiment_by_tickerC | Returns normalized sentiment: { format: "json", ticker, name, series: [{date, score}, ...] (paged), series_count, series_total } If format="csv", returns CSV of the sliced series. |
| news_by_tickerB | Returns recent news articles for a ticker: { format: "json", ticker, name, series: [{date, headline, source, url}, ...] (paged), series_count, series_total } If format="csv", returns CSV of the sliced series. |
| recent_newsB | Get the most recent news articles across all tracked stocks. Returns rows with ticker, name, date, headline, source, url. |
| recent_analyst_ratingsC | Get the most recent analyst ratings across all tracked stocks. Returns rows with ticker, name, date, institution, rating_type, signal, target_price. |
| reddit_mentions_by_tickerC | Reddit mention counts across subreddits for a single ticker:
{
format: "json",
ticker, name,
series: [{date, subreddit, mentions}, ...],
series_count, series_total
}
CSV returns the sliced |
| government_contracts_by_tickerB | U.S. government contract awards for a single ticker:
{
format: "json",
ticker, name,
series: [{award_id, award_amount, award_type, awarding_agency,
awarding_sub_agency, recipient_name, start_date, end_date,
description, naics_code, naics_description,
contract_award_type, cik}, ...],
series_count, series_total
}
CSV returns the sliced |
| patent_filings_by_tickerC | USPTO granted patents mapped to a single ticker by corporate assignee:
{
format: "json",
ticker, name,
series: [{patent_id, patent_date, title, type, kind, num_claims,
num_cited_by, assignee_organization, assignee_type,
application_filing_date, filing_to_grant_days, inventors,
num_inventors, cpc_sections, cpc_subsections,
primary_cpc_section, cik}, ...],
series_count, series_total
}
CSV returns the sliced |
| screener_sentimentA | Screen sentiment across tickers by market or region. Returns rows with ticker, name, date, score. Either market or region is required. |
| screener_analyst_ratingsC | Screen analyst ratings across tickers. Returns rows with ticker, name, date, institution, rating_type, signal, target_price. |
| screener_insider_tradingA | Screen insider trades across all tickers. Returns rows with ticker, name, date, insider_name, relationship, transaction_type, shares, total_value. |
| screener_house_tradesA | Screen House of Representatives trades across all tickers. Returns rows with ticker, name, date, politician, trade_type, amount, disclosure_date (public disclosure date) and owner (beneficial owner of the account: "SELF", "SP", "DC", "JT", or an account code). owner and disclosure_date are nullable, though rare — historical rows were backfilled upstream. |
| screener_senate_tradesA | Screen Senate trades across all tickers. Returns rows with ticker, name, date, politician, trade_type, amount, disclosure_date (public disclosure date) and owner (beneficial owner of the account: "SELF", "SP", "DC", "JT", an account code, or "UNKNOWN" for blank Senate filings). owner and disclosure_date are nullable, though rare — historical rows were backfilled upstream. |
| screener_newsC | Screen news across tickers. Returns rows with ticker, name, date, headline, source, url. |
| screener_put_call_ratioB | Screen put/call ratio across tickers. Returns rows with ticker, name, date, put_call_ratio, call_count, put_count. |
| screener_linkedinA | Screen LinkedIn data across tickers by market or region. Returns rows with ticker, name, date, employee_count, followers_count, job_count. Either market or region is required. |
| screener_app_ratingsA | Screen app ratings across tickers by market or region. Returns rows with ticker, name, date, app_store_score, play_store_score. Either market or region is required. |
| screener_government_contractsA | Screen U.S. government contract awards across all tickers. Returns rows with ticker, name, award_id, award_amount, recipient_name, start_date, awarding_agency, naics_description, plus a summary with aggregate stats (total_contracts, total_tickers, total_value). |
| screener_patent_filingsA | Screen USPTO granted patents across all tickers. Returns rows with ticker, name, patent_id, patent_date, title, type, assignee_organization, primary_cpc_section, num_claims, plus a summary with aggregate stats (total_patents, total_tickers, top_cpc_sections). |
| screener_reddit_mentionsA | Screen Reddit mentions across tickers. Returns rows with ticker, name, date, total_mentions, subreddits, plus a summary with aggregate stats (top_mentioned, subreddit_names, etc.). |
| healthA | Basic server health & version info. Tries to resolve the API key and construct the SDK client (no network call), then returns versions. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 33 tools
The by_ticker, screener_, recent_, and available_ prefixes give most tools a clear scope, so the majority are unambiguous. A few pairs like options_put_call vs screener_put_call_ratio and news_by_ticker vs recent_news need closer attention, but the descriptions resolve the intended use.
Names mostly follow a consistent pattern of resource plus scope prefix/suffix, such as available_*, *_by_ticker, screener_*, and recent_*. The exceptions are minor but visible: options_put_call lacks a by_ticker suffix, and insider_transactions_by_ticker jumps to screener_insider_trading.
At 33 tools, this server is on the heavy side, largely because most datasets are exposed both as per-ticker endpoints and as screener endpoints. The count is not unreasonable for the broad financial-data domain, but it sits near the limit of what is easy to navigate.
The server provides discovery, per-ticker data, recent items, and screeners across a wide array of financial and alternative-data categories. Obvious gaps are minor: there is no screener for corporate lobbying, and a few category axes (market, region, ticker) are not applied uniformly across all tools.