로컬 MCP 서버로 인증 창을 표시하는 로직 개선 | Den Delimarsky


요약

  1. 문제점 설명

    • 기존 코드에서는 WAM(Web Account Manager) 인증 창이 MCP 클라이언트(예: Visual Studio Code, Claude Desktop) 뒤에 표시되는 문제가 있었음.
  2. WAM 창에 대한 간단한 배경

    • WAM 인증 대화상자를 올바르게 렌더링하려면, 윈도우 핸들(Window Handle)이 필요함.
    • 콘솔 응용프로그램 용 샘플 코드를 MCP 서버에 썼더니, 윈도우가 없는(Headless) 환경에서 작동하지 않았음.
  3. 개선 방법

    • Windows API를 활용해, 적절한 윈도우 핸들을 찾아주는 로직을 새로 작성.
    • 현재 프로세스의 PID(프로세스ID)를 얻어 계층적으로(부모-자식 탐색) 윈도우를 찾는 함수 구현.
  4. 핵심 코드 개념

    • GetBindingParentWindow: 현재 프로세스 ID를 이용해 윈도우 핸들을 찾는 메인 함수.
    • FindWindowInProcessHierarchy: 프로세스 계층 구조를 따라 적절한 창을 찾고, 없으면 부모 프로세스까지 최대 5단계까지 재귀 탐색.
      • 조건: 메인 윈도우가 없을 때, 부모 프로세스 탐색.
      • 더 이상 찾을 수 없으면 바탕화면 윈도우 핸들을 반환함(안전장치/최후 수단).
    • FindWindowForProcess: 프로세스의 모든 창을 열거해 보이고(Visible), 크기가 50x50 이상이며 제목이 있는 창을 우선적으로 후보로 선택.
    • 창 후보 중 제목이 있고, 크기가 큰 순서로 가장 적합한 창을 반환.
  5. 계층적 검색 제한

    • 부모 프로세스 탐색은 최대 5단계까지만 진행(무한루프 방지 및 안정성 확보).
  6. 테스트 결과

    • Visual Studio Code와 Claude Desktop에서 테스트한 결과, 인증 창이 항상 클라이언트 창 중앙에 잘 표시됨을 확인.
  7. 결론

    • 기존보다 훨씬 안정적으로 윈도우 부모 창을 찾아 인증 창 위치를 제어할 수 있게 됨.
    • 여전히 예외/엣지케이스는 존재할 수 있으니 테스트가 필요.
    • 더 나은 구현 방법이나 아이디어가 있으면 공유를 요청.
1개의 좋아요