An open API service indexing awesome lists of open source software.

https://github.com/harimkang/mcp-korea-tourism-api

Model Context Protocol (MCP) server that provides tools for accessing the Korea Tourism API
https://github.com/harimkang/mcp-korea-tourism-api

Last synced: 5 days ago
JSON representation

Model Context Protocol (MCP) server that provides tools for accessing the Korea Tourism API

Awesome Lists containing this project

README

          

# ํ•œ๊ตญ ๊ด€๊ด‘ API MCP ์„œ๋ฒ„ โœˆ๏ธ

[![smithery badge](https://smithery.ai/badge/@harimkang/mcp-korea-tourism-api)](https://smithery.ai/interface/@harimkang/mcp-korea-tourism-api)
[![PyPI version](https://badge.fury.io/py/mcp-korea-tourism-api.svg)](https://badge.fury.io/py/mcp-korea-tourism-api)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![CI Tests](https://github.com/harimkang/mcp-korea-tourism-api/actions/workflows/ci.yml/badge.svg)](https://github.com/harimkang/mcp-korea-tourism-api/actions/workflows/ci.yml)

AI ์–ด์‹œ์Šคํ„ดํŠธ ๋‚ด์—์„œ ์ง์ ‘ ๋Œ€ํ•œ๋ฏผ๊ตญ ๊ด€๊ด‘์˜ ๊ฒฝ์ด๋กœ์›€์„ ๊ฒฝํ—˜ํ•˜์„ธ์š”! ์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ณต์‹ ํ•œ๊ตญ๊ด€๊ด‘๊ณต์‚ฌ(KTO) API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ชจ๋ธ ์ปจํ…์ŠคํŠธ ํ”„๋กœํ† ์ฝœ(MCP) ์„œ๋ฒ„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. AI๊ฐ€ ํ•œ๊ตญ ์ „์—ญ์˜ ํ™œ๊ธฐ์ฐฌ ์ถ•์ œ, ๊ณ ์š”ํ•œ ์‚ฌ์ฐฐ, ๋ง›์žˆ๋Š” ๋ ˆ์Šคํ† ๋ž‘, ํŽธ์•ˆํ•œ ์ˆ™๋ฐ• ์‹œ์„ค ๋“ฑ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

**๋งํฌ:**

- **PyPI ํŒจํ‚ค์ง€:** [https://pypi.org/project/mcp-korea-tourism-api/](https://pypi.org/project/mcp-korea-tourism-api/)
- **GitHub ์ €์žฅ์†Œ:** [https://github.com/harimkang/mcp-korea-tourism-api](https://github.com/harimkang/mcp-korea-tourism-api)
- **๋ฆด๋ฆฌ์Šค:** [https://github.com/harimkang/mcp-korea-tourism-api/releases](https://github.com/harimkang/mcp-korea-tourism-api/releases)

## โœจ ํŠน์ง•

- **ํฌ๊ด„์ ์ธ ๊ฒ€์ƒ‰:** ํ‚ค์›Œ๋“œ, ์ง€์—ญ ๋˜๋Š” ์œ„์น˜๋ฅผ ํ†ตํ•ด ๊ด€๊ด‘์ง€, ๋ฌธํ™” ์œ ์ ์ง€, ํ–‰์‚ฌ, ์Œ์‹, ์ˆ™๋ฐ•, ์‡ผํ•‘ ์ •๋ณด๋ฅผ ์ฐพ์•„๋ณด์„ธ์š”.
- **ํ’๋ถ€ํ•œ ์ƒ์„ธ ์ •๋ณด:** ์„ค๋ช…, ์šด์˜ ์‹œ๊ฐ„, ์ž…์žฅ๋ฃŒ, ์‚ฌ์ง„, ์ฃผ์†Œ, ์—ฐ๋ฝ์ฒ˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
- **์œ„์น˜ ๊ธฐ๋ฐ˜:** ํŠน์ • GPS ์ขŒํ‘œ ๊ทผ์ฒ˜์˜ ๋ช…์†Œ๋ฅผ ์ฐพ์•„๋ณด์„ธ์š”.
- **์‹œ๊ธฐ์ ์ ˆํ•œ ์ •๋ณด:** ๋‚ ์งœ ๋ฒ”์œ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ถ•์ œ ๋ฐ ํ–‰์‚ฌ๋ฅผ ์ฐพ์•„๋ณด์„ธ์š”.
- **๋‹ค๊ตญ์–ด ์ง€์›:** KTO API์—์„œ ์ง€์›ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์–ธ์–ด(์˜์–ด ํฌํ•จ)๋กœ ์ •๋ณด๋ฅผ ์–ป์œผ์„ธ์š”.
- **์ง€์› ์–ธ์–ด**: ์˜์–ด, ์ผ๋ณธ์–ด, ์ค‘๊ตญ์–ด ๊ฐ„์ฒด, ์ค‘๊ตญ์–ด ๋ฒˆ์ฒด, ๋Ÿฌ์‹œ์•„์–ด, ์ŠคํŽ˜์ธ์–ด, ๋…์ผ์–ด, ํ”„๋ž‘์Šค์–ด
- **ํšจ์œจ์„ฑ ๋ฐ ๋ณต์›๋ ฅ:**
- **์‘๋‹ต ์บ์‹ฑ:** TTL(Time-To-Live) ์บ์‹ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ค‘๋ณต API ํ˜ธ์ถœ์„ ์ค„์—ฌ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
- **์†๋„ ์ œํ•œ:** API ์‚ฌ์šฉ ์ œํ•œ์„ ์ค€์ˆ˜ํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
- **์ž๋™ ์žฌ์‹œ๋„:** ์ผ์‹œ์ ์ธ ๋„คํŠธ์›Œํฌ ๋˜๋Š” ์„œ๋ฒ„ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ์ž๋™์œผ๋กœ ์š”์ฒญ์„ ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
- **MCP ํ‘œ์ค€:** ๋ชจ๋ธ ์ปจํ…์ŠคํŠธ ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜๋Š” AI ์–ด์‹œ์Šคํ„ดํŠธ์™€ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค.

## โš ๏ธ ์‚ฌ์ „ ์ค€๋น„ ์‚ฌํ•ญ

์‹œ์ž‘ํ•˜๊ธฐ ์ „์— **๋ฐ˜๋“œ์‹œ** **ํ•œ๊ตญ๊ด€๊ด‘๊ณต์‚ฌ(KTO) ๋ฐ์ดํ„ฐ ํฌํ„ธ**์—์„œ API ํ‚ค๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1. [KTO ๋ฐ์ดํ„ฐ ํฌํ„ธ](https://www.data.go.kr/) (๋˜๋Š” ํ•ด๋‹น ๊ด€๊ด‘ API์˜ ํŠน์ • ํฌํ„ธ)์„ ๋ฐฉ๋ฌธํ•ฉ๋‹ˆ๋‹ค.
2. "TourAPI" ์„œ๋น„์Šค(์˜ˆ: `areaBasedList`, `searchKeyword`, `detailCommon` ๋“ฑ ์ •๋ณด ์ œ๊ณต ์„œ๋น„์Šค)์— ๋Œ€ํ•œ API ํ‚ค๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
3. **์„œ๋น„์Šค ํ‚ค(API ํ‚ค)**๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

> ๊ฐ ์–ธ์–ด๋ณ„ ์š”์ฒญ์„ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜ API๋ฅผ ์‹ ์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
>
> - ์˜์–ด: https://www.data.go.kr/data/15101753/openapi.do
> - ์ผ๋ณธ์–ด: https://www.data.go.kr/data/15101760/openapi.do
> - ์ค‘๊ตญ์–ด ๊ฐ„์ฒด: https://www.data.go.kr/data/15101764/openapi.do
> - ์ค‘๊ตญ์–ด ๋ฒˆ์ฒด: https://www.data.go.kr/data/15101769/openapi.do
> - ๋Ÿฌ์‹œ์•„์–ด: https://www.data.go.kr/data/15101831/openapi.do
> - ์ŠคํŽ˜์ธ์–ด: https://www.data.go.kr/data/15101811/openapi.do
> - ๋…์ผ์–ด: https://www.data.go.kr/data/15101805/openapi.do
> - ํ”„๋ž‘์Šค์–ด: https://www.data.go.kr/data/15101808/openapi.do

## ๐Ÿš€ ์„ค์น˜ ๋ฐ ์‹คํ–‰

`uv` (๋น ๋ฅธ Python ํŒจํ‚ค์ง€ ์„ค์น˜ ๋ฐ ์‹คํ–‰ ๋„๊ตฌ) ๋˜๋Š” `Docker`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด MCP ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

### Smithery๋ฅผ ํ†ตํ•œ ์„ค์น˜

[Smithery](https://smithery.ai/server/@harimkang/mcp-korea-tourism-api)๋ฅผ ํ†ตํ•ด Claude ๋ฐ์Šคํฌํ†ฑ์šฉ ํ•œ๊ตญ ๊ด€๊ด‘ API MCP ์„œ๋ฒ„๋ฅผ ์ž๋™์œผ๋กœ ์„ค์น˜ํ•˜๋ ค๋ฉด:

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

### ์˜ต์…˜ 1: `uv` ์‚ฌ์šฉ (๋กœ์ปฌ ๊ฐœ๋ฐœ์— ๊ถŒ์žฅ)

1. **์ €์žฅ์†Œ ๋ณต์ œ:**
```bash
git clone https://github.com/harimkang/mcp-korea-tourism-api.git
cd mcp-korea-tourism-api
```
2. **API ํ‚ค ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •:**
`"YOUR_KTO_API_KEY"`๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์€ ์‹ค์ œ ํ‚ค๋กœ ๋ฐ”๊พธ์„ธ์š”.

```bash
# macOS/Linux
export KOREA_TOURISM_API_KEY="YOUR_KTO_API_KEY"

# Windows (๋ช…๋ น ํ”„๋กฌํ”„ํŠธ)
# set KOREA_TOURISM_API_KEY="YOUR_KTO_API_KEY"

# Windows (PowerShell)
# $env:KOREA_TOURISM_API_KEY="YOUR_KTO_API_KEY"
```

_์ฐธ๊ณ : ์˜๊ตฌ ์ €์žฅ์„ ์œ„ํ•ด ์ด ์ค„์„ ์…ธ ์„ค์ • ํŒŒ์ผ(์˜ˆ: `.zshrc`, `.bashrc`)์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์„ธ์š”._

3. **์˜์กด์„ฑ ์„ค์น˜ ๋ฐ ์„œ๋ฒ„ ์‹คํ–‰:**
์ด ๋ช…๋ น์–ด๋Š” `uv`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ `uv.lock` (์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ) ๋˜๋Š” `pyproject.toml`์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•œ ๋‹ค์Œ ์„œ๋ฒ„ ๋ชจ๋“ˆ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

```bash
# ์˜์กด์„ฑ ์„ค์น˜
uv sync

# ๊ธฐ๋ณธ๊ฐ’: stdio ์ „์†ก ๋ฐฉ์‹ (MCP ํด๋ผ์ด์–ธํŠธ์šฉ)
uv run -m mcp_tourism.server

# HTTP ์ „์†ก ๋ฐฉ์‹ (์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ)
uv run -m mcp_tourism.server --transport streamable-http --host 127.0.0.1 --port 8000

# SSE ์ „์†ก ๋ฐฉ์‹ (์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ)
uv run -m mcp_tourism.server --transport sse --host 127.0.0.1 --port 8080

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ
export MCP_TRANSPORT=streamable-http
export MCP_HOST=0.0.0.0
export MCP_PORT=3000
uv run -m mcp_tourism.server
```

์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜๊ณ  ์ง€์ •๋œ ์ „์†ก ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด MCP ์š”์ฒญ์„ ์ˆ˜์‹  ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค.

### ์˜ต์…˜ 2: Docker ์‚ฌ์šฉ (๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ/๋ฐฐํฌ์— ๊ถŒ์žฅ)

1. **์ €์žฅ์†Œ ๋ณต์ œ:**
```bash
git clone https://github.com/harimkang/mcp-korea-tourism-api.git
cd mcp-korea-tourism-api
```
2. **Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ:**
๋‹ค์–‘ํ•œ ์ „์†ก ๊ตฌ์„ฑ์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

```bash
# ๊ธฐ๋ณธ ๋นŒ๋“œ (stdio ์ „์†ก ๋ฐฉ์‹)
docker build -t mcp-korea-tourism-api .

# HTTP ์ „์†ก ๊ตฌ์„ฑ์œผ๋กœ ๋นŒ๋“œ
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 \
.

# SSE ์ „์†ก ๊ตฌ์„ฑ์œผ๋กœ ๋นŒ๋“œ
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 \
.
```

3. **Docker ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰:**
๋‹ค์–‘ํ•œ ์ „์†ก ๊ตฌ์„ฑ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
- **Stdio ์ „์†ก ๋ฐฉ์‹ (๊ธฐ๋ณธ๊ฐ’ - MCP ํด๋ผ์ด์–ธํŠธ์šฉ):**

```bash
docker run --rm -it \
-e KOREA_TOURISM_API_KEY="YOUR_KTO_API_KEY" \
mcp-korea-tourism-api
```

- **HTTP ์ „์†ก ๋ฐฉ์‹ (์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ):**

```bash
# ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ
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

# ์ƒํƒœ ํ™•์ธ: curl http://localhost:8000/health
```

- **SSE ์ „์†ก ๋ฐฉ์‹ (์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ):**

```bash
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
```

- **Docker Compose ์‚ฌ์šฉ (๊ถŒ์žฅ):**

```bash
# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ณต์‚ฌ ๋ฐ ๊ตฌ์„ฑ
cp docker.env.example .env
# .env ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์—ฌ API ํ‚ค์™€ ์„ ํ˜ธํ•˜๋Š” ์„ค์ •์„ ์ž…๋ ฅ

# HTTP ์ „์†ก ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ (๊ธฐ๋ณธ ํ”„๋กœํ•„)
docker-compose up mcp-tourism-http

# SSE ์ „์†ก ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰
docker-compose --profile sse up mcp-tourism-sse

# ๋””๋ฒ„๊ทธ ๋กœ๊น…์„ ํฌํ•จํ•œ ๊ฐœ๋ฐœ ์„ค์ •์œผ๋กœ ์‹คํ–‰
docker-compose --profile dev up mcp-tourism-dev
```

## ๐Ÿ”ง ์ „์†ก ๋ฐฉ์‹ ๊ตฌ์„ฑ

ํ•œ๊ตญ ๊ด€๊ด‘ API MCP ์„œ๋ฒ„๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๋Š” ์—ฌ๋Ÿฌ ์ „์†ก ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

### ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ „์†ก ๋ฐฉ์‹

1. **`stdio`** (๊ธฐ๋ณธ๊ฐ’): MCP ํด๋ผ์ด์–ธํŠธ์™€ ์ง์ ‘ ํ†ตํ•ฉ์„ ์œ„ํ•œ ํ‘œ์ค€ ์ž…๋ ฅ/์ถœ๋ ฅ ์ „์†ก ๋ฐฉ์‹
- ์ ํ•ฉํ•œ ์šฉ๋„: Claude Desktop, Cursor ๋ฐ ๊ธฐํƒ€ MCP ํ˜ธํ™˜ AI ์–ด์‹œ์Šคํ„ดํŠธ
- ๊ตฌ์„ฑ: ์ถ”๊ฐ€ ์„ค์ • ๋ถˆํ•„์š”

2. **`streamable-http`**: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ HTTP ๊ธฐ๋ฐ˜ ์ „์†ก ๋ฐฉ์‹
- ์ ํ•ฉํ•œ ์šฉ๋„: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, REST API ํ†ตํ•ฉ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ
- ํŠน์ง•: HTTP ์—”๋“œํฌ์ธํŠธ, ์ƒํƒœ ํ™•์ธ, JSON ์‘๋‹ต
- ๊ธฐ๋ณธ ์—”๋“œํฌ์ธํŠธ: `http://localhost:8000/mcp`

3. **`sse`**: ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ Server-Sent Events ์ „์†ก ๋ฐฉ์‹
- ์ ํ•ฉํ•œ ์šฉ๋„: ์‹ค์‹œ๊ฐ„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜
- ํŠน์ง•: ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ, ์ง€์†์  ์—ฐ๊ฒฐ
- ๊ธฐ๋ณธ ์—”๋“œํฌ์ธํŠธ: `http://localhost:8080/mcp`

### ๊ตฌ์„ฑ ์˜ต์…˜

๋ช…๋ น์ค„ ์ธ์ˆ˜ ๋˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

| ์„ค์ • | CLI ์ธ์ˆ˜ | ํ™˜๊ฒฝ ๋ณ€์ˆ˜ | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… |
| --------- | ------------- | --------------- | ----------- | ---------------------------- |
| ์ „์†ก ๋ฐฉ์‹ | `--transport` | `MCP_TRANSPORT` | `stdio` | ์‚ฌ์šฉํ•  ์ „์†ก ํ”„๋กœํ† ์ฝœ |
| ํ˜ธ์ŠคํŠธ | `--host` | `MCP_HOST` | `127.0.0.1` | HTTP ์ „์†ก์„ ์œ„ํ•œ ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ |
| ํฌํŠธ | `--port` | `MCP_PORT` | `8000` | HTTP ์ „์†ก์„ ์œ„ํ•œ ํฌํŠธ |
| ๊ฒฝ๋กœ | `--path` | `MCP_PATH` | `/mcp` | HTTP ์—”๋“œํฌ์ธํŠธ ๊ฒฝ๋กœ |
| ๋กœ๊ทธ ๋ ˆ๋ฒจ | `--log-level` | `MCP_LOG_LEVEL` | `INFO` | ๋กœ๊น… ๋ ˆ๋ฒจ |

### ๋ช…๋ น์ค„ ์˜ˆ์‹œ

```bash
# ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์˜ต์…˜์— ๋Œ€ํ•œ ๋„์›€๋ง ๋ณด๊ธฐ
python -m mcp_tourism.server --help

# ์‚ฌ์šฉ์ž ์ •์˜ ํฌํŠธ์—์„œ HTTP ์ „์†ก ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰
python -m mcp_tourism.server --transport streamable-http --port 3000 --log-level DEBUG

# SSE ์ „์†ก ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰
python -m mcp_tourism.server --transport sse --host 0.0.0.0 --port 8080
```

### ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์˜ˆ์‹œ

```bash
# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
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"

# ์„œ๋ฒ„ ์‹คํ–‰
python -m mcp_tourism.server
```

### ์ƒํƒœ ํ™•์ธ

HTTP ๋ฐ SSE ์ „์†ก ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ `/health` ์—”๋“œํฌ์ธํŠธ์—์„œ ์ƒํƒœ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

```bash
# ์„œ๋ฒ„ ์ƒํƒœ ํ™•์ธ
curl http://localhost:8000/health

# ์˜ˆ์‹œ ์‘๋‹ต
{
"status": "healthy",
"service": "Korea Tourism API MCP Server",
"transport": "streamable-http",
"timestamp": 1640995200.0
}
```

## ๐Ÿ› ๏ธ Cursor์™€ ํ†ตํ•ฉํ•˜๊ธฐ

Cursor ๋‚ด์—์„œ ์ด MCP ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด:

1. **Docker ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๊ฐ€๋Šฅ ํ™•์ธ:** ์œ„์˜ Docker ์„ค์น˜ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ผ ์ด๋ฏธ์ง€(`mcp-korea-tourism-api`)๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. Cursor๊ฐ€ ์•Œ์•„์„œ ํ•ฉ๋‹ˆ๋‹ค.
2. **`mcp.json` ํŒŒ์ผ ์ฐพ๊ธฐ:** ์ด ํŒŒ์ผ์€ Cursor์šฉ MCP ๋„๊ตฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Cursor ์„ค์ •์ด๋‚˜ `~/.cursor/mcp.json`๊ณผ ๊ฐ™์€ ๊ฒฝ๋กœ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
3. **MCP ๊ตฌ์„ฑ ์ถ”๊ฐ€ ๋˜๋Š” ์—…๋ฐ์ดํŠธ:** `mcp.json` ํŒŒ์ผ ๋‚ด ๋ชฉ๋ก์— ๋‹ค์Œ JSON ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ์— ๋Œ€ํ•œ ํ•ญ๋ชฉ์ด ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ `command`๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. `"YOUR_KTO_API_KEY"`๋ฅผ ์‹ค์ œ ํ‚ค๋กœ ๋ฐ”๊พธ์„ธ์š”.
![cursor_integrations](images/cursor_integration.png)

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

๋˜๋Š” uv ์‚ฌ์šฉ [๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ]

```json
{
"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. **`mcp.json` ์ €์žฅ**.
5. **Cursor ์žฌ์‹œ์ž‘ ๋˜๋Š” MCP ๋„๊ตฌ ์ƒˆ๋กœ๊ณ ์นจ:** Cursor๊ฐ€ ์ด์ œ ๋„๊ตฌ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ํ•„์š”ํ•  ๋•Œ Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

## ๐Ÿ› ๏ธ ์ œ๊ณต๋˜๋Š” MCP ๋„๊ตฌ

์ด ์„œ๋ฒ„๋Š” AI ์–ด์‹œ์Šคํ„ดํŠธ๋ฅผ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

1. `search_tourism_by_keyword`: ํ‚ค์›Œ๋“œ(์˜ˆ: "๊ฒฝ๋ณต๊ถ", "๋น„๋น”๋ฐฅ")๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๊ด‘ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ  ์œ ํ˜•, ์ง€์—ญ ์ฝ”๋“œ๋กœ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
![search_tourism_by_keyword](images/search_tourism_by_keyword.png)
2. `get_tourism_by_area`: ์ง€์—ญ ์ฝ”๋“œ(์˜ˆ: ์„œ์šธ='1')๋กœ ๊ด€๊ด‘ ์ •๋ณด๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ  ์œ ํ˜•, ์‹œ๊ตฐ๊ตฌ ์ฝ”๋“œ๋กœ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
![get_tourism_by_area](images/get_tourism_by_area.png)
3. `find_nearby_attractions`: ํŠน์ • GPS ์ขŒํ‘œ(๊ฒฝ๋„, ์œ„๋„) ๊ทผ์ฒ˜์˜ ๊ด€๊ด‘ ๋ช…์†Œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๊ฒฝ ๋ฐ ์ฝ˜ํ…์ธ  ์œ ํ˜•์œผ๋กœ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
![find_nearby_attractions](images/find_nearby_attractions.png)
4. `search_festivals_by_date`: ์ง€์ •๋œ ๋‚ ์งœ ๋ฒ”์œ„(YYYYMMDD) ๋‚ด์— ์—ด๋ฆฌ๋Š” ์ถ•์ œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ง€์—ญ ์ฝ”๋“œ๋กœ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
![search_festivals_by_date](images/search_festivals_by_date.png)
5. `find_accommodations`: ํ˜ธํ…”, ๊ฒŒ์ŠคํŠธํ•˜์šฐ์Šค ๋“ฑ์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ง€์—ญ ๋ฐ ์‹œ๊ตฐ๊ตฌ ์ฝ”๋“œ๋กœ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
![find_accommodations](images/find_accommodations.png)
6. `get_detailed_information`: ์ฝ˜ํ…์ธ  ID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ํฌ๊ด„์ ์ธ ์ƒ์„ธ ์ •๋ณด(๊ฐœ์š”, ์ด์šฉ ์‹œ๊ฐ„, ์ฃผ์ฐจ ๋“ฑ)๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ  ์œ ํ˜•์œผ๋กœ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
![get_detailed_information](images/get_detailed_information.png)
7. `get_tourism_images`: ์ฝ˜ํ…์ธ  ID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๊ด€๊ด‘ ํ•ญ๋ชฉ๊ณผ ๊ด€๋ จ๋œ ์ด๋ฏธ์ง€ URL์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
![get_tourism_images](images/get_tourism_images.png)
8. `get_area_codes`: ์ง€์—ญ ์ฝ”๋“œ(์‹œ/๋„) ๋ฐ ์„ ํƒ์ ์œผ๋กœ ํ•˜์œ„ ์ง€์—ญ(์‹œ๊ตฐ๊ตฌ) ์ฝ”๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
![get_area_codes](images/get_area_codes.png)

## โš™๏ธ ์š”๊ตฌ ์‚ฌํ•ญ (`uv` ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ)

- Python 3.12 ์ด์ƒ
- `uv` ์„ค์น˜๋จ (`pip install uv`)

## ์‚ฌ์šฉ ์˜ˆ์‹œ

์ด MCP์™€ ํ†ตํ•ฉ๋œ AI ์–ด์‹œ์Šคํ„ดํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

- "๋ช…๋™์—ญ ๊ทผ์ฒ˜ ์‹๋‹น ์ฐพ์•„์ค˜."
- "๋ถˆ๊ตญ์‚ฌ ์‚ฌ์ง„ ๋ณด์—ฌ์ค˜."
- "๋‹ค์Œ ๋‹ฌ ๋ถ€์‚ฐ์— ์ถ•์ œ ์žˆ์–ด?"
- "๊ฒฝ๋ณต๊ถ(์ฝ˜ํ…์ธ  ID 264337)์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์•Œ๋ ค์ค˜."