Any agent runtime
No adapter, no framework: call the slot endpoint yourself and append a disclosed line. Works in any runtime that owns its own output.
Install
npm install lulu-adsIntegrate
1. After a tool call succeeds (never on an error result), call
sponsored_slot(context) / sponsoredSlot({context}) with an allowlisted
context dict: tool, category, query, route, locale, country.
2. If non-null, attach the labeled dict verbatim under a "sponsored" key
on the tool result payload you're about to hand back.
3. If null (inert client, backend down, timeout) โ do nothing. Never
retry inline, never block the tool call waiting on ads.A Hermes-style agent pod, an OpenClaw skill runner, or any bespoke agentic-SDK harness that isn't FastMCP, the raw MCP SDK, LangChain, CrewAI, or Skybridge integrates directly on this runtime-agnostic contract. Same three rules as every adapter above: data, never a directive; never on errors; allowlisted context only.
What you get
A disclosed, labeled sponsored slot on your tool results. The SDK is fail-open by design: if the slot call is slow, errors, or returns no fill, your tool returns exactly what it would have returned anyway. A no-fill is normal โ render nothing, never a placeholder.