Search for South Korean tourism information, including festivals, temples, and restaurants, using the official Korea Tourism Organization API.
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:
Before you begin, you must obtain an API key from the Korea Tourism Organization (KTO) Data Portal.
areaBasedList
, searchKeyword
, detailCommon
, etc.).You need to apply for the API below to make a request for each language.
- English: https://www.data.go.kr/data/15101753/openapi.do
- Japanese: https://www.data.go.kr/data/15101760/openapi.do
- Simplified Chinese: https://www.data.go.kr/data/15101764/openapi.do
- Traditional Chinese: https://www.data.go.kr/data/15101769/openapi.do
- Russian: https://www.data.go.kr/data/15101831/openapi.do
- Spanese: https://www.data.go.kr/data/15101811/openapi.do
- German: https://www.data.go.kr/data/15101805/openapi.do
- French: https://www.data.go.kr/data/15101808/openapi.do
You can run this MCP server using either uv
(a fast Python package installer and runner) or Docker
.
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
uv
(Recommended for local development)Clone the repository:
git clone https://github.com/harimkang/mcp-korea-tourism-api.git
cd mcp-korea-tourism-api
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).
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.
# Install Dependency with uv
uv sync
# Default: stdio transport (for MCP clients)
uv run -m mcp_tourism.server
# HTTP transport for web applications
uv run -m mcp_tourism.server --transport streamable-http --host 127.0.0.1 --port 8000
# SSE transport for real-time applications
uv run -m mcp_tourism.server --transport sse --host 127.0.0.1 --port 8080
# Using environment variables
export MCP_TRANSPORT=streamable-http
export MCP_HOST=0.0.0.0
export MCP_PORT=3000
uv run -m mcp_tourism.server
The server will start and listen for MCP requests via the specified transport protocol.
Clone the repository:
git clone https://github.com/harimkang/mcp-korea-tourism-api.git
cd mcp-korea-tourism-api
Build the Docker Image: You can build the image with different transport configurations:
# Default build (stdio transport)
docker build -t mcp-korea-tourism-api .
# Build with HTTP transport configuration
docker build -t mcp-korea-tourism-api \
--build-arg MCP_TRANSPORT=streamable-http \
--build-arg MCP_HOST=0.0.0.0 \
--build-arg MCP_PORT=8000 \
--build-arg MCP_PATH=/mcp \
--build-arg MCP_LOG_LEVEL=INFO \
.
# Build with SSE transport configuration
docker build -t mcp-korea-tourism-api \
--build-arg MCP_TRANSPORT=sse \
--build-arg MCP_HOST=0.0.0.0 \
--build-arg MCP_PORT=8080 \
.
Run the Docker Container: You can run the container with different transport configurations:
Stdio Transport (Default - for MCP clients):
docker run --rm -it \
-e KOREA_TOURISM_API_KEY="YOUR_KTO_API_KEY" \
mcp-korea-tourism-api
HTTP Transport (for web applications):
# Using runtime environment variables
docker run --rm -p 8000:8000 \
-e KOREA_TOURISM_API_KEY="YOUR_KTO_API_KEY" \
-e MCP_TRANSPORT=streamable-http \
-e MCP_HOST=0.0.0.0 \
-e MCP_PORT=8000 \
mcp-korea-tourism-api
# Check health: curl http://localhost:8000/health
SSE Transport (for real-time applications):
docker run --rm -p 8080:8080 \
-e KOREA_TOURISM_API_KEY="YOUR_KTO_API_KEY" \
-e MCP_TRANSPORT=sse \
-e MCP_HOST=0.0.0.0 \
-e MCP_PORT=8080 \
mcp-korea-tourism-api
Using Docker Compose (Recommended):
# Copy and configure environment variables
cp docker.env.example .env
# Edit .env file with your API key and preferred settings
# Run with HTTP transport (default profile)
docker-compose up mcp-tourism-http
# Run with SSE transport
docker-compose --profile sse up mcp-tourism-sse
# Run development setup with debug logging
docker-compose --profile dev up mcp-tourism-dev
The Korea Tourism API MCP Server supports multiple transport protocols to accommodate different use cases:
stdio
(Default): Standard input/output transport for direct MCP client integration
streamable-http
: HTTP-based transport for web applications
http://localhost:8000/mcp
sse
: Server-Sent Events transport for real-time applications
http://localhost:8080/mcp
You can configure the server using command line arguments or environment variables:
Setting | CLI Argument | Environment Variable | Default | Description |
---|---|---|---|---|
Transport | --transport | MCP_TRANSPORT | stdio | Transport protocol to use |
Host | --host | MCP_HOST | 127.0.0.1 | Host address for HTTP transports |
Port | --port | MCP_PORT | 8000 | Port for HTTP transports |
Path | --path | MCP_PATH | /mcp | Path for HTTP endpoints |
Log Level | --log-level | MCP_LOG_LEVEL | INFO | Logging level |
# Get help for all available options
python -m mcp_tourism.server --help
# Run with HTTP transport on custom port
python -m mcp_tourism.server --transport streamable-http --port 3000 --log-level DEBUG
# Run with SSE transport
python -m mcp_tourism.server --transport sse --host 0.0.0.0 --port 8080
# Set environment variables
export MCP_TRANSPORT=streamable-http
export MCP_HOST=0.0.0.0
export MCP_PORT=8000
export MCP_LOG_LEVEL=INFO
export KOREA_TOURISM_API_KEY="your_api_key_here"
# Run the server
python -m mcp_tourism.server
For HTTP and SSE transports, a health check endpoint is available at /health
:
# Check server health
curl http://localhost:8000/health
# Example response
{
"status": "healthy",
"service": "Korea Tourism API MCP Server",
"transport": "streamable-http",
"timestamp": 1640995200.0
}
To use this MCP server within Cursor:
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.
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.
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.
{
"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"
}
}
}
}
Save mcp.json
.
Restart Cursor or Reload MCP Tools: Cursor should now detect the tool and use Docker to run it when needed.
This server exposes the following tools for AI assistants:
search_tourism_by_keyword
: Search for tourism information using keywords (e.g., "Gyeongbokgung", "Bibimbap"). Filter by content type, area code.
get_tourism_by_area
: Browse tourism information by geographic area codes (e.g., Seoul='1'). Filter by content type, district code.
find_nearby_attractions
: Discover tourism spots near specific GPS coordinates (longitude, latitude). Filter by radius and content type.
search_festivals_by_date
: Find festivals occurring within a specified date range (YYYYMMDD). Filter by area code.
find_accommodations
: Search for hotels, guesthouses, etc. Filter by area and district code.
get_detailed_information
: Retrieve comprehensive details (overview, usage time, parking, etc.) for a specific item using its Content ID. Filter by content type.
get_tourism_images
: Get image URLs associated with a specific tourism item using its Content ID.
get_area_codes
: Retrieve area codes (for cities/provinces) and optionally sub-area (district) codes.
uv
method)uv
installed (pip install uv
)An AI assistant integrated with this MCP could handle queries like:
Search and retrieve content from the Unsloth AI documentation.
Google News search capabilities with automatic topic categorization and multi-language support via SerpAPI integration.
Self-hosted Websearch API
An MCP server for the Context7 project, providing HTTP streaming and search endpoints for library information without local installation.
Analyzes user search keyword intent for SEO support using the AI Search Intent API.
Provides AI assistants with direct access to Mastra.ai's complete knowledge base.
Search campgrounds around the world on campertunity, check availability, and provide booking links.
Access real-time and historical Indian stock data using the Yahoo Finance API.
Search and book from over 2 million hotels with shopping and booking capabilities.
An MCP server that connects to Perplexity's Sonar API, enabling real-time web-wide research in conversational AI.