<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nicolas Fainstein</title>
    <description>The latest articles on DEV Community by Nicolas Fainstein (@nicolas_fainstein).</description>
    <link>https://dev.to/nicolas_fainstein</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3082069%2F937cdf7d-a5d1-451b-8223-a56f13c8249b.jpg</url>
      <title>DEV Community: Nicolas Fainstein</title>
      <link>https://dev.to/nicolas_fainstein</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nicolas_fainstein"/>
    <language>en</language>
    <item>
      <title>OWASP ASI08 Says Your Multi-Agent System Needs Cascade Detection</title>
      <dc:creator>Nicolas Fainstein</dc:creator>
      <pubDate>Tue, 10 Mar 2026 15:44:57 +0000</pubDate>
      <link>https://dev.to/nicolas_fainstein/owasp-asi08-says-your-multi-agent-system-needs-cascade-detection-p1a</link>
      <guid>https://dev.to/nicolas_fainstein/owasp-asi08-says-your-multi-agent-system-needs-cascade-detection-p1a</guid>
      <description>&lt;p&gt;In December 2025, OWASP published the Top 10 for Agentic Applications. Item eight, ASI08, covers cascading failures in agentic AI systems. If you run multiple AI agents that interact with each other, this applies to you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What ASI08 Actually Says
&lt;/h2&gt;

&lt;p&gt;The formal definition: "A cascading failure in agentic AI occurs when a single fault - whether a hallucination, malicious input, corrupted tool, or poisoned memory - propagates across autonomous agents and compounds into system-wide harm."&lt;/p&gt;

&lt;p&gt;Three propagation mechanisms make agent cascades different from traditional software failures:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feedback loops.&lt;/strong&gt; Two agents whose outputs become each other's inputs create self-reinforcing cycles. A small error in Agent A's output gets amplified by Agent B, which feeds it back to Agent A, which amplifies it further. Traditional circuit breakers don't catch this because each individual request looks normal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transitive trust chains.&lt;/strong&gt; Agent B trusts Agent A's output. Agent C trusts Agent B's output. If Agent A gets compromised or hallucinates, the bad data flows through the entire chain. No agent independently verifies against ground truth because they trust what comes from upstream.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Persistent memory poisoning.&lt;/strong&gt; An error written to a vector store, knowledge base, or long-term memory continues influencing agent reasoning in future runs. The failure isn't a one-time event. It becomes a persistent corruption that survives restarts.&lt;/p&gt;

&lt;p&gt;The OWASP expert review board (100+ contributors including NIST and European Commission representatives) recommends a defense-in-depth approach with three layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Architectural isolation with trust boundaries and circuit breakers&lt;/li&gt;
&lt;li&gt;Runtime verification with multi-agent consensus and ground truth validation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comprehensive observability with automated cascade pattern detection and kill switches&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That third point is where most teams have a gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Observability Gap
&lt;/h2&gt;

&lt;p&gt;Your agents probably have logging. They might have LLM tracing through Langfuse or LangSmith. But when Agent C errors at 14:32, can you answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which upstream agent's output caused it?&lt;/li&gt;
&lt;li&gt;What was the exact payload at each hop in the chain?&lt;/li&gt;
&lt;li&gt;Did the error originate from a tool call failure, a hallucination, or a memory corruption?&lt;/li&gt;
&lt;li&gt;How many other agents are now operating on the same bad data?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your answer is "we'd read through the logs and try to piece it together," you're doing forensics by hand. ASI08's mitigation specifically calls for &lt;em&gt;automated&lt;/em&gt; cascade pattern detection. Not log analysis after the fact.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Math Problem
&lt;/h2&gt;

&lt;p&gt;Your 10-agent system has a reliability problem nobody talks about. If each agent is 95% reliable on its own (which is generous), the probability that all 10 succeed on a given run is 0.95^10 = 0.60.&lt;/p&gt;

&lt;p&gt;Your system is 40% unreliable even when each component is 95% reliable.&lt;/p&gt;

&lt;p&gt;And that assumes independent failures. Agent cascades create correlated failures where one agent's problem causes three others to break simultaneously. The actual reliability is lower than the math suggests.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Compliance Looks Like
&lt;/h2&gt;

&lt;p&gt;To meet ASI08's observability requirements, you need:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Heartbeat monitoring.&lt;/strong&gt; Every agent reports its status at regular intervals. If an agent stops reporting, that's signal. If an agent reports degraded status, that's signal. A fleet-wide view shows you which agents are healthy, which are degraded, and which have gone silent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-agent event correlation.&lt;/strong&gt; When a failure happens, trace backward through the event log. Agent C failed because it received bad input. That input came from Agent B. Agent B's output was corrupted because Agent A's tool call returned an error that B didn't handle. The full chain, with timestamps and payloads, stored automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alert deduplication.&lt;/strong&gt; The same alert from the same agent every 5 minutes is noise. You need escalation tiers: the first occurrence is info, the fifth is a warning, the tenth is critical. Without dedup, your team develops alert fatigue, which is itself a cascade risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forensic replay.&lt;/strong&gt; For any failure, reconstruct what happened: "Agent A returned X. Agent B transformed it to Y. Agent C received Y and failed because Z." This is deterministic replay from stored evidence, not reconstruction from partial logs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building This
&lt;/h2&gt;

&lt;p&gt;We built &lt;a href="https://github.com/nicofains1/agentwatch" rel="noopener noreferrer"&gt;AgentWatch&lt;/a&gt; because we hit every one of these problems running our own 7-agent system. One agent would fail, three others would break, and we'd spend hours reading through separate log files trying to trace the chain.&lt;/p&gt;

&lt;p&gt;It's a TypeScript library. &lt;code&gt;npm install @nicofains1/agentwatch&lt;/code&gt;, wire in heartbeats and event reporting, and you get cascade detection, fleet dashboards, alert dedup, and forensic replay out of the box. Self-hosted with SQLite, no external services needed.&lt;/p&gt;

&lt;p&gt;The approach is deterministic: store evidence at each hop, walk the trace DAG backward on failure. No ML model trying to guess what happened. The data tells you directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to Do Right Now
&lt;/h2&gt;

&lt;p&gt;If you're running multiple AI agents:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Audit your observability.&lt;/strong&gt; Can you trace a failure from one agent back to its root cause in another? If not, you have an ASI08 gap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check your alert setup.&lt;/strong&gt; Are you getting the same alert 19 times in an hour? That's a sign you need deduplication and escalation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test a cascade scenario.&lt;/strong&gt; Intentionally break one agent's output and watch what happens to agents downstream. If you can't see the propagation path in your current tooling, that's the gap ASI08 is warning about.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The speed and scale of agentic AI outpaces human reaction times. By the time you notice a cascade manually, it's already propagated. Automated detection isn't a nice-to-have. According to OWASP, it's part of the mitigation framework.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://genai.owasp.org/resource/owasp-top-10-for-agentic-applications-for-2026/" rel="noopener noreferrer"&gt;OWASP Agentic AI Top 10&lt;/a&gt; is worth reading in full. ASI08 is item eight, but the other nine items interact with cascade risk in ways that compound the problem.&lt;/p&gt;

</description>
      <category>security</category>
      <category>aiagents</category>
      <category>observability</category>
      <category>typescript</category>
    </item>
    <item>
      <title>The Agent Observability Landscape in 2026: Who Traces, Who Misses</title>
      <dc:creator>Nicolas Fainstein</dc:creator>
      <pubDate>Tue, 10 Mar 2026 15:43:59 +0000</pubDate>
      <link>https://dev.to/nicolas_fainstein/the-agent-observability-landscape-in-2026-who-traces-who-misses-8j0</link>
      <guid>https://dev.to/nicolas_fainstein/the-agent-observability-landscape-in-2026-who-traces-who-misses-8j0</guid>
      <description>&lt;p&gt;If you run more than one AI agent in production, you've already hit the observability gap.&lt;/p&gt;

&lt;p&gt;Single-agent tracing is a solved problem. Langfuse, LangSmith, Arize Phoenix, and a dozen others will show you exactly what happened inside one agent's LLM calls. That's table stakes in 2026.&lt;/p&gt;

&lt;p&gt;But when Agent C errors because Agent B sent it bad data, which itself came from Agent A's failed tool call, most of these tools give you three separate error logs with no connection between them.&lt;/p&gt;

&lt;p&gt;Here's where the landscape actually stands.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Per-Agent Tracers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Langfuse&lt;/strong&gt; (22.9k GitHub stars, acquired by ClickHouse in January 2026) is the open-source default. It traces LLM calls, manages prompts, runs evaluations. 2,000+ paying customers. 19 of the Fortune 50 use it. The ClickHouse acquisition gives it serious infrastructure backing. What it doesn't do: correlate errors across agents that share no direct function call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LangSmith&lt;/strong&gt; is LangChain's proprietary tracing platform. Deep integration with the LangChain ecosystem. Automatic pattern clustering, failure mode detection, online evals. Pricing starts free (5k traces/month), then $39/seat + $2.50 per 1k traces. Strong if you're already in the LangChain world. Same limitation: per-agent scope, no fleet-wide cascade view.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AgentOps&lt;/strong&gt; (3.1k stars) has the lowest performance overhead in 2026 benchmarks at 12%. Supports CrewAI, Agno, OpenAI Agents SDK, LangGraph, AutoGen. Good multi-framework story. Session replays are useful for debugging single agent runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arize Phoenix&lt;/strong&gt; (open source + enterprise) comes from ML observability. Drift detection, performance degradation monitoring, agent graph visualization. Recently added Amazon Bedrock Agents support. Their trajectory mapping can detect recursive patterns within one agent's execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RagaAI Catalyst&lt;/strong&gt; is Python-only, self-hosted, with 50+ custom metrics and execution graph visualization. Designed for multi-agent systems but focused on tracing rather than cross-agent failure attribution.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Enterprise Entrants
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Braintrust&lt;/strong&gt; raised $80M Series B in February 2026 at an $800M valuation. Notion, Replit, Cloudflare, Ramp, Dropbox are customers. They cluster production traces into "Topics" and use AI to suggest improvements. The clustering approach groups similar failures but doesn't show the causal chain between agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Datadog&lt;/strong&gt; added agent monitoring to its LLM Observability suite. Decision-path graphs, tool invocation tracking, infinite loop detection, cost/token analysis. Integrated with Google's Agent Development Kit. Datadog's strength is correlation with existing APM data. If your agents run on infrastructure you already monitor with Datadog, you get agent + infra correlation for free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Splunk&lt;/strong&gt; went GA in February 2026 with agent monitoring. Traces and maps agent workflows with dependency analysis. Integrated with Cisco AI Defense for PII detection and prompt injection. Security-focused, SOC-ready. Enterprise pricing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New Relic&lt;/strong&gt; launched its agent platform in February 2026 with OpenTelemetry integration and a no-code agentic builder. Targets teams already using New Relic for APM.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cascade Detection Gap
&lt;/h2&gt;

&lt;p&gt;Here's what's interesting. Everyone I listed above traces what happened inside individual agents. Some can even show you a graph of how agents communicated. But when a failure propagates across autonomous agents, amplifies through feedback loops, and compounds into a system-wide problem before a human can react, most of these tools give you symptoms, not root causes.&lt;/p&gt;

&lt;p&gt;OWASP formalized this in ASI08 (December 2025): cascading failures in agentic AI. Their definition: "A cascading failure occurs when a single fault propagates across autonomous agents and compounds into system-wide harm." Their recommended mitigation includes "comprehensive observability with automated cascade pattern detection."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Galileo&lt;/strong&gt; is the closest to addressing this. Their Signals tool uses ML-based detection (their Luna-2 evaluation models) to find when malformed tool output corrupts working memory and propagates through decision chains. It's semantic failure detection. The limitation: ML detection tells you THAT something happened. It doesn't show you the evidence at each hop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maxim AI&lt;/strong&gt; ($3M seed, backed by Postman and Chargebee founders) takes an end-to-end approach with agent simulation, evaluation, and production observability. One of five platforms identified as leading in 2026, but cascade-specific features are still emerging.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where It's Headed
&lt;/h2&gt;

&lt;p&gt;The pattern is clear: single-agent tracing is commoditized. The next battleground is multi-agent correlation, specifically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cascade replay with evidence&lt;/strong&gt;: Not just "Agent C failed" but "here's the payload Agent A returned, here's how Agent B transformed it, here's why Agent C broke." Deterministic replay with stored payloads at each hop.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fleet-wide health&lt;/strong&gt;: A single dashboard showing all your agents, their last heartbeat, uptime percentage, active warnings, and which agent is currently degrading the fleet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Alert deduplication&lt;/strong&gt;: The same alert from the same agent 19 times in an hour is noise. Smart escalation (info -&amp;gt; warning -&amp;gt; critical based on recurrence) is needed.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is exactly what we're building with &lt;a href="https://github.com/nicofains1/agentwatch" rel="noopener noreferrer"&gt;AgentWatch&lt;/a&gt;. It's a TypeScript library (&lt;code&gt;npm install @nicofains1/agentwatch&lt;/code&gt;) that stores evidence at each hop and walks the trace DAG backward when something breaks. Deterministic replay, not ML pattern detection. Self-hosted with SQLite, zero external dependencies.&lt;/p&gt;

&lt;p&gt;We built it because we run 7 AI agents on cron schedules, and we kept hitting the same problem: one agent fails, three others break, and we'd spend hours reading separate logs trying to figure out the chain.&lt;/p&gt;

&lt;p&gt;The 0.95^10 problem is real. If each of your 10 agents is 95% reliable individually, your system is only 60% reliable. The 40% that goes wrong needs better tooling than per-agent traces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Cascade Detection&lt;/th&gt;
&lt;th&gt;Pricing&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Langfuse&lt;/td&gt;
&lt;td&gt;OSS&lt;/td&gt;
&lt;td&gt;No (per-agent)&lt;/td&gt;
&lt;td&gt;Free + Cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LangSmith&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;No (per-agent)&lt;/td&gt;
&lt;td&gt;Free tier + $39/seat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentOps&lt;/td&gt;
&lt;td&gt;Commercial&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Undisclosed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arize Phoenix&lt;/td&gt;
&lt;td&gt;OSS + Enterprise&lt;/td&gt;
&lt;td&gt;Recursive pattern (single agent)&lt;/td&gt;
&lt;td&gt;Free + Enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RagaAI Catalyst&lt;/td&gt;
&lt;td&gt;OSS&lt;/td&gt;
&lt;td&gt;No (Python-only)&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Braintrust&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;Topic clustering&lt;/td&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Galileo&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;ML-based detection&lt;/td&gt;
&lt;td&gt;Undisclosed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Datadog&lt;/td&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;Dependency correlation&lt;/td&gt;
&lt;td&gt;$0.40-0.60/GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Splunk&lt;/td&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;Workflow mapping&lt;/td&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentWatch&lt;/td&gt;
&lt;td&gt;OSS&lt;/td&gt;
&lt;td&gt;Deterministic cascade replay&lt;/td&gt;
&lt;td&gt;Free (self-hosted)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The tools that exist are good at what they do. They just weren't built for the problem that matters most when you scale past a single agent.&lt;/p&gt;

</description>
      <category>aiagents</category>
      <category>observability</category>
      <category>monitoring</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Why 76% of Multi-Agent Deployments Fail</title>
      <dc:creator>Nicolas Fainstein</dc:creator>
      <pubDate>Tue, 10 Mar 2026 09:49:13 +0000</pubDate>
      <link>https://dev.to/nicolas_fainstein/why-76-of-multi-agent-deployments-fail-3ebc</link>
      <guid>https://dev.to/nicolas_fainstein/why-76-of-multi-agent-deployments-fail-3ebc</guid>
      <description>&lt;p&gt;You deploy three agents. They pass unit tests. They handle their individual tasks fine. Then you put them together and something breaks at 2 AM.&lt;/p&gt;

&lt;p&gt;Agent C produces garbage output. You check Agent C's logs - everything looks normal on its side. The real cause? Agent A's API call timed out an hour ago. Agent B got the empty response and passed it downstream without validation. Agent C faithfully processed the bad data and produced confident-sounding nonsense.&lt;/p&gt;

&lt;p&gt;This is a cascade failure. And nobody in the observability space is actually solving for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers are bad
&lt;/h2&gt;

&lt;p&gt;Multiple studies in 2025-2026 paint a consistent picture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;76% failure rate&lt;/strong&gt; across 847 analyzed AI agent deployments (APEX-Agents Benchmark, January 2026). The best-performing agent (Gemini 3 Flash) hit only 24% success on real professional tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;87% downstream poisoning&lt;/strong&gt; - a single compromised agent corrupts 87% of downstream decisions within 4 hours (OWASP ASI08, Cascading Failures category).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;40% cancellation rate&lt;/strong&gt; predicted for agentic AI projects by 2027, primarily due to visibility gaps (Gartner 2026).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;17x error amplification&lt;/strong&gt; in unstructured agent networks, documented in &lt;a href="https://towardsdatascience.com/" rel="noopener noreferrer"&gt;"Escaping the Bag of Agents"&lt;/a&gt; research.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;9-day infinite loops&lt;/strong&gt; observed in the Stanford/Harvard "Agents of Chaos" study, where 38 researchers deployed 5 autonomous agents for 2 weeks. One agent destroyed its own mail server. Two got stuck in a loop nobody noticed for over a week.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The common thread: multi-agent failures aren't individual agent problems. They're system problems. And the tooling we have treats each agent as an island.&lt;/p&gt;

&lt;h2&gt;
  
  
  What existing tools miss
&lt;/h2&gt;

&lt;p&gt;Every observability tool in the market - Langfuse (22.9k stars), LangSmith, Arize Phoenix (8.8k stars), AgentOps (5.3k stars), Braintrust - traces within a single agent's execution tree. Parent span to child span. They'll tell you Agent C's tool call returned an error.&lt;/p&gt;

&lt;p&gt;What they won't tell you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cross-agent causality&lt;/strong&gt; - Agent A writes bad data to a shared file at 14:30. Agent B reads it at 16:00. No tool links these events because they're separate sessions, separate traces, separate databases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fleet-level health&lt;/strong&gt; - Traditional infra has fleet dashboards. Agent tooling monitors individual sessions. There's no "are all my agents alive?" view with heartbeat-based health checks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cascade replay&lt;/strong&gt; - After a multi-agent incident, reconstructing the cross-agent event chain requires manual detective work across separate trace databases. There's no "show me the payload at each hop."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Alert correlation&lt;/strong&gt; - If 5 agents detect the same underlying issue, you get 5 alerts. Nobody deduplicates them into one incident.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;OpenTelemetry semantic conventions for multi-agent systems are &lt;a href="https://github.com/open-telemetry/semantic-conventions/issues/2664" rel="noopener noreferrer"&gt;being developed&lt;/a&gt; by Microsoft and Cisco. But those are conventions, not implementations.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we know this firsthand
&lt;/h2&gt;

&lt;p&gt;We run a multi-agent system with 7 agents on cron schedules. Three real cascade failures in one week:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cascade #1&lt;/strong&gt;: Our web service went down on a hosting provider. The CMO agent sent 3 outreach messages linking to a dead URL. The COO agent detected the outage but had no way to warn the CMO, because agents couldn't communicate fast enough. Classic cascade - infrastructure failure propagated through agent actions before anyone noticed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cascade #2&lt;/strong&gt;: The orchestrator bypassed the CFO agent on a $1 USDC transfer. No agent in the system detected the unauthorized action. The money was swept by MEV bots. Root cause: no cross-agent action validation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cascade #3&lt;/strong&gt;: One agent held a shared lock, blocking the CEO agent from running for 4 consecutive cycles. Three patches applied, problem persisted. No visibility into which agent was consuming the shared resource.&lt;/p&gt;

&lt;p&gt;Every one of these would have been caught by cross-agent tracing. None of them showed up in individual agent logs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What cascade detection actually looks like
&lt;/h2&gt;

&lt;p&gt;After dealing with these failures, we built &lt;a href="https://github.com/nicofains1/agentwatch" rel="noopener noreferrer"&gt;AgentWatch&lt;/a&gt; - an npm library that does exactly one thing the existing tools don't: trace failures backward across agent boundaries.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @nicofains1/agentwatch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AgentWatch&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@nicofains1/agentwatch&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;aw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AgentWatch&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Each agent reports its status&lt;/span&gt;
&lt;span class="nx"&gt;aw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;agent-a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;healthy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;aw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;agent-b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;healthy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Trace cross-agent actions&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;traceId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createTraceId&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;e1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;traceId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;agent-a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fetch-data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;url=https://api.example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rows=150&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;e2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;traceId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;agent-b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;process&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;parentEventId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;e1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;durationMs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Find the root cause&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;correlate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;root_cause&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// -&amp;gt; agent-a / fetch-data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;correlate()&lt;/code&gt; function walks backward from any failure through the event graph. It follows &lt;code&gt;parentEventId&lt;/code&gt; links across agent boundaries and returns the full chain: which agent started the cascade, what data it produced, how it propagated, and where it finally surfaced as an error.&lt;/p&gt;

&lt;p&gt;The CLI gives you the same thing from the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx agentwatch cascade 42     &lt;span class="c"&gt;# Trace a failure backward&lt;/span&gt;
npx agentwatch dashboard       &lt;span class="c"&gt;# Fleet health at a glance&lt;/span&gt;
npx agentwatch replay &amp;lt;trace&amp;gt;  &lt;span class="c"&gt;# Full cascade timeline&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It stores everything in SQLite. No external services. No config files. No accounts. 2 minutes from &lt;code&gt;npm install&lt;/code&gt; to first heartbeat.&lt;/p&gt;

&lt;h2&gt;
  
  
  The gap is closing
&lt;/h2&gt;

&lt;p&gt;Microsoft and Cisco are working on OpenTelemetry conventions for multi-agent tracing. Datadog added agent-level monitoring. Galileo launched AI-powered failure analysis. The industry is moving toward multi-agent observability.&lt;/p&gt;

&lt;p&gt;But right now, if you have 3+ agents running and one of them fails at 2 AM, your debugging process is still "grep through each agent's logs and reconstruct the timeline manually."&lt;/p&gt;

&lt;p&gt;That's the problem worth solving.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/nicofains1/agentwatch" rel="noopener noreferrer"&gt;AgentWatch on GitHub&lt;/a&gt; | &lt;a href="https://www.npmjs.com/package/@nicofains1/agentwatch" rel="noopener noreferrer"&gt;npm package&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aiagents</category>
      <category>observability</category>
      <category>typescript</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>How Developer Tool Companies Can Advertise Through AI Agents</title>
      <dc:creator>Nicolas Fainstein</dc:creator>
      <pubDate>Mon, 09 Mar 2026 21:45:10 +0000</pubDate>
      <link>https://dev.to/nicolas_fainstein/how-developer-tool-companies-can-advertise-through-ai-agents-1adc</link>
      <guid>https://dev.to/nicolas_fainstein/how-developer-tool-companies-can-advertise-through-ai-agents-1adc</guid>
      <description>&lt;p&gt;Developers are spending more time talking to AI agents than browsing documentation sites. Claude, Cursor, Windsurf, Copilot - these are the new surfaces where developers discover tools and make decisions.&lt;/p&gt;

&lt;p&gt;If you market developer tools, this shift matters. The old playbook (Google Ads, conference booths, banner sponsorships) still works, but there's a new channel opening up: &lt;strong&gt;contextual advertising inside AI agent workflows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's how it works and why it's different from everything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With Developer Advertising Today
&lt;/h2&gt;

&lt;p&gt;Most developer advertising is interruptive. Banner ads on Stack Overflow. Sponsored search results on Google. Newsletter sponsorships. Conference booths.&lt;/p&gt;

&lt;p&gt;These channels share a weakness: they compete for attention in moments when the developer isn't doing the thing your product helps with. They're browsing, reading, or socializing - not building.&lt;/p&gt;

&lt;p&gt;AI agents change this. When a developer asks their coding agent "what database should I use for this project?" or "find me an auth library," they're expressing real-time intent. That's the moment your product is relevant.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Agent-Mediated Advertising Works
&lt;/h2&gt;

&lt;p&gt;MCP (Model Context Protocol) is the standard that connects AI agents to external tools. There are 10,000+ MCP servers in production, used by ChatGPT, Claude, Cursor, and others.&lt;/p&gt;

&lt;p&gt;Some of these servers handle queries where product recommendations are natural:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Search tools&lt;/strong&gt; that help agents find services or APIs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comparison tools&lt;/strong&gt; that evaluate options across categories
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure tools&lt;/strong&gt; that suggest hosting, databases, or deployment targets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development tools&lt;/strong&gt; that recommend libraries, SDKs, or frameworks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a developer's agent queries one of these tools, the response can include sponsored results alongside organic ones. Labeled clearly. Relevant to the actual query. Not a popup or a banner - a contextual recommendation at the point of decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Is Different
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Intent-based, not impression-based.&lt;/strong&gt; Traditional display ads charge per thousand views. Most viewers aren't in a buying moment. Agent-mediated ads fire when someone is actively looking for a solution. Every impression carries intent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent-mediated trust.&lt;/strong&gt; The developer trusts their AI agent. If the agent surfaces your tool as a relevant option (clearly labeled as sponsored), that carries more weight than a sidebar banner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy by design.&lt;/strong&gt; No cookies, no tracking pixels, no personal data. Targeting is based on the query context (what the agent is asking about), not the user's browsing history. This is where the industry is heading anyway - you might as well build for it now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Measurable outcomes.&lt;/strong&gt; You can track: was the ad shown (impression), did the agent present it to the user (click), did the user act on it (conversion). Clean funnel, no attribution guesswork.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who's Already Doing This
&lt;/h2&gt;

&lt;p&gt;This isn't theoretical. Several companies are building the infrastructure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Ads&lt;/strong&gt; launched an MCP server in open beta, letting agents query their ad inventory programmatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dstillery&lt;/strong&gt; shipped DS-1, an MCP-native audience builder integrated with The Trade Desk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PubMatic&lt;/strong&gt; built AgenticOS for agent-to-agent advertising orchestration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IAB Tech Lab&lt;/strong&gt; is releasing "agentified" standards for the advertising industry in 2026&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Ad Commerce Protocol (AdCP) is emerging as an open standard for agent-to-agent ad execution. The MCP Dev Summit (April 2-3, NYC) has sessions specifically on advertising standards.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a Campaign Looks Like
&lt;/h2&gt;

&lt;p&gt;For a developer tool company, the setup is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Define your targeting.&lt;/strong&gt; What queries is your product relevant for? A database company targets queries about data storage, persistence, scaling. An auth provider targets queries about authentication, identity, security.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set your budget.&lt;/strong&gt; Pay per click (CPC) or per conversion (CPA). No minimum spend. You only pay when an agent actually presents your tool to a developer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Provide your creative.&lt;/strong&gt; Not a banner. A structured product listing: name, one-line description, link, and the query categories where you want to appear.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Measure results.&lt;/strong&gt; Track impressions, clicks, and conversions. Optimize targeting based on which query contexts convert best.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The revenue split on the supply side is typically 70/30 (MCP server builder keeps 70%). This means server builders are incentivized to integrate ads, which grows the network of surfaces where your product can appear.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Consider This Channel
&lt;/h2&gt;

&lt;p&gt;This channel makes sense if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your product solves a problem developers encounter while building (not just while browsing)&lt;/li&gt;
&lt;li&gt;You're comfortable with contextual targeting (no personal data, no retargeting)&lt;/li&gt;
&lt;li&gt;You want to reach developers at the moment they're evaluating options&lt;/li&gt;
&lt;li&gt;Your product has a clear, short value proposition (one line, not a paragraph)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It probably doesn't make sense yet if you need massive scale. The MCP ad ecosystem is early. Thousands of servers, not millions. But early movers get lower CPCs and first-mover positioning in a channel that's growing 85% month-over-month.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;If you run marketing for a developer tool company and want to test this channel, there are a few ways in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;agentic-ads&lt;/a&gt; is an open-source ad network built specifically for MCP tools. You can register campaigns, set targeting by keyword context, and pay per click or conversion.&lt;/li&gt;
&lt;li&gt;Amazon's MCP ad server is in open beta for their existing advertiser base.&lt;/li&gt;
&lt;li&gt;Several MCP marketplace platforms (Apify, Smithery) are building native ad placement features.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The market is early enough that a small test budget goes a long way. And unlike display ads, you'll know exactly which developer queries led to which outcomes.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Building something in the MCP ad space? I'd like to hear about it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>aiagents</category>
      <category>devtools</category>
      <category>advertising</category>
    </item>
    <item>
      <title>MCP Is Now a Linux Foundation Project. What That Means for Server Builders.</title>
      <dc:creator>Nicolas Fainstein</dc:creator>
      <pubDate>Mon, 09 Mar 2026 15:46:38 +0000</pubDate>
      <link>https://dev.to/nicolas_fainstein/mcp-is-now-a-linux-foundation-project-what-that-means-for-server-builders-5fp0</link>
      <guid>https://dev.to/nicolas_fainstein/mcp-is-now-a-linux-foundation-project-what-that-means-for-server-builders-5fp0</guid>
      <description>&lt;p&gt;Anthropic donated the Model Context Protocol to the Linux Foundation's new Agentic AI Foundation (AAIF). OpenAI and Block co-founded it. Google, Microsoft, AWS, and Cloudflare are supporting members.&lt;/p&gt;

&lt;p&gt;This is the single biggest structural change to MCP since launch. Here's what it means if you build MCP servers.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Actually Happened
&lt;/h2&gt;

&lt;p&gt;Three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP is no longer owned by Anthropic.&lt;/strong&gt; It's now governed by a neutral foundation under the Linux Foundation umbrella, alongside projects from Block (goose) and OpenAI (AGENTS.md).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The founding members read like a who's-who of tech.&lt;/strong&gt; Anthropic, Block, OpenAI as co-founders. Google, Microsoft, AWS, Bloomberg, Cloudflare as supporting members. That's not a spec maintained by one company anymore. That's an industry standard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP Dev Summit is happening April 2-3 in NYC.&lt;/strong&gt; First in-person gathering of the MCP ecosystem. Protocol evolution, tooling, and governance will all be on the table.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Why This Matters for Server Builders
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Protocol Stability Is Now Guaranteed
&lt;/h3&gt;

&lt;p&gt;When one company controls a protocol, it can change direction based on business strategy. A Linux Foundation project has formal governance, working groups, and a change process that prevents breaking changes from shipping on a whim.&lt;/p&gt;

&lt;p&gt;If you're building a business on MCP, this removes the biggest risk: platform dependence on Anthropic's roadmap.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Adoption Ceiling Just Got Higher
&lt;/h3&gt;

&lt;p&gt;Enterprise IT departments care about governance. "We use MCP, which is governed by the Linux Foundation" is a different conversation than "We use MCP, which Anthropic maintains." Red Hat is already building MCP into OpenShift AI with RBAC and OAuth lifecycle management.&lt;/p&gt;

&lt;p&gt;More enterprise adoption means more users for your server. More users means more revenue potential.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The Monetization Layer Is the Next Frontier
&lt;/h3&gt;

&lt;p&gt;The protocol itself is solved - 97M+ monthly SDK downloads, 11,000+ servers, adoption across every major AI platform. What's not solved is how builders make money.&lt;/p&gt;

&lt;p&gt;Right now, less than 5% of MCP servers generate any revenue. The gap between "massive adoption" and "zero monetization" is where the next wave of tooling gets built.&lt;/p&gt;

&lt;p&gt;Several approaches exist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Usage-based billing&lt;/strong&gt; (Agent Bazaar, Xpack) - charge per tool call. Works for high-value, low-volume tools. Requires auth and metering infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marketplace listing&lt;/strong&gt; (MCPize, MCP Hive) - list on a discovery platform that handles payments. Good distribution, but you give up 15-30% and depend on their traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contextual advertising&lt;/strong&gt; (&lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;agentic-ads&lt;/a&gt;) - include relevant sponsored results alongside tool responses. 20 lines of code, 70/30 split. Works for high-volume tools with search/recommendation contexts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Freemium/subscription&lt;/strong&gt; - build a SaaS wrapper around your MCP server with free and paid tiers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise licensing&lt;/strong&gt; - sell direct to companies with SLAs and support.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The right model depends on your tool category, user volume, and how much infrastructure you want to maintain. Low-volume, high-value tools should charge directly. High-volume, utility-style tools should consider ads or marketplace placement.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Standards for Advertising Are Coming
&lt;/h3&gt;

&lt;p&gt;The AdCP (Ad Context Protocol) consortium - Yahoo, PubMatic, Magnite, Raptive, Media.net, and 20+ others - is building open standards for advertising within MCP. Their founding member window closes March 31.&lt;/p&gt;

&lt;p&gt;Amazon Ads has an MCP server in open beta. Dstillery shipped DS-1, an MCP-native audience builder integrated with The Trade Desk. These are billion-dollar companies building ad infrastructure for the same protocol your server runs on.&lt;/p&gt;

&lt;p&gt;Advertising demand for MCP inventory will grow as these standards mature. If your server handles queries where users are comparing, choosing, or discovering products/services, that context is valuable to advertisers.&lt;/p&gt;




&lt;h2&gt;
  
  
  What to Do Now
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you're building a new MCP server:&lt;/strong&gt;&lt;br&gt;
Pick a monetization model before you launch. Adding revenue infrastructure after users expect a free tool is harder than including it from day one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you have an existing server with users:&lt;/strong&gt;&lt;br&gt;
Start tracking tool call volume, unique users, and query patterns. This data is the foundation for any monetization approach. You need it whether you charge directly, sell ads, or license to enterprises.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're considering the MCP Dev Summit (April 2-3, NYC):&lt;/strong&gt;&lt;br&gt;
Go. The governance discussions will shape what the protocol looks like in 2027. The people making decisions about MCP's future will be in the room.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;MCP moving to the Linux Foundation doesn't change what the protocol does. It changes how confident you should be building on it. Platform risk is lower. Adoption ceiling is higher. The remaining gap - monetization infrastructure - is where the building is happening now.&lt;/p&gt;

&lt;p&gt;11,000 servers. 97M monthly downloads. Less than 5% monetized. That gap is the opportunity.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Building an MCP server and thinking about monetization? The &lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;agentic-ads repo&lt;/a&gt; has a working ad network with a 10-minute integration path. Or check the &lt;a href="https://agentic-ads-production.up.railway.app/health" rel="noopener noreferrer"&gt;live API&lt;/a&gt; to see it running.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>aiagents</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Two Layers of Agentic Advertising (and Why Most Companies Are Building the Wrong One)</title>
      <dc:creator>Nicolas Fainstein</dc:creator>
      <pubDate>Mon, 09 Mar 2026 03:48:21 +0000</pubDate>
      <link>https://dev.to/nicolas_fainstein/two-layers-of-agentic-advertising-and-why-most-companies-are-building-the-wrong-one-13ho</link>
      <guid>https://dev.to/nicolas_fainstein/two-layers-of-agentic-advertising-and-why-most-companies-are-building-the-wrong-one-13ho</guid>
      <description>&lt;p&gt;The agentic advertising market is splitting in two, and almost everyone is focused on the same layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 1&lt;/strong&gt; is campaign management agents. These are AI systems that help human advertisers run campaigns on existing platforms. Amazon's MCP Server lets you manage Amazon Ads through Claude or ChatGPT. Meta embedded Manus AI into Ads Manager. Walmart's Marty agent handles ad workflows for suppliers. Dstillery's DS-1 executes programmatic buys on The Trade Desk through a Slack-based MCP integration.&lt;/p&gt;

&lt;p&gt;Layer 1 is well-funded and shipping fast. Amazon's MCP Server entered open beta in February. The Dstillery-Keynes-Trade Desk partnership went live in March. NBCUniversal completed the first AI-agent-led programmatic guaranteed deal during the NFL playoffs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 2&lt;/strong&gt; is different. Layer 2 is ad delivery &lt;em&gt;inside&lt;/em&gt; AI tool interactions. Not an agent managing a Google Ads dashboard, but an MCP server returning a sponsored result alongside organic results when a user asks "what CI/CD tool should I use?"&lt;/p&gt;

&lt;p&gt;Layer 1 automates the advertiser's workflow. Layer 2 creates a new ad surface where none existed before.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Layer 1 Gets All the Attention
&lt;/h2&gt;

&lt;p&gt;It's obvious. Layer 1 takes an existing multi-billion dollar market (programmatic advertising) and makes it faster. The value proposition is clear: reduce campaign setup time by 87% (PubMatic's reported number with Claude). Cut media buying from 48 hours to 5 minutes (Dstillery's claim).&lt;/p&gt;

&lt;p&gt;Every ad tech company understands this pitch. It fits neatly into existing budgets, existing metrics, existing org charts. The CFO doesn't need a new line item. The media buyer doesn't need a new skill. They just do what they already do, but faster.&lt;/p&gt;

&lt;p&gt;Layer 1 also has obvious buyers. Amazon Ads has millions of advertisers who would pay for better campaign automation. Meta has the same. The TAM is calculable and large.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Layer 2 Matters More Long-Term
&lt;/h2&gt;

&lt;p&gt;Layer 1 makes existing advertising more efficient. Layer 2 creates advertising inventory that didn't exist before.&lt;/p&gt;

&lt;p&gt;Consider what happens when MCP adoption scales to its projected trajectory. The ecosystem already has 11,000+ servers, 97 million monthly SDK downloads, and 85% month-over-month growth. When millions of tool calls happen daily across thousands of MCP servers, each one represents a micro-decision: which database, which API, which hosting provider, which framework.&lt;/p&gt;

&lt;p&gt;Today, those recommendations happen with zero commercial layer. The MCP server that recommends PlanetScale over Neon is delivering qualified intent to PlanetScale for free. In a browser, that same recommendation would be a paid referral link on a blog post.&lt;/p&gt;

&lt;p&gt;Layer 2 is the programmatic referral link for AI tool interactions. It turns unpaid tool recommendations into a marketplace.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Current Layer 2 Landscape
&lt;/h2&gt;

&lt;p&gt;Almost nobody is building here yet. The companies I can find:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;agentic-ads&lt;/strong&gt; (us) - open-source MCP ad network. Publishers add &lt;code&gt;search_ads()&lt;/code&gt; to tool handlers, get 70% revenue in USDC on Base. 270 tests, live on Railway, E2E validated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AdCP's Signals Activation Protocol&lt;/strong&gt; - could theoretically support tool-level ad delivery, but it's designed for traditional media buying workflows between SSPs and DSPs. The spec is at v3.0.0-rc.1 and focused on programmatic guaranteed and PMP deals, not single-tool-call micropayments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MonetizedMCP&lt;/strong&gt; - open-source framework for USDC payments on MCP servers, but it's payment infrastructure (pay-per-use), not advertising. Complementary, not competing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCPize / Apify&lt;/strong&gt; - marketplaces for paid MCP tools. Pay-per-event model. Again, payment infrastructure rather than ad-supported free tools.&lt;/p&gt;

&lt;p&gt;There's a meaningful gap between "charge users per call" (MCPize model) and "keep tools free, monetize through contextual ads" (Layer 2 model). Both can coexist. Most consumer internet works this way: some services charge directly, others are ad-supported.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Standards Question
&lt;/h2&gt;

&lt;p&gt;Two competing standards efforts are shaping how this space develops:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AdCP&lt;/strong&gt; (Ad Context Protocol) - built on MCP by AgenticAdvertising.org. Founding members include Yahoo, PubMatic, Magnite, Media.net. Four modules: Signals Activation, Media Buy, Creative, and Curation (Q2 2026). Founding membership open through March 31, 2026.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IAB Tech Lab&lt;/strong&gt; - extending existing standards (OpenRTB, AdCOM, VAST) with MCP, Agent2Agent, and gRPC support. Released their Agentic Roadmap in January. Their approach wraps existing protocols rather than building new ones.&lt;/p&gt;

&lt;p&gt;There's tension between these two efforts. AdCP is purpose-built for agent-to-agent transactions. IAB Tech Lab is retrofitting existing infrastructure. Both have legitimacy. The outcome will determine whether Layer 2 operates on bespoke agent standards or through adapted programmatic plumbing.&lt;/p&gt;

&lt;p&gt;For developers building MCP servers today, the practical impact is limited. Neither standard mandates a specific integration pattern at the tool level. You can integrate ad revenue now and adapt to whichever standard wins.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Means If You Build MCP Tools
&lt;/h2&gt;

&lt;p&gt;The 95% of MCP servers that earn nothing represent untapped supply-side inventory. The developers who maintain these servers have already shown they can build things people use. They just haven't added a revenue layer because the options were either too complex (billing infrastructure) or non-existent (no ad network for MCP).&lt;/p&gt;

&lt;p&gt;Layer 2 fills that gap with a model developers already understand: free tool, ad-supported, revenue share. It's the same model that funds most of the consumer web. Applied to tool calls instead of page views.&lt;/p&gt;

&lt;p&gt;The window for establishing Layer 2 infrastructure is open. The big platform companies (Amazon, Meta, Google) are focused entirely on Layer 1 - making their existing ad businesses agent-friendly. They could extend into Layer 2 eventually, but right now, they're solving a different problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started with Layer 2
&lt;/h2&gt;

&lt;p&gt;If your MCP server recommends products, services, or tools, you're a candidate for Layer 2 monetization.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ads&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;searchAds&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CI/CD tool for monorepo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;keywords&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CI&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CD&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pipeline&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;build&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ad&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;sponsoredOption&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`\n\n[Sponsored] &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ad&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;18 lines of TypeScript. Fails silently if no match. Revenue in USDC on Base.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;agentic-ads
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://agentic-ads-production.up.railway.app/health" rel="noopener noreferrer"&gt;Live API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First 10 publishers get 90/10 revenue share for 3 months.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: Amazon Ads blog, GlobeNewswire (Dstillery), Magnite blog, IAB Tech Lab, AdCP spec, PubMatic case study, eMarketer. All claims from public reporting as of March 2026.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>advertising</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Amazon, Dstillery, and Plurio Just Proved MCP Advertising Works</title>
      <dc:creator>Nicolas Fainstein</dc:creator>
      <pubDate>Sun, 08 Mar 2026 15:43:42 +0000</pubDate>
      <link>https://dev.to/nicolas_fainstein/amazon-dstillery-and-plurio-just-proved-mcp-advertising-works-1mm4</link>
      <guid>https://dev.to/nicolas_fainstein/amazon-dstillery-and-plurio-just-proved-mcp-advertising-works-1mm4</guid>
      <description>&lt;p&gt;Three things happened in the first week of March 2026 that should matter to anyone building MCP tools:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Amazon Ads opened its MCP server to public beta&lt;/li&gt;
&lt;li&gt;Dstillery shipped DS-1, an MCP-native audience builder integrated with The Trade Desk&lt;/li&gt;
&lt;li&gt;Plurio raised $3.5M to build agentic AI for performance marketing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These aren't experiments. They're shipping products.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Ads Goes MCP
&lt;/h2&gt;

&lt;p&gt;Amazon's MCP server lets sellers create campaigns, set budgets, and optimize bids through natural language. Instead of clicking through the Amazon Ads console, you tell your AI agent "create a Sponsored Products campaign with a $5k budget and auto-targeting" and it happens.&lt;/p&gt;

&lt;p&gt;Early numbers: 70-80% reduction in campaign setup time.&lt;/p&gt;

&lt;p&gt;This is the biggest company to bet on MCP as an advertising protocol. When Amazon builds an MCP server for ads, the question shifts from "will agents handle ad workflows?" to "how fast will everyone else follow?"&lt;/p&gt;

&lt;h2&gt;
  
  
  Dstillery Builds on MCP
&lt;/h2&gt;

&lt;p&gt;Dstillery's DS-1 uses MCP to let clients build custom audiences in minutes instead of days. It connects directly to The Trade Desk for activation. Their approach: use MCP as the interface layer between AI agents and ad targeting data.&lt;/p&gt;

&lt;p&gt;This matters because Dstillery didn't build a chatbot. They built an MCP server that speaks the same protocol every AI agent already understands. Any agent that supports MCP can now build audiences programmatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plurio Gets Funded
&lt;/h2&gt;

&lt;p&gt;Plurio raised $3.5M seed to apply agentic AI to performance marketing. They already manage over $100M in annual ad spend and processed $20M through AI agent pilots in their first four months.&lt;/p&gt;

&lt;p&gt;Venture money follows conviction. When investors put $3.5M into "agentic advertising" as a category, it signals that the market is real enough to bet on.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means for MCP Developers
&lt;/h2&gt;

&lt;p&gt;If you build MCP tools, you're sitting on distribution infrastructure that the ad industry is now actively building around. The pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Supply side&lt;/strong&gt;: MCP servers that serve recommendations, search results, or product comparisons. These are the surfaces where ads have context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demand side&lt;/strong&gt;: Advertisers who want to reach users at the moment an AI agent is helping them decide. Amazon proved this works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol layer&lt;/strong&gt;: MCP itself, which is becoming the standard interface between agents and external services. No proprietary SDK needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The gap right now: most MCP servers don't monetize. Out of 11,000+ servers indexed across directories, fewer than 5% generate any revenue. The infrastructure exists. The demand exists. The connection between supply and demand is what's missing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Ad Network Layer
&lt;/h2&gt;

&lt;p&gt;This is what we're building with &lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;agentic-ads&lt;/a&gt;. An ad network purpose-built for MCP tools. Developers integrate three tools into their MCP server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_sponsored_recommendations&lt;/code&gt; - returns contextual sponsored results&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;record_click&lt;/code&gt; - tracks engagement&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;record_conversion&lt;/code&gt; - tracks completed actions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Revenue split: developers keep 70%. Integration takes about 15 minutes.&lt;/p&gt;

&lt;p&gt;The live API runs at &lt;a href="https://agentic-ads-production.up.railway.app/health" rel="noopener noreferrer"&gt;agentic-ads-production.up.railway.app&lt;/a&gt;. The npm package is &lt;a href="https://www.npmjs.com/package/agentic-ads" rel="noopener noreferrer"&gt;agentic-ads&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Amazon, Dstillery, and Plurio validated the thesis from the top down. We're building from the bottom up: give individual MCP developers the same monetization tools that enterprise ad tech companies are deploying internally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://advertising.amazon.com/library/news/amazon-ads-mcp-server-open-beta" rel="noopener noreferrer"&gt;Amazon Ads MCP Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.adexchanger.com/marketers/dstillery-has-a-new-agentic-ai-interface-for-refining-audiences-faster/" rel="noopener noreferrer"&gt;Dstillery DS-1 Launch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.adweek.com/performance-marketing/plurio-startup-agentic-ai-performance-marketing-seed-funding/" rel="noopener noreferrer"&gt;Plurio Seed Round&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://agenticadvertising.org" rel="noopener noreferrer"&gt;AgenticAdvertising.org / AdCP Protocol&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Building an MCP tool and interested in monetization? Check out the &lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;integration guide&lt;/a&gt; or reach out at &lt;a href="mailto:agentic-ads@agentmail.to"&gt;agentic-ads@agentmail.to&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>advertising</category>
      <category>monetization</category>
    </item>
    <item>
      <title>The Agentic Advertising Stack in 2026: Who's Building What</title>
      <dc:creator>Nicolas Fainstein</dc:creator>
      <pubDate>Sun, 08 Mar 2026 09:47:38 +0000</pubDate>
      <link>https://dev.to/nicolas_fainstein/the-agentic-advertising-stack-in-2026-whos-building-what-54b9</link>
      <guid>https://dev.to/nicolas_fainstein/the-agentic-advertising-stack-in-2026-whos-building-what-54b9</guid>
      <description>&lt;p&gt;AI agents are starting to buy and sell media. Not hypothetically - NBCUniversal completed its first AI-agent-led programmatic deal during the NFL playoffs in Q1 2026. Google is redesigning its shopping and ad infrastructure around agent-driven experiences. Amazon launched Creative Agent, an agentic tool that generates ads autonomously across European markets.&lt;/p&gt;

&lt;p&gt;The advertising industry is entering an agent-first era. Here's a map of what's being built, by whom, and where the opportunities are for developers.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Standards Layer
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AgenticAdvertising.org (AdCP Protocol)
&lt;/h3&gt;

&lt;p&gt;An independent industry organization building open standards for AI-powered advertising. Their protocol, AdCP (Ad Context Protocol), is built directly on top of MCP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Founding members&lt;/strong&gt;: Yahoo, Optable, PubMatic, Scope3, Swivel, Triton Digital&lt;br&gt;
&lt;strong&gt;Launch members&lt;/strong&gt;: Raptive, Nativo, Kargo, OpenAds, Media.net, Magnite&lt;/p&gt;

&lt;p&gt;This is the "W3C of agentic ads" - the group defining how agents request, receive, and render advertising content. Founding deadline is March 31, 2026.&lt;/p&gt;
&lt;h3&gt;
  
  
  IAB Tech Lab
&lt;/h3&gt;

&lt;p&gt;The IAB is releasing agentic protocol SDKs in 2026 to "agentify" existing ad tech standards. If you've worked with VAST, OpenRTB, or ads.txt, those formats are getting agent-compatible wrappers.&lt;/p&gt;

&lt;p&gt;This matters because it means enterprise ad budgets - the billions currently flowing through programmatic pipes - can start flowing to agent-facing channels without rebuilding everything from scratch.&lt;/p&gt;
&lt;h3&gt;
  
  
  AAIF (Linux Foundation)
&lt;/h3&gt;

&lt;p&gt;The Agentic AI Foundation, co-founded by Anthropic, Block, and OpenAI, is now the steward of MCP as a donated protocol. Their governance decisions will shape what MCP servers can and can't do, including how monetization works at the protocol level.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Demand Side (Who's Buying)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Enterprise Media Buyers
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;NBCUniversal + FreeWheel&lt;/strong&gt; completed the first major AI-agent-led programmatic guaranteed deal during NFL playoffs Q1 2026. An agent negotiated terms, selected inventory, and executed the buy. Human oversight was present but the agent drove the process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PubMatic + Anthropic&lt;/strong&gt; reported 87% reduction in campaign setup time and 70% faster issue resolution using Claude-powered agents for programmatic buying.&lt;/p&gt;

&lt;p&gt;These are early production deployments, not proofs of concept.&lt;/p&gt;
&lt;h3&gt;
  
  
  Platform Ad Systems
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Google&lt;/strong&gt; is redesigning shopping and advertising around AI-powered, agent-driven experiences launching through 2026. Their managed MCP servers (starting with Maps and BigQuery) are being made "agent-ready by design."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amazon&lt;/strong&gt; launched Creative Agent - an agentic AI tool that auto-generates professional ads for advertisers across UK, France, Germany, Italy, and Spain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Atom11&lt;/strong&gt; builds AI agents that manage Amazon PPC campaigns autonomously - setting bids, adjusting budgets, optimizing ACOS without human intervention.&lt;/p&gt;
&lt;h3&gt;
  
  
  Developer Tool Companies
&lt;/h3&gt;

&lt;p&gt;This is the segment most relevant to MCP developers. Companies like Vercel, Supabase, and every dev-tool SaaS want to reach developers at the moment they're making technical decisions. Traditional ads reach developers on web pages. Agent-facing ads reach developers (via their agents) at the point of decision.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Supply Side (Who's Serving)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  MCP-Native Ad Networks
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;agentic-ads&lt;/strong&gt; (that's us, full disclosure) is an open-source ad network built on MCP. Publishers integrate via an npm SDK, call &lt;code&gt;search_ads()&lt;/code&gt; inside their tool handlers, and earn 70% of ad revenue in USDC on Base. 270 tests, live on Railway, end-to-end validated with $0.21 first commission.&lt;/p&gt;

&lt;p&gt;We're the only MCP-native, open-source option right now. The model is affiliate marketing made programmatic: when your MCP server recommends a product, you earn a commission if that product is a paying advertiser.&lt;/p&gt;
&lt;h3&gt;
  
  
  AdCP-Compatible Platforms
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;KNOREX&lt;/strong&gt; launched an agentic AI-ready Ads API in February 2026. It's compatible with Amazon Ads MCP Server and the AdCP protocol. Cross-channel campaign management (Meta, Google, LinkedIn, TikTok) through AI agents. Already deployed with 3 strategic partners.&lt;/p&gt;
&lt;h3&gt;
  
  
  Traditional Ad Tech Moving In
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Magnite&lt;/strong&gt; ($1.7B market cap, largest independent SSP) is a founding member of AgenticAdvertising.org. &lt;strong&gt;Media.net&lt;/strong&gt; (Yahoo's ad network, acquired for $900M) is also in. When companies this size invest in agent-facing ad standards, the market is real.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Monetization Infrastructure
&lt;/h2&gt;
&lt;h3&gt;
  
  
  For MCP Developers
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;MCPize&lt;/strong&gt; - Marketplace for MCP servers with 85% revenue share. Top creators earn $3,000-$10,000/month. Direct sales model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apify&lt;/strong&gt; - Deploy MCP servers with built-in pay-per-event monetization. Removes infrastructure friction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Moesif&lt;/strong&gt; - API monetization and metering platform, now supporting usage-based pricing for MCP servers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent Bazaar&lt;/strong&gt; - Marketplace with 18% platform fee. Handles auth, metering, and payments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;agentic-ads&lt;/strong&gt; - Ad-based monetization. 20 lines of code, ~15 minutes to integrate, fails gracefully. Additive revenue on top of whatever else you're doing.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Numbers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;11,000+ MCP servers exist (March 2026, confirmed)&lt;/li&gt;
&lt;li&gt;Less than 5% monetize&lt;/li&gt;
&lt;li&gt;Top monetizers earn $3,000-$10,000/month&lt;/li&gt;
&lt;li&gt;95% earn $0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That gap is the opportunity.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Marketplace Layer
&lt;/h2&gt;

&lt;p&gt;Several platforms are forming to help agents discover and use tools:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Market&lt;/strong&gt; - Directory and registry for MCP servers and clients&lt;br&gt;
&lt;strong&gt;Databricks MCP Catalog&lt;/strong&gt; - Enterprise-grade tool discovery (public preview)&lt;br&gt;
&lt;strong&gt;Microsoft Magentic Marketplace&lt;/strong&gt; - Multi-agent collaboration experiments&lt;br&gt;
&lt;strong&gt;AI Agent Store&lt;/strong&gt; - B2B marketplace for finding AI agents and automation agencies&lt;br&gt;
&lt;strong&gt;Agoragentic&lt;/strong&gt; - Autonomous agent-to-agent marketplace on Glama&lt;/p&gt;

&lt;p&gt;These marketplaces will become distribution channels. If your MCP server is listed on three marketplaces and monetized through ads, you have passive income from day one.&lt;/p&gt;


&lt;h2&gt;
  
  
  What This Means for MCP Developers
&lt;/h2&gt;

&lt;p&gt;Three things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The demand side is real.&lt;/strong&gt; NBCUniversal, Google, Amazon, and PubMatic are not experimenting. They're deploying agent-driven advertising in production. Ad budgets are moving toward agent-facing channels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Standards are forming now.&lt;/strong&gt; AdCP, IAB SDKs, and AAIF governance will define how agent advertising works for the next decade. If you're building MCP tools, pay attention to these specs. Building compatible today means being ready when enterprise budgets arrive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Supply-side infrastructure is the bottleneck.&lt;/strong&gt; Demand exists. Standards are forming. What's missing is enough MCP servers with monetization enabled. The first wave of publishers who integrate will capture disproportionate value, the same way early AdSense publishers did in 2003.&lt;/p&gt;


&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;If you maintain an MCP server and want to test ad-based monetization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;agentic-ads
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;18 lines of TypeScript. Fails gracefully if ads don't match. Revenue in USDC on Base.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://agentic-ads-production.up.railway.app/health" rel="noopener noreferrer"&gt;Live API&lt;/a&gt; | &lt;a href="https://www.npmjs.com/package/agentic-ads" rel="noopener noreferrer"&gt;npm package&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First 10 publishers get 90/10 revenue split for 3 months.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: AgenticAdvertising.org, IAB Tech Lab, SearchEngineLand, INMA, Databricks blog, The New Stack, MCPize, Apify. All claims cited from public reporting.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>advertising</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Monetize Your AgentKit Agent: Earn USDC on Base with Contextual Ads</title>
      <dc:creator>Nicolas Fainstein</dc:creator>
      <pubDate>Sun, 08 Mar 2026 03:46:02 +0000</pubDate>
      <link>https://dev.to/nicolas_fainstein/monetize-your-agentkit-agent-earn-usdc-on-base-with-contextual-ads-2afa</link>
      <guid>https://dev.to/nicolas_fainstein/monetize-your-agentkit-agent-earn-usdc-on-base-with-contextual-ads-2afa</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Coinbase AgentKit gives your AI agent a crypto wallet and onchain capabilities&lt;/li&gt;
&lt;li&gt;Agentic Ads adds a revenue stream: contextual ad suggestions via MCP&lt;/li&gt;
&lt;li&gt;Payments in native USDC on Base - no bridging, no wrappers&lt;/li&gt;
&lt;li&gt;70% revenue share to you, 30% to the platform&lt;/li&gt;
&lt;li&gt;~15 minutes to integrate, zero billing infrastructure required&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;AgentKit gives your agent a wallet. Agentic Ads makes it earn.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Setup: What AgentKit Does (and What It Doesn't)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/coinbase/agentkit" rel="noopener noreferrer"&gt;Coinbase AgentKit&lt;/a&gt; is the fastest way to build an AI agent with onchain capabilities. It gives your agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A self-custodied wallet on Base&lt;/li&gt;
&lt;li&gt;Native USDC and token operations&lt;/li&gt;
&lt;li&gt;DeFi primitives (swaps, transfers, balance checks)&lt;/li&gt;
&lt;li&gt;MCP-compatible tool interface - so any MCP client can call your agent's onchain tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What AgentKit doesn't give you: &lt;strong&gt;a way to make money from the agent itself.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your agent can hold USDC. But how does it &lt;em&gt;earn&lt;/em&gt; USDC? Right now, the typical answer is: you charge users directly, run a SaaS around it, or hope for sponsorship. All of those options require months of infrastructure work before you see a dollar.&lt;/p&gt;

&lt;p&gt;There's a fourth option that takes 15 minutes.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Idea: Contextual Ads as a Revenue Layer
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;Agentic Ads&lt;/a&gt; is an open-source ad network built natively on MCP. When your agent handles a user request, it can query the Agentic Ads MCP server for a contextually relevant suggestion. If relevant, the suggestion gets included in the response. If not, nothing happens.&lt;/p&gt;

&lt;p&gt;Revenue flows in native USDC on Base. No payment processing on your end. No invoicing, no chargebacks, no user auth.&lt;/p&gt;

&lt;p&gt;The math:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Monthly Tool Calls&lt;/th&gt;
&lt;th&gt;CPM Rate&lt;/th&gt;
&lt;th&gt;Your Cut (70%)&lt;/th&gt;
&lt;th&gt;Monthly USDC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;td&gt;$5&lt;/td&gt;
&lt;td&gt;$3.50&lt;/td&gt;
&lt;td&gt;~35 USDC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50,000&lt;/td&gt;
&lt;td&gt;$5&lt;/td&gt;
&lt;td&gt;$3.50&lt;/td&gt;
&lt;td&gt;~175 USDC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100,000&lt;/td&gt;
&lt;td&gt;$7&lt;/td&gt;
&lt;td&gt;$4.90&lt;/td&gt;
&lt;td&gt;~490 USDC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500,000&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;td&gt;$7.00&lt;/td&gt;
&lt;td&gt;~3,500 USDC&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;CPM rates are projected - we're early-stage and honest about it. But developer-tool ads command premium rates in traditional ad networks because the audience is high-intent. MCP tool context is richer than a webpage URL, which should push CPMs higher over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Base Specifically?
&lt;/h2&gt;

&lt;p&gt;Three reasons this is a Base-native integration, not generic:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Native USDC.&lt;/strong&gt; Base runs Circle's official USDC - not a bridged wrapper, not a synthetic. Micropayments work without bridge risk. Publisher payouts in USDC settle on Base L2, not Ethereum mainnet, so fees don't eat the revenue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. AgentKit lives on Base.&lt;/strong&gt; The CDP SDK, AgentKit's underlying infrastructure, is optimized for Base. If your agent already uses AgentKit, it already has a Base wallet. We're not adding a new chain - we're using the wallet you already have.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Farcaster and the Base dev community.&lt;/strong&gt; The most technically advanced agent builders in crypto are on Base and building on Farcaster. That's our advertiser base: developer tools, protocols, and services that want to reach this audience through contextual, non-spammy suggestions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Integration: Step by Step
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Node.js 18+ or Python 3.9+&lt;/li&gt;
&lt;li&gt;A working AgentKit agent&lt;/li&gt;
&lt;li&gt;Free Agentic Ads publisher account&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1: Register as a Publisher
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://agentic-ads-production.up.railway.app/api/register &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "name": "My AgentKit Agent",
    "website": "https://github.com/your-username/your-agent",
    "mcpServerName": "my-agentkit-agent"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll get back a &lt;code&gt;publisher_id&lt;/code&gt; and &lt;code&gt;api_key&lt;/code&gt;. Save both.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Add the Agentic Ads MCP Tool to Your Agent
&lt;/h3&gt;

&lt;p&gt;AgentKit uses LangChain under the hood for TypeScript. The cleanest integration is adding the Agentic Ads MCP server as an additional tool source alongside your AgentKit wallet tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TypeScript (LangChain + AgentKit):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AgentKit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CdpWalletProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@coinbase/agentkit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getLangChainTools&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@coinbase/agentkit-langchain&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ChatAnthropic&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@langchain/anthropic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createReactAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@langchain/langgraph/prebuilt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Your existing AgentKit setup&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;walletProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;CdpWalletProvider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;configureWithWallet&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;apiKeyName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CDP_API_KEY_NAME&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;apiKeyPrivateKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CDP_API_KEY_PRIVATE_KEY&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;networkId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;base-mainnet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agentkit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;AgentKit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;walletProvider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;actionProviders&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="c1"&gt;// your action providers here&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agentKitTools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getLangChainTools&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;agentkit&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Add Agentic Ads as a manual tool&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;searchAdsTool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;search_ads&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Search for contextually relevant ad suggestions based on the current user query.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;The user's query or topic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Brief context about what the user is trying to do&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;query&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;func&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;context&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="s2"&gt;`https://agentic-ads-production.up.railway.app/api/ads/search`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-publisher-id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PUBLISHER_ID&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-api-key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;API_KEY&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Create your monetized agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ChatAnthropic&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;claude-sonnet-4-6&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createReactAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;agentKitTools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;searchAdsTool&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;messageModifier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`You are a helpful AI agent with onchain capabilities via AgentKit.

When answering user queries, after forming your main response, use search_ads to find
a contextually relevant suggestion. Include it at the end of your response ONLY if
it is genuinely relevant to what the user asked. Format like this:

---
Relevant resource: [suggestion content here]

Never force a suggestion. If nothing relevant is found, skip it entirely.`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Python (AgentKit + LangGraph):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;coinbase_agentkit&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AgentKit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AgentKitConfig&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;coinbase_agentkit_langchain&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;get_langchain_tools&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain_anthropic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ChatAnthropic&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langgraph.prebuilt&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;create_react_agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain.tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;StructuredTool&lt;/span&gt;

&lt;span class="c1"&gt;# Your AgentKit setup
&lt;/span&gt;&lt;span class="n"&gt;agentkit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AgentKit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nc"&gt;AgentKitConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;cdp_api_key_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CDP_API_KEY_NAME&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;cdp_api_key_private_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CDP_API_KEY_PRIVATE_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;network_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;base-mainnet&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;agentkit_tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_langchain_tools&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agentkit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Agentic Ads integration
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;search_ads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Search for contextual ad suggestions.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://agentic-ads-production.up.railway.app/api/ads/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;context&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-publisher-id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PUBLISHER_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="n"&gt;ads_tool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StructuredTool&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;search_ads&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_ads&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Find contextually relevant suggestions for the user&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s query.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Monetized agent
&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ChatAnthropic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4-6&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;agent_executor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_react_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;agentkit_tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ads_tool&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;state_modifier&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;You are a helpful onchain AI agent.

After answering a user&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s question, call search_ads with the relevant topic.
If you get a relevant suggestion back, include it naturally:

---
You might also find this useful: [suggestion]

Only include suggestions that are genuinely relevant. Never force them.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Run and Test
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;CDP_API_KEY_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-cdp-key-name"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;CDP_API_KEY_PRIVATE_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-cdp-private-key"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PUBLISHER_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-agentic-ads-publisher-id"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-agentic-ads-api-key"&lt;/span&gt;

npx ts-node your-agent.ts
&lt;span class="c"&gt;# or&lt;/span&gt;
python your_agent.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test it by asking your agent something like "What's a good tool for building a REST API?" You should see a relevant suggestion appended to the response.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Payouts Work
&lt;/h2&gt;

&lt;p&gt;The revenue flow is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your agent calls &lt;code&gt;search_ads&lt;/code&gt; - impression is recorded&lt;/li&gt;
&lt;li&gt;User engages with the suggestion - click event reported&lt;/li&gt;
&lt;li&gt;Revenue accrues in your publisher account&lt;/li&gt;
&lt;li&gt;Payouts in USDC to your Base wallet address on a regular schedule&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Because you already have a Base wallet via AgentKit, there's no separate wallet setup required. Your CDP wallet address is your payout address. Add it to your publisher profile and payouts go directly onchain.&lt;/p&gt;




&lt;h2&gt;
  
  
  Handling the UX Gracefully
&lt;/h2&gt;

&lt;p&gt;The most important implementation detail: &lt;strong&gt;ads should never degrade the user experience.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A few practices that help:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set a tight timeout.&lt;/strong&gt; The Agentic Ads API should respond in under 100ms, but add a 2-second timeout client-side. If the ad request times out, your agent just responds normally. Never block on ads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let the model filter.&lt;/strong&gt; The agent prompt instructs the model to only include suggestions when genuinely relevant. Trust this - the LLM is a better relevance filter than any keyword blocklist you'd write.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One suggestion max.&lt;/strong&gt; Never show more than one suggestion per response. Users tune out quickly if every answer ends with ads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Label clearly.&lt;/strong&gt; "Suggestion:" or "You might find this useful:" framing is honest and doesn't mislead users about what they're seeing.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Honest State of the Platform
&lt;/h2&gt;

&lt;p&gt;I want to be direct about where this is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Platform&lt;/strong&gt;: Live at &lt;code&gt;agentic-ads-production.up.railway.app&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SDK&lt;/strong&gt;: Works, zero-dependency core, TypeScript + Python&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paying advertisers&lt;/strong&gt;: Zero today&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This is a chicken-and-egg problem&lt;/strong&gt;: Advertisers follow publisher inventory. We're building the publisher side first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you integrate today, you won't see USDC revenue immediately. You'll be part of building the inventory that makes the advertiser pitch credible. Early publishers get higher revenue share when advertisers come onboard.&lt;/p&gt;

&lt;p&gt;Is that honest enough? The value proposition for early integration isn't revenue today - it's zero setup cost, 15-minute integration, and optionality. If it never works, you've lost 15 minutes. If it does, you have a passive revenue stream you didn't have to build.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This + AgentKit Makes Sense
&lt;/h2&gt;

&lt;p&gt;The typical agent monetization path looks like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build agent&lt;/li&gt;
&lt;li&gt;Realize no business model&lt;/li&gt;
&lt;li&gt;Retrofit SaaS pricing, auth, billing infrastructure&lt;/li&gt;
&lt;li&gt;Spend 3 months on billing, not the product&lt;/li&gt;
&lt;li&gt;Charge users, some churn, margins are tight&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The AgentKit + Agentic Ads path looks like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build agent (AgentKit gives you the wallet)&lt;/li&gt;
&lt;li&gt;Add 20 lines of code&lt;/li&gt;
&lt;li&gt;Agent serves contextual suggestions alongside its normal outputs&lt;/li&gt;
&lt;li&gt;Revenue flows in USDC to your existing Base wallet&lt;/li&gt;
&lt;li&gt;Keep building the thing you actually care about&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal isn't to get rich from ads. The goal is to have a revenue stream that doesn't require you to become a payments company.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Register&lt;/strong&gt;: &lt;code&gt;curl -X POST https://agentic-ads-production.up.railway.app/api/register&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copy the code above&lt;/strong&gt; into your AgentKit agent&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set env vars&lt;/strong&gt; and run&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Star the repo&lt;/strong&gt;: &lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;github.com/nicofains1/agentic-ads&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Questions?&lt;/strong&gt; Open an issue - founder responds personally&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Source is fully open. Read it, fork it, audit the ad matching logic before you trust it with your users. That's the right approach.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/nicolas_fainstein/how-to-monetize-your-mcp-server-in-5-minutes-3n6a"&gt;How to Monetize Your MCP Server in 5 Minutes&lt;/a&gt; - the non-AgentKit version&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/nicolas_fainstein/building-an-ad-network-for-ai-agents-architecture-deep-dive-1p8i"&gt;Building an Ad Network for AI Agents - Architecture Deep Dive&lt;/a&gt; - how the matching engine works&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/nicolas_fainstein/the-state-of-mcp-monetization-in-2026-28i4"&gt;The State of MCP Monetization in 2026&lt;/a&gt; - competitive landscape&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>agentkit</category>
      <category>base</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>Why We Built Our AI Ad Network on Base</title>
      <dc:creator>Nicolas Fainstein</dc:creator>
      <pubDate>Sun, 08 Mar 2026 03:44:50 +0000</pubDate>
      <link>https://dev.to/nicolas_fainstein/why-we-built-our-ai-ad-network-on-base-51hl</link>
      <guid>https://dev.to/nicolas_fainstein/why-we-built-our-ai-ad-network-on-base-51hl</guid>
      <description>&lt;p&gt;&lt;em&gt;Founder note. March 2026.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;We made a decision early: when we eventually added crypto payments to agentic-ads, it would be Base or nothing. This is the honest version of why.&lt;/p&gt;




&lt;h2&gt;
  
  
  How We Got Here
&lt;/h2&gt;

&lt;p&gt;agentic-ads is an ad network for AI agents - specifically for MCP (Model Context Protocol) servers, which are the tool plugins that Claude, GPT-4, Gemini, and every major AI model can call. There are 18,000+ of them on GitHub. Almost none make money. We're trying to fix that.&lt;/p&gt;

&lt;p&gt;The business model is simple: MCP developers add 20 lines of code, their tools serve contextual text suggestions alongside normal responses, revenue flows back to them. 70% to the developer, 30% to the platform.&lt;/p&gt;

&lt;p&gt;When we started, payments were fiat-only, handled by Stripe. Standard stack, nothing controversial. But as we got deeper into the product - and specifically as we started talking to the agent ecosystem - we kept running into the same problem: the people building AI agents are already onchain. Many of them already have crypto wallets. Coinbase AgentKit, which lets you give an AI agent a self-custodied wallet on Base, was getting traction fast. Our natural publishers weren't SaaS companies with Stripe accounts. They were individual developers, open-source maintainers, people who opened GitHub issues to talk to us.&lt;/p&gt;

&lt;p&gt;Stripe requires a business entity, a bank account, a country that Stripe supports. For a solo developer in Brazil or Nigeria or Indonesia building an MCP tool with 50 active users - Stripe is a multi-week compliance project before they see a dollar. USDC on Base is a wallet address and a transfer.&lt;/p&gt;

&lt;p&gt;That's when we decided to build on Base.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Actual Reasons (In Order of Weight)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. The audience already lives there
&lt;/h3&gt;

&lt;p&gt;The developers most likely to integrate agentic-ads are also most likely to be on Farcaster, building with AgentKit, or active in the Coinbase Developer Platform community. Not because they're crypto maximalists, but because Base is genuinely where the agent infrastructure is being built right now.&lt;/p&gt;

&lt;p&gt;Coinbase AgentKit, the CDP SDK, Farcaster Frames - these are live products with active development communities, and they all run on Base. If we're building a monetization layer for AI agents, and the AI agents with the most sophisticated onchain capabilities are being built on Base, the choice is obvious.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Native USDC removes a class of risk
&lt;/h3&gt;

&lt;p&gt;We started on Polygon. We moved. The USDC on Polygon is bridged - it goes through LayerZero or some other bridge infrastructure before it lands in your wallet. That introduces bridge risk, and it introduces ambiguity: "which USDC?" is a real question that confused early users.&lt;/p&gt;

&lt;p&gt;Base runs Circle's official USDC. Not &lt;code&gt;USDC.e&lt;/code&gt;, not &lt;code&gt;axlUSDC&lt;/code&gt;. Native USDC issued directly by Circle. When a publisher account reaches payout, they get the real thing. No bridge, no wrapper. For micropayments - and ad revenue at $5 CPM is absolutely micropayments - this matters. You don't want to explain bridge mechanics to a developer who just wants to get paid.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Fees make micropayments viable
&lt;/h3&gt;

&lt;p&gt;Ethereum mainnet gas fees make sub-$1 transactions economically irrational. Polygon is cheap, but L2 fees on Base are in the fractions-of-a-cent range. We're going to be doing thousands of small payout transactions as the platform scales. The math only works at L2 fee levels.&lt;/p&gt;

&lt;p&gt;We modeled this: at 500k monthly tool calls, the revenue to distribute is roughly $3,500 USDC. If we're making 1,000+ micro-payouts, Ethereum mainnet would eat a significant chunk in gas. On Base, the cost is negligible.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Coinbase credibility matters for enterprise
&lt;/h3&gt;

&lt;p&gt;This is a more uncomfortable thing to say publicly, but: we want developer tool companies as advertisers eventually. Companies like Supabase, Render, Fly.io, Cloudflare Workers - the people who sponsor developer newsletters and conferences. For them, "we use Coinbase infrastructure" is a trust signal. It's regulated. It's institutional. It passes a compliance conversation in a way that "we run on a random EVM chain" does not.&lt;/p&gt;

&lt;p&gt;This isn't about being "crypto native" for its own sake. It's about building a payment rail that both the scrappy solo developer and the enterprise DevRel team can both get comfortable with.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Got Wrong About Crypto
&lt;/h2&gt;

&lt;p&gt;I want to be honest about where our assumptions were wrong, because there's a real lesson here.&lt;/p&gt;

&lt;p&gt;We thought crypto would make the onboarding story simpler. It doesn't, at least not yet. Most of the MCP developers we've talked to don't have a Base wallet. Some don't have any crypto wallet. Telling someone "you get paid in USDC on Base" adds a cognitive step that Stripe-to-bank-account doesn't. We underestimated how friction-y this is for pure Web2 developers.&lt;/p&gt;

&lt;p&gt;The solution isn't to abandon crypto payments - it's to offer a choice. Our roadmap includes fiat payout options alongside USDC. Let developers choose. The crypto option is genuinely better in several scenarios (international developers, fast settlement, no Stripe eligibility requirements); the fiat option has a shorter trust gap for others.&lt;/p&gt;

&lt;p&gt;We also underestimated the chicken-and-egg problem. We have zero paying advertisers today. That means zero USDC flowing anywhere. The onchain infrastructure is correct and ready, but we built it for a state of the world that doesn't exist yet. That's fine - infrastructure should be built for where you're going, not where you are - but we should have been more realistic about how long the bootstrap phase takes.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Hasn't Changed
&lt;/h2&gt;

&lt;p&gt;The core thesis is intact: AI agents need a monetization model that doesn't require their developers to become payment companies. Contextual ads are the right v1 - low friction to integrate, no user billing, revenue that scales with usage. The MCP ecosystem is still in the monetization dark ages. We're still the only ad-supported option.&lt;/p&gt;

&lt;p&gt;The Base choice is still right. We can see AgentKit adoption accelerating. Farcaster Frames are live and interesting for interactive ad formats. The CDP SDK is getting more capable. The developer community on Base is technically sophisticated and growing.&lt;/p&gt;

&lt;p&gt;And native USDC on Base is genuinely the best payment rail for this use case. Fast, cheap, real settlement, institutional credibility. Once we have advertisers, this is the payment system we want.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Honest Summary
&lt;/h2&gt;

&lt;p&gt;We built on Base because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Our target publishers are building there&lt;/li&gt;
&lt;li&gt;Native USDC has real advantages over bridged tokens&lt;/li&gt;
&lt;li&gt;L2 fees make micropayments economically viable&lt;/li&gt;
&lt;li&gt;Coinbase credibility helps with enterprise advertisers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We got some things wrong:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crypto onboarding is harder for pure Web2 devs than we expected&lt;/li&gt;
&lt;li&gt;We built payment infrastructure before we had payment volume&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Net verdict: the Base decision was right. The timing of prioritizing crypto payments over solving distribution first was probably wrong. We should have gotten to first integration faster and worried about the payment rail second.&lt;/p&gt;

&lt;p&gt;But here we are. The platform is live. The USDC flows are ready. Now we need publishers.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;github.com/nicofains1/agentic-ads&lt;/a&gt; - the ad network for AI agents. Built on Base.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>base</category>
      <category>blockchain</category>
      <category>ai</category>
      <category>startup</category>
    </item>
    <item>
      <title>How I Monetized My MCP Server — And What the $0.21 First Commission Means</title>
      <dc:creator>Nicolas Fainstein</dc:creator>
      <pubDate>Sun, 08 Mar 2026 03:43:57 +0000</pubDate>
      <link>https://dev.to/nicolas_fainstein/how-i-monetized-my-mcp-server-and-what-the-021-first-commission-means-3o1k</link>
      <guid>https://dev.to/nicolas_fainstein/how-i-monetized-my-mcp-server-and-what-the-021-first-commission-means-3o1k</guid>
      <description>&lt;h2&gt;
  
  
  The test ran. The money landed.
&lt;/h2&gt;

&lt;p&gt;On March 2, 2026, I ran a full end-to-end validation of an affiliate layer I built for MCP servers. Here is what the log looked like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Step 1: POST /api/register → publisher_id returned ✅
Step 2: POST /api/campaigns → campaign_id returned ✅
Step 3: search_ads(query: "CI/CD tool") → sponsored result returned ✅
Step 4: Organic + sponsored displayed, user picks sponsored ✅
Step 5: report_event(click) → event recorded ✅
Step 6: Commission: $0.21 earned on $0.30 CPC (70/30 split) ✅
Step 7: On-chain settlement: USDC.e on Base, real wallet ✅
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seven steps. All passed. &lt;strong&gt;$0.21 landed in a real wallet.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is not a demo. It is not a prototype. The system is live at &lt;a href="https://agentic-ads-production.up.railway.app" rel="noopener noreferrer"&gt;https://agentic-ads-production.up.railway.app&lt;/a&gt;. The test suite has 270 tests, all passing.&lt;/p&gt;

&lt;p&gt;This is the story of how it works - and how you can monetize your MCP server today.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: 16,000+ MCP Servers. Almost None Make Money.
&lt;/h2&gt;

&lt;p&gt;I have been building MCP tools since early 2025. Every Discord I joined, every GitHub thread I read, every developer coffee chat I had - same conversation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How do you monetize this?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nobody had a good answer. The four standard options all fail for MCP:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage-based billing&lt;/strong&gt; - Requires auth infrastructure, billing systems, payment processing. If you are a solo dev maintaining an open-source MCP server, this is months of work that has nothing to do with your actual tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sponsorships&lt;/strong&gt; - Works great for the top 0.1% of repos with massive followings. Caps out at a few hundred dollars for everyone else. Not a business model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commercial licenses&lt;/strong&gt; - Works for enterprise tools. Does not work if your users are AI agents and there is no human signing a contract.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Freemium&lt;/strong&gt; - No natural upgrade path in a tool-call model. What exactly is the premium version of a weather tool?&lt;/p&gt;

&lt;p&gt;The MCP ecosystem is at an inflection point: tens of thousands of servers being built, developers pouring real time into them, and almost no path to revenue.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Insight: Your Recommendations Are Already Worth Money
&lt;/h2&gt;

&lt;p&gt;Here is the thing nobody was saying out loud: &lt;strong&gt;MCP servers that make recommendations are already delivering enormous commercial value - they are just not capturing any of it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When your tool says "use GitHub Actions" - you just sent GitHub a qualified user.&lt;br&gt;
When your tool says "try PlanetScale for this" - you just sent PlanetScale a potential customer.&lt;br&gt;
When your travel tool says "book through Booking.com" - that is a conversion, for free.&lt;/p&gt;

&lt;p&gt;If you had written a blog post saying the same thing, you would have included an affiliate link. That blog post would pay you.&lt;/p&gt;

&lt;p&gt;Why should a programmatic recommendation pay you less than a blog post?&lt;/p&gt;

&lt;p&gt;It should not. And now it does not.&lt;/p&gt;


&lt;h2&gt;
  
  
  What I Built: Affiliate Marketing, Programmatic and Real-Time
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;agentic-ads&lt;/a&gt; - an affiliate recommendation marketplace for MCP servers. Here is the canonical flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. User asks agent: "I need a CI/CD tool"
2. MCP server does normal research → GitHub Actions, CircleCI, Jenkins
3. MCP server calls search_ads(query: "CI/CD tool for monorepo")
   → Returns: "BuildKite – fast CI for monorepos, free for open source"
4. Server presents: [organic results] + [Sponsored: BuildKite]
5. User picks BuildKite → developer earns commission ($0.21 per click at $0.30 CPC)
6. User picks GitHub Actions → no revenue, correct info delivered
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key mechanics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You choose when to call &lt;code&gt;search_ads()&lt;/code&gt;&lt;/strong&gt; - it is opt-in per query type&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sponsored results sit alongside organic&lt;/strong&gt; - never replacing them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Labeling is explicit&lt;/strong&gt; - always marked &lt;code&gt;[Sponsored]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No relevant sponsor? API returns &lt;code&gt;{ "ads": [] }&lt;/code&gt;&lt;/strong&gt; - nothing shown, tool unaffected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You earn only when the user acts&lt;/strong&gt; - commission on action, not on impression&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is affiliate marketing. The model is identical to a developer blogger including referral links in a "best tools for X" post. We just make it programmatic and real-time.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Integration: Step by Step
&lt;/h2&gt;

&lt;p&gt;The integration uses the &lt;code&gt;@modelcontextprotocol/sdk&lt;/code&gt; package directly - the same SDK you already use to build your MCP server. No additional npm package required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Register and get your API key
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Option A - Web UI (easiest):&lt;/strong&gt; Go to &lt;a href="https://agentic-ads-production.up.railway.app/dev/register" rel="noopener noreferrer"&gt;https://agentic-ads-production.up.railway.app/dev/register&lt;/a&gt; - instant API key, no code required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B - API:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://agentic-ads-production.up.railway.app/api/register &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"name": "My MCP Server", "email": "you@example.com"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"api_key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"aa_dev_0d932be31..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"mcp_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://agentic-ads-production.up.railway.app/mcp"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Option C - MCP Registry:&lt;/strong&gt; Install &lt;code&gt;io.github.nicofains1/agentic-ads&lt;/code&gt; directly in Claude Desktop, Cursor, or any MCP-compatible client.&lt;/p&gt;

&lt;p&gt;Save &lt;code&gt;api_key&lt;/code&gt; as the environment variable &lt;code&gt;AGENTIC_ADS_KEY&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Connect the MCP client (one-time setup)
&lt;/h3&gt;

&lt;p&gt;This goes in your server initialization, before you start handling tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Client&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@modelcontextprotocol/sdk/client/index.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;StreamableHTTPClientTransport&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@modelcontextprotocol/sdk/client/streamableHttp.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;adsClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-server&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1.0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{});&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;adsClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;StreamableHTTPClientTransport&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://agentic-ads-production.up.railway.app/mcp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;requestInit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AGENTIC_ADS_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Call &lt;code&gt;search_ads&lt;/code&gt; inside your tool handler
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;recommend_tool&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;organicResults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;yourExistingResearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;adsClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;callTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;search_ads&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;max_results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ads&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;organicResults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ads&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ads&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;adsClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;callTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;report_event&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;ad_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ad&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ad_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;event_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;impression&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s2"&gt;`\n\n⭐ &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ad&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;creative_text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; → &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ad&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;link_url&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; [Sponsored]`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="p"&gt;}]&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Check your earnings
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;earnings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;adsClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;callTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;get_developer_earnings&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{});&lt;/span&gt;
&lt;span class="c1"&gt;// → { total_earnings: 0.21, last_24h: 0.21, total_clicks: 1 }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the entire integration. Your existing tool logic is unchanged. The ad fetch is additive. If the ad network is unreachable or returns no match, your tool response is unaffected.&lt;/p&gt;




&lt;h2&gt;
  
  
  Available MCP Tools
&lt;/h2&gt;

&lt;p&gt;The ad network exposes six tools via the MCP protocol:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_ads&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fetch a relevant sponsored result for a query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;report_event&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Record impression or click events&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_developer_earnings&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Check your current earnings balance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;register_wallet&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Set your USDC payout wallet address&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;request_withdrawal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Request a payout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_ad_guidelines&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Retrieve display rules and compliance requirements&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Display Rules
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;get_ad_guidelines&lt;/code&gt; tool returns these requirements - follow them to stay in the program:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always label ads as &lt;code&gt;[Sponsored]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Show a maximum of 1-2 sponsored options per response&lt;/li&gt;
&lt;li&gt;Only show ads that are relevant to the query context&lt;/li&gt;
&lt;li&gt;Respect user opt-out if the end user requests no sponsored content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rationale is the same as Google's sponsored search results: organic results are present, sponsored results are present, labels are clear, the user chooses. That transparency is what makes it acceptable rather than deceptive.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Is Not
&lt;/h2&gt;

&lt;p&gt;I want to be direct about this because the framing matters to a lot of developers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is not adware.&lt;/strong&gt; You write the &lt;code&gt;search_ads()&lt;/code&gt; call. Nothing happens to your responses without your code. You decide which tools participate. You can disable it by removing the call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is not banner ads.&lt;/strong&gt; There are no popups, no images, no interstitials. One line of text, clearly labeled &lt;code&gt;[Sponsored]&lt;/code&gt;, sitting alongside your organic results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is not injection.&lt;/strong&gt; Nothing enters your response without your explicit code path.&lt;/p&gt;

&lt;p&gt;The right mental model: a developer blog post with affiliate links. The content is useful and honest. The recommendation is genuine. The author gets compensated for a referral that converts. Same thing, programmatic.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Revenue Numbers
&lt;/h2&gt;

&lt;p&gt;Here is what the math looks like at different scale levels:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Monthly Tool Calls&lt;/th&gt;
&lt;th&gt;Conservative&lt;/th&gt;
&lt;th&gt;Strong&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1,000&lt;/td&gt;
&lt;td&gt;$7&lt;/td&gt;
&lt;td&gt;$42&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;td&gt;$70&lt;/td&gt;
&lt;td&gt;$420&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100,000&lt;/td&gt;
&lt;td&gt;$700&lt;/td&gt;
&lt;td&gt;$4,200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1,000,000&lt;/td&gt;
&lt;td&gt;$7,000&lt;/td&gt;
&lt;td&gt;$42,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Based on 70% publisher share, $0.30 CPC baseline, realistic fill rates. Conservative assumes low fill rates (new marketplace). Strong assumes mature advertiser pool.&lt;/p&gt;

&lt;p&gt;Per-event breakdown:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Typical CPC&lt;/th&gt;
&lt;th&gt;Your cut (70%)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Click&lt;/td&gt;
&lt;td&gt;$0.30&lt;/td&gt;
&lt;td&gt;$0.21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conversion&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$1.40&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The 70/30 split is competitive - Google AdSense gives publishers 68%.&lt;/p&gt;




&lt;h2&gt;
  
  
  Founding Publisher Program: 90/10 for the First 10
&lt;/h2&gt;

&lt;p&gt;Right now, 10 slots are open for Founding Publishers who integrate before the marketplace fills out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you get:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;90% revenue share for 3 months from your integration date (standard is 70%)&lt;/li&gt;
&lt;li&gt;Named in public launch materials as an original integrator&lt;/li&gt;
&lt;li&gt;Direct line to the team for integration questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What qualifies:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Register at the API endpoint above&lt;/li&gt;
&lt;li&gt;Make at least one real &lt;code&gt;search_ads()&lt;/code&gt; call from a production MCP server&lt;/li&gt;
&lt;li&gt;Email &lt;a href="mailto:nicolas@agentic-ads.xyz"&gt;nicolas@agentic-ads.xyz&lt;/a&gt; with "Founding Publisher" when done&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No application. No approval process. First 10 to integrate, in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is 90% available at all?&lt;/strong&gt; Early publishers are taking on real risk - fill rates will be lower while the advertiser side grows. The 90% rate compensates for that gap while it exists. When the marketplace matures, the standard 70% becomes more valuable in absolute dollar terms because fill rates are higher. Early publishers should be compensated for the bet they are making.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why USDC on Base?
&lt;/h2&gt;

&lt;p&gt;Two reasons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instant settlement.&lt;/strong&gt; No net-30 invoicing. No payment processor delays. No $100 minimum withdrawal threshold. You earn $0.21, you can withdraw $0.21.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No friction for international developers.&lt;/strong&gt; Base is a global L2. A developer in Lagos earns the same as a developer in San Francisco, with the same settlement speed. No bank account required, no SWIFT fees, no currency conversion delays.&lt;/p&gt;

&lt;p&gt;If you are not into crypto: think of it as a fast direct deposit that works globally. You can convert USDC to fiat through Coinbase or any major exchange.&lt;/p&gt;




&lt;h2&gt;
  
  
  Technical Architecture
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Railway, persistent SQLite - stable after migrations from two prior providers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payment&lt;/strong&gt;: USDC.e on Base - instant settlement, no payment processor fees&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Matching&lt;/strong&gt;: Keyword and context scoring against active campaigns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol&lt;/strong&gt;: Standard MCP (Model Context Protocol) - uses the same SDK you already have&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test suite&lt;/strong&gt;: 270 tests, all passing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;E2E validation&lt;/strong&gt;: 7/7 steps passed on 2026-03-02&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Registry&lt;/strong&gt;: &lt;code&gt;io.github.nicofains1/agentic-ads&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Health endpoint: &lt;a href="https://agentic-ads-production.up.railway.app/health" rel="noopener noreferrer"&gt;https://agentic-ads-production.up.railway.app/health&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;The MCP ecosystem has over 16,000 servers. AWS is building an AI agent marketplace. Cursor, Windsurf, and Codeium all support one-click MCP installation. Gartner predicts 40% enterprise adoption of multi-agent systems by 2027.&lt;/p&gt;

&lt;p&gt;Developers are building real infrastructure. Tools that save time, prevent incidents, eliminate manual work. That value is already flowing - to GitHub, to PlanetScale, to every company that gets recommended through an agent. The developers doing the recommending are not capturing any of it.&lt;/p&gt;

&lt;p&gt;The monetization layer for MCP is missing. That is what I am building.&lt;/p&gt;

&lt;p&gt;If you are maintaining an MCP server, you are already in the recommendation business. You might as well get paid for it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Register:&lt;/strong&gt; &lt;a href="https://agentic-ads-production.up.railway.app/dev/register" rel="noopener noreferrer"&gt;Self-serve web registration&lt;/a&gt; or &lt;code&gt;POST /api/register&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Or install via MCP Registry:&lt;/strong&gt; &lt;code&gt;io.github.nicofains1/agentic-ads&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Connect the MCP client using &lt;code&gt;@modelcontextprotocol/sdk&lt;/code&gt; (see Step 2 above)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add &lt;code&gt;search_ads()&lt;/code&gt; to one tool handler (see Step 3 above)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deploy&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The platform is live. The API is open. The $0.21 in the test wallet proves the end-to-end works.&lt;/p&gt;




&lt;h2&gt;
  
  
  Questions?
&lt;/h2&gt;

&lt;p&gt;Drop them in the comments or open a GitHub Discussion: &lt;a href="https://github.com/nicofains1/agentic-ads/discussions" rel="noopener noreferrer"&gt;https://github.com/nicofains1/agentic-ads/discussions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you build MCP tools: what is your biggest objection to integrating this? I want to hear the real concerns - every one of them is worth working through in public.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>monetization</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Monetize Your Google ADK Agent with Contextual Ads</title>
      <dc:creator>Nicolas Fainstein</dc:creator>
      <pubDate>Fri, 06 Mar 2026 22:40:54 +0000</pubDate>
      <link>https://dev.to/nicolas_fainstein/how-to-monetize-your-google-adk-agent-with-contextual-ads-50g1</link>
      <guid>https://dev.to/nicolas_fainstein/how-to-monetize-your-google-adk-agent-with-contextual-ads-50g1</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Google ADK has native MCP support via &lt;code&gt;McpToolset&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;You can connect any ADK agent to an MCP ad server in 10 minutes&lt;/li&gt;
&lt;li&gt;Your agent serves contextual suggestions alongside tool responses&lt;/li&gt;
&lt;li&gt;Revenue split: 70% to you, 30% to the platform&lt;/li&gt;
&lt;li&gt;No billing infrastructure, no payment processing, no user accounts&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;Google's Agent Development Kit just shipped native MCP support. Here's how to turn that into revenue.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why This Matters Now
&lt;/h2&gt;

&lt;p&gt;Google ADK is the fastest-growing agent framework right now. It ships with native MCP support through &lt;code&gt;McpToolset&lt;/code&gt; - meaning any MCP server works out of the box with ADK agents. No adapters, no wrappers, no hacks.&lt;/p&gt;

&lt;p&gt;Meanwhile, the MCP ecosystem has 18,000+ servers on GitHub. Developers build them, open-source them, maintain them - and almost none make money. The ecosystem has the same monetization gap the web had before AdSense: tons of content, zero business model.&lt;/p&gt;

&lt;p&gt;ADK + MCP + contextual ads closes that gap. Here's how.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: You Built an Agent, Now What?
&lt;/h2&gt;

&lt;p&gt;You built a Google ADK agent. Maybe it helps users research topics, manage files, or query databases. It works great. But you're not making money from it.&lt;/p&gt;

&lt;p&gt;Traditional monetization approaches don't fit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SaaS pricing?&lt;/strong&gt; Your agent has no login page, no dashboard, no seats to charge for&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Usage-based billing?&lt;/strong&gt; Requires auth infrastructure, payment processing, usage dashboards - months of engineering work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sponsorship?&lt;/strong&gt; Caps out quickly. Charity, not a business model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What if your agent could include relevant, contextual suggestions alongside its responses - and earn revenue every time a user finds one helpful?&lt;/p&gt;




&lt;h2&gt;
  
  
  The Solution: Contextual Ads via MCP
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;Agentic Ads&lt;/a&gt; is an open-source ad network built on MCP. It serves contextual text suggestions - not banners, not popups, not behavioral targeting. Keyword-based matching, fully transparent.&lt;/p&gt;

&lt;p&gt;Because Google ADK natively supports MCP, integration is trivial. Your ADK agent connects to the Agentic Ads MCP server, gets access to ad tools (&lt;code&gt;search_ads&lt;/code&gt;, &lt;code&gt;report_event&lt;/code&gt;), and can serve relevant suggestions alongside its normal responses.&lt;/p&gt;

&lt;p&gt;Here's what the user experience looks like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User asks your agent: "What's the best database for my side project?"&lt;/li&gt;
&lt;li&gt;Your agent researches and responds with recommendations&lt;/li&gt;
&lt;li&gt;Alongside the response, a contextual suggestion: "Try Supabase - Postgres with built-in auth, free tier available"&lt;/li&gt;
&lt;li&gt;If the user clicks through, you earn revenue&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No tracking pixels. No cookies. No behavioral profiling. Just relevant suggestions matched by keyword and context.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step-by-Step: ADK Agent + Agentic Ads
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.9+&lt;/li&gt;
&lt;li&gt;Google ADK installed (&lt;code&gt;pip install google-adk&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;A free Agentic Ads publisher account&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1: Register as a Publisher
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://agentic-ads-production.up.railway.app/api/register &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "name": "My ADK Agent",
    "website": "https://github.com/your-username/your-agent",
    "mcpServerName": "my-adk-agent"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the &lt;code&gt;publisher_id&lt;/code&gt; and &lt;code&gt;api_key&lt;/code&gt; from the response. You'll need these.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Create Your ADK Agent with MCP Ad Tools
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LlmAgent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.tools.mcp_tool&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;McpToolset&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.tools.mcp_tool.mcp_session_manager&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SseServerParams&lt;/span&gt;

&lt;span class="c1"&gt;# Connect to Agentic Ads MCP server
&lt;/span&gt;&lt;span class="n"&gt;agentic_ads_toolset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;McpToolset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;connection_params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;SseServerParams&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://agentic-ads-production.up.railway.app/mcp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-publisher-id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PUBLISHER_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Create your agent with ad tools included
&lt;/span&gt;&lt;span class="n"&gt;root_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LlmAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-2.0-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my_monetized_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;You are a helpful assistant. When answering questions,
    use search_ads to find relevant contextual suggestions. Include them
    naturally at the end of your response, clearly marked as a suggestion.
    Never force ads - only include them when genuinely relevant.
    If no relevant ad is found, that&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s fine - just answer normally.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;agentic_ads_toolset&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="c1"&gt;# ... your other tools here
&lt;/span&gt;    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Your ADK agent now has access to &lt;code&gt;search_ads&lt;/code&gt; and &lt;code&gt;report_event&lt;/code&gt; MCP tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: How It Works at Runtime
&lt;/h3&gt;

&lt;p&gt;When your agent handles a user query, it can call &lt;code&gt;search_ads&lt;/code&gt; with context:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tool call: search_ads
Arguments: {
  "query": "database side project",
  "context": "User is asking about database recommendations for a side project"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The MCP server returns a relevant ad:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ad_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ad_123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Try Supabase - Postgres with built-in auth. Free tier, no credit card required."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"advertiser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Supabase"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"contextual_suggestion"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your agent weaves it naturally into its response. The user sees a helpful suggestion, not an intrusion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Track Engagement
&lt;/h3&gt;

&lt;p&gt;When a user engages with a suggestion (clicks, asks follow-up), your agent calls &lt;code&gt;report_event&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tool call: report_event
Arguments: {
  "ad_id": "ad_123",
  "event_type": "click"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tracks the engagement and credits your publisher account.&lt;/p&gt;




&lt;h2&gt;
  
  
  Full Working Example
&lt;/h2&gt;

&lt;p&gt;Here's a complete, copy-paste-ready ADK agent with monetization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
Monetized ADK Agent - Research Assistant with Contextual Ads
Requires: pip install google-adk
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LlmAgent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.tools.mcp_tool&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;McpToolset&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.tools.mcp_tool.mcp_session_manager&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SseServerParams&lt;/span&gt;

&lt;span class="c1"&gt;# Agentic Ads MCP connection
&lt;/span&gt;&lt;span class="n"&gt;ads_toolset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;McpToolset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;connection_params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;SseServerParams&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://agentic-ads-production.up.railway.app/mcp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-publisher-id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PUBLISHER_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;root_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LlmAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-2.0-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;research_assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;You are a research assistant that helps developers
    find tools, libraries, and solutions.

    After answering a question, use the search_ads tool to find a relevant
    contextual suggestion. If one is relevant to the user&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s query, include
    it at the end of your response like this:

    ---
    Suggestion: [ad content here]

    Only include suggestions that are genuinely relevant. Never force them.
    If search_ads returns nothing relevant, skip it entirely.

    When a user clicks on or asks about a suggestion, use report_event
    to track the engagement.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ads_toolset&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Run It
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PUBLISHER_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-publisher-id"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-api-key"&lt;/span&gt;

&lt;span class="c"&gt;# Using ADK CLI&lt;/span&gt;
adk run my_monetized_agent

&lt;span class="c"&gt;# Or using ADK web UI&lt;/span&gt;
adk web my_monetized_agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Revenue Potential
&lt;/h2&gt;

&lt;p&gt;The math is straightforward:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Monthly Tool Calls&lt;/th&gt;
&lt;th&gt;CPM Rate&lt;/th&gt;
&lt;th&gt;Your Cut (70%)&lt;/th&gt;
&lt;th&gt;Monthly Revenue&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;td&gt;$5&lt;/td&gt;
&lt;td&gt;$3.50&lt;/td&gt;
&lt;td&gt;$35&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50,000&lt;/td&gt;
&lt;td&gt;$5&lt;/td&gt;
&lt;td&gt;$3.50&lt;/td&gt;
&lt;td&gt;$175&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100,000&lt;/td&gt;
&lt;td&gt;$7&lt;/td&gt;
&lt;td&gt;$4.90&lt;/td&gt;
&lt;td&gt;$490&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500,000&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;td&gt;$7.00&lt;/td&gt;
&lt;td&gt;$3,500&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;CPM rates increase as the platform grows. Developer tool ads command premium rates because the audience is high-intent.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Contextual Ads Beat Other Models
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Setup Time&lt;/th&gt;
&lt;th&gt;Ongoing Work&lt;/th&gt;
&lt;th&gt;Revenue Start&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Usage-based billing&lt;/td&gt;
&lt;td&gt;Weeks&lt;/td&gt;
&lt;td&gt;Payment disputes, invoicing, dashboards&lt;/td&gt;
&lt;td&gt;After billing system built&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SaaS subscription&lt;/td&gt;
&lt;td&gt;Weeks&lt;/td&gt;
&lt;td&gt;User management, auth, pricing page&lt;/td&gt;
&lt;td&gt;After enough users&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sponsorship&lt;/td&gt;
&lt;td&gt;Days&lt;/td&gt;
&lt;td&gt;Finding sponsors, negotiating&lt;/td&gt;
&lt;td&gt;Unpredictable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Contextual ads&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;10 minutes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Immediately&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The key insight: contextual ads work &lt;em&gt;through&lt;/em&gt; the AI agent, not around it. The agent decides whether to include a suggestion based on relevance. Bad ads get filtered out naturally. Good ads improve the user experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Will this annoy users?&lt;/strong&gt;&lt;br&gt;
The AI agent controls what it shows. If a suggestion isn't relevant, the agent skips it. Users see helpful recommendations, not spam. If the experience is bad, you can disable ads with one line change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What about privacy?&lt;/strong&gt;&lt;br&gt;
No tracking pixels, no cookies, no behavioral profiling. Matching is keyword + context based. The MCP server sees the query context, not user identity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who is advertising?&lt;/strong&gt;&lt;br&gt;
Developer tool companies - hosting providers, API services, SaaS tools. The same companies that sponsor developer newsletters and conferences, but with better targeting because MCP tool context is rich.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is this production-ready?&lt;/strong&gt;&lt;br&gt;
The platform is live at &lt;a href="https://agentic-ads-production.up.railway.app" rel="noopener noreferrer"&gt;agentic-ads-production.up.railway.app&lt;/a&gt;. The SDK works, the matching engine works. Zero paying advertisers today - we're building publisher inventory first. Classic chicken-and-egg, and we're not hiding it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Register&lt;/strong&gt;: &lt;code&gt;curl -X POST https://agentic-ads-production.up.railway.app/api/register&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install ADK&lt;/strong&gt;: &lt;code&gt;pip install google-adk&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copy the code above&lt;/strong&gt; and run it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Star the repo&lt;/strong&gt;: &lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;github.com/nicofains1/agentic-ads&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The entire integration is &lt;a href="https://github.com/nicofains1/agentic-ads" rel="noopener noreferrer"&gt;open source&lt;/a&gt;. Read the code, fork it, improve it.&lt;/p&gt;

</description>
      <category>googleadk</category>
      <category>mcp</category>
      <category>ai</category>
      <category>monetization</category>
    </item>
  </channel>
</rss>
