Skip to main content

Korea Tourism API MCP Server ✈️

smithery badge PyPI version License: MIT CI Tests

Unlock the wonders of South Korean tourism directly within your AI assistant! This project provides a Model Context Protocol (MCP) server powered by the official Korea Tourism Organization (KTO) API. Equip your AI with the ability to discover vibrant festivals, serene temples, delicious restaurants, comfortable accommodations, and much more across Korea.

Links:

✨ Features

  • Comprehensive Search: Find tourist spots, cultural sites, events, food, lodging, and shopping via keywords, area, or location.
  • Rich Details: Access descriptions, operating hours, admission fees, photos, addresses, and contact information.
  • Location-Aware: Discover attractions near specific GPS coordinates.
  • Timely Information: Find festivals and events based on date ranges.
  • Multilingual Support: Get information in various languages supported by the KTO API (including English).
    • Supported Languages: English, Japanese, Simplified Chinese, Traditional Chinese, Russian, Spanese, German, French
  • Efficient & Resilient:
    • Response Caching: Uses time-to-live (TTL) caching to store results and reduce redundant API calls, improving speed.
    • Rate Limiting: Respects API usage limits to prevent errors.
    • Automatic Retries: Automatically retries requests in case of temporary network or server issues.
  • MCP Standard: Seamlessly integrates with AI assistants supporting the Model Context Protocol.

⚠️ Prerequisites

Before you begin, you must obtain an API key from the Korea Tourism Organization (KTO) Data Portal.

  1. Visit the KTO Data Portal (or the specific portal for the tourism API if available).
  2. Register and request an API key for the "TourAPI" services (you might need to look for services providing information like areaBasedList, searchKeyword, detailCommon, etc.).
  3. Keep your Service Key (API Key) safe. It will be required during installation or runtime.

You need to apply for the API below to make a request for each language.

🚀 Installation & Running

You can run this MCP server using either uv (a fast Python package installer and runner) or Docker.

Installing via Smithery

To install Korea Tourism API MCP Server for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @harimkang/mcp-korea-tourism-api --client claude

Option 1: Using uv (Recommended for local development)

  1. Clone the repository:

    git clone https://github.com/harimkang/mcp-korea-tourism-api.git
    cd mcp-korea-tourism-api
    
  2. Set the API Key Environment Variable: Replace "YOUR_KTO_API_KEY" with the actual key you obtained.

    # On macOS/Linux
    export KOREA_TOURISM_API_KEY="YOUR_KTO_API_KEY"
    
    # On Windows (Command Prompt)
    # set KOREA_TOURISM_API_KEY="YOUR_KTO_API_KEY"
    
    # On Windows (PowerShell)
    # $env:KOREA_TOURISM_API_KEY="YOUR_KTO_API_KEY"
    

    Note: For persistent storage, add this line to your shell's configuration file (e.g., .zshrc, .bashrc, or use system environment variable settings).

  3. Install dependencies and run the server: This command uses uv to install dependencies based on uv.lock (if available) or pyproject.toml and then runs the server module.

    uv run -m mcp_tourism.server
    

    The server will start and listen for MCP requests via standard input/output (stdio).

Option 2: Using Docker (Recommended for isolated environment/deployment)

  1. Clone the repository:

    git clone https://github.com/harimkang/mcp-korea-tourism-api.git
    cd mcp-korea-tourism-api
    
  2. Build the Docker Image: Replace "YOUR_KTO_API_KEY" with the actual key you obtained. This command builds the image using the provided Dockerfile, passing the API key securely as a build argument.

    >>> docker build -t mcp-korea-tourism-api .
    
    [+] Building 2.7s (13/13) FINISHED                                                 docker:desktop-linux
    => [internal] load build definition from Dockerfile                                               0.0s
    => => transferring dockerfile: 1.46kB                                                             0.0s
    => resolve image config for docker-image://docker.io/docker/dockerfile:1                          0.9s
    => CACHED docker-image://docker.io/docker/dockerfile:1@sha256:4c68376a702446fc3c79af22de146a148b  0.0s
    => [internal] load metadata for docker.io/library/python:3.12-slim                                0.7s
    => [internal] load .dockerignore                                                                  0.0s
    => => transferring context: 864B                                                                  0.0s
    => [1/6] FROM docker.io/library/python:3.12-slim@sha256:85824326bc4ae27a1abb5bc0dd9e08847aa5fe73  0.0s
    => [internal] load build context                                                                  0.0s
    => => transferring context: 7.06kB                                                                0.0s
    => CACHED [2/6] RUN pip install --no-cache-dir uv                                                 0.0s
    => CACHED [3/6] WORKDIR /app                                                                      0.0s
    => CACHED [4/6] COPY pyproject.toml uv.lock ./                                                    0.0s
    => [5/6] RUN uv sync --frozen                                                                     0.8s
    => [6/6] COPY . .                                                                                 0.0s
    => exporting to image                                                                             0.1s
    => => exporting layers                                                                            0.1s
    => => writing image sha256:d7d074e85a66a257d00bad4043ea0f5ba8acf6b7c6ef26560c6904bf3ec4d5ff       0.0s 
    => => naming to docker.io/library/mcp-korea-tourism                                               0.0s
    
    >>> docker images
    
    REPOSITORY                              TAG                IMAGE ID       CREATED          SIZE
    mcp-korea-tourism                       latest             d7d074e85a66   12 seconds ago   215MB
    
    • -t mcp-korea-tourism-api: Tags the built image with the name mcp-korea-tourism-api.
    • .: Specifies the current directory as the build context.
  3. Run the Docker Container: You can run the container in interactive mode for testing or detached mode for background operation.

    • Interactive Mode (for manual testing):

      docker run --rm -it -e KOREA_TOURISM_API_KEY="YOUR_KTO_API_KEY" mcp-korea-tourism-api
      
      • --rm: Automatically removes the container when it exits.
      • -it: Runs in interactive mode, attaching your terminal to the container's stdio.
      • -e KOREA_TOURISM_API_KEY=...: Sets the API key environment variable at runtime (alternative to build-arg).
    • Detached Mode (for background):

      docker run --name tourism-mcp -d -e KOREA_TOURISM_API_KEY="YOUR_KTO_API_KEY" mcp-korea-tourism-api
      
      • --name tourism-mcp: Assigns a name to the container.
      • -d: Runs the container in detached (background) mode.
      • You can view logs using docker logs tourism-mcp.

🛠️ Integrating with Cursor

To use this MCP server within Cursor:

  1. Ensure the Docker container is runnable: Follow the Docker installation steps above to build the image (mcp-korea-tourism-api). You don't need to manually run the container; Cursor will do that.

  2. Locate your mcp.json file: This file configures MCP tools for Cursor. You can usually find it via Cursor's settings or potentially in a path like ~/.cursor/mcp.json or similar.

  3. Add or Update the MCP Configuration: Add the following JSON object to the list within your mcp.json file. If you already have an entry for this tool, update its command. Replace "YOUR_KTO_API_KEY" with your actual key. cursor_integrations

    {
        "mcpServers": {
            "korea-tourism": {
                "command": "docker",
                "args": [
                    "run",
                    "--rm",
                    "-i",
                    "-e",
                    "KOREA_TOURISM_API_KEY=YOUR_KTO_API_KEY",
                    "mcp-korea-tourism-api"
                ]
            }
        }
    }
    

    OR Use uv [local directory]

    {
        "mcpServers": {
            "korea-tourism": {
                "command": "uv",
                "args": [
                    "--directory",
                    "{LOCAL_PATH}/mcp-korea-tourism-api",
                    "run",
                    "-m",
                    "mcp_tourism.server"
                ],
                "env": {
                    "KOREA_TOURISM_API_KEY": "YOUR_KTO_API_KEY"
                }
            }
        }
    }
    
  4. Save mcp.json.

  5. Restart Cursor or Reload MCP Tools: Cursor should now detect the tool and use Docker to run it when needed.

🛠️ MCP Tools Provided

This server exposes the following tools for AI assistants:

  1. search_tourism_by_keyword: Search for tourism information using keywords (e.g., "Gyeongbokgung", "Bibimbap"). Filter by content type, area code. search_tourism_by_keyword
  2. get_tourism_by_area: Browse tourism information by geographic area codes (e.g., Seoul='1'). Filter by content type, district code. get_tourism_by_area
  3. find_nearby_attractions: Discover tourism spots near specific GPS coordinates (longitude, latitude). Filter by radius and content type. find_nearby_attractions
  4. search_festivals_by_date: Find festivals occurring within a specified date range (YYYYMMDD). Filter by area code. search_festivals_by_date
  5. find_accommodations: Search for hotels, guesthouses, etc. Filter by area and district code. find_accommodations
  6. get_detailed_information: Retrieve comprehensive details (overview, usage time, parking, etc.) for a specific item using its Content ID. Filter by content type. get_detailed_information
  7. get_tourism_images: Get image URLs associated with a specific tourism item using its Content ID. get_tourism_images
  8. get_area_codes: Retrieve area codes (for cities/provinces) and optionally sub-area (district) codes. get_area_codes

⚙️ Requirements (for uv method)

  • Python 3.12+
  • uv installed (pip install uv)

Example Usage

An AI assistant integrated with this MCP could handle queries like:

  • "Find restaurants near Myeongdong station."
  • "Show me pictures of Bulguksa Temple."
  • "Are there any festivals in Busan next month?"
  • "Tell me more about Gyeongbokgung Palace, content ID 264337."

Release files for mcp-korea-tourism-api 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mcp-korea-tourism-api 0.1.2
File Size Uploaded
mcp_korea_tourism_api-0.1.2.tar.gz 543.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mcp-korea-tourism-api 0.1.2
File Interpreter ABI Platform
mcp_korea_tourism_api-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 563.1 kB

Release files / mcp_korea_tourism_api-0.1.2.tar.gz

Download URL mcp_korea_tourism_api-0.1.2.tar.gz
Size 543.4 kB
Tags Source
SHA-256 checksum
How to use checksums
c1271c8f83b058d6e75e46d5637adcc83cb5e277d482be20b2a16430a88554cd
BLAKE2b-256 checksum
How to use checksums
3a35305f565315ec5f9734b2e3dc72085cecf786335a3d61b0adfb21d08ca955
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.10

Release files / mcp_korea_tourism_api-0.1.2-py3-none-any.whl

Download URL mcp_korea_tourism_api-0.1.2-py3-none-any.whl
Size 19.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
05e5e520abc73d1f880db98ad629314fb79ee08fc100706080fbf106eb4b364c
BLAKE2b-256 checksum
How to use checksums
b36612599a5933e184f28cd8698a33ee8c7da9c6346c73b495a5df392861eccc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.10

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page