korea-stay
Korean lodging: 84,490 stays from 4 government permit ledgers + KTO TourAPI, honest gaps
¿Debería usar esto?
Calidad y seguridad
Hallazgos (4)
- LOWen stay_search
- LOWen stay_detail
- LOWen stay_booking_link
- LOWen report_issue
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"korea-stay": {
"url": "https://stay.sallim.app/mcp?via=official"
}
}
}Puntos de conexión remotos
https://stay.sallim.app/mcp?via=officialstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (4)
🟢stay_search(region, checkin, checkout, guests, category, ...)
조건에 맞는 국내 숙소를 찾는다. **재고를 확인하지 못한 숙소를 결과에서 지우지 않는다.** availability가 unknown이면 빈방 여부를 모른다는 뜻이고, 만실이라는 뜻이 아니다. 사용자에게 그렇게 전달하라.
Esquema de entrada
{
"type": "object",
"properties": {
"region": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "지역. '강원 속초', '서울 마포구'처럼 시도+시군구. 정식명·구명·약칭 다 받는다('제주도'='제주'='제주특별자치도'). 행정구역 어휘와 대조해 걸고, 어휘에 없는 말(읍·면·동·도로명)은 주소 부분문자열로 내려간다 — 어느 쪽이었는지는 meta.region_matched_on에 적힌다. 0건이면 복구 경로가 meta.unapplied_conditions로 **반드시** 오고, 다시 걸 이름을 댈 수 있을 때만 meta.region_retry가 함께 온다(0건 = '없다'가 아니다). region_retry는 질의가 건 시도 안의 이름만 담는다. **로마자는 시도만 받는다**('Seoul'·'Jeju-do'는 통하고 'Gangnam'은 안 통한다) — 시군구 이하는 한글로 써라",
"title": "Region"
},
"checkin": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "체크인 YYYY-MM-DD. 주면 재고 조회를 시도한다 — 지난 날짜면 재고는 조회하지 않는다(목록은 그대로 나온다)",
"title": "Checkin"
},
"checkout": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "체크아웃 YYYY-MM-DD",
"title": "Checkout"
},
"guests": {
"default": 2,
"description": "인원(1~30)",
"maximum": 30,
"minimum": 1,
"title": "Guests",
"type": "integer"
},
"category": {
"anyOf": [
{
"enum": [
"관광호텔",
"콘도미니엄",
"유스호스텔",
"펜션",
"모텔",
"민박",
"게스트하우스",
"홈스테이",
"서비스드레지던스",
"한옥",
"여관업",
"숙박업(생활)",
"여인숙업",
"일반호텔",
"숙박업 기타",
"휴양콘도미니엄업",
"농어촌민박업",
"외국인관광 도시민박업",
"한옥체험업"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "숙소 종류",
"title": "Category"
},
"limit": {
"default": 20,
"description": "반환 개수 (최대 50)",
"maximum": 50,
"minimum": 1,
"title": "Limit",
"type": "integer"
}
},
"title": "stay_searchArguments"
}Esquema de salida
{
"type": "object",
"additionalProperties": true,
"title": "stay_searchDictOutput"
}🟢stay_detail(stay_id, checkin, checkout, guests)
숙소 하나의 상세 정보와 재고를 조회한다. 재고 실시간 재확인은 여기서만 한다.
Esquema de entrada
{
"type": "object",
"properties": {
"stay_id": {
"description": "stay_search가 준 stay_id (예: tourapi:2671267)",
"title": "Stay Id",
"type": "string"
},
"checkin": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "체크인 YYYY-MM-DD",
"title": "Checkin"
},
"checkout": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "체크아웃 YYYY-MM-DD",
"title": "Checkout"
},
"guests": {
"default": 2,
"description": "인원(1~30)",
"maximum": 30,
"minimum": 1,
"title": "Guests",
"type": "integer"
}
},
"required": [
"stay_id"
],
"title": "stay_detailArguments"
}Esquema de salida
{
"type": "object",
"additionalProperties": true,
"title": "stay_detailDictOutput"
}🟢stay_booking_link(stay_id, platform)
예약 가능한 원본 페이지로 가는 링크를 만든다. 이 서버는 예약을 처리하지 않는다 — 사용자를 원본 플랫폼으로 보낸다. 링크는 숙소명·주소로 만든 **검색 링크**이며 특정 객실의 예약 페이지가 아니다(그건 재고 어댑터가 붙어야 나온다).
Esquema de entrada
{
"type": "object",
"properties": {
"stay_id": {
"description": "stay_search가 준 stay_id",
"title": "Stay Id",
"type": "string"
},
"platform": {
"default": "naver",
"description": "어느 플랫폼 검색으로 보낼지 (naver, google, tour)",
"enum": [
"naver",
"google",
"tour"
],
"title": "Platform",
"type": "string"
}
},
"required": [
"stay_id"
],
"title": "stay_booking_linkArguments"
}Esquema de salida
{
"type": "object",
"additionalProperties": true,
"title": "stay_booking_linkDictOutput"
}⚪report_issue(problem, question, kind, answered_fully, missing_axis, ...)
답이 틀렸을 때 신고하거나(kind='결함'), 남길 값이 있는 **질문 원문을 기록한다**(kind='질문기록'). **결함**: 사용자가 "틀렸다"·"이상하다"고 하면 **먼저 이 도구를 부른 뒤** 정정 답변을 하라. 추측으로 부르지는 말 것. **질문기록**: 이 서버는 클라이언트가 이미 도구 호출로 번역한 뒤를 보므로 **사용자의 원문 질문을 볼 수 없다**. 그래서 어떤 질문이 실제로 오는지, 무엇을 못 답하는지가 계측에 안 잡힌다 — 이 프로젝트의 목적이 유통이 아니라 계측인데 정작 수요 축이 비어 있었다. 복합 질문·부분 답변·전제 오류 셋 중 하나면 원문(일반형으로 치환)을 남겨라. **개인 식별 조합은 반드시 일반형으로 바꿔서** 넣는다. 두 종류가 한 도구인 이유: 무인증 공개 서버라 쓰기 표면을 하나로 묶어 상한을 함께 건다 (CLAUDE.md 규칙 2). 시간당 상한도 공유한다.
Esquema de entrada
{
"type": "object",
"properties": {
"problem": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "무엇이 틀렸는지. 사용자의 말을 그대로 옮겨도 된다. kind='결함'이면 필수, kind='질문기록'이면 비워도 된다.",
"title": "Problem"
},
"question": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "사용자의 **원래 질문**(kind='질문기록'이면 필수). ⚠️ **개인 식별 조합은 일반형으로 치환해서 넣어라** — 이름·연락처·정확한 거주지·동행자 사연이 겹치면 그대로 적지 말 것(예: '○○동 △△빌라 사는 김□□, 부모님 팔순으로 속초 2박' → '가족 3인 속초 2박'). 무인증 공개 서버의 로그다",
"title": "Question"
},
"kind": {
"default": "결함",
"description": "'결함'=답이 틀렸다는 신고(기본). '질문기록'=틀리진 않았지만 **질문 원문을 남길 값이 있는 경우** — 서버는 클라이언트가 번역한 도구 호출만 보고 원문 질문을 볼 수 없어서, 이게 유일한 통로다. **아무 질문이나 남기지 마라**: ①여러 도구를 엮어야 답이 된 복합 질문 ②우리 도구로 일부만 답한 질문(answered_fully=false) ③사용자의 전제가 틀려서 바로잡아야 했던 질문(예: '펜션'을 법적 업종명으로 알고 있던 경우) — 셋 중 하나일 때만. 단순 조회 한 건은 남기지 않는다",
"enum": [
"결함",
"질문기록"
],
"title": "Kind",
"type": "string"
},
"answered_fully": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "kind='질문기록' 전용 — 이 서버 도구만으로 질문에 **완결된 답**을 했는가. false면 missing_axis에 무엇이 없었는지 적어라",
"title": "Answered Fully"
},
"missing_axis": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "answered_fully=false일 때 **없어서 못 답한 축**(예: '실시간 빈방', '가격대 필터 없음', '반려동물 동반 가능 여부 미수록'). 로드맵과 수집 우선순위의 원천이 된다",
"title": "Missing Axis"
},
"tool_used": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "문제가 된 답을 만든 도구",
"title": "Tool Used"
},
"wrong_value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "틀린 수치·문장",
"title": "Wrong Value"
},
"expected": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "사용자가 맞다고 본 값",
"title": "Expected"
}
},
"title": "report_issueArguments"
}Esquema de salida
{
"type": "object",
"additionalProperties": true,
"title": "report_issueDictOutput"
}Comunidad
Evidencia