특집

위젯 하나 달았더니 Claude가 검색 15번을 1번으로 줄였다

원본 · MCP Apps: Give the Model Data, Give the User a UI — Dustin Mihalik, Indeed
AI Engineer · Dustin Mihalik · Indeed · 2026-09-09 업로드 · 16분

한국어·English

Indeed가 Claude와 ChatGPT용 MCP 앱을 만들며 발견한 역설이다. 텍스트 응답일 때는 모델이 10~15번 검색하고 필터링해 표까지 만들어줬는데, 렌더링 위젯을 붙이자 툴을 한 번만 호출하고 이미 화면에 결과가 보이니 탐색을 멈춰버렸다. Indeed의 기술 펠로우 Dustin Mihalik이 이 문제를 규칙 세 가지로 풀어낸 과정을 전한다.

  • 위젯의 이점 — 텍스트 응답에는 브랜딩이 없고, Claude나 ChatGPT가 외부 링크를 걸게 만드는 데만 수십 시간의 eval 작업이 들었다
  • 위젯의 효과 — MCP 앱으로는 apply 버튼과 상세보기 모달을 넣어 대화를 벗어나지 않고도 지원까지 가능했다
  • 1번 규칙 — 사용자에게 보여주는 것은 반드시 모델에게도 데이터로 제공해야 하며 안 그러면 위젯이 블랙박스가 되어 후속 질문에 모델이 답하지 못한다
  • structured content — MCP 스펙의 structured content와 HTML을 가리키는 resource URI를 함께 반환하고 계속 동기화해야 한다
  • 2번 규칙 — 툴 설명에 UI가 존재한다는 사실을 명시하지 않으면 모델이 화면 아래서 같은 결과를 또 텍스트로 서술한다
  • 설명 문구 — 결과가 UI 컴포넌트로 모델에게 자동 표시된다는 한 줄을 설명 맨 앞에 추가하는 것만으로 대부분의 경우가 해결됐다
  • 인터랙션 추적 — 사용자가 view details를 눌러도 모델은 어떤 job을 열었는지 모르므로 update model context로 되돌려줘야 한다
  • 3번 규칙(최상위) — 데이터 처리와 UI 렌더링을 분리하는 것이 다른 모든 규칙을 압도한다
  • 위젯의 부작용 — 위젯을 붙이자 Claude가 검색을 한 번만 호출하고 이미 표시된 결과가 있다고 판단해 깊이 탐색하지 않았다
  • 해법 구조 — search jobs는 텍스트 기반 툴로 남기고 id 목록을 받는 render jobs 위젯을 따로 만들어 100개 중 5개만 추려 보여주게 했다
  • 확장 아이디어 — id와 함께 왜 이 job이 좋은 선택인지 이유를 함께 넘기게 하면 모델이 더 풍부한 UI를 만들 수 있다
  • 핵심 결론 — UI에 데이터를 맞추지 말고 모델에 어떤 데이터를 줄지 먼저 정하면 렌더링은 그 결과물일 뿐이라고 정리했다
  • 설계 원칙 — 작고 조합 가능한 툴 여러 개로 나누면 설명이 단순해져 모델에 과부하가 걸리지 않는다

그가 한 말

MCP 앱을 만들 때 저의 첫 번째 규칙은, 사용자에게 보여주는 것은 무엇이든 모델에게도 데이터로 제공되어야 한다는 것입니다.The very first rule uh for me uh building MCP apps, anything that you show to the user also needs to be provided as data to the model.3분 59초
Dustin Mihalik 발표 화면 · MCP Apps: Give the Model Data, Give the User a UI — Dustin M 3분 59초
Dustin Mihalik 발표 화면 · 3분 59초 · AI Engineer
결국 '여기 결과를 보여드립니다'라고 하고서도 모델은 평소와 똑같은 방식으로 다시 설명을 반복하게 됩니다.So, you end up with like, "Here's your display." and then here's the model doing basically the same thing that it would normally do.5분 8초
Dustin Mihalik 발표 화면 · MCP Apps: Give the Model Data, Give the User a UI — Dustin M 5분 8초
Dustin Mihalik 발표 화면 · 5분 8초 · AI Engineer
클로드는 도구를 한 번만 호출하고 나서 '결과가 이미 화면에 표시됐네, 더 파고들 필요 없겠다'는 식으로 행동하게 됩니다.We know Claude Claude will call it once and then it'll be like, "Oh, I guess the results are already displayed. I'm not going to like do a deep dive, right?"9분 27초
Dustin Mihalik 발표 화면 · MCP Apps: Give the Model Data, Give the User a UI — Dustin M 9분 27초
Dustin Mihalik 발표 화면 · 9분 27초 · AI Engineer
클로드가 일관되게 링크를 걸도록 만드는 데만 어마어마한 시간과 평가 작업을 쏟아부어야 했습니다.it took us a ridiculous number of hours and evals to make sure that like Claude would consistently link to things.2분 9초
Dustin Mihalik 발표 화면 · MCP Apps: Give the Model Data, Give the User a UI — Dustin M 2분 9초
Dustin Mihalik 발표 화면 · 2분 9초 · AI Engineer

이해관계 · 발화자는 Indeed의 기술 펠로우로, 본인이 소속된 Indeed의 job search 및 career scout 에이전트 사례를 직접 다룬다.

덧붙임 — 여기에 하나 덧붙이면, 위젯이 모델의 탐색을 멈추는 현상은 UI 편의성과 에이전트 자율성이 근본적으로 충돌한다는 신호로 읽을 수 있다. 데이터 처리와 렌더링 분리는 결국 모델용 API와 사람용 API를 별도로 설계하라는 이야기와 다르지 않다.

오늘 밤 해볼 수 있는 한 가지
직접 만든 MCP 툴 중 결과를 렌더링하는 것이 있다면, 그 툴의 description 맨 앞줄에 결과가 UI 컴포넌트로 자동 표시된다는 문장을 추가해 모델이 같은 내용을 중복 서술하는지 확인해본다.