Skip to content

feat(session-mcp): drop_upload·drop_download — 공유 볼륨 ↔ drop 파일 전달 (SA 인증, 승인 게이트 예외) - #178

Merged
dlddu merged 2 commits into
mainfrom
feat/session-mcp-drop
Nov 1, 2026
Merged

dlddu merged 2 commits into
mainfrom
feat/session-mcp-drop

Conversation

@dlddu

@dlddu dlddu commented Nov 1, 2026

Copy link
Copy Markdown
Owner

요약

세션 MCP 에 drop_upload·drop_download 를 더한다. 공유 볼륨 ↔ drop(dlddu/drop) 파일 전달을 헬퍼 파드가 자기 ServiceAccount(audience drop projected 토큰 → drop 의 TokenReview → 단기 키)로 수행한다. 게이트 세션의 워크로드 파드는 밖으로 나갈 수 없으므로(AC-F2), 에이전트는 공유 볼륨 경로만 넘긴다.

  • 파일 바이트는 MCP 인자·결과를 지나지 않는다 — 대화 컨텍스트 절약(사용자 결정 2026-11-01). AC-I1
  • 승인 게이트 대상 아님(사용자 결정 2026-11-01) — docs/session-mcp-tool-surface.md R1 예외 4·5 와 조건 넷(고정된 내부 엔드포인트 drop 하나, 헬퍼 자기 SA, 이미 공유 볼륨에 있는 파일만 나감, 받기는 볼륨 안에만 씀). AC-F6 C2 이탈을 명시 기록.
  • DROP_URL 미설정이면 도구 미노출. 프리뷰 네임스페이스는 drop SA_ALLOW 밖이라 403 fail-closed.

도구

  • drop_upload {paths[1..100], days?=7, id?, password?} → {id, password, url, files, bytes, expires_at} — 항상 조각 API(16MiB, 409 이어 올리기, 307 재전송), 디렉터리·볼륨 밖 경로·..·바깥 심볼릭 링크 거부
  • drop_download {id, password, files?, dest?="drop/<id>", overwrite?=false} → {id, dest, files:[{name,path,size}], bytes, expires_at} — os.Root 로 스트리밍, 이름 정화, 기존 파일 보존

배선

  • control-plane WithDropURL: audience drop projected 토큰(/var/run/secrets/drop/token)과 DROP_URL·DROP_TOKEN_FILE 을 session-mcp 컨테이너에만
  • k8s/deployment.yaml: DROP_URL=http://drop-external.drop.svc.cluster.local (env 끝에 추가, e2e overlay 는 index 17 patch)

테스트

  • 단위(가짜 drop: 교환·조각·409·307·받기·경로 경계·미설정) / 통합(헬퍼 파드 모양) / e2e(kind 에 실물 drop — DROP_SHA 소스 빌드, auth-delegator 바인딩, SA_ALLOW=default/session-mcp): 워크로드에 파일 → drop_upload → drop 받기 API 확인 → drop_download → 승인 마커 없음
  • 시나리오 1–3 은 e2e.md 유예표(매핑 게이트는 Playwright 만 짝으로 셈 — 시나리오 1 은 이 Go e2e 가 현행 검증)
  • 정적 게이트 4종 통과

배포 전제

dlddu/drop#2(교환 엔드포인트, SA_ALLOW 에 session-platform/session-mcp) · dlddu/flux-cd-apps#99(auth-delegator, drop-external).


Generated by Claude Code

@dlddu
dlddu force-pushed the feat/session-mcp-drop branch from e5b7590 to 127158e Compare November 1, 2026 09:08
헬퍼 파드의 세션 MCP 가 공유 볼륨의 파일을 같은 운영자의 클러스터 안 파일 전달
서비스 drop 으로 올리고(조각 API, 409 이어 올리기, 307 재전송) 받아 온다(os.Root
안에서 임시 파일 → renameat). 인자·결과에는 경로·메타데이터만 싣는다 — 파일 바이트가
MCP 도구 I/O 를 지나면 대화 컨텍스트를 태운다.

인증은 session-mcp 서비스 어카운트의 projected 토큰(audience drop)을 drop 이
drk_ 단기 키로 바꿔 주는 것이고, 토큰 볼륨은 세션 MCP 컨테이너에만 마운트한다.
DROP_URL 이 비면 도구가 목록에 오르지 않는다. 사용자 결정(2026-11-01)으로 승인
게이트를 지나지 않는다 — 문서의 R1 예외 등재는 다음 커밋.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Xb2pEKVsNtfhXhHWKEjxU
- docs/prd/drop-file-share.md(AC-I1~I4)·docs/test/drop-file-share.md(시나리오 3) 신설.
  파일 바이트는 MCP 인자·결과를 지나지 않는다(대화 컨텍스트) — AC-I1.
- docs/session-mcp-tool-surface.md: 도구 7개, R1 의 넷째·다섯째 명시적 예외
  (사용자 결정 2026-11-01 「승인 게이트 대상은 아니야」)와 그 네 조건, R9 의 C1~C4 대조,
  R11 의 dest 이탈 근거. approval-gated PRD 머리 성질·AC-F6 에 2026-11-01 확정
  항목(C2 이탈 기록), minimax-code PRD V1 문장 정정.
- kind SUT: deploy/e2e-drop.yaml(실물 drop, DROP_SHA 소스 빌드 — 발행 이미지는
  arm64 전용, system:auth-delegator, SA_ALLOW=default/session-mcp), up.sh 빌드·대기,
  오버레이가 env/17(DROP_URL)을 인클러스터 Service 로 바꾼다.
- control-plane/test/e2e_drop_1_round_trip_test.go: 공유 볼륨 → drop → 공유 볼륨
  왕복을 실 CLI 의 도구 호출로, 승인 마커 없이. e2e.md 유예 표에 대체 검증으로 등재.
- doc-tracker 2026-11 월 파일, 허브 행.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Xb2pEKVsNtfhXhHWKEjxU
@dlddu
dlddu force-pushed the feat/session-mcp-drop branch from 127158e to e1b392b Compare November 1, 2026 10:17
@dlddu
dlddu merged commit 89428a5 into main Nov 1, 2026
17 checks passed
@dlddu
dlddu deleted the feat/session-mcp-drop branch November 1, 2026 10:27
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