Skip to content

feat(minimax-code): mcp-servers 플러그인을 loopback K3s MCP 프록시로 배선 (AC-G5) - #156

Closed
dlddu wants to merge 1 commit into
mainfrom
feat/minimax-code-k3s-mcp-plugin
Closed

dlddu wants to merge 1 commit into
mainfrom
feat/minimax-code-k3s-mcp-plugin

Conversation

@dlddu

@dlddu dlddu commented Oct 23, 2026

Copy link
Copy Markdown
Owner

무엇을

minimax-code 세션에도 plugin-marketplace의 mcp-servers 플러그인(홈랩 K3s MCP 도구) 을 싣는다 — PRD AC-G5 신설.

왜 사이드카인가

mcode(0.6.12)는 플러그인 MCP 설정의 헤더에서 ${VAR}를 치환하지 않고, oauthClientId 같은 OAuth 필드가 있으면 서버를 거부한다. 플러그인을 그대로 쓰려면 K3s 토큰을 HOME 아래 파일에 평문으로 적어야 하는데 HOME은 아카이브된다(AC-G4). 그래서 토큰은 워크로드 파드의 세 번째 컨테이너 k3s-mcp-proxy 에만 두고, CLI 컨테이너는 loopback만 본다. AC-G3(주 컨테이너에 K3S_MCP_TOKEN 금지, claude-code Secret 미참조)은 그대로 성립한다.

변경

  • data plane k3s-mcp-proxy 워크로드 — credential-proxy 구현(newHeaderScopedProxy로 추출)을 MCP Streamable HTTP 헤더 허용 목록으로 재사용. 127.0.0.1:8093, 상류는 K3s MCP origin 고정, 호출자 Authorization 제거 후 Bearer 주입, 응답 redaction. 토큰이 없으면 configured:false로 기동하고 그 밖의 요청은 503 → 키 없는 배포는 실패가 아니라 플러그인 없는 세션.
  • entrypoint (minimax-code) — 사이드카 /healthz 확인(기동 경합은 재시도) → loopback 경유 github_app_installation_token → URL 범위 extraheader로 marketplace 얕은 클론 → mcp-servers의 K3s MCP 서버를 http://127.0.0.1:8093/mcp로 바꾸고 oauthClientId·Authorization 제거 → 상태 트리 밖 seed로 스테이징. K3s MCP가 아닌 서버는 남의 토큰으로 라우팅하지 않도록 거부.
  • agent — 기동·복원마다 seed를 ~/.minimax/plugins/에 통째로 복사하고 .session-platform-managed 표식 플러그인만 관리(사용자가 넣은 플러그인은 보존, 복원된 HOME이 이전 파드 플러그인을 되살리지 못함).
  • control plane — minimax-code 파드에 k3s-mcp-proxy 사이드카, 이 타입 Secret의 선택 키 k3s-mcp-token 만 참조.
  • PRD AC-G5 신설·AC-G1/G3 개정, data-plane README, Secret 예시.

검증

  • 실측(mcode 0.6.12, shell 세션): 가짜 MCP 서버 + Anthropic 캡처 서버로 mcode exec --config <관리형 설정> 실행 → HOME의 Claude 형식 플러그인을 읽어 MCP initialize·tools/list(+SSE GET) 호출, 모델 요청 tools에 mcp__k3s__fake_ping 포함 확인.
  • 단위: k3s_mcp_proxy_test.go(origin 축약·https 강제, 미구성 503, Bearer 주입·허용 목록·Mcp-Session-Id 양방향·redaction), minimax_plugins_test.go(설치·교체·표식만 제거·symlink 거부·ensureHome), entrypoint_minimax_test.go(loopback 전용 호출·URL 범위 header·변환 결과, 미구성 스킵, 외부 서버 거부).
  • 통합: TestMiniMaxCode_* (컨테이너 셋, 토큰은 사이드카 선택 키만, 다른 컨테이너엔 없음).
  • go vet(+e2e 태그)·gofmt·주석 정책·시나리오 매핑 게이트 통과. 등재 파일에는 주석을 더하지 않았다.

운영 반영 순서

  1. 이 PR 머지(키 없이도 동작 — 사이드카는 unconfigured로 뜬다)
  2. flux-cd-apps PR: minimax ExternalSecret이 claude-code SSM 파라미터의 k3s-mcp-token 한 키만 가져오게 함
  3. CreatedOnce라 minimax-code-credentials Secret을 한 번 지워 재생성 → 새 minimax 세션부터 K3s MCP 도구 사용 가능

Generated by Claude Code

minimax-code 세션에도 plugin-marketplace의 mcp-servers 플러그인(홈랩 K3s MCP 도구)을
싣는다. mcode는 플러그인 MCP 헤더의 ${VAR}를 치환하지 않고 OAuth 필드를 거부하므로,
토큰을 HOME(아카이브 대상)에 쓰지 않도록 워크로드 파드에 세 번째 컨테이너
k3s-mcp-proxy를 둔다.

- data plane: credential-proxy 구현을 헤더 허용 목록만 바꿔 재사용하는 k3s-mcp-proxy
  워크로드(127.0.0.1:8093, MCP Streamable HTTP 헤더, origin 고정, Bearer 주입).
  토큰이 없으면 configured:false로 기동하고 그 밖의 요청은 503.
- entrypoint: minimax-code에서 사이드카 /healthz 확인 → loopback 경유로
  github_app_installation_token → URL 범위 extraheader로 marketplace 클론 →
  mcp-servers의 K3s MCP 서버를 loopback URL로 바꾸고 oauthClientId·Authorization을
  지워 상태 트리 밖 seed로 스테이징. K3s MCP가 아닌 서버는 거부.
- agent: 기동·복원마다 seed를 ~/.minimax/plugins로 통째 복사하고 플랫폼 표식만 관리.
- control plane: minimax-code 파드에 k3s-mcp-proxy 사이드카, 이 타입 Secret의 선택
  키 k3s-mcp-token만 참조. 주 컨테이너는 그대로 K3S_MCP_TOKEN 없음(AC-G3).
- PRD AC-G5 신설, AC-G1·G3 개정, README·Secret 예시 갱신.

mcode 0.6.12가 exec --config 아래서도 HOME의 Claude 형식 플러그인 MCP를 로드해
mcp__k3s__* 도구를 모델 요청에 싣는 것은 shell 세션에서 가짜 MCP·캡처 서버로 실측.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011MtKFxuPycK3WQah8Kdwcr

dlddu commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

#157 에 포함되어 함께 머지됐습니다 (b7d9f93). minimax-code 가 헬퍼 파드 배치로 바뀌면서 k3s-mcp-proxy 와 marketplace 부트스트랩은 헬퍼 파드로 옮겨졌습니다.


Generated by Claude Code

@dlddu dlddu closed this Oct 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants