meritz-mcp
OfficialA local MCP server that lets AI clients query Meritz Securities Open API market/account data and place orders or FX exchanges through conversation.
meritz_account — domestic balances, deposits, collateral, holdings/valuation, overseas balances, realized P/L, and transaction history (11 APIs).
meritz_market — Korean stock/index prices, day/minute candles, orderbook, tick/minute trades, investor trends (10 APIs).
meritz_overseas_market — overseas stock quotes, candles, orderbook, and trade history (6 APIs).
meritz_trading — domestic/credit/overseas buy-sell, modify, cancel, reserved orders, plus order history and buying-power estimates (24 APIs).
meritz_forex — quoted and applied FX rates, exchange history, and real-time exchange requests (4 APIs).
meritz_reference — domestic and overseas trading days, market hours, and exchange listings (5 APIs).
meritz_info — returns server configuration, API catalog summary, and known issues; takes no arguments.
Every domain tool takes
api_type(plus optionalparams);api_type='describe'returns that API's parameter and response-field docs.Read-only by default; order and FX tools open only with
MERITZ_READ_ONLY=0, and are two-step — the first call returns aconfirm_token(single-use, 180s expiry) that must be resubmitted to execute.Multiple accounts are supported via numbered app keys and the tools'
accountargument.Realtime WebSocket data is not handled by this server.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@meritz-mcp삼성전자 현재 주가와 내 계좌 잔고를 알려줘"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
메리츠증권 Open API MCP 서버
현재 베타 서비스 기간입니다.
MCP를 지원하는 AI 클라이언트에 연결해, 메리츠증권 Open API의 시세·잔고·주문을 대화로 다루는 MCP 서버입니다. 내 PC에서 도는 로컬 서버이고, 단일 실행 파일이라 Python이나 uv를 따로 설치하지 않으셔도 됩니다.
기본값은 조회 전용입니다. 주문·환전은 MERITZ_READ_ONLY=0으로 두셔야 열립니다.
앱키
개발자 포털에서 앱키(App Key)와 시크릿(App Secret)을 발급받으십시오. 앱키에는 계좌가 묶입니다. 요청에 계좌번호를 넣지 않아도 그 계좌가 조회되고, 주문도 그 계좌로 나갑니다. 실행 파일 안에는 앱키가 없습니다. 설치 화면이나 환경변수로 넣습니다.
Related MCP server: pykrx-mcp
설치
파일은 릴리스 페이지에서 받으십시오. 쓰시는 것 하나만 받으시면 됩니다.
쓰시는 도구 | 방법 |
Claude Desktop | OS에 맞는 |
아무 도구나 — 자동 설치 |
|
Claude Code |
|
Codex CLI · ChatGPT 데스크톱 |
|
Gemini CLI |
|
Cursor · VS Code |
|
실행 파일은 Mac Apple 칩 ·
Mac Intel ·
Windows 입니다.
Mac에서 직접 내려받으셨다면 chmod +x와 xattr -d com.apple.quarantine을 걸어 주십시오.
격리 속성이 남아 있으면 서버가 아무 메시지 없이 종료되어 도구 목록에 나타나지 않습니다.
OS 보안 경고, 체크섬 대조, 기동 대기 시간, Claude 웹·ChatGPT 웹을 조회 전용으로
붙이는 터널 연결은
docs/install.md에 있습니다. install.py가 이 과정을 대신해 줍니다.
도구
설치하고 클라이언트를 다시 시작하면 도구 일곱 개가 뜹니다. "삼성전자 현재가 알려줘"처럼
그대로 물어보시면 됩니다. 분류마다 하나씩 여섯 개에, 서버 설정과 카탈로그 요약을 돌려주는
meritz_info까지 일곱 개이고, api_type으로 호출할 API를 고릅니다.
도구 | 다루는 것 | API |
| 잔고·예수금·평가·거래내역·손익 | 12건 |
| 국내주식·국내 지수 시세·호가·체결·투자자별 매매 | 13건 |
| 해외주식·해외 지수 시세·호가·체결 | 11건 |
| 주문·정정·취소·주문내역·예약주문 | 24건 |
| 환율·환전 | 4건 |
| 거래일·장 운영시간·거래소 등 참조 정보 | 5건 |
국내와 해외 시세를 한 도구에 담지 않은 것은 종목코드와 거래소 코드 체계가 서로 달라서입니다.
섞어 두면 모델이 국내 파라미터를 해외 조회에 그대로 넣습니다.
api_type='describe'로 부르면 파라미터와 응답 필드 설명을 돌려줍니다. REST 71건 중
69건을 도구로 노출하고, 토큰 발급·폐기 2건은 서버가 내부에서 처리합니다.
실시간(웹소켓)은 MCP의 요청·응답 모델과 맞지 않아 이 서버에서 다루지 않습니다. 실시간 코드는 open-api-codegen-mcp에서 받으십시오.
환경변수
변수 | 기본값 | 설명 |
| — | 포털에서 발급 |
| 첫 번째 계좌 이름 | 계좌를 여러 개 쓸 때 구분하는 이름 |
| — | 두 번째 이상 계좌. 앱키 하나에 계좌 하나가 묶이므로 앱키 목록이 곧 계좌 목록입니다. 이름이 겹치면 시작하지 않습니다 |
|
| 호출 대상 (https 만) |
|
| 기본이 조회 전용입니다. 주문·환전까지 쓰시려면 |
|
| 요청 제한시간(초) |
|
|
|
|
| HTTP 모드의 주소·포트·경로 |
계좌가 둘 이상이면 도구의 account 인자로 계좌를 고릅니다. 조회는 생략하면 첫 번째(기본) 계좌로 나가고,
주문·환전은 생략할 수 없습니다.
주문은 두 단계입니다
주문과 환전은 첫 호출에서 전송하지 않고 보낼 내용과 confirm_token만 돌려줍니다.
사람이 내용을 확인한 뒤 토큰을 넣어 다시 호출해야 실제로 나갑니다. 토큰은 한 번만 쓸 수
있고 180초 뒤 만료되며, 보낼 내용·대상 서버·앱키 중 하나라도 바뀌면 무효가 됩니다.
이 절차는 실수를 막기 위한 것이지, 사람이 내용을 확인했다는 증거는 아닙니다.
게이트는 ApiClient.call() 에 있어, 도구로 호출하시든 같은 패키지의 클라이언트를
파이썬에서 직접 부르시든 똑같이 걸립니다. 한계와 주문 접수 판정은
DISCLAIMER.md에 적어 두었습니다.
저장소가 네 개입니다
하고 싶으신 일 | 여기로 |
AI 클라이언트에 붙이기 | 이 저장소 |
파이썬으로 직접 호출해 보기 | open-api — 실행 예제 |
터미널에서 조회·주문하기 | open-api-studio — |
호출 코드를 받아 쓰기 | open-api-codegen-mcp — MCP 서버 |
개발
uv sync
uv run pytest tests/ -q
./build_binary.sh # bin/meritz-mcp — PyInstaller 단일 실행 파일
python3 make_bundle.py darwin-arm64 # dist/meritz-open-api-darwin-arm64.mcpb.env.example을 .env로 복사해 쓰셔도 됩니다. 단일 실행 파일은 자기 옆에 둔
.env를 가장 먼저 읽습니다 — 앱키를 명령줄에 적지 않아도 되므로 셸 기록과
프로세스 목록에 남지 않습니다. 파일 권한은 chmod 600 으로 두십시오. 릴리스는 태그를 밀면 GitHub Actions가
세 플랫폼을 빌드해 올립니다.
사용 전 확인해 주세요
대상 서버는 운영이 기본값이고, 앱키에 연결된 계좌는 실계좌입니다. 모의계좌는 없습니다
기본값은 조회 전용입니다. 주문·환전은
MERITZ_READ_ONLY=0으로 두셔야 열립니다확인 절차는 실수를 막기 위한 것이지, 사람이 내용을 확인했다는 증거는 아닙니다
조회 결과는 연결하신 AI 서비스로 전송되며, 해당 서비스의 데이터 처리 정책이 적용됩니다
앱키와 시크릿을 저장소에 커밋하지 말아 주세요
DISCLAIMER.md를 꼭 읽어 주세요
라이선스
MIT — LICENSE
실행 파일에 함께 들어가는 오픈소스의 라이선스 전문은 THIRD-PARTY-NOTICES.txt 에 있습니다.
문의는 개발자 포털을 이용해 주세요.
Available Tools
7 toolsmeritz_account메리츠 계좌ARead-onlyIdempotent
메리츠 Open API — 계좌 (12건). api_type 으로 호출할 API 를 고르고 params 에 파라미터를 넣습니다. api_type='describe' 로 부르면 파라미터 설명을 돌려줍니다.
collateral GET 내 계좌 담보 현황 조회 deposit GET 내 계좌 예수금 상세 조회 holdings GET 내 계좌 종목별 평가 조회 ovs_currencies GET 해외주식 외화잔고 조회 ovs_holdings GET 해외주식 잔고 조회 ovs_profit_loss GET 해외주식 실현손익 profit_loss GET 국내주식 실현손익 (일자별) profit_loss_summary GET 국내주식 실현손익 (합계) profit_loss_symbols GET 국내주식 실현손익 (종목별) transactions GET 내 계좌 입출금 내역 조회 valuation GET 내 계좌 자산평가 조회 valuation_by_asset GET 내 계좌 자산별 평가금액 조회
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| account | No | ||
| api_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description usefully reinforces this by listing every endpoint as GET, but adds nothing about authentication, rate limits, or whether api_type='describe' returns a fixed shape. With annotations carrying the burden, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The intro is compact and the 12-row table is front-loaded, structured, and earns its space because the schema supplies no enum for api_type—the values must live somewhere. Slightly verbose in the header line, but no sentence is genuinely wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values need no explanation, and the description covers dispatch selection and the parameter-discovery mechanism well. The only real gap is the unexplained account parameter, which the api_type='describe' escape hatch partially mitigates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain api_type (by enumerating valid values, necessary since the schema declares no enum) and the params container plus the 'describe' discovery pattern for params. However the third parameter, account, is never mentioned, leaving its semantics entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource domain (Meritz Open API — account/계좌) and enumerates all 12 account operations with their HTTP method and a concrete Korean purpose for each, so an agent knows exactly what api_type values are available. It does not, however, explain how this account dispatcher differs from siblings such as meritz_trading or meritz_info, which could also touch account data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear invocation mechanics (pick api_type, put arguments in params, call api_type='describe' to fetch parameter docs), which is implicit guidance on how to use the tool. But it offers no when-to-use/when-not guidance and never routes the agent to a sibling tool for adjacent tasks, leaving alternative selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meritz_forex메리츠 환전ADestructive
메리츠 Open API — 환전 (4건). api_type 으로 호출할 API 를 고르고 params 에 파라미터를 넣습니다. api_type='describe' 로 부르면 파라미터 설명을 돌려줍니다.
fx_exchanges POST 실시간 환전신청 ⚠ 상태변경 fx_exchanges_history GET 환전 내역 조회 fx_rates GET 고시환율 조회 fx_rates_applied GET 환전 적용환율 조회
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| account | No | ||
| api_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations blanket the whole tool as destructiveHint=true and idempotentHint=false, but the description narrows that by flagging only fx_exchanges (POST) with '⚠ 상태변경', telling the agent that the other three are read-style GETs. That is genuine added context beyond the annotations, though it omits auth requirements and rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and dispatch mechanism, then a compact table of the four sub-APIs with method and a one-word purpose plus the '⚠ 상태변경' marker. Every line earns its place and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no prose, and annotations cover the safety profile. The description supplies the dispatch contract, the valid api_type set, and a self-documentation path via 'describe'; only the account parameter and auth prerequisites are left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it does for api_type: it lists the valid values (the four sub-APIs plus 'describe') and explains params as the container for sub-API arguments. The account parameter is left unexplained, and per-sub-API params are deferred to the describe call, so it is strong but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific domain (메리츠 Open API — 환전) and enumerates the four sub-operations it dispatches (fx_exchanges, fx_exchanges_history, fx_rates, fx_rates_applied) with their HTTP methods and intent. This lets an agent separate it from siblings like meritz_trading or meritz_market, though the sibling differentiation is by domain naming rather than an explicit contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains the invocation pattern (choose the API via api_type, pass arguments via params) and gives a concrete self-service path: api_type='describe' returns parameter descriptions. It stops short of stating when to prefer this tool over sibling tools, so it sits at clear-context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meritz_infoARead-only
서버 설정과 API 카탈로그 요약, 알려진 문제를 돌려줍니다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not need to restate safety. It adds useful content categories (server settings, API catalog summary, known issues), but does not disclose any further behavior such as freshness of known issues, authentication expectations, or output limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Every part contributes meaning: what data is returned and for which general purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the zero-parameter schema, read-only annotation, and existing output schema, the description is largely sufficient. The only minor gap is the lack of sibling differentiation or usage context, but for a simple informational endpoint the provided content list is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema has 100% coverage, so there is nothing for the description to explain about parameters. The baseline of 4 for a parameterless tool applies, and the description does not omit any parameter-related information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('returns') and specific resources: server settings, API catalog summary, and known issues. It distinguishes itself from the sibling domain tools (account, market, trading, etc.) by describing a meta/informational scope rather than a business operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives such as meritz_reference or the domain-specific tools. The purpose is clear, but the agent is left to infer usage context from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meritz_market메리츠 국내 시세(주식·지수)ARead-onlyIdempotent
메리츠 Open API — 국내 시세(주식·지수) (13건). api_type 으로 호출할 API 를 고르고 params 에 파라미터를 넣습니다. api_type='describe' 로 부르면 파라미터 설명을 돌려줍니다.
market_candles_days GET 시세추이 조회(일봉) market_candles_minutes GET 시세추이 조회(분봉) market_index_candles_days GET 국내지수 시세추이 조회 market_index_candles_minutes GET 국내지수 시세추이 조회 (분봉) market_index_prices GET 국내지수 현재가 조회 market_investors GET 종목별 투자자매매동향 market_investors_detail GET 종목별 투자자매매동향 상세 market_orderbook GET 호가 조회 market_orderbook_after GET 시간외 단일가 호가 조회 market_prices GET 현재가 조회 market_prices_after GET 시간외 단일가 조회 market_trades_minutes GET 체결추이 조회(분) market_trades_ticks GET 체결추이 조회(틱)
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| account | No | ||
| api_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, idempotent, open-world operation, so the safety profile is covered. The description adds useful behavioral context (it is a multi-endpoint dispatcher and 'describe' performs parameter discovery) but omits auth/account requirements, rate limits, and whether 'describe' or an unknown api_type has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and dispatch convention are front-loaded, followed by a functional endpoint table where each line maps an api_type to a Korean label. It is long, but nearly every line is a distinct callable identifier rather than filler, so the length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the description supplies the essential dispatch model plus the api_type value set. The undocumented `account` parameter and the opaque params object are the only meaningful holes for a 3-parameter meta-tool, mitigated by the built-in 'describe' mechanism.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description carries the load by enumerating the 13 valid api_type values (not present as an enum anywhere in the schema) and defining the params/'describe' convention. It does not explain the `account` parameter, so a gap remains, but the compensation is substantial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title/description states a specific resource ('국내 시세(주식·지수)' – domestic quotes for stocks and indices) and that it is a dispatcher over 13 sub-APIs. The enumerated endpoint list lets an agent distinguish it from meritz_overseas_market (overseas) and meritz_forex without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains the invocation model: pick the API via api_type, put parameters in params, and use api_type='describe' to retrieve parameter docs. It gives strong in-tool routing but never states when to prefer this tool over siblings like meritz_overseas_market, so it lacks explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meritz_overseas_market메리츠 해외 시세(주식·지수)BRead-onlyIdempotent
메리츠 Open API — 해외 시세(주식·지수) (11건). api_type 으로 호출할 API 를 고르고 params 에 파라미터를 넣습니다. api_type='describe' 로 부르면 파라미터 설명을 돌려줍니다.
ovs_market_candles_days GET 해외주식 시세추이 조회 (일봉) ovs_market_candles_minutes GET 해외주식 시세추이 조회 (분봉) ovs_market_index_candles_days GET 해외지수 시세추이 조회 ovs_market_index_candles_minutes GET 해외지수 시세추이 조회(분봉) ovs_market_index_prices GET 해외지수 현재가 조회 ovs_market_orderbook GET 해외주식 호가 조회 ovs_market_prices GET 해외주식 현재가 조회 ovs_market_prices_after GET 해외주식 애프터장 현재가 조회 ovs_market_prices_daytime GET 해외주식 주간거래 현재가 조회 ovs_market_trades_minutes GET 해외주식 체결추이 조회 (분) ovs_market_trades_ticks GET 해외주식 체결추이 (틱)
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| account | No | ||
| api_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered structurally. The description adds the useful dispatcher behaviors (api_type routing, the 'describe' discovery mode) but says nothing about authentication requirements, rate limits, or the fact that the account parameter may be needed for certain calls. With annotations carrying the safety burden, this is an adequate but not rich addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the domain and the two-sentence calling convention before the operation list, and the list itself is necessary given that the schema provides no enum. Each entry is terse (name, method, one-line purpose), though the method column (GET for every entry) is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the 'describe' mode mitigates the 0% schema coverage for per-API parameters. Still, for a dispatcher fronting 11 sub-APIs the agent is left without any guidance on the account parameter's necessity or on how this tool relates to the sibling meritz_market.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema itself documents none of api_type, params, or account. The description compensates by explaining what api_type does and by providing a 'describe' escape hatch for per-API parameters, which is more than nothing — but it still does not enumerate the valid api_type values as an enum nor list any actual parameter names, leaving the agent to parse 11 names out of prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource domain (해외 시세 — overseas quotes for stocks and indices) and enumerates all 11 sub-API operations it dispatches to, so the agent knows exactly what this tool covers. It does not explicitly differentiate itself from the sibling meritz_market (presumably domestic quotes), which is the only missing routing cue.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the invocation pattern clearly — pick an api_type, put arguments in params, and call api_type='describe' to retrieve parameter documentation — which is genuinely actionable usage guidance. However, it never says when to prefer this tool over meritz_market or meritz_forex, nor does it give prerequisites such as whether the account parameter is required for certain sub-APIs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meritz_reference메리츠 기준정보ARead-onlyIdempotent
메리츠 Open API — 기준정보 (5건). api_type 으로 호출할 API 를 고르고 params 에 파라미터를 넣습니다. api_type='describe' 로 부르면 파라미터 설명을 돌려줍니다.
ref_market_days GET 국내 영업일 조회 ref_market_hours GET 국내 장운영 조회 ref_ovs_exchanges GET 해외 거래소 조회 ref_ovs_market_days GET 해외 영업일 조회 ref_ovs_market_hours GET 해외 장운영 조회
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| account | No | ||
| api_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds real behavioral context beyond that: all operations are GET, api_type='describe' returns parameter documentation instead of data, and the tool is a multiplexer over five fixed endpoints. Return format and auth requirements are not stated, but the output schema covers returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded preamble followed by a tight aligned list of the five operations; the 'describe' hint comes early where it is most useful. Every line earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dispatcher over five read-only endpoints with an output schema present, the description supplies the dispatch protocol, the operation menu, and a way to discover per-operation parameters. The unexplained account parameter and the absence of sibling-routing context are the only omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and api_type has no enum, so the description must carry the semantics — and it does, enumerating the five valid api_type values plus 'describe'. It also explains that params holds the per-call arguments, deferring detail to the describe mode. The account parameter is never explained, which is the only real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource (메리츠 Open API 기준정보) and enumerates all five concrete operations with their HTTP verbs and Korean glosses, so an agent knows exactly what the tool can do. It does not, however, distinguish itself from siblings like meritz_market or meritz_overseas_market, which cover overlapping market-days/hours concepts; that routing ambiguity keeps it below 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the calling convention well — pick the operation via api_type and pass parameters in params — and offers a self-documentation escape hatch (api_type='describe'). But it gives no guidance on when to choose this tool over meritz_market/meritz_overseas_market, nor any exclusions, so usage is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meritz_trading메리츠 주문ADestructive
메리츠 Open API — 주문 (24건). api_type 으로 호출할 API 를 고르고 params 에 파라미터를 넣습니다. api_type='describe' 로 부르면 파라미터 설명을 돌려줍니다.
credit_orders_buy POST 신용매수 주문 ⚠ 상태변경 credit_orders_sell POST 신용매도 주문 ⚠ 상태변경 orders_buy POST 일반주문 매수 ⚠ 상태변경 orders_cancel POST 국내주식 주문 취소 ⚠ 상태변경 orders_estimate GET 주문가능금액·수량 조회 orders_history GET 주문내역 조회 orders_modify POST 국내주식 주문 정정 ⚠ 상태변경 orders_sell POST 일반주문 매도 ⚠ 상태변경 ovs_orders_buy POST 해외주식 매수 주문 ⚠ 상태변경 ovs_orders_cancel POST 해외주식 주문 취소 ⚠ 상태변경 ovs_orders_detail GET 해외주식 주문체결 상세조회 ovs_orders_estimate GET 해외주식 주문가능금액 조회 ovs_orders_history GET 해외주식 주문체결내역 조회 ovs_orders_modify POST 해외주식 주문 정정 ⚠ 상태변경 ovs_orders_sell POST 해외주식 매도 주문 ⚠ 상태변경 ovs_orders_today GET 해외주식 당일 주문체결내역 조회 ovs_reserved_orders GET 해외주식 예약주문 조회 ovs_reserved_orders_buy POST 해외주식 예약주문 매수 ⚠ 상태변경 ovs_reserved_orders_cancel POST 해외주식 예약주문 취소 ⚠ 상태변경 ovs_reserved_orders_sell POST 해외주식 예약주문 매도 ⚠ 상태변경 reserved_orders GET 국내주식 예약주문 조회 reserved_orders_buy POST 국내주식 예약주문 매수 ⚠ 상태변경 reserved_orders_cancel POST 국내주식 예약주문 취소 ⚠ 상태변경 reserved_orders_sell POST 국내주식 예약주문 매도 ⚠ 상태변경
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| account | No | ||
| api_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false for the whole tool, but the description adds granular value by flagging which of the 24 sub-operations actually change state (⚠) versus pure GET lookups. It also discloses the self-describing 'describe' escape hatch for parameter details. It stops short of covering auth, account selection behavior, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and usage rules are front-loaded in three short lines, followed by a dense 24-line catalogue where each line carries an id, verb, operation name, and risk marker. The list is long but every line is load-bearing since it enumerates valid api_type values; structure is clean and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not document return values, and annotations already carry the safety profile. For a dispatcher over 24 endpoints it is largely complete, with the notable remaining gap being the opaque params object and undocumented account parameter, only partially mitigated by the 'describe' mechanism.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and none of the three properties carry descriptions, so the description must compensate. It effectively serves as the enum for api_type by listing the 24 valid values with their meanings, but leaves params (an arbitrary object) and account entirely unexplained except through the separate describe call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (주문/orders) and then enumerates all 24 concrete sub-operations with Korean labels and HTTP verbs, so an agent can see exactly what the tool covers. This is clearly distinguishable from the sibling groups (meritz_forex, meritz_account, meritz_market, etc.), which cover other API families. Purpose is unambiguous even before opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the invocation pattern: pick an operation with api_type and pass arguments in params, and use api_type='describe' to fetch parameter documentation first. The per-endpoint ⚠ 상태변경 (state change) markers also guide the agent on which calls mutate state. What is missing is when-not-to-use guidance or any routing rule relative to the sibling category tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.4.12- Changed
meritz_account1 field changed- added
Input schema / properties / accountAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
meritz_forex1 field changed- added
Input schema / properties / accountAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
meritz_market1 field changed- added
Input schema / properties / accountAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
meritz_overseas_market1 field changed- added
Input schema / properties / accountAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
meritz_reference1 field changed- added
Input schema / properties / accountAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
meritz_trading1 field changed- added
Input schema / properties / accountAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
7 tool updates
v0.3.0- First observed
meritz_account - First observed
meritz_forex - First observed
meritz_info - First observed
meritz_market - First observed
meritz_overseas_market - First observed
meritz_reference - First observed
meritz_trading
TDQS
Scored across 7 tools
The seven top-level tools are cleanly partitioned by domain (reference, info, forex, account, domestic market, overseas market, trading), and each tool's api_type selects a distinct sub-API. Within each tool, sub-APIs target clearly different resources/actions, with only mild surface similarity (e.g. profit_loss_summary vs profit_loss_symbols, market_prices vs market_prices_after) that descriptions readily disambiguate.
Tool names use a uniform meritz_<domain> convention, and the sub-APIs follow a consistent snake_case resource_action pattern (e.g. orders_buy, ovs_orders_cancel, market_candles_days), with ovs_ used systematically to mark overseas variants. No mixing of camelCase or conflicting verb styles.
Seven top-level dispatcher tools is well-scoped for a brokerage API, keeping the visible surface small while the api_type parameter exposes ~60 underlying endpoints. Each tool maps to a coherent business domain and earns its place.
Coverage is thorough across reference data, forex, accounts, domestic/overseas market data, and full domestic/overseas order lifecycle including reserved and credit orders. Minor gaps exist for non-trading information such as news/disclosure or watchlist management, but core agent workflows are fully supported.
Maintenance
Related MCP Connectors
Stock market data for AI agents: real-time quotes, financials, options, SEC filings and news.
Market analyst tools + AI agent: crypto, US equities, options, Korea, fundamentals, macro, backtests
Unified financial infrastructure connecting AI agents directly to trade live/demo brokerage accounts, Web3 non-custodial wallets, real-time market data across equities, ETFs, crypto, forex, options, DeFi swaps, and prediction markets, institutional research feeds, and algorithmic strategy backtesters.
Korean fact-verification tools for AI agents: business registration, address, DART, apt prices, laws
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to query real-time and historical Korean stock market data from KRX (Korea Exchange) including indices, stocks, ETFs, bonds, derivatives, and commodities via MCP tools and resources.40 npm1MIT

pykrx-mcpofficial
AlicenseNot gradedqualityCmaintenanceProvides Korean stock market data (KOSPI, KOSDAQ, KONEX) including prices, fundamentals, investor trading, short selling, and indices via MCP protocol, enabling natural language queries from AI agents like ChatGPT and Claude.65 PyPI3MIT- AlicenseAqualityDmaintenanceEnables trading and market data access for Toss Securities through natural language, with built-in trading guardrails to prevent errors.20MIT
- FlicenseNot gradedqualityDmaintenanceProvides real-time Korean stock market data, including stock prices, rankings, investor trends, and derivatives, via the Korea Investment & Securities OpenAPI. Enables AI models to query and analyze Korean financial data through natural language.-