Koskamo

HOLD! MCP

A remote MCP server that provides read-only access to Korean stock ownership data from DART filings, allowing AI agents to query 5%+ holders, insider transactions, NPS moves, and average purchase prices without installation or API keys.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

HOLD! MCP logo, by whohold.comCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-09Published by whohold.com
MCP endpoint (Streamable HTTP)
https://whohold.com/mcp
Vendor documentation

What its tools do

7 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

7 of 7 have a description · 7 of 7 declare behavior hints · 1 of 7 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Query 5%+ holders and insider stakes for specific Korean stocks
  • Track National Pension Service (NPS) ownership changes over time
  • Calculate average purchase prices from original DART filings
  • Find recent ownership filings and trade dates for listed companies

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
hold 0.1.0
MCP protocol negotiated in check
2025-11-25
Tools
7 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

공시를 정리한 정보이며 투자 조언이 아니다. 모든 결과의 as_of는 DART 공시일이다. 5% 대량보유 변동은 변동 후 5영업일 안에 보고하므로 실제 거래는 공시일보다 최대 일주일 전일 수 있다(trade_date가 있으면 그것이 실제 변동일). '오늘/어제 샀다'고 단정하지 말고 공시일 기준으로 말하고, source_url(공시 원문)을 함께 제시한다. 데이터는 최근 2년치 보고만 담고 있어 2년 넘게 변동 보고가 없는 보유(예: 삼성전자의 국민연금)는 나오지 않는다. 보유자는 이름이 아니라 entity_id로 구분한다(공시 원문의 생년월일·사업자등록번호 기준). 같은 이름이어도 entity_id가 다르면 다른 사람·다른 회사이고, entity_id가 null이면 원문을 아직 확인하지 못한 보고라 동명이인이 섞였을 수 있으니 같은 사람이라고 단정하지 않는다.

Tools

7 advertised

search_symbol
Advertised by the server during the last successful anonymous check.
Advertised read-only

종목명 일부나 종목코드로 지금 상장된 한국 종목을 찾는다. 다른 도구의 ticker 인자로 쓸 값을 얻는다.

search_symbol input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string"
    }
  }
}
search_symbol annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
search_holder
Advertised by the server during the last successful anonymous check.
Advertised read-only

보유자(기관·운용사·개인) 이름으로 보유자를 찾는다. 한글로 쳐도 영문 보고자가 나온다(블랙록 → 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 이름으로만 조회된다.

search_holder input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string"
    }
  }
}
search_holder annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_holders
Advertised by the server during the last successful anonymous check.
Advertised read-only

종목의 주요 보유자와 지분율(특별관계자 합산). source=major는 5% 대량보유 보고, insider는 임원·주요주주(10% 이상 주주 포함) 보고이며 1% 이상만. 보유자별 최신 공시 기준. 최근 2년 안에 보고가 없는 보유자는 빠지고 외국인·소액주주 합계도 없다. 모든 행에 as_of(공시일)와 source_url(공시 원문).

get_holders input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "ticker"
  ],
  "properties": {
    "ticker": {
      "type": "string",
      "description": "종목코드 또는 정확한 종목명"
    }
  }
}
get_holders annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_holder_history
Advertised by the server during the last successful anonymous check.
Advertised read-only

종목의 지분 변동 공시 이력(최신순, 대량보유와 임원·주요주주 보고 모두). holder로 보고자명 일부를 주면 그 보고자만. change_type은 new/listing/increase/decrease/exit/unchanged. listing은 상장으로 처음 공시한 것이라 매수가 아니다. non_trade가 true면 회생 출자전환, 감자, 담보, 특별관계 변동처럼 시장 매매가 아니다. insider 보고의 new는 '주요주주로서 첫 보고'일 수 있다. trade_date는 실제 변동일(원문을 받은 보고만), trade_price는 그 보고의 취득 단가 평균.

get_holder_history input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "ticker"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "YYYY-MM-DD"
    },
    "from": {
      "type": "string",
      "description": "YYYY-MM-DD"
    },
    "limit": {
      "type": "number",
      "description": "기본 50"
    },
    "holder": {
      "type": "string"
    },
    "ticker": {
      "type": "string"
    },
    "entity_id": {
      "type": "number",
      "description": "search_holder의 entity_id. 주면 holder 대신 이 보유자만"
    }
  }
}
get_holder_history annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_portfolio
Advertised by the server during the last successful anonymous check.
Advertised read-only

보유자(기본 국민연금)가 보유한 종목 목록과 지분율, 지분율 높은 순. 5% 대량보유 보고 또는 1% 이상 임원·주요주주 보고가 있는 종목만. entity_id(search_holder 결과)를 주면 그 한 사람·한 회사의 보유만 나온다. holder(이름 일부)로 찾으면 같은 이름의 다른 보유자와 미확인 보고가 섞일 수 있으니 행의 entity_id를 본다. value는 공시된 주식수 × 최근 종가(원), total_value는 그 합계. total이 shown보다 크면 limit을 올려 더 받을 수 있다.

get_portfolio input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "type": "number",
      "description": "기본 50"
    },
    "holder": {
      "type": "string",
      "description": "보고자명 일부, 기본 '국민연금'"
    },
    "entity_id": {
      "type": "number",
      "description": "search_holder의 entity_id"
    },
    "min_ratio": {
      "type": "number"
    },
    "include_indirect": {
      "type": "boolean",
      "description": "true면 상장사를 거친 간접 지분까지 합친 종목별 합계(total_pct)와 경로를 준다"
    }
  }
}
get_portfolio annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_avg_cost
Advertised by the server during the last successful anonymous check.
Advertised read-only

보유자별 매입단가. 대량보유 보고서 원문의 세부변동내역에 적힌 취득 단가로 이동평균을 낸다. basis가 reported면 현재 보유분의 절반 이상에 단가가 있고, partial이면 일부만(coverage_pct 참고), unavailable이면 단가가 없다(국민연금·외국계 약식 보고는 법적으로 단가 생략). partial일 때 '평단 X원'이라고 단정하지 말 것.

get_avg_cost input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "ticker"
  ],
  "properties": {
    "holder": {
      "type": "string"
    },
    "ticker": {
      "type": "string"
    }
  }
}
get_avg_cost annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_recent_changes
Advertised by the server during the last successful anonymous check.
Advertised read-only

최근 N일 동안 올라온 지분 변동 공시 피드(최신순). holder로 보고자 필터. 기본 50건이며 limit으로 조절. change가 listing이거나 non_trade가 true인 행은 시장 매수·매도가 아니므로 매매 합계에서 빼야 한다. kind는 5% 공시의 신규·증가 방식이다: buy(매수), placement(증자·전환사채), control(경영권 인수), non_trade, unknown.

get_recent_changes input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "days": {
      "type": "number"
    },
    "limit": {
      "type": "number",
      "description": "기본 50"
    },
    "holder": {
      "type": "string"
    },
    "entity_id": {
      "type": "number",
      "description": "search_holder의 entity_id"
    }
  }
}
get_recent_changes annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
927 ms
95th percentile latency
927 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 927 ms · metadata changed · 7 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http hold-mcp https://whohold.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add hold-mcp --url https://whohold.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable hold-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "hold-mcp": {
      "url": "https://whohold.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "hold-mcp": {
      "type": "streamableHttp",
      "url": "https://whohold.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start hold-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "hold-mcp": {
      "type": "http",
      "url": "https://whohold.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http hold-mcp https://whohold.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://whohold.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "hold-mcp": {
      "serverUrl": "https://whohold.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like HOLD! MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.