Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,552Letters: 14Defects: 1,331counted 1 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:f52491b48810b3cca689be4a3949231fe4b13cd5e37df105e1e15221ea137f30 | sha256sum