MCP Apps 확장 제안은 Model Context Protocol에서 대화형 사용자 인터페이스를 표준 방식으로 지원하기 위해 UI 리소스 선언, 도구 연결, 호스트와 임베디드 인터페이스 간의 양방향 통신을 정의합니다.
오늘 우리는 Model Context Protocol에서 대화형 사용자 인터페이스를 표준 방식으로 지원하기 위한 MCP Apps 확장 제안(SEP-1865)을 소개합니다.
이 확장은 MCP 커뮤니티에서 가장 많이 요청된 기능 중 하나를 해결하며, MCP-UI와 OpenAI Apps SDK에서 이미 검증된 작업을 기반으로 합니다. 핵심은 MCP 서버가 호스트에 대화형 사용자 인터페이스를 제공할 수 있는 능력입니다.
MCP Apps 확장은 UI 리소스를 선언하고, 이를 도구에 연결하며, 임베디드 인터페이스와 호스트 애플리케이션 간의 양방향 통신을 가능하게 하는 표준 패턴을 도입합니다.

이 SEP는 OpenAI와 Anthropic의 MCP 코어 메인테이너들이 MCP-UI 제작자 및 MCP UI 커뮤니티 워킹 그룹의 리드 메인테이너들과 함께 공동으로 작성했습니다.
현재 MCP 서버는 호스트와 텍스트 및 구조화된 데이터만 교환할 수 있습니다. 이는 많은 사용 사례에 잘 맞지만, 도구가 시각적 정보를 보여주거나 복잡한 사용자 입력을 수집해야 할 때 마찰을 만들어냅니다.
예를 들어, 차트 데이터를 JSON으로 반환하는 데이터 시각화 MCP 서버를 생각해 봅시다. 호스트 애플리케이션이 그 데이터를 해석하고 렌더링해야 합니다. 이 시나리오에서 온갖 종류의 특수한 데이터를 처리한다는 것은 클라이언트 개발자에게 상당한 부담을 의미하며, UI를 렌더링하기 위한 자체 로직을 직접 구현해야 합니다. 사용자의 여러 관련 설정을 한 번에 수집해야 하는 등 UI 요구 사항이 늘어날수록 복잡성은 폭발적으로 증가합니다. 또는 UI 지원이 없다면, 이러한 상호작용은 텍스트 프롬프트와 응답을 어색하게 주고받는 방식으로 굳어지게 됩니다.
MCP 커뮤니티는 이러한 한계를 우회하기 위해 창의적인 시도를 해왔지만, 서로 다른 컨벤션과 아키텍처를 사용하는 구현들이 섞여 있어 서버가 다양한 클라이언트에서 일관되게 동작하기 어려워졌습니다. 이러한 표준화 부재는 생태계 단편화라는 매우 현실적인 위험을 만들고 있으며, 우리는 이를 사전에 방지하기 위해 노력하고 있습니다.
Ido Salomon과 Liad Yosef가 만들고 커뮤니티가 헌신적으로 유지 보수해 온 MCP-UI 프로젝트는 대화형 인터페이스를 가진 에이전틱 앱(agentic app)의 비전을 선도했습니다. 이 프로젝트는 풍부한 사용자 인터페이스를 1급 MCP 리소스로 제공하는 패턴을 개발하여, 에이전틱 앱이 MCP 아키텍처 안에 자연스럽게 들어맞는다는 것을 증명했습니다. 이 프로젝트는 큰 커뮤니티의 지원을 받고 있으며, Postman, Shopify, Hugging Face, Goose, ElevenLabs 등 선도적인 기업과 프로젝트에서 채택한 풍부한 SDK를 제공합니다.
OpenAI Apps SDK는 대화형 AI 인터페이스 안에서 풍부한 UI 경험에 대한 수요를 한 번 더 입증했습니다. 이 SDK는 MCP를 백본으로 사용하여, 개발자가 ChatGPT 내부에 풍부하고 대화형인 애플리케이션을 만들 수 있게 합니다. Anthropic, OpenAI, MCP-UI는 상호 운용성을 보장하고 생태계 전반에서 일관된 보안 및 사용 패턴을 수립하기 위해, 대화형 인터페이스를 위한 공식 MCP 확장을 함께 만들고 있습니다.

우리는 MCP에서 UI 리소스를 정의하는 사양을 제안하고 있지만, 그 영향은 단순한 스키마 변경을 넘어섭니다. MCP Apps 확장은 점차 에이전틱 앱 런타임처럼 보이기 시작했습니다. 이는 AI 모델, 사용자, 애플리케이션 사이의 새로운 상호작용을 위한 기반입니다. 이 제안은 의도적으로 간결하게 시작하며, 시간이 지나며 확장할 계획인 핵심 패턴들을 먼저 정의합니다.
UI 템플릿은 도구 메타데이터에서 참조되는 ui:// URI 스킴을 가진 리소스입니다.
js// 서버가 UI 리소스를 등록 { uri: "ui://charts/bar-chart", name: "Bar Chart Viewer", mimeType: "text/html+mcp" } // 도구가 메타데이터에서 이를 참조 { name: "visualize_data_as_bar_chart", description: "일부 데이터를 막대 차트로 그립니다", inputSchema: { type: "object", properties: { series: { type: "array", items: .... } } }, _meta: { "ui/resourceUri": "ui://charts/bar-chart", } }
이 방식은 호스트가 도구 실행 전에 템플릿을 미리 가져와(prefetch) 검토할 수 있게 하여 성능과 보안을 모두 향상시킵니다. 또한 정적인 표현(템플릿)과 동적인 데이터(도구 결과)를 분리하여 캐싱을 더 잘 할 수 있습니다.
별도의 커스텀 메시지 프로토콜을 새로 만들지 않고, UI 컴포넌트는 postMessage 위에서 기존 MCP JSON-RPC 기본 프로토콜을 사용해 호스트와 통신합니다. 이는 다음을 의미합니다.
@modelcontextprotocol/sdk를 사용해 애플리케이션을 만들 수 있습니다.초기 확장 사양은 샌드박스된 iframe 안에서 렌더링되는 text/html 콘텐츠만 지원합니다. 이는 다음과 같은 이점을 제공합니다.
외부 URL, 원격 DOM, 네이티브 위젯과 같은 다른 콘텐츠 타입은 명시적으로 이후 반복에 미뤄둡니다.
MCP 서버에서 대화형 콘텐츠를 호스팅하려면 신중한 보안 고려가 필요합니다. 이 제안은 여러 레이어를 통해 이를 해결합니다.
이러한 완화 장치는 악의적인 서버에 대한 다층 방어를 제공하면서도 개발자가 필요로 하는 유연성을 유지해 줍니다.
MCP Apps는 선택적인 확장입니다. 기존 구현은 아무런 변경 없이 계속 동작하며, 호스트는 UI 지원을 자신들의 속도에 맞춰 점진적으로 도입할 수 있습니다. 서버는 모든 UI 활성화 도구에 대해 텍스트 전용 폴백을 제공하고, UI가 사용 불가능한 경우에도 의미 있는 콘텐츠를 반환해야 합니다. 이렇게 하면 UI를 지원하는 호스트와 텍스트 전용 호스트 양쪽 모두를 서비스할 수 있습니다.
UI 커뮤니티 워킹 그룹은 폭넓은 피드백과 토론을 통해 이 제안을 다듬는 데 핵심적인 역할을 했습니다. 우리는 사양 제안서에서 설명하는 패턴과 타입을 시연하기 위해 얼리 액세스 SDK를 구축했습니다. MCP-UI 클라이언트 및 서버 SDK는 이러한 패턴을 이미 지원합니다.
이 작업에 기여하고자 한다면 다음을 권장합니다.
#ui-wg 채널에서 논의에 참여하기이 제안은 MCP-UI, OpenAI, Anthropic의 메인테이너들의 작업 없이는 존재하지 못했을 것입니다.
Ido Salomon과 Liad Yosef는 MCP-UI와 #ui-wg 운영을 통해 MCP Apps가 지금 표준화하고 있는 많은 패턴을 발굴·육성하고 옹호했으며, 기여자들과 함께 UI 리소스가 MCP의 자연스러운 일부가 될 수 있음을 보여주었습니다.
Anthropic의 Sean Strong, Olivier Chafik, Anton Pidkuiko, Jerome Swannack은 이 이니셔티브의 방향을 잡고 협업을 이끄는 데 도움을 주었습니다.
OpenAI의 Nick Cooper, Alexei Christakis, Bryan Ashley는 Apps SDK를 구축한 경험을 바탕으로 귀중한 방향성을 제공했습니다.
특히 UI 커뮤니티 워킹 그룹 구성원들과, 이 제안을 형성하는 데 기여한 모든 논의에 참여해 주신 분들께 감사드립니다.