x402 마이크로페이먼트(micropayments)를 사용하여 AI 에이전트에게 호출당 비용을 청구하는 MCP 서버를 구축했습니다
요약
x402 프로토콜을 활용하여 AI 에이전트가 MCP 서버 호출 시 사용한 만큼 즉시 결제할 수 있는 마이크로페이먼트 시스템 구축 사례를 소개합니다. HTTP 402 상태 코드와 EIP-3009 표준을 결합하여 사람의 개입 없이 머신 간(M2M) 자동 결제를 구현했습니다.
핵심 포인트
- x402 프로토콜을 통한 에이전트 간 자동 마이크로페이먼트 구현
- HTTP 402와 EIP-3009를 활용한 머신 간 결제 표준 적용
- Cloudflare Worker를 페이월 프록시로 사용하여 보안 및 결제 관리
- Base 메인넷을 활용해 저렴한 가스비와 빠른 결제 확정성 확보
x402 마이크로페이먼트(micropayments)를 사용하여 AI 에이전트에게 호출당 비용을 청구하는 MCP 서버를 구축했습니다
Toolstem 작성
당신은 MCP 서버를 구축했습니다. 에이전트(Agents)가 이를 호출합니다. 당신은 API 비용을 지불합니다. 그들은 아무것도 지불하지 않습니다. 매 tools/call 호출마다 당신의 예산에서 몇 센트가 소모되지만, 이를 트리거한 에이전트는 이를 알지도 못하며 — 신경 쓸 동기도 없습니다. 표준적인 답변은 "SaaS 구독으로 묶는 것"이지만, 이는 사람이 개입하여 가입하고, 카드를 입력하고, 결제 관계를 관리해야 함을 의미합니다. 대부분의 에이전트는 사람이 모든 호출을 지켜보고 있지 않습니다. 만약 에이전트가 사람의 개입 없이 자동으로 자신의 데이터 비용을 직접 지불한다면 어떨까요?
그것이 제가 구축한 것입니다. 제가 배운 점은 다음과 같습니다.
x402의 실제 정체
HTTP 402 — "Payment Required" — 는 1996년부터 존재해 왔습니다. 이는 미래의 사용을 위해 예약되어 있었으나 이후 28년 동안 사실상 잊혀졌습니다. x402 프로토콜은 이를 EIP-3009를 기반으로 구축된 머신 간(machine-to-machine) 결제 표준으로 부활시킵니다.
흐름은 다음과 같습니다:
- 에이전트가 일반적인 요청으로 당신의 엔드포인트(endpoint)에 접속합니다.
- 서버가 결제 금액, 수신 주소, 네트워크, 토큰, 논스(nonce)가 포함된 JSON 바디와 함께 HTTP 402를 반환합니다.
- 에이전트가 EIP-3009
transferWithAuthorization를 서명합니다 — 이는 서버가 에이전트를 대신하여 제출할 수 있는 사전 승인된 USDC 전송입니다. - 에이전트가 서명된 권한 부여가 포함된
X-Payment헤더와 함께 요청을 재시도합니다. - 서버가 온체인(on-chain)에서 서명을 검증하고, 전송을 제출하며, 데이터로 응답합니다.
- Base 메인넷에서 2초 이내에 결제가 확인됩니다; 가스(gas) 비용은 약 $0.001입니다.
Stripe 계정도 필요 없습니다. OAuth 흐름도 없습니다. 사람의 가입도 없습니다. 월간 인보이스를 기다릴 필요도 없습니다. 에이전트는 자신이 사용한 만큼 정확히 지불하며, 원자적(atomically)으로 결제됩니다. 가스를 위한 ETH는 전혀 필요하지 않습니다 (서버가 전송을 제출하므로, 서버만 가스를 위한 소량의 ETH 유동성이 필요하며 — 에이전트는 USDC만 있으면 됩니다).
이것이 바로 진작에 존재했어야 할 "HTTP + 결제" 프리미티브(primitive)입니다. 아직 제품-시장 적합성(product-market-fit) 단계 이전이지만, 근본적인 메커니즘은 견고합니다.
아키텍처 (The architecture)
핵심 인프라는 페이월 프록시(paywall proxy) 역할을 하는 Cloudflare Worker입니다. 이는 공용 인터넷과 업스트림(upstream) MCP 서버 사이에 위치하여, 요청을 전달하기 전에 모든 요청을 가로챕니다.
에이전트(Agent) → Cloudflare Worker (x402 페이월) → 업스트림 MCP 서버 → 데이터 소스(Data sources)
Worker는 결제 라이프사이클(payment lifecycle)을 처리합니다:
- 요청 수신
- 유효한
X-Payment헤더 확인 - 헤더가 없는 경우: 결제 상세 정보와 함께 402 오류 반환
- 헤더가 있는 경우: EIP-3009 서명 검증, 논스(nonce) 신선도 및 금액 확인, 온체인(on-chain) 전송 제출
- 검증이 성공한 경우에만 업스트림 MCP로 전달
한 가지 간과하기 쉬운 제약 사항은 initialize와 tools/list는 반드시 무료여야 한다는 점입니다. 에이전트는 비용을 지불할지 결정하기 전에 사용 가능한 도구의 범위(tool surface)를 탐색해야 합니다. 탐색 단계부터 비용을 부과하면 호출 자체가 발생하지 않습니다. 또한 모든 디렉토리 상태 확인 프로브(Glama, mcp.so, PulseMCP 등) 역시 무료 tools/list 응답을 기대합니다. 이 기능들에 페이월을 적용하면 디렉토리 목록에서 제외됩니다. Cloudflare Worker는 이 두 가지 MCP 메시지 유형을 미터링되지 않는(unmetered) 경로로 라우팅합니다.
**도구별 가격 책정(Per-tool pricing)**은 이 모델이 흥미로워지는 지점입니다. 저희의 SEC EDGAR 서버는 세 가지 티어(tier)로 운영됩니다:
| 도구 (Tool) | 티어 (Tier) | 호출당 비용 (Per call) |
|---|---|---|
getCompanyFilingsSummary | 저렴함 (Cheap) | $0.005 |
| ... |
공시 요약(filings summary)은 한 번의 EDGAR 조회입니다. 반면 compareDisclosureSignals는 여러 기업에 걸쳐 내부자 거래, 13F 기관 움직임, 8-K 클러스터를 교차 참조합니다. 연산량(compute) 차이는 대략 100배이며, 따라서 가격 차이도 100배가 됩니다. 단일 가격(Flat pricing)을 적용하면 이들을 동일하게 취급하게 되는데, 이는 저렴한 호출에서 발생한 수익으로 모든 비싼 호출의 비용을 보조(subsidizing)하고 있음을 의미합니다.
Finance MCP 서버(저희의 첫 번째 서버)는 모든 도구에 대해 $0.005의 단일 가격으로 출시되었습니다. 6주 후, 저희의 수익은 0달러였습니다. 위의 표가 바로 그 교훈입니다.
코드: 에이전트 측 (agent side)
LangChain 통합은 결제 레이어를 커스텀 fetch 함수로 래핑(wrap)합니다. 그 외의 모든 것은 표준 에이전트 코드와 동일합니다.
TypeScript / LangChain.js:
import { createReactAgent } from "@langchain/langgraph/prebuilt";
import { createFinanceTools } from "langchain-toolstem/finance";
import { createX402Fetch } from "langchain-toolstem/x402";
...
createX402Fetch 래퍼(wrapper)는 모든 402 응답을 가로채서, 에이전트의 개인 키(private key)를 사용하여 EIP-3009 권한 부여(authorization)에 서명하고 투명하게 재시도합니다. maxPaymentUsd 상한선은 안전 장치(safety rail) 역할을 합니다. 에이전트는 해당 임계값을 초과하는 권한 부여에는 서명을 거부하여, 잘못 설정되었거나 악의적인 서버가 예상치 못한 가격을 제시하는 상황으로부터 보호합니다.
도구(Tools)는 시작 시 tools/list를 통해 실시간으로 발견되므로(무료이며, 과금되지 않음), 에이전트는 패키지에 아무것도 하드코딩하지 않고도 항상 현재의 도구 인터페이스를 볼 수 있습니다.
Python / LangChain:
from langchain_toolstem import create_finance_tools, create_x402_httpx_client
client = create_x402_httpx_client("0xYOUR_PRIVATE_KEY")
...
커스텀 fetch 대신 일반적인 http:// URL이 필요한 환경(예: MultiServerMCPClient)의 경우, createX402Proxy가 localhost:4021에서 결제 서명을 처리하는 로컬 리버스 프록시(reverse proxy)를 생성하므로, 어떤 표준 MCP 클라이언트든 이를 직접 가리키도록 설정할 수 있습니다.
이 패키지는 npm의 langchain-toolstem (월간 설치 수 약 1,400회) 및 PyPI의 langchain-toolstem에서 확인할 수 있습니다.
이를 출시하며 배운 점
단일 가격 정책(Flat pricing)은 잘못되었습니다. Finance 서버는 6주 동안 호출당 0.005달러의 고정 요금을 적용했습니다. 의미 있는 수익은 전혀 없었습니다. 계산은 냉혹합니다. 인기 있는 Apify 액터(actors)의 전형적인 수치인 월간 활성 사용자(MAU) 약 1,400명에 도달하더라도, 0.005달러 고정 요금은 월 약 7달러를 창출할 뿐입니다. 실제 API 비용이 발생하는 서버에게 이 천장은 너무 낮습니다. 계층형 가격 책정(Tiered pricing)은 가격을 실제 컴퓨팅 자원에 매핑합니다. 이는 올바른 결정이었으며, 처음부터 그렇게 했어야 했습니다.
무료 탐색 계층(free discovery layer)은 타협할 수 없는 요소입니다. 에이전트는 결제를 유발하지 않고 tools/list를 호출할 수 있어야 합니다. 이는 단순히 좋은 사용자 경험(UX)을 위한 것이 아니라, 여러분의 리스팅을 상태 확인(health-check)하는 모든 MCP 디렉토리에 대한 기술적 요구 사항입니다. 초기에는 결제되지 않는 탐색 경로가 누락된 버그가 하나 있었는데, 프로브(probe)가 도구 매니페스트(tools manifest) 대신 402 에러를 받으면서 서버가 Glama의 리스팅에서 잠시 사라진 적이 있었습니다.
하트비트(heartbeat) 문제는 실재합니다. Coinbase의 x402 Bazaar는 유료 호출이 확인되지 않은 상태로 30일이 지나면 여러분의 엔드포인트를 리스팅에서 제외합니다. 아직 관객을 구축 중인 서버에게 이는 심각한 위험입니다. 누군가 여러분을 막 발견하려는 찰나에 디렉토리에서 사라질 수 있기 때문입니다. 우리는 6시간마다 실행되는 GitHub Actions cron을 통해 이 문제를 해결했습니다. 이 작업은 자금이 충전된 하트비트 지갑(heartbeat wallet)으로부터 실제 유료 호출을 수행하고 그 결과를 로그에 게시합니다. 비용은 하루에 약 0.06달러(USDC) 정도입니다. 리스팅 제외에 대한 보험치고는 충분히 가치가 있습니다.
하트비트를 통해 또 다른 버그가 드러났습니다. 우리의 초기 구현은 MCP initialize 핸드셰이크(handshake)를 먼저 완료하지 않고 tools/call을 호출하고 있었습니다. 서버는 해당 호출을 조용히 거부하고 있었습니다. 이를 수정하기 위해서는 가공되지 않은 MCP 메시지 시퀀스(message sequence)를 추적해야 했습니다. 이는 해당 프로토콜이 상태(state)를 가진다는 점을 상기시켜 줍니다. 즉, 상태가 없는(stateless) REST API가 아닙니다.
외부 유료 고객 한 명. 0.01달러. 이 부분에 대해서는 솔직하게 말씀드리고 싶습니다. 결제 레일(payment rail)은 엔드투엔드(end-to-end)로 작동합니다. Base 메인넷에서 49건의 자체 테스트 트랜잭션이 확인되었으며, 2026-06-03에 0x9CC4 지갑으로부터 0.01달러의 외부 결제가 한 건 발생했습니다. 이것이 전체 외부 매출의 모습입니다. 메커니즘은 입증되었으며, 채택(adoption) 여부는 여전히 미지수입니다.
보안 측면에서는 자체 감사(self-audit)를 진행 중이며(아직 제3자 감사는 완료되지 않음), 코드베이스에 대해 독립적인 AI 리뷰어 검토를 수행했습니다. x402 검증 로직, 논스(nonce) 처리, 그리고 개인 키 격리(private key isolation)가 가장 중요하며 가장 많은 정밀 조사를 받은 부분입니다.
향후 방향
x402는 대중화의 순간(distribution moment)을 기다리고 있는 프로토콜입니다. 그 원형(primitive)은 올바릅니다: HTTP 네이티브(HTTP-native)이며, 암호학적(cryptographic)이고, 기계 간(machine-to-machine) 통신을 지원하며, 인간의 개입이 필요하지 않습니다. 부족한 점은 에이전트 지갑 계층(agent wallet layer)이 표준이 되는 것입니다.
그 순간이 다가오고 있습니다. Coinbase AgentKit과 CDP 지갑은 에이전트가 자금을 네이티브하게 보유하고 사용할 수 있도록 인프라를 구축하고 있습니다. 에이전트 지갑이 에이전트 LLM 클라이언트만큼 흔해지면, x402는 에이전트 대상 API를 수익화하는 명백한 방법이 될 것입니다. 개발자에게 필요한 통합은 단 하나의 fetch 래퍼(wrapper)뿐입니다.
그때까지 이 패턴은 초기 수용자(early-adopter) 영역에 머물 것입니다. 오늘날 이를 사용할 수 있는 에이전트는 운영자가 환경 내에 자금이 충전된 지갑과 개인 키(private key)를 명시적으로 프로비저닝(provisioned)한 에이전트들입니다. 이는 결코 적은 숫자가 아닙니다. 비용 귀속(cost attribution)에 관심을 가진, 에이전트 시스템(agentic systems)을 적극적으로 구축하고 있는 개발자 집단이 존재하기 때문입니다.
서버는 mcp.toolstem.com에서 라이브로 운영 중입니다. 자금이 충전된 Base 지갑으로 테스트해 보세요. initialize와 tools/list는 항상 무료이므로, 단 1센트도 쓰기 전에 전체 도구 인터페이스(tool surface)를 검토할 수 있습니다.
Finance 및 SEC EDGAR MCP 서버는 Coinbase의 x402 Bazaar에 등록되어 있습니다. 출처: github.com/toolstem/toolstem-mcp-server 및 github.com/toolstem/toolstem-sec-mcp-server. 지갑 없는 데모는 toolstem.com/playground에서 확인 가능합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기