Skip to main content
Glama
nicofains1

Agentic Ads

by nicofains1

Agentic Ads

AI 에이전트를 위한 Google AdSense. MCP 서버에 코드 3줄을 추가하세요. 모든 광고 클릭의 70%를 수익으로 가져가세요.

npm version Tests License: MIT MCP Node

라이브 데모 · 빠른 시작 · MCP 도구 · 자가 호스팅


빠른 시작

1단계 — 등록하고 API 키 받기 (30초):

웹 양식 방문: https://agentic-ads-production.up.railway.app/dev/register

또는 API 직접 사용:

curl -X POST https://agentic-ads-production.up.railway.app/api/register \
  -H "Content-Type: application/json" \
  -d '{"name": "My MCP Bot", "email": "me@example.com", "project_description": "A coding assistant that recommends dev tools"}'
# Returns: { "api_key": "aa_dev_...", "mcp_url": "https://agentic-ads-production.up.railway.app/mcp" }

2단계 — MCP 클라이언트 설정에 추가:

{
  "mcpServers": {
    "agentic-ads": {
      "url": "https://agentic-ads-production.up.railway.app/mcp",
      "transport": "http"
    }
  }
}

3단계 — 에이전트에서 search_ads 호출하고 모든 클릭에서 수익 창출:

// In your agent logic — when context is relevant
const ads = await mcp.callTool({
  name: 'search_ads',
  arguments: { query: 'best running shoes for marathon', max_results: 1 }
});

// Report events to get paid
await mcp.callTool({
  name: 'report_event',
  arguments: { ad_id: ads[0].ad_id, event_type: 'impression' }
});
// User clicks → report 'click' → you earn $0.35 on a $0.50 CPC ad

끝입니다. 수익화가 시작됩니다.


Related MCP server: superhighway-mcp

왜 필요한가

멋진 MCP 서버를 구축했습니다. 사용자들이 좋아합니다. 하지만 돈을 벌지 못하고 있습니다.

agentic-ads는 MCP 생태계에 누락된 수익화 계층입니다. 웹사이트 대신 AI 에이전트를 위한 Google AdSense와 같습니다.

문제

  • 16,000개 이상의 MCP 서버가 존재합니다. 거의 모두 수익화되지 않았습니다.

  • 개발자들은 유용한 도구를 만드는 데 몇 주를 소비하고, 0달러를 법니다.

  • 사용자들이 에이전트에게 제품 추천을 요청 → 에이전트가 웹을 스크래핑 → 브랜드가 그들에게 도달할 수 없습니다.

해결책

MCP 도구를 통해 제공되는 프라이버시를 존중하는 상황별 광고. 개발자는 70% 수익 공유(업계 최고 수준)를 받습니다. 광고주는 AI 에이전트 사용자에게 도달합니다. 모두가 이깁니다.


수익 계산기

예시: MCP 서버가 광고가 적합한 월 10,000건의 쿼리를 처리합니다.

시나리오

월 노출수

CTR

월 클릭수

CPC

귀하의 수익

보수적

10,000

2%

200

$0.50

$70/월

현실적

10,000

5%

500

$0.50

$175/월

강력함

10,000

8%

800

$0.75

$420/월

월 100,000 쿼리, 5% CTR 기준: 월 $1,750의 수동적 수입.

MCP 서버에 코드 3줄을 추가하면 연간 $21,000입니다.


상세 통합 가이드

MCP 개발자용 (수익 창출)

라이브 서버에 연결하고 도구 호출 시작 — 승인 절차 없음, 최소 금액 없음.

// 1. When user asks about products/services
const ads = await mcp.callTool({
  name: 'search_ads',
  arguments: {
    query: 'best running shoes for marathon',
    max_results: 2
  }
});

// 2. Show relevant ad in your response (if it adds value)
// 3. Report impression
await mcp.callTool({
  name: 'report_event',
  arguments: { ad_id: 'ad_xyz', event_type: 'impression' }
});

// 4. If user clicks → report 'click' event
// You earn $0.35 on a $0.50 CPC click (70% revenue share)

광고주용 (AI 사용자에게 도달)

# Create campaign + ad via MCP tools
mcp.callTool({
  name: 'create_campaign',
  arguments: {
    name: 'Q1 Running Shoes',
    total_budget: 500,
    pricing_model: 'cpc',
    bid_amount: 0.50
  }
});

mcp.callTool({
  name: 'create_ad',
  arguments: {
    campaign_id: 1,
    creative_text: 'Ultraboost 24 — 30% off! Free shipping.',
    link_url: 'https://adidas.com/ultraboost',
    keywords: ['running shoes', 'sneakers', 'marathon'],
    category: 'footwear'
  }
});

# Monitor analytics
mcp.callTool({ name: 'get_campaign_analytics', arguments: { campaign_id: 1 } });

작동 방식

┌─────────────┐                    ┌──────────────────┐                    ┌──────────────┐
│  Advertiser  │────────────────────│  Agentic Ads MCP │────────────────────│  Your MCP     │
│  (Brand/API) │  create_campaign   │     Server       │  search_ads        │  Server       │
│              │  create_ad         │                  │  report_event      │               │
│              │  get_analytics     │  - Matching      │  get_guidelines    │  Shows ads    │
└─────────────┘                    │  - Billing       │                    │  to users     │
                                   │  - Auth & Rate   │                    └──────────────┘
                                   │  - Analytics     │
                                   └──────────────────┘

예시 흐름:

  1. 사용자가 에이전트에게 "마라톤용 최고의 러닝화"를 묻습니다.

  2. 에이전트가 search_ads를 호출 → 입찰가 × 관련성으로 순위가 매겨진 관련 광고를 받습니다.

  3. 에이전트가 광고를 자연스럽게 표시: "Ultraboost 24 — $126 (30% 할인) Adidas.com (스폰서)"

  4. 사용자가 클릭 → click 이벤트 보고 → $0.35 수익 (CPC $0.50의 70%)

프라이버시: 사용자 추적 없음, 프로파일링 없음, 쿠키 없음. 오직 상황별 키워드 매칭만.


MCP 개발자들이 좋아하는 이유

1. 업계 최고 수준의 수익 공유

70% 는 개발자에게, 30%는 플랫폼에. 비교:

플랫폼

개발자 몫

agentic-ads

70%

Google AdSense

68%

Amazon Associates

1-10%

제휴 네트워크

5-30%

2. 제로 설정 장벽

  • 계약, 최소 금액, 승인 지연 없음

  • POST /api/register를 통해 몇 초 만에 등록 → API 키 획득

  • 설정에 MCP 서버 1개 추가 → 5분 안에 수익 창출 시작

3. 프라이버시 존중

  • 사용자 추적 또는 프로파일링 없음

  • 쿠키, 브라우저 지문 인식 없음

  • 오직 상황별 키워드 매칭만 (초기 Google AdWords처럼)

  • 사용자의 프라이버시는 그대로 유지

4. 어떤 광고를 표시할지 제어 가능

  • 에이전트가 어떤 광고를 표시할지 (표시한다면) 결정

  • 전체 사용자 컨텍스트는 로컬에 유지 (광고 서버로 전송되지 않음)

  • 관련성 임계값은 사용자手中

  • 사용자가 거부 가능 ("광고 없음")

5. 투명한 분석

  • 실시간 수익 추적

  • 언제, 왜, 얼마를 벌었는지 정확히 확인

  • 블랙박스 알고리즘이나 숨은 수수료 없음


MCP 도구 (총 8개)

개발자용 (소비자 측) — 3개 도구

도구

인증

설명

search_ads

공개

쿼리/키워드/카테고리/지역별로 광고 검색. 관련성 점수와 함께 순위 결과 반환.

report_event

개발자 키

노출/클릭/전환 이벤트 보고. 수익 계산 트리거.

get_ad_guidelines

공개

사용자에게 광고를 자연스럽게 표시하는 방법에 대한 형식 지침 획득.

광고주용 (게시자 측) — 5개 도구

도구

인증

설명

create_campaign

광고주 키

예산, 목표, 가격 모델(CPC/CPM/CPA)로 캠페인 생성.

create_ad

광고주 키

광고 문구, 키워드, 타겟팅, 링크 URL로 광고 생성.

get_campaign_analytics

광고주 키

성과 지표(노출수, 클릭수, 전환수, 지출, ROI) 획득.

update_campaign

광고주 키

캠페인 업데이트 (일시 중지/재개, 예산 조정, 타겟팅 변경).

list_campaigns

광고주 키

요약 통계와 함께 모든 캠페인 나열, 선택적 상태 필터.


가격 모델

지불 방식(광고주) 또는 수익 창출 방식(개발자) 선택:

모델

광고주 지불

개발자 수익 (70%)

청구 시점

CPC (클릭)

클릭당 $0.50

$0.35

사용자가 광고 링크 클릭

CPM (노출)

1,000회 노출당 $5.00

$3.50

사용자에게 광고 표시

CPA (전환)

전환당 $10.00

$7.00

사용자가 작업 완료 (구매, 가입 등)

예산 제어: 총 예산 + 일일 상한 설정. 예산 소진 시 자동 일시 중지.


API 키 받기

report_event 또는 광고주 도구를 호출하려면 API 키가 필요합니다.

옵션 A — 웹 양식 (가장 쉬움):

https://agentic-ads-production.up.railway.app/dev/register 방문하여 세부 정보를 입력하세요. API 키가 즉시 표시됩니다.

옵션 B — API:

curl -X POST https://agentic-ads-production.up.railway.app/api/register \
  -H "Content-Type: application/json" \
  -d '{"name": "My MCP Bot", "email": "me@example.com", "project_description": "A coding assistant"}'

응답:

{
  "developer_id": "...",
  "api_key": "aa_dev_...",
  "mcp_url": "https://agentic-ads-production.up.railway.app/mcp"
}

필드

필수

설명

name

예

프로젝트 또는 봇 이름

email

예

연락 이메일

project_description

아니오

MCP 서버에 대한 간단한 설명 (최대 500자)

Authorization 헤더에 api_key 사용: Authorization: Bearer aa_dev_...

Railway에 배포, 영구 저장소 사용: agentic-ads-production.up.railway.app의 라이브 서버는 Railway에서 실행되며 영구 볼륨을 사용합니다 — 데이터는 배포 및 재시작 시에도 보존됩니다. 자체 호스팅하려면 마운트된 볼륨을 가리키는 DATABASE_PATH=/data/ads.db를 사용하세요.


설치

옵션 1: 라이브 서버에 연결 (가장 쉬움)

MCP 클라이언트 설정(Claude Desktop, Cursor, Windsurf 등)에 추가:

{
  "mcpServers": {
    "agentic-ads": {
      "url": "https://agentic-ads-production.up.railway.app/mcp",
      "transport": "http"
    }
  }
}

상태 확인: https://agentic-ads-production.up.railway.app/health

옵션 2: 로컬 stdio (개발)

npm install -g agentic-ads

# Add to MCP config
{
  "mcpServers": {
    "agentic-ads": {
      "command": "npx",
      "args": ["agentic-ads", "--stdio"]
    }
  }
}

옵션 3: 자체 호스팅 (프로덕션)

git clone https://github.com/nicofains1/agentic-ads.git
cd agentic-ads
npm install && npm run build

# Start HTTP server
PORT=19877 npm run start:http

# Or stdio
npm run start:stdio

플래그:

node dist/server.js --http --port 19877 --db ./ads.db

플래그

기본값

설명

--http

—

HTTP 서버 시작 (기본값은 stdio)

--port N

3000

HTTP 포트

--db PATH

agentic-ads.db

SQLite 데이터베이스 경로

--api-key KEY

—

stdio 세션 사전 인증

환경 변수:

PORT=19877                     # HTTP server port (alternative to --port)
DATABASE_PATH=/data/ads.db     # SQLite database path (default: agentic-ads.db)
AGENTIC_ADS_API_KEY=aa_dev_... # Developer API key for stdio mode

DB 지속성: DATABASE_PATH를 영구 볼륨의 경로로 설정하세요. 빈 DB로 처음 실행 시 데모 캠페인이 자동 시드됩니다. 전체 배포 가이드는 DEPLOY.md를 참조하세요 (무료 영구 저장소를 위해 Railway 권장).


통합 예제

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json에 추가:

{
  "mcpServers": {
    "agentic-ads": {
      "command": "npx",
      "args": ["agentic-ads", "--stdio"]
    }
  }
}

Cursor / Windsurf

{
  "mcpServers": {
    "agentic-ads": {
      "url": "https://agentic-ads-production.up.railway.app/mcp",
      "transport": "http"
    }
  }
}

사용자 정의 TypeScript 에이전트

import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';

const transport = new StdioClientTransport({
  command: 'npx',
  args: ['agentic-ads', '--stdio']
});

const client = new Client({ name: 'my-agent', version: '1.0.0' });
await client.connect(transport);

// Search for ads
const result = await client.callTool({
  name: 'search_ads',
  arguments: {
    query: 'best laptops for coding',
    keywords: ['laptop', 'programming'],
    category: 'electronics',
    max_results: 3
  }
});

console.log(result.content[0].text);
// Returns: { "ads": [ { "ad_id": "...", "creative_text": "...", "relevance_score": 0.87 } ] }

Streamable HTTP 세션 관리

HTTP를 통해 라이브 서버를 호출할 때는 MCP 세션을 수동으로 관리해야 합니다. 다음은 원시 fetch를 사용한 전체 예제입니다:

const BASE = "https://agentic-ads-production.up.railway.app";
const API_KEY = "aa_dev_..."; // from /api/register

const headers = {
  "Content-Type": "application/json",
  "Accept": "application/json, text/event-stream",
  "Authorization": `Bearer ${API_KEY}`,
};

// 1. Initialize — get a session ID
const initRes = await fetch(`${BASE}/mcp`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    jsonrpc: "2.0", id: 1, method: "initialize",
    params: {
      protocolVersion: "2024-11-05",
      capabilities: {},
      clientInfo: { name: "my-agent", version: "1.0.0" },
    },
  }),
});
const sessionId = initRes.headers.get("mcp-session-id");

// 2. Send initialized notification (required by MCP spec)
await fetch(`${BASE}/mcp`, {
  method: "POST",
  headers: { ...headers, "mcp-session-id": sessionId },
  body: JSON.stringify({
    jsonrpc: "2.0", method: "notifications/initialized", params: {},
  }),
});

// 3. Call tools — pass session ID on every request
const res = await fetch(`${BASE}/mcp`, {
  method: "POST",
  headers: { ...headers, "mcp-session-id": sessionId },
  body: JSON.stringify({
    jsonrpc: "2.0", id: 2, method: "tools/call",
    params: { name: "search_ads", arguments: { query: "running shoes", max_results: 2 } },
  }),
});

// 4. Parse response (SSE format: "event: message\ndata: {...}")
const text = await res.text();
const dataLine = text.split("\n").find((l) => l.startsWith("data:"));
const result = JSON.parse(dataLine.slice(5));
console.log(result.result.content[0].text);

핵심 사항:

  • mcp-session-id 헤더는 initialize에서 반환되며 모든 후속 요청에 전송되어야 합니다.

  • 인증(Authorization: Bearer ...)은 세션별로 설정됩니다 — 해당 세션의 모든 도구 호출이 이를 상속합니다.

  • 서버는 SSE(Server-Sent Events) 형식을 사용합니다 — 응답에서 data: 줄을 파싱하세요.

  • 전체 작동 예제는 examples/demo-mcp-server를 참조하세요.


아키텍처

┌─────────────────────────────────────────────────────────────┐
│  MCP Server (Node.js 22 + TypeScript)                       │
│  ┌───────────────┐  ┌──────────────┐  ┌─────────────────┐  │
│  │ Tool Registry │  │ Auth & Rate  │  │ Matching Engine │  │
│  │ (8 tools)     │  │ Limiting     │  │ (relevance²     │  │
│  │               │  │ (SHA-256)    │  │ × bid × quality)│  │
│  └───────────────┘  └──────────────┘  └─────────────────┘  │
│  ┌───────────────┐  ┌──────────────┐  ┌─────────────────┐  │
│  │ SQLite (WAL)  │  │ Revenue      │  │ Analytics       │  │
│  │ - Campaigns   │  │ Split Engine │  │ (real-time)     │  │
│  │ - Ads         │  │ (70/30)      │  │                 │  │
│  │ - Events      │  │              │  │                 │  │
│  └───────────────┘  └──────────────┘  └─────────────────┘  │
└─────────────────────────────────────────────────────────────┘
          │                                          │
          │                                          │
  Streamable HTTP (remote)                     stdio (local)

주요 기능:

  • 프라이버시: 사용자 추적 없음, 상황별 매칭만

  • 관련성: score = relevance² × bidFactor × quality_score (관련성이 지배적)

  • 원자성: 단일 SQLite 트랜잭션에서 이벤트 삽입 + 통계 업데이트 + 수익 분할

  • 속도 제한: 키당 슬라이딩 윈도우 (도구에 따라 60-120 req/min)

  • 인증: SHA-256 해시 API 키, 역할 기반 접근 제어

  • 테스트: 13개 파일에 걸쳐 270개 테스트, 모두 통과


데모: 전체 흐름

# Clone repo
git clone https://github.com/nicofains1/agentic-ads.git
cd agentic-ads

# Install + build
npm install && npm run build

# Seed a local DB with demo data (generates real API keys)
tsx scripts/seed.ts --db test.db
# Note: seed.ts prints the generated dev/adv keys — use them below

# Run smoke test with real keys from seed output
tsx scripts/smoke-test.ts --db test.db --dev-key aa_dev_... --adv-key aa_adv_...

출력:

✅ Created advertiser: Adidas
✅ Created campaign: Q1 Running Shoes ($500 budget, CPC $0.50)
✅ Created ad: "Ultraboost 24 — 30% off!"
✅ Created developer: TestBot
✅ Searched ads for "running shoes" → 1 result (relevance 0.95)
✅ Reported impression → $0.00 charged (CPC model)
✅ Reported click → $0.50 charged, developer earned $0.35
✅ Analytics: 1 impression, 1 click, $0.50 spent, $0.35 developer revenue

개발자 지급 방식

MCP 서버가 CPC 광고의 클릭 이벤트를 보고하면, 입찰가의 70%가 귀하에게 지급됩니다 — 데이터베이스에서 원자적으로 추적됩니다. 잔액이 $10에 도달하면 payouts@agentic-ads.com으로 developer_id와 선호하는 지급 방식(PayPal 또는 Polygon의 USDC)을 이메일로 보내주세요. 잔액을 확인하고 5영업일 이내에 지급을 보냅니다. 네트워크가 확장되면 자동화된 Stripe 지급이 로드맵에 있습니다.


FAQ

개발자용

Q: API 키는 어떻게 받나요? A: REST 엔드포인트를 통해 등록:

curl -X POST https://agentic-ads-production.up.railway.app/api/register \
  -H "Content-Type: application/json" \
  -d '{"name": "Your Name", "email": "you@example.com"}'
# Returns: { "developer_id": "...", "api_key": "aa_dev_...", "mcp_url": "..." }

반환된 api_key를 MCP 요청에서 Authorization: Bearer aa_dev_...로 사용하세요.

Q: 광고를 반드시 표시해야 하나요? A: 아니요. 어떤 광고를 표시할지 제어할 수 있습니다. 사용자에게 진정한 가치를 더하는 경우에만 광고를 표시하세요. 에이전트 자율성은 기능입니다.

Q: 사용자가 광고를 싫어하면 어떻게 하나요? A: get_ad_guidelines의 지침을 따르세요: 응답당 최대 1-2개 광고, 항상 "스폰서" 공개, 거부("광고 없음") 존중.

Q: 프로덕션 준비가 되었나요? A: 네. 270개의 통과 테스트, https://agentic-ads-production.up.railway.app에서 라이브, MIT 라이선스.

Q: 어떤 MCP 클라이언트를 지원하나요? A: stdio 또는 Streamable HTTP를 지원하는 모든 MCP 클라이언트. Claude Desktop, Cursor, Windsurf, 사용자 정의 에이전트에서 테스트 완료.

광고주용

Q: 광고는 어떻게 만드나요? A: 광고주 API 키와 함께 create_campaign 및 create_ad MCP 도구를 사용하세요. 예제는 smoke-test.ts를 참조하세요.

Q: 예산은 어떻게 보호되나요? A: 예산 추적은 원자적입니다(SQLite 트랜잭션). 예산 소진 시 캠페인이 자동 일시 중지됩니다. 초과 지출 없음.

Q: 전환을 추적할 수 있나요? A: 네, CPA 가격 모델 + event_type: 'conversion'과 함께 report_event를 사용하세요. 기여 분석을 위해 링크 URL에 UTM 매개변수를 추가하세요.

Q: 어떤 타겟팅 옵션이 있나요? A: MVP는 키워드(정확히 일치 + 부분 일치), 카테고리, 지역(국가 수준), 언어를 지원합니다. 의미 기반 매칭은 2단계에서 추가됩니다.

일반

Q: 사용자를 추적하나요? A: 아니요. 에이전트로부터 익명화된 키워드 쿼리만 수신합니다. 사용자 ID, 쿠키, 프로파일링은 없습니다. 프라이버시 우선입니다.

Q: 어떻게 사기를 방지하나요? A: MVP는 API 키 인증, 속도 제한, 신뢰 기반 신고를 사용합니다. 2단계에서는 이상 탐지 휴리스틱이 추가됩니다(issue #47 참조).

Q: 오픈 소스인가요? A: 네, MIT 라이선스입니다. 포크, 자체 호스팅, 기여가 가능합니다.


로드맵

  • MVP — 8개의 MCP 도구, 키워드 매칭, 결제, 인증, 270개의 테스트

  • 배포 완료 — https://agentic-ads-production.up.railway.app에서 운영 중

  • 마켓플레이스 등록 — Anthropic Registry, Smithery, Glama, PulseMCP에 제출 (1주차)

  • 대시보드 REST API — 광고주/개발자용 웹 UI (#40)

  • 사기 탐지 — 이상 휴리스틱 (#47)

  • 의미 기반 매칭 — 임베딩 기반 관련성 (2단계)

  • A/B 테스팅 — 광고 크리에이티브 변형 (#41)

  • Stripe 지급 — 자동화된 개발자 지급 (3단계)


기여하기

GitHub Issues 워크플로우를 따릅니다:

  1. 아이디어에 대한 이슈가 이미 존재하는지 확인

  2. 없다면: gh issue create --title "아이디어"

  3. 작업 시작 전 승인받기

  4. 브랜치: feature/#N-설명

  5. 커밋: feat(#N): 설명

  6. main으로 PR 보내기

자세한 가이드라인은 CLAUDE.md를 참조하세요.


문서


지원


라이선스

MIT — 자세한 내용은 LICENSE를 참조하세요.


이것이 중요한 이유

AI 에이전트가 웹을 집어삼키고 있습니다. 사용자는 Google을 검색하는 대신 에이전트에게 묻습니다. 에이전트는 웹사이트 대신 답변합니다.

과거의 인터넷: 사용자가 웹사이트를 탐색 → 광고를 봄 → 광고주가 사용자에게 도달.

새로운 인터넷: 사용자가 에이전트에게 질문 → 에이전트가 웹사이트를 스크래핑 → 광고주가 사용자에게 도달할 수 없음.

agentic-ads가 이를 해결합니다. 에이전트 경제를 위한 광고 레이어입니다.

그리고 MCP 개발자 여러분은 중개자 역할로 수익의 70%를 얻습니다.

기회: 16,000개 이상의 MCP 서버 중 거의 수익화되지 않았습니다. 여러분이 첫 번째가 될 수 있습니다.


제작 도구: Model Context Protocol (MCP) — AI 에이전트를 도구에 연결하는 개방형 표준

라이브 데모: https://agentic-ads-production.up.railway.app

시작하기: MCP 서버를 설정에 추가하고, 이번 주에 첫 수익을 올리세요.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that gives Claude Desktop direct access to your Google AdSense account. Ask plain English questions about your revenue — no dashboard required.
    10
    13 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for Google AdSense management. Create ad units, generate framework-specific ad code, manage earnings reports, and automate ads.txt — all from your AI assistant.
    12
    13 npm
    MIT