도구 호출(tool call)을 절대 방해하지 않는 광고 레이어 구축 — MCP 서버 수익화
요약
MCP(Model Context Protocol) 서버의 수익화를 위해 도구 호출을 방해하지 않는 광고 레이어 구축 방식을 제안합니다. 광고가 모델의 동작을 방해하거나 지연시키지 않도록 설계된 SDK 아키텍처와 CPA 기반의 비즈니스 모델을 다룹니다.
핵심 포인트
- 광고가 도구 호출(tool call)의 무결성을 해치지 않도록 설계
- 150ms 타임아웃을 적용하여 광고 실패 시에도 도구 응답은 보장
- 모델이 광고의 적절성을 평가하는 문지기 역할을 수행
- 노출 기반이 아닌 CPA(행동당 비용) 모델로 광고 관련성 극대화
공개 사항: 저는 Lulu Ads의 창립자입니다. 이것은 엔지니어링 이야기입니다. 흥미로운 부분은 제약 사항들이며, 저는 여러분이 박수를 치기보다는 제 설계를 비판해 주기를 바랍니다.
아무도 해결하려고 하지 않는 문제
현재 수천 개의 MCP 서버가 존재합니다. 이는 Claude와 같은 AI 에이전트가 검색, 가져오기, 예약, 계산 등을 위해 호출하는 도구(tools)들입니다. 이들 중 거의 대부분은 개인 개발자에 의해 운영되는 무료 서비스이며, 실제 호스팅 비용은 발생하지만 수익은 전혀 없습니다. 에이전트 경제(agent economy)의 도구 레이어에는 비즈니스 모델이 없습니다. 그것이 제가 작업해 온 간극입니다.
명확한 해답인 "광고를 넣는 것"은 동시에 명확하게 공포스러운 해답이기도 합니다. LLM 출력 근처에 광고를 배치하는 것은 광고 기술(ad tech)이 저질렀던 모든 실수를 더 빠른 속도로 물려받는 방식이기 때문입니다. 따라서 이 포스트는 제약 사항 목록에 관한 것입니다. 제품보다 제약 사항이 먼저 앞섰기 때문입니다.
불변의 법칙 (The invariants)
코드를 작성하기 전에, 저는 SDK가 절대 위반해서는 안 될 다섯 가지 규칙을 작성했습니다:
- 광고는 절대로 도구 호출(tool call)을 방해해서는 안 된다.
- 광고는 절대로 모델에게 지시를 내려서는 안 된다.
- 광고는 절대로 미공개 상태여서는 안 된다.
- 광고는 절대로 오류 발생 시 나타나서는 안 된다.
- 무관한 광고의 비용은 사용자가 아닌 광고주가 부담해야 한다.
아키텍처의 나머지 모든 부분은 이 규칙들로부터 도출됩니다.
불변의 법칙 1: fail-open, 150ms, 예외 없음
SDK는 귀하의 MCP 도구 응답을 래핑(wrap)합니다. 광고 가져오기(ad fetch)에는 엄격하게 150ms의 예산이 할당됩니다. 타임아웃, 네트워크 오류, 잘못된 응답, 백엔드 다운 등 무엇이든 상관없습니다. 귀하의 응답은 서버가 생성한 그대로 정확하게 전달됩니다. 실패 모드는 "광고 없음"이지, 결코 "답변 없음"이 아닙니다. 만약 내일 저희의 전체 백엔드가 사라지더라도, 통합된 서버들은 아무것도 눈치채지 못할 것입니다.
이것이 사소하게 들릴 수 있지만, 그렇지 않습니다. 이는 광고 경로가 귀하의 도구와 사용자 사이에 절대 위치할 수 없음을 의미합니다. 이는 프록시(proxy)가 아니라 사이드 채널 주석(side-channel annotation)입니다.
불변의 법칙 2: 모델이 문지기이다
이는 일반적인 광고 기술의 권력 역학을 뒤집습니다. 즉, 게시되는 표면(publisher surface)이 광고보다 더 똑똑합니다. 배너는 스스로를 평가할 수 없지만, 라벨이 지정된 제안을 평가하는 프런티어 모델(frontier model)은 분명히 할 수 있습니다.
불변의 법칙 4: 오류 시에는 절대 나타나지 않음
왜 노출(impressions)이 아니라 CPA인가
노출 기반 과금 방식은 광고를 사방에 뿌리고 기원하는 방식에 보상을 줍니다. CPA(Cost-per-action, 행동당 비용) 방식은 광고주가 누군가 실제로 전환(conversion)했을 때만 비용을 지불한다는 것을 의미합니다. 따라서 실행할 가치가 있는 광고는 오직 진정으로 관련성이 높은 광고뿐입니다. 인센티브 정렬(Incentive alignment)이 정책 집행(policy enforcement)보다 강력합니다.
실제 통합 방식
Python (FastMCP 미들웨어 — 설정 후 단 한 줄):
from lulu_ads.middleware import LuluAdsMiddleware
mcp.add_middleware(LuluAdsMiddleware(
...
TypeScript (서버 래퍼):
import { withLuluAds } from "lulu-ads";
const server = new McpServer({ /* ... */ });
...
설치는 pip install lulu-ads 또는 npm install lulu-ads로 진행하며, getlulu.dev/publishers에서 한 번 등록하면 자격 증명(credentials)을 받을 수 있습니다. 수익의 70%가 서버 소유자에게 돌아갑니다. 추가 비용은 무료이며, 불변의 법칙 1에 따라 수익이 전혀 발생하지 않더라도 서버에 해를 끼치지 않습니다.
아직 확신할 수 없는 부분들
마케팅을 위해 문제가 없는 척하는 대신, 솔직한 공개 질문을 던집니다:
- 컨텍스트 경계(Context boundaries). SDK는 퍼블리셔(publisher)에게 광고 컨텍스트에서 민감한 사용자 데이터를 제외하도록 안내합니다. 이는 규칙이며, 규칙에는 집행 도구(enforcement tooling)가 필요합니다. 이 기능은 로드맵에 포함되어 있습니다.
만약 MCP 서버를 운영 중이라면, 여러분의 진솔한 의견을 듣고 싶습니다. 특히
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기