WebMCP: 웹사이트가 AI 에이전트에게 직접 도구를 선언하는 방법
WebMCP: Teaching Your Website to Talk to AI Agents
TL;DR Highlight
사이트가 도구를 직접 선언하게 하면 에이전트가 DOM 추측 없이 호출한다
Who Should Read
AI 에이전트가 자사 웹앱의 버튼·폼을 긁다가 자꾸 깨져서 고민인 프론트엔드·풀스택 개발자
Core Mechanics
- 화면 긁기 대신 도구 선언
- 지금 에이전트는 HTML을 읽고 버튼을 추측해 클릭하고, 레이아웃이 바뀌면 깨진다.
- WebMCP는 사이트가 book_table 같은 도구를 이름·입력 스키마와 함께 직접 등록하는 방식이다.
- 디자인이 바뀌어도 도구 이름과 스키마가 같으면 계속 동작한다.
- Chrome·Edge가 밀고 있는 초안 표준
- W3C Web Machine Learning Community Group의 초안이며 정식 표준은 아니다.
- Chrome 149부터 origin trial로 제공되고 chrome://flags/#enable-webmcp-testing으로 로컬에서 켤 수 있다.
- Chrome 문서도 "변경될 수 있다"고 밝힌다.
- 도구 등록은 함수 하나
- document.modelContext.registerTool에 name, description, inputSchema(JSON Schema), execute를 넘기면 된다.
- execute 안에서는 사이트에 이미 있는 함수(예: addTodoToPage)를 그대로 부른다.
- HTML 폼에 주석을 다는 선언형 방식도 있다.
- 실행은 로그인된 탭 안에서
- execute는 사용자가 열어 둔 페이지의 JS와 세션으로 눈에 보이게 돌아간다.
- 헤드리스 백그라운드 실행은 없다.
Community Reactions
- 일반 API나 서버 MCP로 충분하지 않냐는 의견
- 새로 만드는 서비스라면 서버 측 MCP가 더 견고하다는 의견이 있다.
- WebMCP는 여러 사이트를 오가는 작업이나 이미 클라이언트에 있는 데이터 필터링 같은 UI 작업에 쓸모 있다는 의견이다.
- 레거시 Web UI가 큰 SaaS가 UI 위에 얹어 쓰기 좋다는 의견도 있다.
- 브라우저에 묶인 것이 약점이라는 의견
- 도구를 나열·호출하려면 JS 실행 환경이 필요해 브라우저 내 에이전트로 한정된다는 의견이다.
- .well-known에 옵션과 인자 목록을 두는 방식이 더 범용적이라는 의견도 있다.
- 사람용과 에이전트용이 어긋난다는 우려
- 사람용·에이전트용 정보를 따로 유지하면 시간이 지나 달라질 거라는 의견이다.
- 웹 역사상 새 기능은 0.1%만 제대로 채택한다는 회의적인 의견도 있다.
- 단순한 대안을 쓴 경험
- HTMX 컴포넌트마다 AI용 요약과 가능한 동작을 노출하고 단기 토큰이 든 프롬프트를 복사하게 했더니 작은 모델도 잘 탐색했다는 경험이 있다.
- 접근성 엔지니어가 WebMCP를 AI로 위장한 접근성 기술이라고 했다는 의견도 있다.
How to Apply
- 내 사이트 액션 후보 3개 뽑기
- 30분 안에 사이트에서 에이전트가 하길 원하는 동작(검색, 필터, 티켓 생성 등)을 3개 적어라.
- 각각을 읽기·되돌릴 수 있는 변경·위험 행동으로 분류하라.
- 이미 있는 JS 함수가 있는지 확인하라.
- Chrome 플래그 켜고 도구 1개 등록하기
- chrome://flags/#enable-webmcp-testing을 켜라.
- 읽기 전용 도구 하나를 registerTool로 등록하라.
- DevTools의 Application → WebMCP 패널에서 도구가 보이는지 확인하라.
- 위험 행동 앞에 사람 승인 단계 두기
- 결제·제출처럼 되돌릴 수 없는 도구는 확인 창을 거치게 만들어라.
- 읽기 전용 도구에는 readOnlyHint를 달아라.
- 외부 콘텐츠를 돌려주는 도구에는 untrustedContentHint를 달아라.
- API 이름 변경 대비 shim 넣기
- document.modelContext와 navigator.modelContext를 둘 다 지원하도록 한 줄 shim을 넣어라.
- 프로덕션 배포는 하지 말고 실험 브랜치에서만 써라.
Try It
// Chrome 149+에서 chrome://flags/#enable-webmcp-testing 켠 뒤, 내 페이지 콘솔이나 스크립트에 붙여넣기
const mc = document.modelContext || navigator.modelContext;
await mc.registerTool({
name: 'add_todo',
description: 'Add an item to the to-do list',
inputSchema: {
type: 'object',
properties: { text: { type: 'string' } },
required: ['text']
},
execute: async ({ text }) => {
addTodoToPage(text); // {{내 사이트에 이미 있는 함수로 교체}}
return `Added to-do: ${text}`;
}
});
// 이어서 해 볼 것: DevTools → Application → WebMCP 패널에서 도구가 보이는지 확인하고, 읽기 전용 도구를 하나 더 등록해 보기Terminology
관련 논문
같은 시뮬레이션, 다른 근거: 도구 출력을 파일로 넘기면 LLM 에이전트 정확도가 어디서 깎이나
긴 툴 출력을 파일로 넘기자 GPT-5.1은 정확도 11.3%p 하락, 정식 출력 지정하니 회복
가짜 뉴스가 진짜 폭락을: LLM 트레이딩 에이전트 대상 정보 주입 공격
가짜 헤드라인 한 줄로 LLM 트레이딩 에이전트 62%를 조종했다(프롬프트 주입은 14%)
Harness Engineering 101: LLM은 뇌, harness는 몸
에이전트는 JSON 배열을 관리하는 루프이고, 16개 챕터로 직접 만들어 본다
Harness²: 에이전트 harness를 스스로 고쳐 쓰는 재귀 최적화 프레임워크
모델은 고정하고 harness를 재귀로 고쳤더니 벤치마크 점수가 최대 11.8%p 올랐다
해고된 Savannah 경찰관, ICE 요원 남편에게 Flock 계정 공유
경찰관이 Flock 계정을 남편(ICE 요원)에게 공유했고, 감사에서 983건 검색이 드러나 해고됐다
tmux와 Claude Code: 세션, send-keys, 그리고 한계선
tmux로 Claude Code 여러 개를 돌리면 편하지만 에이전트 4개쯤에서 한계가 온다
Hybrid Reasoning Agents: 잠재 공간에서 생각하고 텍스트로 행동하는 LLM 에이전트
잠재 공간 추론과 텍스트 도구 호출을 섞었더니 성능 10.4%↑, 토큰 최대 54.7%↓