Search returns items with content IDs, and the detail and image tools take those IDs — so "tell me more about that one" and "show me pictures" are one call each, not another search. Two things to plan for: the KTO portal issues a separate key per language, so a multilingual deployment means several registrations, and the caching plus rate limiting exist because the upstream API has limits worth respecting.
A server over the Korea Tourism Organization's official TourAPI. It searches by keyword, by area, by GPS coordinates and by date, and returns full details and photos for anything it finds.
- `search_tourism_by_keyword` searches by phrase — a palace name, a dish — filtered by content type and area code
- `get_tourism_by_area` browses by geographic area code and district; `get_area_codes` returns those codes for cities, provinces and districts
- `find_nearby_attractions` searches around a longitude and latitude with a radius and content-type filter
- `search_festivals_by_date` finds festivals inside a YYYYMMDD date range, filtered by area
- `find_accommodations` covers hotels and guesthouses by area and district
- `get_detailed_information` returns the overview, usage time, parking and the rest for one item by content ID; `get_tourism_images` returns its photos
- Eight languages are supported — English, Japanese, Simplified and Traditional Chinese, Russian, Spanish, German and French
- Responses are cached with a TTL, rate-limited to respect the API, and retried automatically on transient failures
Python 3.12 or higher with uv, or the Docker image. A Korea Tourism Organization service key goes in KOREA_TOURISM_API_KEY — note that each language is a separate API registration on the KTO data portal. It runs over stdio by default; `--transport streamable-http` or `--transport sse` serve it over HTTP with `--host` and `--port`, and a `/health` endpoint reports status and transport.
One command plus a key — npx -y @smithery/cli install @harimkang/mcp-korea-tourism-api --client claude, then supply credentials
