Naver Map MCP Server
README.md
# Naver Map MCP Server
네이버 지도 API를 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 도구로 제공하는 서버입니다. Claude Desktop, Claude Code, VS Code 등 MCP 클라이언트에서 네이버 지도 기능을 사용할 수 있습니다.
## 주요 기능
- **주소 → 좌표 변환** (Geocoding): 도로명/지번 주소를 경도, 위도 좌표로 변환
- **좌표 → 주소 변환** (Reverse Geocoding): 좌표를 법정동, 행정동, 도로명, 지번 주소로 변환
- **경로 탐색** (Directions): 출발지-목적지 간 거리, 소요시간, 통행료, 택시비, 유류비 계산
- **정적 지도 이미지 생성** (Static Map): 마커, 경로가 포함된 지도 이미지 생성
- **API 사용량 조회** (Usage): 월별 사용량, 비용, 무료 한도 대비 사용률 확인
## 보안 주의사항
> **주의:** 이 서버는 네이버 클라우드 API에 접근하며, 무료 한도 초과 시 요금이 부과될 수 있습니다.
- API 키를 코드나 공개 저장소에 노출하지 마세요
- 환경변수나 설정 파일을 통해 안전하게 관리하세요
- 무료 한도를 초과하면 사용량에 따라 요금이 부과됩니다
- `navermap_get_usage` 도구로 정기적으로 사용량을 확인하세요
## 설치
```bash
npm install -g @flor3z-github/navermap-mcp-server
```
또는 npx로 직접 실행:
```bash
npx -y @flor3z-github/navermap-mcp-server
```
## 환경변수 설정
### 필수 (Maps API)
[Naver Cloud Platform](https://www.ncloud.com/)에서 Application을 생성하고 API 키를 발급받으세요.
```bash
NAVER_CLIENT_ID=your_client_id
NAVER_CLIENT_SECRET=your_client_secret
```
### 선택 (Billing API - 사용량 조회)
사용량 조회 기능을 사용하려면 추가 키가 필요합니다:
```bash
NCLOUD_ACCESS_KEY=your_access_key
NCLOUD_SECRET_KEY=your_secret_key
```
> Billing API 키가 없어도 나머지 4개 도구는 정상 작동합니다.
## 클라이언트 설정
### Claude Desktop
`claude_desktop_config.json` 파일에 다음을 추가하세요:
**전체 기능 사용:**
```json
{
"mcpServers": {
"navermap": {
"command": "npx",
"args": ["-y", "@flor3z-github/navermap-mcp-server"],
"env": {
"NAVER_CLIENT_ID": "your_client_id",
"NAVER_CLIENT_SECRET": "your_client_secret",
"NCLOUD_ACCESS_KEY": "your_access_key",
"NCLOUD_SECRET_KEY": "your_secret_key"
}
}
}
}
```
**Maps API만 사용:**
```json
{
"mcpServers": {
"navermap": {
"command": "npx",
"args": ["-y", "@flor3z-github/navermap-mcp-server"],
"env": {
"NAVER_CLIENT_ID": "your_client_id",
"NAVER_CLIENT_SECRET": "your_client_secret"
}
}
}
}
```
### VS Code
`.vscode/mcp.json` 또는 사용자 설정의 `mcp.json`에 추가:
```json
{
"servers": {
"navermap": {
"command": "npx",
"args": ["-y", "@flor3z-github/navermap-mcp-server"],
"env": {
"NAVER_CLIENT_ID": "your_client_id",
"NAVER_CLIENT_SECRET": "your_client_secret"
}
}
}
}
```
### Claude Code
```bash
claude mcp add navermap \
--env NAVER_CLIENT_ID=your_client_id \
--env NAVER_CLIENT_SECRET=your_client_secret \
--env NCLOUD_ACCESS_KEY=your_access_key \
--env NCLOUD_SECRET_KEY=your_secret_key \
-- npx -y @flor3z-github/navermap-mcp-server
```
Maps API만 사용 시:
```bash
claude mcp add navermap \
--env NAVER_CLIENT_ID=your_client_id \
--env NAVER_CLIENT_SECRET=your_client_secret \
-- npx -y @flor3z-github/navermap-mcp-server
```
## 제공 도구
모든 도구는 읽기 전용(`readOnlyHint: true`)으로 설정되어 있어 데이터를 변경하지 않습니다.
### 1. navermap_geocode
주소를 좌표로 변환합니다.
**파라미터:**
| 이름 | 필수 | 설명 |
|------|------|------|
| query | O | 검색할 주소 |
| coordinate | X | 검색 중심 좌표 (경도,위도) |
| filter | X | 결과 필터 (예: HCODE:1168000000) |
| language | X | 응답 언어 (ko, en, ja, zh) |
| page | X | 페이지 번호 |
| count | X | 결과 수 (최대 100) |
**사용 예시:**
```
"서울특별시 강남구 테헤란로 152" 주소의 좌표를 알려줘
```
### 2. navermap_reverse_geocode
좌표를 주소로 변환합니다.
**파라미터:**
| 이름 | 필수 | 설명 |
|------|------|------|
| coords | O | 좌표 (경도,위도 형식) |
| sourcecrs | X | 입력 좌표계 |
| targetcrs | X | 출력 좌표계 |
| orders | X | 응답 순서 (legalcode,admcode,addr,roadaddr) |
| output | X | 응답 형식 (json, xml) |
**사용 예시:**
```
127.0368,37.5085 좌표의 주소를 알려줘
```
### 3. navermap_get_directions
경로를 탐색하고 거리, 소요시간, 비용 정보를 제공합니다.
**파라미터:**
| 이름 | 필수 | 설명 |
|------|------|------|
| start | O | 출발지 좌표 (경도,위도) |
| goal | O | 목적지 좌표 (경도,위도) |
| waypoints | X | 경유지 (최대 5개, \|로 구분) |
| option | X | 경로 옵션 (trafast, tracomfort, traoptimal, traavoidtoll, traavoidcaronly) |
| cartype | X | 차량 종류 (1~6) |
| fueltype | X | 연료 종류 |
| mileage | X | 연비 (km/L) |
**경로 옵션:**
- `trafast`: 실시간 빠른길
- `tracomfort`: 편한길
- `traoptimal`: 최적 (기본값)
- `traavoidtoll`: 무료 우선
- `traavoidcaronly`: 자동차 전용도로 회피
**사용 예시:**
```
강남역에서 여의도까지 경로 알려줘
```
### 4. navermap_get_static_map
정적 지도 이미지를 생성합니다.
**파라미터:**
| 이름 | 필수 | 설명 |
|------|------|------|
| center | O | 중심 좌표 (경도,위도) |
| level | X | 줌 레벨 (1~20, 기본값: 16) |
| w | X | 이미지 너비 (최대 1024) |
| h | X | 이미지 높이 (최대 1024) |
| maptype | X | 지도 유형 (basic, traffic, satellite, satellite_base, terrain) |
| markers | X | 마커 설정 |
| path | X | 경로 설정 |
| scale | X | 이미지 스케일 (1 또는 2) |
**사용 예시:**
```
서울역 주변 지도를 보여줘
```
### 5. navermap_get_usage
API 사용량과 비용을 조회합니다. (NCLOUD_ACCESS_KEY, NCLOUD_SECRET_KEY 필요)
**파라미터:**
| 이름 | 필수 | 설명 |
|------|------|------|
| month | X | 조회할 월 (YYYY-MM, 기본값: 당월) |
**사용 예시:**
```
이번 달 네이버 지도 API 사용량 알려줘
```
**응답 예시:**
```
## 2024-12 Naver Maps API 사용량 현황
### 경고
- Directions 5 사용률이 75.0%입니다. 한도에 주의하세요.
### 서비스별 사용량
| 서비스 | 사용량 | 무료한도 | 사용률 | 비용 |
|--------|--------|----------|--------|------|
| Directions 5 | 45,000 | 60,000 | 75.0% | 0원 |
| Geocoding | 1,500,000 | 3,000,000 | 50.0% | 0원 |
| ... | ... | ... | ... | ... |
### 총 비용: 0원
```
## 무료 이용량 안내
Naver Maps API는 월별 무료 이용량을 제공합니다:
| 서비스 | 무료 한도 (월) |
|--------|----------------|
| Dynamic Map | 6,000,000건 |
| Static Map | 3,000,000건 |
| Geocoding | 3,000,000건 |
| Reverse Geocoding | 3,000,000건 |
| Directions 5 (경유지 5개) | 60,000건 |
| Directions 15 (경유지 15개) | 3,000건 |
> 무료 한도 초과 시 사용량에 따라 요금이 부과됩니다. 자세한 내용은 [Naver Cloud Platform 요금 안내](https://www.ncloud.com/product/applicationService/maps)를 참조하세요.
## 개발
### 설치 및 빌드
```bash
# 의존성 설치
npm install
# 빌드
npm run build
# 개발 모드 (tsx로 직접 실행)
npm run dev
```
### 테스트
```bash
# 테스트 실행
npm test
# 커버리지 포함 테스트
npm run test:coverage
```
### 코드 품질
```bash
# 린트 검사
npm run lint
# 코드 포맷팅
npm run format
```
### 디버깅
[MCP Inspector](https://github.com/modelcontextprotocol/inspector)를 사용하여 서버를 디버깅할 수 있습니다:
```bash
npm run inspector
# 또는
npx @modelcontextprotocol/inspector npx -y @flor3z-github/navermap-mcp-server
```
### 환경 변수
추가 환경 변수로 동작을 조정할 수 있습니다:
| 변수 | 기본값 | 설명 |
|------|--------|------|
| LOG_LEVEL | info | 로그 레벨 (debug, info, warn, error) |
| REQUEST_TIMEOUT | 30000 | API 요청 타임아웃 (ms) |
| MAX_RETRIES | 3 | 실패 시 재시도 횟수 |
## 기여
기여를 환영합니다! Pull Request를 보내주세요.
## 라이선스
Apache-2.0
TDQS
A3.7/5.0
Scored across 4 tools
Disambiguation5/5
Each tool has a distinct purpose: address to coordinates (geocode), route calculation (get_directions), static map image generation (get_static_map), and coordinates to address (reverse_geocode). No overlap or ambiguity.
Naming Consistency4/5
All tools share the 'navermap_' prefix and follow a verb-based pattern. Two tools use 'get_' (get_directions, get_static_map) while two use bare verbs (geocode, reverse_geocode), a minor inconsistency but easily understood.
Tool Count5/5
With 4 tools, the server is well-scoped for a map service, covering essential operations without unnecessary bloat.
Completeness5/5
The tool set covers the core map functionality: forward and reverse geocoding, directions, and static map generation. No obvious gaps exist for the stated purpose.
Maintenance
ActivityInactive
ResponsivenessNo issues