Server definition
- Hash
- sha256:f52491b48810b3cca689be4a3949231fe4b13cd5e37df105e1e15221ea137f30
- What it is
- What a remote MCP server returned when asked what it offers: 4 tools
The blob, as servednamed by its sha256
{
"instructions": "국내 숙소를 검색하는 서버다.\n\n네 가지를 반드시 사용자에게 그대로 전달하라.\n1) '펜션'·'게스트하우스'는 법적 업종명이 아니라 마케팅 용어다. 법에서는 숙박업(여관·모텔·호텔)·\n 농어촌민박업(펜션·시골독채)·외국인관광도시민박업(게스트하우스)·한옥체험업으로 갈리고,\n 이 서버는 넷 다 담고 있다. 그래서 사용자가 \"펜션\"이라 하면 kind는 '농어촌민박업'일 수 있다 —\n 종류를 물으면 원장 라벨을 그대로 전하고 우리가 고쳐 부르지 않는다.\n2) availability는 지금 **항상 \"unknown\"**이다 — 이 서버에 붙은 재고 채널이 0개다.\n 만실이라고 답하지 말고, stay_booking_link 도구로 원본 검색 링크를 만들어 직접 확인하도록\n 안내하라. 응답에는 예약 링크 필드가 없다 — 없는 필드 이름을 사용자에게 말하지도, 링크를\n 지어내지도 말 것.\n3) 종류(kind)는 원천이 준 라벨 그대로다. 우리가 고쳐 부르지 않으므로 '모텔'로 분류된 곳의\n 이름이 '○○호텔'일 수 있다.\n4) 요금은 지금 **어떤 응답에도 없다** — 인덱스에 가격 컬럼이 없고 재고 채널도 0개다.\n 1박에 얼마냐고 묻거든 금액을 지어내지 말고 \"이 서버는 요금을 담지 않는다\"고 답한 뒤,\n stay_booking_link 도구로 원본 검색 링크를 만들어 직접 확인하도록 안내하라.\n\n숫자·요금·재고를 추측으로 채우지 말 것. 응답에 없는 값은 없는 것이다.",
"tools": [
{
"description": "답이 틀렸을 때 신고하거나(kind='결함'), 남길 값이 있는 **질문 원문을 기록한다**(kind='질문기록').\n\n **결함**: 사용자가 \"틀렸다\"·\"이상하다\"고 하면 **먼저 이 도구를 부른 뒤** 정정 답변을 하라.\n 추측으로 부르지는 말 것.\n\n **질문기록**: 이 서버는 클라이언트가 이미 도구 호출로 번역한 뒤를 보므로 **사용자의 원문\n 질문을 볼 수 없다**. 그래서 어떤 질문이 실제로 오는지, 무엇을 못 답하는지가 계측에 안 잡힌다\n — 이 프로젝트의 목적이 유통이 아니라 계측인데 정작 수요 축이 비어 있었다. 복합 질문·부분\n 답변·전제 오류 셋 중 하나면 원문(일반형으로 치환)을 남겨라. **개인 식별 조합은 반드시\n 일반형으로 바꿔서** 넣는다.\n\n 두 종류가 한 도구인 이유: 무인증 공개 서버라 쓰기 표면을 하나로 묶어 상한을 함께 건다\n (CLAUDE.md 규칙 2). 시간당 상한도 공유한다.\n ",
"inputSchema": {
"properties": {
"answered_fully": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "kind='질문기록' 전용 — 이 서버 도구만으로 질문에 **완결된 답**을 했는가. false면 missing_axis에 무엇이 없었는지 적어라",
"title": "Answered Fully"
},
"expected": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "사용자가 맞다고 본 값",
"title": "Expected"
},
"kind": {
"default": "결함",
"description": "'결함'=답이 틀렸다는 신고(기본). '질문기록'=틀리진 않았지만 **질문 원문을 남길 값이 있는 경우** — 서버는 클라이언트가 번역한 도구 호출만 보고 원문 질문을 볼 수 없어서, 이게 유일한 통로다. **아무 질문이나 남기지 마라**: ①여러 도구를 엮어야 답이 된 복합 질문 ②우리 도구로 일부만 답한 질문(answered_fully=false) ③사용자의 전제가 틀려서 바로잡아야 했던 질문(예: '펜션'을 법적 업종명으로 알고 있던 경우) — 셋 중 하나일 때만. 단순 조회 한 건은 남기지 않는다",
"enum": [
"결함",
"질문기록"
],
"title": "Kind",
"type": "string"
},
"missing_axis": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "answered_fully=false일 때 **없어서 못 답한 축**(예: '실시간 빈방', '가격대 필터 없음', '반려동물 동반 가능 여부 미수록'). 로드맵과 수집 우선순위의 원천이 된다",
"title": "Missing Axis"
},
"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"
},
"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"
}
},
"title": "report_issueArguments",
"type": "object"
},
"name": "report_issue",
"outputSchema": {
"additionalProperties": true,
"title": "report_issueDictOutput",
"type": "object"
}
},
{
"description": "예약 가능한 원본 페이지로 가는 링크를 만든다.\n\n 이 서버는 예약을 처리하지 않는다 — 사용자를 원본 플랫폼으로 보낸다. 링크는 숙소명·주소로\n 만든 **검색 링크**이며 특정 객실의 예약 페이지가 아니다(그건 재고 어댑터가 붙어야 나온다).\n ",
"inputSchema": {
"properties": {
"platform": {
"default": "naver",
"description": "어느 플랫폼 검색으로 보낼지 (naver, google, tour)",
"enum": [
"naver",
"google",
"tour"
],
"title": "Platform",
"type": "string"
},
"stay_id": {
"description": "stay_search가 준 stay_id",
"title": "Stay Id",
"type": "string"
}
},
"required": [
"stay_id"
],
"title": "stay_booking_linkArguments",
"type": "object"
},
"name": "stay_booking_link",
"outputSchema": {
"additionalProperties": true,
"title": "stay_booking_linkDictOutput",
"type": "object"
}
},
{
"description": "숙소 하나의 상세 정보와 재고를 조회한다. 재고 실시간 재확인은 여기서만 한다.",
"inputSchema": {
"properties": {
"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"
},
"stay_id": {
"description": "stay_search가 준 stay_id (예: tourapi:2671267)",
"title": "Stay Id",
"type": "string"
}
},
"required": [
"stay_id"
],
"title": "stay_detailArguments",
"type": "object"
},
"name": "stay_detail",
"outputSchema": {
"additionalProperties": true,
"title": "stay_detailDictOutput",
"type": "object"
}
},
{
"description": "조건에 맞는 국내 숙소를 찾는다.\n\n **재고를 확인하지 못한 숙소를 결과에서 지우지 않는다.** availability가 unknown이면\n 빈방 여부를 모른다는 뜻이고, 만실이라는 뜻이 아니다. 사용자에게 그렇게 전달하라.\n ",
"inputSchema": {
"properties": {
"category": {
"anyOf": [
{
"enum": [
"관광호텔",
"콘도미니엄",
"유스호스텔",
"펜션",
"모텔",
"민박",
"게스트하우스",
"홈스테이",
"서비스드레지던스",
"한옥",
"여관업",
"숙박업(생활)",
"여인숙업",
"일반호텔",
"숙박업 기타",
"휴양콘도미니엄업",
"농어촌민박업",
"외국인관광 도시민박업",
"한옥체험업"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "숙소 종류. 라벨은 두 원천의 어휘에서 오고, 같은 숙소라도 원천마다 이름이 다르다.\nTourAPI 마케팅 라벨: 관광호텔·콘도미니엄·유스호스텔·펜션·모텔·민박·게스트하우스·홈스테이·서비스드레지던스·한옥\n인허가 원장 법정 업종명: 관광호텔·여관업·숙박업(생활)·여인숙업·일반호텔·숙박업 기타·휴양콘도미니엄업·농어촌민박업·외국인관광 도시민박업·한옥체험업\n두 어휘에 다 있는 라벨: 관광호텔 — 양쪽 원천을 함께 거른다.\n그 밖의 라벨은 자기 원천의 숙소만 거르고, 다른 원천의 같은 종류 숙소는 빠진다(예: '펜션'으로 걸면 원장의 '농어촌민박업'이 빠진다). 전체를 보려면 다른 어휘의 대응 라벨로 한 번 더 걸어라.",
"title": "Category"
},
"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"
},
"limit": {
"default": 20,
"description": "반환 개수 (1~50)",
"maximum": 50,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"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"
}
},
"title": "stay_searchArguments",
"type": "object"
},
"name": "stay_search",
"outputSchema": {
"additionalProperties": true,
"title": "stay_searchDictOutput",
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:f52491b48810b3cca689be4a3949231fe4b13cd5e37df105e1e15221ea137f30 | sha256sum