Skip to content

refactor(mcp): 디버그 대시보드 사용자 URL을 /attach?u= 에서 루트 /로 수렴 (#595)#598

Merged
DaveDev42 merged 1 commit into
mainfrom
refactor/595-attach-root-url
Jun 16, 2026
Merged

refactor(mcp): 디버그 대시보드 사용자 URL을 /attach?u= 에서 루트 /로 수렴 (#595)#598
DaveDev42 merged 1 commit into
mainfrom
refactor/595-attach-root-url

Conversation

@DaveDev42

Copy link
Copy Markdown
Collaborator

개요

build_attach_url MCP 도구가 브라우저로 여는(그리고 사용자에게 인쇄하는) URL을
http://127.0.0.1:<port>/attach?u=<intoss-private deep-link 인코딩> 에서
http://127.0.0.1:<port>/ (루트, server-state 렌더)로 수렴한다.

Closes #595

변경 내용

핵심 변경

  • src/mcp/qr-http-server.tsbuildAttachPageUrl이 루트 / URL을 반환하도록 변경. _attachUrl 인자는 여전히 받되(인터페이스 호환), server-state(getDashboardState)에서 파생하므로 무시. 주석으로 이유와 SECRET-HANDLING 명시.
  • src/mcp/tools.tsOpenQrInBrowserResult.httpUrl 설명 + openQrInBrowser JSDoc을 루트 URL 기준으로 갱신.

유지된 것

  • /attach?u= 라우트 자체는 back-compat으로 그대로 유지(기존 인쇄된 링크/QR 보호).
  • /qr.png?u= (stateless 이미지 헬퍼) — 변경 없음. pngUrl은 여전히 ?u= 사용.
  • tunnel.tsstartTunnelDashboard — 이미 루트 URL 사용 중이었으므로 변경 불필요.

보안 개선

이 변경으로 브라우저 주소창·히스토리에서 다음이 제거됨:

  • TOTP at= 코드 값
  • tunnel host (*.trycloudflare.com)
  • relay wss URL

QR 이미지 안에는 여전히 deep-link가 들어가지만, 폰이 스캔하는 데 필요하고 주소창에는 안 남는다.

검증 결과

  • pnpm build
  • pnpm typecheck
  • pnpm lint ✅ (errors 0)
  • pnpm test ✅ (91 passed, 1 skipped)
  • check:mcp-react-free ✅ (cli.js, server.js 모두 react-free)
  • check:dashboard-html-fresh ✅ (dashboard.generated.ts 최신)

테스트 변경

  • qr-browser.test.ts: buildAttachPageUrl 테스트를 루트 URL 검증으로 교체. 새 테스트 추가: httpUrl이 /이고 ?u=/at=를 포함하지 않음을 assert.
  • qr-http-server.test.ts: buildAttachPageUrl 사용 테스트들을 /attach?u= 직접 URL로 교체 (back-compat 라우트 검증 유지).

UI 회귀 검증

루트 / 대시보드는 기존에도 buildDashboardHtml(server-state 렌더)로 서빙되어 SSE self-refresh·QR·inspector 섹션이 완비되어 있다. env 2(startTunnelDashboard)도 이미 루트를 사용 중이었으므로 회귀 없음. 수동 대시보드 시각 검증은 메인 세션에서.

SECRET-HANDLING 준수

  • 로그·오픈 URL은 http://127.0.0.1:<port>(루트, 쿼리 없음)만.
  • tunnel host·relay wss·TOTP at= 코드는 QR 이미지·SSE payload·/qr.png?u= query 안에만.
  • 커밋·PR 본문에 시크릿 값 미포함.

buildAttachPageUrl이 반환하는 사용자 대면 URL을
http://127.0.0.1:<port>/attach?u=<encoded> 에서
http://127.0.0.1:<port>/ (루트, server-state 렌더)로 변경한다.

같은 MCP 데몬이 attachUrl을 이미 in-memory로 보유하므로
?u= 쿼리는 redundant하고, TOTP at=·tunnel host가 주소창/
히스토리에 남는 시크릿 노출 표면이었다.

- qr-http-server.ts: buildAttachPageUrl이 루트 / 반환
- tools.ts: OpenQrInBrowserResult.httpUrl 설명 + JSDoc 업데이트
- /attach?u= 라우트는 back-compat으로 유지 (기존 링크 보호)
- 테스트: buildAttachPageUrl 루트 URL 검증 + 새 시크릿 격리 assert
  → /attach?u= 라우트를 직접 URL로 검증하는 테스트는 유지
@DaveDev42 DaveDev42 merged commit 62aeb96 into main Jun 16, 2026
2 checks passed
@DaveDev42 DaveDev42 deleted the refactor/595-attach-root-url branch June 16, 2026 11:39
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.

디버그 대시보드: /attach?u=<deep-link> 를 루트 / (server-state 렌더)로 수렴 — redundant query + 시크릿 노출 표면 축소

1 participant