# 주차장 정보 조회 MCP 서버
fastMCP를 사용하여 전국 주차장 정보를 조회하는 MCP (Model Context Protocol) 서버입니다.
## 주요 특징
- **전국 주차장 검색**: 카카오 로컬 API를 통한 전국 주차장 검색
- **지역별 정보 제공**: 서울/경기 지역은 실시간 정보 및 상세 정보 제공
- **실시간 주차 정보**: 서울 지역 실시간 주차 가능 대수 제공
- **운영 시간 및 요금 정보**: 서울/경기 지역 운영 시간 및 요금 정보 제공
- **사용자 친화적 에러 메시지**: 기술적 용어 없이 명확한 안내 메시지
## 개발 환경 설정 (Windows)
### 1. Python 가상환경 생성
PowerShell에서 다음 명령어를 실행하세요:
```powershell
# Python 3.8 이상이 설치되어 있어야 합니다
python --version
# 가상환경 생성
python -m venv venv
# 가상환경 활성화
.\venv\Scripts\Activate.ps1
```
**참고**: PowerShell 실행 정책 오류가 발생하는 경우:
```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```
또는 Command Prompt(cmd)를 사용하는 경우:
```cmd
venv\Scripts\activate.bat
```
### 2. 필요한 라이브러리 설치
가상환경이 활성화된 상태에서:
```powershell
pip install --upgrade pip
pip install -r requirements.txt
```
### 3. 환경 변수 설정
`.env.example` 파일을 참고하여 `.env` 파일을 생성하세요:
```powershell
copy .env.example .env
```
그리고 `.env` 파일을 열어서 실제 API 키를 입력하세요.
**참고**: `.env.example` 파일이 없는 경우 `env.example` 파일을 참고하세요.
## 프로젝트 구조
```
parking-mcp2/
├── venv/ # 가상환경 (gitignore됨)
├── .env # 환경 변수 (gitignore됨)
├── env.example # 환경 변수 예시
├── .gitignore
├── requirements.txt # Python 의존성
├── README.md
├── test_api.py # API 클라이언트 테스트
├── test_api_call.py # 실제 API 호출 테스트
├── test_server.py # 서버 구조 테스트
└── src/ # 소스 코드
├── __init__.py
├── server.py # MCP 서버 메인 파일
└── api_clients/ # API 클라이언트 모듈
├── __init__.py
├── kakao_local.py # 카카오 로컬 API (주요 검색 API)
├── seoul_data.py # 서울 열린데이터 (서울 실시간 정보)
└── gyeonggi_data.py # 경기데이터드림 (경기 실시간 정보)
```
## API 키 발급 방법
### 1. 카카오 로컬 API 키
1. [카카오 개발자 콘솔](https://developers.kakao.com/) 접속
2. 애플리케이션 생성
3. **앱 설정 > 앱 키**에서 **REST API 키** 복사
4. **제품 설정 > 카카오 로그인** 활성화 (필수)
5. **제품 설정 > 로컬** 활성화 (필수)
6. `.env` 파일에 `KAKAO_REST_API_KEY`에 입력
**주의**: "OPEN_MAP_AND_LOCAL" 서비스가 활성화되어 있어야 합니다.
### 2. 서울 열린데이터 API 키
1. [서울 열린데이터 광장](https://data.seoul.go.kr/) 접속
2. 회원가입 및 로그인
3. **마이페이지 > 인증키 관리**에서 인증키 발급
4. `.env` 파일에 `SEOUL_DATA_API_KEY`에 입력
**사용 API**:
- `GetParkingInfo`: 서울시 공영주차장 실시간 정보
### 3. 경기데이터드림 API 키
1. [경기데이터드림](https://data.gg.go.kr/) 접속
2. 회원가입 및 로그인
3. **마이페이지 > 인증키 관리**에서 인증키 발급
4. `.env` 파일에 `GYEONGGI_DATA_API_KEY`에 입력
**사용 API**:
- `ParkingPlace`: 경기도 공영주차장 정보
## 사용 방법
### 서버 실행
```powershell
# 가상환경 활성화
.\venv\Scripts\Activate.ps1
# 서버 실행 (모듈로 실행)
$env:PYTHONPATH="src"; python -m src.server
```
### MCP 서버 연결
MCP 클라이언트에서 다음과 같이 연결하세요:
```json
{
"mcpServers": {
"parking-mcp": {
"command": "python",
"args": ["-m", "src.server"],
"env": {
"PYTHONPATH": "src"
}
}
}
}
```
### 테스트
```powershell
# API 클라이언트 초기화 테스트
python test_api.py
# 실제 API 호출 테스트 (카카오 API)
python test_api_call.py
# 서버 구조 테스트
python test_server.py
```
## 주요 기능
### 제공하는 Tool 함수
1. **search_nearby_parking**
- 주변 주차장 검색 (카카오 로컬 API 사용)
- 좌표 기반 검색 (위도, 경도, 반경)
- 지역별 정보 자동 추가 (서울/경기/기타)
**파라미터:**
- `latitude`: 위도 (필수)
- `longitude`: 경도 (필수)
- `radius`: 검색 반경 미터 (기본값: 1000)
2. **get_parking_info**
- 특정 주차장 상세 정보 조회
- 주차장 이름 또는 주소로 검색
- 지역별 실시간 정보 자동 추가
**파라미터:**
- `parking_id`: 주차장 이름 또는 주소 (필수)
### 지역별 제공 정보
| 정보 | 서울 | 경기 | 기타 |
|------|------|------|------|
| 기본 정보 (이름, 주소) | ✅ | ✅ | ✅ |
| 총 주차 대수 | ✅ | ✅ | ❌ |
| 실시간 주차 가능 대수 | ✅ | ❌ | ❌ |
| 운영 시간 | ✅ | ✅ | ❌ |
| 요금 정보 | ✅ | ✅ | ❌ |
| 업데이트 시간 | ✅ | ❌ | ❌ |
**서울 지역:**
- 실시간 주차 가능 대수 제공
- 상세 운영 시간 (평일/주말/공휴일)
- 상세 요금 정보 (기본 요금, 추가 요금, 일일 최대 요금 등)
- 실시간 정보 업데이트 시간
**경기 지역:**
- 총 주차 대수 제공
- 운영 시간 (평일/토요일/공휴일)
- 요금 정보 (기본 요금, 추가 요금, 결제 방법)
**기타 지역:**
- 기본 주차장 정보만 제공 (이름, 주소, 카테고리)
- 안내 메시지 표시
### 지원하는 API
- **카카오 로컬 API**: 전국 주차장 검색 및 주소 변환 (주요 검색 API)
- **서울 열린데이터**: 서울시 실시간 주차 정보 (서울 지역 실시간 정보 추가)
- **경기데이터드림**: 경기도 실시간 주차 정보 (경기 지역 실시간 정보 추가)
## 사용 예시
### 예시 1: 서울 지역 주차장 검색
```python
# search_nearby_parking 호출
{
"latitude": 37.5665,
"longitude": 126.9780,
"radius": 1000
}
# 응답 예시
{
"parkings": [
{
"name": "서울시청 주차장",
"address": "서울 중구 세종대로 110",
"total_spots": 1260,
"available_spots": 507,
"fee": "교통,지하철 > 지하철역 > 주차장",
"distance": 62,
"operating_info": {
"operating_type": "시간제 운영",
"weekday_start": "0000",
"weekday_end": "2400",
...
},
"fee_info": {
"is_paid": "유료",
"basic_fee": 430.0,
"basic_hours": 5.0,
...
},
"update_time": "2025-12-10 10:24:30"
}
],
"count": 1
}
```
### 예시 2: 경기 지역 주차장 검색
```python
# search_nearby_parking 호출
{
"latitude": 37.2892,
"longitude": 127.0086,
"radius": 1000
}
# 응답 예시
{
"parkings": [
{
"name": "화성행궁",
"address": "경기도 수원시 팔달구 화성행궁 159",
"total_spots": 62,
"available_spots": null,
"fee": "교통,지하철 > 지하철역 > 주차장",
"distance": 0,
"operating_info": {
"weekday_start": "00:00",
"weekday_end": "23:59",
...
},
"fee_info": {
"is_paid": "유료",
"basic_time": 90,
"basic_fee": 400,
...
}
}
],
"count": 1
}
```
### 예시 3: 기타 지역 주차장 검색
```python
# search_nearby_parking 호출
{
"latitude": 35.1631,
"longitude": 129.1636,
"radius": 1000
}
# 응답 예시
{
"notice": "해당 지역은 기본 주차장 정보만 제공됩니다. 실시간 정보는 서울 지역에서, 요금 및 운영시간 정보는 서울/경기 지역에서 이용 가능합니다.",
"parkings": [
{
"name": "해운대역 주차장",
"address": "부산 해운대구 우동 1378-95",
"total_spots": null,
"available_spots": null,
"fee": "교통,지하철 > 지하철역 > 주차장",
"distance": 0
}
],
"count": 1
}
```
### 에러 응답 예시
```json
{
"error": "주차장 정보를 불러오는 중 오류가 발생했습니다. 잠시 후 다시 시도해주세요.",
"parkings": []
}
```
상세한 응답 형식은 [MCP_RESPONSE_FORMAT.md](MCP_RESPONSE_FORMAT.md)를 참고하세요.
## 의존성
- fastmcp: MCP 서버 프레임워크
- requests: HTTP API 호출
- python-dotenv: 환경 변수 관리