From fa77844827f2b5e0eaaa522e9545c44a23459ed6 Mon Sep 17 00:00:00 2001 From: hemsej018 Date: Tue, 12 Aug 2025 21:27:14 +0900 Subject: [PATCH 1/4] =?UTF-8?q?refactor:=20=EB=9E=98=ED=8D=BC=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A6=BD=ED=8A=B8=EB=A5=BC=20=EB=A7=8C=EB=93=A4?= =?UTF-8?q?=EC=96=B4=20=EC=BB=A4=EB=A7=A8=EB=93=9C=EB=AA=85=20=EC=9C=A0?= =?UTF-8?q?=EC=A7=80=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=8F=84=EC=BB=A4?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cs25-service/Dockerfile | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/cs25-service/Dockerfile b/cs25-service/Dockerfile index 30d01c72..e1dbbafe 100644 --- a/cs25-service/Dockerfile +++ b/cs25-service/Dockerfile @@ -22,31 +22,29 @@ LABEL type="application" module="cs25-service" # 작업 디렉토리 WORKDIR /apps -# Node.js + npm 설치 후, MCP 서버 전역 설치 + 심볼릭 링크 생성 + 빌드 타임 확인 +# Node.js 22 설치 + 공식 Brave MCP 서버 설치 + 래퍼 스크립트 생성 RUN apt-get update \ && apt-get install -y --no-install-recommends curl ca-certificates gnupg bash \ - && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ + && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ && apt-get install -y --no-install-recommends nodejs \ \ - # 1) 전역 설치 - && npm install -g @modelcontextprotocol/server-brave-search \ + # 공식 패키지 설치 (deprecated 패키지 제거) + && npm install -g @brave/brave-search-mcp-server \ \ - # 2) 전역 prefix/bin 경로 계산 (npm bin -g 대신 npm prefix -g 사용) + # 전역 모듈 경로 계산 && NPM_PREFIX="$(npm prefix -g)" \ - && SRC_BIN="${NPM_PREFIX}/bin/server-brave-search" \ + && SRCDIR="${NPM_PREFIX}/lib/node_modules/@brave/brave-search-mcp-server" \ \ - # 3) 심볼릭 링크 생성 (/usr/local/bin 에 고정 경로 제공) - && ln -sf "${SRC_BIN}" /usr/local/bin/server-brave-search \ + # 실행 래퍼 스크립트 생성: server-brave-search (STDIO 고정) + && printf '#!/usr/bin/env bash\nexec node "%s/dist/index.js" --transport stdio "$@"\n' "$SRCDIR" > /usr/local/bin/server-brave-search \ + && chmod +x /usr/local/bin/server-brave-search \ \ - # ===== 실행 가능 여부 확인 ===== - && echo "=== npm prefix -g ===" && echo "${NPM_PREFIX}" \ - && echo "=== 실제 바이너리 위치 확인 ===" && ls -l "${SRC_BIN}" \ - && echo "=== 심볼릭 링크 확인 ===" && ls -l /usr/local/bin/server-brave-search \ - && echo "=== server-brave-search --help 실행 ===" \ - && /usr/local/bin/server-brave-search --help || (echo "[ERROR] server-brave-search 실행 실패" && exit 1) \ + # 설치/실행 점검 + && echo "=== which server-brave-search ===" && which server-brave-search \ + && echo "=== server-brave-search --help ===" && server-brave-search --help || (echo "[ERROR] server-brave-search 실행 실패" && exit 1) \ \ + # 정리 && npm cache clean --force \ - && apt-get purge -y gnupg \ && apt-get autoremove -y --purge \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* From 0d4fbb76d4daa0214a734ce465408595a7bd0c87 Mon Sep 17 00:00:00 2001 From: hemsej018 Date: Wed, 13 Aug 2025 03:04:53 +0900 Subject: [PATCH 2/4] =?UTF-8?q?refactor:=20MCP=20=EC=84=9C=EB=B2=84=20fix?= =?UTF-8?q?=20stdio=20args?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cs25-service/Dockerfile | 10 +++++++--- cs25-service/src/main/resources/application.properties | 3 ++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/cs25-service/Dockerfile b/cs25-service/Dockerfile index e1dbbafe..d839cf7b 100644 --- a/cs25-service/Dockerfile +++ b/cs25-service/Dockerfile @@ -35,9 +35,13 @@ RUN apt-get update \ && NPM_PREFIX="$(npm prefix -g)" \ && SRCDIR="${NPM_PREFIX}/lib/node_modules/@brave/brave-search-mcp-server" \ \ - # 실행 래퍼 스크립트 생성: server-brave-search (STDIO 고정) - && printf '#!/usr/bin/env bash\nexec node "%s/dist/index.js" --transport stdio "$@"\n' "$SRCDIR" > /usr/local/bin/server-brave-search \ - && chmod +x /usr/local/bin/server-brave-search \ +# 실행 래퍼 (args는 전부 "$@"로 위임) +&& { \ + echo '#!/bin/sh'; \ + echo 'NODE=$(command -v node || echo /usr/bin/node)'; \ + echo 'exec "$NODE" "'"$SRCDIR"'/dist/index.js" "$@"'; \ +} > /usr/local/bin/server-brave-search \ +&& chmod 0755 /usr/local/bin/server-brave-search \ \ # 설치/실행 점검 && echo "=== which server-brave-search ===" && which server-brave-search \ diff --git a/cs25-service/src/main/resources/application.properties b/cs25-service/src/main/resources/application.properties index f5ea13aa..eed4922b 100644 --- a/cs25-service/src/main/resources/application.properties +++ b/cs25-service/src/main/resources/application.properties @@ -69,7 +69,8 @@ spring.ai.mcp.client.request-timeout=60s spring.ai.mcp.client.root-change-notification=false # STDIO Connect: Brave Search spring.ai.mcp.client.stdio.connections.brave.command=server-brave-search -spring.ai.mcp.client.stdio.connections.brave.args[0]=--stdio +spring.ai.mcp.client.stdio.connections.brave.args[0]=--transport +spring.ai.mcp.client.stdio.connections.brave.args[1]=stdio spring.ai.mcp.client.stdio.connections.brave.env.BRAVE_API_KEY=${BRAVE_API_KEY} spring.ai.mcp.client.initialized=false spring.autoconfigure.exclude=org.springframework.ai.model.tool.autoconfigure.ToolCallingAutoConfiguration From f9854e585b6a326d847fb73f9c59943f4b359d39 Mon Sep 17 00:00:00 2001 From: hemsej018 Date: Wed, 13 Aug 2025 04:13:06 +0900 Subject: [PATCH 3/4] =?UTF-8?q?chore:deprecated=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EC=A0=9C=EA=B1=B0,=20=EA=B3=B5=EC=8B=9D=20Brave=20?= =?UTF-8?q?MCP=20=EC=84=9C=EB=B2=84=20=EC=84=A4=EC=B9=98,=20=EB=9E=98?= =?UTF-8?q?=ED=8D=BC=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=EB=A1=9C=20ser?= =?UTF-8?q?ver-brave-search=20=EC=A0=9C=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cs25-service/Dockerfile | 51 +++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/cs25-service/Dockerfile b/cs25-service/Dockerfile index d839cf7b..6319de7c 100644 --- a/cs25-service/Dockerfile +++ b/cs25-service/Dockerfile @@ -22,36 +22,27 @@ LABEL type="application" module="cs25-service" # 작업 디렉토리 WORKDIR /apps -# Node.js 22 설치 + 공식 Brave MCP 서버 설치 + 래퍼 스크립트 생성 -RUN apt-get update \ - && apt-get install -y --no-install-recommends curl ca-certificates gnupg bash \ - && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ - && apt-get install -y --no-install-recommends nodejs \ - \ - # 공식 패키지 설치 (deprecated 패키지 제거) - && npm install -g @brave/brave-search-mcp-server \ - \ - # 전역 모듈 경로 계산 - && NPM_PREFIX="$(npm prefix -g)" \ - && SRCDIR="${NPM_PREFIX}/lib/node_modules/@brave/brave-search-mcp-server" \ - \ -# 실행 래퍼 (args는 전부 "$@"로 위임) -&& { \ - echo '#!/bin/sh'; \ - echo 'NODE=$(command -v node || echo /usr/bin/node)'; \ - echo 'exec "$NODE" "'"$SRCDIR"'/dist/index.js" "$@"'; \ -} > /usr/local/bin/server-brave-search \ -&& chmod 0755 /usr/local/bin/server-brave-search \ - \ - # 설치/실행 점검 - && echo "=== which server-brave-search ===" && which server-brave-search \ - && echo "=== server-brave-search --help ===" && server-brave-search --help || (echo "[ERROR] server-brave-search 실행 실패" && exit 1) \ - \ - # 정리 - && npm cache clean --force \ - && apt-get autoremove -y --purge \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* +# Node.js 22 + Brave MCP 서버 설치 + 실행 래퍼 생성 +RUN set -eux; \ + apt-get update; \ + apt-get install -y --no-install-recommends curl ca-certificates gnupg bash; \ + curl -fsSL https://deb.nodesource.com/setup_22.x | bash -; \ + apt-get install -y --no-install-recommends nodejs; \ + npm install -g @brave/brave-search-mcp-server; \ + NPM_PREFIX="$(npm prefix -g)"; \ + SRCDIR="${NPM_PREFIX}/lib/node_modules/@brave/brave-search-mcp-server"; \ + # 실행 래퍼 (전달 인자 전부 위임) + printf '%s\n' '#!/bin/sh' \ + 'exec node "'"$SRCDIR"'/dist/index.js" "$@"' \ + > /usr/local/bin/server-brave-search; \ + chmod 0755 /usr/local/bin/server-brave-search; \ + # sanity check (없으면 빌드 실패) + /usr/local/bin/server-brave-search --help >/dev/null; \ + # 정리 + npm cache clean --force; \ + apt-get purge -y gnupg; \ + apt-get autoremove -y --purge; \ + rm -rf /var/lib/apt/lists/* # jar 복사 From 67c1d3a6990c45f912ee0ad173727642a58ed398 Mon Sep 17 00:00:00 2001 From: hemsej018 Date: Wed, 13 Aug 2025 09:20:23 +0900 Subject: [PATCH 4/4] =?UTF-8?q?chore:=EC=95=B1=20=EB=B6=80=ED=8C=85?= =?UTF-8?q?=EC=8B=9C=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?ON?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cs25-service/src/main/resources/application.properties | 1 - 1 file changed, 1 deletion(-) diff --git a/cs25-service/src/main/resources/application.properties b/cs25-service/src/main/resources/application.properties index eed4922b..5cc8fa9c 100644 --- a/cs25-service/src/main/resources/application.properties +++ b/cs25-service/src/main/resources/application.properties @@ -72,7 +72,6 @@ spring.ai.mcp.client.stdio.connections.brave.command=server-brave-search spring.ai.mcp.client.stdio.connections.brave.args[0]=--transport spring.ai.mcp.client.stdio.connections.brave.args[1]=stdio spring.ai.mcp.client.stdio.connections.brave.env.BRAVE_API_KEY=${BRAVE_API_KEY} -spring.ai.mcp.client.initialized=false spring.autoconfigure.exclude=org.springframework.ai.model.tool.autoconfigure.ToolCallingAutoConfiguration #MAIL spring.mail.host=smtp.gmail.com