korea-health-mcp-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., "@korea-health-mcp-serverFind non-payment cost of MRI in Seoul"
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.
korea-health-mcp-server
대한민국 공공 의료 데이터(data.go.kr)를 Claude 등 MCP 클라이언트에서 자연어로 조회하는 MCP 서버입니다. 로컬(stdio) 실행을 기본으로 하며, 원격(HTTP)으로 확장할 수 있도록 트랜스포트를 분리해 두었습니다.
상태: 구현 완료 · 7개 도구 전부 실제 키로 라이브 검증됨(2026-06-21). 타입체크 0 에러.
빠른 시작 (npx · 권장)
clone·빌드 없이 명령어 한 줄로 실행됩니다. data.go.kr 키 발급(아래 사전 준비)만 하면 됩니다.
claude_desktop_config.json 에 추가:
{
"mcpServers": {
"korea-health": {
"command": "npx",
"args": ["-y", "dk-korea-health-mcp"],
"env": {
"DATA_GO_KR_SERVICE_KEY": "발급받은_키",
"KEY_IS_ENCODED": "true"
}
}
}
}macOS 설정 경로:
~/Library/Application Support/Claude/claude_desktop_config.json— 수정 후 Claude Desktop 을 완전히 종료했다 재시작하세요.KEY_IS_ENCODED는 일반인증키(Encoding)면"true", Decoding 키면"false". 소스에서 직접 빌드하려면 아래 설치·빌드·실행 을 참고하세요.
Related MCP server: korean-stat-mcp
제공 도구 (노출 10 = 도메인 8 + 메타 2, 숨김 1)
도구 | 설명 | 데이터 출처 |
| 지역/종별 비급여 항목·가격·기관 (itemKeyword 필터) | 심평원 비급여진료비정보 |
| 특정 병원(병원명)의 비급여 목록 | 심평원 비급여진료비정보 |
| 기관명/지역/종별/진료과목으로 병원 검색 (주소·전화·ykiho) | 심평원 병원정보서비스 |
| ykiho로 진료과목별 전문의수·의료장비·시설 | 심평원 의료기관별상세정보서비스(v2.8) |
| 의원(clCd=31) ykiho의 최근 1년 상위 5개 질병 | 심평원 병원진료정보조회서비스 |
| 의약품 효능·용법·주의·부작용 검색 | 식약처 e약은요 |
| DUR 안전정보(병용/연령/임부/노인/효능중복) | 식약처 DUR 품목정보 |
| 질병명·코드 조회 + 성별연령/입원외래/종별/지역별 진료통계 | 심평원 질병정보서비스 |
| 숨김 도구 발견·프록시 호출 (확장용 메타 도구) | — |
(숨김) | 급여의약품 사용량(약효분류/ATC/성분 × 지역/종별/상병). 코드 필요 → | 심평원 의약품사용정보조회서비스 |
연결 고리: 비급여 검색과 병원 검색이 모두 병원명·ykiho 를 돌려줍니다.
kohealth_search_hospital의 ykiho 를kohealth_get_hospital_info에 넘기면 그 병원의 진료과목·장비까지 이어 조회됩니다. (ykiho 는 list 검색의 입력 필터로는 동작하지 않아 병원 검색은 병원명 기준)
개인 단위 청구내역은 공개 API로 제공되지 않습니다. 받을 수 있는 것은 공개된 가격·의약품 정보와 집계 통계뿐입니다.
사전 준비 (직접 해야 함)
data.go.kr 회원가입
아래 각 서비스에서 "활용신청" (서비스별로 따로 승인, 대부분 자동승인·무료). 링크가 안 열리면 data.go.kr 검색창에 같은 이름을 붙여넣으세요:
발급된 서비스키를 설정 — (A) npx 사용 시 Claude Desktop 설정의
env블록에(위 빠른 시작), (B) 소스 빌드 시.env에 (.env.example복사).
cp .env.example .env
# DATA_GO_KR_SERVICE_KEY=발급받은_키
# KEY_IS_ENCODED=true # Encoding 키면 true, Decoding 키면 false (키가 hex면 무관)
.env는 실행 위치(cwd)와 무관하게 프로젝트 루트에서 자동 로드됩니다. 따라서 Claude Desktop 설정에 키를 중복으로 넣지 않아도 됩니다.
설치 · 빌드 · 실행
npm install
npm run build
npm start # stdio로 실행
npm run typecheck # tsc --noEmit
npm run inspect # MCP Inspector로 도구 테스트Claude Desktop 연결 (소스 빌드 시)
npx 로 쓰는 경우는 위 빠른 시작 을 사용하세요. 아래는 소스에서 직접 빌드한 경우입니다.
claude_desktop_config.json에 추가 (키는 .env에서 자동 로드되므로 env 불필요):
{
"mcpServers": {
"korea-health": {
"command": "node",
"args": ["/절대경로/korea-health-mcp-server/dist/index.js"]
}
}
}macOS 설정 파일 경로:
~/Library/Application Support/Claude/claude_desktop_config.json수정 후 Claude Desktop 을 완전히 종료했다 재시작하세요.
실호출 검증 현황 (2026-06-21, 실제 키)
7개 도메인 도구 전부 라이브 검증 ✅ (예시는 실제 응답):
도구 | 결과 | 라이브 예시 |
| ✅ | "게보린정" 효능·용법·부작용 |
| ✅ | "서울대학교병원" 4건(주소·전화·ykiho) |
| ✅ | 서울 MRI → 더드림병원 69만원 |
| ✅ | 병원명 매칭 비급여 목록 |
| ✅ | 이트라코나졸 ↔ 심바스타틴 / 횡문근융해증 |
| ✅ | 서울대병원 내과 전문의 166명 / 인큐베이터 61대 |
| ✅ | 봄안과의원 → 각막염·근시·녹내장·망막질환·백내장 |
| ✅ | I10(고혈압) 지역별: 서울 환자 136만명 |
| ◐ | 엔드포인트 검증, 요청변수·코드는 활용가이드 필요 |
로컬(stdio)·원격(HTTP) 트랜스포트 둘 다 기동·
tools/list검증 완료.
라이브로 확정해 코드에 반영한 사항:
엔드포인트 버전·접미사: 의료기관별상세
MadmDtlInfoService2.8(2.7 아님), 질병정보diseaseInfoService1(접미사 1). 둘 다 처음엔 Forbidden/error 였으나 승인 문제가 아니라 경로 문제였음.sidoCd 는 명칭이 아니라 숫자코드 (서울 110000, 전남 360000, 세종 410000).
SIDO_CODE맵 +normalizeRegion()이 "서울"→"110000" 변환.서버 필터가 안 되는 항목(비급여 항목명·병원명, DUR 성분명, 질병명)은
clientFilter()로 처리. 질병 마스터(2065건)는 전체를 한 번에 받아(캐시) 필터. ykiho 는 list 검색의 입력 필터로 동작 안 함 → 연결은 병원명 기준.질병통계는
year필수,sickCd와 함께. 4종(성별연령/입원외래/종별/지역별) 동일 파라미터.XML 응답 필드명: e약은요 camelCase(efcyQesitm…), DUR 대문자_언더스코어(ITEM_NAME, PROHBT_CONTENT, MIXTURE_*), 질병/병원상세 각자 다름 — 렌더러에 반영.
XML 파서 버그 수정:
parseTagValue:false(안 그러면<resultCode>00</resultCode>→숫자 0 으로 깨져 정상 응답을 에러 처리).
남은 선택 과제:
추가 승인 서비스(의약품사용정보조회서비스, 병원진료정보조회서비스)에 대한 도구 — 필요 시
tools/에 1파일씩 추가.HTTP 원격 배포(
runHttp()).
원격(HTTP) 실행 — 구현됨
TRANSPORT=http 로 실행하면 Streamable HTTP(스테이트리스) 서버가 뜹니다. 도구 코드는 stdio 와 100% 공유.
TRANSPORT=http PORT=3000 npm start
# 헬스체크
curl http://localhost:3000/healthz # {"ok":true}
# MCP 호출 (initialize/tools/list/tools/call 모두 POST /mcp)
curl -X POST http://localhost:3000/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'요청마다 새 서버·트랜스포트를 만드는 스테이트리스 구조라 수평 확장에 유리합니다(세션 유지가 필요하면 sessionIdGenerator 를 지정).
구조
src/
index.ts # 부트스트랩 + 트랜스포트 선택(stdio/http) + 핸들러 래퍼
constants.ts # API 베이스, 서비스/오퍼레이션, 캐시TTL·재시도·페이지네이션 정책
types.ts # 공통 타입(엔벨로프, ToolDefinition, ToolContext)
services/
dataGoKr.ts # API 클라이언트(키 처리, URL 조립, XML/JSON 파싱, 엔벨로프 정규화, 캐시)
fetchWithRetry.ts # 빈응답·HTML 점검페이지·5xx 재시도 + exponential backoff
cache.ts # TTL 캐시(검색 1h / 상세 24h)
errors.ts # data.go.kr 결과코드 → 행동가능한 한국어 메시지
schemas/
common.ts # 공통 zod(페이지네이션/포맷) + 렌더링/절단 헬퍼
normalizer/
searchNormalizer.ts # 자연어 → 검증 파라미터(PARAM_MAP) + 지역 약칭 정규화
tools/
nonpayment.ts hospital.ts clinicDiag.ts # 비급여 · 병원 · 의원진료
drug.ts dur.ts stats.ts drugUsage.ts # 의약품 · DUR · 질병통계 · 약품사용(숨김)
registry.ts # 도구 레지스트리(구현 N개 / 노출 소수)
metaTools.ts # discover_tools / execute_tool 프록시index.ts의runHttp()가 Streamable HTTP 트랜스포트(스테이트리스) 구현..env는 프로젝트 루트에서 자동 로드.
설계 메모
korean-law-mcp 생태계 조사에서 가져온 패턴 3가지를 반영했습니다.
클라이언트 책임 분리 — 키처리/파싱/정규화(
dataGoKr.ts) ↔ 재시도(fetchWithRetry.ts) ↔ 캐시(cache.ts)를 분리.파라미터 보정 레이어 —
searchNormalizer.ts가 자연어/논리 키를 검증된 API 파라미터로 변환. 미확정 파라미터명을PARAM_MAP한 곳에 모아 TODO로 관리.구현 N개 / 노출 소수 —
registry+metaTools(discover_tools→execute_tool)구조로, 도구가 늘어도 ListTools 컨텍스트를 작게 유지.
Available Tools
10 toolsdiscover_tools도구 발견A
등록된 모든 도구의 이름·설명·입력 스키마 요약을 반환합니다. 숨김 도구를 execute_tool 로 호출하기 전에 사용하세요.
| Name | Required | Description | Default |
|---|---|---|---|
| includeExposed | No | 이미 직접 노출된 도구도 목록에 포함할지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the only source of behavioral information. It discloses that the tool returns summaries and is a preparatory step for executing hidden tools, but it does not elaborate on side effects, rate limits, or the exact nature of the 'summary'. For a discovery tool, 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 description is a single, efficient sentence in Korean that front-loads the action and resource, then adds usage context. Every word contributes value, and there is no wasted detail.
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 no output schema and a single optional parameter, the description adequately conveys what the tool returns and its intended use. It omits a concrete return structure, but the stated purpose is clear enough for an agent to invoke the tool and interpret the result reasonably.
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 description does not discuss the only parameter. However, the input schema fully documents 'includeExposed' with a description and default value, so schema coverage is 100%. Baseline 3 applies because the schema carries the parameter semantics.
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 clearly states that the tool returns the name, description, and input schema summary of all registered tools ('등록된 모든 도구의 이름·설명·입력 스키마 요약을 반환합니다'). It also distinguishes itself from siblings by mentioning its role in preparing for hidden tool execution via execute_tool.
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 provides explicit usage guidance: 'Use before calling hidden tools with execute_tool' ('숨김 도구를 execute_tool 로 호출하기 전에 사용하세요'). It gives a clear context but does not mention exclusions or alternatives, though none are apparent among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_tool도구 실행 프록시B
이름과 인자로 등록된 도구(숨김 포함)를 호출합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | 도구에 전달할 인자 객체 | |
| name | Yes | 호출할 도구 이름 (discover_tools 로 확인) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It does add some context by noting that it includes hidden tools ('숨김 포함'), which is useful. However, it fails to disclose that invoking arbitrary tools via this proxy can have side effects, that the actual behavior is dependent on the called tool, or that return values may vary. This is a significant gap for a dynamic execution tool.
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, concise sentence that immediately conveys the core purpose. It front-loads the verb and resource, with no extraneous information. Perfect conciseness.
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?
Despite the simple concept, the tool is a proxy with arbitrary behavior. The description lacks information about error handling, return format, or the fact that it can invoke any registered tool, which is critical for an agent to use it safely. The schema covers parameter names but not the broader context of what happens when a tool is called or if it fails. The absence of an output schema and annotations makes this minimal description insufficient.
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 100%, providing clear explanations for both 'name' and 'args' parameters. The description adds no extra parameter semantics beyond restating 'by name and arguments.' Thus, it meets the baseline but adds no value beyond the schema.
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 clearly states the tool's function: 'Calls registered tools (including hidden) by name and arguments.' It identifies the specific verb (호출합니다) and resource (등록된 도구), and distinguishes it from sibling tools, which are all domain-specific health information tools. This is a general-purpose proxy tool.
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 provides no guidance on when to use this tool versus alternatives. It does not mention that it should be used after discovering tools via discover_tools, nor does it explain scenarios where direct tool invocation is preferred. The only hint is in the schema parameter description for 'name', but the main description lacks any usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kohealth_get_clinic_top_diseases의원 진료 상위 5개 질병A
의원(동네 병원)의 ykiho 로 최근 1년간 가장 많이 진료한 국민관심질병 상위 5개와 진료과목을 조회합니다. 출처: 건강보험심사평가원 병원진료정보조회서비스.
| Name | Required | Description | Default |
|---|---|---|---|
| ykiho | Yes | 의원급(clCd=31) 암호화 요양기호. kohealth_search_hospital 에 clCd='31' 로 검색해 얻은 ykiho | |
| format | No | 출력 형식 | text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the data source (건강보험심사평가원), the time window (최근 1년), and the result scope (top 5 diseases + departments), which is solid behavioral context. It does not mention errors or rate limits, but the operation is clearly a read-only lookup.
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, well-structured sentence that front-loads the main action and object, then adds time scope and source. Every clause earns its place with no filler or redundancy.
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 simple 2-parameter tool with a required ykiho and an optional format enum, the description is sufficiently complete. It states what is returned (top 5 diseases and departments), the time period, and the data source. No output schema exists, but the expected return is simple enough that this is adequate.
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 100%, so the baseline is 3. The schema descriptions add valuable semantics: ykiho is explicitly tied to hospital search with clCd='31', and format has an enum/default. The description itself does not repeat parameter details, but the schema already provides strong guidance, earning a slight boost.
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?
Description clearly states it retrieves the top 5 national-interest diseases and treatment departments for a clinic (의원) by ykiho over the past year. The verb '조회' and specific resource ('상위 5개 질병과 진료과목') make the purpose unambiguous and distinct from sibling tools like general hospital info or disease stats.
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?
Usage is implied: use when you have a clinic's ykiho and need its most common diseases. The parameter description adds a concrete prerequisite by directing users to kohealth_search_hospital with clCd='31' to obtain the ykiho, but there is no explicit when-not-to-use guidance or comparison to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kohealth_get_disease_stats질병 정보 / 통계 조회A
질병명·코드를 조회하거나(statType='조회만'), 특정 질병코드의 성별연령/입원외래/종별/지역별 진료통계(환자수·요양급여비)를 조회합니다. 출처: 건강보험심사평가원 질병정보서비스.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | 통계 연도 (통계 조회 시 사용) | |
| format | No | 출력 형식. text=사람용 요약, json=원본 항목 배열 | text |
| pageNo | No | 페이지 번호 (1부터) | |
| sickCode | No | 질병분류코드(KCD, 예: 'I10'). 통계 조회 시 필수 | |
| statType | No | '조회만'=질병명/코드 목록. 나머지는 해당 질병통계(sickCode·year 필요) | 조회만 |
| numOfRows | No | 페이지당 항목 수 (최대 100) | |
| diseaseName | No | 질병명 키워드 (예: '당뇨', '고혈압'). 조회 결과 내 부분일치 필터 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It explains the two operation modes (disease lookup vs. statistics) and the breakdown dimensions, and mentions the data items (환자수, 요양급여비). However, it does not disclose output format (text vs. json), the requirement for sickCode and year in statistics mode, or any API limitations such as pagination or rate limits. These details are partially in the schema but not in the description.
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 exactly two sentences, front-loads the primary action, and includes only essential details (modes, breakdown dimensions, source). No filler or repetition of schema information. It is efficient and well-structured.
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?
The tool has 7 parameters, no output schema, and no annotations. The description covers the core functionality but does not explain the response structure, how parameters combine (e.g., diseaseName filtering, pagination), or what the default output looks like. The schema fills many gaps, but with no output schema, the description should provide more detail about return formats and constraints. It is adequate but not 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?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful interpretation of the statType enum by mapping '조회만' to disease lookup and listing the other enum values as breakdown dimensions (성별연령/입원외래/종별/지역별). It also clarifies that sickCode is needed for statistics. This goes beyond the schema's brief per-parameter descriptions, justifying a 4.
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 explicitly states the tool's purpose: query disease names/codes (statType='조회만') or retrieve medical statistics for a specific disease code broken down by gender-age, inpatient/outpatient, type, and region. It uses clear verbs (조회, 통계 조회) and identifies the resource (질병명·코드, 진료통계), distinguishing it from sibling tools focused on hospitals, drugs, and nonpayment.
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 clearly indicates when to use the tool: for disease information/statistics from the HIRA service. It does not explicitly name alternative tools or state 'use this instead of X', but the sibling tools operate in different domains (hospitals, drugs), making the intended use unambiguous. No exclusion criteria are provided, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kohealth_get_drug_dur의약품 DUR 안전정보 조회A
병용금기/연령금기/임부금기/노인주의/효능군중복 DUR 안전정보를 제품명(서버 필터) 또는 성분명(클라이언트 필터)으로 조회합니다. 출처: 식품의약품안전처 DUR 품목정보.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | 출력 형식. text=사람용 요약, json=원본 항목 배열 | text |
| pageNo | No | 페이지 번호 (1부터) | |
| category | Yes | DUR 안전정보 유형 | |
| itemName | No | 제품명 (서버 필터 동작) | |
| numOfRows | No | 페이지당 항목 수 (최대 100) | |
| ingredient | No | 성분명 (예: '아세트아미노펜'). 서버 미지원이라 가져온 결과 내 부분일치 필터 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It discloses that product name filtering happens server-side and ingredient name filtering happens client-side, which is a useful behavioral detail. However, it does not mention the read-only nature, pagination behavior, or any rate limits, though these are partially inferable from the schema.
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 compact and front-loaded, consisting of one sentence that states the verb, resource, and filtering options, followed by a source attribution. Every piece of information earns its place, and it is easy to parse.
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 lack of an output schema and the presence of six parameters, the description provides essential context but omits details such as return format, behavior when no filters are provided, and pagination limits. The source attribution adds credibility, but the tool would benefit from a brief note on how to use the filters together or what the response contains.
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 100%, so the baseline is 3. The description mentions the two filter mechanisms (product and ingredient names) but adds no additional semantic meaning beyond what the parameter descriptions already provide. The schema already includes defaults and constraints for format, pageNo, numOfRows, and category.
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 explicitly states the tool retrieves DUR safety information across five specified categories (병용금기, 연령금기, 임부금기, 노인주의, 효능군중복) using product name (server filter) or ingredient name (client filter). This clearly communicates the resource and the filtering mechanisms, distinguishing it from broader drug search tools.
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 provides no guidance on when to use this tool versus sibling tools like kohealth_search_drug or kohealth_get_disease_stats. It does not state whether this should be used for investigating drug interactions or precautions, nor does it mention any exclusions or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kohealth_get_hospital_info병원 상세정보 조회B
기관식별번호(ykiho)로 진료과목별 전문의 수/의료장비/시설 등 상세정보를 조회합니다. 출처: 심평원 의료기관별상세정보서비스.
| Name | Required | Description | Default |
|---|---|---|---|
| ykiho | Yes | 기관식별번호(ykiho). 병원 검색 결과의 ykiho | |
| format | No | 출력 형식. text=사람용 요약, json=원본 항목 배열 | text |
| pageNo | No | 페이지 번호 (1부터) | |
| category | No | 조회할 상세 정보 유형 | 진료과목 |
| numOfRows | No | 페이지당 항목 수 (최대 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It lists content types and the source but does not state that this is a read-only operation, nor does it mention pagination, response structure, or any limitations. For a retrieval tool, this is a significant gap.
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, focused sentence that efficiently states the action, key input, and data source. No wasted words or unnecessary elaboration.
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 lack of an output schema and annotations, the description is too brief to convey expected response format or handling of large result sets. It also omits usage context relative to sibling tools, making it incomplete for an agent to invoke confidently.
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 schema already covers all five parameters with 100% description coverage, including enums and defaults. The description adds slight context by listing example detail types (specialists, equipment, facilities) that map to the category parameter, but this is largely redundant with the schema.
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 clearly states the tool retrieves detailed hospital information (number of specialists by department, medical equipment, facilities) using the ykiho identifier. The verb '조회' (inquiry) and specific resource differentiate it from sibling search tools.
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 does not explain when to use this tool versus alternatives. It neither mentions that a prior search is needed to obtain ykiho nor contrasts it with siblings like search_hospital. Only the schema hint mentions using search results, but that is not in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kohealth_get_hospital_nonpayment특정 병원의 비급여 목록A
병원명으로 해당 의료기관이 운영하는 비급여 항목·가격을 조회합니다(기관별 목록). ykiho 서버 필터가 없어 병원명+지역으로 좁혀 매칭합니다. 출처: 건강보험심사평가원 비급여진료비정보.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | 출력 형식. text=사람용 요약, json=원본 항목 배열 | text |
| pageNo | No | 페이지 번호 (1부터) | |
| region | No | 지역명 또는 sidoCd 코드. 지정하면 검색 범위를 좁혀 정확도가 올라감 | |
| numOfRows | No | 페이지당 항목 수 (최대 100) | |
| hospitalName | Yes | 병원명 (부분일치). 서버 미지원이라 가져온 결과 내에서 필터됨 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It transparently reveals a key limitation: no server-side ykiho filter, so matching is done client-side by narrowing with hospital name and region. This is meaningful behavioral context beyond the schema, though it could also mention pagination behavior.
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 two concise sentences, front-loaded with the primary purpose in the first sentence and supplementary limitation/source in the second. Every word earns its place with no redundancy or 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 5-parameter lookup tool with no output schema, the description provides adequate context: hospital-specific scope, matching limitation, and data source. The format parameter in the schema covers return value semantics. It stops short of a 5 because pagination behavior and potential edge cases like multiple hospitals with the same name aren't addressed.
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 100%, so all five parameters are already documented. The description reinforces the region parameter's role in narrowing results but adds little new meaning beyond what the schema already states. Baseline 3 is appropriate when the schema does the heavy lifting.
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 clearly states the tool retrieves non-payment items and prices for a specific medical institution by hospital name (기관별 목록). This is a specific verb+resource that distinguishes it from sibling tools like kohealth_search_nonpayment, which likely performs broader searches.
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 provides practical guidance by noting that there is no ykiho server filter, so users should combine hospital name with region to narrow matching. This implies when to use region and improves search accuracy, though it doesn't explicitly contrast with alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kohealth_search_drug의약품 효능·용법·주의·부작용 검색A
제품명/업체명/효능 키워드로 일반인용 의약품 정보(효능, 사용법, 주의사항, 부작용, 보관법)를 검색합니다. 출처: 식품의약품안전처 e약은요.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | 출력 형식. text=사람용 요약, json=원본 항목 배열 | text |
| pageNo | No | 페이지 번호 (1부터) | |
| entpName | No | 업체명 (예: '한국얀센') | |
| itemName | No | 제품명 (예: '타이레놀정500밀리그람') | |
| efcyQuery | No | 효능 키워드 (예: '두통', '해열') | |
| numOfRows | No | 페이지당 항목 수 (최대 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It states the tool searches and lists the types of information returned, implying a read-only query. However, it does not disclose pagination behavior, output format differences, or any potential access limitations. The schema covers pagination format, so the description adds only partial behavioral context.
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, focused sentence that conveys the tool's purpose, target audience, search keys, information fields, and data source. Every word earns its place; no unnecessary detail or repetition.
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?
The description explains what the tool does, what data fields are returned, and the data source, which is sufficient for a search tool without an output schema. Pagination and format are documented in the schema, so the description does not need to repeat them. Minor lack of explicit notes on result handling but overall 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 schema provides descriptions for all six parameters (100% coverage), so the baseline is 3. The description mentions the search keys (제품명/업체명/효능 키워드) which map to itemName, entpName, and efcyQuery, but this is redundant with the schema. The mention of returned fields adds output context, but not parameter-specific semantics beyond the schema.
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 uses the specific verb '검색합니다' (search) and clearly names the resource: 일반인용 의약품 정보 (consumer drug information), with explicit fields (효능, 사용법, 주의사항, 부작용, 보관법). It differentiates from siblings like kohealth_search_hospital or kohealth_get_drug_dur by focusing on general consumer drug information and citing the official source.
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 implies usage for searching consumer drug info by product/company/efficacy keyword, but it does not explicitly state when to use this tool versus alternatives like kohealth_get_drug_dur (for drug utilization review) or kohealth_search_hospital. No exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kohealth_search_hospital병원 검색A
기관명/지역/종별/진료과목으로 병원을 검색해 기관식별번호(ykiho)·주소·전화·좌표를 반환합니다. 여기서 얻은 ykiho 를 비급여/상세 도구에 넘겨 연결할 수 있습니다. 출처: 심평원 병원정보서비스.
| Name | Required | Description | Default |
|---|---|---|---|
| clCd | No | 종별코드 (예: 상급종합 11, 종합병원 21, 병원 28, 의원 31). 코드값은 활용가이드 참고 | |
| format | No | 출력 형식. text=사람용 요약, json=원본 항목 배열 | text |
| pageNo | No | 페이지 번호 (1부터) | |
| region | No | 지역 약칭/시도명 (예: '서울'). 표준 시도명으로 정규화됨 | |
| dgsbjtCd | No | 진료과목코드 (예: 내과 01, 외과 04). 코드값은 활용가이드 참고 | |
| numOfRows | No | 페이지당 항목 수 (최대 100) | |
| hospitalName | No | 기관명 (예: '서울대학교병원') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It does disclose return fields and the data source (심평원 병원정보서비스), but it does not mention pagination behavior, default output format, or what happens when no filters are provided. The linkage hint adds useful context, but some behavioral traits remain implicit.
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?
A single compact sentence front-loads the purpose, then efficiently lists return fields, linkage workflow, and source. Every clause contributes value without repetition or unnecessary 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 search tool with 7 parameters but no output schema or annotations, the description covers the essential workflow (search → get ykiho → pass to other tools) and return fields. It could optionally mention pagination or format behavior, but the schema handles parameter details, so the description 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 schema already describes all 7 parameters with examples and constraints (100% coverage), so baseline is 3. The description adds no new parameter-level detail beyond grouping them into categories (name/region/type/department) that are already clear from the schema.
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 starts with a specific verb and resource ('병원을 검색해') and lists concrete search dimensions (기관명/지역/종별/진료과목) and return fields (ykiho, 주소, 전화, 좌표). It also distinguishes the tool from siblings by explicitly noting that the resulting ykiho should be passed to 비급여/상세 tools.
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 context: use this tool to search hospitals and obtain ykiho, then pass it to detail/non-payment tools. This implies a workflow and differentiates it from sibling tools, though it does not name exact alternative tool names or exclusion cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kohealth_search_nonpayment비급여 항목 검색A
지역/종별로 비급여 진료 항목과 가격, 제공 의료기관을 조회합니다. itemKeyword 로 항목명을 추가 필터링합니다. 출처: 건강보험심사평가원 비급여진료비정보.
| Name | Required | Description | Default |
|---|---|---|---|
| clCd | No | 종별코드 (예: 종합병원 11, 병원 21). 서버 필터 동작 | |
| format | No | 출력 형식. text=사람용 요약, json=원본 항목 배열 | text |
| pageNo | No | 페이지 번호 (1부터) | |
| region | No | 지역명 또는 sidoCd 코드 (예: '서울'→110000으로 변환). 서버 필터 동작 | |
| numOfRows | No | 페이지당 항목 수 (최대 100) | |
| itemKeyword | No | 비급여 항목 키워드 (예: 'MRI', '도수치료'). 서버 미지원이라 가져온 결과 내에서 부분일치 필터됨 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it only states that it 'queries' and filters by itemKeyword. It omits the critical detail (though present in schema) that itemKeyword filtering is performed client-side after fetching results, which can affect pagination. The source attribution adds context but does not cover this gap.
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 three concise sentences, front-loaded with the primary purpose. Every sentence contributes to understanding the tool's function and source, with no redundant information.
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 tool with 6 parameters, no annotations, and no output schema, the description provides core purpose but lacks critical operational context such as pagination behavior, output format options (text vs json), and the server vs client-side filtering nuance. While the schema compensates for parameter details, the description alone is not fully complete for an agent to use confidently.
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 100%, so the baseline is 3. The description adds no meaningful parameter semantics beyond what the schema already provides; it merely repeats that region/type are used and itemKeyword filters. No additional parameter details are given.
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 clearly states the tool's action ('조회합니다' - searches) and resource ('비급여 진료 항목' - non-payment care items), scoped by region/type. It also mentions additional filtering by itemKeyword and provides the data source, making it distinct from sibling tools like kohealth_get_hospital_nonpayment which is hospital-specific.
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 implies usage when searching for non-payment items by region/type and filtering by keyword, but it does not explicitly state when to use this tool versus alternatives like kohealth_get_hospital_nonpayment. There are no exclusionary statements or named alternative 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.
10 tool updates
v0.1.0- First observed
discover_tools - First observed
execute_tool - First observed
kohealth_get_clinic_top_diseases - First observed
kohealth_get_disease_stats - First observed
kohealth_get_drug_dur - First observed
kohealth_get_hospital_info - First observed
kohealth_get_hospital_nonpayment - First observed
kohealth_search_drug - First observed
kohealth_search_hospital - First observed
kohealth_search_nonpayment
TDQS
Scored across 10 tools
Each tool targets a specific resource and action: hospital search vs. hospital details, non-payment by region vs. by hospital, drug info vs. DUR safety, disease statistics, plus two clearly distinct meta-tools for discovery and execution. No overlapping purposes.
Domain tools consistently follow a 'kohealth_verb_noun' pattern (e.g., search_hospital, get_hospital_info, get_drug_dur). The two meta-tools (discover_tools, execute_tool) deviate from this pattern but are clearly named and serve a different function, so the inconsistency is minor.
With 10 tools, the server is well-scoped. It covers multiple health data domains (hospitals, non-payment, drugs, diseases) without unnecessary bloat, and each tool contributes meaningfully to the overall functionality.
The tool surface provides comprehensive coverage for the apparent domain: hospital search and detailed info, non-payment item lookup by region and hospital, drug search and DUR safety, and disease statistics. A minor gap is the lack of a tool to directly compare non-payment prices across multiple hospitals, but the existing search can partially achieve this.
Maintenance
Related MCP Connectors
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Public Data Ukraine Mcp connects AI agents to real public APIs via MCP. Tools include
75 MCP tools: SEC financials, FRED economics, IRS 990, FDA, FX, UK Companies House.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables querying and analyzing non-reimbursable medical treatment costs in South Korea using the Health Insurance Review & Assessment Service API. Supports searching treatment codes, comparing hospital prices, regional statistics analysis, and finding cost-effective healthcare options.-
- AlicenseAqualityDmaintenanceEnables MCP clients like Claude Desktop to search, retrieve, and analyze Korean statistical data from KOSIS OpenAPI.161MIT
- AlicenseAqualityDmaintenanceEnables searching and retrieving Korean disease information and statistics from the Health Insurance Review and Assessment Service (HIRA) using Claude.5MIT
- AlicenseAqualityAmaintenanceEnables LLM agents to query Korean drug, DUR safety rules, and health supplement databases via MCP protocol.4MIT