채팅 안에서 실행되는 앱, MCP Apps

MCP Apps는 2025년 11월 제안돼 2026년 1월 26일 정식 확장으로 출시된 MCP UI 규격입니다. 도구가 응답에 _meta.ui.resourceUri 필드로 ui:// 스킴 HTML·JavaScript 번들을 가리키면 호스트가 이를 대화 안에 그대로 렌더링합니다. 대시보드·폼·시각화·다단계 워크플로를 텍스트 대신 인터랙티브 화면으로 보여주며, 2026-07-28 MCP 스펙 개정에서 스펙 본문과 독립 버전 관리되는 공식 확장 지위를 얻었습니다. Claude 웹·데스크톱, Goose, VS Code Insiders, ChatGPT가 이미 지원하며 JetBrains·AWS Kiro·마이크로소프트가 지원 예정 목록에 올라 있습니다.

동의 게이트와 감사 로그가 떠받치는 보안 모델

MCP Apps는 UI 콘텐츠를 제한된 권한의 샌드박스 iframe에서 실행하고, 호스트가 렌더링 전에 HTML을 검토하도록 사전 선언된 템플릿 구조를 강제합니다. UI-호스트 통신은 postMessage로 오가되 JSON-RPC 메시지 형태로 감사 로그에 남고, UI가 도구를 스스로 호출하려면 호스트가 사용자 동의를 요구할 수 있습니다. 샌드박스·사전 검수·감사 가능한 메시지·동의 게이트라는 네 장치는 서로 다른 실패를 막는 별개의 방어선이라, 하나가 빠지면 나머지 셋으로는 메워지지 않습니다.

설계 리뷰에서 인시던트 대응까지: MCP Apps 배포 로드맵

배포 전 목표부터 수치로 고정합니다. 템플릿 사전 검수 통과율 100%, 승인되지 않은 UI발 도구 호출 0건, 렌더링 실패율 1% 이하, 동의 요청 응답 p95 2초 이내가 합격선입니다. 지원 호스트마다 렌더 결과가 달라지므로 Claude·VS Code·ChatGPT 등 실서비스 대상 목록부터 확정해야 검수 범위가 흔들리지 않습니다.

실패는 검수 생략에서 가장 자주 시작됩니다. ext-apps 저장소 예제를 커밋 해시 고정 없이 끌어다 쓰면 원본이 바뀌는 순간 미검수 코드가 프로덕션에 섞입니다. 사전 선언 템플릿 검증을 배포 파이프라인에 넣지 않으면 이런 변경이 릴리스 노트 없이 통과합니다.

postMessage 오리진 검증을 생략한 호스트는 다른 탭·확장 프로그램의 메시지를 UI 응답으로 오인할 수 있습니다. 오리진이 등록값과 다르면 즉시 연결을 끊고 텍스트 응답으로 되돌리는 것이 기본 복구 분기이며, 동의 우회로 도구가 자동 호출된 로그가 잡히면 세션을 격리하고 해당 템플릿 배포를 즉시 중단합니다.

동의 피로도도 실제 문제입니다. 모든 상호작용마다 승인 창을 띄우면 사용자가 습관적으로 버튼을 눌러 게이트가 형식적 절차로 전락합니다. 결제·삭제·발송처럼 상위 권한 호출에만 동의를 요구하고, 조회성 상호작용은 사전 승인 범위 안에서 자동 처리해야 게이트가 실효성을 유지합니다.

배포 전에는 호스트별 렌더링·동의 흐름을 시나리오 테스트로 확인합니다. 표준 로그 필드는 요청 id·템플릿 해시·오리진·동의 여부·렌더링 지연을 최소 항목으로 두고, 사용자 데이터를 표시하는 대시보드형 UI는 로그에 원문 대신 마스킹 값만 적재합니다.

출시 이후에는 렌더링 실패·동의 거부·오리진 불일치 세 지표를 주간 집계해 상위 원인을 좁힙니다. 템플릿 버전과 서버 로직 버전의 변경 로그를 분리해 두면, 렌더링 실패가 늘었을 때 원인이 UI 쪽인지 도구 응답 스키마 쪽인지 바로 구분됩니다.

바로 쓰는 체크리스트

MCP Apps는 도구 응답을 인터랙티브 화면으로 바꾸는 만큼, 검수·통신·동의라는 세 겹의 통제가 모두 살아 있어야 안전합니다. 템플릿 사전 검수 통과율 100%와 승인되지 않은 UI발 도구 호출 0건을 배포 합격선으로 걸고, 오리진 검증 실패나 동의 우회가 감지되면 세션을 즉시 격리하는 자동 복구 분기를 붙여 두면 여러 호스트에 동시에 내보내도 같은 기준으로 운영할 수 있습니다.

참고 링크

MCP Apps: Bringing UI Capabilities To MCP Clients — Model Context Protocol Blog

MCP Apps — Overview — Model Context Protocol