Skip to main content
Glama
acorn025

Parking Information MCP Server

by acorn025
test_final_all_regions.py11.4 kB
""" 세 가지 지역 최종 테스트 실제 이용자가 받는 응답 형식으로 테스트 """ import sys import os sys.path.insert(0, 'src') from dotenv import load_dotenv load_dotenv() def test_seoul(): """서울 지역 테스트""" print("=" * 80) print("서울 지역 테스트") print("=" * 80) print("\n[검색 위치] 서울시 중구 세종대로 110 (서울특별시청)") print("-" * 80) try: # MCP 서버의 search_nearby_parking 함수 직접 호출 from src.server import search_nearby_parking # 좌표 변환 (서울시청) from api_clients import KakaoLocalClient kakao_client = KakaoLocalClient() coord_response = kakao_client.address_to_coordinates("서울시 중구 세종대로 110") if coord_response.get("status") != "success": print("[X] 좌표 변환 실패") return lat = float(coord_response.get("data", {}).get("documents", [])[0].get('y')) lng = float(coord_response.get("data", {}).get("documents", [])[0].get('x')) print(f"[좌표] 위도: {lat}, 경도: {lng}") print(f"\n[주변 주차장 검색 중...]") # MCP 서버 함수 호출 result = search_nearby_parking( latitude=lat, longitude=lng, radius=1000.0 ) if result.get("error"): print(f"\n[오류] {result.get('error')}") return parkings = result.get("parkings", []) print(f"\n[검색 결과] {len(parkings)}개의 주차장을 찾았습니다.\n") # 서울 지역 주차장 중 실시간 정보가 있는 것만 표시 seoul_with_info = [p for p in parkings if p.get('available_spots') is not None] if seoul_with_info: print(f"[실시간 정보 제공 주차장] {len(seoul_with_info)}개\n") for i, parking in enumerate(seoul_with_info[:3], 1): print(f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━") print(f"주차장 {i}: {parking.get('name', 'N/A')}") print(f"주소: {parking.get('address', 'N/A')}") print(f"\n[실시간 정보]") print(f" 총 주차 대수: {parking.get('total_spots', 'N/A')}대") print(f" 현재 주차 대수: {parking.get('total_spots', 0) - parking.get('available_spots', 0)}대") print(f" 주차 가능 대수: {parking.get('available_spots', 'N/A')}대") if parking.get('operating_info'): op = parking.get('operating_info') print(f"\n[운영 시간]") print(f" 평일: {op.get('weekday_start', 'N/A')} ~ {op.get('weekday_end', 'N/A')}") print(f" 주말: {op.get('weekend_start', 'N/A')} ~ {op.get('weekend_end', 'N/A')}") print(f" 공휴일: {op.get('holiday_start', 'N/A')} ~ {op.get('holiday_end', 'N/A')}") if parking.get('fee_info'): fee = parking.get('fee_info') print(f"\n[요금 정보]") print(f" 유료 여부: {fee.get('is_paid', 'N/A')}") print(f" 기본 요금: {fee.get('basic_fee', 0)}원 / {fee.get('basic_hours', 0)}분") print(f" 추가 요금: {fee.get('additional_fee', 0)}원 / {fee.get('additional_hours', 0)}분") if fee.get('daily_max_fee'): print(f" 일일 최대 요금: {fee.get('daily_max_fee')}원") print() else: print("[정보] 실시간 정보를 제공하는 주차장이 없습니다.") print("(주차장명 매칭이 정확하지 않을 수 있습니다.)\n") print("=" * 80) except Exception as e: print(f"\n[X] 오류 발생: {str(e)}") import traceback traceback.print_exc() def test_gyeonggi(): """경기 지역 테스트""" print("\n" + "=" * 80) print("경기 지역 테스트") print("=" * 80) print("\n[검색 위치] 경기도 수원시 팔달구 정조로 825") print("-" * 80) try: from src.server import search_nearby_parking from api_clients import KakaoLocalClient kakao_client = KakaoLocalClient() coord_response = kakao_client.address_to_coordinates("경기도 수원시 팔달구 정조로 825") if coord_response.get("status") != "success": print("[X] 좌표 변환 실패") return lat = float(coord_response.get("data", {}).get("documents", [])[0].get('y')) lng = float(coord_response.get("data", {}).get("documents", [])[0].get('x')) print(f"[좌표] 위도: {lat}, 경도: {lng}") print(f"\n[주변 주차장 검색 중...]") result = search_nearby_parking( latitude=lat, longitude=lng, radius=1000.0 ) if result.get("error"): print(f"\n[오류] {result.get('error')}") return parkings = result.get("parkings", []) print(f"\n[검색 결과] {len(parkings)}개의 주차장을 찾았습니다.\n") # 경기 지역 주차장 중 정보가 있는 것만 표시 gyeonggi_with_info = [p for p in parkings if p.get('operating_info') or p.get('fee_info')] if gyeonggi_with_info: print(f"[요금 및 운영시간 정보 제공 주차장] {len(gyeonggi_with_info)}개\n") for i, parking in enumerate(gyeonggi_with_info[:3], 1): print(f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━") print(f"주차장 {i}: {parking.get('name', 'N/A')}") print(f"주소: {parking.get('address', 'N/A')}") if parking.get('total_spots'): print(f"\n[주차장 정보]") print(f" 총 주차 대수: {parking.get('total_spots')}대") if parking.get('operating_info'): op = parking.get('operating_info') print(f"\n[운영 시간]") print(f" 평일: {op.get('weekday_start', 'N/A')} ~ {op.get('weekday_end', 'N/A')}") print(f" 토요일: {op.get('saturday_start', 'N/A')} ~ {op.get('saturday_end', 'N/A')}") print(f" 공휴일: {op.get('holiday_start', 'N/A')} ~ {op.get('holiday_end', 'N/A')}") if parking.get('fee_info'): fee = parking.get('fee_info') print(f"\n[요금 정보]") print(f" 유료 여부: {fee.get('is_paid', 'N/A')}") print(f" 기본 요금: {fee.get('basic_fee', 0)}원 / {fee.get('basic_time', 0)}분") print(f" 추가 요금: {fee.get('additional_fee', 0)}원 / {fee.get('additional_time', 0)}분") if fee.get('payment_method'): print(f" 결제 방법: {fee.get('payment_method')}") print() else: print("[정보] 요금 및 운영시간 정보를 제공하는 주차장이 없습니다.") print("(주차장명 매칭이 정확하지 않을 수 있습니다.)\n") print("=" * 80) except Exception as e: print(f"\n[X] 오류 발생: {str(e)}") import traceback traceback.print_exc() def test_other(): """기타 지역 테스트""" print("\n" + "=" * 80) print("기타 지역 테스트") print("=" * 80) print("\n[검색 위치] 부산 해운대구 해운대해변로 264") print("-" * 80) try: from src.server import search_nearby_parking from api_clients import KakaoLocalClient kakao_client = KakaoLocalClient() coord_response = kakao_client.address_to_coordinates("부산 해운대구 해운대해변로 264") if coord_response.get("status") != "success": print("[X] 좌표 변환 실패") return lat = float(coord_response.get("data", {}).get("documents", [])[0].get('y')) lng = float(coord_response.get("data", {}).get("documents", [])[0].get('x')) print(f"[좌표] 위도: {lat}, 경도: {lng}") print(f"\n[주변 주차장 검색 중...]") result = search_nearby_parking( latitude=lat, longitude=lng, radius=1000.0 ) if result.get("error"): print(f"\n[오류] {result.get('error')}") return parkings = result.get("parkings", []) print(f"\n[검색 결과] {len(parkings)}개의 주차장을 찾았습니다.\n") # 기타 지역 주차장 표시 if parkings: print(f"[주차장 목록]\n") for i, parking in enumerate(parkings[:5], 1): print(f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━") print(f"주차장 {i}: {parking.get('name', 'N/A')}") print(f"주소: {parking.get('address', 'N/A')}") print(f"거리: {parking.get('distance', 0)}m") if parking.get('notice'): print(f"\n[안내] {parking.get('notice')}") else: print(f"\n[정보] 기본 주차장 정보만 제공됩니다.") print() else: print("[정보] 주차장을 찾을 수 없습니다.\n") print("=" * 80) except Exception as e: print(f"\n[X] 오류 발생: {str(e)}") import traceback traceback.print_exc() def summary(): """최종 요약""" print("\n" + "=" * 80) print("최종 테스트 요약") print("=" * 80) print("\n[서울 지역]") print(" - 실시간 주차 대수: 제공") print(" - 총 주차 대수: 제공") print(" - 운영 시간: 제공") print(" - 요금 정보: 제공") print(" - 업데이트 시간: 제공") print("\n[경기 지역]") print(" - 실시간 주차 대수: 제공 안됨 (API에 없음)") print(" - 총 주차 대수: 제공") print(" - 운영 시간: 제공") print(" - 요금 정보: 제공") print("\n[기타 지역]") print(" - 기본 주차장 정보: 제공") print(" - 실시간 정보: 제공 안됨") print(" - 안내 메시지: 제공") print("\n" + "=" * 80) if __name__ == "__main__": test_seoul() test_gyeonggi() test_other() summary()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/acorn025/parking-mcp2'

If you have feedback or need assistance with the MCP directory API, please join our Discord server