name: eats-radar description: >- Looks up top-ranked restaurants in a Korean district and enriches them with Naver Map / Kakao Map review data. Use this skill when the user asks for restaurant recommendations, local food rankings, or dining reviews for a specific area in South Korea. compatibility: Node.js 18+, Playwright Chromium, network access required. metadata: author: eats-radar version: "0.1.0"
eats-radar
Retrieves top-ranked restaurants from the TMAP API for a given Korean district, then crawls Naver Map and Kakao Map for review data and returns the combined results.
Prerequisites
1. Install dependencies
bash scripts/setup.sh
2. Configure API keys
Create a .env file in the skill root directory:
TMAP_APP_KEY=<TMAP Open API app key>
PUBLIC_DATA_SERVICE_KEY=<Korea Public Data Portal service key>
- TMAP_APP_KEY: Issued at TMAP Open API
- PUBLIC_DATA_SERVICE_KEY: Issued at Korea Public Data Portal (법정동코드 API)
3. Verify environment
bash scripts/check-env.sh
Usage Flow
Follow these steps when a user asks for restaurant recommendations:
Step 1: Convert location to dong-level address
--address must be a Korean legal-district address in the format "시/도 + 구/군 + 동".
Users express locations in many ways. The agent must convert these into a dong-level address (동주소):
| User input | Converted address | How |
|---|---|---|
| "염창역 근처 맛집" (near Yeomchang station) | 서울특별시 영등포구 염창동 |
Station name → dong where the station is located |
| "의왕시 바라산로" (Barasanro, Uiwang) | 경기도 의왕시 학의동 |
Street name → dong the street belongs to |
| "의왕시 학의동" (Hakui-dong, Uiwang) | 경기도 의왕시 학의동 |
City + dong → prepend province |
| "강남 맛집" (Gangnam restaurants) | 서울특별시 강남구 역삼동 |
District only → infer a representative dong, or ask the user |
| "목동 맛집 추천해줘" (recommend Mokdong restaurants) | 서울특별시 양천구 목동 |
Dong only → prepend city and district |
| "해운대 맛집" (Haeundae restaurants) | 부산광역시 해운대구 우동 |
District only → infer a representative dong, or ask |
Conversion rules:
- If the dong name is clear, convert directly (e.g., "목동" → "서울특별시 양천구 목동").
- If only a district, station, or street name is given and the dong is ambiguous, either use a well-known representative dong or ask the user "Which dong (neighborhood) are you near?"
- Final format:
"OO시(도) OO구(군) OO동"— pass this string to--address.
Step 2: Determine query mode
Two query modes are available:
| Mode | Description | Flag | When to use |
|---|---|---|---|
| By category | Rankings by cuisine type | --category |
"Korean food", "Japanese restaurant", "any food" |
| By theme | Special theme rankings | --theme |
"trending spots", "high revisit rate", "local favorites" |
Agent decision guide:
- General requests like "recommend restaurants" or "what should I eat" → category mode with
--category all - Specific cuisine mentioned ("한식", "중식", "일식", etc.) → matching category
- Theme keywords ("핫플/trending", "재방문/revisit", "현지인/local", "여행자/traveler") → matching theme
- When in doubt, ask the user
Step 3: Collect options (if needed)
Category mode — choose a category (see references/PARAMETERS.md):
- Korean (kor), Chinese (chn), Japanese (jpn), Western (wes), Asian (asi), Other (etc), All (all)
- Default to
allif the user didn't specify a cuisine
Theme mode — choose a theme (see references/PARAMETERS.md):
seg-rate(demographic) requires additional--genderand--age-grpflags- All other themes need no extra options
Step 4: Run the script
node scripts/find-restaurants.mjs --env-file <path-to-env> --address "<dong address>" [options]
--env-file: Path to the.envfile containingTMAP_APP_KEYandPUBLIC_DATA_SERVICE_KEY. CheckTOOLS.mdfor available env file paths per user.
Execution takes approximately 30 seconds to 2 minutes (due to crawling). Let the user know it will take a moment before running.
Step 5: Present results
Format the JSON array into a readable table for the user:
| Rank | Name | Category | Naver Reviews | Kakao Rating | Kakao Reviews |
|---|---|---|---|---|---|
| 1 | OO식당 | Korean | 1,234 | 4.5 | 567 |
- Include Naver/Kakao URLs so the user can check the pages directly.
- Show "N/A" for items where crawling failed (null).
See references/OUTPUT-FORMAT.md for the full JSON output schema.
Script Examples
General restaurant lookup
"목동 맛집 추천해줘" (recommend Mokdong restaurants) → category all:
node scripts/find-restaurants.mjs --env-file /path/to/env --address "서울특별시 양천구 목동" --category all
Specific cuisine
"역삼동 근처 일식 맛집" (Japanese restaurants near Yeoksam-dong) → category jpn:
node scripts/find-restaurants.mjs --env-file /path/to/env --address "서울특별시 강남구 역삼동" --category jpn
Theme query
"염창역 근처 요즘 뜨는 맛집" (trending restaurants near Yeomchang station) → theme hot-rate:
node scripts/find-restaurants.mjs --env-file /path/to/env --address "서울특별시 영등포구 염창동" --theme hot-rate
Demographic query
"학의동 20대 여성 인기 맛집" (popular among women in their 20s, Hakui-dong) → theme seg-rate:
node scripts/find-restaurants.mjs --env-file /path/to/env --address "경기도 의왕시 학의동" --theme seg-rate --gender female --age-grp 20
Important Notes
- TMAP API monthly limit: 10 calls (free tier). Inform the user of this limit and avoid unnecessary repeated calls. Basic plan allows 100 calls/month at ₩220/call.
- Execution time: 30 seconds to 2 minutes due to Naver/Kakao crawling. Notify the user before running.
- Network required: Playwright Chromium launches a real browser for crawling, so network access is essential.
- Result count: Returns the full ranking list from TMAP (typically 10–20 restaurants), enriched with review data.
- Dong address required:
--addressmust include a dong-level legal district name. Passing a raw street name or station name will cause the district code lookup to fail.