FinBridge
REMOTE · MCP.GRONOX.KR · SCANNED SEP 20
Korean stock research MCP: DART financials, global filings, daily prices and research tools.
Available components
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
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
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
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
claude mcp add --transport http kr-gronox-finbridge 'https://mcp.gronox.kr/mcp'
{
"mcpServers": {
"kr-gronox-finbridge": {
"url": "https://mcp.gronox.kr/mcp"
}
}
} {
"servers": {
"kr-gronox-finbridge": {
"type": "http",
"url": "https://mcp.gronox.kr/mcp"
}
}
} [mcp_servers.kr-gronox-finbridge] url = "https://mcp.gronox.kr/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"kr-gronox-finbridge": {
"type": "remote",
"url": "https://mcp.gronox.kr/mcp",
"enabled": true
}
}
} openclaw mcp add kr-gronox-finbridge --url 'https://mcp.gronox.kr/mcp' --transport streamable-http
mcp_servers:
kr-gronox-finbridge:
url: "https://mcp.gronox.kr/mcp" {
"McpServers": {
"kr-gronox-finbridge": {
"Transport": "http",
"Url": "https://mcp.gronox.kr/mcp"
}
}
} assistant mcp add kr-gronox-finbridge -t streamable-http -u 'https://mcp.gronox.kr/mcp'
{
"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.
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
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 |
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 →
real_estate_summarize_trades Summarize Apartment Sales ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| district | string | – | – |
| from | string | – | – |
| includeCanceled | boolean | – | – |
| maxArea | number | – | – |
| maxPriceMan | number | – | – |
| minArea | number | – | – |
| minPriceMan | number | – | – |
| name | string | – | – |
| to | string | – | – |
No output schema declared.
No examples provided.
restore_portfolio_snapshot Restore a Past Portfolio ~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).
| Name | Type | Req | Description |
|---|---|---|---|
| snapshot_id | integer | – | Snapshot id from get_portfolio_history. Omit to restore the one immediately before the latest. |
| Name | Type | Req | Description |
|---|---|---|---|
| assets | – | – | – |
| error | string | – | – |
| holdings | – | – | – |
| notes | array | – | – |
| restored_from | number|null | – | – |
| snapshot | object | – | – |
No examples provided.
screen_canslim CAN SLIM Screener (FinBridge DB) ~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_…
| Name | Type | Req | Description |
|---|---|---|---|
| a_min | number | – | Min latest-annual EPS YoY % — CAN SLIM A (default 25) |
| c_min | number | – | Min latest-quarter EPS YoY % — CAN SLIM C (default 25) |
| limit | integer | – | Max rows, 1-50 (default 20) |
| market | string | – | Market: '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_price | number | – | Min close price (O'Neil avoids low-priced stocks; e.g. 10 for US$, 5000 for KRW) |
| min_vol_avg20 | number | – | Min 20-day average volume (liquidity filter) |
| near_high_pct | number | – | Max % below the 52-week high — CAN SLIM N (default 15) |
| order | string | – | Sort direction (default desc) |
| require_sales | boolean | – | Require positive annual revenue growth — CAN SLIM S (default true) |
| response_format | string | – | 'markdown' for a table, 'json' for compact machine-readable output |
| roe_min | number | – | Min ROE % — quality gate under CAN SLIM A (default 17) |
| rs_min | integer | – | Min RS percentile 1-99 — CAN SLIM L (default 80) |
| sort_by | string | – | Sort column (default rs_pctile) |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | yes | – |
| criteria | object | – | – |
| data_as_of | – | – | – |
| market | string | yes | – |
| notes | – | – | – |
| order | – | – | – |
| rows | array | yes | – |
| signals | array | – | – |
| sort_by | string|null | – | – |
| us_note | – | – | – |
No examples provided.
screen_companies Screen Companies (FinBridge DB) ~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…
| Name | Type | Req | Description |
|---|---|---|---|
| filters | array | – | Up to 5 metric filters, ANDed together |
| fiscal_year | integer | – | Specific fiscal year; omit to use each company's latest annual report |
| limit | integer | – | Max rows, 1-100 (default 20) |
| market | string | – | Market: 'kr' (DART), 'us' (EDGAR), 'tw' (TWSE/TPEx), 'jp' (EDINET), 'eu' (ESEF), or 'all' (default) |
| order | string | – | Sort direction (default desc) |
| response_format | string | – | 'markdown' for a table, 'json' for compact machine-readable output |
| sort_by | string | – | Metric to sort by (default revenue) |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | yes | – |
| data_as_of | – | – | – |
| fiscal_year | number|string | – | – |
| market | string | yes | – |
| notes | – | – | – |
| order | – | – | – |
| period | string|null | – | – |
| rows | array | yes | – |
| sort_by | – | – | – |
No examples provided.
screen_etfs Screen ETFs (FinBridge DB) ~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…
| Name | Type | Req | Description |
|---|---|---|---|
| index_contains | string | – | Substring of the tracked index name ('TR' for total-return indices) |
| limit | integer | – | Max rows, 1-100 (default 20) |
| market | string | – | Market: 'kr', 'us', or 'all' (default) |
| max_abs_premium_pct | number | – | Keep funds within this |premium to NAV| in percent |
| min_aum | number | – | Minimum net assets in listing currency (KR only; US is null) |
| min_premium_pct | number | – | Keep funds at or above this premium in percent (negative finds discounts) |
| min_price | number | – | Minimum last close in listing currency |
| min_volume | number | – | Minimum 20-session average volume |
| name_contains | string | – | Substring of the fund name or ticker |
| order | string | – | Sort direction (default desc) |
| response_format | string | – | 'markdown' for a table, 'json' for compact output |
| sort_by | string | – | Sort key (default aum) |
| total_return_year | integer | – | Calendar year for total_return_pct; omit for the best-covered year (the response says which) |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | yes | – |
| data_as_of | – | – | – |
| market | string | yes | – |
| order | – | – | – |
| rows | array | yes | – |
| sort_by | string|null | – | – |
| total_return_year | number|null | – | – |
No examples provided.
screen_kell Oliver Kell Cycle Screener — approximation (FinBridge DB) ~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…
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max rows, 1-50 (default 20) |
| market | string | – | Market: 'kr' (default), 'us', 'tw', or 'all'. Japan has no redistributable price source, so it is not screenable. |
| max_ext_pct | number | – | Max % above the 10-day EMA before over-extended (default 15) |
| min_price | number | – | Minimum close price (avoid low-priced stocks; e.g. 10 for US$, 5000 for KRW) |
| min_vol_avg20 | number | – | Minimum 20-day average volume (liquidity filter) |
| order | string | – | Sort direction (default desc) |
| require_ema_stack | boolean | – | Require 10-day EMA > 20-day EMA (default true) |
| response_format | string | – | 'markdown' for a table, 'json' for compact machine-readable output |
| rs_min | integer | – | Minimum RS percentile (default 80) |
| sort_by | string | – | Sort column (default rs_pctile) |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | yes | – |
| criteria | object | – | – |
| data_as_of | – | – | – |
| market | string | yes | – |
| notes | – | – | – |
| order | – | – | – |
| rows | array | yes | – |
| signals | array | – | – |
| sort_by | string|null | – | – |
| us_note | – | – | – |
No examples provided.
screen_minervini Minervini Trend Template Screener (FinBridge DB) ~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…
| Name | Type | Req | Description |
|---|---|---|---|
| above_low_pct | number | – | Min % above the 52-week low (default 25) |
| limit | integer | – | Max rows, 1-50 (default 20) |
| market | string | – | Market: 'kr' (default), 'us', 'tw', or 'all'. Japan has no redistributable price source, so it is not screenable. |
| min_price | number | – | Minimum close price (Minervini avoids low-priced stocks; e.g. 10 for US$, 5000 for KRW) |
| min_vol_avg20 | number | – | Minimum 20-day average volume (liquidity filter) |
| near_high_pct | number | – | Max % below the 52-week high (default 25) |
| order | string | – | Sort direction (default desc) |
| require_sma200_rising | boolean | – | Require the 200-day MA to be rising (criterion 3) |
| require_vcp | boolean | – | Also require a heuristically-detected VCP base (vcp_setup=1). VCP detection is approximate. |
| response_format | string | – | 'markdown' for a table, 'json' for compact machine-readable output |
| rs_min | integer | – | Minimum RS percentile (default 70) |
| sort_by | string | – | Sort column (default rs_pctile) |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | yes | – |
| criteria | object | – | – |
| data_as_of | – | – | – |
| market | string | yes | – |
| notes | – | – | – |
| order | – | – | – |
| rows | array | yes | – |
| signals | array | – | – |
| sort_by | string|null | – | – |
| us_note | – | – | – |
No examples provided.
screen_schwartz Marty Schwartz 10-EMA + MACD Screener — approximation (FinBridge DB) ~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…
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max rows, 1-50 (default 20) |
| market | string | – | Market: 'kr' (default), 'us', 'tw', or 'all'. Japan has no redistributable price source, so it is not screenable. |
| max_ext_pct | number | – | Max % above the 10-day EMA before over-extended (default 12) |
| min_price | number | – | Minimum close price (avoid low-priced stocks; e.g. 10 for US$, 5000 for KRW) |
| min_vol_avg20 | number | – | Minimum 20-day average volume (liquidity filter) |
| order | string | – | Sort direction (default desc) |
| require_macd_bull | boolean | – | Require MACD histogram > 0 (default true) |
| response_format | string | – | 'markdown' for a table, 'json' for compact machine-readable output |
| rs_min | integer | – | Minimum RS percentile (default 60) |
| sort_by | string | – | Sort column (default rs_pctile) |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | yes | – |
| criteria | object | – | – |
| data_as_of | – | – | – |
| market | string | yes | – |
| notes | – | – | – |
| order | – | – | – |
| rows | array | yes | – |
| signals | array | – | – |
| sort_by | string|null | – | – |
| us_note | – | – | – |
No examples provided.
screen_technical Screen by Technical Signals (FinBridge DB) ~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…
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max rows, 1-100 (default 20) |
| market | string | – | Market: 'kr' (default), 'us', 'tw', or 'all'. Japan has no redistributable price source, so it is not screenable. |
| min_price | number | – | Minimum close price filter |
| min_vol_avg20 | number | – | Minimum 20-day average volume (liquidity filter) |
| order | string | – | Sort direction (default desc) |
| response_format | string | – | 'markdown' for a table, 'json' for compact machine-readable output |
| signals | array | – | Technical 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_by | string | – | Column to sort by (default ret_20d) |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | yes | – |
| criteria | object | – | – |
| data_as_of | – | – | – |
| market | string | yes | – |
| notes | – | – | – |
| order | – | – | – |
| rows | array | yes | – |
| signals | array | – | – |
| sort_by | string|null | – | – |
| us_note | – | – | – |
No examples provided.
search_dart_company Search Korean Companies (DART) ~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).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max results, 1-50 (default 10) |
| listed_only | boolean | – | Only KRX-listed companies (default true) |
| query | string | yes | Company name, 6-digit stock code, or 8-digit DART corp_code |
| Name | Type | Req | Description |
|---|---|---|---|
| companies | array | yes | – |
| count | number | yes | – |
No examples provided.
search_edgar_company Search SEC EDGAR Companies ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max matches to return (default 10) |
| query | string | yes | Ticker (e.g. 'AAPL', 'BRK-B'), company-name fragment (e.g. 'Berkshire'), or CIK number |
| Name | Type | Req | Description |
|---|---|---|---|
| companies | array | yes | – |
| count | number | yes | – |
No examples provided.
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.