@nomadamas/k-skill 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/k-skill.js +60 -0
- package/package.json +37 -0
- package/skills/assembly-bill-vote-search/instruction.md +111 -0
- package/skills/assembly-bill-vote-search/skill.json +10 -0
- package/skills/biz-health-check/instruction.md +69 -0
- package/skills/biz-health-check/scripts/biz_health_check.py +163 -0
- package/skills/biz-health-check/skill.json +10 -0
- package/skills/bok-ecos-stats/instruction.md +95 -0
- package/skills/bok-ecos-stats/scripts/bok_ecos.py +302 -0
- package/skills/bok-ecos-stats/skill.json +10 -0
- package/skills/building-register-search/instruction.md +69 -0
- package/skills/building-register-search/scripts/building_register.py +309 -0
- package/skills/building-register-search/scripts/building_register_xml.py +32 -0
- package/skills/building-register-search/skill.json +9 -0
- package/skills/bunjang-search/instruction.md +154 -0
- package/skills/bunjang-search/skill.json +10 -0
- package/skills/catchtable-sniper/instruction.md +270 -0
- package/skills/catchtable-sniper/skill.json +9 -0
- package/skills/cheap-gas-nearby/instruction.md +107 -0
- package/skills/cheap-gas-nearby/skill.json +10 -0
- package/skills/corporate-registration-consulting/instruction.md +117 -0
- package/skills/corporate-registration-consulting/scripts/fill_official_hwp.py +106 -0
- package/skills/corporate-registration-consulting/skill.json +8 -0
- package/skills/coupang-product-search/instruction.md +219 -0
- package/skills/coupang-product-search/scripts/coupang_partners_mcp.py +146 -0
- package/skills/coupang-product-search/skill.json +10 -0
- package/skills/court-auction-notice-search/instruction.md +201 -0
- package/skills/court-auction-notice-search/skill.json +9 -0
- package/skills/court-payment-order-assistant/instruction.md +120 -0
- package/skills/court-payment-order-assistant/skill.json +10 -0
- package/skills/d2b-notice-search/instruction.md +117 -0
- package/skills/d2b-notice-search/skill.json +10 -0
- package/skills/daangn-cars-search/instruction.md +91 -0
- package/skills/daangn-cars-search/scripts/daangn_cars.py +72 -0
- package/skills/daangn-cars-search/skill.json +9 -0
- package/skills/daangn-jobs-search/instruction.md +90 -0
- package/skills/daangn-jobs-search/scripts/daangn_jobs.py +98 -0
- package/skills/daangn-jobs-search/skill.json +9 -0
- package/skills/daangn-realty-search/instruction.md +114 -0
- package/skills/daangn-realty-search/scripts/daangn_detail_ld.py +76 -0
- package/skills/daangn-realty-search/scripts/daangn_realty.py +216 -0
- package/skills/daangn-realty-search/scripts/daangn_relay_store.py +174 -0
- package/skills/daangn-realty-search/skill.json +8 -0
- package/skills/daangn-used-goods-search/instruction.md +90 -0
- package/skills/daangn-used-goods-search/scripts/daangn_used_goods.py +80 -0
- package/skills/daangn-used-goods-search/skill.json +9 -0
- package/skills/daishin-report-search/instruction.md +138 -0
- package/skills/daishin-report-search/skill.json +10 -0
- package/skills/daiso-product-search/instruction.md +172 -0
- package/skills/daiso-product-search/skill.json +8 -0
- package/skills/danawa-price-search/instruction.md +183 -0
- package/skills/danawa-price-search/scripts/danawa_search.py +354 -0
- package/skills/danawa-price-search/skill.json +8 -0
- package/skills/delivery-tracking/instruction.md +358 -0
- package/skills/delivery-tracking/skill.json +8 -0
- package/skills/donation-place-search/instruction.md +129 -0
- package/skills/donation-place-search/skill.json +9 -0
- package/skills/emergency-room-beds/instruction.md +82 -0
- package/skills/emergency-room-beds/skill.json +8 -0
- package/skills/ev-charger-nearby/instruction.md +80 -0
- package/skills/ev-charger-nearby/scripts/ev_charger.py +222 -0
- package/skills/ev-charger-nearby/skill.json +10 -0
- package/skills/ev-subsidy-status/instruction.md +165 -0
- package/skills/ev-subsidy-status/skill.json +10 -0
- package/skills/express-bus-booking/instruction.md +207 -0
- package/skills/express-bus-booking/references/kobus-http-flow.md +159 -0
- package/skills/express-bus-booking/scripts/kobus_express_booking.py +243 -0
- package/skills/express-bus-booking/skill.json +8 -0
- package/skills/fine-dust-location/instruction.md +89 -0
- package/skills/fine-dust-location/skill.json +9 -0
- package/skills/flight-ticket-search/instruction.md +237 -0
- package/skills/flight-ticket-search/scripts/flight_ticket_search.py +501 -0
- package/skills/flight-ticket-search/skill.json +9 -0
- package/skills/foresttrip-vacancy/instruction.md +167 -0
- package/skills/foresttrip-vacancy/scripts/run_foresttrip_vacancy.py +549 -0
- package/skills/foresttrip-vacancy/skill.json +10 -0
- package/skills/fsc-corporate-info/instruction.md +57 -0
- package/skills/fsc-corporate-info/scripts/fsc_corporate_info.py +113 -0
- package/skills/fsc-corporate-info/skill.json +10 -0
- package/skills/g2b-order-plan-search/instruction.md +131 -0
- package/skills/g2b-order-plan-search/scripts/g2b_order_plan.py +158 -0
- package/skills/g2b-order-plan-search/skill.json +10 -0
- package/skills/g2b-sanctioned-supplier/instruction.md +61 -0
- package/skills/g2b-sanctioned-supplier/scripts/g2b_sanctioned_supplier.py +114 -0
- package/skills/g2b-sanctioned-supplier/skill.json +10 -0
- package/skills/gangnamunni-clinic-search/instruction.md +113 -0
- package/skills/gangnamunni-clinic-search/skill.json +9 -0
- package/skills/geeknews-search/instruction.md +69 -0
- package/skills/geeknews-search/scripts/geeknews_search.py +296 -0
- package/skills/geeknews-search/skill.json +8 -0
- package/skills/gongsijiga-search/instruction.md +128 -0
- package/skills/gongsijiga-search/skill.json +9 -0
- package/skills/gov-overseas-trip-report/instruction.md +488 -0
- package/skills/gov-overseas-trip-report/scripts/gov_overseas_trip_report.py +1206 -0
- package/skills/gov-overseas-trip-report/skill.json +9 -0
- package/skills/han-river-water-level/instruction.md +83 -0
- package/skills/han-river-water-level/skill.json +10 -0
- package/skills/highway-traffic-status/instruction.md +88 -0
- package/skills/highway-traffic-status/scripts/highway_traffic.py +315 -0
- package/skills/highway-traffic-status/skill.json +11 -0
- package/skills/hipass-receipt/instruction.md +97 -0
- package/skills/hipass-receipt/skill.json +10 -0
- package/skills/hola-poke-yeoksam/instruction.md +247 -0
- package/skills/hola-poke-yeoksam/skill.json +8 -0
- package/skills/household-waste-info/instruction.md +117 -0
- package/skills/household-waste-info/skill.json +10 -0
- package/skills/housing-official-price/instruction.md +177 -0
- package/skills/housing-official-price/skill.json +10 -0
- package/skills/hwp/instruction.md +206 -0
- package/skills/hwp/skill.json +8 -0
- package/skills/intercity-bus-booking/instruction.md +189 -0
- package/skills/intercity-bus-booking/references/tmoney-intercity-http-flow.md +126 -0
- package/skills/intercity-bus-booking/scripts/intercity_bus_search.py +381 -0
- package/skills/intercity-bus-booking/skill.json +8 -0
- package/skills/iros-registry-automation/instruction.md +229 -0
- package/skills/iros-registry-automation/scripts/iros_pdf_summary.py +249 -0
- package/skills/iros-registry-automation/scripts/upstream.pin +1 -0
- package/skills/iros-registry-automation/skill.json +9 -0
- package/skills/job-posting-match/instruction.md +130 -0
- package/skills/job-posting-match/scripts/job_posting_match.py +396 -0
- package/skills/job-posting-match/scripts/test_job_posting_match.py +54 -0
- package/skills/job-posting-match/skill.json +8 -0
- package/skills/jobkorea-talent-search/instruction.md +118 -0
- package/skills/jobkorea-talent-search/scripts/jobkorea_talent_models.py +27 -0
- package/skills/jobkorea-talent-search/scripts/jobkorea_talent_parse.py +186 -0
- package/skills/jobkorea-talent-search/scripts/jobkorea_talent_search.py +94 -0
- package/skills/jobkorea-talent-search/scripts/jobkorea_talent_search_condition.py +136 -0
- package/skills/jobkorea-talent-search/scripts/test_jobkorea_talent_search.py +76 -0
- package/skills/jobkorea-talent-search/skill.json +9 -0
- package/skills/joseon-sillok-search/instruction.md +76 -0
- package/skills/joseon-sillok-search/scripts/sillok_search.py +552 -0
- package/skills/joseon-sillok-search/skill.json +8 -0
- package/skills/k-dart/instruction.md +406 -0
- package/skills/k-dart/skill.json +8 -0
- package/skills/k-schoollunch-menu/instruction.md +109 -0
- package/skills/k-schoollunch-menu/skill.json +9 -0
- package/skills/k-skill-cleaner/instruction.md +80 -0
- package/skills/k-skill-cleaner/scripts/k_skill_cleaner.py +410 -0
- package/skills/k-skill-cleaner/skill.json +8 -0
- package/skills/k-skill-setup/instruction.md +253 -0
- package/skills/k-skill-setup/skill.json +11 -0
- package/skills/kakao-bar-nearby/instruction.md +76 -0
- package/skills/kakao-bar-nearby/skill.json +8 -0
- package/skills/kakao-map/instruction.md +176 -0
- package/skills/kakao-map/skill.json +10 -0
- package/skills/kakaotalk-mac/instruction.md +189 -0
- package/skills/kakaotalk-mac/skill.json +8 -0
- package/skills/kbl-results/instruction.md +89 -0
- package/skills/kbl-results/skill.json +9 -0
- package/skills/kbo-results/instruction.md +82 -0
- package/skills/kbo-results/skill.json +8 -0
- package/skills/keris-academic-search/instruction.md +81 -0
- package/skills/keris-academic-search/scripts/keris_academic.py +210 -0
- package/skills/keris-academic-search/skill.json +10 -0
- package/skills/kleague-results/instruction.md +92 -0
- package/skills/kleague-results/skill.json +8 -0
- package/skills/kopis-performance-search/instruction.md +109 -0
- package/skills/kopis-performance-search/skill.json +10 -0
- package/skills/korea-weather/instruction.md +93 -0
- package/skills/korea-weather/skill.json +10 -0
- package/skills/korean-character-count/instruction.md +87 -0
- package/skills/korean-character-count/scripts/korean_character_count.js +268 -0
- package/skills/korean-character-count/skill.json +8 -0
- package/skills/korean-cinema-search/instruction.md +177 -0
- package/skills/korean-cinema-search/skill.json +8 -0
- package/skills/korean-heritage-search/instruction.md +106 -0
- package/skills/korean-heritage-search/scripts/korean_heritage_search.py +321 -0
- package/skills/korean-heritage-search/skill.json +8 -0
- package/skills/korean-holiday-calendar/instruction.md +97 -0
- package/skills/korean-holiday-calendar/skill.json +9 -0
- package/skills/korean-humanizer/instruction.md +389 -0
- package/skills/korean-humanizer/references/ai-tell-taxonomy.md +147 -0
- package/skills/korean-humanizer/skill.json +8 -0
- package/skills/korean-jangbu-for/instruction.md +133 -0
- package/skills/korean-jangbu-for/scripts/install.sh +237 -0
- package/skills/korean-jangbu-for/scripts/upstream.pin +1 -0
- package/skills/korean-jangbu-for/skill.json +8 -0
- package/skills/korean-law-search/instruction.md +126 -0
- package/skills/korean-law-search/skill.json +10 -0
- package/skills/korean-marathon-schedule/instruction.md +111 -0
- package/skills/korean-marathon-schedule/skill.json +9 -0
- package/skills/korean-middle-korean/instruction.md +79 -0
- package/skills/korean-middle-korean/scripts/korean_middle_korean.js +214 -0
- package/skills/korean-middle-korean/skill.json +8 -0
- package/skills/korean-patent-search/instruction.md +79 -0
- package/skills/korean-patent-search/scripts/patent_search.py +409 -0
- package/skills/korean-patent-search/skill.json +9 -0
- package/skills/korean-privacy-terms/instruction.md +128 -0
- package/skills/korean-privacy-terms/scripts/install.sh +108 -0
- package/skills/korean-privacy-terms/scripts/upstream.pin +1 -0
- package/skills/korean-privacy-terms/skill.json +8 -0
- package/skills/korean-scholarship-search/instruction.md +317 -0
- package/skills/korean-scholarship-search/references/report-format.md +40 -0
- package/skills/korean-scholarship-search/references/school-discovery.md +61 -0
- package/skills/korean-scholarship-search/references/search-clues.md +58 -0
- package/skills/korean-scholarship-search/references/source-patterns.md +67 -0
- package/skills/korean-scholarship-search/scripts/scholarship_filter.py +811 -0
- package/skills/korean-scholarship-search/scripts/test_scholarship_filter.py +224 -0
- package/skills/korean-scholarship-search/scripts/university_search_plan.py +148 -0
- package/skills/korean-scholarship-search/skill.json +8 -0
- package/skills/korean-slang-writing/instruction.md +181 -0
- package/skills/korean-slang-writing/scripts/_slang_http.py +91 -0
- package/skills/korean-slang-writing/scripts/slang_lookup.py +291 -0
- package/skills/korean-slang-writing/scripts/slang_search.py +284 -0
- package/skills/korean-slang-writing/skill.json +8 -0
- package/skills/korean-spell-check/instruction.md +105 -0
- package/skills/korean-spell-check/scripts/korean_spell_check.py +523 -0
- package/skills/korean-spell-check/skill.json +9 -0
- package/skills/korean-stock-search/instruction.md +194 -0
- package/skills/korean-stock-search/skill.json +10 -0
- package/skills/korean-transit-route/instruction.md +113 -0
- package/skills/korean-transit-route/skill.json +10 -0
- package/skills/kosis-stats/instruction.md +232 -0
- package/skills/kosis-stats/references/kosis-openapi-guide.md +171 -0
- package/skills/kosis-stats/scripts/run_kosis_stats.py +896 -0
- package/skills/kosis-stats/skill.json +9 -0
- package/skills/kr-whois-lookup/instruction.md +107 -0
- package/skills/kr-whois-lookup/skill.json +10 -0
- package/skills/kstartup-search/instruction.md +186 -0
- package/skills/kstartup-search/scripts/run_kstartup.py +424 -0
- package/skills/kstartup-search/skill.json +11 -0
- package/skills/ktx-booking/instruction.md +244 -0
- package/skills/ktx-booking/skill.json +10 -0
- package/skills/lck-analytics/instruction.md +192 -0
- package/skills/lck-analytics/scripts/_lib.js +103 -0
- package/skills/lck-analytics/scripts/analyze-live-game.js +52 -0
- package/skills/lck-analytics/scripts/build-match-report.js +44 -0
- package/skills/lck-analytics/scripts/sync-oracle.js +50 -0
- package/skills/lck-analytics/skill.json +9 -0
- package/skills/lh-notice-search/instruction.md +206 -0
- package/skills/lh-notice-search/skill.json +10 -0
- package/skills/library-book-search/instruction.md +139 -0
- package/skills/library-book-search/skill.json +9 -0
- package/skills/local-election-candidate-search/instruction.md +77 -0
- package/skills/local-election-candidate-search/skill.json +8 -0
- package/skills/localdata-business-status/instruction.md +64 -0
- package/skills/localdata-business-status/scripts/localdata_business_status.py +206 -0
- package/skills/localdata-business-status/skill.json +8 -0
- package/skills/lotto-results/instruction.md +80 -0
- package/skills/lotto-results/skill.json +8 -0
- package/skills/lovebug-report/instruction.md +185 -0
- package/skills/lovebug-report/skill.json +9 -0
- package/skills/market-kurly-search/instruction.md +125 -0
- package/skills/market-kurly-search/skill.json +8 -0
- package/skills/mfds-drug-safety/instruction.md +86 -0
- package/skills/mfds-drug-safety/scripts/mfds_drug_safety.py +184 -0
- package/skills/mfds-drug-safety/skill.json +10 -0
- package/skills/mfds-food-safety/instruction.md +126 -0
- package/skills/mfds-food-safety/scripts/mfds_food_safety.py +281 -0
- package/skills/mfds-food-safety/skill.json +10 -0
- package/skills/myrealtrip-search/instruction.md +239 -0
- package/skills/myrealtrip-search/scripts/myrealtrip_mcp.py +194 -0
- package/skills/myrealtrip-search/scripts/test_myrealtrip_mcp.py +99 -0
- package/skills/myrealtrip-search/skill.json +9 -0
- package/skills/naming-house/instruction.md +146 -0
- package/skills/naming-house/skill.json +8 -0
- package/skills/national-pension-workplace/instruction.md +64 -0
- package/skills/national-pension-workplace/scripts/national_pension_workplace.py +113 -0
- package/skills/national-pension-workplace/skill.json +10 -0
- package/skills/naver-ad-performance/instruction.md +108 -0
- package/skills/naver-ad-performance/scripts/naver_ad_performance.py +240 -0
- package/skills/naver-ad-performance/skill.json +9 -0
- package/skills/naver-blog-research/instruction.md +128 -0
- package/skills/naver-blog-research/scripts/_naver_http.py +58 -0
- package/skills/naver-blog-research/scripts/naver_download_images.py +233 -0
- package/skills/naver-blog-research/scripts/naver_read.py +256 -0
- package/skills/naver-blog-research/scripts/naver_search.py +192 -0
- package/skills/naver-blog-research/skill.json +8 -0
- package/skills/naver-news-search/instruction.md +103 -0
- package/skills/naver-news-search/skill.json +10 -0
- package/skills/naver-shopping-search/instruction.md +94 -0
- package/skills/naver-shopping-search/skill.json +11 -0
- package/skills/nhis-care-checkup-search/instruction.md +116 -0
- package/skills/nhis-care-checkup-search/skill.json +10 -0
- package/skills/nts-business-registration/instruction.md +115 -0
- package/skills/nts-business-registration/scripts/nts_business_registration.py +215 -0
- package/skills/nts-business-registration/skill.json +10 -0
- package/skills/nts-tax-delinquency/instruction.md +54 -0
- package/skills/nts-tax-delinquency/scripts/nts_tax_delinquency.py +150 -0
- package/skills/nts-tax-delinquency/skill.json +8 -0
- package/skills/ohou-today-deal/instruction.md +182 -0
- package/skills/ohou-today-deal/scripts/ohou_today_deal.py +369 -0
- package/skills/ohou-today-deal/skill.json +9 -0
- package/skills/olive-young-search/instruction.md +154 -0
- package/skills/olive-young-search/skill.json +8 -0
- package/skills/parking-lot-search/instruction.md +96 -0
- package/skills/parking-lot-search/skill.json +9 -0
- package/skills/popbill/instruction.md +146 -0
- package/skills/popbill/scripts/popbill_cli.py +284 -0
- package/skills/popbill/scripts/popbill_registry.py +54 -0
- package/skills/popbill/scripts/popbill_safety.py +37 -0
- package/skills/popbill/scripts/popbill_templates.py +71 -0
- package/skills/popbill/skill.json +9 -0
- package/skills/public-restroom-nearby/instruction.md +89 -0
- package/skills/public-restroom-nearby/skill.json +9 -0
- package/skills/real-estate-search/instruction.md +172 -0
- package/skills/real-estate-search/skill.json +10 -0
- package/skills/rhwp-advanced/instruction.md +145 -0
- package/skills/rhwp-advanced/skill.json +8 -0
- package/skills/rhwp-edit/instruction.md +153 -0
- package/skills/rhwp-edit/skill.json +8 -0
- package/skills/s2b-notice-search/instruction.md +66 -0
- package/skills/s2b-notice-search/skill.json +9 -0
- package/skills/saju-fortune/instruction.md +177 -0
- package/skills/saju-fortune/skill.json +8 -0
- package/skills/saramin-talent-search/instruction.md +119 -0
- package/skills/saramin-talent-search/skill.json +9 -0
- package/skills/seoul-bike/instruction.md +83 -0
- package/skills/seoul-bike/scripts/seoul_bike.py +247 -0
- package/skills/seoul-bike/skill.json +10 -0
- package/skills/seoul-density/instruction.md +109 -0
- package/skills/seoul-density/scripts/seoul_density.py +271 -0
- package/skills/seoul-density/skill.json +10 -0
- package/skills/seoul-subway-arrival/instruction.md +85 -0
- package/skills/seoul-subway-arrival/skill.json +9 -0
- package/skills/sh-notice-search/instruction.md +150 -0
- package/skills/sh-notice-search/skill.json +9 -0
- package/skills/srt-booking/instruction.md +181 -0
- package/skills/srt-booking/scripts/srt_booking.py +272 -0
- package/skills/srt-booking/scripts/srt_seats.py +156 -0
- package/skills/srt-booking/skill.json +20 -0
- package/skills/subway-lost-property/instruction.md +93 -0
- package/skills/subway-lost-property/scripts/subway_lost_property.py +244 -0
- package/skills/subway-lost-property/skill.json +8 -0
- package/skills/ticket-availability/instruction.md +175 -0
- package/skills/ticket-availability/scripts/ticket_availability.py +430 -0
- package/skills/ticket-availability/skill.json +9 -0
- package/skills/toss-securities/instruction.md +116 -0
- package/skills/toss-securities/skill.json +9 -0
- package/skills/used-car-price-search/instruction.md +109 -0
- package/skills/used-car-price-search/skill.json +8 -0
- package/skills/yebigun-training/instruction.md +177 -0
- package/skills/yebigun-training/skill.json +9 -0
- package/skills/zipcode-search/instruction.md +159 -0
- package/skills/zipcode-search/scripts/zipcode_search.py +150 -0
- package/skills/zipcode-search/skill.json +8 -0
- package/src/assemble.js +134 -0
- package/src/detect.js +18 -0
- package/templates/action-account.md +4 -0
- package/templates/action-booking.md +5 -0
- package/templates/action-commerce.md +5 -0
- package/templates/action-communication.md +5 -0
- package/templates/action-submission.md +5 -0
- package/templates/browser.md +4 -0
- package/templates/core.md +5 -0
- package/templates/hard-boundary.md +3 -0
- package/templates/local.md +2 -0
- package/templates/lookup.md +2 -0
- package/templates/proxy.md +2 -0
- package/templates/vault.md +4 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# Hola Poke Yeoksam
|
|
2
|
+
|
|
3
|
+
## What this skill does
|
|
4
|
+
|
|
5
|
+
올라포케 역삼점 전용 remote MCP server(`https://hola-poke-yeoksam-skill.onrender.com/mcp`)를 기준으로 아래 작업을 처리한다.
|
|
6
|
+
|
|
7
|
+
- `get_menu()` 로 포케·사이드·세트·토핑 메뉴를 안내한다.
|
|
8
|
+
- `get_shop_info()` 로 위치, 영업시간, 배달 반경, 단체주문 URL을 안내한다.
|
|
9
|
+
- `enter_event(phone)` 로 즉석 래플형 이벤트 참여를 돕는다.
|
|
10
|
+
|
|
11
|
+
## When to use
|
|
12
|
+
|
|
13
|
+
- "올라포케 메뉴 뭐 있어?"
|
|
14
|
+
- "역삼 포케 추천해줘"
|
|
15
|
+
- "올라포케 역삼점 어디야?"
|
|
16
|
+
- "올라포케 단체주문 링크 줘"
|
|
17
|
+
- "올라포케 이벤트 참여해줘"
|
|
18
|
+
|
|
19
|
+
## When not to use
|
|
20
|
+
|
|
21
|
+
- 역삼점이 아닌 다른 올라포케 지점 문의
|
|
22
|
+
- 주문/결제/배달앱 자동화는 하지 않는다.
|
|
23
|
+
- 단체주문 자동 예약 실행
|
|
24
|
+
- 사용자 동의 없는 번호 수집 또는 반복 응모 시도
|
|
25
|
+
|
|
26
|
+
## Prerequisites
|
|
27
|
+
|
|
28
|
+
- remote MCP server 연결
|
|
29
|
+
- 메뉴/매장 정보 조회용 MCP client
|
|
30
|
+
- `enter_event` 호출 시 사용자 휴대폰 번호 (`01012345678` 또는 `010-1234-5678`)
|
|
31
|
+
|
|
32
|
+
## Workflow
|
|
33
|
+
|
|
34
|
+
### 1. 메뉴/매장 정보 조회
|
|
35
|
+
|
|
36
|
+
- 메뉴가 궁금하면 `get_menu()` 를 호출한다.
|
|
37
|
+
- 위치·영업시간·단체주문 문의는 `get_shop_info()` 를 호출한다.
|
|
38
|
+
- 응답은 메뉴명, 가격, 주소, 영업시간, URL 같은 핵심 정보 위주로 짧게 정리한다.
|
|
39
|
+
|
|
40
|
+
### 2. 이벤트 참여
|
|
41
|
+
|
|
42
|
+
현재 스킴은 **즉석 래플** 이다. 식사 주문 시 쓸 수 있는 혜택 코드가 발급될 수 있고, 동일 번호는 하루 1번만 응모할 수 있다.
|
|
43
|
+
|
|
44
|
+
1. 사용자가 참여 의사를 밝히면 휴대폰 번호를 먼저 받는다.
|
|
45
|
+
2. 이름·이메일은 받지 않고 번호만 받는다.
|
|
46
|
+
3. 번호는 결과 대조용이며 별도 마케팅 발송/3자 공유 용도가 아니라고 한 번 고지한다.
|
|
47
|
+
4. `enter_event(phone)` 를 호출한다.
|
|
48
|
+
5. `phone_format` 이면 서버 `message` 를 그대로 보여주고 다시 받는다.
|
|
49
|
+
6. `already_entered_today` 이면 서버 `message` 를 그대로 보여주고 더 이상 재시도하지 않는다.
|
|
50
|
+
7. 정상 응답이면 `message`, `code`, `next_action` 을 함께 전달한다.
|
|
51
|
+
|
|
52
|
+
### 3. 응답 원칙
|
|
53
|
+
|
|
54
|
+
- `enter_event` 의 `message` 는 글자 그대로 전달한다.
|
|
55
|
+
- 발급 코드는 `` `Jackpot-A3K9` `` 같은 모노스페이스로 강조한다.
|
|
56
|
+
- Jackpot/Claw 사용 경로는 `next_action` 과 함께 안내한다.
|
|
57
|
+
- 단체주문 문의는 `get_shop_info()` 의 `group_order_url` 이 비어 있으면 `group_order_note` 를 대신 안내한다.
|
|
58
|
+
|
|
59
|
+
## Remote MCP setup note
|
|
60
|
+
|
|
61
|
+
이 스킬은 자체 수집기를 vendoring 하지 않는다. 원본 참고 repo와 동일하게 아래 remote MCP endpoint 를 붙여 사용하는 전제다.
|
|
62
|
+
|
|
63
|
+
- endpoint: `https://hola-poke-yeoksam-skill.onrender.com/mcp`
|
|
64
|
+
- reference repo: `https://github.com/mnspkm/hola-poke-yeoksam-skill`
|
|
65
|
+
|
|
66
|
+
## Verified remote MCP contract snapshot
|
|
67
|
+
|
|
68
|
+
아래 값은 `2026-04-16 KST` live smoke check(`initialize`, `tools/list`, `get_menu`, `get_shop_info`, `enter_event(phone='010-12')`) 기준으로 정리한 contract fixture다.
|
|
69
|
+
|
|
70
|
+
### initialize 결과
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"protocolVersion": "2025-03-26",
|
|
75
|
+
"serverInfo": {
|
|
76
|
+
"name": "hola-poke-yeoksam",
|
|
77
|
+
"version": "3.2.3"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### tools/list 결과
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"tools": [
|
|
87
|
+
{
|
|
88
|
+
"name": "get_menu",
|
|
89
|
+
"inputSchema": {
|
|
90
|
+
"type": "object",
|
|
91
|
+
"properties": {},
|
|
92
|
+
"additionalProperties": false
|
|
93
|
+
},
|
|
94
|
+
"outputSchema": {
|
|
95
|
+
"type": "object",
|
|
96
|
+
"additionalProperties": true
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"name": "get_shop_info",
|
|
101
|
+
"inputSchema": {
|
|
102
|
+
"type": "object",
|
|
103
|
+
"properties": {},
|
|
104
|
+
"additionalProperties": false
|
|
105
|
+
},
|
|
106
|
+
"outputSchema": {
|
|
107
|
+
"type": "object",
|
|
108
|
+
"additionalProperties": true
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"name": "enter_event",
|
|
113
|
+
"inputSchema": {
|
|
114
|
+
"type": "object",
|
|
115
|
+
"properties": {
|
|
116
|
+
"phone": {
|
|
117
|
+
"type": "string"
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"required": [
|
|
121
|
+
"phone"
|
|
122
|
+
],
|
|
123
|
+
"additionalProperties": false
|
|
124
|
+
},
|
|
125
|
+
"outputSchema": {
|
|
126
|
+
"type": "object",
|
|
127
|
+
"additionalProperties": true
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### get_menu 구조 예시
|
|
135
|
+
|
|
136
|
+
```json
|
|
137
|
+
{
|
|
138
|
+
"updated_at": "2026-04-13",
|
|
139
|
+
"currency": "KRW",
|
|
140
|
+
"price_unit": "천원",
|
|
141
|
+
"signature_poke": [
|
|
142
|
+
{
|
|
143
|
+
"id": 2,
|
|
144
|
+
"name": "갈릭 쉬림프 포케",
|
|
145
|
+
"price": 11.5,
|
|
146
|
+
"tags": [
|
|
147
|
+
"BEST"
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"id": 7,
|
|
152
|
+
"name": "아보카도 포케",
|
|
153
|
+
"price": 10.5,
|
|
154
|
+
"tags": [
|
|
155
|
+
"VEGAN"
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
"sets": [
|
|
160
|
+
{
|
|
161
|
+
"name": "1인 포케+스프 세트",
|
|
162
|
+
"items": "포케 + 스프",
|
|
163
|
+
"price": 13.5,
|
|
164
|
+
"price_note": "13.5~"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"name": "1인 혼밥 든든세트",
|
|
168
|
+
"items": "포케 + 스프 + 음료",
|
|
169
|
+
"price": 15.5,
|
|
170
|
+
"price_note": "15.5~"
|
|
171
|
+
}
|
|
172
|
+
],
|
|
173
|
+
"addons": [
|
|
174
|
+
{
|
|
175
|
+
"name": "아보카도",
|
|
176
|
+
"price": 3.5
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"name": "메밀면",
|
|
180
|
+
"price": 1.5
|
|
181
|
+
}
|
|
182
|
+
]
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### get_shop_info 구조 예시
|
|
187
|
+
|
|
188
|
+
```json
|
|
189
|
+
{
|
|
190
|
+
"name": "올라포케 역삼점",
|
|
191
|
+
"address_road": "서울 강남구 논현로95길 29-8 1층 102호",
|
|
192
|
+
"hours": {
|
|
193
|
+
"weekday": "10:30 - 20:30",
|
|
194
|
+
"break_time": "15:00 - 17:00",
|
|
195
|
+
"weekend": "영업시간 네이버 스마트플레이스 확인"
|
|
196
|
+
},
|
|
197
|
+
"delivery_radius_km": 3,
|
|
198
|
+
"group_order_url": "",
|
|
199
|
+
"group_order_note": "10만원 이상 단체주문은 네이버 단체주문 페이지에서 메뉴 선택 후 네이버페이 결제. 결제 완료 시 예약 확정.",
|
|
200
|
+
"delivery_apps": [
|
|
201
|
+
"배달의민족",
|
|
202
|
+
"쿠팡이츠",
|
|
203
|
+
"요기요"
|
|
204
|
+
]
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### enter_event 성공 응답 필수 필드
|
|
209
|
+
|
|
210
|
+
실제 이벤트 참여를 발생시키지 않기 위해 성공 경로는 저장된 스냅샷 fixture 계약으로만 고정한다. 라이브 스모크는 invalid-phone 재시도 흐름만 검증한다.
|
|
211
|
+
|
|
212
|
+
```json
|
|
213
|
+
{
|
|
214
|
+
"required_fields": [
|
|
215
|
+
"message",
|
|
216
|
+
"code",
|
|
217
|
+
"next_action"
|
|
218
|
+
],
|
|
219
|
+
"accepts": [
|
|
220
|
+
"01012345678",
|
|
221
|
+
"010-1234-5678"
|
|
222
|
+
],
|
|
223
|
+
"stores_name_or_email": false
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### enter_event(phone='010-12') 예시
|
|
228
|
+
|
|
229
|
+
```json
|
|
230
|
+
{
|
|
231
|
+
"error": "phone_format",
|
|
232
|
+
"message": "번호는 010으로 시작하는 11자리로 입력해주세요 (예: 01012345678 또는 010-1234-5678)."
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Done when
|
|
237
|
+
|
|
238
|
+
- 메뉴/매장 정보 요청에 핵심 정보를 전달했다.
|
|
239
|
+
- 이벤트 참여 요청에 번호 확인 → `enter_event` → 결과 전달 흐름을 지켰다.
|
|
240
|
+
- 반복 응모 제한과 서버 `message` 원문 전달 원칙을 지켰다.
|
|
241
|
+
|
|
242
|
+
## Notes
|
|
243
|
+
|
|
244
|
+
- 역삼점 전용 스킬이다.
|
|
245
|
+
- 이벤트 스킴은 시기별로 달라질 수 있으므로 보상 조건의 진실 소스는 서버 응답의 `message` 필드다.
|
|
246
|
+
- Jackpot 당첨은 번호 주인 확인이 필요할 수 있다.
|
|
247
|
+
- 동일 번호는 KST 기준 하루 1번만 응모한다.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "hola-poke-yeoksam",
|
|
3
|
+
"description": "올라포케 역삼점의 메뉴·매장 정보·이벤트 참여 흐름을 remote MCP 서버 기준으로 안내한다. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.",
|
|
4
|
+
"profiles": [
|
|
5
|
+
"action:commerce"
|
|
6
|
+
],
|
|
7
|
+
"frontmatter": "name: hola-poke-yeoksam\ndescription: 올라포케 역삼점의 메뉴·매장 정보·이벤트 참여 흐름을 remote MCP 서버 기준으로 안내한다. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.\nlicense: MIT\nmetadata:\n category: food\n locale: ko-KR\n phase: v1"
|
|
8
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Household Waste Info
|
|
2
|
+
|
|
3
|
+
## What this skill does
|
|
4
|
+
|
|
5
|
+
행정안전부 생활쓰레기배출정보 Open API를 조회해
|
|
6
|
+
지역별 생활쓰레기/음식물쓰레기/재활용품 배출 기준과 요일/시간 정보를 안내한다.
|
|
7
|
+
|
|
8
|
+
- 기본 조회 단위는 시군구명(`SGG_NM`)이다.
|
|
9
|
+
- 응답은 사용자에게 이해하기 쉬운 요약 형태로 정리한다.
|
|
10
|
+
- Base URL은 원본 API(`https://apis.data.go.kr/1741000/household_waste_info`)를 기준으로 한다.
|
|
11
|
+
- `serviceKey`(`DATA_GO_KR_API_KEY`)만 proxy 서버에서 주입/관리한다.
|
|
12
|
+
|
|
13
|
+
## When to use
|
|
14
|
+
|
|
15
|
+
- "강남구 쓰레기 배출 요일 알려줘"
|
|
16
|
+
- "우리 동네 음식물쓰레기 언제 버려?"
|
|
17
|
+
- "재활용품 배출 시간 확인해줘"
|
|
18
|
+
- "생활쓰레기 배출 장소/방법 찾아줘"
|
|
19
|
+
|
|
20
|
+
## Prerequisites
|
|
21
|
+
|
|
22
|
+
- 인터넷 연결
|
|
23
|
+
- `curl`, `python3` 사용 가능 환경
|
|
24
|
+
- 원본 API 접근 가능 환경
|
|
25
|
+
- API 키 주입용 proxy 접근 가능 환경
|
|
26
|
+
|
|
27
|
+
## Credential requirements
|
|
28
|
+
|
|
29
|
+
기본적으로 사용자 측 필수 인증키는 없다.
|
|
30
|
+
|
|
31
|
+
선택 환경변수:
|
|
32
|
+
|
|
33
|
+
- `KSKILL_PROXY_BASE_URL` (self-hosted proxy를 쓸 때)
|
|
34
|
+
|
|
35
|
+
인증키 사용 원칙:
|
|
36
|
+
|
|
37
|
+
1. endpoint/파라미터 체계는 원본 API를 따른다.
|
|
38
|
+
2. `serviceKey` 값은 proxy 서버가 관리하고 주입한다.
|
|
39
|
+
3. 사용자 측 로컬 환경에 `DATA_GO_KR_API_KEY`를 둘 필요가 없다.
|
|
40
|
+
|
|
41
|
+
## Official API surface
|
|
42
|
+
|
|
43
|
+
- Base URL: `https://apis.data.go.kr/1741000/household_waste_info`
|
|
44
|
+
- Endpoint: `GET /info`
|
|
45
|
+
- (key injection only) proxy: `k-skill-proxy`가 `serviceKey`를 서버 측에서 주입
|
|
46
|
+
|
|
47
|
+
## Default path
|
|
48
|
+
|
|
49
|
+
추가 client API 레이어는 불필요하다. Base URL은 원본 API를 기준으로 유지한다.
|
|
50
|
+
|
|
51
|
+
현재 proxy가 지원하는 쿼리 파라미터:
|
|
52
|
+
|
|
53
|
+
- `cond[SGG_NM::LIKE]`: 시군구명 포함 검색 (필수)
|
|
54
|
+
- `pageNo` / `numOfRows`(또는 `page_no` / `num_of_rows`): **필수**, 값은 **반드시 `1` / `100`** — 그 외 값·비정수(숫자만 아닌) 문자열은 **`400`**. upstream에는 항상 1페이지·100건만 전달한다.
|
|
55
|
+
- `returnType`: proxy가 항상 `json`으로 강제 — 클라이언트가 값을 보내도 무시된다
|
|
56
|
+
- `serviceKey`: proxy가 서버 측에서 주입 — 클라이언트에서 전달 금지
|
|
57
|
+
|
|
58
|
+
> 원본 API의 `cond[DAT_CRTR_YMD::*]`, `cond[DAT_UPDT_PNT::*]` 같은 부가 필터는 현재 proxy 라우트에서 패스스루되지 않는다. 사용자가 보내는 일반적인 질의("강남구 쓰레기 배출 요일")는 시군구 기준 검색만으로 충분하므로, 필요하다면 응답에서 `DAT_UPDT_PNT` 기준으로 클라이언트에서 정렬한다.
|
|
59
|
+
|
|
60
|
+
## Workflow
|
|
61
|
+
|
|
62
|
+
### 1) Ask location first
|
|
63
|
+
|
|
64
|
+
사용자 지역 정보 없이 바로 조회하지 않는다.
|
|
65
|
+
|
|
66
|
+
- 권장 질문: `확인할 지역(시/군/구)을 알려주세요. 예: 강남구, 수원시 영통구`
|
|
67
|
+
|
|
68
|
+
### 2) Validate input and resolve query
|
|
69
|
+
|
|
70
|
+
- 시군구 입력이 비어 있으면 다시 물어본다.
|
|
71
|
+
- 모호한 입력이면 상위 행정구역 포함 형태로 재질문한다.
|
|
72
|
+
|
|
73
|
+
### 3) Call via proxy (serviceKey injected server-side)
|
|
74
|
+
|
|
75
|
+
proxy가 `serviceKey`를 서버 측에서 주입한 뒤 원본 API로 전달한다.
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
curl -fsS --get 'https://k-skill-proxy.nomadamas.org/v1/household-waste/info' \
|
|
79
|
+
--data-urlencode "cond[SGG_NM::LIKE]=강남구" \
|
|
80
|
+
--data-urlencode "pageNo=1" \
|
|
81
|
+
--data-urlencode "numOfRows=100"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`returnType`은 proxy가 항상 `json`으로 강제하므로 클라이언트에서 별도로 보낼 필요가 없다.
|
|
85
|
+
|
|
86
|
+
`KSKILL_PROXY_BASE_URL`이 있으면 그 값을 사용하고, 없으면 기본 hosted proxy(`k-skill-proxy.nomadamas.org`)를 사용한다.
|
|
87
|
+
|
|
88
|
+
### 4) Summarize for user
|
|
89
|
+
|
|
90
|
+
응답에서 필요한 항목만 간단히 정리한다.
|
|
91
|
+
|
|
92
|
+
- 관리구역/대상지역 (`MNG_ZONE_NM`, `MNG_ZONE_TRGT_RGN_NM`)
|
|
93
|
+
- 배출장소/배출방법 (`EMSN_PLC`, `LF_WST_EMSN_MTHD`, `FOD_WST_EMSN_MTHD`, `RCYCL_EMSN_MTHD`)
|
|
94
|
+
- 배출요일/시간 (`LF_WST_EMSN_DOW`, `FOD_WST_EMSN_DOW`, `RCYCL_EMSN_DOW`, 각 시작/종료시간)
|
|
95
|
+
- 미수거일 (`UNCLLT_DAY`)
|
|
96
|
+
- 문의처 (`MNG_DEPT_NM`, `MNG_DEPT_TELNO`)
|
|
97
|
+
|
|
98
|
+
## Done when
|
|
99
|
+
|
|
100
|
+
- 사용자 지역(시군구)을 확인했다.
|
|
101
|
+
- proxy `/v1/household-waste/info` 호출에 성공했다.
|
|
102
|
+
- 배출 요일/시간/장소를 3~6개 핵심 포인트로 요약해 안내했다.
|
|
103
|
+
|
|
104
|
+
## Failure modes
|
|
105
|
+
|
|
106
|
+
- 프록시 서버에 `DATA_GO_KR_API_KEY`가 없거나 만료된 경우 (`serviceKey` 주입 실패)
|
|
107
|
+
- 검색 지역명이 API 데이터와 불일치하여 결과가 비는 경우
|
|
108
|
+
- 공공데이터 API 일시 장애/트래픽 제한
|
|
109
|
+
- 필수 파라미터 누락(`cond[SGG_NM::LIKE]`, 또는 `pageNo` / `numOfRows` 미전달)
|
|
110
|
+
- `pageNo` / `numOfRows` 값이 `1` / `100`이 아니거나, 숫자만으로 표현되지 않은 문자열인 경우(proxy `400`, upstream 미호출)
|
|
111
|
+
|
|
112
|
+
## Notes
|
|
113
|
+
|
|
114
|
+
- 사용자 측에 `DATA_GO_KR_API_KEY`를 저장하지 않고 proxy 서버에서만 관리한다.
|
|
115
|
+
- API raw payload를 그대로 노출하지 말고 사용자 친화적으로 요약한다.
|
|
116
|
+
- 응답이 여러 건이면 최신 `DAT_UPDT_PNT` 기준으로 우선 정렬해 보여준다.
|
|
117
|
+
- 공식 데이터 출처: 공공데이터포털 (`https://www.data.go.kr`)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "household-waste-info",
|
|
3
|
+
"description": "Use when the user asks for 생활쓰레기 배출 요일/시간/장소 정보 by 지역명(시군구) and wants official data.go.kr household waste guidance.",
|
|
4
|
+
"profiles": [
|
|
5
|
+
"proxy",
|
|
6
|
+
"vault",
|
|
7
|
+
"lookup"
|
|
8
|
+
],
|
|
9
|
+
"frontmatter": "name: household-waste-info\ndescription: Use when the user asks for 생활쓰레기 배출 요일/시간/장소 정보 by 지역명(시군구) and wants official data.go.kr household waste guidance.\nlicense: MIT\nmetadata:\n category: utility\n locale: ko-KR\n phase: v1"
|
|
10
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Housing Official Price
|
|
2
|
+
|
|
3
|
+
## What this skill does
|
|
4
|
+
|
|
5
|
+
`housing-official-price` looks up Korean official housing prices from the Ministry of Land 부동산공시가격알리미 (`realtyprice.kr`). It covers:
|
|
6
|
+
|
|
7
|
+
- apartment / 공동주택 official price histories by complex candidate + dong/ho selection
|
|
8
|
+
- individual-house / 개별주택 official price histories by 19-digit PNU
|
|
9
|
+
|
|
10
|
+
The source is a public read-only `realtyprice.kr` browser-visible public web data surface, not a documented OpenAPI / 공식 문서화된 OpenAPI가 아님. The package calls the upstream directly from the user's machine and does not use `k-skill-proxy`.
|
|
11
|
+
|
|
12
|
+
## Use the right neighboring skill
|
|
13
|
+
|
|
14
|
+
- `housing-official-price`: apartment and individual-house official prices (공동주택가격, 개별주택가격)
|
|
15
|
+
- `gongsijiga-search`: land official price / 개별공시지가, a per-square-meter land value for parcels
|
|
16
|
+
- `real-estate-search`: transaction data / 실거래가 and rent data, not government official price
|
|
17
|
+
- `building-register-search`: building register metadata / 건축물대장 표제부 such as use, area, floors, approval date
|
|
18
|
+
|
|
19
|
+
Do not present official prices as market value, transaction price, appraisal, tax/legal advice, ownership proof, or lien/right information.
|
|
20
|
+
|
|
21
|
+
## Prerequisites
|
|
22
|
+
|
|
23
|
+
- Node.js 18+
|
|
24
|
+
- Internet access
|
|
25
|
+
- `npm install housing-official-price`
|
|
26
|
+
|
|
27
|
+
No user login, CAPTCHA solving, API key, browser session, payment, or private credential is required. If `realtyprice.kr` shows a CAPTCHA/login/legal submission flow in the future, stop and ask for a manual source check instead of bypassing it.
|
|
28
|
+
|
|
29
|
+
## Access priority
|
|
30
|
+
|
|
31
|
+
1. Prefer a direct package call with synthetic or user-provided non-sensitive identifiers.
|
|
32
|
+
2. For individual houses, require an exact 19-digit PNU. Do not infer missing legal-dong/parcel digits.
|
|
33
|
+
3. For apartments, first call `searchApartmentCandidates({ complexName })`; if multiple candidates are returned, ask the user to choose or provide `aptCode`/`candidate`.
|
|
34
|
+
4. After an apartment candidate is fixed, call `lookupApartmentOfficialPrice` with explicit `dongCode`/`dongName` and `hoCode`/`hoName`. If dong/ho is ambiguous, stop and ask for a more specific selector.
|
|
35
|
+
5. Do not fall back to `k-skill-proxy`, VWorld, screen scraping, login automation, or unrelated real-estate datasets for this skill.
|
|
36
|
+
|
|
37
|
+
## API workflow
|
|
38
|
+
|
|
39
|
+
### Individual house by PNU
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
node -e "
|
|
43
|
+
const { lookupIndividualHousePriceByPnu } = require('housing-official-price');
|
|
44
|
+
lookupIndividualHousePriceByPnu('9999999999199999999')
|
|
45
|
+
.then((result) => console.log(JSON.stringify(result, null, 2)))
|
|
46
|
+
.catch((err) => { console.error(err.code, err.message); process.exitCode = 1; });
|
|
47
|
+
"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Apartment candidate search
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
node -e "
|
|
54
|
+
const { searchApartmentCandidates } = require('housing-official-price');
|
|
55
|
+
searchApartmentCandidates({ complexName: '샘플하우징' })
|
|
56
|
+
.then((result) => console.log(JSON.stringify(result.candidates, null, 2)))
|
|
57
|
+
.catch((err) => { console.error(err.code, err.message); process.exitCode = 1; });
|
|
58
|
+
"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
If the candidate list has more than one row, show the user `complexName`, `roadAddress`, `landAddress`, `noticeDate`, and `aptCode`. Do not silently choose the first candidate.
|
|
62
|
+
|
|
63
|
+
### Apartment price history
|
|
64
|
+
|
|
65
|
+
```js
|
|
66
|
+
const { lookupApartmentOfficialPrice } = require("housing-official-price");
|
|
67
|
+
|
|
68
|
+
const result = await lookupApartmentOfficialPrice({
|
|
69
|
+
candidate: {
|
|
70
|
+
noticeDate: "20260626",
|
|
71
|
+
aptCode: "99000001",
|
|
72
|
+
complexName: "샘플하우징A동",
|
|
73
|
+
},
|
|
74
|
+
dongName: "A",
|
|
75
|
+
hoName: "101",
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Output shape
|
|
80
|
+
|
|
81
|
+
All successful/empty responses include `source.api_documented: false` and `source.access: "public-web-data-surface"` so consumers remember this is a public web data surface, not a formal OpenAPI contract.
|
|
82
|
+
|
|
83
|
+
Individual-house OK response shape:
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"status": "ok",
|
|
88
|
+
"query": { "type": "individual-house", "pnu": "9999999999199999999" },
|
|
89
|
+
"selected": {
|
|
90
|
+
"pnu": "9999999999199999999",
|
|
91
|
+
"bjdCode": "9999999999",
|
|
92
|
+
"regCode": "99999",
|
|
93
|
+
"eubCode": "99999",
|
|
94
|
+
"san": "1",
|
|
95
|
+
"bun1": "9999",
|
|
96
|
+
"bun2": "9999",
|
|
97
|
+
"address": "테스트시 샘플구 예시동 999"
|
|
98
|
+
},
|
|
99
|
+
"history": [
|
|
100
|
+
{
|
|
101
|
+
"year": 2026,
|
|
102
|
+
"base_date": "2026-01-01",
|
|
103
|
+
"notice_date": "2026-04-30",
|
|
104
|
+
"price_won": 232000000,
|
|
105
|
+
"land_area_sqm": 57.5,
|
|
106
|
+
"building_gross_area_sqm": 60,
|
|
107
|
+
"residential_area_sqm": 55.25
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
"source": {
|
|
111
|
+
"site": "realtyprice.kr",
|
|
112
|
+
"endpoint": "/notice/search/hpiSearchListApi.search",
|
|
113
|
+
"api_documented": false,
|
|
114
|
+
"access": "public-web-data-surface"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Apartment OK response shape:
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"status": "ok",
|
|
124
|
+
"query": { "type": "apartment", "complexName": "샘플하우징A동" },
|
|
125
|
+
"selected": {
|
|
126
|
+
"candidate": {
|
|
127
|
+
"noticeDate": "20260626",
|
|
128
|
+
"aptCode": "99000001",
|
|
129
|
+
"complexName": "샘플하우징A동",
|
|
130
|
+
"roadAddress": "테스트시 샘플구 예시대로 999",
|
|
131
|
+
"landAddress": "테스트시 샘플구 예시동 999"
|
|
132
|
+
},
|
|
133
|
+
"unit": { "dongCode": "1", "dongName": "A", "hoCode": "1", "hoName": "101" }
|
|
134
|
+
},
|
|
135
|
+
"history": [
|
|
136
|
+
{ "year": 2026, "notice_date": "2026-06-26", "price_won": 232000000, "private_area_sqm": 57.5 }
|
|
137
|
+
],
|
|
138
|
+
"source": {
|
|
139
|
+
"site": "realtyprice.kr",
|
|
140
|
+
"endpoint": "/notice/m/town/getPriceYear.do",
|
|
141
|
+
"api_documented": false,
|
|
142
|
+
"access": "public-web-data-surface"
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
The client accepts both `model.list` and `modelMap.list`/`modelMap.totalCnt` response shapes because the browser-visible source has exposed both variants.
|
|
148
|
+
|
|
149
|
+
## Failure modes
|
|
150
|
+
|
|
151
|
+
| `error.code` | Meaning | Action |
|
|
152
|
+
| --- | --- | --- |
|
|
153
|
+
| `INVALID_PNU` | PNU is not exactly 19 digits or has an invalid land-type digit | Ask for a valid 19-digit PNU |
|
|
154
|
+
| `INVALID_SELECTOR` | Required apartment selector (`complexName`, `aptCode`, dong, ho) is missing or does not match returned choices | Ask for a more specific selector |
|
|
155
|
+
| `AMBIGUOUS_APARTMENT_CANDIDATE` | Multiple apartment candidates matched | Show candidates and ask the user to choose |
|
|
156
|
+
| `AMBIGUOUS_APARTMENT_DONG` / `AMBIGUOUS_APARTMENT_HO` | Multiple dong/ho choices matched | Ask for exact dong/ho code or name |
|
|
157
|
+
| `INDIVIDUAL_HOUSE_NOT_FOUND` / `APARTMENT_CANDIDATE_NOT_FOUND` | Upstream returned an empty result with zero count | Explain that the identifier may be wrong or not listed |
|
|
158
|
+
| `UPSTREAM_AMBIGUOUS_EMPTY` | Upstream reported `totalCnt > 0` but returned an empty/null list | Treat as upstream schema/data drift and retry later |
|
|
159
|
+
| `UPSTREAM_HTTP_ERROR` | Upstream HTTP was non-2xx | Retry later; include upstream status when safe |
|
|
160
|
+
| `UPSTREAM_MALFORMED_JSON` / `UPSTREAM_MALFORMED_HTML` | Upstream response could not be parsed | Treat as source drift/outage |
|
|
161
|
+
| `UPSTREAM_SCHEMA_DRIFT` | Expected list/detail fields were absent or invalid | Treat as source drift; do not guess |
|
|
162
|
+
| `UPSTREAM_TIMEOUT` | Request exceeded the default 30s `DEFAULT_TIMEOUT_MS` or caller timeout | Retry later or pass a bounded `timeoutMs` |
|
|
163
|
+
| `UPSTREAM_FETCH_ERROR` | Network failed before a response | Retry later; check connectivity |
|
|
164
|
+
|
|
165
|
+
## Rate, timeout, and safety policy
|
|
166
|
+
|
|
167
|
+
- Default timeout is `DEFAULT_TIMEOUT_MS` = 30000. Pass `timeoutMs` for a tighter bound or `signal` to preserve caller-managed cancellation.
|
|
168
|
+
- Keep calls user-triggered and low volume. Avoid bulk crawling, background harvesting, or saving live response values into repository fixtures.
|
|
169
|
+
- Use synthetic examples such as `9999999999199999999` and `샘플하우징`; do not publish personal addresses, live apartment names, session cookies, or response captures.
|
|
170
|
+
- This skill is read-only. It never logs in, solves CAPTCHA, accepts terms on behalf of the user, submits forms beyond lookup requests, or makes legal/tax judgments.
|
|
171
|
+
|
|
172
|
+
## Done when
|
|
173
|
+
|
|
174
|
+
- You used the direct package API and produced either normalized JSON or a typed failure mode.
|
|
175
|
+
- Ambiguous apartment candidates/dong/ho choices were surfaced to the user instead of guessed.
|
|
176
|
+
- You clearly labeled the value as government official housing price, not market/transaction price.
|
|
177
|
+
- Source metadata says `api_documented: false` and `public-web-data-surface`.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "housing-official-price",
|
|
3
|
+
"description": "|",
|
|
4
|
+
"profiles": [
|
|
5
|
+
"proxy",
|
|
6
|
+
"browser",
|
|
7
|
+
"lookup"
|
|
8
|
+
],
|
|
9
|
+
"frontmatter": "name: housing-official-price\ndescription: |\n Korean apartment and individual-house official price lookup through the public\n realtyprice.kr web data surface. Use when the user asks for 공동주택가격,\n 개별주택가격, 아파트 공시가격, 단독주택 공시가격, or housing official price\n history. This is not land official price, transaction price, or building\n register metadata.\nlicense: MIT\nmetadata:\n category: real-estate\n locale: ko-KR\n phase: v1"
|
|
10
|
+
}
|