Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

FinBridge

REMOTE · MCP.GRONOX.KR · SCANNED SEP 20

Korean stock research MCP: DART financials, global filings, daily prices and research tools.

Available components

+4 this week 81 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security94
Transport & Reachability100
Schema Quality & AI Usability57
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 28833 tokens (~655/item across 44 items; 44 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management36
  • Stability check failed: schema churn in the 13 days we've observed: 3 tool removals, 0 breaking changes, 0 auth/transport breaks, 7 additions. See how to fix → Fail
Tool Coverage97
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 90% of tool parameters carry a description.Partial
  • Structured output schemas are declared (91% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 45 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the FinBridge MCP server?

FinBridge is a hosted endpoint at https://mcp.gronox.kr/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.gronox.kr

# add to Claude Code
claude mcp add --transport http kr-gronox-finbridge 'https://mcp.gronox.kr/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "kr-gronox-finbridge": {
      "url": "https://mcp.gronox.kr/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "kr-gronox-finbridge": {
      "type": "http",
      "url": "https://mcp.gronox.kr/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.kr-gronox-finbridge]
url = "https://mcp.gronox.kr/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "kr-gronox-finbridge": {
      "type": "remote",
      "url": "https://mcp.gronox.kr/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add kr-gronox-finbridge --url 'https://mcp.gronox.kr/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  kr-gronox-finbridge:
    url: "https://mcp.gronox.kr/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "kr-gronox-finbridge": {
      "Transport": "http",
      "Url": "https://mcp.gronox.kr/mcp"
    }
  }
}
# add to Vellum
assistant mcp add kr-gronox-finbridge -t streamable-http -u 'https://mcp.gronox.kr/mcp'
// mcp.json
{
  "mcpServers": {
    "kr-gronox-finbridge": {
      "type": "http",
      "url": "https://mcp.gronox.kr/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
  • 19 Sept 26 0
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
  • 18 Sept 26 +1
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
  • 17 Sept 26 0
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
  • 16 Sept 26 +1
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
  • 15 Sept 26 0
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
  • 14 Sept 26 +1
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
  • 13 Sept 26 −1
    • Stability: 0.17 → fail security
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Probed https://mcp.gronox.kr/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=gronox.kr CN=WE1,O=Google Trust Services,C=US 8 Aug 2026 6 Nov 2026 ECDSA 256 ECDSA-SHA256 66d5a6693cfcf5a6131376ed95f9487e
SANs: gronox.kr, *.gronox.kr
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.gronox.kr. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
kr. present 64641 13 Verified
gronox.kr. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer resource_metadata="https://mcp.gronox.kr/.well-known/oauth-protected-resource/mcp"

Bearer resource_metadata="https://mcp.gronox.kr/.well-known/oauth-protected-resource/mcp"
Header Value
strict-transport-security max-age=15552000; includeSubDomains
x-content-type-options nosniff
referrer-policy no-referrer

Protected resource metadata

Document https://mcp.gronox.kr/.well-known/oauth-protected-resource/mcp
Retrieved Yes
Resource https://mcp.gronox.kr/mcp
Authorisation server https://mcp.gronox.kr/

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.gronox.kr/mcp Verified 200
http (plaintext) http://mcp.gronox.kr/mcp HTTPS enforced 301 https://mcp.gronox.kr/mcp
MCP tools · 44 exposed · ~28,551 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
real_estate_summarize_trades ~123

Summarize stored apartment sales, excluding cancellations. Monthly medians are not a price index or valuation. Months with no trades report count 0 — uncollected months raise an error instead.

NameTypeReqDescription
districtstring
fromstring
includeCanceledboolean
maxAreanumber
maxPriceMannumber
minAreanumber
minPriceMannumber
namestring
tostring

No output schema declared.

No examples provided.

restore_portfolio_snapshot ~135

Roll the stored portfolio back to a past snapshot from get_portfolio_history, replacing ALL current holdings and assets with that snapshot's content. Use this to undo a bad import_portfolio call. Omit snapshot_id to restore the snapshot immediately before the current state (undo the last change). This action is itself recorded as a new snapshot — history is append-only, so restoring is itself reversible the same way. Tell the user what was restored (get_portfolio afterwards shows it valued at current prices).

NameTypeReqDescription
snapshot_idintegerSnapshot id from get_portfolio_history. Omit to restore the one immediately before the latest.
NameTypeReqDescription
assets
errorstring
holdings
notesarray
restored_fromnumber|null
snapshotobject

No examples provided.

screen_canslim ~1,420

Screen 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. One of four named strategy screens (this one, screen_minervini, screen_kell, screen_schwartz), each a fixed published checklist. Not this tool for: thresholds you choose yourself (screen_technical), fundamentals (screen_companies) or funds (screen_etfs). 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_…

NameTypeReqDescription
a_minnumberMin latest-annual EPS YoY % — CAN SLIM A (default 25)
c_minnumberMin latest-quarter EPS YoY % — CAN SLIM C (default 25)
limitintegerMax rows, 1-50 (default 20)
marketstringMarket: 'kr' (default), 'us', or 'all'. ⚠Taiwan is not offered here — TWSE publishes a cumulative snapshot with no quarterly EPS growth or ROE, so every row would fail C/A silently.
min_pricenumberMin close price (O'Neil avoids low-priced stocks; e.g. 10 for US$, 5000 for KRW)
min_vol_avg20numberMin 20-day average volume (liquidity filter)
near_high_pctnumberMax % below the 52-week high — CAN SLIM N (default 15)
orderstringSort direction (default desc)
require_salesbooleanRequire positive annual revenue growth — CAN SLIM S (default true)
response_formatstring'markdown' for a table, 'json' for compact machine-readable output
roe_minnumberMin ROE % — quality gate under CAN SLIM A (default 17)
rs_minintegerMin RS percentile 1-99 — CAN SLIM L (default 80)
sort_bystringSort column (default rs_pctile)
NameTypeReqDescription
countnumberyes
criteriaobject
data_as_of
marketstringyes
notes
order
rowsarrayyes
signalsarray
sort_bystring|null
us_note

No examples provided.

screen_companies ~1,430

Screen 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; Annual rows (quarter=0) are the default. When a single market has no annual rows and fiscal_year is omitted, the screen falls back to that market's latest reported period. This fallback is not used for market='all'; do not compare a partial-year result with annual revenue. 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). Not this tool for: price or technical signals (screen_technical and the four named strategy screens), funds (screen_etfs), one company in depth (get_valuation), or statements straight from the regulator (get_dart_financials / get_edgar_financials). Coverage note: Taiwan carries only the latest reported period, because TWSE publishes a snapshot rather than history, and it has no annual row at all until an FY Q4 statement publishes — so roe, psr and the 3-year CAGRs are empty for every Taiwanese company, and cash / operating cash flow are unavailable there at any depth (the TWSE OpenAPI publishes no cash-flow statement and its balance sheet carries no cash line). Screen Taiwan on revenue, margins, EPS and the balance-sheet totals; use market='kr' or 'us' when the screen depends on a return, a multiple or a growth rate. 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 em…

NameTypeReqDescription
filtersarrayUp to 5 metric filters, ANDed together
fiscal_yearintegerSpecific fiscal year; omit to use each company's latest annual report
limitintegerMax rows, 1-100 (default 20)
marketstringMarket: 'kr' (DART), 'us' (EDGAR), 'tw' (TWSE/TPEx), 'jp' (EDINET), 'eu' (ESEF), or 'all' (default)
orderstringSort direction (default desc)
response_formatstring'markdown' for a table, 'json' for compact machine-readable output
sort_bystringMetric to sort by (default revenue)
NameTypeReqDescription
countnumberyes
data_as_of
fiscal_yearnumber|string
marketstringyes
notes
order
periodstring|null
rowsarrayyes
sort_by

No examples provided.

screen_etfs ~1,120

Screen 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. Funds only. Operating companies are screened by screen_companies (fundamentals) or screen_technical / the four named strategy screens (price signals). ⚠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_vo…

NameTypeReqDescription
index_containsstringSubstring of the tracked index name ('TR' for total-return indices)
limitintegerMax rows, 1-100 (default 20)
marketstringMarket: 'kr', 'us', or 'all' (default)
max_abs_premium_pctnumberKeep funds within this |premium to NAV| in percent
min_aumnumberMinimum net assets in listing currency (KR only; US is null)
min_premium_pctnumberKeep funds at or above this premium in percent (negative finds discounts)
min_pricenumberMinimum last close in listing currency
min_volumenumberMinimum 20-session average volume
name_containsstringSubstring of the fund name or ticker
orderstringSort direction (default desc)
response_formatstring'markdown' for a table, 'json' for compact output
sort_bystringSort key (default aum)
total_return_yearintegerCalendar year for total_return_pct; omit for the best-covered year (the response says which)
NameTypeReqDescription
countnumberyes
data_as_of
marketstringyes
order
rowsarrayyes
sort_bystring|null
total_return_yearnumber|null

No examples provided.

screen_kell ~1,146

Screen 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). One of four named strategy screens (this one, screen_minervini, screen_canslim, screen_schwartz), each a fixed published checklist. Not this tool for: thresholds you choose yourself (screen_technical), fundamentals (screen_companies) or funds (screen_etfs). 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_a…

NameTypeReqDescription
limitintegerMax rows, 1-50 (default 20)
marketstringMarket: 'kr' (default), 'us', 'tw', or 'all'. Japan has no redistributable price source, so it is not screenable.
max_ext_pctnumberMax % above the 10-day EMA before over-extended (default 15)
min_pricenumberMinimum close price (avoid low-priced stocks; e.g. 10 for US$, 5000 for KRW)
min_vol_avg20numberMinimum 20-day average volume (liquidity filter)
orderstringSort direction (default desc)
require_ema_stackbooleanRequire 10-day EMA > 20-day EMA (default true)
response_formatstring'markdown' for a table, 'json' for compact machine-readable output
rs_minintegerMinimum RS percentile (default 80)
sort_bystringSort column (default rs_pctile)
NameTypeReqDescription
countnumberyes
criteriaobject
data_as_of
marketstringyes
notes
order
rowsarrayyes
signalsarray
sort_bystring|null
us_note

No examples provided.

screen_minervini ~1,248

Screen 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. One of four named strategy screens (this one, screen_canslim, screen_kell, screen_schwartz), each a fixed published checklist. Not this tool for: thresholds you choose yourself (screen_technical), fundamentals (screen_companies) or funds (screen_etfs). 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…

NameTypeReqDescription
above_low_pctnumberMin % above the 52-week low (default 25)
limitintegerMax rows, 1-50 (default 20)
marketstringMarket: 'kr' (default), 'us', 'tw', or 'all'. Japan has no redistributable price source, so it is not screenable.
min_pricenumberMinimum close price (Minervini avoids low-priced stocks; e.g. 10 for US$, 5000 for KRW)
min_vol_avg20numberMinimum 20-day average volume (liquidity filter)
near_high_pctnumberMax % below the 52-week high (default 25)
orderstringSort direction (default desc)
require_sma200_risingbooleanRequire the 200-day MA to be rising (criterion 3)
require_vcpbooleanAlso require a heuristically-detected VCP base (vcp_setup=1). VCP detection is approximate.
response_formatstring'markdown' for a table, 'json' for compact machine-readable output
rs_minintegerMinimum RS percentile (default 70)
sort_bystringSort column (default rs_pctile)
NameTypeReqDescription
countnumberyes
criteriaobject
data_as_of
marketstringyes
notes
order
rowsarrayyes
signalsarray
sort_bystring|null
us_note

No examples provided.

screen_schwartz ~1,073

Screen 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). One of four named strategy screens (this one, screen_minervini, screen_canslim, screen_kell), each a fixed published checklist. Not this tool for: thresholds you choose yourself (screen_technical), fundamentals (screen_companies) or funds (screen_etfs). 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-E…

NameTypeReqDescription
limitintegerMax rows, 1-50 (default 20)
marketstringMarket: 'kr' (default), 'us', 'tw', or 'all'. Japan has no redistributable price source, so it is not screenable.
max_ext_pctnumberMax % above the 10-day EMA before over-extended (default 12)
min_pricenumberMinimum close price (avoid low-priced stocks; e.g. 10 for US$, 5000 for KRW)
min_vol_avg20numberMinimum 20-day average volume (liquidity filter)
orderstringSort direction (default desc)
require_macd_bullbooleanRequire MACD histogram > 0 (default true)
response_formatstring'markdown' for a table, 'json' for compact machine-readable output
rs_minintegerMinimum RS percentile (default 60)
sort_bystringSort column (default rs_pctile)
NameTypeReqDescription
countnumberyes
criteriaobject
data_as_of
marketstringyes
notes
order
rowsarrayyes
signalsarray
sort_bystring|null
us_note

No examples provided.

screen_technical ~1,041

Screen 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. This is the open-ended technical screen: you pick the signals and thresholds. The four named strategies are fixed checklists instead (screen_minervini, screen_canslim, screen_kell, screen_schwartz). Not this tool for: fundamentals (screen_companies) or funds (screen_etfs). 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:'a…

NameTypeReqDescription
limitintegerMax rows, 1-100 (default 20)
marketstringMarket: 'kr' (default), 'us', 'tw', or 'all'. Japan has no redistributable price source, so it is not screenable.
min_pricenumberMinimum close price filter
min_vol_avg20numberMinimum 20-day average volume (liquidity filter)
orderstringSort direction (default desc)
response_formatstring'markdown' for a table, 'json' for compact machine-readable output
signalsarrayTechnical signals to require (ANDed): golden_cross, dead_cross, rsi_oversold, rsi_overbought, near_52w_high, near_52w_low, above_sma20, volume_surge, macd_bullish, rs_leader (RS>=80), rs_outperform (…
sort_bystringColumn to sort by (default ret_20d)
NameTypeReqDescription
countnumberyes
criteriaobject
data_as_of
marketstringyes
notes
order
rowsarrayyes
signalsarray
sort_bystring|null
us_note

No examples provided.

search_dart_company ~376

Search 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. Not this tool for: US registrants (use search_edgar_company). Japan, Taiwan and Europe have no search tool — reach them through screen_companies or query_db on the companies table. 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).

NameTypeReqDescription
limitintegerMax results, 1-50 (default 10)
listed_onlybooleanOnly KRX-listed companies (default true)
querystringyesCompany name, 6-digit stock code, or 8-digit DART corp_code
NameTypeReqDescription
companiesarrayyes
countnumberyes

No examples provided.

search_edgar_company ~360

Search 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. Not this tool for: Korean companies (use search_dart_company). Japan, Taiwan and Europe have no search tool — reach them through screen_companies or query_db on the companies table. 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.

NameTypeReqDescription
limitintegerMax matches to return (default 10)
querystringyesTicker (e.g. 'AAPL', 'BRK-B'), company-name fragment (e.g. 'Berkshire'), or CIK number
NameTypeReqDescription
companiesarrayyes
countnumberyes

No examples provided.

Common questions

What is the FinBridge MCP server?

FinBridge is an MCP server listed in the public MCP registry as kr.gronox/finbridge. Korean stock research MCP: DART financials, global filings, daily prices and research tools. This page covers its hosted endpoint (https://mcp.gronox.kr/mcp).

Is the FinBridge MCP server safe to use?

FinBridge scores 81 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the FinBridge MCP server expose?

FinBridge exposes 44 tools: real_estate_get_coverage, real_estate_list_regions, real_estate_search_trades, real_estate_summarize_trades, import_portfolio, and 39 more. Their descriptions and schemas cost roughly 28,551 tokens of context every time the server is loaded.

Does the FinBridge MCP server require authentication?

Yes. FinBridge asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the FinBridge MCP server still maintained?

FinBridge is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.