원클릭으로
my-find-restaurant
네이버 로컬 검색 API로 식당을 찾고, 선택한 식당을 캘린더 일정에 반영한다. "식당 찾아줘", "맛집 추천", "근처 밥집", "find restaurant" 요청에 사용.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
네이버 로컬 검색 API로 식당을 찾고, 선택한 식당을 캘린더 일정에 반영한다. "식당 찾아줘", "맛집 추천", "근처 밥집", "find restaurant" 요청에 사용.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | my-find-restaurant |
| description | 네이버 로컬 검색 API로 식당을 찾고, 선택한 식당을 캘린더 일정에 반영한다. "식당 찾아줘", "맛집 추천", "근처 밥집", "find restaurant" 요청에 사용. |
| triggers | ["식당 찾아줘","맛집 추천","근처 밥집","find restaurant"] |
네이버 로컬 검색 API를 활용하여 식당을 검색하고, 선택한 식당을 Google Calendar 일정에 반영하는 스킬.
참고: route-planner의 NCP_CLIENT_ID(네이버 클라우드)와 다른 플랫폼(네이버 개발자센터). 별도 키 필요.
이 스킬이 트리거되면, 가장 먼저 환경변수가 설정되어 있는지 확인한다.
source ~/.zshrc && echo "NAVER_CLIENT_ID: ${NAVER_CLIENT_ID:-미설정}" && echo "NAVER_CLIENT_SECRET: $(if [ -n "$NAVER_CLIENT_SECRET" ]; then echo 설정됨; else echo 미설정; fi)"
하나라도 미설정이면 실행을 중단하고 안내한다:
환경변수가 설정되지 않았습니다. ~/.zshrc에 다음을 추가해주세요:
export NAVER_CLIENT_ID="네이버 개발자센터 Client ID"
export NAVER_CLIENT_SECRET="네이버 개발자센터 Client Secret"
발급: https://developers.naver.com → Application → 검색 API 선택
설정 후 터미널을 재시작하거나 source ~/.zshrc를 실행해주세요.
defaults:
home_address: "서울시 OO구 OO로 N"
home_coords: "127.0000000,37.0000000"
default_display: 5
sort: "comment" # 리뷰 많은 순
장소 별칭:
aliases:
집: "서울시 OO구 OO로 N"
집 근처: "양재동"
사용자 요청에서 3가지를 추출한다:
| 항목 | 예시 | 미지정 시 |
|---|---|---|
| 지역 | "매봉역", "홍천" | 집 주변 (양재동) |
| 카테고리 | "한식", "고기", "일식" | 미포함 |
| 조건 | "룸", "8인", "주차" | 미포함 |
지역 직접 지정 → 그대로 사용
↓ (미지정)
캘린더 일정 연계 요청 → 해당 일정의 location에서 추출
↓ (location 없음)
집 주소 기본값 → "양재동"으로 변환
캘린더 일정 연계 시:
gcal_list_events로 해당 날짜 일정 조회location 필드에서 지역명 추출조건이 많으면 결과가 0건일 수 있으므로, 최대 3회 검색한다:
1차: "{지역} {카테고리} {조건1} {조건2}" (전체)
2차: "{지역} {카테고리} {조건1}" (조건 축소)
3차: "{지역} {카테고리}" (최소)
각 단계에서 결과가 2건 이상이면 다음 단계로 넘어가지 않는다.
bash 코드블록으로 curl 호출. route-planner와 동일한 패턴:
source ~/.zshrc && curl -s "https://openapi.naver.com/v1/search/local.json?query=$(python3 -c 'import urllib.parse; print(urllib.parse.quote("{검색어}"))')&display=5&sort=comment" \
-H "X-Naver-Client-Id: $NAVER_CLIENT_ID" \
-H "X-Naver-Client-Secret: $NAVER_CLIENT_SECRET" | python3 -c "
import sys,json,re
d=json.load(sys.stdin)
if 'items' in d:
for i in d['items']:
name = re.sub('<[^>]+>','',i['title'])
print(f'{name}|{i[\"category\"]}|{i[\"roadAddress\"]}|{i[\"telephone\"]}|{i[\"mapx\"]}|{i[\"mapy\"]}')
else:
print('ERROR:' + json.dumps(d, ensure_ascii=False))
"
다단계 검색 결과를 합친 뒤 roadAddress 기준으로 중복 제거.
로컬 검색 결과의 각 식당에 대해 블로그 후기를 검색한다. 검색어: "{지역} {식당명} 맛집" 또는 "{지역} {카테고리} 혼밥 맛집"
source ~/.zshrc && curl -s "https://openapi.naver.com/v1/search/blog.json?query=$(python3 -c 'import urllib.parse; print(urllib.parse.quote("{검색어}"))')&display=3&sort=sim" \
-H "X-Naver-Client-Id: $NAVER_CLIENT_ID" \
-H "X-Naver-Client-Secret: $NAVER_CLIENT_SECRET" | python3 -c "
import sys,json,re
d=json.load(sys.stdin)
if 'items' in d:
print(f'BLOG_TOTAL:{d[\"total\"]}')
for i in d['items']:
title = re.sub('<[^>]+>','',i['title'])
print(f'{title}|{i[\"link\"]}|{i[\"postdate\"]}')
else:
print('BLOG_ERROR')
"
블로그 검색 활용 규칙:
total)가 많을수록 검증된 식당🍽️ {지역} {카테고리} 검색 결과 ({N}건)
| # | 식당 | 카테고리 | 주소 | 전화 | 지도 |
|---|------|---------|------|------|------|
| 1 | OOO | 한식>소고기구이 | 언주로 201 | 02-xxxx-xxxx | 🗺️ |
| 2 | OOO | 한식>돼지갈비 | 남부순환로 2726 | — | 🗺️ |
로컬 검색 결과 아래에 블로그 후기를 추가 표시한다:
📝 블로그 후기 ({total}건 중 상위 3건)
| # | 식당 | 블로그 한줄평 | 후기 |
|---|------|-------------|------|
| 1 | OOO | "혼밥으로 짱, 블루리본 선정" | 🔗 후기링크 |
| 2 | OOO | "개인화로, 저렴한 1인 고기" | 🔗 후기링크 |
번호를 말씀해 주시면 캘린더 일정에 반영합니다.
https://map.naver.com/search/{식당명} (네이버 지도 직접 연결)— 표시사용자가 번호 또는 식당명으로 선택하면:
사용자가 일정 명시 ("28일 가족점심에 넣어줘") → 해당 일정 검색
사용자가 미명시 → "어떤 일정에 연결할까요?" 질문
gcal_update_event(
calendarId: "primary",
eventId: "{대상 일정 ID}",
event: {
location: "{식당 도로명주소} {식당명}",
description: 기존 설명 + "\n🍽️ 식당: {식당명}\n📞 {전화번호}\n🗺️ https://map.naver.com/search/{식당명}"
}
)
✅ "{일정명}" 일정에 {식당명} 추가 완료!
📍 {주소}
📞 {전화번호}
🗺️ 네이버 지도 링크
결과만 보여주고 종료. 불필요한 일정 생성은 하지 않는다.
| 상황 | 대응 |
|---|---|
| API 키 미설정 | 발급 안내 후 중단 |
| 검색 결과 0건 | 키워드 변경 제안 |
| API 호출 실패 / 네트워크 오류 | 에러 메시지 표시, 재시도 제안 |
| API Rate Limit 초과 (429) | "일일 API 호출 한도(25,000건) 초과" 안내 |
| 캘린더 일정 못 찾음 | 일정명 다시 확인 요청 |
| 캘린더 업데이트 실패 | 에러 메시지 표시, 일정 ID/권한 확인 요청 |
"매봉역 8인 룸 한식" 과 같이 요청하면:
"홍천 교육 끝나고 저녁 먹을 곳" 과 같이 요청하면:
mcp__claude_ai_Google_Calendar__gcal_list_events(
calendarId="primary",
timeMin="{해당 날짜}T00:00:00",
timeMax="{해당 날짜}T23:59:59",
timeZone="Asia/Seoul"
)
"근처 한식 룸" 과 같이 지역 없이 요청하면:
User의 일일 컨텍스트 싱크. Slack(외부 워크스페이스), Gmail, Google Calendar에서 최근 정보를 수집하고, 마에스트로 데이터(my-maestro 결과 JSON + Webex)도 함께 통합해서 하나의 문서로 정리한다. "싱크", "sync", "정보 수집" 요청에 사용.
AI·SW마에스트로(서울/부산) 멘토 활동 통합 관리. MY 멘토링·보고서 현황, 회의실 예약내역, 빈 회의실 조회, Webex 메시지 수집을 담당. User 멘토 전용. "마에스트로", "MY 멘토링", "내 예약", "빈 회의실", "회의실 비어있", "보고서 현황", "마에스트로 공지" 요청에 사용.
딴지게시판 특정 작성자(EXAMPLE_USER_ID) 사용자의 미국·한국 증시 마감 요약 글을 자동 수집해 Slack
세션 종료 시 작업 정리, 문서 업데이트, 학습 기록을 하는 스킬. "/wrap", "세션 정리", "마무리" 요청에 사용.
Playwright로 외부 Slack 워크스페이스의 채널 메시지를 수집한다. 게스트 권한으로 API 접근이 불가능한 워크스페이스 대상. "슬랙 스크래핑", "외부 슬랙 싱크", "슬랙 수집" 요청에 사용.
YouTube URL을 받으면 자막을 추출하고, Web Search로 자동자막 오류를 보정한 뒤, 요약-인사이트-전체 번역을 제공하는 스킬. "유튜브 번역", "영상 정리", "YouTube 요약" 요청에 사용.