FinBridge MCP server

Official-source financial data for AI agents: Korea, US, Taiwan, Japan, Europe. 37 tools, free tier.

83/100?Number 5 of 1,134 in Finance and Market Data

verified publishersource repositorytool list publishedupdated recentlyhosted endpointactive entryno credentials

How this score is calculated

Hosted VERIFIED Finance and Market Data

Details

Registry name
kr.gronox/finbridge
Publisher
gronox
Version
0.1.3
Distribution
Hosted. the publisher runs this server and your client connects to their URL over HTTP. Nothing to install, but your requests go to a third party.
Transports
streamable-http
Source repository
Jakechj/finbridge-mcp
First published
Registry updated
Credentials required
-
Schema generation
2025-12-11

Hosted endpoints

Endpoint 1

URL
https://mcp.gronox.kr/mcp
Transport
streamable-http
Authentication
api-key

Install FinBridge

Pick your client. The configuration below is generated from this server's published package and endpoint data.

Claude Code command line

Configuration file: .mcp.json or ~/.claude.json

Hosted endpoint
claude mcp add finbridge --transport http https://mcp.gronox.kr/mcp

Nothing to install. The client connects to the publisher's URL.

Check it worked: Run claude mcp list and check the server reports connected.

Official Claude Code MCP documentation

Cursor IDE

Configuration file: .cursor/mcp.json or ~/.cursor/mcp.json

Hosted endpoint
{
  "mcpServers": {
    "finbridge": {
      "type": "http",
      "url": "https://mcp.gronox.kr/mcp"
    }
  }
}

Nothing to install. The client connects to the publisher's URL.

Check it worked: The server appears under Settings, then MCP with a green dot.

Official Cursor MCP documentation

Claude Desktop desktop app

Configuration file: ~/Library/Application Support/Claude/claude_desktop_config.json or %APPDATA%\Claude\claude_desktop_config.json

Hosted endpoint
{
  "mcpServers": {
    "finbridge": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.gronox.kr/mcp"]
    }
  }
}

Nothing to install. The client connects to the publisher's URL.

Quit the app completely and reopen it.

Check it worked: Look for the tools icon in the message composer.

Official Claude Desktop MCP documentation

Visual Studio Code IDE

Configuration file: .vscode/mcp.json or user settings.json under mcp

Hosted endpoint
{
  "servers": {
    "finbridge": {
      "type": "http",
      "url": "https://mcp.gronox.kr/mcp"
    }
  }
}

Nothing to install. The client connects to the publisher's URL.

Check it worked: Open the Copilot chat tools picker and confirm the server is listed.

Official Visual Studio Code MCP documentation

Codex CLI command line

Configuration file: ~/.codex/config.toml

Hosted endpoint
codex mcp add finbridge --transport http https://mcp.gronox.kr/mcp

Nothing to install. The client connects to the publisher's URL.

Check it worked: Run codex mcp list and check the server is present.

Official Codex CLI MCP documentation

More clients (9), including automation platforms

Tools

37 tools, from the publisher's manifest. A parameter marked with an asterisk is required. By intent: 27 answer, 2 act and 8 not classified.

Intent says what a tool does with the world. Answer reads and returns information and changes nothing. Act changes state somewhere, by writing, creating, sending or deleting. Transact moves money, buys something or commits to a cost. A value marked declared is the publisher's own annotation on their own tool. A value marked inferred is this catalogue reading the tool name and description, and is not a claim by the publisher. Where neither settles it, the tool is left unclassified rather than guessed at.

ToolWhat it doesIntentParameters
import_portfolioRegister holdings read from a brokerage (MTS/HTS) screenshot or an asset table into the user's portfolio. Accepts listed stocks (KR/US/TW/JP) as well as cash, crypto (BTC etc.) and physical assets (gold): stocks are matched against the database, crypto and gold (PAXG) get live ccxt quotes, cash and physical assets are stored at the given value. For ETFs or foreign products not in the database, pass value directly. If the screen shows a type/category column, pass asset_class as well (cash|bond|physical|growth|dividend|crypto|other; Korean labels 현금|채권|현물|성장주|배당주|가상자산|기타 are accepted). Registered listed stocks are also added to the watchlist automatically. act inferredreplace, holdings
get_portfolioReturn the user's whole portfolio (listed stocks plus cash, crypto, ETF and physical assets) valued at the latest prices, with return and asset allocation. Crypto and ETFs use live ccxt quotes, stocks the latest close in the database, cash and physical assets the registered amount. allocation is aggregated per currency; combined converts everything to KRW using the FRED DEXKOUS rate. answer inferrednone
add_to_watchlistAdd a company to the user's watchlist, or remove it if it is already there (toggle). act inferredsymbol
backtest_portfolioBacktest a fixed-weight KR or US portfolio on daily data from the local finbridge.db (stocks are corporate-action adjusted; US stocks are total-return where SEC-reported dividends exist). ⚠ETFs are PRICE-RETURN ONLY in every market (no distributions), AND US ETF bars are NOT split-adjusted yet — a series with a split is refused, not mispriced. US history starts 2023-03-28, so earlier start dates are clipped. Pure historical simulation — no forecasts. Args: - assets: 1-15 of {symbol, weight}. symbol = KR 6-digit code ('005930'), US ticker ('AAPL', 'SPY'), or a company/ETF name. Weights are normalized to sum 1. - from (required, YYYY-MM-DD), to (default: today). Start is clipped to the latest asset inception date (noted). - rebalance: 'none'|'monthly'|'quarterly'|'yearly' (default 'yearly') — rebalanced at the close of the first trading day of each new period. - currency: 'USD' (default) | 'KRW' — reporting currency; assets in the other currency are converted daily (USDKRW, FRED DEXKOUS). - initial: starting value in the report currency (default 10000). Returns: {period, currency, rebalance, assets[](weight_pct, first_date, dividend_adjusted, converted), metrics{total_return_pct, cagr_pct, vol_annual_pct, sharpe, mdd_pct, mdd_peak_date, mdd_trough_date, best_year, worst_year}, annual_returns[], equity_curve[](sampled, JSON only), notes[]}. Examples: - Samsung + KODEX 200 70/30: {assets:[{symbol:'005930',weight:0.7},{symbol:'069500',weight:0.3}], from:'2021-01-01', currency:'KRW'} Use when: "what if I invested in X portfolio since YYYY" questions, comparing allocations, drawdown/volatility analysis. Don't use for: single-stock history (get_stock_prices), stock screening (screeners), strategy backtests with entry/exit rules (not yet available). Errors: unknown/ambiguous symbol -> candidates list; US asset -> not-supported error (licensing); KR data before 2020 -> source-limit hint; <60 overlapping trading days -> range too short. Notes: Simulation on historical data — not investment advice. Commission, one-way slippage and sell-side tax ARE deducted on the initial purchase and every rebalance (set costs=false for a gross view); dividends on KR stocks and all ETFs are not. KR stocks are price-return only (no distributions). US stocks are total-return where SEC-reported dividends exist (see dividend_adjusted per asset; ex-dates are approximated by fiscal-quarter end), otherwise price-return. ⚠ETFs are price-return only in every market right now — distributions are not in the data, so bond, REIT and high-dividend ETFs are understated. ⚠US ETF bars are also NOT split-adjusted — splits-us reads a SEC XBRL ratio that 1940-Act funds never file (2026-09-04 scan: 200 integer-ratio split events across 186 of 5,868 US ETFs, e.g. XLK/XLU 2:1 on 2025-12-05). This backtest refuses such a series rather than mispricing it, but tools that read the bars directly (get_stock_prices, get_technicals, screeners) still see the raw jump. not classifiedto, from, costs, label, assets, initial, currency, benchmark
analyze_factorsMeasure whether a ranking signal actually separates future returns, point-in-time, on KR/US/TW daily bars from the local finbridge.db. This is the question that comes BEFORE a screener: not "which names pass today" but "does this axis pay at all". Three answers per factor: - Quantile portfolios: at every rebalance the investable set is sorted on the factor and cut into N buckets; you get each bucket's average forward return. A real signal is monotonic from Q1 to QN. If only the ends move and the middle is noise, that is a tail, not a signal. - IC (information coefficient): the cross-sectional Spearman correlation between factor rank and forward-return rank at each date. mean is the strength of the direction; ir = mean/stdev is how consistently it holds. A high mean with a low IR was made by a few regimes. - Correlation matrix: average rank correlation between the factors themselves. Two factors that see the same thing do not diversify each other. Price factors (any market with bars, and the default set): mom_12_1 (12-month return skipping the last month), reversal_1m, trend_50_200, range_52w (position in the 52-week band), volatility_60d, liquidity (a control, since the investable set is already ranked on it). Fundamental factors (KR and US only, request them explicitly): earnings_yield (diluted EPS / price), roe, net_margin, gross_margin, debt_ratio, asset_growth (YoY total assets), accruals ((net income − operating cash flow) / assets). Two more need market capitalisation and are therefore US only: book_yield (equity / market cap, the inverse of P/B) and sales_yield (revenue / market cap). Their market cap uses the share count that was already reported on the signal date, never today's — elsewhere we hold only today's share count, and multiplying a 2022 price by a 2026 share count is not a 2022 market cap, so those markets are refused with an explicit error. Each reads only the annual report that was ALREADY PUBLIC on the signal date. They rank fewer names than price factors, so every factor carries coverage_pct — read it before putting a 40%-coverage spread next to a 100%-coverage one. Taiwan is refused for these with an explicit error rather than a near-empty table, because TWSE publishes a latest-period snapshot instead of a series. Book/price and sales/price are absent on purpose: they need market cap, and we have no history of shares outstanding. Args: - market: 'kr' | 'us' | 'tw' (required). Japan and Europe carry no price data, so they cannot be studied here. - years: history window, 2-20 (default 5). US bars start 2023-03-28 (volume from 2024-07-01), so US windows are shallower. - hold: forward-return window in trading days, 5-250 (default 20). - rebalance: trading days between measurement dates, 5-250 (default 20). Set equal to hold for non-overlapping, inference-ready observations. - quantiles: 3-10 buckets (default 5). - universe: how many of the most-traded names form the investable set, 20-1000 (default 300). - factors: subset of the keys above; omit for the six price factors. Fundamental factors are never in the default set — name them. - slippage_bps: one-way slippage assumption used only for the reported cost figure (default 5). Returns: {range, universe, rebalances, overlapping, cost_per_rebalance_pct, factors[]{key, label, definition, fundamental, coverage_pct, asfiled_pct, report_age_days, monotonic, quantiles[]{q, avg_return, median_return, win_rate, avg_names}, long_short{avg, net_avg, t_stat, positive_share, turnover}, ic{mean, stdev, ir, t_stat, positive_share, dates}}, correlation[][], caveats[]}. Reading the numbers: ic.ir is mean/stdev and is NOT a t-statistic — ic.t_stat is. The two long-short and IC t-statistics can disagree, and that disagreement is information: in a 2026-09 Korean run earnings_yield had an IC IR of 0.90 while its long-short t was 1.39, meaning the signal was spread broadly across the ranking while the extreme buckets themselves were noisy. report_age_days is how stale the annual report was at the signal date; it is also the look-ahead guard, since a negative value would mean a report was used before it was public. Examples: - Does momentum pay in Korea? {market:'kr', factors:['mom_12_1','reversal_1m'], hold:20, rebalance:20} - Inference-ready quarterly study: {market:'us', hold:60, rebalance:60, years:3} - Does cheapness or quality pay in Korea? {market:'kr', factors:['earnings_yield','roe','accruals','asset_growth'], hold:60, rebalance:60} - Do value and momentum overlap? {market:'kr', factors:['earnings_yield','mom_12_1']} — read the correlation cell, not just the two spreads. Use when: judging whether a ranking rule is worth building a screen on, comparing candidate signals, or checking whether two signals overlap. Don't use for: picking names today (screeners), simulating a specific portfolio (backtest_portfolio), or any factor that needs market capitalisation (PBR, PSR) — we hold no history of shares outstanding. Errors: a market with no price data, or a window too short for the warm-up (260 sessions plus the hold) -> explicit error, not an empty result. Notes: Returns are GROSS — signal strength and trading friction are separate questions, so cost is reported next to it (long_short.net_avg subtracts measured turnover times the round-trip cost). Delisted names are included. Dividends are excluded in every market. Fundamental factors update once a year and carry a small restatement look-ahead (the stored figures are the latest values under the original filing date). Simulation on historical data, not investment advice; a factor that worked in one window can stop working. answer inferredhold, label, years, market, factors, universe, quantiles, rebalance
get_backtest_runsList, open, re-check or delete the backtest and factor runs saved for your account. Every backtest_portfolio and analyze_factors call is stored automatically with the exact inputs it ran on, the headline numbers, and the data vintage (the market's latest price session at the time). Why re-check matters: in this dataset the same inputs can give a different answer later. Split adjustments get applied (225 US ETFs on 2026-09-04), financials get restated, delistings get flagged — all of which rewrite history retroactively. action='recheck' re-runs the stored inputs against today's data and reports what moved, which is the only way to notice that kind of drift. Args: - action: 'list' (default) | 'get' | 'recheck' | 'delete' - run_id: required for get / recheck / delete - kind: 'portfolio' | 'factors' — filter for list - limit: 1-50 for list (default 20) - trades: include the trade log in 'get' (default false). A portfolio run stores its initial purchase, every rebalance delta and any delisting liquidation; factor studies have no trades. Returns: - list: {runs: [{run_id, kind, label, market, range, data_as_of, created_at, headline}]} - get: {run: {...}, params, summary, trades?} - recheck: {run, stored, current, changed: [{key, before, after, delta}], data_as_of: {stored, now}, verdict} - delete: {deleted: true} Use when: comparing runs you made earlier, auditing which trades a portfolio backtest actually made, or checking whether a saved result still holds after nightly ingests. Errors: no account on this key -> {error} rather than a failure; an unknown run_id -> {error}. Notes: Runs are per account and the newest 200 are kept. Only inputs and headline numbers are stored, never the full response — the inputs are what make a run reproducible. answer inferredkind, limit, action, run_id, trades, response_format
get_peersComparison set for one company across KR / US / TW / JP: the company plus its closest peers, chosen from the same industry group (SIC / KSIC / TWSE / EDINET classification, normalised to one shared bucket) and ranked by market-cap proximity with same-market names first. Falls back to pure size peers when the company has no classification. Also returns the company's business-segment revenue split where available (currently Japan, from 有価証券報告書 XBRL) — informational, not yet used for ranking. Args: - company: US ticker ('AAPL'), KR 6-digit code ('005930'), TW/JP 4-digit code ('2330', '7203'), or a company name (local or English). - market: 'kr'|'us'|'tw'|'jp' (optional) — disambiguates codes/names shared across markets (TW and JP both use 4-digit codes). - limit: 1-10 peers (default 5). - same_market_only: true = restrict peers to the company's own market (default false — a KR chipmaker can sit next to a US one). - rank: 'size' (default) = same industry group, nearest by market cap (or revenue where there is no price feed); 'segments' = rank by business-mix similarity — each company's segment revenue shares are mapped to standard industries (companies without segment data count as 100% their own industry) and compared by cosine similarity, ties broken by size. Conglomerates (Sony: games/music/pictures/electronics/finance) then get conglomerate peers instead of whichever single bucket they were filed under. - response_format: 'markdown' (default) or 'json'. Returns: {company:{name, name_en, market, ticker|code}, basis:'sector'|'size'|'segments', sector:{group, label, name}, industry_mix:{vector:{industry:share}, primary:[industry], from_segments:bool} (rank='segments' only), peers:[{name, name_en, market, ticker|code, market_cap, per, pbr, roe, rev_cagr_3y, rs_pctile, ret_120d, similarity?, primary_industry?, has_segments?}], segments:{fiscal_year, rows:[{segment, kind, revenue_external, share_pct}]}, notes}. Examples: - {company:'7203'} -> Toyota + transportation-equipment peers, with its Automotive / Financial Services segment split - {company:'005930', same_market_only:true} -> Samsung Electronics + KR tech-hardware peers only - {company:'6758', rank:'segments'} -> Sony ranked against other multi-segment conglomerates by business mix Use when: building a comparison table or choosing competitors for a financial comparison. Don't use for strategy screens (screen_*) or for full financial statements (get_dart_financials / get_edgar_financials). Notes: company-level classification only; segment names may be geographic (Japan/Asia/USA) when a company defines its reportable segments by region. Market cap is in the company's listing currency, so cross-market rank by proximity is approximate. Errors: unknown/ambiguous company -> candidate list; no classification -> basis='size' with a note. answer inferredrank, limit, market, company, response_format, same_market_only
search_dart_companySearch companies registered with DART, South Korea's corporate disclosure system, by name, 6-digit stock code, or 8-digit DART corp_code. Returns the corp_code required by the other dart_* tools. Args: - query: company name (Korean works best, e.g. '삼성전자'), 6-digit KRX stock code ('005930'), or 8-digit corp_code - listed_only: restrict to KRX-listed companies (default true). Set false to include ~90k unlisted entities. - limit: max results, 1-50 (default 10) Returns: {count, companies: [{corp_code, corp_name, stock_code}]} — stock_code is null for unlisted companies. Match priority: exact stock code > exact name > listed partial > unlisted partial. Examples: - {query: '삼성전자'} -> corp_code 00126380, stock_code 005930 - {query: '카카오', listed_only: false} -> listed 카카오 plus unlisted same-name entities Use when you need a corp_code or must disambiguate similar names. Don't use for US companies (use search_edgar_company). Errors: DART_API_KEY not configured; no match returns count 0 (not an error). answer inferredlimit, query, listed_only
get_dart_financialsFetch financial statements of a Korean company from OpenDART (fnlttSinglAcntAll: full single-company statements) and normalize them to standard metrics. Amounts are raw KRW (no scaling); EPS is KRW per share. Args: - corp: Company: Korean name (e.g. '삼성전자'), 6-digit stock code (e.g. '005930'), or 8-digit DART corp_code (e.g. '00126380') - year: business year 2015-2026 (default: last year). Annual reports are filed ~March of the following year (FY2025 filed 2026-03). - report: 'annual' | 'q1' | 'half' | 'q3' (default 'annual') - fs: 'consolidated' | 'separate' (default 'consolidated'). If consolidated statements do not exist, automatically retries separate and says so in notes. - response_format: 'markdown' (default, tables) or 'json' (compact) Returns structured {normalized, accounts}: - normalized: {company:{name,id,ticker}, basis, periods:[{period, fiscal_year, currency:'KRW', metrics:{revenue, gross_profit, operating_income, net_income, eps_diluted, assets, liabilities, equity, cash_and_equivalents, operating_cash_flow}}], notes}. Annual reports include the prior-year comparative as a second period. - accounts: top ~40 raw statement rows [{sj_div (BS/IS/CIS/CF/SCE), account_nm, account_id, thstrm, frmtrm}]. Examples: - {corp: '삼성전자', year: 2024} -> FY2024+FY2023, revenue ~3.0e14 KRW - {corp: '005930', year: 2025, report: 'q1'} -> Q1 2025 (3-month income-statement figures) Use for KR-listed company fundamentals. Don't use for US companies (get_edgar_financials) or for filings text (get_dart_filings). Errors: 'no data' (DART status 013) -> try another year/report or fs='separate'; unknown company -> run search_dart_company first. answer inferredfs, corp, year, report, response_format
get_dart_filingsList corporate disclosure filings from DART, optionally filtered by company, date range, and disclosure type. Report names are in Korean. Args: - corp: optional — Company: Korean name (e.g. '삼성전자'), 6-digit stock code (e.g. '005930'), or 8-digit DART corp_code (e.g. '00126380'). Omit for a market-wide list. - from / to: YYYY-MM-DD (default: last 90 days) - type: DART pblntf_ty — A=periodic reports(정기공시), B=major events(주요사항보고), C=securities issuance(발행공시), D=ownership/stake(지분공시), E=other(기타공시), F=external audit(외부감사관련), G=funds(펀드공시), H=asset securitization(자산유동화), I=KRX disclosures(거래소공시), J=fair trade(공정위공시) - limit: results per page, 1-100 (default 20); page: page number (default 1) Returns: {total, page, filings: [{rcept_no, corp_name, report_nm, flr_nm, rcept_dt, url}]} — url opens the filing in the DART viewer (https://dart.fss.or.kr/dsaf001/main.do?rcpNo=...). The filing body is NOT fetched; follow the url separately if needed. Examples: - {corp: '삼성전자'} -> Samsung filings in the last 90 days - {type: 'A', from: '2026-03-01', to: '2026-03-31'} -> March periodic reports market-wide Use to track what a company disclosed. For major events with keyword filtering use get_dart_major_events. Errors: no filings in range (DART status 013) -> widen dates or drop filters; unknown company -> search_dart_company. answer inferredto, corp, from, page, type, limit
get_dart_major_eventsList major-event disclosures (주요사항보고서, DART type B): capital increases, mergers, convertible bonds, treasury stock, bankruptcy, lawsuits, etc. Optionally filter report names with a regex. Args: - corp: optional — Company: Korean name (e.g. '삼성전자'), 6-digit stock code (e.g. '005930'), or 8-digit DART corp_code (e.g. '00126380'). Omit for market-wide events. - from / to: YYYY-MM-DD (default: last 180 days) - kinds: optional JavaScript regex matched against the Korean report name, e.g. '증자|합병|전환사채' (capital increase | merger | CB) or '자기주식' (treasury stock). Filtering is applied client-side over the most recent 100 events in range. - limit: max results, 1-100 (default 20) Returns: {total, page, filings: [{rcept_no, corp_name, report_nm, flr_nm, rcept_dt, url}]} — same shape as get_dart_filings. When kinds is given, total = matched count within the scanned window. Examples: - {corp: '삼성전자', kinds: '자기주식'} -> Samsung treasury-stock decisions in the last 180 days - {kinds: '유상증자', from: '2026-01-01', to: '2026-06-30'} -> market-wide rights offerings in H1 2026 Use for event-driven screening. For all filing categories use get_dart_filings. Errors: no events in range (DART status 013) -> widen dates; invalid kinds regex; unknown company -> search_dart_company. answer inferredto, corp, from, kinds, limit
get_dart_insider_tradesKorean insider transactions for a listed KR company, from DART's 임원ㆍ주요주주 특정증권등 소유상황보고서 (elestock) — the Korean equivalent of SEC Form 4. Includes a buy-vs-sell summary and an optional buy/sell filter. Buy vs sell is the SIGN of the reported share change (증감수): positive = 취득 (acquire / buy), negative = 처분 (dispose / sell). Insider BUYING is a stronger sentiment signal. Args: - company (required): KR 6-digit stock code (e.g. '005930'), company name, or 8-digit DART corp_code - limit: number of most-recent reports to return, 1-100 (default 20) - tx_type: 'all' (default) | 'buy' (share change > 0) | 'sell' (share change < 0) - response_format: 'markdown' (default) or 'json' Returns: {company:{corp_code, corp_name}, tx_type, summary:{buys:{count,shares}, sells:{count,shares}}, count, trades:[{filedAt, reporter, position, registered_exec, major_shareholder, change, shares_after, change_rate}], notes}. summary totals cover the whole fetched set regardless of the filter. Important: unlike US Form 4, the KR report has NO transaction price — only share counts (no value). Reports are filed within ~5 business days. Examples: - "삼성전자 임원 매수" -> {company:'005930', tx_type:'buy'} - "SK하이닉스 내부자 매도 최근" -> {company:'000660', tx_type:'sell'} Use when: monitoring KR officer / major-shareholder buy/sell activity. For US insiders use get_edgar_insider_trades. For institutional holdings use get_edgar_13f. Errors: unknown company -> use search_dart_company; a filter with no matches returns count 0 (not an error). answer inferredlimit, company, tx_type, response_format
search_edgar_companySearch SEC EDGAR registrants (US-listed companies) by ticker, company name, or CIK. Returns the 10-digit zero-padded CIK needed by the other edgar_* tools. Args: - query (required): ticker ('AAPL', 'BRK-B' or 'BRK.B'), company-name fragment ('Berkshire'), or CIK number ('320193') - limit: max results, 1-50 (default 10) Returns: {count, companies: [{cik, ticker, title}]} ranked exact-ticker > exact-name > prefix > substring. Examples: - "find Apple's CIK" -> {query: 'AAPL'} - "companies named Berkshire" -> {query: 'Berkshire', limit: 5} Use when: you need a CIK or to disambiguate a company name before calling get_edgar_financials/filings/insider_trades (those also accept tickers directly, so for an exact ticker you can skip this step). Don't use for: Korean companies (use search_dart_company) or private companies not registered with the SEC. Errors: no match -> error suggesting a shorter name fragment; only SEC registrants with a listed ticker are searchable. answer inferredlimit, query
get_edgar_financialsNormalized annual (10-K) or quarterly (10-Q) financial statements for a US company, from SEC EDGAR XBRL company facts (US-GAAP). Values are raw USD (not scaled); eps_diluted is USD per share. Args: - company (required): ticker / company name / CIK (e.g. 'AAPL', 'Microsoft', '789019') - freq: 'annual' (default, from 10-K) or 'quarterly' (discrete Q1-Q3 from 10-Qs; Q4 is not reported separately) - periods: how many most-recent periods, 1-12 (default 3) - metrics: optional subset of [revenue, gross_profit, operating_income, net_income, eps_diluted, assets, liabilities, equity, cash_and_equivalents, operating_cash_flow] (default all) - response_format: 'markdown' (default) or 'json' Returns NormalizedFinancials: {company:{name, id(CIK), ticker}, basis:'US-GAAP (10-K)', periods:[{period:'FY2024', fiscal_year, end, currency:'USD', metrics:{revenue, net_income, ...}}], notes}. periods are most-recent first; fiscal_year = calendar year of the period end date. Examples: - "Apple's revenue and net income for the last 3 years" -> {company:'AAPL', metrics:['revenue','net_income']} - "MSFT last 4 quarters" -> {company:'MSFT', freq:'quarterly', periods:4} Use when: you need US-GAAP fundamentals for a US-listed company. Don't use for: Korean companies (get_dart_financials), stock prices, or IFRS 20-F foreign private issuers (not supported). Errors: unknown company -> use search_edgar_company first; companies without us-gaap XBRL facts (funds, 20-F filers) return an error explaining why. answer inferredfreq, company, metrics, periods, response_format
get_edgar_filingsList a US company's recent SEC filings (10-K, 10-Q, 8-K, S-1, proxy statements, Form 4, ...) from the EDGAR submissions index. Returns metadata and document URLs only — it does NOT download filing contents; fetch the returned url yourself for the document text. Args: - company (required): ticker / company name / CIK - forms: optional form-type filter, e.g. ['10-K'] or ['10-K','10-Q','8-K'] (exact match, case-insensitive) - from / to: optional YYYY-MM-DD filing-date range - limit: max rows, 1-50 (default 20) Returns: {company:{cik, name, ticker}, count, filings:[{form, filingDate, accessionNumber, primaryDocument, items?, url}], notes?}. 8-K rows include 'items' (e.g. '2.02,9.01' = results of operations + exhibits). Coverage = the latest ~1000 filings per company. Examples: - "Apple's latest annual report" -> {company:'AAPL', forms:['10-K'], limit:1} then fetch the url - "Tesla 8-Ks this year" -> {company:'TSLA', forms:['8-K'], from:'2026-01-01'} Use when: you need filing dates, document links, or 8-K event items for a US company. Don't use for: Korean disclosures (get_dart_filings) or filing full-text search across all companies. Errors: unknown company -> use search_edgar_company; an empty result usually means the form/date filter is too narrow for the ~1000-filing window. answer inferredto, from, forms, limit, company
get_edgar_insider_tradesLatest insider transactions for a US company, parsed from SEC Form 4 filings, with a buy-vs-sell summary and an optional buy/sell filter. Each trade lists the reporting insider, their relationship, and non-derivative (common stock) transactions. Insider BUYS (open-market purchases, code P) are a stronger sentiment signal than sells (code S), which happen for many reasons (diversification, taxes). Use tx_type to monitor one side. Args: - company (required): ticker / company name / CIK - limit: number of most-recent Form 4 filings to parse, 1-25 (default 10) - tx_type: 'all' (default) | 'buy' (code P purchases only) | 'sell' (code S sales only) Returns: {company:{cik, name, ticker}, tx_type, summary:{buys:{count,shares,value}, sells:{count,shares,value}}, count, trades:[{filedAt, owner, relationship, url, transactions:[{date, code, shares, price_per_share, acquired_or_disposed, shares_owned_after}]}], notes}. summary totals cover the whole fetched window regardless of the filter; value = shares x price where a price is reported. Transaction codes: P=open-market purchase, S=open-market sale, M=option exercise, F=shares withheld for tax, A=award/grant, G=gift. acquired_or_disposed: A=acquired, D=disposed. Examples: - "insider BUYING at Apple" -> {company:'AAPL', tx_type:'buy'} - "recent insider SELLING at Nvidia" -> {company:'NVDA', tx_type:'sell'} - "all TSLA insider activity, more history" -> {company:'TSLA', limit:25} Use when: monitoring insider buy/sell activity (officers, directors, 10% owners) for a US-listed company. Larger 'limit' widens the time window. Don't use for: institutional holdings (use get_edgar_13f), Korean companies, or derivative-only detail (option grids are skipped). Errors: unknown company -> use search_edgar_company; a filter with no matching transactions returns count 0 (not an error); unparseable Form 4 XMLs are skipped and counted in notes. answer inferredlimit, company, tx_type
search_fred_seriesSearch the FRED (Federal Reserve Economic Data) catalog for economic time series by keyword, ordered by popularity. Args: - query: free-text search, e.g. 'consumer price index', 'unemployment rate korea', 'housing starts' - limit: max results 1-50 (default 10) Returns: {count, series:[{id, title, frequency, units, seasonal_adjustment, last_updated, popularity, notes}], source}. Use the returned series 'id' (e.g. CPIAUCSL, UNRATE, DGS10) with get_fred_series. Examples: - "find the US CPI series" -> {query:'consumer price index'} -> top hit CPIAUCSL - "KRW exchange rate series" -> {query:'korea won exchange rate'} -> DEXKOUS - Don't use when you already know the series ID — call get_fred_series directly. Errors: missing FRED_API_KEY returns an error with a hint to obtain a free key. answer inferredlimit, query
get_fred_seriesFetch observations (time series data points) for a FRED series, with optional date range, frequency aggregation, and unit transformation. Args: - series_id: FRED series ID, e.g. 'CPIAUCSL', 'UNRATE', 'DGS10', 'DEXKOUS' (case-insensitive) - from / to: YYYY-MM-DD observation range (optional) - frequency: aggregate to d/w/m/q/a (optional; FRED averages within the period; cannot be finer than the native frequency) - units: lin (levels, default) | chg (change) | pch (% change) | pc1 (% change from year ago) | log (natural log) - limit: 1-1000 (default 120). Without from/to this returns the LATEST N observations; with a range, the latest N within the range. - response_format: 'markdown' (default) or 'json' Returns: {series:{id,title,units,frequency,last_updated}, observations:[{date, value}], source}. Observations are ascending by date; value is null where FRED reports '.'. Examples: - "US 10Y treasury yield, last 30 points" -> {series_id:'DGS10', limit:30} - "CPI YoY inflation since 2020" -> {series_id:'CPIAUCSL', units:'pc1', from:'2020-01-01'} - "annual average USD/KRW 2023-2025" -> {series_id:'DEXKOUS', from:'2023-01-01', to:'2025-12-31', frequency:'a'} - Don't use for series discovery — use search_fred_series first. Errors: unknown series_id suggests search_fred_series; invalid frequency/range combinations explain the constraint; missing FRED_API_KEY returns a hint to obtain a free key. answer inferredto, from, limit, units, frequency, series_id, response_format
get_fred_snapshotFetch a predefined set of key US macro indicators from FRED in one call: latest value, previous value, and date for each series. Args: - set: which indicator set (default us_core) - us_core: FEDFUNDS (Fed funds rate), DGS10, DGS2, T10Y2Y (10Y-2Y spread), CPIAUCSL (CPI YoY %), UNRATE, PAYEMS (monthly payroll change), DEXKOUS (KRW per USD) - rates: FEDFUNDS, DGS2, DGS10, DGS30, T10Y2Y, MORTGAGE30US, SOFR - inflation: CPIAUCSL, CPILFESL, PCEPI, PCEPILFE, PPIACO (all as % change from year ago) - labor: UNRATE, PAYEMS (change), ICSA (initial claims), CIVPART, AHETPI (wages YoY %) Returns: {set, as_of, indicators:[{id, title, value, prev, date, units}], source}. 'value' is the latest non-null observation, 'prev' the one before it. Examples: - "how does the US economy look right now" -> {set:'us_core'} - "current US rate complex" -> {set:'rates'} - Don't use for historical analysis or non-listed series — use get_fred_series instead. Errors: individual unavailable series are reported in 'notes' without failing the whole snapshot; missing FRED_API_KEY returns a hint to obtain a free key. answer inferredset
get_crypto_tickerFetch the current public ticker (last/bid/ask/24h stats) for a crypto trading pair on one exchange. No API key needed. Args: - symbol: 'BASE/QUOTE' pair, e.g. 'BTC/USDT', 'ETH/USDT', 'BTC/KRW' (default BTC/USDT) - exchange: binance | upbit | bithumb | coinbase | kraken | okx | bybit | gateio (default binance) Returns: {exchange, symbol, last, bid, ask, high_24h, low_24h, base_volume_24h, quote_volume_24h, timestamp}. Prices are in the QUOTE currency (raw numbers, no scaling). Cached ~10s. Examples: - "current bitcoin price" -> {symbol:'BTC/USDT'} - "BTC price in Korea" -> {symbol:'BTC/KRW', exchange:'upbit'} - Don't use for candles/history (get_crypto_ohlcv) or cross-exchange premium (compare_crypto_exchanges). Errors: unknown symbol -> check BASE/QUOTE format and the exchange's market list (upbit/bithumb use KRW quotes); geo-blocked exchange -> try okx. answer inferredsymbol, exchange
get_crypto_ohlcvFetch OHLCV candlestick data (open/high/low/close/volume) for a crypto pair. No API key needed. Args: - symbol: 'BASE/QUOTE' pair (default BTC/USDT) - exchange: binance | upbit | bithumb | coinbase | kraken | okx | bybit | gateio (default binance) - timeframe: 1m | 5m | 15m | 1h | 4h | 1d | 1w (default 1d) - since: YYYY-MM-DD start date (optional; exchange returns candles from this date forward) - limit: 1-500 candles (default 100) - response_format: 'markdown' (default) or 'json' Returns: {exchange, symbol, timeframe, columns:["ts_iso","open","high","low","close","volume"], rows:[[...], ...]}. Rows ascend by time; prices in QUOTE currency. Cached ~5min. Examples: - "BTC daily candles for the last 30 days" -> {symbol:'BTC/USDT', timeframe:'1d', limit:30} - "ETH/KRW hourly since July 1" -> {symbol:'ETH/KRW', exchange:'upbit', timeframe:'1h', since:'2026-07-01'} - Don't use for a single current price — use get_crypto_ticker. Errors: unknown symbol -> check BASE/QUOTE and the exchange's markets; unsupported timeframe on an exchange returns the exchange's error. answer inferredlimit, since, symbol, exchange, timeframe, response_format
compare_crypto_exchangesCompare the price of one crypto asset on two exchanges, converting both legs to USD, and report the premium of leg B over leg A. Classic use: the Korean "kimchi premium" — e.g. base:'BTC', exchange_a:'binance', quote_a:'USDT', exchange_b:'upbit', quote_b:'KRW' -> premium_pct is how much more expensive BTC is on upbit (in USD terms) than on binance. Args: - base: asset symbol, e.g. 'BTC', 'ETH', 'XRP' (default BTC) - exchange_a / quote_a: first leg (defaults binance / USDT) - exchange_b / quote_b: second leg (defaults upbit / KRW) - Supported quotes: USD, USDT, USDC (treated as 1 USD, noted in output) and KRW (converted with the latest FRED DEXKOUS KRW-per-USD rate). Returns: {base, legs:[{exchange, symbol, last, last_usd}], premium_pct, fx:{pair:'USD/KRW', rate, date, source:'FRED DEXKOUS'}, notes}. premium_pct = (leg_b_usd / leg_a_usd - 1) * 100. Examples: - "what's the kimchi premium right now" -> defaults - "ETH premium bithumb vs kraken" -> {base:'ETH', exchange_a:'kraken', quote_a:'USD', exchange_b:'bithumb', quote_b:'KRW'} - Don't use for a single price (get_crypto_ticker) or history (get_crypto_ohlcv). Errors: unknown symbol on either exchange -> check the exchange's market list (upbit/bithumb list KRW pairs only); unsupported quote currency lists the supported ones; FRED key missing blocks KRW conversion with a hint. answer inferredbase, quote_a, quote_b, exchange_a, exchange_b
compare_financials_kr_usCompare annual financial statements of a Korean listed company (source: OpenDART, K-IFRS) and a US listed company (source: SEC EDGAR, US-GAAP) side by side, with KRW values converted to USD using FRED DEXKOUS annual-average exchange rates. Args: - kr_company: Korean company name / 6-digit stock code / DART corp_code (e.g. '삼성전자', '005930') - us_company: US ticker / name / CIK (e.g. 'AAPL', 'Apple') - years: number of recent fiscal years, 1-5 (default 3) - metrics: subset of [revenue, gross_profit, operating_income, net_income, eps_diluted, assets, liabilities, equity, cash_and_equivalents, operating_cash_flow] - response_format: 'markdown' (default) or 'json' Returns per-metric, per-year rows: {fiscal_year, kr_krw, kr_usd, us_usd, ratio_kr_over_us} plus the FX rates used and accounting-basis caveats. Examples: - "삼성전자 vs Apple 최근 3년 매출·영업이익 비교" -> {kr_company:'삼성전자', us_company:'AAPL', metrics:['revenue','operating_income']} - Don't use for quarterly data (annual only) or non-KR/US companies. Errors: unknown company names suggest using search_dart_company / search_edgar_company first. answer inferredyears, metrics, kr_company, us_company, response_format
get_db_schemaInspect the schema of the local finbridge database (SQLite with ingested KR/US company fundamentals, filings, and daily prices): tables, views, columns, per-table row counts (cached 5 minutes), and ready-to-run example queries for query_db. Args: (none) Returns: {tables: [{name, columns: [{name, type}], rows}], views: [{name, columns: [{name, type}]}], examples: [sql_string]} Key objects: - companies: KR companies have source='dart' + stock_code (6-digit), US companies source='edgar' + ticker - financials: one row per company x fiscal_year x quarter (quarter=0 = annual); raw unscaled KRW/USD amounts - prices_daily: daily OHLCV per company_id - views v_financials (financials joined with company name/ticker/stock_code) and v_latest_annual (latest annual row per company) — prefer these in query_db Examples: - Call before writing SQL for query_db, to learn table/column names. - Check row counts to see how much data the nightly ingest has loaded. Use when: preparing a query_db, or checking ingest coverage. Don't use for live market data (use the dart_/edgar_/fred_/crypto_ tools). Errors: 'database has not been built yet' — the ingest pipeline has not run on the server. answer inferrednone
query_dbRun a single read-only SELECT query against the local finbridge database (ingested KR/US fundamentals, filings, daily prices). The statement must start with SELECT or WITH; multiple statements, PRAGMA, and any write/DDL keywords (INSERT/UPDATE/DELETE/DROP/ALTER/CREATE/ATTACH/...) are rejected. The query is executed as SELECT * FROM (<your sql>) LIMIT <limit> on a read-only connection. Args: - sql: one SELECT (or WITH ... SELECT) statement. A single trailing ';' is tolerated. - limit: max rows returned, 1-500 (default 50) - response_format: 'markdown' (default, table) or 'json' (compact) Returns: {columns: [name], rows: [[cell, ...]], row_count, truncated} — truncated=true means more rows matched than 'limit'. Examples (v_financials / v_latest_annual views are the easiest entry points): - Largest companies by latest annual revenue: "SELECT name, ticker, stock_code, fiscal_year, revenue FROM v_latest_annual ORDER BY revenue DESC LIMIT 10" - Samsung Electronics annual trend: "SELECT fiscal_year, revenue, operating_income, net_income FROM v_financials WHERE stock_code = '005930' AND quarter = 0 ORDER BY fiscal_year DESC" - KR vs US company counts: "SELECT source, COUNT(*) AS n FROM companies GROUP BY source" - Recent Samsung Electronics closes: "SELECT date, close FROM prices_daily p JOIN companies c ON c.id = p.company_id WHERE c.stock_code = '005930' ORDER BY date DESC LIMIT 20" (prices_daily holds KR, US, TW; US history starts 2023-03-28) Use when: custom aggregation/joins over ingested data that screen_companies cannot express. Don't use for anything that writes — it will be rejected — or for live quotes (use the live-source tools). Errors: non-SELECT input, ';' inside, or forbidden keywords -> rejected with the reason; unknown table/column -> SQL error with a hint to call get_db_schema first. answer inferredsql, limit, response_format
screen_companiesScreen companies across five markets on annual fundamentals stored in the local finbridge database: Korea (DART), the US (SEC EDGAR), Taiwan (TWSE/TPEx), Japan (EDINET) and Europe (ESEF/IFRS). Filters and sorting run on standard metrics plus derived ratios; only annual rows (quarter=0) are considered. Base amounts are in each company's reporting currency — KRW, USD, TWD, JPY, or for Europe whatever the filer reports in (EUR, DKK, SEK, NOK, PLN, ...) — so absolute-value thresholds are market-dependent and cross-market (market='all') screens work best with ratio metrics (margins, roe, debt_ratio). Coverage note: Taiwan carries only the latest reported period, because TWSE publishes a snapshot rather than history. Europe is still loading and is thinner than the others: about 1 in 8 rows has no operating_income (the filer tags it with a company extension rather than the IFRS concept) and about 1 in 5 has no revenue (banks and investment entities report interest revenue or fair-value gains, not a single IFRS revenue total — we leave the column empty rather than fill it with a component that would make margins mean different things per row). Germany and Ireland are largely absent from the ESEF index, and European rows carry no ticker yet (page_url is null). Every market here has financial statements — none of them is master-only. What 'eu' means: any issuer that files under ESEF, i.e. has securities admitted to an EU/EEA/UK regulated market. That is a listing venue, not a domicile, so foreign issuers listed in Europe appear here too (Samsung Electronics, Toyota Caetano Portugal, Kazatomprom) and amounts stay in the filer's own reporting currency. A company cross-listed in several of our markets appears once per market with that market's own filing, so market='all' can show it more than once — this is not new to Europe (Toyota is already under both 'us' as TOYOTA MOTOR CORP and 'jp' as トヨタ自動車株式会社). Screen one market at a time when you need each company exactly once. Period fallback: a single-market screen normally uses each company's latest ANNUAL report. When a market has no annual rows yet (Taiwan today reports a half-year cumulative), the screen drops to that market's latest available period and the response says which one in the 'period' field — e.g. "FY2026 Q2 (year-to-date cumulative)". Within one market every row is then the same period, so the ranking holds. market='all' never does this: lining up a half-year revenue against a full-year one would be a silently wrong table. Args: - market: 'kr' (DART), 'us' (EDGAR), 'tw' (TWSE/TPEx), 'jp' (EDINET), 'eu' (ESEF), or 'all' (default) - fiscal_year: specific fiscal year; omit to use each company's latest annual report - filters: up to 5 of {metric, op, value}. op: gt|gte|lt|lte|eq. value is a number (ratios are in percent, e.g. 20 = 20%). - sort_by: metric to sort on (default 'revenue'); order: 'asc'|'desc' (default 'desc') - limit: 1-100 (default 20); response_format: 'markdown'|'json' Metrics: revenue, gross_profit, operating_income, net_income, eps_diluted, assets, liabilities, equity, cash_and_equivalents, operating_cash_flow, plus derived operating_margin (operating_income/revenue*100), net_margin (net_income/revenue*100), roe (net_income/equity*100), debt_ratio (liabilities/equity*100). Returns: {count, market, fiscal_year|'latest', sort_by, order, rows: [{name, source, ticker|stock_code, fiscal_year, currency, <each metric used>}]}. If a company reports under multiple accounting bases for the same year it may appear once per basis. Examples: - KR companies with operating margin > 20%: {market: 'kr', filters: [{metric: 'operating_margin', op: 'gt', value: 20}], sort_by: 'operating_margin'} - US mega caps by revenue in FY2025: {market: 'us', fiscal_year: 2025, sort_by: 'revenue', limit: 10} Use when: ranking or filtering many companies at once. Don't use for a single known company's statement detail (query_db or get_dart_financials / get_edgar_financials). Errors: 'database has not been built yet' — ingest has not run; an empty result is not an error (count 0). not classifiedlimit, order, market, filters, sort_by, fiscal_year, response_format
get_stock_pricesGet daily OHLCV price history from the local finbridge database (populated by the nightly ingest jobs). Rows are returned newest first. Price coverage by market — we only store what we have redistribution rights to: - Korea (DART + Financial Services Commission): full daily history, corporate-action adjusted. SERVED. - Taiwan (TWSE OpenAPI, Open Government Data License): daily history. SERVED. - US (Databento EQUS.SUMMARY): daily history from 2023-03-28. SERVED. Split-adjusted; dividend-adjusted closes exist where SEC-reported dividends do (adj_close). - Japan: NOT served. EDINET publishes disclosure documents, not prices, so we hold Japanese filings and the company master but no quotes. Args: - company: a ticker (US 'AAPL', TW/JP 4-digit '2330'), a KR 6-digit stock code ('005930'), or a company name in the local language or English ('TSMC', 'Toyota', '삼성전자'). Resolution priority: exact ticker > 6-digit KR code > exact name (name or English name) > partial name (multiple partial matches return a candidate list error). - from / to: optional YYYY-MM-DD range bounds (inclusive) - limit: max rows, 1-500 (default 60) - response_format: 'markdown' (default) or 'json' Plan note: the free plan serves the most recent 130 trading sessions of each name; paid plans serve the full stored history. When the window is trimmed the response carries a plan_limit field saying so. Returns: {company: {name, source, ticker|stock_code}, count, truncated, prices: [{date, open, high, low, close, volume}]} — newest date first; truncated=true means older rows exist beyond 'limit'. Examples: - {company: '005930', limit: 30} -> last 30 KR trading days for Samsung Electronics - {company: '005930', from: '2026-01-01', to: '2026-06-30'} -> Samsung Electronics H1 2026 Use when: historical closes/volumes for charting or return calculations from ingested data. Don't use for real-time quotes (use live-source tools) or crypto (get_crypto_ohlcv). Errors: unknown company -> no-match or candidate-list error; JP/EU company -> no-prices error (those markets carry statements only); no price rows -> a market-specific hint (new listing, delisted, nightly lag). answer inferredto, from, limit, company, response_format
screen_etfsScreen exchange-traded funds in the local finbridge database on the things that actually distinguish an ETF: premium/discount to NAV, fund size (AUM), the index it tracks, price momentum, and — for US funds — the audited calendar-year TOTAL return from the fund's own prospectus. ⚠These funds are excluded from screen_companies by construction: that tool ranks on annual financial statements, which funds do not file. Coverage differs by market and the response says so per row: - KR (1,170 listed ETFs): NAV, AUM (net assets, KRW), listed units and the tracked index come from the same daily feed as prices, 2020-01-02 onward. premium_pct is close/NAV-1 computed on the SAME day (mixing dates would be meaningless). - US (5,868 ETFs): no NAV or AUM source exists that we may redistribute, so those fields are null. Instead total_return_pct carries the fund's audited calendar-year total return (distributions reinvested) from SEC prospectus data — the only distribution-inclusive number available. ⚠ret_20d / ret_120d are PRICE returns in every market: ETF distributions are not in the daily bars, so income funds look worse than they were. For US funds compare against total_return_pct to see the gap. ⚠aum is in the listing currency (KRW today). Do not rank across markets on it. ⚠total_return_pct is pinned to ONE calendar year across all rows (reported as total_return_year), because prospectus refresh dates differ per fund — ranking a 2024 figure against a 2025 one would be a silently wrong table. Args: - market: 'kr', 'us', or 'all' (default) - min_aum: minimum net assets in listing currency (KR only; e.g. 100000000000 = 1,000억) - max_abs_premium_pct: keep funds trading within this |premium| of NAV, e.g. 0.5 - min_premium_pct: keep funds at or above this premium (negative values find discounts) - min_price, min_volume: liquidity floors (vol_avg20 is the 20-session average) - index_contains: substring of the tracked index name — 'TR' finds total-return index trackers, '코스피' finds KOSPI trackers - name_contains: substring of the fund name or ticker - total_return_year: calendar year for total_return_pct; omit for the best-covered year - sort_by: aum | premium | abs_premium | ret_20d | ret_120d | ret_250d | volume | total_return (default aum); order: 'asc'|'desc' (default desc) - limit: 1-100 (default 20); response_format: 'markdown'|'json' Returns: {count, market, total_return_year, sort_by, order, rows: [{market, symbol, name, as_of, close, nav, premium_pct, aum, index_name, ret_20d, ret_120d, vol_avg20, total_return_pct, total_return_period}]} Examples: - Large KR ETFs trading close to fair value: {market:'kr', min_aum: 100000000000, max_abs_premium_pct: 0.3, sort_by:'aum'} - KR ETFs at the deepest discount to NAV: {market:'kr', sort_by:'premium', order:'asc'} - KR trackers of a total-return index: {market:'kr', index_contains:'TR', sort_by:'aum'} - US ETFs by audited total return: {market:'us', sort_by:'total_return'} Use when: choosing or comparing funds. Don't use for stocks (screen_companies) or for a single fund's price history (get_stock_prices). Errors: 'database has not been built yet' — ingest has not run; an empty result is not an error (count 0). not classifiedlimit, order, market, min_aum, sort_by, min_price, min_volume, name_contains
get_technicalsLatest technical-indicator snapshot for a single KR or US company from the local finbridge database (indicators_latest, refreshed by the nightly 'indicators' ingest from daily prices), plus an optional on-demand historical series and a plain-language signal summary. Indicators: SMA 5/20/60/120, EMA 12/26, RSI(14, Wilder), MACD(12,26,9), Bollinger(20,2), ATR(14), 52-week high/low and % distance, returns over 1/5/20/60/120/250 trading days, 20-day volume ratio, above-SMA20/60 flags, and SMA20xSMA60 golden/dead cross (within the last 3 sessions). Args: - company: US ticker (e.g. 'AAPL'), KR 6-digit stock code (e.g. '005930'), or company name. Resolution: exact ticker > 6-digit code > exact name > partial name. - history: 0-250 (default 0). 0 = latest snapshot only; >0 recomputes the last N sessions of close/sma20/sma60/rsi14/macd on the fly (not stored). - response_format: 'markdown' (default) or 'json'. Returns: {company:{name,source,ticker|stock_code}, as_of, indicators:{...all snapshot fields...}, signals:[text], history:[{date,close,sma20,sma60,rsi14,macd}], notes}. Examples: - {company: 'AAPL'} -> Apple's latest snapshot + signal summary - {company: '005930', history: 60} -> Samsung Electronics snapshot + last 60 sessions of sma/rsi/macd Use when: reading one company's momentum/trend/overbought-oversold state, or charting an indicator series. Don't use to rank many companies (use screen_technical) or for live intraday quotes (use the live-source tools). Notes: KR/US/TW prices are adjusted for corporate actions but not dividends (indicators around dividend events may be slightly distorted); US history starts 2023-03-28 (volume from 2024-07-01) so long-window figures are shallower there. Market data, not investment advice. Errors: unknown company -> no-match/candidate-list error; 'No technical snapshot' -> no indicator row for this company, with a market-specific reason (JP/EU carry no prices; new listing or delisted elsewhere). answer inferredcompany, history, response_format
screen_technicalScreen KR/US companies by technical signals over the latest indicator snapshots (v_indicators / indicators_latest, refreshed nightly). Signals and the sort key are fixed whitelists mapped to SQL predicates; every threshold is bound as a parameter, so inputs are never interpolated into SQL. Args: - market: 'kr' (DART), 'us' (EDGAR), or 'all' (default) - signals: any of golden_cross, dead_cross, rsi_oversold (RSI<30), rsi_overbought (RSI>70), near_52w_high (within 3% of high), near_52w_low, above_sma20, volume_surge (vol_ratio>=2), macd_bullish (macd_hist>0), rs_leader (RS rating >=80 vs home market), rs_outperform (RS rating >=60). ANDed together; omit for none. - min_price: optional minimum close; min_vol_avg20: optional minimum 20-day average volume (liquidity filter) - sort_by: ret_1d|ret_5d|ret_20d|ret_60d|ret_120d|ret_250d|rsi14|vol_ratio|pct_from_52w_hi|pct_from_52w_lo|close|atr14|rs_pctile|rs_120d (default ret_20d) - order: 'asc'|'desc' (default 'desc'); limit: 1-100 (default 20); response_format: 'markdown'|'json' Relative strength (rs_pctile 1-99, rs_120d) measures each stock vs its OWN national market (KR vs the KR universe, US vs the US universe): rs_pctile is the national percentile of blended 3/6/12-month momentum (IBD-style; 99=strongest); rs_120d is 6-month excess return in pp over the national median. Returns: {count, market, signals, sort_by, order, rows:[{name, source, ticker|stock_code, as_of, close, rsi14, macd_hist, ret_5d, ret_20d, ret_60d, vol_ratio, pct_from_52w_hi, pct_from_52w_lo, golden_cross, dead_cross, above_sma20, rs_pctile, rs_120d}]}. Examples: - Oversold KR names by 20-day return: {market:'kr', signals:['rsi_oversold'], sort_by:'ret_20d', order:'asc'} - US breakouts near highs on volume: {market:'us', signals:['near_52w_high','volume_surge'], min_vol_avg20: 1000000} - Strongest KR leaders vs the KOSPI/KOSDAQ universe: {market:'kr', signals:['rs_leader'], sort_by:'rs_pctile', min_vol_avg20: 100000} Use when: ranking/filtering many companies by momentum or trend signals. Don't use for one company's detail (get_technicals) or fundamentals (screen_companies). Notes: KR/US/TW prices are adjusted for corporate actions but not dividends (indicators around dividend events may be slightly distorted); US history starts 2023-03-28 (volume from 2024-07-01) so long-window figures are shallower there. Market data, not investment advice. Errors: an empty result is not an error (count 0); 'database has not been built yet' -> ingest/indicators has not run. not classifiedlimit, order, market, signals, sort_by, min_price, min_vol_avg20, response_format
get_valuationGet the latest valuation snapshot for one KR or US company from the local finbridge database: market cap (latest close x shares) with PER, PBR, PSR, ROE, debt ratio, and 3-year revenue/net-income CAGR, joined to the company's latest annual fundamentals. Includes a plain-language interpretation and 1-2 same-market percentile hints (PER cheapness, ROE rank). Computed by the nightly valuation ingest job. Share counts: KR uses exact listed shares from the data.go.kr feed; US approximates diluted shares as net_income / eps_diluted. PER prefers price / eps_diluted, falling back to market_cap / net_income. Any ratio whose denominator is null or <= 0 is returned as null. Args: - company: US ticker (e.g. 'AAPL'), KR 6-digit stock code (e.g. '005930'), or company name. Resolution priority: exact ticker > 6-digit code > exact name > partial name (multiple partial matches return a candidate-list error). - response_format: 'markdown' (default) or 'json' Returns: {company: {name, source, ticker|stock_code}, as_of, fiscal_year, currency, price, shares, market_cap, per, pbr, psr, roe, debt_ratio, rev_cagr_3y, ni_cagr_3y, peer_context: {market, per_percentile, roe_percentile}, interpretation}. Ratios are plain numbers; roe/debt_ratio/CAGR are in percent. Examples: - {company: '005930'} -> Samsung Electronics PER/PBR/ROE plus "PER in the cheapest N% of the KR market" - {company: 'AAPL'} -> Apple valuation snapshot with US-market percentiles Caveats: PER/PBR/PSR/ROE/debt are dimensionless same-currency ratios — no FX conversion is applied; market_cap keeps the listing currency. KR fundamentals are K-IFRS and US are US-GAAP, so cross-market comparisons are approximate. This is snapshot data (not real-time) and not investment advice. Use when: assessing one company's valuation/quality at a glance, or comparing it to its own market. Don't use for many-company ranking (use screen_companies / query_db) or raw statements (get_dart_financials / get_edgar_financials). Errors: unknown company -> no-match or candidate-list error; 'no valuation snapshot' -> the valuation ingest job has not produced a row for this company (needs a price and latest-annual fundamentals). answer inferredcompany, response_format
screen_minerviniScreen KR, US and/or TW stocks that pass Mark Minervini's 8-point Trend Template (from "Trade Like a Stock Market Wizard"), evaluated on the nightly indicators_latest snapshot (daily corporate-action-adjusted KR prices). Returns stage-2 uptrend leaders, sorted by relative strength by default. The 8 criteria (all required): 1. Price above the 150-day and 200-day moving averages 2. 150-day MA above the 200-day MA 3. 200-day MA rising (vs ~1 month ago) [can be relaxed via require_sma200_rising] 4. 50-day MA above both the 150- and 200-day MAs 5. Price above the 50-day MA 6. Price at least 'above_low_pct'% above its 52-week low (default 25) 7. Price within 'near_high_pct'% of its 52-week high (default 25) 8. RS rating >= 'rs_min' (default 70), where RS is the national percentile (1-99) of blended 3/6/12-month momentum vs the stock's own market Optionally also require a Volatility Contraction Pattern base via require_vcp. VCP detection here is an APPROXIMATION (heuristic swing/contraction count, not a discretionary chart read) and can miss valid bases or flag false positives. Args: - market: 'kr' (DART/KOSPI+KOSDAQ), 'us' (EDGAR), or 'all' (default) - rs_min: minimum RS percentile 1-99 (default 70; Minervini prefers higher) - near_high_pct: max % below the 52-week high (default 25; smaller = tighter/closer to high) - above_low_pct: min % above the 52-week low (default 25) - require_sma200_rising: require criterion 3 (default true) - require_vcp: also require a heuristically-detected VCP base (vcp_setup=1) (default false; VCP is approximate) - min_vol_avg20: optional minimum 20-day average volume (liquidity filter; recommended to exclude illiquid microcaps) - min_price: optional minimum close price (Minervini avoids low-priced/penny stocks; e.g. 10 for US$, 5000 for KRW) - sort_by: rs_pctile|rs_120d|ret_120d|ret_20d|pct_from_52w_hi|close (default rs_pctile) - order: 'asc'|'desc' (default 'desc'); limit: 1-50 (default 20); response_format: 'markdown'|'json' Returns: {count, market, criteria:{rs_min, near_high_pct, above_low_pct, require_sma200_rising}, rows:[{name, source, ticker|stock_code, as_of, close, sma50, sma150, sma200, rs_pctile, rs_120d, pct_from_52w_hi, pct_from_52w_lo, ret_120d}]}. Examples: - US leaders in a confirmed uptrend: {market:'us', min_vol_avg20: 500000} - Strict KR setups near highs with strong RS: {market:'kr', rs_min: 85, near_high_pct: 15, min_vol_avg20: 100000} Use when: finding stage-2 momentum leaders (Minervini/CAN SLIM style). Don't use for a single stock's detail (get_technicals), fundamentals (screen_companies/get_valuation), or arbitrary technical signals (screen_technical). Notes: RS threshold of 70 keeps only stocks outperforming ~70% of their national market. KR/US/TW prices are adjusted for corporate actions but not dividends (indicators around dividend events may be slightly distorted); US history starts 2023-03-28 (volume from 2024-07-01) so long-window figures are shallower there. Market data, not investment advice. Errors: an empty result is not an error (count 0 = nothing passed today); 'database has not been built yet' -> ingest/indicators has not run. not classifiedlimit, order, market, rs_min, sort_by, min_price, require_vcp, above_low_pct
screen_canslimScreen KR and/or US stocks against William O'Neil's CAN SLIM checklist (as taught by David Ryan), joining the nightly valuation_latest (earnings/sales growth, ROE, PER) and indicators_latest (relative strength, distance from the 52-week high) snapshots. Returns fundamentally strong momentum leaders, sorted by RS by default. Only C, A, N, S, L are coded as filters — I (institutional sponsorship) and M (market direction) require fund-flow and index-level data that cannot be evaluated from a single stock's snapshot, so they are intentionally omitted: C — Current quarterly earnings: latest-quarter diluted-EPS YoY >= c_min (default 25). Quarter codes compare like-for-like a year apart (1=Q1, 2=cumulative half, 3=Q3). A — Annual earnings & quality: latest annual diluted-EPS YoY >= a_min (default 25) AND ROE >= roe_min (default 17) N — New highs: price within near_high_pct% of the 52-week high (default 15) S — Sales: latest annual revenue YoY > 0 when require_sales is true (default true) L — Leader: RS rating (national percentile 1-99) >= rs_min (default 80) A metric that is NULL (e.g. growth base was a loss, so the sign-flipped percentage is dropped) fails its comparison and the stock is excluded. Args: - market: 'kr' (DART/KOSPI+KOSDAQ), 'us' (EDGAR), or 'all' (default) - c_min: min latest-quarter EPS YoY %, CAN SLIM C (default 25) - a_min: min latest-annual EPS YoY %, CAN SLIM A (default 25) - roe_min: min ROE %, quality gate under A (default 17) - rs_min: min RS percentile 1-99, CAN SLIM L (default 80) - near_high_pct: max % below the 52-week high, CAN SLIM N (default 15; smaller = closer to the high) - require_sales: require positive annual revenue growth, CAN SLIM S (default true) - min_vol_avg20: optional min 20-day average volume (liquidity filter for illiquid microcaps) - min_price: optional min close price (O'Neil avoids low-priced stocks; e.g. 10 for US$, 5000 for KRW) - sort_by: rs_pctile|eps_q_yoy|eps_a_yoy|sales_a_yoy|roe|pct_from_52w_hi|close (default rs_pctile) - order: 'asc'|'desc' (default 'desc'); limit: 1-50 (default 20); response_format: 'markdown'|'json' Returns: {count, market, criteria:{c_min, a_min, roe_min, rs_min, near_high_pct, require_sales}, rows:[{name, source, ticker|stock_code, as_of, close, eps_q_yoy, eps_a_yoy, sales_a_yoy, roe, rs_pctile, pct_from_52w_hi, per}]}. Growth/ROE values are percent; pct_from_52w_hi is <= 0. Examples: - US CAN SLIM leaders with liquidity: {market:'us', min_vol_avg20: 500000} - Strict KR growth leaders near highs: {market:'kr', c_min: 40, a_min: 30, rs_min: 90, near_high_pct: 10} Use when: finding CAN SLIM-style growth leaders combining earnings/sales acceleration with strong relative strength. Don't use for a single company's valuation detail (get_valuation), the Minervini price template (screen_minervini), or raw statements (get_dart_financials / get_edgar_financials). Notes: CAN SLIM's I (institutional sponsorship) and M (market direction) cannot be screened from single-stock data — only C, A, N, S, L are applied. Growth uses diluted-EPS/revenue YoY; a company whose prior-period base is non-positive (loss->profit sign flip) has a null metric and is excluded. KR fundamentals follow K-IFRS and US follow US-GAAP, so cross-market growth/ROE comparisons are approximate. KR/US/TW prices are adjusted for corporate actions but not dividends (indicators around dividend events may be slightly distorted); US history starts 2023-03-28 (volume from 2024-07-01) so long-window figures are shallower there. Snapshot from the nightly ingest, not real-time, and not investment advice. Errors: an empty result is not an error (count 0 = nothing passed today); 'database has not been built yet' -> the valuation/indicators ingest has not run. not classifieda_min, c_min, limit, order, market, rs_min, roe_min, sort_by
screen_kellScreen KR, US and/or TW stocks for an Oliver Kell "Cycle of Price Action" long setup, evaluated on the nightly indicators_latest snapshot (daily corporate-action-adjusted KR prices). APPROXIMATION: Oliver Kell's method is discretionary — his full cycle (reversal extension, EMA crossback, wedge pop, base-n-break, exhaustion) is a chart read, not a formula. This screener only proxies ONE phase: "a relative-strength leader in an uptrend, riding its short-term EMAs and not over-extended". It will miss real Kell setups and flag stocks that are not. Conditions (all required): - close > 20-day EMA (uptrend, holding the 20EMA) - price is 0..'max_ext_pct'% above the 10-day EMA (above support but not exhausted) - RS percentile >= 'rs_min' (a leader) - if require_ema_stack: 10-day EMA > 20-day EMA (rising short-term stack) Args: - market: 'kr', 'us', or 'all' (default) - rs_min: minimum RS percentile 1-99 (default 80; Kell trades leaders) - max_ext_pct: max % above the 10-day EMA before treating it as over-extended (default 15) - require_ema_stack: require 10EMA > 20EMA (default true) - min_vol_avg20: optional minimum 20-day average volume (liquidity filter) - min_price: optional minimum close price (avoid low-priced stocks; e.g. 10 for US$, 5000 for KRW) - sort_by: rs_pctile|pct_from_ema10|ret_20d|ret_5d|macd_hist|close (default rs_pctile) - order: 'asc'|'desc' (default 'desc'); limit: 1-50 (default 20); response_format: 'markdown'|'json' Returns: {count, market, criteria:{rs_min, max_ext_pct, require_ema_stack}, rows:[{name, source, ticker|stock_code, as_of, close, ema10, ema20, pct_from_ema10, macd_hist, rs_pctile, ret_20d}]}. Examples: - US leaders on EMA support: {market:'us', min_vol_avg20: 500000} - Tighter KR leaders near the 10EMA: {market:'kr', rs_min: 85, max_ext_pct: 8, min_vol_avg20: 100000} Use when: shortlisting momentum leaders riding short-term EMAs (Kell style, approximate). Don't treat a pass as a Kell "buy" — the cycle phase and chart context are discretionary. For the 8-point trend template use screen_minervini; for arbitrary technicals use screen_technical. Notes: KR/US/TW prices are adjusted for corporate actions but not dividends (indicators around dividend events may be slightly distorted); US history starts 2023-03-28 (volume from 2024-07-01) so long-window figures are shallower there. This is an approximation of a discretionary method, not a faithful reproduction. Market data, not investment advice. Errors: an empty result is not an error (count 0 = nothing passed today); 'database has not been built yet' -> ingest/indicators has not run. not classifiedlimit, order, market, rs_min, sort_by, min_price, max_ext_pct, min_vol_avg20
screen_schwartzScreen KR, US and/or TW stocks for a Marty Schwartz short-term momentum setup, evaluated on the nightly indicators_latest snapshot (daily corporate-action-adjusted KR prices). APPROXIMATION: Marty Schwartz is a discretionary short-term trader; this screener only proxies his "10-day EMA green light + MACD momentum" principle. It is not his full method (which includes intraday timing, tape reading, and risk discretion). Expect false positives and misses. Conditions (all required): - close > 10-day EMA (Schwartz's "green light") - if require_macd_bull: MACD histogram > 0 (momentum bullish) - RS percentile >= 'rs_min' - price <= 'max_ext_pct'% above the 10-day EMA (not over-extended) Args: - market: 'kr', 'us', or 'all' (default) - rs_min: minimum RS percentile 1-99 (default 60) - require_macd_bull: require MACD histogram > 0 (default true) - max_ext_pct: max % above the 10-day EMA before over-extended (default 12) - min_vol_avg20: optional minimum 20-day average volume (liquidity filter) - min_price: optional minimum close price (avoid low-priced stocks; e.g. 10 for US$, 5000 for KRW) - sort_by: rs_pctile|pct_from_ema10|ret_20d|ret_5d|macd_hist|close (default rs_pctile) - order: 'asc'|'desc' (default 'desc'); limit: 1-50 (default 20); response_format: 'markdown'|'json' Returns: {count, market, criteria:{rs_min, require_macd_bull, max_ext_pct}, rows:[{name, source, ticker|stock_code, as_of, close, ema10, ema20, pct_from_ema10, macd_hist, rs_pctile, ret_20d}]}. Examples: - US short-term momentum, liquid: {market:'us', min_vol_avg20: 500000} - KR names on a fresh 10EMA green light, tight: {market:'kr', rs_min: 70, max_ext_pct: 6} Use when: shortlisting short-term momentum names on a 10-EMA green light (Schwartz style, approximate). Don't treat a pass as a Schwartz buy — his method is discretionary. For the trend template use screen_minervini; for EMA-support leaders use screen_kell. Notes: KR/US/TW prices are adjusted for corporate actions but not dividends (indicators around dividend events may be slightly distorted); US history starts 2023-03-28 (volume from 2024-07-01) so long-window figures are shallower there. This is an approximation of a discretionary method, not a faithful reproduction. Market data, not investment advice. Errors: an empty result is not an error (count 0 = nothing passed today); 'database has not been built yet' -> ingest/indicators has not run. not classifiedlimit, order, market, rs_min, sort_by, min_price, max_ext_pct, min_vol_avg20
get_disclosure_feedRecent regulatory disclosures from the local finbridge database (filings table, refreshed nightly + intraday for KR), newest first — positioned as a faster-than-news primary source. By default returns only MATERIAL filings: US Form 8-K (current reports) and KR 주요사항보고서 (major events: capital raises, M&A, convertible bonds, buybacks, etc.). Args: - market: 'kr' (DART), 'us' (EDGAR), or 'all' (default) - company: optional — restrict to one company (US ticker, KR 6-digit code, or name) - material_only: default true (8-K / KR type-B only); false = all filing types - forms: optional explicit form_type filter (e.g. ['10-K','8-K'] or ['A','B']); overrides material_only - days: look-back window in days, 1-120 (default 14); or use from/to - from/to: optional explicit YYYY-MM-DD range (overrides days) - limit: 1-100 (default 30); response_format: 'markdown'|'json' Returns: {count, market, since, rows:[{source, company_name, form_type, title, filed_date, url, items?}]}. 'items' (8-K item codes) is included when available. Examples: - Latest US material events this week: {market:'us', days:7} - Samsung's recent major-event filings: {company:'005930', material_only:true, days:90} - All of a company's filings: {company:'AAPL', material_only:false} Use when: scanning for catalysts / breaking corporate events, or one company's recent filings. Don't use for filing BODIES (open the url) or for financial statement values (get_dart_financials / get_edgar_financials / query_db). Notes: Filing metadata only; bodies are at the linked source URLs. Not investment advice. Errors: empty result is not an error (count 0). answer inferredto, days, from, forms, limit, market, company, material_only
get_edgar_13fLatest institutional-manager holdings from a SEC Form 13F-HR filing, aggregated by security with quarter-over-quarter (QoQ) changes. Filer-centric: answers "what does <manager> hold?" for a named institutional investment manager (e.g. Berkshire Hathaway, Bridgewater). It does NOT answer "who owns <ticker>?" — 13F info tables key securities by CUSIP + issuer name, not ticker. Args: - filer (required): institutional manager NAME ('Berkshire Hathaway Inc', 'Bridgewater Associates') or CIK number ('1067983'). NOTE: 13F managers are not in the ticker map, so an issuer ticker (AAPL) will not resolve here — use the manager's name or CIK. - top: number of largest holdings (by value) to return, 1-50 (default 20). QoQ changes are likewise capped at this count, most material first. - response_format: 'markdown' (default) or 'json' Returns: {filer:{name, cik}, period (YYYY-MM-DD quarter end), filed, total_value (whole USD), num_holdings (distinct CUSIPs), value_unit:'USD', holdings:[{issuer, cusip, class, shares, value, pct_of_portfolio}], prior_period?, changes:[{issuer, cusip, action, delta_shares, new_shares, prior_shares}], notes}. action: new=opened, added=increased, reduced=trimmed, sold=fully exited. Multiple info-table rows per issuer (one per sub-manager) are summed by CUSIP. Examples: - "What does Berkshire hold?" -> {filer:'Berkshire Hathaway Inc'} - "Bridgewater's top 10 positions and QoQ moves" -> {filer:'Bridgewater Associates', top:10} - "Berkshire 13F by CIK" -> {filer:'1067983'} Use when: you want a specific institutional manager's disclosed US equity portfolio and how it changed since the prior quarter. Don't use for: insider trades (get_edgar_insider_trades / Form 4), a reverse "which funds own ticker X" view (not supported — CUSIPs are not mapped to this server's ticker universe), Korean holdings, or intra-quarter/real-time positions. Caveats: value is reported in whole USD for filings on/after 2023-01-03 and in thousands before (normalized here to whole USD; a note flags conversions). 13F covers only long US-listed 13(f) securities — no shorts, options detail, cash, or non-US holdings — and is filed up to 45 days after quarter-end. Not investment advice. Errors: unknown filer -> ToolError (only 13F filers covered; use the exact name or CIK); ambiguous name -> ToolError listing candidate managers with CIKs; a manager filing 13F-NT only -> ToolError explaining no holdings table exists. answer inferredtop, filer, response_format

Command line alternative

Could not determine. The available signals were not conclusive enough to say either way, so this is left open rather than guessed.

Repository signals

Not checked yet. Stars, licence, language and last commit date are read from the source host, and that pass has not run against this record.

Security, privacy and enterprise use

Read from the publisher's own website on 2026-09-09. Links only: nothing here is independently verified.

Policies

Certifications the publisher names

No certification is named on the pages that were read.

Enterprise use

The publisher does not link an enterprise or business page, so enterprise terms could not be determined. Contact them directly.

Publisher

Website
gronox.kr
Profiles
none listed on the publisher's site
Community
no subreddit linked from the publisher's site

Review platforms

CAPTERRA G2 OMR TRUSTPILOT

Ratings are not shown. G2, Trustpilot and Capterra all prohibit republishing their scores without a licence, and marking up a borrowed rating as our own would breach search engine policy. These are profile links only, and a profile may not exist for every publisher.

Frequently asked questions

What does the FinBridge MCP server do?
Official-source financial data for AI agents: Korea, US, Taiwan, Japan, Europe. 37 tools, free tier.
Do I need to install anything to use FinBridge?
No. FinBridge is published as a hosted endpoint, so a compatible client connects to it over the network.
How do I install FinBridge?
Point your client at the hosted endpoint https://mcp.gronox.kr/mcp. No local install is needed.
Which transport does FinBridge use?
Streamable http. Your client has to support that transport to connect.
Where is the source code for FinBridge?
The publisher lists https://github.com/Jakechj/finbridge-mcp as the source repository.
Is FinBridge an official server?
It is published under the namespace kr.gronox, which means the publisher proved control of that domain when registering. That confirms who published it, not that it has been reviewed for quality or security.
Which version of FinBridge is listed here?
Version 0.1.3, taken from the latest registry entry.