naver-search-mcp

wookja-0/naver-search-mcp

3.1

If you are the rightful owner of naver-search-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

This guide provides instructions for setting up a Naver Search MCP server and exposing it as an SSE endpoint on Kubernetes.

Naver Search MCP (K8s + SSE Proxy)

Author: Jung Wookjin

๋„ค์ด๋ฒ„ ๊ฒ€์ƒ‰/DataLab API๋ฅผ MCP ์„œ๋ฒ„๋กœ ์ œ๊ณตํ•˜๊ณ , Kubernetes์—์„œ SSE(HTTP) ์—”๋“œํฌ์ธํŠธ๋กœ ๋…ธ์ถœํ•˜๋Š” ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค.
๋ฐฑ์—”๋“œ๋Š” transport="sse"๋กœ /sse์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

0) Clone

git clone https://github.com/wookja-0/naver-search-mcp.git
cd naver-search-mcp

1) ํ™˜๊ฒฝ ๋ณ€์ˆ˜

# ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ (์˜ˆ: ghcr.io/org, harbor.example.com/team ๋“ฑ)
export REGISTRY="__YOUR_REGISTRY__/__YOUR_PROJECT__"

# ์ด๋ฏธ์ง€ ํƒœ๊ทธ (์›ํ•˜๋ฉด ๋ณ€๊ฒฝ)
export IMAGE_BASE="$REGISTRY/mcp-server:v1.0"
export IMAGE_SSE="$REGISTRY/mcp-server:sse-proxy"

2) Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ & ํ‘ธ์‹œ

2-1. MCP ์„œ๋ฒ„ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ (v1.0)

docker build -t "$IMAGE_BASE" . --network host
docker push "$IMAGE_BASE"

2-2. SSE ํ”„๋ก์‹œ ์ด๋ฏธ์ง€ (stdio โ†” SSE ๋ณ€ํ™˜ ํฌํ•จ)

Dockerfile.sse Base Image ๋ถ€๋ถ„์— ์‹ค์ œ IMAGE_BASE ์ด๋ฏธ์ง€๋กœ ๋ณ€๊ฒฝ
docker build -f Dockerfile.sse -t "$IMAGE_SSE" . --network host
docker push "$IMAGE_SSE"

Dockerfile.sse๋Š” ์ปจํ…Œ์ด๋„ˆ์— mcp-proxy๋ฅผ ์„ค์น˜ํ•˜๊ณ  docker-entrypoint.sh๋กœ /sse, /status๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

3) Kubernetes ๋ฐฐํฌ

์•„๋ž˜ ์˜ˆ์‹œ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ dmp-poc๋กœ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ๋ณ€๊ฒฝํ•˜์„ธ์š”.

3-1. (์„ ํƒ) ๋กœ๊ทธ PVC

kubectl -n dmp-poc apply -f manifest/pvc.yaml

3-2. ์„œ๋ฒ„์šฉ Secret (Naver Developers ํ‚ค)

kubectl -n dmp-poc create secret generic naver-api-keys   --from-literal=NAVER_CLIENT_ID='<your-client-id>'   --from-literal=NAVER_CLIENT_SECRET='<your-client-secret>'

3-3. Deployment / Service

kubectl -n dmp-poc apply -f manifest/deployment.yaml
kubectl -n dmp-poc apply -f manifest/service.yaml

# ๋ฐฐํฌ ํ›„ ์‹ค์ œ ์ด๋ฏธ์ง€๋กœ ๊ต์ฒด(์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„: sse-proxy)
kubectl -n dmp-poc set image deploy/mcp-server sse-proxy="$IMAGE_SSE"

kubectl -n dmp-poc rollout status deploy/mcp-server

๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์ด mcp-server์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”. (Deployment/Service ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ name)

4) ๋™์ž‘ ํ™•์ธ

# ์ƒํƒœ ํ™•์ธ
kubectl -n dmp-poc port-forward svc/mcp-server 8080:8080
curl http://127.0.0.1:8080/status     # JSON ์‘๋‹ต์ด๋ฉด OK

๋กœ๊ทธ:

# ํ”„๋ก์‹œ ํ‘œ์ค€๋กœ๊ทธ
kubectl -n dmp-poc logs deploy/mcp-server -f

# ์•ฑ ๋กœ๊ทธ(PVC ์‚ฌ์šฉ ์‹œ)
# ์˜ˆ) NFS ๊ฒฝ๋กœ์— app.log ์ƒ์„ฑ/์ฆ๊ฐ€

5) ๋ฐฑ์—”๋“œ(ํด๋ผ์ด์–ธํŠธ) ์—ฐ๊ฒฐ ์˜ˆ์‹œ

from langchain_mcp_adapters.client import MultiServerMCPClient

mcp_client = MultiServerMCPClient(
    {
        "naver-search-mcp": {
            "transport": "sse",
            "url": "http://mcp-server.dmp-poc.svc.cluster.local:8080/sse"
        }
    }
)

Smithery ์ „์šฉ ๊ฒฝ๋กœ(/@org/server/mcp?...)๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ์—๋Š” NAVER_CLIENT_ID/SECRET(K8s Secret)์ด ์ฃผ์ž…๋˜์–ด ๋„ค์ด๋ฒ„ API๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

6) ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…(์งง๊ฒŒ)

  • /status 200 ์•„๋‹˜ โ†’ kubectl logs๋กœ ํ”„๋ก์‹œ/์•ฑ ๋กœ๊ทธ ํ™•์ธ
  • ์—ฐ๊ฒฐ๋๋Š”๋ฐ ๊ฒฐ๊ณผ ์—†์Œ โ†’ transport="sse" & URL /sse ํ™•์ธ
  • ๋กœ๊ทธ ํŒŒ์ผ ์•ˆ ์Œ“์ž„ โ†’ PVC ๊ถŒํ•œ(fsGroup)ยท๋งˆ์šดํŠธ ๊ฒฝ๋กœ ์ ๊ฒ€

License: MIT