Here Now ER MCP
by blottosicei
README.md
# 지금 여기 응급실 (Here Now ER MCP)
> "새벽 2시에 아이가 열이 나요. 지금 갈 수 있는 병원이랑, 집에 있는 이 해열제 먹여도 되는지 알려주세요."
한밤중·주말·공휴일의 의료 공백을 카카오톡 채팅 한 번으로 해결하는 MCP 서버.
카카오 「에이전틱 플레이어 10」 공모전 출품작입니다.
- 기획 문서: [PRD.md](./PRD.md)
- PlayMCP 등록 입력값: [PLAYMCP_REGISTRATION.md](./PLAYMCP_REGISTRATION.md)
## 제공 도구 (5종)
| Tool | 설명 | 데이터 출처 |
|---|---|---|
| `find_emergency_rooms` | 실시간 응급실 가용 병상 조회 | 국립중앙의료원 E-Gen |
| `find_open_hospitals` | 야간·휴일 진료 병원 검색 (지금 진료 중 필터) | 국립중앙의료원 E-Gen |
| `find_open_pharmacies` | 지금 영업 중인 약국 검색 (늦게 닫는 순) | 국립중앙의료원 E-Gen |
| `get_drug_info` | 의약품 효능·용법·주의사항·상호작용·부작용 | 식약처 e약은요 |
| `identify_pill` | 각인·색상·모양으로 알약 식별 | 식약처 낱알식별정보 |
## 시작하기
### 1. 공공데이터포털 인증키 발급
[data.go.kr](https://www.data.go.kr)에서 회원가입 후 아래 5개 API를 **활용신청**하세요 (자동승인, 수분~수시간).
1. 국립중앙의료원_전국 응급의료기관 정보 조회 서비스
2. 국립중앙의료원_전국 병·의원 찾기 서비스
3. 국립중앙의료원_전국 약국 정보 조회 서비스
4. 식품의약품안전처_의약품개요정보(e약은요) 조회 서비스
5. 식품의약품안전처_의약품 낱알식별 정보 조회 서비스
> 하나의 계정이면 **동일한 인증키**로 5개 모두 사용 가능합니다. `.env`에는 **Decoding 키**를 넣으세요.
### 2. 실행
```bash
cp .env.example .env # DATA_GO_KR_SERVICE_KEY 설정
npm install
npm run build
npm start # http://localhost:3000/mcp
```
개발 모드: `npm run dev`
### 3. 동작 확인
```bash
curl http://localhost:3000/healthz
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_drug_info","arguments":{"drugName":"타이레놀"}}}'
```
## 아키텍처
- **Node.js 20+ / TypeScript / Express**
- **MCP Streamable HTTP (stateless)** — 요청마다 독립 인스턴스로 세션 충돌 없이 수평 확장
- **인메모리 TTL 캐시** — 응급실 실시간 1분, 병원/약국 10분, 의약품 24시간 (일 1,000건 호출 한도 절감)
- 모든 "지금" 판정은 **Asia/Seoul(KST)** 기준, 자정 넘김 영업시간(예: 09:00~익일 02:00) 처리
## 배포 (카카오 클라우드)
1. 카카오 클라우드 인스턴스/컨테이너에 배포 (`PORT`, `DATA_GO_KR_SERVICE_KEY` 환경변수 설정)
2. HTTPS 리버스 프록시 뒤에 `POST /mcp` 노출
3. [PlayMCP](https://playmcp.kakao.com)에서 서버 등록 → [PLAYMCP_REGISTRATION.md](./PLAYMCP_REGISTRATION.md)의 값 입력
4. 심사 전 **전체 공개**로 설정
## 면책
본 서비스는 의료 행위가 아닌 **공공데이터 안내 서비스**입니다. 병상·영업시간 정보는 기관 입력 시점 기준으로 실제와 다를 수 있으므로 방문 전 전화 확인이 필요하며, 위급 상황에서는 119에 우선 신고하세요.
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues