Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Authorization not required, issuer https://mcp.gronox.kr/
Certificate changed, valid to 2027-01-04
Authorization not required, issuer https://mcp.gronox.kr/
Changed the definition of "get_dart_insider_trades"
⟨161 unchanged words⟩ fetched set regardless of the filter. Important:unlikethisUSelestockFormsummary4,API does not provide transaction dates or prices. filedAt is theKRfilingreportdate,hasnotNOthe transactionpricedate.—Theonlyunderlyingshare
Changed the definition of "get_dart_document", "get_dart_filings", "get_dart_financials" and 2 more
⟨110 unchanged words⟩ DART, not from the preserved copy.","patternmaxLength":"^[\\p{L}\\p{N}._/-]{1,120}$,"minLength":1,"type":"string"},"fresh":{" ⟨224 unchanged words⟩
⟨40 unchanged words⟩ DART filings index (refreshed every 5 minutes)when
Changed the definition of "compare_financials_kr_us"
⟨66 unchanged words⟩ number of recent fiscal years, 1-5 (default33; free plan up to 4) - metrics: subset of [revenue, gross_profit ⟨69 unchanged words⟩
⟨102 unchanged words⟩ many recent fiscal years to compare (default33; the free plan covers up to 4)","maximum":5,"minimum":1," ⟨7 unchanged words⟩
Authorization not required, issuer https://mcp.gronox.kr/
Authorization not required, issuer https://mcp.gronox.kr/
Changed the definition of "get_dart_document"
Explorethe primary body ofone DART filing by receipt number while preserving section and tablestructure.structure — the main body by default, or one of its attachments (audit reports carry the consolidated statements; the main body carries the business description). Use get_dart_filings first to obtain rcept_no. Start with ⟨6 unchanged words⟩ table instead of requesting a long flattened filing. The overview lists the archive's entries (main body + attachments with their first heading); pass entry='<name>' to explore an attachment. Args: - rcept_no: 14-digit DART receipt number - entry: archive entry name from the overview's entries list (default: the main body) - action: overview (default) | section | table ⟨113 unchanged words⟩ and negative strings are not discarded. Separate HWP/PDFattachmentsfiles are not fetched or rehosted. This tool does ⟨19 unchanged words⟩
Authorization not required, issuer https://mcp.gronox.kr/
Changed the definition of "get_dart_document", "get_dart_filings" and "get_dart_major_events"
⟨75 unchanged words⟩ {14}$","type":"string"},"fresh":{"default":false,"description":"false (default): read FinBridge's preserved copy of this filing when we hold one, and DART otherwise. true: fetch the current version from DART now — use only when the user asks for the latest text or suspects a correction.","type":"boolean"},"max_chars":{"default":30000,"description":"Maximum ⟨175 unchanged words⟩
⟨27 unchanged words⟩ "minLength":1,"type":"string"},"fresh":{"default":false,"description":"false (default): answer from FinBridge's DART filings index (refreshed every 5 minutes) when it covers the window, DART otherwise. true: ask DART directly.","type":"boolean"},"
Authorization not required, issuer https://mcp.gronox.kr/
Changed the definition of "get_dart_document", "get_dart_financials", "get_db_schema" and 8 more
⟨28 unchanged words⟩ ,"type":"string"},"compare_index":{"description":"Table or section index inside the second filing. Read that filing's overview first; table_index/section_index selects the first filing's side.","exclusiveMinimum":0,"maximum":10000,"type":"integer"},"compare_rcept_no":{"description":"Second filing's 14-digit receipt number, for compare_tables / compare_sections. The first filing is rcept_no.","pattern":"^\\d{14}$","type": ⟨181 unchanged words⟩
⟨45 unchanged words⟩ ), or ranking many companies at once (screen_companiesquery_db
Added "screen_etfs"; changed the definition of "get_disclosure_feed" (25 tools before, 26 now)
⟨67 unchanged words⟩ US ticker, KR 6-digit code, or name). Takes priority over watchlist. - material_only: default true (8-K / KR ⟨45 unchanged words⟩ limit: 1-100 (default 30); response_format: 'markdown'|'json' - brief: default true — attach the plain-language fact summary (headline_en/headline_ko/facts_en/facts_ko/company_en/event_type) where one exists. Rows without a summary are unaffected. The markdown rendering shows the English side; both sides stay in the JSON. - watchlist: default false — restrict to the authenticated account's watchlist companies instead of all companies. Needs a personal API key (not the admin token). Ignored when 'company' is also given. Returns: {count, market, since, rows:[{source, company_name, form_type, title, filed_date, url, items?, headline_en?, headline_ko?, facts_en?, facts_ko?, company_en?, event_type?}]}. 'items' (8-K item codes) is included when available. Summary fields are present only for filings that have one. Note: with brief:true, a filing that only exists as a summary (not yet in our filings index) can still appear — such rows omit form_type/items and, for non-DART sources, url. Examples: - Latest US material events this ⟨19 unchanged words⟩ a company's filings: {company:'AAPL', material_only:false
Removed "analyze_factors", "backtest_portfolio", "compare_crypto_exchanges" and 16 more; changed the definition of "search_dart_company" (44 tools before, 25 now)
⟨54 unchanged words⟩ companies table. Args: - query: company name(in Koreanworks('삼성전자')best,ore.g.English'삼성전자'('Samsung Electronics'), 6-digit KRX stock code ('005930'), ⟨27 unchanged words⟩ {count, companies: [{corp_code, corp_name, corp_name_en, stock_code}]} — corp_name is the Korean name DART registers, corp_name_en the registered English name where the company files one (about three quarters of Korean issuers). stock_code is null for unlisted companies. Match priority: exact stock code > exact Korean
Authorization not required, issuer https://mcp.gronox.kr/
Authorization not required, issuer https://mcp.gronox.kr/
Authorization not required, issuer https://mcp.gronox.kr/
Authorization not required, issuer https://mcp.gronox.kr/
Changed the definition of "get_dart_financials" and "get_valuation"
⟨446 unchanged words⟩ | not_yet_filed | original_not_preserved | no_versions | unavailable. - earnings_disclosures (only when stored filings exist for this period): figures the company itself disclosed, next to its periodic-report figures. preliminary_vs_reported = the last 영업(잠정)실적 filing published on or before the periodic report vs that report's original values (difference, difference_pct, within_rounding = within half the preliminary table's unit; window_ambiguous/scale_suspect assert nothing), with every preliminary version, its amendment link (only when exactly one earlier original exists) and unreadable filings. outlook_vs_reported = single-number items from 영업실적등에대한전망/장래사업ㆍ경영계획 for this exact period with achievement_pct = reported ÷ disclosed × 100, or a status explaining why nothing is computed (basis_not_stated, definition_may_differ, period_not_reported_directly …). history = counts of those filings and their amendments since recorded_from. Facts only — no forecast, estimate or recommendation. Examples: - {corp: '삼성전자', year: ⟨71 unchanged words⟩
⟨23 unchanged words⟩ "},{"type":"null"}]},"
Certificate recorded, valid to 2026-11-06
Authorization not required, issuer https://mcp.gronox.kr/
Added "get_portfolio_history" and "restore_portfolio_snapshot"; changed the definition of "backtest_portfolio", "get_dart_financials" and "import_portfolio" (42 tools before, 44 now)
⟨195 unchanged words⟩ the other currency are converted daily (USDKRW,FREDFederalDEXKOUSReserve H.10). - initial: starting value in the ⟨258 unchanged words⟩
⟨193 unchanged words⟩ account rows, 1-200 (default 40) - as_of: optional YYYY-MM-DD. Adds point_in_time: the version of this period/basis that was public on that day. -
First tool surface recorded: 42 tools (server version 0.1.3)
Showing the latest 24 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨31 unchanged words⟩ :"object"},"type":"array"},"index_as_of":{"type":["string","null"]},"note":{"type":"string"},"page":{"$ref":"#/properties/total"},"quota_fallback":{"type":"boolean"},"served_from":{"type":"string"},"sources":{"additionalProperties":true,"properties":{},"type":"object"},"total":{"type":["number","null"]},"uncovered":{"items":{"additionalProperties":true,"properties":{},"type":"object"},"type":"array"}},"required":["filings"],"type":"object"}
⟨77 unchanged words⟩ a process-local cache for up to 24 hours. When FinBridge's own database already has this exact company/year/report/basis with account-level detail and no newer filing receipt, it answers from the database instead of calling DART (served_from: finbridge_db) — saved to conserve the shared daily DART quota; a 'statement'/'account_query' filter always goes live since the DB keeps only the top reported rows. data_as_of.generated_at is response creation time, not source retrieval ⟨557 unchanged words⟩
⟨23 unchanged words⟩ "},{"type":"null"}]},"disclosed_date":{"$ref":"#/properties/served_from"},"earnings_disclosures":{"additionalProperties":true,"properties":{},"type":"object"},"live_dart_status":{"$ref":"#/properties/served_from"},"normalized":{"additionalProperties":true,"properties":{} ⟨26 unchanged words⟩ properties":{},"type":"object"},"receipt_id":{"$ref":"#/properties/served_from"},"receipt_url":{"$ref":"#/properties/served_from"},"revision_links":{"additionalProperties":true,"properties":{},"type":"object"},"served_from":{"type":["string","null"]},"statement_groups":{"items":{"additionalProperties":true,"properties":{},"type":"object"},"type":"array"},"stored_as_of":{"$ref":"#/properties/served_from"},"sum_checks":{"items":{"additionalProperties" ⟨10 unchanged words⟩
⟨40 unchanged words⟩ DART filings index (refreshed every 5 minutes)whenforitthecoverspart of the window it covers, and ask DARTotherwise.live only for the uncovered remainder (saves DART's daily quota). true: ask DARTdirectly.directly for the whole window; on daily-quota exhaustion (020), falls back to the index for whatever it covers and says what could not be refreshed.","type":"boolean"},"from":{ ⟨68 unchanged words⟩
⟨31 unchanged words⟩ :"object"},"type":"array"},"index_as_of":{"type":["string","null"]},"note":{"type":"string"},"page":{"$ref":"#/properties/total"},"quota_fallback":{"type":"boolean"},"served_from":{"type":"string"},"sources":{"additionalProperties":true,"properties":{},"type":"object"},"total":{"type":["number","null"]},"uncovered":{"items":{"additionalProperties":true,"properties":{},"type":"object"},"type":"array"}},"required":["filings"],"type":"object"}
⟨10 unchanged words⟩ ,"basis":{"$ref":"#/properties/as_of"},"basis_kind":{"type":"string"},"basis_label":{"type":"string"},"company":{"additionalProperties":true,"properties":{" ⟨46 unchanged words⟩ "},{"type":"null"}]},"insufficiency_reason":{"type":["string","null"]},"notes":{"items":{"type":"string" ⟨7 unchanged words⟩ ,"type":"object"},"type":"array"},"policy_version":{"type":"string"},"purpose":{"type":"string"},"sector":{"anyOf":[{"additionalProperties ⟨20 unchanged words⟩
⟨75 unchanged words⟩ {14}$","type":"string"},"entry":{"description":"Archive entry to explore, exactly as the overview's entries list names it (e.g. 20260313001021_00761.xml for a consolidated audit report). Omit for the main body. Attachments are read from DART, not from the preserved copy.","pattern":"^[\\p{L}\\p{N}._/-]{1,120}$","type":"string"},"fresh":{"default":false,"description":"false ⟨220 unchanged words⟩
⟨153 unchanged words⟩ CB) or '자기주식' (treasury stock). Filteringisrunsappliedoverclient-sideevery event in range when FinBridge's index covers the window, otherwise over the most recent 100 eventsinDARTrange.returns. - limit: max results, 1-100 (default ⟨106 unchanged words⟩
⟨27 unchanged words⟩ "minLength":1,"type":"string"},"fresh":{"default":false,"description":"false (default): answer from FinBridge's DART filings index (refreshed every 5 minutes) when it covers the window, DART otherwise. true: ask DART directly.","type":"boolean"},"from":{"description":"Start date YYYY-MM-DD ( ⟨64 unchanged words⟩
⟨183 unchanged words⟩ for market data itself (get_stock_prices / get_valuation/ the screenersread the same tables with the right joins ⟨18 unchanged words⟩ the nightly ingest; the only live data iscrypto (get_crypto_ticker) andregulator filings (get_dart_filings / get_edgar_filings). Errors: ⟨16 unchanged words⟩
⟨46 unchanged words⟩ ), or ranking many companies at once (screen_companiesquery_db, which reads the stored table and covers ⟨222 unchanged words⟩
⟨53 unchanged words⟩ , prices (get_stock_prices), or finding companies (screen_companiessearch_dart_company / search_edgar_company). It reads only what this user stored ⟨47 unchanged words⟩
⟨18 unchanged words⟩ are returned newest first. Listed equities and ETFs.Crypto has its own feed (get_crypto_ohlcv);Japan and Europe carry no prices atall.all, and crypto is not served. Price coverage by market — we only store ⟨245 unchanged words⟩ calculations from ingested data. Don't use for crypto,(get_crypto_ohlcv).which is not served. FinBridge has no real-time equity quote tool — ⟨7 unchanged words⟩ the nightly ingest; the only live data iscrypto (get_crypto_ticker) andregulator filings (get_dart_filings / get_edgar_filings). Errors: ⟨31 unchanged words⟩
⟨361 unchanged words⟩ market. Don't use for many-company ranking (usescreen_companies /query_db) or raw statements (get_dart_financials / get_edgar_financials) ⟨32 unchanged words⟩
⟨89 unchanged words⟩ Europe are largely reachable only this way. Preferscreen_companiesget_valuation or get_peers for ordinaryfundamentalsingle-companyscreenswork (itthey handles per-market period and currency rules that a ⟨171 unchanged words⟩ when: custom aggregation/joins over ingested data thatscreen_companiesnocannotdedicatedexpress.tool expresses. Don't use for anything that writes — it ⟨18 unchanged words⟩ the nightly ingest; the only live data iscrypto (get_crypto_ticker) andregulator filings (get_dart_filings / get_edgar_filings). Errors: ⟨24 unchanged words⟩
⟨38 unchanged words⟩ return from the fund's own prospectus. Funds only.OperatingForcompaniesanareoperatingscreenedcompanybyusescreen_companiesget_valuation (fundamentalsone company) orscreen_technicalquery_db/(manytheatfouronce). ⚠Fundsnamedfilestrategynoscreensannual(pricefinancialsignals). ⚠Thesestatements,fundssoaretheexcludedstatement-basedfromtoolsscreen_companies(get_dart_financials,byget_valuation)construction:havethatnothingtooltorankssayonaboutannualthemfinancial—statements,thatwhichisfundswhydotheynotarefile.screened here instead. Coverage differs by market and the response says ⟨380 unchanged words⟩ or comparing funds. Don't use for stocks (screen_companiesget_valuation / query_db) or for a single fund's price history ⟨24 unchanged words⟩
⟨41 unchanged words⟩ have no search tool — reach them throughscreen_companies orquery_db on the companies table. Args: - query ⟨183 unchanged words⟩
⟨36 unchanged words⟩ have no search tool — reach them throughscreen_companies orquery_db on the companies table. Args: - query ⟨116 unchanged words⟩
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"brief":{"default":true,"description":"Attach the fact-summary fields where one exists (default true). Rows without a summary are unaffected.","type":"boolean"},"company":{"description":"Optional company filter: ⟨128 unchanged words⟩ {2}-\\d{2}$","type":"string"},"watchlist":{"default":false,"description":"Restrict to the authenticated account's watchlist companies (default false). Needs a personal API key. Ignored when 'company' is set.","type":"boolean"}},"type":"object"}
Screen ETFs (FinBridge DB) — 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 …
⟨15 unchanged words⟩ ,"corp_name":{"$ref":"#/properties/companies/items/properties/corp_code"},"corp_name_en":{"$ref":"#/properties/companies/items/properties/corp_code"},"stock_code":{"$ref":"#/properties/companies/items/properties/corp_code"}},"type ⟨11 unchanged words⟩
Factor Study (FinBridge DB) — Measure whether a ranking signal actually separates future returns, point-in-time, on KR/US/TW daily bars from the local finbridge.db. Expect several seconds (typically 5-10 s): it rebuilds point-in-time ranks at every rebalance date. This is the question that comes BEFORE a screener: not "which names pass today" but "does this axis pay at all". Account storage: when connected to an account, this call automatically saves its inputs and summary as a new run. Repeating it creates another run. Only the newest 200 runs are kept; saving beyond that limit deletes older runs and their trade logs. N…
Portfolio Backtest (FinBridge DB) — Backtest 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). Detected US ETF splits are adjusted, but coverage is not exhaustive; unexplained jumps and long gaps are refused. US history starts 2023-03-28, so earlier start dates are clipped. Pure historical simulation — no forecasts. Account storage: when connected to an account, this call automatically saves its inputs and summary as a new run. Repeating …
Compare Crypto Price Across Exchanges (Kimchi Premium) — Compare the price of one crypto asset on two exchanges, converting both legs to USD, and report the premium of leg B over leg A. Coinbase, OKX, Upbit and Kraken market data delivery is unavailable pending written redistribution permission. Other exchanges remain under individual rights review; public access is not a redistribution licence. The unchanged default second leg is Upbit/KRW and therefore currently returns a rights error. Select another available exchange explicitly. Example calculation: the Korean "kimchi premium" — e.g. base:'BTC', exchange_a:'binance', quote_a:'USDT', exchange_b:…
Delete a Saved Backtest or Factor Study — Delete one saved simulation and its trade log from the authenticated account. This permanently removes the saved result; it does not place orders or change financial assets. An unknown or other-account run returns an error without modifying any data.
Saved Backtests & Factor Studies (FinBridge) — List, open or re-check the backtest and factor runs saved for your account. This tool does not modify saved runs. 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 …
Get Crypto OHLCV Candles — Fetch OHLCV candlestick data (open/high/low/close/volume) for a crypto pair. No API key needed. Coinbase, OKX, Upbit and Kraken market data delivery is unavailable pending written redistribution permission. Other exchanges remain under individual rights review; public access is not a redistribution licence. 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 fr…
Get Crypto Ticker — Fetch the current public ticker (last/bid/ask/24h stats) for a crypto trading pair on one exchange. No API key needed. Coinbase, OKX, Upbit and Kraken market data delivery is unavailable pending written redistribution permission. Other exchanges remain under individual rights review; public access is not a redistribution licence. 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_v…
Technical Indicators (FinBridge DB) — Latest 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. One company at a time. To rank many companies on the same indicators use screen_technical; for valuation multiples on one company use get_valuation. 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-da…
Apartment Data Coverage — Stored Korean apartment sale coverage: collected region/month progress, source and license. Not live listings; refreshed by a collector, not automatically.
List Korean Districts — List Korean sigungu districts (LAWD_CD) with the contract months actually collected for each. Districts with months=0 are not collected yet — querying them returns an error, not zero trades.
Search Apartment Sales — Search stored MOLIT apartment sales. Only collected regions/months are available. Prices in KRW 10,000; area in square metres. Canceled sales excluded by default.
Summarize Apartment Sales — 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.
CAN SLIM Screener (FinBridge DB) — 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,…
Screen Companies (FinBridge DB) — 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, T…
Screen ETFs (FinBridge DB) — 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 …
Oliver Kell Cycle Screener — approximation (FinBridge DB) — 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 re…
Minervini Trend Template Screener (FinBridge DB) — 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 th…
Marty Schwartz 10-EMA + MACD Screener — approximation (FinBridge DB) — 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 fu…
Screen by Technical Signals (FinBridge DB) — 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), '…
⟨256 unchanged words⟩ Apple valuation snapshot with US-market percentiles Caveats:PER/PBR/PSR/ROE/debtif statements aredimensionlessinsame-currencyanotherratioscurrency—than the listing (Korean listings reporting in USD/CNY/JPY), statement values are converted at one Federal Reserve H.10 rate on or before the price date before PER/PBR/PSR (fx_conversion shows the rate and date; noFXrateconversion→ null). ROE/debt ratio need no conversion; growth across a statement-currency change isapplied;null. market_cap keeps the listing currency. KR fundamentals are ⟨83 unchanged words⟩
⟨60 unchanged words⟩ "type":["number","null"]},"fx_conversion":{"anyOf":[{"additionalProperties":true,"properties":{},"type":"object"},{"type":"null"}]},"interpretation":{"$ref":"#/properties/company/properties/name_en"},"market_cap" ⟨87 unchanged words⟩
⟨31 unchanged words⟩ "minLength":1,"type":"string"},"as_of":{"description":"Optional YYYY-MM-DD. Return point_in_time: the preserved version of this period that was public on that day.","pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},"corp":{"description":"Company: Korean name ⟨118 unchanged words⟩
⟨43 unchanged words⟩ properties":{},"type":"object"},"point_in_time":{"additionalProperties":true,"properties":{},"type":"object"},"preserved_revisions":{"additionalProperties":true,"properties":{},"type":"object"},"revision_links":{"additionalProperties":true,"properties":{}, ⟨24 unchanged words⟩
⟨166 unchanged words⟩ or reading what is already stored (get_portfolio). IMPORTANT — read the response before telling the user you are done: 1. Confirmation gate: if the user already has a stored portfolio, this call returns `preview:true` with a `changes` diff (added/removed/changed) and does NOT save anything, unless you pass confirm=true. Show the diff to the user — call out `changes.removed` especially: if the submission was only part of their holdings, those positions will look fully sold. Only pass confirm=true after the user has seen and accepted the diff (skip this if `get_portfolio` was empty to begin with — there is nothing to compare against). 2. Missing fields: each saved row reports `missing_fields` (commonly `acquired_on`, since brokerage statements rarely include it) and unresolved symbols appear in `needs_input` — ambiguous names/codes list `candidates` (do not guess one), unmatched symbols need a ticker/code or a `value`. Rows with missing fields ARE saved (never block on incompleteness) — ask the user for the missing pieces and call this tool again for just those rows to fill them in. 3. Cash: check the `cash` field. If `status` is `not_asked`, the stored portfolio has no cash balance on file (this is different from a confirmed zero) — ask the user for their cash balance (amount or % of the portfolio) and its currency, then import it as one more holding: `{symbol:'현금', value, currency, asset_class:'현금'}`. Without it, equity weights in get_portfolio are overstated. 4. Always show the user the per-row summary (name/qty/avg_price recognized) before treating the import as authoritative — a misread quantity produces a wrong return. If something was saved wrong, undo it with restore_portfolio_snapshot (defaults to the snapshot right before this one).
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"confirm":{"description":"Set true to apply after the user has reviewed the `changes` preview from a prior call with the same holdings/replace. Required whenever a portfolio already exists and this submission would change it; not needed for a first import into an empty portfolio.","type":"boolean"},"holdings":{"description":"Structured holdings entered by ⟨9 unchanged words⟩ avg_price, return_pct, asset_class, currency, value, acquired_on, price_symbol, unit, price_scale. Other keys (e.g. quantity ⟨22 unchanged words⟩ items":{"additionalProperties":false,"properties":{"acquired_on":{"description":"Purchase date (YYYY-MM-DD), if the user gave one. Brokerage statements usually omit this — it is fine to leave it out and ask later.","pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},"asset_class":{"description":"Asset class supplied by ⟨48 unchanged words⟩ USD for crypto and US tickers, KRW otherwise. Always ask when cash is mixed KRW/USD.","enum":["KRW","USD"], ⟨207 unchanged words⟩
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"cash":{"additionalProperties":true,"properties":{},"type":"object"},"changes":{"additionalProperties":true,"properties":{},"type":"object"},"error":{"type":"string"},"holdings" ⟨9 unchanged words⟩ "type":["number","null"]},"needs_input":{"items":{"additionalProperties":true,"properties":{},"type":"object"},"type":"array"},"notes":{"items":{"type":"string"},"type":"array"},"preview":{"type":"boolean"},"snapshot":{"additionalProperties":true,"properties":{},"type":"object"},"unmatched":{"items":{"type" ⟨5 unchanged words⟩
Portfolio Import History — List the append-only portfolio snapshots recorded for this user. Each import_portfolio call that actually changes the stored holdings/assets (and each restore_portfolio_snapshot) appends one snapshot of the whole portfolio at that moment — quantities, average prices, symbols and asset classes, never market prices or computed valuations (those are recomputed fresh whenever needed). Identical resubmissions do not create a duplicate entry. Use this to see when the portfolio changed, then restore_portfolio_snapshot to undo a bad import.
Restore a Past Portfolio — 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).