MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Code & DevOps

HOLD! Korea Stock Ownership & Insider Trades

Who owns Korean listed stocks, from DART filings: 5% holders, insiders, stake changes, average cost.

Checks passed
15 / 22

0 failed · 7 not measured

Median response
2487 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
10

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Responded

The server completed its last measured handshake. This is an observation, not a guarantee.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
103
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
400
Publisher identityCan the publisher be traced to its source?
402

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 2481 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name hold.

  • Pass
    Lists tools

    tools/list returned 10 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 2487 ms over 2 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 2491 ms over 2 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    2 of 2 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Pass
    Stable tool list

    No tool was removed and no required parameter was added in the last 30 days.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Pass
    Parameters documented

    30 of 30 parameters have a description (100%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Not measured
    Website matches publisher

    This namespace is not a reverse domain, so the website comparison does not apply.

  • Pass
    Source repo linked

    A repository URL is on file.

  • Pass
    Repo owner matches

    The GitHub repository owner matches the namespace login.

  • Pass
    Recently updated

    Updated 2026-11-09T05:43:09.660286Z, within 180 days.

  • Not measured
    Open-source licence

    The GitHub licence lookup has not returned an OSI result yet.

Start using HOLD! Korea Stock Ownership & Insider Trades

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http hold-korea-stock-ownership-insider-trades https://whohold.com/mcp

Capabilities

Tools 10

get_avg_cost

Average purchase price (KRW) per holder for one stock. Uses the acquisition prices in the detailed-change section of original 5% large-holding reports: buys add to the weighted average, sells only reduce the quantity (moving average), and stock splits and reverse splits are adjusted. Insider reports carry no price and are not used. holder (part of a filer name) limits to that holder; otherwise all holders with price data. Each row has avg_cost, held_shares (current holding), priced_shares (bought shares that carry a price), coverage_pct, buys, first_trade and last_trade. basis reported means at least half of the current holding has prices; partial means only some (see coverage_pct); unavailable means no prices (the National Pension Service and foreign funds file simplified reports that legally omit prices). When partial, do not state 'average cost is X won' as fact. close is the latest Friday close (close_date) and return_pct is close / avg_cost − 1 in percent: the paper return on the priced buys, ignoring dividends and gains already taken on sells; null when avg_cost is null. Treat it as approximate when basis is partial. 한 종목의 보유자별 평균 매입단가(원). 5% 대량보유 보고서 원문의 세부변동내역에 적힌 취득 단가로 매수는 가중평균에 더하고 매도는 수량만 줄이는 이동평균을 내며, 액면분할·병합은 보정한다. 임원·주요주주 보고에는 단가가 없어 쓰지 않는다. holder(보고자명 일부)를 주면 그 보유자만, 없으면 단가가 있는 보유자 전부. 행마다 avg_cost, held_shares(현재 보유), priced_shares(단가가 붙은 매수 주식), coverage_pct, buys, first_trade·last_trade를 준다. basis가 reported면 현재 보유분의 절반 이상에 단가가 있고, partial이면 일부만(coverage_pct 참고), unavailable이면 단가가 없다(국민연금·외국계 약식 보고는 법적으로 단가 생략). partial일 때 '평단 X원'이라고 단정하지 말 것. close는 최근 금요일 종가(close_date), return_pct는 close / avg_cost − 1(%)로 단가가 붙은 매수분의 평가 수익률이다. 배당과 매도로 이미 낸 손익은 빠지고, avg_cost가 null이면 null이다. basis가 partial이면 대략적인 값으로 다룬다.

Discovered
get_filing

Details of one filing. Pass a source_url (DART address) from another tool's result or the 14-digit receipt number (rcept_no). reports are the filing's holder rows (stake, change, filing date); members are, for 5% reports, shares and stake per filer and special-relationship party; trades are the detailed changes (actual trade date, acquisition/disposal method, share class, quantity before and after, price). members and trades exist only for 5% large-holding reports whose original was fetched. Use it to see which trades changed a stake and whether it was a purchase or a debt-to-equity swap. It covers one filing only; to list a stock's filings use get_holder_history, and for filings across stocks use get_recent_changes. A filing that is not stored (only the last 2 years of 5% and insider reports are) returns an error. 공시 한 건의 세부 내역. 다른 도구 결과의 source_url(DART 주소)이나 14자리 접수번호(rcept_no)를 넣는다. reports는 그 공시의 보유자 행(지분율, 변동, 공시일), members는 5% 보고의 보고자·특별관계자별 보유 주식수와 지분율, trades는 세부변동내역(실제 거래일, 취득·처분 방법, 주식 종류, 변동 전후 수량, 단가). members·trades는 원문을 받은 5% 대량보유 보고에만 있다. 어떤 거래로 지분이 바뀌었는지, 매수인지 출자전환인지 확인할 때 쓴다. 공시 한 건만 보므로 한 종목의 공시 목록은 get_holder_history, 여러 종목의 공시는 get_recent_changes를 쓴다. 저장되지 않은 공시(최근 2년 5%·임원 보고만 있다)는 오류를 준다.

Discovered
get_holder_history

Full history of stake-change filings for one stock (newest first; 5% large-holding reports and insider reports of 1% and above). ticker is required and there is no date limit, so use it for 'when and how did this company's ownership change'. total is the number of matching filings; results come in pages of limit (default 50, up to 200), so when next_offset is present call again with offset=next_offset for older ones, or narrow with from/to. To scan the last few days across many stocks, use get_recent_changes. holder (part of a filer name) limits to that filer. change_type is new/listing/increase/decrease/exit/unchanged; listing is the first filing at IPO, not a purchase. non_trade true means not a market trade (debt-to-equity swap in rehabilitation, capital reduction, collateral, change in special-relationship parties). For insider reports, new may mean 'first report as a major shareholder'. trade_date is the actual change date (only for reports whose original was fetched); trade_price is the average acquisition price in that report. For per-trade details of one filing, pass its source_url to get_filing. 한 종목의 지분 변동 공시 전체 이력(최신순, 대량보유 보고와 1% 이상 임원·주요주주 보고). ticker가 필수이고 기간 제한이 없어 '이 회사 지분이 언제 어떻게 바뀌었나'에 쓴다. total은 조건에 맞는 공시 전체 건수이고 limit(기본 50, 최대 200)씩 나눠 주므로, next_offset이 있으면 offset=next_offset으로 다시 불러 더 오래된 공시를 받거나 from·to로 좁힌다. 여러 종목에 걸쳐 최근 며칠 새 공시를 훑으려면 get_recent_changes를 쓴다. holder로 보고자명 일부를 주면 그 보고자만. change_type은 new/listing/increase/decrease/exit/unchanged. listing은 상장으로 처음 공시한 것이라 매수가 아니다. non_trade가 true면 회생 출자전환, 감자, 담보, 특별관계 변동처럼 시장 매매가 아니다. insider 보고의 new는 '주요주주로서 첫 보고'일 수 있다. trade_date는 실제 변동일(원문을 받은 보고만), trade_price는 그 보고의 취득 단가 평균. 한 보고의 거래별 세부 내역은 source_url을 get_filing에 넘긴다.

Discovered
get_holder_summary

What one holder did over the last N days (default 30): how many stocks it increased and decreased, the total bought and sold in KRW, the net amount, and the largest moves. Default holder is the National Pension Service, so use it for 'what did NPS buy and sell this month'. With entity_id (from search_holder) the holder's related entities are merged as on the website. Market trades only: listing and non_trade changes are left out, and when a 5% report and insider reports cover the same change it is counted once. amount is reported shares × price (the filing's price, else that day's close), positive for increases and negative for decreases; it can be null when no price is known. One 5% report can carry several months of trades and is counted on its filing date. For every filing row use get_recent_changes. 한 보유자가 최근 N일(기본 30일) 동안 한 일: 늘린 종목 수와 줄인 종목 수, 매수·매도 금액 합계(원), 순매수, 큰 변동 목록. 기본 보유자는 국민연금이라 '국민연금이 이번 달 뭘 사고팔았나'에 쓴다. entity_id(search_holder 결과)를 주면 웹사이트처럼 같은 기관의 관련 법인을 합친다. 시장 매매만 센다: listing과 non_trade는 빠지고, 같은 변동을 5% 보고와 임원 보고가 함께 담으면 한 번만 센다. amount는 공시된 주식수 × 단가(공시 단가, 없으면 그날 종가)이고 늘린 쪽은 양수, 줄인 쪽은 음수다. 가격을 모르면 null일 수 있다. 5% 보고 한 건이 여러 달치 거래를 담을 수 있고 공시일에 센다. 공시 행 전체는 get_recent_changes를 쓴다.

Discovered
get_holders

Current major holders of one stock and their stakes, from each holder's latest filing. Use it for 'who owns this company now'; pass tickers to compare up to 10 stocks in one call. For how stakes changed over time use get_holder_history; for everything one holder owns use get_portfolio. Each row in holders has a source field: major (5% large-holding report total), member (per-person or per-company breakdown inside a 5% report) or insider (executive/major-shareholder report, incl. 10%+ shareholders, 1% and above only). groups gives each multi-member 5% group (e.g. the largest shareholder and its special-relationship parties) with the combined stake and member_list (holder, entity_id, ratio_pct), so use it for 'how much does the controlling family own in total'; indirect_holders lists stakes held through other listed companies, with the paths. Every row has as_of (filing date) and source_url (the original filing). Holders with no report in the last 2 years are missing, and there are no foreign or retail totals. An unknown ticker returns an error with search_symbol candidates. 한 종목의 현재 주요 보유자와 지분율(보유자별 최신 공시 기준). '지금 이 회사 주인이 누구인가'에 쓰고, tickers로 최대 10종목을 한 번에 비교한다. 시점별 변동은 get_holder_history, 한 보유자의 전체 보유는 get_portfolio를 쓴다. holders의 각 행에 source 필드가 있다: major(5% 대량보유 보고 합계), member(5% 보고 안의 사람·회사별 내역), insider(임원·주요주주 보고, 10% 이상 주주 포함, 1% 이상만). groups는 여러 명이 함께 낸 5% 보고(예: 최대주주와 특별관계자)의 합계 지분율과 구성원 member_list(holder, entity_id, ratio_pct)라 '최대주주 일가가 모두 합쳐 몇 %인가'에 쓴다, indirect_holders는 다른 상장사를 거친 간접 지분과 그 경로. 모든 행에 as_of(공시일)와 source_url(공시 원문). 최근 2년 안에 보고가 없는 보유자는 빠지고 외국인·소액주주 합계도 없다. 없는 종목이면 search_symbol 후보와 함께 오류를 준다.

Discovered
get_institution_flows

Institutional net buying and selling across all stocks over the last N days (default 7): by_stock lists the stocks with the largest net buys and net sells by pension funds, foreign and domestic asset managers and financial firms, with the institutions behind each; by_holder lists the most active institutions with their total bought, sold and net. Use it for 'what did institutions buy this week'. Only 5% large-holding reports and 1%+ insider reports, so this is not exchange-wide institutional flow; individuals, listing and non_trade changes are left out. Amounts are in KRW, estimated from reported shares × price. One 5% report can carry several months of trades and is counted on its filing date, so say 'filed this week', not 'bought this week'. For one holder in detail use get_holder_summary. 최근 N일(기본 7일) 전 종목의 기관 순매수·순매도. by_stock은 연기금·외국계·국내 운용사·금융사의 순매수·순매도가 큰 종목과 그 기관들, by_holder는 가장 많이 움직인 기관과 매수·매도·순매수 합계. '이번 주 기관이 뭘 샀나'에 쓴다. 5% 대량보유 보고와 1% 이상 임원 보고만 보므로 거래소 전체 기관 수급이 아니다. 개인, listing, non_trade는 빠진다. 금액은 원이며 공시된 주식수 × 단가로 추정한다. 5% 보고 한 건이 여러 달치 거래를 담을 수 있고 공시일에 세므로 '이번 주에 샀다'가 아니라 '이번 주 공시'로 말한다. 한 보유자를 자세히 보려면 get_holder_summary를 쓴다.

Discovered
get_portfolio

Stocks held by a holder (default: the National Pension Service), with stakes, highest first. Only stocks with a 5% large-holding report or a 1%+ insider report. With entity_id (from search_holder) you get one person's or one company's holdings only. Searching by holder (part of a name) may mix in other holders with the same name and unverified reports, so check each row's entity_id. value is reported shares × the latest Friday close (KRW); total_value is their sum. If total exceeds shown, raise limit to get more. No match gives empty holdings and matched_holders; try search_holder to check the name. To see who holds one stock use get_holders; for one holder's recent trades use get_recent_changes with entity_id. 보유자(기본 국민연금)가 보유한 종목 목록과 지분율, 지분율 높은 순. 5% 대량보유 보고 또는 1% 이상 임원·주요주주 보고가 있는 종목만. entity_id(search_holder 결과)를 주면 그 한 사람·한 회사의 보유만 나온다. holder(이름 일부)로 찾으면 같은 이름의 다른 보유자와 미확인 보고가 섞일 수 있으니 행의 entity_id를 본다. value는 공시된 주식수 × 최근 금요일 종가(원), total_value는 그 합계. total이 shown보다 크면 limit을 올려 더 받을 수 있다. 맞는 보유자가 없으면 holdings와 matched_holders가 비니 search_holder로 이름을 확인한다. 한 종목의 보유자는 get_holders, 한 보유자의 최근 매매는 get_recent_changes에 entity_id를 준다.

Discovered
get_recent_changes

Feed of stake-change filings posted in the last N days (default 7), newest first. Use it across stocks for 'who bought and sold this week', or with entity_id and a large days (up to 730, the stored 2 years) for one holder's filings across all stocks. Insider reports below 1% are left out. ticker limits to one stock; holder or entity_id limits to one holder. For one stock's full history with no date limit, use get_holder_history. Default 50 rows, adjustable with limit. Rows with change listing or non_trade true are not market trades and must be excluded from buy/sell totals. kind is how a 5% filing's new or increased stake arose: buy, placement (rights issue or convertible bond), control (takeover), non_trade, unknown. 최근 N일(기본 7일) 동안 올라온 지분 변동 공시 피드(최신순). 여러 종목을 가로질러 '이번 주 누가 사고팔았나'를 볼 때 쓰고, entity_id와 큰 days(최대 730, 저장된 2년)를 주면 한 보유자의 전 종목 공시 이력이 된다. 1% 미만 임원 보고는 빠진다. ticker를 주면 그 종목만, holder·entity_id를 주면 그 보유자만 거른다. 기간 제한 없이 한 종목의 전체 이력이 필요하면 get_holder_history를 쓴다. 기본 50건이며 limit으로 조절. change가 listing이거나 non_trade가 true인 행은 시장 매수·매도가 아니므로 매매 합계에서 빼야 한다. kind는 5% 공시의 신규·증가 방식이다: buy(매수), placement(증자·전환사채), control(경영권 인수), non_trade, unknown.

Discovered
search_holder

Find a holder (institution, asset manager, or individual) by name. Korean input also matches foreign filers (블랙록 → BlackRockFundAdvisors). Different people or companies with the same name are separate rows: kind is person/corp/inst; role is, for an individual, the company and title from their latest insider report (e.g. Samsung Electronics chairman); key_hint is the leading digits of a company's business registration number. top is the stock where the holder's stake is highest, corps is the number of stocks reported. Pass entity_id from the result as entity_id to get_portfolio, get_recent_changes and get_holder_history. A row with entity_id null bundles unverified reports under that name and can only be queried by holder name. 보유자(기관·운용사·개인) 이름으로 보유자를 찾는다. 한글로 쳐도 영문 보고자가 나온다(블랙록 → BlackRockFundAdvisors). 같은 이름의 다른 사람·회사는 행이 나뉜다: kind는 person(개인)/corp(법인)/inst(기관), role은 개인의 최근 임원·주요주주 보고 기준 회사와 직함(예: 삼성전자 회장), key_hint는 회사의 사업자등록번호 앞자리. top은 지분율이 가장 높은 종목, corps는 보고한 종목 수. 결과의 entity_id를 get_portfolio·get_recent_changes·get_holder_history의 entity_id로 쓴다. entity_id가 null인 행은 그 이름의 미확인 보고 묶음이며 holder 이름으로만 조회된다.

Discovered
search_symbol

Find a currently listed Korean stock (KOSPI/KOSDAQ) by part of its Korean or English name, or by ticker code. Returns a list of up to 20 matches as {ticker, name}: an exact name match first, then by market cap. An empty list means no listed stock matched (delisted stocks are excluded). Pass ticker to get_holders, get_holder_history, get_avg_cost or get_recent_changes. To find a person, fund or company as a holder, use search_holder instead. 지금 상장된 한국 종목(코스피·코스닥)을 한글·영문 종목명 일부나 종목코드로 찾는다. 최대 20건의 {ticker, name} 목록을 주며 이름이 정확히 같은 종목이 먼저, 그다음 시가총액 순이다. 빈 목록이면 맞는 상장 종목이 없다(상장폐지 종목은 빠진다). ticker를 get_holders·get_holder_history·get_avg_cost·get_recent_changes에 넘긴다. 보유자(사람·펀드·회사)를 찾으려면 search_holder를 쓴다.

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected2481 ms10
Connected2492 ms8