{
  "markdown": "# Agentic Ads\n\n> **Google AdSense for AI agents.** Add 3 lines of code to your MCP server. Earn 70% of every ad click.\n\n[![npm version](https://img.shields.io/npm/v/agentic-ads?color=blue&label=npm)](https://www.npmjs.com/package/agentic-ads)\n[![Tests](https://img.shields.io/badge/tests-270%20passing-brightgreen)](https://github.com/nicofains1/agentic-ads)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![MCP](https://img.shields.io/badge/MCP-v1.12.0-orange)](https://modelcontextprotocol.io)\n[![Node](https://img.shields.io/badge/node-%3E%3D22.0.0-brightgreen)](https://nodejs.org)\n\n**[Live Demo](https://agentic-ads-production.up.railway.app/health)** · **[Quick Start](#quick-start)** · **[MCP Tools](#mcp-tools-8-total)** · **[Self-Host](#option-3-self-host-production)**\n\n---\n\n## Quick Start\n\n**Step 1 — Register and get your API key (30 seconds):**\n\nVisit the web form: **[https://agentic-ads-production.up.railway.app/dev/register](https://agentic-ads-production.up.railway.app/dev/register)**\n\nOr use the API directly:\n\n```bash\ncurl -X POST https://agentic-ads-production.up.railway.app/api/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"My MCP Bot\", \"email\": \"me@example.com\", \"project_description\": \"A coding assistant that recommends dev tools\"}'\n# Returns: { \"api_key\": \"aa_dev_...\", \"mcp_url\": \"https://agentic-ads-production.up.railway.app/mcp\" }\n```\n\n**Step 2 — Add to your MCP client config:**\n\n```json\n{\n  \"mcpServers\": {\n    \"agentic-ads\": {\n      \"url\": \"https://agentic-ads-production.up.railway.app/mcp\",\n      \"transport\": \"http\"\n    }\n  }\n}\n```\n\n**Step 3 — Call `search_ads` in your agent and earn on every click:**\n\n```typescript\n// In your agent logic — when context is relevant\nconst ads = await mcp.callTool({\n  name: 'search_ads',\n  arguments: { query: 'best running shoes for marathon', max_results: 1 }\n});\n\n// Report events to get paid\nawait mcp.callTool({\n  name: 'report_event',\n  arguments: { ad_id: ads[0].ad_id, event_type: 'impression' }\n});\n// User clicks → report 'click' → you earn $0.35 on a $0.50 CPC ad\n```\n\nThat's it. You're monetizing.\n\n---\n\n## Why This Exists\n\nYou built an amazing MCP server. Users love it. But you're not making money.\n\n**agentic-ads** is the missing monetization layer for the MCP ecosystem. It's like Google AdSense, but for AI agents instead of websites.\n\n### The Problem\n\n- 16,000+ MCP servers exist. Almost none monetize.\n- Developers spend weeks building useful tools, earn $0.\n- Users ask agents for product recommendations → agents scrape the web → brands can't reach them.\n\n### The Solution\n\nPrivacy-respecting contextual ads served through MCP tools. Developers earn **70% revenue share** (industry-leading). Advertisers reach AI agent users. Everyone wins.\n\n---\n\n## Revenue Calculator\n\n**Example:** Your MCP server gets 10,000 queries/month where ads make sense.\n\n| Scenario | Impressions/mo | CTR | Clicks/mo | CPC | Your Revenue |\n|----------|----------------|-----|-----------|-----|--------------|\n| Conservative | 10,000 | 2% | 200 | $0.50 | **$70/mo** |\n| Realistic | 10,000 | 5% | 500 | $0.50 | **$175/mo** |\n| Strong | 10,000 | 8% | 800 | $0.75 | **$420/mo** |\n\n**At 100k queries/month with 5% CTR:** $1,750/month passive income.\n\nThat's **$21,000/year** for adding 3 lines of code to your MCP server.\n\n---\n\n## Detailed Integration Guide\n\n### For MCP Developers (Earn Money)\n\nConnect the live server and start calling tools — no approval process, no minimums.\n\n```typescript\n// 1. When user asks about products/services\nconst ads = await mcp.callTool({\n  name: 'search_ads',\n  arguments: {\n    query: 'best running shoes for marathon',\n    max_results: 2\n  }\n});\n\n// 2. Show relevant ad in your response (if it adds value)\n// 3. Report impression\nawait mcp.callTool({\n  name: 'report_event',\n  arguments: { ad_id: 'ad_xyz', event_type: 'impression' }\n});\n\n// 4. If user clicks → report 'click' event\n// You earn $0.35 on a $0.50 CPC click (70% revenue share)\n```\n\n### For Advertisers (Reach AI Users)\n\n```bash\n# Create campaign + ad via MCP tools\nmcp.callTool({\n  name: 'create_campaign',\n  arguments: {\n    name: 'Q1 Running Shoes',\n    total_budget: 500,\n    pricing_model: 'cpc',\n    bid_amount: 0.50\n  }\n});\n\nmcp.callTool({\n  name: 'create_ad',\n  arguments: {\n    campaign_id: 1,\n    creative_text: 'Ultraboost 24 — 30% off! Free shipping.',\n    link_url: 'https://adidas.com/ultraboost',\n    keywords: ['running shoes', 'sneakers', 'marathon'],\n    category: 'footwear'\n  }\n});\n\n# Monitor analytics\nmcp.callTool({ name: 'get_campaign_analytics', arguments: { campaign_id: 1 } });\n```\n\n---\n\n## How It Works\n\n```\n┌─────────────┐                    ┌──────────────────┐                    ┌──────────────┐\n│  Advertiser  │────────────────────│  Agentic Ads MCP │────────────────────│  Your MCP     │\n│  (Brand/API) │  create_campaign   │     Server       │  search_ads        │  Server       │\n│              │  create_ad         │                  │  report_event      │               │\n│              │  get_analytics     │  - Matching      │  get_guidelines    │  Shows ads    │\n└─────────────┘                    │  - Billing       │                    │  to users     │\n                                   │  - Auth & Rate   │                    └──────────────┘\n                                   │  - Analytics     │\n                                   └──────────────────┘\n```\n\n**Example flow:**\n\n1. User asks your agent: \"best running shoes for marathon\"\n2. Your agent calls `search_ads` → gets relevant ads ranked by bid × relevance\n3. Agent shows ad naturally: \"Ultraboost 24 — $126 (30% off) at Adidas.com (Sponsored)\"\n4. User clicks → you report `click` event → you earn $0.35 (70% of $0.50 CPC)\n\n**Privacy:** No user tracking, no profiling, no cookies. Only contextual keyword matching.\n\n---\n\n## Why MCP Developers Love This\n\n### 1. Industry-Leading Revenue Share\n\n**70%** to you, 30% to platform. Compare:\n\n| Platform | Developer Share |\n|----------|-----------------|\n| **agentic-ads** | **70%** |\n| Google AdSense | 68% |\n| Amazon Associates | 1-10% |\n| Affiliate networks | 5-30% |\n\n### 2. Zero Setup Friction\n\n- No contracts, no minimums, no approval delays\n- Register in seconds via `POST /api/register` → get your API key\n- Add 1 MCP server to your config → start earning in 5 minutes\n\n### 3. Privacy-Respecting\n\n- No user tracking or profiling\n- No cookies, no browser fingerprinting\n- Only contextual keyword matching (like early Google AdWords)\n- Your users' privacy stays intact\n\n### 4. You Control What Ads Show\n\n- Agent decides which ads (if any) to show\n- Full user context stays local (never sent to ad server)\n- Relevance threshold in your hands\n- Users can opt out (\"no ads please\")\n\n### 5. Transparent Analytics\n\n- Real-time revenue tracking\n- See exactly what you earned, when, and why\n- No black-box algorithms or hidden fees\n\n---\n\n## MCP Tools (8 Total)\n\n### For Developers (Consumer Side) — 3 Tools\n\n| Tool | Auth | Description |\n|------|------|-------------|\n| `search_ads` | Public | Search for ads by query/keywords/category/geo. Returns ranked results with relevance scores. |\n| `report_event` | Developer key | Report impression/click/conversion events. Triggers revenue calculation. |\n| `get_ad_guidelines` | Public | Get formatting guidelines for how to present ads naturally to users. |\n\n### For Advertisers (Publisher Side) — 5 Tools\n\n| Tool | Auth | Description |\n|------|------|-------------|\n| `create_campaign` | Advertiser key | Create campaign with budget, objective, pricing model (CPC/CPM/CPA). |\n| `create_ad` | Advertiser key | Create ad with creative text, keywords, targeting, link URL. |\n| `get_campaign_analytics` | Advertiser key | Get performance metrics (impressions, clicks, conversions, spend, ROI). |\n| `update_campaign` | Advertiser key | Update campaign (pause/resume, adjust budget, change targeting). |\n| `list_campaigns` | Advertiser key | List all campaigns with summary stats, optional status filter. |\n\n---\n\n## Pricing Models\n\nChoose how you want to pay (advertisers) or earn (developers):\n\n| Model | Advertiser Pays | Developer Earns (70%) | When Charged |\n|-------|----------------|-----------------------|--------------|\n| **CPC** (Click) | $0.50 per click | $0.35 | User clicks ad link |\n| **CPM** (Impression) | $5.00 per 1000 views | $3.50 | Ad shown to user |\n| **CPA** (Conversion) | $10.00 per conversion | $7.00 | User completes action (purchase, signup, etc.) |\n\n**Budget controls:** Set total budget + daily caps. Auto-pause when budget exhausted.\n\n---\n\n## Getting Your API Key\n\nTo call `report_event` or advertiser tools, you need an API key.\n\n**Option A — Web form (easiest):**\n\nVisit **[https://agentic-ads-production.up.railway.app/dev/register](https://agentic-ads-production.up.railway.app/dev/register)** and fill in your details. Your API key is displayed immediately.\n\n**Option B — API:**\n\n```bash\ncurl -X POST https://agentic-ads-production.up.railway.app/api/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"My MCP Bot\", \"email\": \"me@example.com\", \"project_description\": \"A coding assistant\"}'\n```\n\nResponse:\n```json\n{\n  \"developer_id\": \"...\",\n  \"api_key\": \"aa_dev_...\",\n  \"mcp_url\": \"https://agentic-ads-production.up.railway.app/mcp\"\n}\n```\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `name` | Yes | Your project or bot name |\n| `email` | Yes | Contact email |\n| `project_description` | No | Brief description of your MCP server (max 500 chars) |\n\nUse the `api_key` in the `Authorization` header: `Authorization: Bearer aa_dev_...`\n\n> **Deployed on Railway with persistent storage:** The live server at `agentic-ads-production.up.railway.app` runs on Railway with a persistent volume — data is preserved across deploys and restarts. To self-host, use `DATABASE_PATH=/data/ads.db` pointing to a mounted volume.\n\n---\n\n## Installation\n\n### Option 1: Connect to Live Server (Easiest)\n\nAdd to your MCP client config (Claude Desktop, Cursor, Windsurf, etc.):\n\n```json\n{\n  \"mcpServers\": {\n    \"agentic-ads\": {\n      \"url\": \"https://agentic-ads-production.up.railway.app/mcp\",\n      \"transport\": \"http\"\n    }\n  }\n}\n```\n\n**Health check:** https://agentic-ads-production.up.railway.app/health\n\n### Option 2: Local stdio (Development)\n\n```bash\nnpm install -g agentic-ads\n\n# Add to MCP config\n{\n  \"mcpServers\": {\n    \"agentic-ads\": {\n      \"command\": \"npx\",\n      \"args\": [\"agentic-ads\", \"--stdio\"]\n    }\n  }\n}\n```\n\n### Option 3: Self-Host (Production)\n\n```bash\ngit clone https://github.com/nicofains1/agentic-ads.git\ncd agentic-ads\nnpm install && npm run build\n\n# Start HTTP server\nPORT=19877 npm run start:http\n\n# Or stdio\nnpm run start:stdio\n```\n\n**Flags:**\n\n```bash\nnode dist/server.js --http --port 19877 --db ./ads.db\n```\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--http` | — | Start HTTP server (default is stdio) |\n| `--port N` | `3000` | HTTP port |\n| `--db PATH` | `agentic-ads.db` | SQLite database path |\n| `--api-key KEY` | — | Pre-authenticate stdio sessions |\n\n**Environment Variables:**\n\n```bash\nPORT=19877                     # HTTP server port (alternative to --port)\nDATABASE_PATH=/data/ads.db     # SQLite database path (default: agentic-ads.db)\nAGENTIC_ADS_API_KEY=aa_dev_... # Developer API key for stdio mode\n```\n\n**DB Persistence:** Set `DATABASE_PATH` to a path on a persistent volume. On first run with an empty DB, demo campaigns are auto-seeded. See [DEPLOY.md](DEPLOY.md) for full deployment guide (Railway recommended for free persistent storage).\n\n---\n\n## Integration Examples\n\n### Claude Desktop\n\nAdd to `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"agentic-ads\": {\n      \"command\": \"npx\",\n      \"args\": [\"agentic-ads\", \"--stdio\"]\n    }\n  }\n}\n```\n\n### Cursor / Windsurf\n\n```json\n{\n  \"mcpServers\": {\n    \"agentic-ads\": {\n      \"url\": \"https://agentic-ads-production.up.railway.app/mcp\",\n      \"transport\": \"http\"\n    }\n  }\n}\n```\n\n### Custom TypeScript Agent\n\n```typescript\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';\n\nconst transport = new StdioClientTransport({\n  command: 'npx',\n  args: ['agentic-ads', '--stdio']\n});\n\nconst client = new Client({ name: 'my-agent', version: '1.0.0' });\nawait client.connect(transport);\n\n// Search for ads\nconst result = await client.callTool({\n  name: 'search_ads',\n  arguments: {\n    query: 'best laptops for coding',\n    keywords: ['laptop', 'programming'],\n    category: 'electronics',\n    max_results: 3\n  }\n});\n\nconsole.log(result.content[0].text);\n// Returns: { \"ads\": [ { \"ad_id\": \"...\", \"creative_text\": \"...\", \"relevance_score\": 0.87 } ] }\n```\n\n### Streamable HTTP Session Management\n\nWhen calling the live server over HTTP, you must manage MCP sessions manually. Here's a complete example using raw `fetch`:\n\n```typescript\nconst BASE = \"https://agentic-ads-production.up.railway.app\";\nconst API_KEY = \"aa_dev_...\"; // from /api/register\n\nconst headers = {\n  \"Content-Type\": \"application/json\",\n  \"Accept\": \"application/json, text/event-stream\",\n  \"Authorization\": `Bearer ${API_KEY}`,\n};\n\n// 1. Initialize — get a session ID\nconst initRes = await fetch(`${BASE}/mcp`, {\n  method: \"POST\",\n  headers,\n  body: JSON.stringify({\n    jsonrpc: \"2.0\", id: 1, method: \"initialize\",\n    params: {\n      protocolVersion: \"2024-11-05\",\n      capabilities: {},\n      clientInfo: { name: \"my-agent\", version: \"1.0.0\" },\n    },\n  }),\n});\nconst sessionId = initRes.headers.get(\"mcp-session-id\");\n\n// 2. Send initialized notification (required by MCP spec)\nawait fetch(`${BASE}/mcp`, {\n  method: \"POST\",\n  headers: { ...headers, \"mcp-session-id\": sessionId },\n  body: JSON.stringify({\n    jsonrpc: \"2.0\", method: \"notifications/initialized\", params: {},\n  }),\n});\n\n// 3. Call tools — pass session ID on every request\nconst res = await fetch(`${BASE}/mcp`, {\n  method: \"POST\",\n  headers: { ...headers, \"mcp-session-id\": sessionId },\n  body: JSON.stringify({\n    jsonrpc: \"2.0\", id: 2, method: \"tools/call\",\n    params: { name: \"search_ads\", arguments: { query: \"running shoes\", max_results: 2 } },\n  }),\n});\n\n// 4. Parse response (SSE format: \"event: message\\ndata: {...}\")\nconst text = await res.text();\nconst dataLine = text.split(\"\\n\").find((l) => l.startsWith(\"data:\"));\nconst result = JSON.parse(dataLine.slice(5));\nconsole.log(result.result.content[0].text);\n```\n\n**Key points:**\n- The `mcp-session-id` header is returned on `initialize` and must be sent on all subsequent requests\n- Auth (`Authorization: Bearer ...`) is set per-session — all tool calls in that session inherit it\n- The server uses SSE (Server-Sent Events) format — parse the `data:` line from the response\n- See [`examples/demo-mcp-server`](examples/demo-mcp-server) for a full working example\n\n---\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│  MCP Server (Node.js 22 + TypeScript)                       │\n│  ┌───────────────┐  ┌──────────────┐  ┌─────────────────┐  │\n│  │ Tool Registry │  │ Auth & Rate  │  │ Matching Engine │  │\n│  │ (8 tools)     │  │ Limiting     │  │ (relevance²     │  │\n│  │               │  │ (SHA-256)    │  │ × bid × quality)│  │\n│  └───────────────┘  └──────────────┘  └─────────────────┘  │\n│  ┌───────────────┐  ┌──────────────┐  ┌─────────────────┐  │\n│  │ SQLite (WAL)  │  │ Revenue      │  │ Analytics       │  │\n│  │ - Campaigns   │  │ Split Engine │  │ (real-time)     │  │\n│  │ - Ads         │  │ (70/30)      │  │                 │  │\n│  │ - Events      │  │              │  │                 │  │\n│  └───────────────┘  └──────────────┘  └─────────────────┘  │\n└─────────────────────────────────────────────────────────────┘\n          │                                          │\n          │                                          │\n  Streamable HTTP (remote)                     stdio (local)\n```\n\n**Key Features:**\n\n- **Privacy:** No user tracking, contextual matching only\n- **Relevance:** `score = relevance² × bidFactor × quality_score` (relevance dominates)\n- **Atomicity:** Event insert + stats update + revenue split in single SQLite transaction\n- **Rate Limiting:** Per-key sliding window (60-120 req/min depending on tool)\n- **Auth:** SHA-256 hashed API keys, role-based access control\n- **Testing:** 270 tests across 13 files, all passing\n\n---\n\n## Demo: Full Flow\n\n```bash\n# Clone repo\ngit clone https://github.com/nicofains1/agentic-ads.git\ncd agentic-ads\n\n# Install + build\nnpm install && npm run build\n\n# Seed a local DB with demo data (generates real API keys)\ntsx scripts/seed.ts --db test.db\n# Note: seed.ts prints the generated dev/adv keys — use them below\n\n# Run smoke test with real keys from seed output\ntsx scripts/smoke-test.ts --db test.db --dev-key aa_dev_... --adv-key aa_adv_...\n```\n\n**Output:**\n\n```\n✅ Created advertiser: Adidas\n✅ Created campaign: Q1 Running Shoes ($500 budget, CPC $0.50)\n✅ Created ad: \"Ultraboost 24 — 30% off!\"\n✅ Created developer: TestBot\n✅ Searched ads for \"running shoes\" → 1 result (relevance 0.95)\n✅ Reported impression → $0.00 charged (CPC model)\n✅ Reported click → $0.50 charged, developer earned $0.35\n✅ Analytics: 1 impression, 1 click, $0.50 spent, $0.35 developer revenue\n```\n\n---\n\n## How Developers Get Paid\n\nWhen your MCP server reports a click event on a CPC ad, 70% of the bid goes to you — tracked atomically in our database. Once your balance reaches **$10**, email `payouts@agentic-ads.com` with your developer_id and your preferred payment method (PayPal or USDC on Polygon). We verify your balance and send payment within 5 business days. Automated Stripe payouts are on the roadmap for when the network scales.\n\n---\n\n## FAQ\n\n### For Developers\n\n**Q: How do I get an API key?**\nA: Register via the REST endpoint:\n\n```bash\ncurl -X POST https://agentic-ads-production.up.railway.app/api/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"Your Name\", \"email\": \"you@example.com\"}'\n# Returns: { \"developer_id\": \"...\", \"api_key\": \"aa_dev_...\", \"mcp_url\": \"...\" }\n```\n\nUse the returned `api_key` as `Authorization: Bearer aa_dev_...` in your MCP requests.\n\n**Q: Do I HAVE to show ads?**\nA: No. You control which ads to show. Only show ads if they genuinely add value to the user. Agent autonomy is a feature.\n\n**Q: What if my users hate ads?**\nA: Follow the guidelines from `get_ad_guidelines`: max 1-2 ads per response, always disclose \"sponsored\", respect opt-out (\"no ads please\").\n\n**Q: Is this production-ready?**\nA: Yes. 270 passing tests, live at https://agentic-ads-production.up.railway.app, MIT license.\n\n**Q: What MCP clients are supported?**\nA: Any MCP client supporting stdio or Streamable HTTP. Tested with Claude Desktop, Cursor, Windsurf, custom agents.\n\n### For Advertisers\n\n**Q: How do I create ads?**\nA: Use the `create_campaign` and `create_ad` MCP tools with an advertiser API key. See [smoke-test.ts](scripts/smoke-test.ts) for examples.\n\n**Q: How is my budget protected?**\nA: Budget tracking is atomic (SQLite transaction). When budget exhausted → campaign auto-pauses. No overspend.\n\n**Q: Can I track conversions?**\nA: Yes, use CPA pricing model + `report_event` with `event_type: 'conversion'`. Add UTM params to your link URL for attribution.\n\n**Q: What targeting options exist?**\nA: MVP has keywords (exact + partial match), categories, geo (country-level), and language. Semantic matching coming in Phase 2.\n\n### General\n\n**Q: Do you track users?**\nA: No. We only receive anonymized keyword queries from agents. No user IDs, no cookies, no profiling. Privacy-first.\n\n**Q: How do you prevent fraud?**\nA: MVP uses API key auth + rate limiting + trust-based reporting. Phase 2 adds anomaly detection heuristics (see [issue #47](https://github.com/nicofains1/agentic-ads/issues/47)).\n\n**Q: Is this open source?**\nA: Yes, MIT license. Fork it, self-host it, contribute to it.\n\n---\n\n## Roadmap\n\n- [x] **MVP** — 8 MCP tools, keyword matching, billing, auth, 270 tests\n- [x] **Deployed** — Live at https://agentic-ads-production.up.railway.app\n- [ ] **Marketplace Listings** — Submit to Anthropic Registry, Smithery, Glama, PulseMCP (Week 1)\n- [ ] **Dashboard REST API** — Web UI for advertisers/developers ([#40](https://github.com/nicofains1/agentic-ads/issues/40))\n- [ ] **Fraud Detection** — Anomaly heuristics ([#47](https://github.com/nicofains1/agentic-ads/issues/47))\n- [ ] **Semantic Matching** — Embeddings-based relevance (Phase 2)\n- [ ] **A/B Testing** — Ad creative variants ([#41](https://github.com/nicofains1/agentic-ads/issues/41))\n- [ ] **Stripe Payouts** — Automated developer payments (Phase 3)\n\n---\n\n## Contributing\n\nWe follow the GitHub Issues workflow:\n\n1. Check if an issue exists for your idea\n2. If not: `gh issue create --title \"Your idea\"`\n3. Get approval before starting work\n4. Branch: `feature/#N-description`\n5. Commit: `feat(#N): description`\n6. PR to `main`\n\nSee [CLAUDE.md](CLAUDE.md) for detailed guidelines.\n\n---\n\n## Documentation\n\n- **[CLAUDE.md](CLAUDE.md)** — Development guidelines\n- **[bulloak.md](bulloak.md)** — Behavioral specification (source of truth for tests)\n- **[docs/PRD.md](docs/PRD.md)** — Full Product Requirements Document\n- **[scripts/smoke-test.ts](scripts/smoke-test.ts)** — Reference implementation\n\n---\n\n## Support\n\n- **GitHub Issues:** [https://github.com/nicofains1/agentic-ads/issues](https://github.com/nicofains1/agentic-ads/issues)\n- **Discussions:** (coming soon)\n- **Discord:** (coming soon — join MCP Developers community)\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE) for details.\n\n---\n\n## Why This Matters\n\nAI agents are eating the web. Users ask agents instead of searching Google. Agents answer instead of websites.\n\n**The old internet:** Users browse websites → see ads → advertisers reach users.\n\n**The new internet:** Users ask agents → agents scrape websites → **advertisers can't reach users**.\n\n**agentic-ads fixes this.** It's the ad layer for the agent economy.\n\nAnd you — the MCP developer — earn 70% of the revenue for being the intermediary.\n\n**The opportunity:** 16,000+ MCP servers, almost none monetize. You can be first.\n\n---\n\n**Built with** [Model Context Protocol (MCP)](https://modelcontextprotocol.io) — the open standard for connecting AI agents to tools.\n\n**Live demo:** [https://agentic-ads-production.up.railway.app](https://agentic-ads-production.up.railway.app)\n\n**Get started:** Add the MCP server to your config, earn your first dollar this week.\n",
  "bytes": 22526,
  "sha": "b13264dff1c0c2be5370276c0744520966663b690a8d4085641c7e12427cc4c3",
  "repo_slug": "nicofains1/agentic-ads",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_nicofains1_agentic_ads_d5fcac46/readme"
}