eodiseobwa-mcp
by cheoljae-ee
README.md
# 어디서봐 (eodiseobwa) — 약속 장소 추천 MCP
여러 사람의 출발지를 받아 **모두에게 공평하면서 놀거리·먹을거리가 많은 만남 장소**를 숫자로 추천하는 MCP 서버. 카카오톡 그룹 대화의 "우리 어디서 만나?"를 한 번에 해결합니다.
## 왜 이게 다른가
기존 중간지점 서비스는 "지리적 정중앙"만 찍어줍니다. 하지만 사람들은 **놀 곳에서** 만납니다. 어디서봐는 두 축을 함께 계산합니다:
- **공정성 점수** — 모두의 이동 거리가 비슷한가 (편차 penalize)
- **놀거리 점수** — 그 역 주변에 음식점·카페·문화시설이 실제로 몇 개 있는가
그리고 둘을 블렌딩해 "공평하면서도 놀 게 있는" 곳을 순위로 제시합니다.
## 도구 (Tools)
두 도구가 자연스러운 흐름을 이룹니다: **① 어디서 만날지 정하고 → ② 거기서 뭐 할지 코스를 받는다.**
### `recommend_meeting_place` — 어디서 만날지
- **입력**: `departures`(출발지 2곳 이상), `prefer`(all/food/culture), `topN`(1~5)
- **출력**: 후보역별 종합점수, 공정성, 놀거리 점수, 출발지별 거리, 주변 음식점/카페/문화시설 수 + 다음 단계 안내
### `plan_the_day` — 거기서 뭐 할지 (그날 코스)
- **입력**: `place`(장소/역), `prefer`(all/food/culture), `radius`(도보 반경 m)
- **출력**: 실제 밥집·카페·놀거리 목록(이름·도보 시간·주소·**카카오맵 링크**)로 구성한 그날 코스
- 카카오 로컬 API 연동(KAKAO_REST_KEY) 필요. 미연동 시 안내 메시지 반환
### `list_supported_stations`
- 지원하는 수도권 주요 역 목록
## 사용 예 (카카오톡 대화)
> "강남, 노원, 인천에서 셋이 만나는데 먹을 거 많은 데로"
> → 합정/영등포/망원 추천 (인천 쪽으로 공평하게 조정된 서쪽 만남점 + 상권 활성도 순)
> "판교랑 홍대랑 잠실이랑 부천, 문화생활 할 만한 곳"
> → 강남역 추천 (놀거리 100점)
## 카카오 로컬 API 연동 (실시간 놀거리 카운트)
`KAKAO_REST_KEY` 환경변수를 설정하면:
- 출발지를 **임의의 주소·상호·역명**으로 입력 가능 (카카오 키워드 검색 지오코딩)
- 각 후보역 주변 음식점/카페/문화시설/관광명소 **실시간 개수** 제공
미설정 시: 번들된 상권 활성도 지수로 폴백 (서버는 정상 동작).
카카오 REST 키 발급: https://developers.kakao.com → 앱 생성 → REST API 키
## 실행
```bash
npm install
KAKAO_REST_KEY=xxxx PORT=8080 npm start
# MCP 엔드포인트: POST http://localhost:8080/mcp (Streamable HTTP)
# 헬스체크: GET http://localhost:8080/health
```
## 기술
- MCP: `@modelcontextprotocol/sdk` (Streamable HTTP, stateless)
- 런타임: Node.js 22, Express
- 데이터: 수도권 주요 역 좌표(번들) + 카카오 로컬 API(선택)
## 알려진 한계 / 로드맵
- 현재 거리 계산은 직선거리(haversine) 프록시. v2에서 카카오모빌리티 대중교통 소요시간으로 정밀화 예정
- 지원 역은 수도권 주요 만남 후보 50곳(번들). 카카오 API 연동 시 임의 지점 입력 가능
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues