이제 우리 사이트에는 페이지뿐 아니라 도구가 있어요
지금까지 actmorehuman.com을 찾아온 AI 에이전트는 모든 사이트에서 모든 에이전트가 하는 일을 했어요. HTML을 읽고, 어떤 div가 검색창인지 짐작하고, 버튼처럼 생긴 걸 클릭했죠. 리디자인을 배포하면 망가졌어요. 모달이 열리면 길을 잃었고요.
그건 이제 끝이에요. 오늘부터 이 사이트는 에이전트에게 자신이 할 수 있는 일을 타입이 정해진 목록으로 건네고, 에이전트는 그 일을 직접 호출해요.
표준은 WebMCP예요. 페이지가 자신을 보고 있는 에이전트에게 도구를 선언할 수 있게 하는 W3C 제안이죠. 우리는 열 개를 내놨어요.
에이전트가 이제 할 수 있는 일
읽기 전용 도구 네 개는 아무것도 바꾸지 않아서 자유롭게 호출할 수 있어요.
search_guides와get_guide는 사이트의 모든 가이드에 닿아요. 모두 11개 언어로 공개돼 있어요list_assistants와get_setup_steps는 ChatGPT, Claude, Gemini, Grok, Perplexity, Copilot이 각각 사용자 지정 지침 설정을 어디에 숨겨 뒀는지, 거기에 뭘 넣어야 하는지를 알려 줘요
무언가를 만드는 도구가 셋이에요.
get_wizard_options와build_humanizer_prompt는 방문자가 마법사를 일일이 클릭하지 않아도, 사이트의 마법사가 만드는 것과 같은 프롬프트를 만들어 줘요humanize_text는 AI가 쓴 글을 네 가지 어조 중 하나로 다시 써요. 20자에서 6,000자까지 지원해요
결제나 메일함에 닿는 도구가 셋이에요.
list_products는 우리가 파는 것과 오늘의 가격을 돌려줘요. 부가 항목이 붙은 Company Voice 구성의 가격도 포함해서요start_checkout은 Stripe 세션을 열어요subscribe_to_updates는 확인 메일 한 통을 보내 달라고 요청해요
전체 설명은 에이전트가 읽는 그 설명이고, 도구 스스로의 한계도 밝혀 둬요. list_products는 판매 중인 것만 돌려주므로 목록이 짧을 수 있다고 말해요. humanize_text는 호출마다 비용이 들고 같은 텍스트로 재시도하면 안 된다고 말해요. 모호한 설명을 보고 계획을 세우는 에이전트는 더 나쁜 계획을 세워요.
쓰기 작업은 멈추고 물어봐요
start_checkout과 subscribe_to_updates는 페이지의 대화 상자에서 사람이 승인하기 전까지 끝나지 않아요. 대화 상자는 누가 뭔가를 클릭하기 전에 제품, 가격, 이메일 주소를 먼저 보여 줘요. 확인을 요청하면서 보여 줄 구체적인 내용이 없는 도구는 빌드에 실패해요. 그래서 대상 없는 "정말요?"는 배포될 수 없어요.
구독은 거기에 더해 이중 동의(double opt-in)예요. 도구는 확인 메일 한 통을 보내고, 구독이 아니라 메일을 보냈다는 사실을 돌려줘요. 메일을 무시하면 아무 일도 일어나지 않은 거예요. 에이전트는 주소를 목록에 올릴 수 없고, 우리도 못 해요.
humanize_text는 뒤에서 조용히 요청을 보내는 대신 눈에 보이는 폼을 직접 조작해요. 방문자는 자기 글이 입력란에 도착해서 다시 쓰이는 걸 지켜봐요. 공유되는 화면의 전제가 바로 그거예요. 에이전트가 한 일을, 지금 보고 있는 페이지의 당신 화면에서 직접 보는 거죠.
브라우저 밖의 에이전트
같은 도구가 /api/mcp에서 MCP로도 제공돼요. 그래서 브라우저가 없는 코딩 에이전트나 데스크톱 어시스턴트도 호출할 수 있어요. 두 전송 방식은 같은 파이프라인을 거치고, 그래서 가드가 서로 어긋날 수 없어요.
읽기 전용 도구는 거기서 열려 있어요. humanize_text는 아니에요. 이유는 평범하지만 밝혀 둘 만해요. 원격 엔드포인트에는 인증이 없어서, 모델 예산을 쓰는 도구를 열어 두면 방문자가 로드한 어떤 페이지든 브라우저를 통해 우리 예산을 쓸 수 있게 돼요. 읽기는 열어 두고, 비용이 드는 건 우리가 누군지 알 수 있는 호출자가 있어야 해요.
성적표, 아쉬운 부분까지
webmcp.com 디렉터리는 여섯 페이지를 스캔해 A등급을 줬어요. 도구는 아홉 개를 찾았고, 맞는 숫자예요. 열 번째인 humanize_text는 휴머나이저 페이지와 같은 기능 플래그 뒤에 있어요. 그 플래그가 꺼져 있는 동안은 도구가 등록되지도, 목록에 나오지도 않아요. 호출하면 실패하는 기능을 내세우는 건 없는 것보다 나빠요.
스캔은 설명과 입력 제약을 좋게 봤고, 진짜 빈틈을 하나 짚었어요. 어떤 도구에도 출력 스키마가 없다는 거예요. 모든 도구가 들어가는 것은 정확히 선언하지만, 돌아오는 것은 하나도 선언하지 않아요. 에이전트는 우리 출력을 파싱해서 알아내야 해요. 공정한 지적이고, 할 일 목록에 올라 있어요.
규모를 가늠하자면, 디렉터리에는 검증된 사이트 522곳과 도구 3,387개가 있어요. 전체로 보면 51%는 페이지를 조작하고, 44%는 질문에 답하기만 하고, 5%는 돈이나 약속에 닿아요. 우리는 세 칸 모두에 들어가요.
왜 이렇게 했나요
어시스턴트는 이미 이 사이트를 읽어요. 사람들은 ChatGPT에게 Claude의 사용자 지정 지침 입력란이 어디 있는지 묻고, 우리가 쓴 페이지로 만들어진 답을 받아요. 읽히는 건 좋아요. 하지만 쓸 수 있는 것과는 달라요. 그게 다음 단계예요.
어차피 우리가 하고 싶었을 주장도 있어요. 에이전트 웹은 두 갈래로 갈 수 있어요. 에이전트가 사이트를 긁어 가고 사이트는 파싱당하는 수동적인 표면이 되거나, 사이트가 자기 로직을 지키며 자기 조건대로 열어 두거나요. 자기만의 가드, 자기만의 속도 제한, 자기만의 확인 대화 상자와 함께요. 우리는 두 번째를 택하겠어요. 사람이 대화 상자에서 승인해야만 진행되는 결제는 마찰이 아니에요. 사이트가 자기 행동의 주도권을 쥐고 있다는 뜻이에요.
배포 전에 보안 검토를 두 차례 해서 네 가지 문제를 찾았고, 모두 고쳤어요. MCP 경로에 열려 있던 CORS, 에이전트가 보기도 전에 재시도 타이밍을 삼켜 버리던 오류 경로, 출처 없는 호출자를 받아 주던 브리지, 다른 모듈의 오류 문구에 따라 분기하던 핸들러예요. 67개 파일에 걸쳐 테스트 898개가 통과하고, 그중 254개가 새로 추가됐어요.
직접 해 보세요
WebMCP를 지원하는 브라우저에서 사이트를 열고 에이전트에게 em 대시에 관한 가이드를 찾아 달라고 하거나, 부가 항목이 붙은 Company Voice 의뢰의 가격을 알아봐 달라고 해 보세요. 에이전트는 search_guides나 list_products를 호출해서 무엇이 돌아왔는지 알려 줄 거예요. 뭔가를 사 달라고 하면 멈춰서 결정을 당신에게 넘겨요.
성적표는 webmcp.com에 공개돼 있어요. 다음은 출력 스키마예요.
---
이 글은 AI와 함께 썼어요. 글에 담긴 모든 주장은 내보내기 전에 사람이 확인했어요. AI가 쓴 글이 그 확인을 통과하지 못한다면 아직 공개할 준비가 안 된 거예요.