WebMCP 제안서

발행: (2026년 2월 17일 오전 02:08 GMT+9)
8 분 소요

Source: Hacker News

소개 {#intro}

WebMCP API는 웹 개발자가 웹‑애플리케이션 기능을 도구로 노출할 수 있게 하는 새로운 JavaScript 인터페이스입니다—자연어 설명과 구조화된 스키마를 가진 JavaScript 함수이며, 다음에 의해 호출될 수 있습니다:

  • 에이전트 [#agent]
  • 브라우저 에이전트 [#browsers-agent]
  • 보조 기술 (WAI‑ARIA)

WebMCP를 사용하는 웹 페이지는 Model Context Protocol (MCP) 서버 [#biblio-mcp]로 생각할 수 있으며, 백엔드가 아니라 클라이언트 측 스크립트에서 도구를 구현합니다. WebMCP는 사용자와 에이전트가 동일한 웹 인터페이스 내에서 함께 작업하는 협업 워크플로를 가능하게 하며, 기존 애플리케이션 로직을 활용하면서 공유된 컨텍스트와 사용자 제어를 유지합니다.

용어 {#terminology}

  • Agent – 사용자의 목표를 이해하고 사용자를 대신해 그 목표를 달성하기 위해 행동을 취할 수 있는 자율적인 도우미. 오늘날 에이전트는 일반적으로 대규모 언어 모델(LLM) 기반 AI 플랫폼에 의해 구현되며, 텍스트 기반 채팅 인터페이스를 통해 사용자와 상호작용한다.
  • Browser’s agent – 브라우저가 제공하거나 브라우저를 통해 제공되는 에이전트. 브라우저에 직접 내장되었거나(예: 확장 프로그램이나 플러그인 형태로) 브라우저가 호스팅할 수 있다.
  • AI platform – OpenAI의 ChatGPT, Anthropic의 Claude, Google의 Gemini와 같이 에이전트형 도우미를 제공하는 플랫폼.

보안 및 개인정보 고려 사항

내용을 추가 예정.

접근성 고려 사항 {#accessibility}

추가될 내용.

API

Navigator 인터페이스가 확장되어 ModelContext에 접근할 수 있게 됩니다.

partial interface Navigator {
  [SecureContext, SameObject] readonly attribute ModelContext modelContext;
};

ModelContext 인터페이스

ModelContext 인터페이스는 웹 애플리케이션이 에이전트에 의해 호출될 수 있는 도구들을 등록하고 관리할 수 있는 메서드를 제공합니다.

[Exposed=Window, SecureContext]
interface ModelContext {
  undefined provideContext(optional ModelContextOptions options = {});
  undefined clearContext();
  undefined registerTool(ModelContextTool tool);
  undefined unregisterTool(DOMString name);
};

메서드

메서드설명
navigator.modelContext.provideContext(options)제공된 컨텍스트(도구)를 브라우저에 등록합니다. 이 메서드는 기존에 있던 도구 및 기타 컨텍스트를 모두 삭제한 뒤 새 도구들을 등록합니다.
navigator.modelContext.clearContext()브라우저에 등록된 모든 컨텍스트(도구)를 해제합니다.
navigator.modelContext.registerTool(tool)기존 도구 집합을 삭제하지 않고 단일 도구를 등록합니다. 동일한 이름을 가진 도구가 이미 존재하거나 inputSchema가 유효하지 않을 경우 오류가 발생합니다.
navigator.modelContext.unregisterTool(name)지정된 이름의 도구를 등록된 집합에서 제거합니다.

알고리즘 단계 (플레이스‑홀더)

provideContext(options)

TODO: fill this out.

clearContext()

TODO: fill this out.

registerTool(tool)

TODO: fill this out.

unregisterTool(name)

TODO: fill this out.


ModelContextOptions 딕셔너리

dictionary ModelContextOptions {
  sequence tools = [];
};
  • options["tools"] – 브라우저에 등록할 도구들의 목록입니다. 목록에 있는 각 도구 이름은 고유해야 합니다.

ModelContextTool 딕셔너리

ModelContextTool 딕셔너리는 에이전트가 호출할 수 있는 도구를 설명합니다.

dictionary ModelContextTool {
  required DOMString name;
  required DOMString description;
  object inputSchema;
  required ToolExecuteCallback execute;
  ToolAnnotations annotations;
};

dictionary ToolAnnotations {
  boolean readOnlyHint;
};

callback ToolExecuteCallback = Promise(object input, ModelContextClient client);
  • tool["name"] – 도구의 고유 식별자입니다. 에이전트는 도구 호출 시 이 이름을 사용해 도구를 참조합니다.
  • tool["description"] – 도구 기능에 대한 자연어 설명입니다. 에이전트가 언제, 어떻게 도구를 사용할지 이해하는 데 도움이 됩니다.
  • tool["inputSchema"] – 도구가 기대하는 입력 매개변수를 설명하는 JSON Schema 객체입니다.
  • tool["execute"] – 에이전트가 도구를 호출할 때 실행되는 콜백 함수입니다. 이 함수는 입력 매개변수와 ModelContextClient 객체를 받습니다. 함수는 비동기일 수 있으며 프라미스를 반환합니다; 에이전트는 프라미스가 해결될 때 결과를 받습니다.
  • tool["annotations"] – 도구 동작에 대한 추가 메타데이터를 제공하는 선택적 주석입니다.
ToolAnnotations 딕셔너리 (메타데이터)
  • annotations["readOnlyHint"]true인 경우, 해당 도구가 상태를 변경하지 않고 데이터를 읽기만 함을 나타냅니다. 이 힌트는 에이전트가 도구를 안전하게 호출할 수 있는 시점을 판단하는 데 도움이 됩니다.

ModelContextClient 인터페이스 {#model-context-client}

ModelContextClient 인터페이스는 ModelContext API를 통해 사이트가 제공한 도구를 실행하는 에이전트(#agent)를 나타냅니다.

Exposed: Window
SecureContext

interface ModelContextClient {
  Promise requestUserInteraction(
    UserInteractionCallback callback
  );
};
콜백 정의
callback UserInteractionCallback = Promise ();
사용 예
client.requestUserInteraction(callback);

도구 실행 중에 비동기적으로 사용자 입력을 요청합니다.

  • callback 함수는 사용자 상호작용을 수행하기 위해 호출됩니다 (예: 확인 대화 상자를 표시).
  • 반환된 Promise는 콜백의 결과로 해결됩니다.
메서드 단계

TODO: 내용을 채워 주세요.

감사의 글 {#acknowledgements}

다음 분들의 초기 설명, 제안 및 토론 덕분에 이 사양의 기반이 마련되었습니다:

  • Brandon Walderman
  • Leo Lee
  • Andrew Nolan
  • David Bokan
  • Khushal Sagar
  • Hannah Van Opstal
  • Sushanth Rajasankar

Alex NahasJason McGhee가 초기 구현 경험을 공유해 주신 것에 특별히 감사드립니다.

마지막으로, Web Machine Learning Community Group 참가자들의 피드백과 제안에 감사드립니다.

0 조회
Back to Blog

관련 글

더 보기 »

Paged Out 제8호 [pdf]

죄송하지만 해당 PDF 파일의 내용을 추출하거나 변환할 수 없습니다. 기사 텍스트나 HTML 버전을 제공해 주시면 기꺼이 포맷해 드리겠습니다.