{"_id":"lulu-ads","_rev":"53-ef8bf575ec660e95b4e7c93b943a8b6d","name":"lulu-ads","dist-tags":{"legacy":"0.9.16","latest":"0.9.19"},"versions":{"0.1.0":{"name":"lulu-ads","version":"0.1.0","license":"MIT","_id":"lulu-ads@0.1.0","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://github.com/Lulu-The-Narwhal/lulu-ads#readme","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"56a316cd3be58c31025c830bc6b30530143a9f32","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.1.0.tgz","fileCount":5,"integrity":"sha512-zM59N/A0A2rYYOmTrzWnUk9xfQrMUNzI9DkBUYpHZ55Jz4Cb7NLqfdVXdv3HZ7cvj81gni+c23XESNPKiY43eA==","signatures":[{"sig":"MEUCIAnLyjYuNcaTxtCs0AMqzh1qgHKcNpfmjwfvuE7yNumqAiEAmOb8dziwFG6xg/eicZobAf3O2Ty2OK5U10bTe/TSbDE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7065},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"c66beffa719ac26cde4da304e5445ee8078f13a2","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.1.0_1784068609917_0.09592253312149457","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"lulu-ads","version":"0.1.1","license":"MIT","_id":"lulu-ads@0.1.1","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://github.com/Lulu-The-Narwhal/lulu-ads#readme","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"f5c107a208a2781a7d7bc37d4785c2fab35d7897","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.1.1.tgz","fileCount":5,"integrity":"sha512-awATLpBKOK5RBw3EewwZ/2fpaevW1/8MDSEehOfI25ZQJvNHxuVT0prWjk1bnIECFAOa7jVVKTDQrOlGmVtbgw==","signatures":[{"sig":"MEUCIQC/ibM/ICRBkBHx7STYWkCakVFHlvoe9Jvsd8BhiZ1wSAIgJCs4tFh/Us0o1EPcLrTEw5sBvipraCK1wSCTHfqyVkg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7065},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"0731c7802f9f82986a8e5b603c3fe0e86200829e","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.1.1_1784397929074_0.00003717512722212213","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"lulu-ads","version":"0.2.0","license":"MIT","_id":"lulu-ads@0.2.0","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://github.com/Lulu-The-Narwhal/lulu-ads#readme","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"baec69b8f20d2328cc4e67078987b3e3e6dbb28d","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.2.0.tgz","fileCount":7,"integrity":"sha512-rTF+lGHXxROTHTmwmGFbm32e5K03GBZXv8rzcjr3zZJAs1PD0sKNQCueje++gjDH3E+uZudtTj5hrT8kuOxfTQ==","signatures":[{"sig":"MEUCIQDUBJHX+dfupMtRjyUtjrx/5fSyA8PnOSMz3bm4j8Ia1QIgNcFi4uwOHshWphSpGq70TJC0LmErusogvJ5WRjxnrvg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16716},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"9a2415104b2251b0ec803d1aed56d2335d5a8301","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.2.0_1784463443724_0.25116536994547545","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"lulu-ads","version":"0.2.1","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.2.1","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"ea1ba5f4311983ee77eb64a550da53d4eb3f22a2","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.2.1.tgz","fileCount":7,"integrity":"sha512-TMwuM/Z97IX+w1aW5yyvaQglLVkKYvodcWIc2A5aMEWdDnOvjFjV8qTUZsdWZw5LccRcZIDa5lC3M6pFqphLtw==","signatures":[{"sig":"MEUCIF8L55tQ3RYKLiV1trxsD7NK6vXn1Bwhso73Br3rqYvUAiEAp4ampo6F1OgTcUOQ7nAKnoygd1Uq2ltsqJoXhdYSVhY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17095},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"063a76c92b2a3e98ecad31ef0ee2dd1fb0499a59","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.2.1_1784475310475_0.3185585973050544","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"lulu-ads","version":"0.2.2","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.2.2","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"09313d82bd5eb34f23daec47be96ecc2adef87b4","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.2.2.tgz","fileCount":8,"integrity":"sha512-X41mqhyZNcuuo8srya3Y9LRcw6jJZacff0yo1VlcttHbByEo9VMKaOGKRKrRNUXJVLaV0PDLGFWV0ubSRJhLbA==","signatures":[{"sig":"MEUCIQDzxzT6p/mnk/pW9q0gsEqjKcY5AWzRjJG38jTelnA4vAIgNpnaca4k4qeEyg8+2326dL/ZrvvdBJ4hzmI/SATkI2U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27794},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"0839e16f2f0cef0f621a731cf1b0e75c9078b249","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.2.2_1784550335312_0.44133274655556476","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"lulu-ads","version":"0.2.3","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.2.3","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"009a5c55c0ed2824acaf029170ea4ed3e2cbf4da","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.2.3.tgz","fileCount":8,"integrity":"sha512-9qRlJ0uaY3zjBVxUTcUD1hurcrCvW3PII/rUQ1xBT7LmgHuD7uYmWVeimS3UuPzc6CUC/P9gGGWktTRftbGQww==","signatures":[{"sig":"MEQCIARgaMpiKLFM5v9DucOiXFmG6d2VNJZMkw6ClXk1JqO1AiBIUVe8D2jO348LAlkOVS/7nEK1BYw5zqm/YgK7jWpZzQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28010},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"fed4bf17a1a607e1e215b80fe5880e1468f064aa","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.2.3_1784568209226_0.6544312497401352","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"lulu-ads","version":"0.3.0","license":"MIT","_id":"lulu-ads@0.3.0","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://github.com/Lulu-The-Narwhal/lulu-ads#readme","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"f43abbb7904bf4eff1cda76dd252f46b4fc174e5","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.3.0.tgz","fileCount":7,"integrity":"sha512-+vSYv7t+xRNEoHSCIdJcXPjjUvwVqvogrf0bPny2a9YDchJ6FVW/oCgDJtDYESHx3tZYG5DopGXqgCnGNx1QGw==","signatures":[{"sig":"MEQCIGd28ZFolP2woUqkm03y9yFnhhNYRn43vGl+iJJVc8P/AiAht1xFrlm/swbcplMWFO+NHslwz7D0+Vd4X9Z36RUSzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20540},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"d2857d59d6844b9a20ab545e4381f889a140a599","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.3.0_1784584987225_0.4636082311755909","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"lulu-ads","version":"0.3.1","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.3.1","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"23ef90bfebb828681f75afa4f45d9f222ab42bc6","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.3.1.tgz","fileCount":8,"integrity":"sha512-MmT5qwKI8Q3nmI3iQkkzOBTkxc9ewFJzVZYQ08AAbBkm5ik2geykg8BQA8+cX/m0p/USMGAsF7eumgovMlX3rw==","signatures":[{"sig":"MEYCIQC3XV55na7/wziE2m9LbIT9wPXlbXLcbQ80y5BPI2Y97gIhALi/WgCNtuLX25XKPODmYXofVW2gruiwdlhskbBu33F+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37243},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"c682a1630eb6bd64682768cef973f5e50bdf85b3","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.3.1_1784589848544_0.717203962583568","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"lulu-ads","version":"0.3.2","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.3.2","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"ad6f718192d496cb93c37ad9c44ddf8f62a69eb6","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.3.2.tgz","fileCount":8,"integrity":"sha512-tk383QH/TR29fyRwWLKECK3Ps5231odUrl1OUDqbIw42Wb91/fZtfKtxlOHk4itPbttLMGiaq6lqFnznWxRSjg==","signatures":[{"sig":"MEUCIDHZ8CTBUJaMxlQjoerNHxsFUOtP6qkp538u4vPstSBKAiEArLpc/mO9XWd3qRhdBJGjO8fu3aVVycLgRiyvCiK03Ws=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38249},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"dc2fb3ae70d5fdab7bc7936cf7cd0e977b722e49","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.3.2_1784646159734_0.998719040896763","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"lulu-ads","version":"0.2.4","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.2.4","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"8865d8e47fdcfe7a655b63dc1737f042db7eabd8","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.2.4.tgz","fileCount":10,"integrity":"sha512-w1GmEalH4f69mVCQqnL9PUZCPVEvzvRlUvdUji+INgbIp7bEdxwTLeU+7TqEOQlIkXHJNFDX0/S6B0EhtqmTqw==","signatures":[{"sig":"MEYCIQC7zCHfSqDVD4xdxEevIdi3EICdDDV1vKwcl3xI3TOzgwIhAIZLJVF2+ScBOaEoTgpOaMLOqoe11CTlOfYBKHOO0fLo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32947},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"841cb78f86a6b41d93299526189ae406cdde6c86","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.2.4_1784646162807_0.2753172080947339","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"lulu-ads","version":"0.3.3","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.3.3","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"51b666f12b3eaaaa8a86e379933cea21939d879d","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.3.3.tgz","fileCount":10,"integrity":"sha512-MHnJd/fzZ1qzXS+SZ0p7O02dZ+pqPTAx0snCKEMo1mkjXH4Am7AtUJTKB6z80Y7xDxs8XadKCysXfCps6abqgg==","signatures":[{"sig":"MEUCIFTgXQyVKLQtlflGSLJdcA0JdTjt0VNASDdEj0YysjaWAiEAzDwroHRCYwM6nccN8z6Kpy79Ytl81Yz8/AeMXVX+ojk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43755},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"b7dd16f151f916fd2c2812a3d366c3547b54d185","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.3.3_1784646700297_0.7033554201203223","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"lulu-ads","version":"0.3.4","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.3.4","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"6bc097758ed4e725b860d830d10bb374597f014a","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.3.4.tgz","fileCount":10,"integrity":"sha512-1xPXMi/ABf+9RtSFdm0ZRBt9hIdjPA82mmpNwLxMo7xSW/MfGVXopM8FkZ757gGsMB08vleRsCnHBXpfu0Mx2w==","signatures":[{"sig":"MEYCIQCFyPG/1Zk3J043U4CtQlQPGEECwB5qh4YIvXY8Zgk5aAIhAOhTzZyevNR7iiSBkR8IkQ9FAvqnPoZAdgmat57Y/5P1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44954},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"526f488b65cac790b7320c0ebb2b45b5e0215e4c","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.3.4_1784647733748_0.6222687484596889","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"lulu-ads","version":"0.3.5","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.3.5","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"5dab38862de8b2b854464afe174a099b65fb8481","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.3.5.tgz","fileCount":10,"integrity":"sha512-bBYoIVmzxqicDWzZrm/3Kq0tNRn0YovM4CbvKKBaJ2zwGQL1HqD1K6d3Oopu9nB1KWQ1MXhVLpqQrDP/SKEtrQ==","signatures":[{"sig":"MEQCIFIyt+Rktwr1fcVnF7/UqJPdv7aaX/HkWhoEaiztPBM1AiA4IF1bllZ9uUsUkj9Fm4ufQw0LqupsMqPNhTC/DRzB0g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45799},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"c9aafda4acf086ab1678db157eff95f7843f36fa","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.3.5_1784647894960_0.2612521000823733","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"lulu-ads","version":"0.3.6","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.3.6","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"b5ad0f64a135f73bfa5939e4fa33f240bd6fe67e","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.3.6.tgz","fileCount":10,"integrity":"sha512-t/CJBWREw+ap6a7lgHTEueULS1Ebm2JwfaaqKBeY1yy9UzavqiyKPzs+IceTOjcMLCGTPrGe9LhfWqk2zfPO6w==","signatures":[{"sig":"MEYCIQDwtt32t+nXnLKFondkGhaj78wqANURo8/4cIvSfMjA4AIhAMKDZEHhJdMeA8pjGjQAge9bsSq3Vm2sanx1GbEGIst+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45799},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"5e6e952b60bf4007bd80f8c3979f6de453a700e8","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.3.6_1784648396211_0.0342695410099092","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"lulu-ads","version":"0.3.7","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.3.7","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"0fa1294e7633295edac144ebbf49caf55050c08d","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.3.7.tgz","fileCount":10,"integrity":"sha512-WEFfc2DqFmvBTnSUhGxa/HicZcRQzXG71b6Uq3GJ95W0xpnzO/VD9v2MoWw9b/LBX+tFbRVHSVd3KzFw2mv9nA==","signatures":[{"sig":"MEUCIQD5g/9/8I4fj2cD5N28APyeW1A1KRBvEwq7jaTSHYtluQIgVoClzQMKY8YgUElEk11wj3JjqIR8MFrmNIbKT84WfEo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50140},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"49b3b90d9241db32f4689919250f4f128f648ec5","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.3.7_1784649060925_0.28971068049804827","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"lulu-ads","version":"0.4.0","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.4.0","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"0de510333fe0a42315600a470d2ae1c489cc668d","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.4.0.tgz","fileCount":10,"integrity":"sha512-brZ2QTQtNBryWIcAs6W13RW1/yA5jOEWFzqfrlMERss+nH+Cu2snnohQeHiAxy7Lk8H5cfyw3TlCXO/6/LXUPQ==","signatures":[{"sig":"MEYCIQCiprTwUXIwlXRBAK3G9xoVg/kU2vBz5MN6YvErn+swmgIhAONLXkFdR10e08nTmP4BLhZxDKtQH4thyZewSxpDfw/X","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53439},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"0a67ac27c332972b7d8fe000cf5595c222474fb8","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.4.0_1784820526823_0.2727908279850202","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"lulu-ads","version":"0.5.0","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.5.0","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"8c0417028674c0f7a5293cccd5ad02abb8f7b878","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.5.0.tgz","fileCount":10,"integrity":"sha512-x+F85zrsw08gRFXnCbWS8+844on13RrRwwK4Qd5J5yFMk5skjfSN9wEa2ad5MmlZj9JgCQ20iafBD4asyGJu9w==","signatures":[{"sig":"MEQCIH6ZTFtN6i1ool7TzO3AR33ClnbcXuTK637+qBkBPVSlAiApGJAGNQtqBrj5/g6d5Hm8i6bxfBv01L2cqIn+F6EQGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54240},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"4984972f9b1d847922f78160539e7b39c6af612c","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.5.0_1784986141086_0.793421338885328","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"lulu-ads","version":"0.6.0","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.6.0","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"e9ef1bbaf422d07484d52e60d7101c1f30e6fa60","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.6.0.tgz","fileCount":10,"integrity":"sha512-WyVt4sue2CuRTXZ6L3A9JTLVW7D3jYaNyE+SPzS92KBk41FiuhByoUe4rTl9/Fs15Ep/LS09Skkle3oCp3+6fQ==","signatures":[{"sig":"MEUCIGvnK0TQfcJ7/BycyDFLytB1tyzV7u0wJ4/jHigH3CchAiEAy2abMCssl6/6IV0vJbXS5/+UXy9jZdbi0w3mwhHrIoE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57225},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"efd21dae830c72ac4b5d78296e0e0141e0ff9d35","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"deprecated":"Stale build published in error, contains pre-merge code. Use 0.6.1.","repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.6.0_1785071365605_0.9979575494377673","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"lulu-ads","version":"0.6.1","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.6.1","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"52b180c8248efef7c3656e2431d15bd8d1de32a1","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.6.1.tgz","fileCount":12,"integrity":"sha512-1qO84VJ+cUvZJdo0kxF43vCTehVbfrW7UTTspLwZn8fPFpwdHUrpGT1NHy94AYWrHmMbWneHoOUxuEQbwHPqfQ==","signatures":[{"sig":"MEQCIC/FrVTzZRU51z2HIOozYuRuuQIEezA5qugN4OcszV9mAiAQWu6Fzsx9EDU/1oCtSZDIVePLkW6+TzjYyAGPtL4AsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":324643},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"efd21dae830c72ac4b5d78296e0e0141e0ff9d35","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.9.4","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.6.1_1785071581225_0.7314178152146413","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"lulu-ads","version":"0.6.2","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.6.2","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"bf7a72ade867600c4727b19cf130451c71fa032c","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.6.2.tgz","fileCount":12,"integrity":"sha512-M2bfg5Gw57pCTJsrCdmoGDzhWHP5/+0X3C8fDkQwnmp1ENcd3izYjH8cHnRKxJFwdrck5LirO7sjSwPceVI22A==","signatures":[{"sig":"MEQCIG0ljxVtoYXVEIXYFBi8X6PdRSZyldZVeFoD9AsFA6u+AiAdvO7MbqYNyZrpwVddda0JlAVBak4nTinT7eHYaLhY5A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":326120},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"01c2e8ddaded72cea063eb69303c45abb3141d49","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.6.2_1785088105389_0.4488687336248449","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"lulu-ads","version":"0.7.0","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.7.0","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"43fbbf77d9e0c77eb90c00ddb18df28640e04613","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.7.0.tgz","fileCount":12,"integrity":"sha512-yZCbWZXyQcNEWyKOA5c7IjZIqMe5ewE3fsvYhTFravk707TsYM3ee8zhhantqbmuGpTACiZ1NR59D7ILNaO22w==","signatures":[{"sig":"MEYCIQDgv7z+SfzjWtT6SWcJeMpJ8e+8GuKPugJB60klQlwAKwIhALu/xJHyowODz/C+wRNHz8OVhiOYWiiavC9QRpisq88x","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":340356},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"46bab402dd5dc2dc792bae240a37bf5ca3134e80","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.7.0_1785136345574_0.95268215189292","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"lulu-ads","version":"0.7.1","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.7.1","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"c84b585a372c1b5c0b104b54382b6d81c7d292c6","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.7.1.tgz","fileCount":12,"integrity":"sha512-KUwYRTij6WT8T50l+m8UrhBgXBtRaPV0H7VqP/tB4nxYgLks5ZFtHliKjJjIjrniMU//lFFbbIqi89ciOnRE7w==","signatures":[{"sig":"MEUCIQCtpRodj+iMFnB0K87vSA7td24g7HX1Z6fIlwY2cKeO3gIgVveGM/t6uXvigZ3NRqalOlAfqZMn355x1MVD1f2fUrs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":340346},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"6000271f11a21fbb08d0c70e88aabfc0f1d20f3c","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.7.1_1785138324956_0.694182984956413","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"lulu-ads","version":"0.7.2","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.7.2","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"183048b9ab8d8534124742d41afda8c02b9c6388","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.7.2.tgz","fileCount":12,"integrity":"sha512-i5Kd2ud9LFYFw9GV5EhCDa+zOnlUPWAW3+AsRKZcnFwUXM/y8zxHRtGL6DE1WkYUQvh7MkD80ncUFUSy2nQxPA==","signatures":[{"sig":"MEUCIQCZuAMpuLmL9MxJ7v0l+RwjTq0ZCTSyY4QMu2pQQxT47wIgaTpugbjyo00dgsBr3vEj+7merNUWk7H9dEjCE7GGu1w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":340885},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"90e8f0d5efff329f59698e1d409af8ae490bc332","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.7.2_1785141175937_0.787973101367589","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"lulu-ads","version":"0.7.3","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.7.3","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"49823995cd0ce4d01805852ed3ed2bdac3653211","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.7.3.tgz","fileCount":12,"integrity":"sha512-0jKjosuIgvlGyz8b7bwVBtDc2eQntHnJJFJueuj7HnH6/6U5NijjDw9DzhHsHOR2d9IWrPgM4crf92DY3qzQ0g==","signatures":[{"sig":"MEQCICug/WcxoJr3rV5vo2m/mv8cueAKjipd5GXFCaUQ0cpvAiB0uTzGUXw4A9u94Z7cAzCSzby8ONOme1P4Yr7+R3d+cQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":342465},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"d4b57adf67fe30440c9687a3337b1485b03711c1","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.7.3_1785150518585_0.730765863388074","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"lulu-ads","version":"0.7.4","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.7.4","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"9ed8a3056403018585c9f545f9d85344e81373b6","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.7.4.tgz","fileCount":12,"integrity":"sha512-FOykGo2IXl1tZM46zycea/wo+Fbes5pYS3c6qtVth2nEq77AlzzspkqimivOkesQ6XLlRe6W8sbTN4m9GF4hxw==","signatures":[{"sig":"MEUCIQCfp6qtvVGfy4cthe1p/XOyAHuDFsSbTQNnPgUi4ChBswIgVWN9dMkT7a59kIFodLO3H4JOj7xrtfUZpD/S03+Tq28=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":343468},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"}},"gitHead":"d4b57adf67fe30440c9687a3337b1485b03711c1","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.7.4_1785239656571_0.8938677931111445","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"lulu-ads","version":"0.8.0","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.8.0","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"43c6899ec9e71ca8d81f792c70facd828a3f2380","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.8.0.tgz","fileCount":16,"integrity":"sha512-SM6zl2Kj79TEhADslsU7H6asIQ9d2tBmx3AIlOzTv1qgv0p00n8BIqfmNSbJDntza1MGhCZ/H+fTd5yhnt7nMg==","signatures":[{"sig":"MEUCIBLSvaBYI996OZvZt+CfaW9smCqFU22ZiEJDxYmwmxmbAiEArXNQLaQq3s+Pxtue6lrBKoAOHBirfI9DuoyY93U2z+c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":373560},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"}},"gitHead":"d6825c6401806b8b8c08da224874b2eb043d907c","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.8.0_1785318090380_0.7643935318451871","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"lulu-ads","version":"0.8.1","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.8.1","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"f0f9ab5cfd3c8d52e00901bfe507c2bc8445ec1d","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.8.1.tgz","fileCount":16,"integrity":"sha512-YNbqYEPf3OrZ/jp8Rucx+5tHxKzM4sWzxDLXoHqKbh7FiE6LMvyh5uU7Jm/mOZ8oIKfk55QosjlupquM1PnaBg==","signatures":[{"sig":"MEQCIAF9/jB3rieTMOnHMoJWWHfQ59FR7XGAdHnJefg+qiGOAiAquap0M+jCpcEbqqyWF2zCpOCtvul7q8jeSA4VVkbiIA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":375361},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"}},"gitHead":"d6825c6401806b8b8c08da224874b2eb043d907c","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.8.1_1785325470594_0.07471668217859806","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"lulu-ads","version":"0.8.2","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.8.2","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"1b6537f2aaa605b1f9f570466f5eaa9fb71d1f5c","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.8.2.tgz","fileCount":16,"integrity":"sha512-uchxH7UfWr+MV7g1oQc3+h7IpfimNEtHeTEdMlFu9nI7l47wNDKp6fuztZ/C6NnAKgRDf+XWuRoN+rBKf/pw9A==","signatures":[{"sig":"MEUCIQCARt3p7dhTP8bR1iNPFjMCzLbSfq9X50p+v+6aImXH+AIgHF+dMQWhtgeHJsi85ymBduJrvKAyyR2uFpmAgKnQZ+s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":376422},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"}},"gitHead":"f0e473cb340341bc34e0dbc494f5e9dc17c3c63e","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.8.2_1785429046086_0.7021074315993026","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"lulu-ads","version":"0.8.3","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.8.3","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"967ced6e58ecbdb8fe656c687555043943ea61a5","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.8.3.tgz","fileCount":16,"integrity":"sha512-fwqRNy4fuKmIMxgWM6hig7UUt56sVcfp4ZjXDgTW8tesBGRmTztgalTmTmjvd03zZoRspiokjCf3vZSBLZIQsw==","signatures":[{"sig":"MEUCIQCjwduySpb11w4DGKdS1TwzHIIVzMVZx/3TRki3vbjMOwIgS8p+uIeNe27/RZAGnHHMNwwsfsNMPMvdGmn19ygyGOs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":379146},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"}},"gitHead":"817875e742d3b091a8377463fecfb805160e0e4d","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.8.3_1785432906484_0.7304736934732898","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"lulu-ads","version":"0.8.4","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.8.4","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"57858da0ff52d24b988177738ed6114ab528f5ee","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.8.4.tgz","fileCount":16,"integrity":"sha512-+GqakKexv5Tv8AuHgS230n49pdCndVr05XBlDywFgEjL+f4CUlTRAh5OmEurqU0i2osJVIvyyg99mU7DZRvkSg==","signatures":[{"sig":"MEYCIQCZpiNc0Euo7tycVqzGT/UX7JUdmGKgaSpgeCkWpLyesQIhAKrWMi63tY2I1Uhg1dcdLuYtsmRqBZQ5N+RCyb7uwTra","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":379669},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"}},"gitHead":"fa97038955cf178cf090790ea7c06064053e4a30","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.8.4_1785434736623_0.8546110042457997","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"name":"lulu-ads","version":"0.8.5","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.8.5","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"e6affd0163977f8c4fe0c3912d50a661ca24f7fa","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.8.5.tgz","fileCount":16,"integrity":"sha512-aq6rKQnuovyqK/VgyubJ1ZrCnOMPVU9EUplexXeQaGfpv5ozi/Gvtc4816LKDp/798Zz+uHiH6bIru8yxSBQaA==","signatures":[{"sig":"MEUCIQCpwcWC39/Y5KAu6ho0lCcM0tuxJAxggxczgG4Qn0F4wwIgTe9zCRzxLBIiSlNy3EikByDzd9AfHjMUpTBFk/rC1vA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":381273},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"}},"gitHead":"d4a7e0bd38c38254f116436e9014a3861a28211c","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.8.5_1785449297993_0.7415626710941812","host":"s3://npm-registry-packages-npm-production"}},"0.8.6":{"name":"lulu-ads","version":"0.8.6","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw"],"license":"MIT","_id":"lulu-ads@0.8.6","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"2f1fa22f12564a0017677fb791187e5acdaefa70","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.8.6.tgz","fileCount":16,"integrity":"sha512-AbpyhotvzVh8klXarygOBPt/nYsBSIJZRwD7W0OXCxZtPNSc9mlUeO2EZvUfiiZrU60nlxHU5TuaKR55U/0zFQ==","signatures":[{"sig":"MEQCICWKSXUZX9WJFtr44g/YZ457MyhvwyyRNHrb5JpVjp9QAiApz6S5Thsrd/dtXxE27yGIX0RdC69L79XQ04/fwUxzEg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":382150},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"}},"gitHead":"44e47d5a3034eb9baa9e6eeed69ba6365704bd70","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.8.6_1786026775427_0.6987067144144024","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"lulu-ads","version":"0.9.0","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.0","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"2065fe12c484b36501648d390aababb40d43e22e","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.0.tgz","fileCount":18,"integrity":"sha512-VUOlCona+2I0wosyQ00ISl15sVPMdzPct5LDTXNGHCKP/quJuzUPDFzexwHcnHJPWtxrJlunDMWkep5AC/ThXQ==","signatures":[{"sig":"MEYCIQCMo6crmMLtuQju6O+EotsOYDncEXpc96PveCBAqV/K7QIhAL0FhXFvXetXNlXZVI7RA3Ara+eFbHuqyuzXBREm4LXu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":388625},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"1429517f53a17e1bc8fea5fe3d4d1d2154b6413f","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.0_1786632319374_0.08837855699534547","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"lulu-ads","version":"0.9.1","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.1","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"fef41ab5d42a87c652c50a3ab0dc495855b24baa","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.1.tgz","fileCount":18,"integrity":"sha512-Fb/MPweSpM7Ta2xLkD4czoGwXw/2u1CL5GH5gzpkt0pcpOX2GCAAhW9EKOTNWsh9dAsvF6kc8QUAs1wFhJ24qA==","signatures":[{"sig":"MEQCIETT3a6G4Tl5UZxlwHHEdemzlnZ+s5kwDAkQeZzvON2FAiBYWLT+hWW7F9k04T3R02X921+/9spO4w/Z/A0qKQAIqg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":390281},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"02f081469750503e0dd84177ef994da6aad53103","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.1_1787497226168_0.864419986539952","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"lulu-ads","version":"0.9.2","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.2","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"6edb42fe8f276a7774fe45e15be10133da8c9d6e","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.2.tgz","fileCount":18,"integrity":"sha512-WJtCZTLZ3ocigu1QYtTijNuyCYZb4dsRg7xkV5+PDQT+HWV1oN7OT43lpo3h2LX2BxAlXhpZtQlqg964u+ObNQ==","signatures":[{"sig":"MEQCIBtJEmvR0wo7ijnmUlNrrdy9QBTceHniCa8ZjIc9RlCpAiAadKZkZXQiaMbZwIHrtFNhXGfOtaKhcIhLOKAqBrmiaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":390919},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"fc4f9136d5f6104e7259af844ece6299d22fa124","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.2_1787656360886_0.027391512578824884","host":"s3://npm-registry-packages-npm-production"}},"0.9.4":{"name":"lulu-ads","version":"0.9.4","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.4","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"f56e8df53922ba245b61355c2d8606ff161740f5","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.4.tgz","fileCount":18,"integrity":"sha512-p2jOlZjcS7T6uaFdQgS4mnfqLrCsfev18LJQ5JSyrv+VVQB605Yel6+xSpYgHQQ5MAVDoTwEZsEPfzZrx70CmQ==","signatures":[{"sig":"MEUCIAf3QxANybYVHOlerbj1CX8o//WDEqxDOG1NR72xcEN6AiEAyLa72yGRaq97DJuhjUZAWOc6heAkItWJmQmp3TS8pNU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":397680},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"da8db3ced8eae61790119b451a7f14a83a4777e7","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.4_1787671560707_0.9063503751365454","host":"s3://npm-registry-packages-npm-production"}},"0.9.5":{"name":"lulu-ads","version":"0.9.5","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.5","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"074cacf90f24d9c45d83c323076c8006c3d757a7","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.5.tgz","fileCount":18,"integrity":"sha512-LrhKkTekeY3YnqtP4Qb3prxREaHDbzZM3TLXBGojy9HlBw/BpA2iSYT1w1ErQGniMeMu/TbbbYei4FN5OZeB7w==","signatures":[{"sig":"MEUCIQCn9KyD5zZoeErYT4zafY4juNJ/UnBMs76gdylRPgf8NAIgPABtUUIeO3B/yzIjIdkRzOGyjlbqV2sTHP9XnOzzWHo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":398979},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"6e296132d1b0c13b42ab441dddeefe7557f63a77","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.5_1787747493602_0.9193629512701351","host":"s3://npm-registry-packages-npm-production"}},"0.9.6":{"name":"lulu-ads","version":"0.9.6","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.6","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"424566daf41ce7e4a0a20a63990277aea748a695","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.6.tgz","fileCount":18,"integrity":"sha512-5MFK0z35FhlkgzvEtuwcoXNyGz8Omhr4HBxozLtczcc7iXWRvkc/MLg8HNfvpy8Mq9VQvFBmtAWVCMN4LmZBrg==","signatures":[{"sig":"MEUCIQCR/Wsz+JNgyL895DT6CzLxmFMHCA5q9oNW5VDIpoEPZAIgCSLbvhFShQEVPEF1ru57NYA+SBwLfJuRWLUUfk2fyGM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":402371},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"9f3f140dd73750f96b086d7179aff84a96b78873","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.6_1788100272719_0.022495962822064897","host":"s3://npm-registry-packages-npm-production"}},"0.9.8":{"name":"lulu-ads","version":"0.9.8","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.8","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"1d427d14dcd0815696c5eba88188f4f5996d2adb","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.8.tgz","fileCount":18,"integrity":"sha512-iVNKe1SxLAanI5mwj4tijhmttk7g+v+KH4Big8mDGVuWhDzHRKLmeM4y/WX4LMDtZIKptZPhG75E7NaL3CdCFw==","signatures":[{"sig":"MEUCICL6pF+j1hlIWVmrmfI+VRZhyG6SFCl+4aoEMQayZR9tAiEAoCRaOJcqfaKkFEbn6/ixfUJRiORRFe03gMUNjOfBjjY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":403509},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"9f3f140dd73750f96b086d7179aff84a96b78873","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.9.3","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.8_1788705062994_0.685006833205327","host":"s3://npm-registry-packages-npm-production"}},"0.9.9":{"name":"lulu-ads","version":"0.9.9","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.9","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"e9c43b74ff60719b1a0b0497b900305b5fc6a16b","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.9.tgz","fileCount":18,"integrity":"sha512-a+Ry6B0ljOFPi1WryuAp3IxdBqI6X5BhnAQkoqAmNpDEhvVqz7NKgu498vd1XZyOuHK+YrYHGZnjtOsFvaKB+Q==","signatures":[{"sig":"MEUCIDyHAMG/wxPivJljVtrVNDc7iddfpDL8+TYU2p+Dc3xUAiEAwhj0H6xzmeNey/hpzpi47SJTTLV5JwTwjniq3lBUdFI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":410140},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"e54df613535f65cc9fcc68aaf4d25942ea80e5ee","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.9.3","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.9_1788706507598_0.5006292035231807","host":"s3://npm-registry-packages-npm-production"}},"0.9.10":{"name":"lulu-ads","version":"0.9.10","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.10","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"22fcba2d5dc623cecec5a4aa62b4f1dde4da5c90","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.10.tgz","fileCount":18,"integrity":"sha512-/6tMnXx4P1sLFLSfeFjf+4qBJMp7Xqlh3bQ+sNYKUXc43O6yhlGnCRwECJSrny69SPc1Yu1ImSRan4x7mKj+GA==","signatures":[{"sig":"MEQCIHjB7aoqOUqMQJ+OANDlk5lN/whAAtG3wD/+WDCz65NMAiBfG8e+FO3h35M0OXupMeJD+/wGpl47MBjD0CLLi/wrFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":423683},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"1c8aaefbf4e8853c47cc9766600de71176f5e848","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.9.3","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.10_1788707617519_0.3749271517804056","host":"s3://npm-registry-packages-npm-production"}},"0.9.11":{"name":"lulu-ads","version":"0.9.11","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.11","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"4d6276b340b5746ee8c5828b2d687ad75f6fd94f","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.11.tgz","fileCount":18,"integrity":"sha512-YBKpLPzrZg1QqiI89ZV9zwl8tUCmzVYzypHm66E6DX/hq0UscN8Rt3JDD4aMAGdr+YSLfvFbijbROnmAm+jiTQ==","signatures":[{"sig":"MEUCIQDxi91pEzDbCzI8nbg1pJpuIbmBJfgaLkqmGTKNfIi+pAIgO/wBbS+IrbaOHqRZyHezvOLzYNZUbi6QGrU+7jio5dk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":439341},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"fa85840e022fdca18f30d80f8865e2a7cc7a47aa","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.9.3","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.11_1788715233430_0.8849706174112566","host":"s3://npm-registry-packages-npm-production"}},"0.9.12":{"name":"lulu-ads","version":"0.9.12","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.12","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"d2e513409f5d813638828ac68dabf2a6b392eb56","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.12.tgz","fileCount":18,"integrity":"sha512-678+mmjuS07S1AZkAM6sTJ5yuqardAQ/luIG3p/hrI2ZVzke8uWuV1QumeoPaNGOIeP30OBJuhjePNta8oibMA==","signatures":[{"sig":"MEUCIQC45ESPv7yQYgvTQbfDn6T6FHNKtZ1cAPPNy134m+BP5AIgQp7Vgyw1i1efHJhNVbP6cJJtl2Jg6WBk/qt9GAcpvBU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":452126},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"f65fc95e46950ad3ca5b9376249f2c86417839e0","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.9.3","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.12_1788723599412_0.9822337294499892","host":"s3://npm-registry-packages-npm-production"}},"0.9.13":{"name":"lulu-ads","version":"0.9.13","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.13","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"dda7dae21c90362b5ed2aac96b723bb68394a87c","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.13.tgz","fileCount":18,"integrity":"sha512-Bf6TLKOuYoBH0nHQaeUsyDfBZtjQTeHohTdBPmRJ2JHfGMTHfugRW58scBH722M3+AzbQgr4FTI8BOFeSV0ULw==","signatures":[{"sig":"MEYCIQCemkj95qoFF4uMIeNLdwMrsn7mhwAbOF/BJCst7og2TwIhAPN4jgW5nVFyJ+Xk7EBbg84YrLae1ls5dONi7k07cHu7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":455147},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"ecb30e11e356f5fa1a75416a38636ac90d68e7d5","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.9.3","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.13_1788725182109_0.799731345613889","host":"s3://npm-registry-packages-npm-production"}},"0.9.14":{"name":"lulu-ads","version":"0.9.14","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.14","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"ebc75f9db5ceed38a824932f6672e603cb2de8a1","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.14.tgz","fileCount":18,"integrity":"sha512-EslDn4JjzsxS9UbsrEOVzljH3+GfXxsDjm2KjvqTRaRYW/Dr9yPA4u17nzIrFvznFgpeKBvZ6wnRUd7yUBdPhQ==","signatures":[{"sig":"MEUCIGLL0keX0pzcCItkN4+I/wfpf7fkIpzXHDpB8RRN8G3oAiEAkimhX60CF/e0pvSfNqM4v0t+BdbX4FqTDQJ1ktwmstM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":456746},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.14_1788865404718_0.9435605253279238","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"lulu-ads","version":"2.0.1","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@2.0.1","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"f30e8fe8397dd12322a5cb13d6ab5b633ad4a33f","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-2.0.1.tgz","fileCount":18,"integrity":"sha512-2g7c/1aOaNsjw9zsexGLoqaCbbKP2BMgJX8aYKCRo5yBI2S/p3nuLMbQfOOhw36LpeUw/2DhxRx8nhn3+RwmvQ==","signatures":[{"sig":"MEUCIQC87J6hbHrpgxAE2eckjNQ1fVeO2PWiQ9d9piwGhLcglAIgbyHgibdSyZaywHDVgCIMu7ZAMUoqQXAhS68+8jMSqjM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDY4IQ8X0li+jhF8NZBwafqv06QDVUQLjHtMDaO0g/ZNgIgCWTjuj/v0UbULHC7bYyzF8cQIav01NDuSq3SrNlaMuw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":460186},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"5bc5ebda8268fbd1bf8413b8a586614392631760","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_2.0.1_1789988925618_0.10379999271743112","host":"s3://npm-registry-packages-npm-production"}},"0.9.16":{"name":"lulu-ads","version":"0.9.16","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.16","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"df3c5f923020336d1ec45386676ad2b4b3f030be","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.16.tgz","fileCount":18,"integrity":"sha512-jfT828/0O5WdbBGzptOiaJ1mEFq3/k2hS4hNSSiUd53WIDEyS55Y3OZ3JMIuIjrMC/mlyA+Dbcmq5EE4/GMMIA==","signatures":[{"sig":"MEUCIQDNIzj/S6rnpdJLJSXcHkGay0u7bjXBjRZync9yp9J77AIgbF5nHvx5bYNcw4RVbhVKOo43x5bdTNdrW/RE4BFGjWw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIB60dcwSjwbV3yvj24cFur0QlR0gEl/QC6B5zCxeNk29AiBtxly21CJHVSkivOfToCGC+ELZtfuDQIAebwlwGy3PxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":460187},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.16_1789998743073_0.9503566511811066","host":"s3://npm-registry-packages-npm-production"}},"0.9.17":{"name":"lulu-ads","version":"0.9.17","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.17","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"05bbdfaa8c22c4a7bade134de84a8df75df5fb58","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.17.tgz","fileCount":18,"integrity":"sha512-b9vOFT58k5T4Zmz2cYdeXqbigVBH9ZIsMgslNv5bUEqAlBeH788IWkLkST58Zx71GjIauoGFzueqjL7cEtCcNg==","signatures":[{"sig":"MEUCIFjNl0hrI3EXTQ1+vh96HwCR0ppeb9X1L4ps3Nnvceq+AiEA+Bqm1/mfQVM3KEvFWPdZbv+y3KALnKXdsEs69Dah1GY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD04ng79tC/Eu3rFHDba1/eMNWikyZ7L+K//oLICKaW4wIgF1rlOrjdHEwWzmcMbG6APDxlQl9pls9chOsDtCYYnLk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":464347},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"27fb8b968ca6c8364264142c0e0122aa637a9cf3","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.0 || ^2.0.0","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.17_1789999528216_0.5658670769867986","host":"s3://npm-registry-packages-npm-production"}},"0.9.18":{"name":"lulu-ads","version":"0.9.18","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"license":"MIT","_id":"lulu-ads@0.9.18","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"homepage":"https://getlulu.dev","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"5af8902f2af95af38d6a09642d57090d9436eac4","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.18.tgz","fileCount":18,"integrity":"sha512-Lk8Iqqz1I55/4LyKx67EVLH6vurldAa8CFKH4JX3aGz9KPjaVf2cCnBvcdc7TJRLXBL2YHZDjPbK/L/Yl/O7gw==","signatures":[{"sig":"MEYCIQCr+H0aB5b5qqb+vJryOxltR8A7gxxoT1UUYyFCA8LsjwIhAPSFO2CKc20ScvpPkX3+kLxchvMNV/R44OPF1PDUOeoP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDQmfl83T3u9urPsVmoz+XHWqfLp+3CcqToMVA4pCNJkAIgRl0+dlg+9R+o+M9BLqzk67WAnGT7W+mhPa3Run914UI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":466258},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"1433214e2d95435ea033f9d93bb8e1b09d0d9778","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && cp ../README.md ./README.md"},"_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.1","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/lulu-ads_0.9.18_1789999911239_0.3953210613775058","host":"s3://npm-registry-packages-npm-production"}},"0.9.19":{"_id":"lulu-ads@0.9.19","bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"dist":{"shasum":"6d3b70f5681c6b74f9372303b36dbb5f96e2bb95","tarball":"https://registry.npmjs.org/lulu-ads/-/lulu-ads-0.9.19.tgz","fileCount":18,"integrity":"sha512-B1XnjGvSB3MLLNk9oj/Wucd3UcUzuJ6eJZuBDP42uy2rJNYrR+rle0qfQlw9xGGK+rpspOrsmsMG2XkU3jHjeg==","signatures":[{"sig":"MEYCIQDLbl8BYBmMwJPBaiD6xA+Bi/lX/73xQdtqSIZFhHAaBAIhAMWVWxDjMxy7NGyVBViMjb2W42JsuW7e/12sl8cloWOa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCZxHiz5pNUF0lCExaSTzqjX5nkJV/8J3t6qLE8MTPdzgIgLknP1ju7EgP5krRL5fr9SmdjXbKwYS/fDZVQELtEbS8="}],"unpackedSize":471046},"main":"dist/index.js","name":"lulu-ads","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./widget":{"types":"./dist/widget.d.ts","import":"./dist/widget.js"},"./widgets":{"types":"./dist/widgets.d.ts","import":"./dist/widgets.js"},"./skybridge":{"types":"./dist/skybridge.d.ts","import":"./dist/skybridge.js"}},"gitHead":"2e146759d4e05f4dc5f1e59ecfe93a6997932560","license":"MIT","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && ../scripts/sync-readmes.sh"},"version":"0.9.19","_npmUser":{"name":"talmogendorff","email":"tal@getlulu.dev"},"homepage":"https://getlulu.dev","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"_npmVersion":"10.5.1","description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","directories":{},"maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"_nodeVersion":"22.0.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.0.0","skybridge":"^1.4.1","typescript":"^5.5.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lulu-ads_0.9.19_1790061659068_0.04056758756630208"}}},"time":{"created":"2026-07-14T22:36:49.792Z","modified":"2026-09-22T07:20:59.362Z","0.1.0":"2026-07-14T22:36:50.082Z","0.1.1":"2026-07-18T18:05:29.227Z","0.2.0":"2026-07-19T12:17:23.860Z","0.2.1":"2026-07-19T15:35:10.617Z","0.2.2":"2026-07-20T12:25:35.457Z","0.2.3":"2026-07-20T17:23:29.370Z","0.3.0":"2026-07-20T22:03:07.357Z","0.3.1":"2026-07-20T23:24:08.712Z","0.3.2":"2026-07-21T15:02:39.878Z","0.2.4":"2026-07-21T15:02:42.982Z","0.3.3":"2026-07-21T15:11:40.426Z","0.3.4":"2026-07-21T15:28:53.883Z","0.3.5":"2026-07-21T15:31:35.097Z","0.3.6":"2026-07-21T15:39:56.353Z","0.3.7":"2026-07-21T15:51:01.140Z","0.4.0":"2026-07-23T15:28:46.962Z","0.5.0":"2026-07-25T13:29:01.251Z","0.6.0":"2026-07-26T13:09:25.791Z","0.6.1":"2026-07-26T13:13:01.384Z","0.6.2":"2026-07-26T17:48:25.538Z","0.7.0":"2026-07-27T07:12:25.730Z","0.7.1":"2026-07-27T07:45:25.100Z","0.7.2":"2026-07-27T08:32:56.105Z","0.7.3":"2026-07-27T11:08:38.757Z","0.7.4":"2026-07-28T11:54:16.712Z","0.8.0":"2026-07-29T09:41:30.550Z","0.8.1":"2026-07-29T11:44:30.762Z","0.8.2":"2026-07-30T16:30:46.233Z","0.8.3":"2026-07-30T17:35:06.664Z","0.8.4":"2026-07-30T18:05:36.795Z","0.8.5":"2026-07-30T22:08:18.128Z","0.8.6":"2026-08-06T14:32:55.561Z","0.9.0":"2026-08-13T14:45:19.527Z","0.9.1":"2026-08-23T15:00:26.314Z","0.9.2":"2026-08-25T11:12:41.044Z","0.9.4":"2026-08-25T15:26:00.856Z","0.9.5":"2026-08-26T12:31:33.770Z","0.9.6":"2026-08-30T14:31:12.884Z","0.9.8":"2026-09-06T14:31:03.199Z","0.9.9":"2026-09-06T14:55:07.742Z","0.9.10":"2026-09-06T15:13:37.664Z","0.9.11":"2026-09-06T17:20:33.614Z","0.9.12":"2026-09-06T19:39:59.555Z","0.9.13":"2026-09-06T20:06:22.286Z","0.9.14":"2026-09-08T11:03:24.868Z","2.0.1":"2026-09-21T11:08:45.757Z","0.9.16":"2026-09-21T13:52:23.178Z","0.9.17":"2026-09-21T14:05:28.331Z","0.9.18":"2026-09-21T14:11:51.360Z","0.9.19":"2026-09-22T07:20:59.169Z"},"bugs":{"url":"https://github.com/Lulu-The-Narwhal/lulu-ads/issues"},"license":"MIT","homepage":"https://getlulu.dev","keywords":["mcp","model-context-protocol","ai-agents","llm-agents","agent-economy","monetization","ads","advertising","sponsored","claude","fastmcp","langchain","crewai","openclaw","skybridge"],"repository":{"url":"git+https://github.com/Lulu-The-Narwhal/lulu-ads.git","type":"git"},"description":"Disclosed sponsored slots for MCP servers and AI agent tools. Ships data, never directives. Fail-open by design.","maintainers":[{"name":"talmogendorff","email":"tal@getlulu.dev"}],"readme":"<div align=\"center\">\n\n# lulu-ads\n\n### *The monetization layer for the agent economy.*\n\n**Monetize your MCP server or agent tool with one labeled sponsored line.**\n\n[![PyPI](https://img.shields.io/pypi/v/lulu-ads.svg)](https://pypi.org/project/lulu-ads/)\n[![npm](https://img.shields.io/npm/v/lulu-ads.svg)](https://www.npmjs.com/package/lulu-ads)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![Backend](https://img.shields.io/badge/backend-live-brightgreen)](https://ads.getlulu.dev/health)\n[![Publisher beta](https://img.shields.io/badge/publisher_beta-open-E07A00)](https://getlulu.dev/publishers)\n[![Rev share](https://img.shields.io/badge/rev_share-70%25-blueviolet)](docs/contract.md)\n[![Lulu MCPs](https://getlulu.dev/api/mcps/badge/lulu-ads)](https://getlulu.dev/mcps/lulu-ads)\n\n[Quickstart](#quickstart) · [Integrations](#framework-integrations) · [Supported hosts](#supported-hosts) · [Supported surfaces](docs/supported-surfaces.md) · [stdio servers](#stdio-servers) · [Guarantees](#guarantees-enforced-in-code-not-just-promised) · [API contract](docs/contract.md) · [Hosted docs](https://getlulu.dev/docs) · [Blog](https://getlulu.dev/blog) · [Become a publisher](https://getlulu.dev/publishers)\n\n<img src=\"https://raw.githubusercontent.com/Lulu-The-Narwhal/lulu-ads/master/assets/lulu-ads-hero.jpg\" alt=\"Lulu, the Lulu Ads narwhal mascot, celebrating on a Tel Aviv billboard — the agent economy has a monetization layer now\" width=\"640\" />\n\n`70% to publishers · CPA only · 800ms fail-open · 0 prompt injections, by design`\n\n[![Sponsored](https://getlulu.dev/api/mcps/sponsor/lulu-ads)](https://getlulu.dev/api/mcps/sponsor-click/lulu-ads)\n<br><sub>↑ live rendered sponsor card — real rotating ad demand, refreshes every ~60s. Any claimed listing can embed this in its own README.</sub>\n\n</div>\n\nLulu Ads attaches a disclosed, labeled data field to your tool's own result.\nThe host model — Claude, Cursor, any agent — decides on its own judgment\nwhether it's relevant enough to surface. We never instruct it to.\n\n<table>\n<tr>\n<th>What the SDK ships (a data field)</th>\n<th>What the host renders (its choice)</th>\n</tr>\n<tr>\n<td>\n\n```json\n{\n  \"sponsored\": {\n    \"label\": \"Sponsored\",\n    \"text\": \"Direct flights TLV–BKK from $412\",\n    \"url\": \"https://ads.getlulu.dev/c/9f2a1c\"\n  }\n}\n```\n\n</td>\n<td>\n\n> **Sponsored** — Direct flights TLV–BKK from $412\n> [ads.getlulu.dev/c/9f2a1c](https://ads.getlulu.dev/c/9f2a1c)\n\n</td>\n</tr>\n</table>\n\nZero-friction start — add the MCP server and let your agent do the rest:\n\n```bash\nclaude mcp add --transport http lulu-ads https://ads.getlulu.dev/mcp\n```\n\n> monetize my server\n\nIt'll fetch the right integration guide for your stack, register a publisher\n(with your consent), wire up the one-liner, and verify a slot went live.\n\n**If it renders and gets clicked, you earn 70% on CPA. If it doesn't — nobody\npays, nothing breaks.**\n\n**No prompt injection — we ship a data field; the host decides.**\n\n## Quickstart\n\n**Python**\n\n```bash\npip install lulu-ads\n# or: uv add lulu-ads\n# or: poetry add lulu-ads\n```\n\n```python\nfrom lulu_ads import LuluAds\nads = LuluAds(publisher_id=\"pub_123\", api_key=\"lk_...\")\n\nresult = search_flights(\"TLV\", \"BKK\", dates)\nresult[\"sponsored\"] = await ads.sponsored_slot(\n    context={\"tool\": \"search_flights\", \"category\": \"travel.flights\"},\n)\nreturn result\n```\n\nFastMCP servers get it in one call — credentials come from the environment,\nand every tool (present and future) gets both the plain `sponsored` data\nfield AND, in hosts that support it (e.g. Claude.ai), the rendered\nSponsored-card widget, automatically:\n\n```bash\nexport LULU_ADS_PUBLISHER_ID=pub_123\nexport LULU_ADS_API_KEY=lk_...\n```\n\n```python\nfrom lulu_ads.enable import enable_lulu_ads\n\nenable_lulu_ads(mcp, endpoint_url=\"https://my-server.example.com/mcp\")\n```\n\nJust want the data field, no widget? The plain middleware still works on\nits own:\n\n```python\nmcp.add_middleware(LuluAdsMiddleware())\n```\n\n**TypeScript**\n\n```bash\nnpm install lulu-ads\n# or: pnpm add lulu-ads\n# or: yarn add lulu-ads\n# or: bun add lulu-ads\n```\n\n```ts\nimport { LuluAds } from \"lulu-ads\";\nconst ads = new LuluAds({ publisherId: \"pub_123\", apiKey: \"lk_...\" });\nresult.sponsored = await ads.sponsoredSlot({ context: { tool: \"search_flights\" } });\n```\n\nMCP servers built on the official TS SDK get the same one-call treatment —\ndata field AND widget on every tool, automatically:\n\n```ts\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { enableLuluAds } from \"lulu-ads/mcp\";\n\nconst server = new McpServer({ name: \"my-server\", version: \"1.0.0\" });\nawait enableLuluAds(server, { endpointUrl: \"https://my-server.example.com/mcp\" });\n```\n\nNo publisher ID yet? See [`docs/quickstart.md`](docs/quickstart.md) — three\nways to get one, none of them gated on the others.\n\n**Tiered pricing (ads on a free tier, ad-free on paid)?** Pass `enabled` —\nyour own subscription check decides the value, no separate deployment or\nscattered conditionals needed:\n\n```python\nresult[\"sponsored\"] = await ads.sponsored_slot(\n    context={\"tool\": \"search_flights\"},\n    enabled=user.tier != \"paid\",  # False resolves instantly, no network call\n)\n```\n\n```ts\nresult.sponsored = await ads.sponsoredSlot({\n  context: { tool: \"search_flights\" },\n  enabled: user.tier !== \"paid\",\n});\n```\n\n## Framework integrations\n\n| Stack | One-liner | Docs |\n|---|---|---|\n| FastMCP (Python), data + widget | `enable_lulu_ads(mcp, endpoint_url=...)` | [→](docs/integrations.md#fastmcp-python) |\n| FastMCP (Python), data only | `mcp.add_middleware(LuluAdsMiddleware())` | [→](docs/integrations.md#fastmcp-python) |\n| MCP TS SDK, data + widget | `await enableLuluAds(server, { endpointUrl })` | [→](docs/integrations.md#mcp-servers-typescript) |\n| LangChain / LangGraph (Python) | `middleware=[LuluAdsAgentMiddleware()]` | [→](docs/integrations.md#langchain--langgraph-python) |\n| CrewAI (Python) | `lulu_crewai.install()` | [→](docs/integrations.md#crewai-python) |\n| MCP TS SDK, data only | `withLuluAds(server)` | [→](docs/integrations.md#mcp-servers-typescript) |\n| Skybridge (TypeScript) | `withLuluAdsSkybridge(server)` | [→](docs/integrations.md#skybridge-typescript) |\n| Runtime owners (chat bots, WhatsApp/Telegram agents) | `model_output + format_suffix(sponsored)` | [→](docs/integrations.md#runtime-owners-response-suffix) |\n| Any other runtime / language | `sponsored_slot(context)` over the raw contract | [→](docs/integrations.md#any-agent-runtime) |\n\n## Result widgets — templates for your OWN tool output (0.8.5)\n\n**One widget, every host.** The frame speaks three bridges — stable MCP\nApps (`ui/initialize`, 2026-01-26), the draft-era fallback, and ChatGPT's\n`window.openai` — and the SDK registers both template keys\n(`_meta.ui.resourceUri` + `openai/outputTemplate`) and both CSP dialects\nautomatically. Verified rendering live on claude.ai and ChatGPT, including\nthe rendered-impression beacon (impressions count what a human actually\nsaw, never mere API output). After upgrading, refresh your connector in\nChatGPT's plugin settings — it caches tool metadata.\n\n**The SPONSORED strip's own format is separately configurable** via\n`sponsor_template=` (independent of `template=`, this widget's own body\nlayout):\n\n```python\nregister_result_widget(\n    mcp, \"search_flights\",\n    template=\"table-card\",\n    mapping={\"rows\": \"flights\", \"columns\": [...]},\n    endpoint_url=\"https://my-server.example.com/mcp\",\n    sponsor_template=\"flip-card\",  # or \"carousel\", \"scratch-reveal\" -- \"card\" is the default\n)\n```\n\n## Supported hosts\n\nThe plain `sponsored` JSON field is the always-on baseline: it ships on\nevery tool result, on every MCP host, because it's nothing more than an\nextra key on a dict — no host-specific support is required for it to work,\nand the model decides on its own whether to surface it. The **rendered**\nMCP Apps widget above that is additive, and only paints where a host has\nactually implemented the `ui/initialize` handshake. This table says exactly\nwhich is which per host, based on our own production verification where we\nhave it and a fresh survey (2026-08-25) everywhere else — a host only gets\na \"Live\" widget status here when we've confirmed it ourselves or the\nvendor has published concrete, checkable implementation detail, never on a\ngeneric \"should work\" assumption.\n\n<p>\n<a href=\"https://claude.ai\"><img src=\"https://raw.githubusercontent.com/Lulu-The-Narwhal/lulu-ads/master/assets/hosts/claude.svg\" alt=\"Claude\" height=\"24\"></a>\n&nbsp;\n<a href=\"https://chatgpt.com\"><img src=\"https://raw.githubusercontent.com/Lulu-The-Narwhal/lulu-ads/master/assets/hosts/openai.png\" alt=\"ChatGPT\" height=\"24\"></a>\n&nbsp;\n<a href=\"https://www.copilotkit.ai\"><img src=\"https://raw.githubusercontent.com/Lulu-The-Narwhal/lulu-ads/master/assets/hosts/copilotkit.png\" alt=\"CopilotKit\" height=\"24\"></a>\n&nbsp;\n<a href=\"https://code.visualstudio.com\"><img src=\"https://raw.githubusercontent.com/Lulu-The-Narwhal/lulu-ads/master/assets/hosts/vscode.png\" alt=\"VS Code\" height=\"24\"></a>\n&nbsp;\n<a href=\"https://cursor.com\"><img src=\"https://raw.githubusercontent.com/Lulu-The-Narwhal/lulu-ads/master/assets/hosts/cursor.svg\" alt=\"Cursor\" height=\"24\"></a>\n&nbsp;\n<a href=\"https://github.com/aaif-goose/goose\"><img src=\"https://raw.githubusercontent.com/Lulu-The-Narwhal/lulu-ads/master/assets/hosts/goose.png\" alt=\"Goose\" height=\"24\"></a>\n&nbsp;\n<a href=\"https://grok.com\"><img src=\"https://raw.githubusercontent.com/Lulu-The-Narwhal/lulu-ads/master/assets/hosts/xai-grok.png\" alt=\"Grok (xAI)\" height=\"24\"></a>\n&nbsp;\n<a href=\"https://windsurf.com\"><img src=\"https://raw.githubusercontent.com/Lulu-The-Narwhal/lulu-ads/master/assets/hosts/windsurf.svg\" alt=\"Windsurf\" height=\"24\"></a>\n&nbsp;\n<a href=\"https://cline.bot\"><img src=\"https://raw.githubusercontent.com/Lulu-The-Narwhal/lulu-ads/master/assets/hosts/cline.svg\" alt=\"Cline\" height=\"24\"></a>\n&nbsp;\n<a href=\"https://zed.dev\"><img src=\"https://raw.githubusercontent.com/Lulu-The-Narwhal/lulu-ads/master/assets/hosts/zedindustries.svg\" alt=\"Zed\" height=\"24\"></a>\n</p>\n\n<sub>Hosts we've looked at — logos are not a support claim on their own;\nread the Status column below for what each one actually does. (Continue.dev\nis in the table but not the strip above: it's a discontinued product, kept\nhere only for completeness.)</sub>\n\n| Host | MCP tool-calling | Rendered widget | Status |\n|---|---|---|---|\n| Claude (claude.ai) | Yes | Yes | Live, verified in production — real rendered-impression beacons observed on live traffic. |\n| ChatGPT | Yes | Yes | Live, verified in production. |\n| CopilotKit (`@ag-ui/mcp-apps-middleware`) | Yes | In progress | Fix in review, [PR #8](https://github.com/Lulu-The-Narwhal/lulu-ads/pull/8), unverified end-to-end — a tool-discovery bug was found and fixed, but the fix has not been tested against a full chat UI (no LLM available in that pass) and is not yet released to npm/PyPI. Do not treat CopilotKit as supported until that PR lands and is verified live. The plain `sponsored` field is unaffected by this bug and already flows today. |\n| VS Code (native MCP + GitHub Copilot Chat agent mode) | Yes | Reported live | Microsoft's own 2026-01-26 blog post and current docs describe VS Code as \"the first major AI code editor with full MCP Apps support\" and document concrete, checkable implementation detail (sandboxed iframes, CSP domain config, the `ui/initialize` handshake, the App SDK) — credible, but this is a vendor claim we have not independently reproduced ourselves. Plain MCP tool-calling (Copilot Chat agent mode) has been GA since v1.102. |\n| Cursor | Yes | Reported, unverified | Named as an MCP Apps implementer on the upstream [modelcontextprotocol.io Extension Support Matrix](https://modelcontextprotocol.io/extensions/client-matrix) — a third-party listing, not Cursor's own docs, so weaker evidence than VS Code/Goose's vendor-published detail above. We actually tried to verify this ourselves live (2026-08-25) and got blocked before reaching the test: Cursor's free-tier Agent usage cap (2 prompts) hit before a real tool call went through. Real attempt, real blocker, still unconfirmed — not a claim we're dodging. |\n| Goose (Block / AAIF) | Yes | Live (experimental) | Goose's own docs confirm the `ui/initialize` handshake and sandboxed-iframe rendering (Goose Desktop 1.19.1+), but explicitly flag it as \"experimental and based on a draft specification; the implementation is minimal and may change.\" Treat as live-but-unstable, not a guaranteed render target. |\n| Grok (xAI) — grok.com connectors, Grok Build CLI, xAI API Remote MCP Tools | Yes | No evidence found | MCP-capable across all three xAI surfaces (plain tool discovery + calling), but no official doc, changelog, or third-party host-support matrix credits Grok with the MCP Apps UI extension as of this survey. The sponsored data field still flows and still renders purely on the model's own judgment via the always-on JSON fallback — the rich widget just has nothing to render into. |\n| Windsurf (Codeium) | Yes | No evidence found | Windsurf's own docs state it supports \"an MCP server's tools, resources, and prompts\" only; every third-party MCP Apps host-support list we found omits it. Sponsored data field still works via the always-on JSON fallback. |\n| Cline (VS Code extension) | Yes | No evidence found | Mature MCP client (tools, resources, prompts, a built-in MCP marketplace); no `ui/initialize`, `ui://`, or iframe-rendering code found anywhere in the repo. Sponsored data field still works via the always-on JSON fallback. |\n| Zed editor | Yes | No evidence found | Zed's own docs state plainly it \"currently supports MCP's Tools and Prompts features\" — no Resources-based UI rendering. Sponsored data field still works via the always-on JSON fallback. |\n| Continue.dev | Yes (historically) | No evidence found | Discontinued: acquired by Cursor in June 2026, and the `continuedev/continue` repo is now read-only with no further development. It supported plain MCP tools/resources/prompts while active, with no evidence it ever rendered MCP Apps widgets. Not a viable integration target going forward — listed here only for completeness. |\n\n### Why some hosts need zero extra code and others don't\n\nDifferent hosts converged on different conventions for how a tool\nadvertises \"I have a renderable UI\" — and where a host's convention differs\nfrom the one we shipped first, discovery silently fails before rendering\never gets a chance to run (that was the CopilotKit gap [PR #8](https://github.com/Lulu-The-Narwhal/lulu-ads/pull/8)\nfixed, 2026-08-25). We track each convention we've confirmed and register\nagainst all of them on every widget-capable tool — additive only, never a\nrewrite, so a host that doesn't recognize one signal just ignores it. That's\nthe practical reason Claude and VS Code render with zero extra code (they\nshare a convention) while CopilotKit needed a targeted fix, and it's why\n\"no evidence found\" in the table below means exactly that — evidence not\nfound yet, not evidence of absence.\n\nAnything else not listed above (LangGraph Studio, custom in-house agent\nharnesses, and every host we simply haven't looked at yet): unknown / not\nyet investigated — the plain `sponsored` field is designed to fail open and\ndegrade gracefully on any of them regardless, per the [Guarantees](#guarantees-enforced-in-code-not-just-promised)\nbelow. If you've verified rendering on a host not in this table, open an\nissue or PR — this list is meant to stay honest, not exhaustive.\n\nThis table is specifically about **widget rendering in chat hosts**.\nFor the fuller picture — agentic SDKs/frameworks (most reach the data\nfield via MCP passthrough, no dedicated adapter needed), response-suffix\nruntimes (WhatsApp/Telegram/Slack/SMS bots, background agents), AI app\nbuilders (not yet evaluated), and MCP hosting/registries (irrelevant to\nthis SDK by design) — see\n[**Supported surfaces**](docs/supported-surfaces.md).\n\nDon't design UI. Pick one of four predefined, host-native-quality result\nwidgets and map your tool's `structuredContent` fields into it — the frame,\ndesign tokens, and the disclosed SPONSORED strip are fixed by the SDK. The\nstrip renders only when a live `sponsored` payload exists, always at the\nbottom, always labeled, with the advertiser's logo (letter-tile fallback\nwhen none loads). Your body can't remove or restyle it.\n\nTemplates: `stat-card` (big value + chips + optional condition-keyed\natmospheric background), `table-card` (headed rows, mono numerics, best-row\nhighlight), `notice-card` (verdict glyph + detail rows), `carousel-card`\n(3–8 swipeable option cards).\n\n```python\nfrom lulu_ads.widgets import register_result_widget\n\n# after your @mcp.tool definitions:\nregister_result_widget(\n    mcp, \"get_weather\",\n    template=\"stat-card\",\n    mapping={\n        \"eyebrow\": \"location.name\",\n        \"value\": {\"path\": \"temperature_c\", \"suffix\": \"°\"},\n        \"condition\": \"conditions\",\n        \"chips\": [{\"path\": \"humidity_pct\", \"prefix\": \"💧 \", \"suffix\": \"%\"}],\n        \"atmosphere\": \"weather_code\",   # WMO code or words -> sky gradient\n    },\n    endpoint_url=\"https://my-server.example.com/mcp\",\n)\n```\n\nTypeScript: `import { registerResultWidget } from \"lulu-ads/widgets\"` —\nsame templates and mapping shape; spread the returned `_meta` into\n`server.registerTool(...)`. Mapping entries are dot-paths or\n`{path, prefix, suffix}`; a `body_html=` escape hatch accepts custom\nmarkup composed from the `.lw-*` primitives for the cases the templates\ndon't cover. Calling it for a tool deliberately replaces the generic\nsponsored card from `enable_lulu_ads` on that tool — the sponsored data\nstill flows and renders in the widget's own strip.\n\n## Widget rendering (MCP Apps UI)\n\nThe plain `sponsored` field always ships and always works — some hosts\nrender it as a card purely on the model's own judgment, no instruction\nanywhere. For hosts that support the [MCP Apps](https://github.com/modelcontextprotocol/ext-apps)\nextension (`io.modelcontextprotocol/ui`), `enable_lulu_ads` / `enableLuluAds`\n(see Quickstart above) already register an actual rendered widget and\nattach it to every tool automatically — you don't need anything below this\nline for that. It exists as a distinct step at all because\n`register_sponsored_widget()` requires your server's exact public endpoint\nURL, which `LuluAdsMiddleware`/`withLuluAds` alone have no way to know.\n\n**Prefer per-tool control** (a different widget on different tools, or\nonly some tools get one)? Use the lower-level building block directly\ninstead of `enable_lulu_ads`:\n\n```python\nfrom fastmcp import FastMCP\nfrom lulu_ads.widget import register_sponsored_widget\n\nmcp = FastMCP(\"my-server\")\nsponsored_app = register_sponsored_widget(\n    mcp,\n    endpoint_url=\"https://my-server.example.com/mcp\",  # your public MCP connector URL\n    text=\"Save 15% at checkout\",\n    url=\"https://example.com/deal\",\n    logo=\"https://example.com/logo.png\",  # optional, see \"Logos\" below\n)\n\n@mcp.tool(app=sponsored_app)\ndef search(...): ...\n```\n\nSame helper, official TS SDK, for MCP servers built in Node instead of Python\n(registration is `async` — it may fetch a logo before returning):\n\n```typescript\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { registerSponsoredWidget } from \"lulu-ads/widget\";\n\nconst server = new McpServer({ name: \"my-server\", version: \"1.0.0\" });\nconst appMeta = await registerSponsoredWidget(server, {\n  endpointUrl: \"https://my-server.example.com/mcp\", // your public MCP connector URL\n  text: \"Save 15% at checkout\",\n  url: \"https://example.com/deal\",\n  logo: \"https://example.com/logo.png\", // optional, see \"Logos\" below\n});\n\nserver.registerTool(\"search\", { ...appMeta }, handler);\n```\n\n**Card formats.** `template=` picks the widget's visual layout — a\nregistration-time choice, same shape as `register_result_widget`'s own\n`template=` (Result widgets, above). Defaults to `\"card\"` (the layout\nshown above); pass a different name for a different format:\n\n```python\nsponsored_app = register_sponsored_widget(\n    mcp,\n    endpoint_url=\"https://my-server.example.com/mcp\",\n    text=\"Save 15% at checkout\",\n    url=\"https://example.com/deal\",\n    template=\"banner\",  # full-width horizontal strip -- see Templates below\n)\n```\n\n```typescript\nconst appMeta = await registerSponsoredWidget(server, {\n  endpointUrl: \"https://my-server.example.com/mcp\",\n  text: \"Save 15% at checkout\",\n  url: \"https://example.com/deal\",\n  template: \"banner\",\n});\n```\n\nAn unrecognized `template` raises immediately (before any network call,\ne.g. the logo fetch) rather than silently falling back — same fail-fast\ncontract `register_result_widget`'s template validation already has.\n\n`\"hero\"` accepts one more option, `background_image`/`backgroundImage` — a\nURL fetched once at registration time and inlined the same way `logo` is:\n\n```python\nsponsored_app = register_sponsored_widget(\n    mcp,\n    endpoint_url=\"https://my-server.example.com/mcp\",\n    text=\"Save 15% at checkout\",\n    url=\"https://example.com/deal\",\n    template=\"hero\",\n    background_image=\"https://example.com/hero-bg.jpg\",  # optional -- falls back to the gradient\n)\n```\n\n**Templates:**\n\n| `template=` | Layout | Notes |\n|---|---|---|\n| `\"card\"` (default) | Stacked: label line, then logo + text/CTA row | The original hand-built layout — every existing integrator gets this unchanged. |\n| `\"banner\"` | Single horizontal row: label, logo, text/CTA all inline | Better fit for wide-but-short layouts (VS Code sidebar, wide CLI panes) where a stacked card wastes vertical space. |\n| `\"hero\"` | Full-bleed background image (or the shared gradient) with logo/text/CTA anchored over a legibility scrim | `background_image` is optional and integrator-supplied — not yet something ads-server's automatic ad matching can select on its own. |\n| `\"flip-card\"` | Tap/click flips a 3D card — front shows the label, back reveals text + CTA | The disclosed label is always on the front; only the offer's own details are behind the flip. |\n| `\"scratch-reveal\"` | A scratch-off canvas layer over the offer | Auto-reveals after 3s regardless of interaction — the offer is identical either way, this is decoration, never gated content. |\n| `\"spin\"` | A decorative spin-and-settle flourish on the logo badge | Deterministic — always the one real offer, never a variable-outcome mechanic. |\n\nMore formats land here as they ship (carousel, comparison, testimonial,\ncountdown, quiz, video — see the gallery tracked in Linear). Every\ntemplate shares the exact same guarantees: skeleton-on-load, the\ndisclosed `Sponsored` label, the \"Powered by Lulu Ads\" footer, and\nfail-open on missing/malformed data — none of that is renegotiable per\ntemplate.\n\nThis is also what `enable_lulu_ads`/`enableLuluAds` do internally, on your\nbehalf, for every tool — found live (2026-07-26) that getting this step\nright per-tool is easy to forget: our own dogfood server had it wired onto\nexactly one tool by hand, and every tool added since then silently never\ngot it. If you want automatic coverage with no per-tool step, use\n`enable_lulu_ads`/`enableLuluAds` instead of this directly.\n\nShips a floating, rounded, gradient card (same visual system as\n[getlulu.dev](https://getlulu.dev)) with a disclosed `Sponsored` label —\nstill just markup, never a directive. Three host-specific quirks this\nhandles for you: Claude requires an undocumented `_meta.ui.domain` value\nderived from your endpoint URL (self-computed here, not a credential), the\nwidget must send a `ui/notifications/initialized` handshake on load or\nClaude keeps the iframe hidden, and logos are inlined rather than linked\n(next section) so the widget sandbox's own CSP can't silently drop them.\nVerified live against production\n(`dali.getlulu.dev/mcp`, [ext-apps#671](https://github.com/modelcontextprotocol/ext-apps/issues/671)),\ncurrent as of 2026-07-19 — Claude's own rendering of MCP Apps widgets was\nbroken platform-wide before that fix landed, so treat any \"should render\"\nclaim (including this one, elsewhere) as unverified until you've checked\nit live in your own host.\n\nThe widget shows a shadcn `<Skeleton>` immediately on load, then swaps to\nreal content only once a live tool call arrives — `text`/`url`/`logo`\npassed to `register_sponsored_widget()` are **not** rendered as initial\ncontent; only `label`/`cta`/`accent*` from those options are actually used\nby the live path (as defaults for fields the wire payload omits, and as\nthe static per-integrator brand theme). On every real tool call, the\nwidget listens for the MCP Apps host's own `ui/notifications/tool-result`\npush (a fresh iframe is mounted per call, not reused — \"per call, not per\ntool\" is a protocol guarantee, nothing had to be built server-side to get\nit) and renders with *that call's* `structuredContent.sponsored` — live,\nper-call ad content, not a fixed payload baked in once at registration. A\nhost that never sends the notification keeps showing the skeleton\nindefinitely (not a fallback ad — see the open gap noted in\n`js/widget-src/src/mcpBridge.ts`'s `InitialOptions` docstring); a call\nwith no `sponsored` field (the normal fail-open case) renders an empty\ncard with only the footer. Card, skeleton, and the \"Powered by Lulu Ads\"\nfooter are one compiled React/shadcn bundle shared byte-for-byte between\nthe Python and TypeScript SDKs (`js/widget-src/`, checked in, embedded by\nboth languages), and the footer always renders inside that same\npersistent card shell, in every state.\n\n### Logos\n\n`logo` takes a URL to **fetch a brand mark from**, not a URL to embed\ndirectly — pass it and the SDK downloads the image right there at\nregistration time and inlines it into the widget as a `data:` URI. This\nisn't incidental: the MCP Apps spec has hosts enforce `img-src 'self' data:\n<resourceDomains>` inside the widget's sandboxed iframe, and unless *you*\nseparately declare your logo's domain in that resource's CSP config, a\n`<img src=\"https://your-cdn.com/logo.png\">` gets silently dropped — no\nerror anywhere, the card just renders with a blank slot forever, in every\nhost. `data:` URIs are always allowed under that same rule, so fetching and\ninlining server-side sidesteps the whole failure mode — there is no CSP\nconfig for you to get right or forget.\n\nA bad or unreachable `logo` never breaks registration — it's skipped (with\na warning log) and the card renders without one, same as leaving `logo`\nunset. Only `image/png`, `image/jpeg`, `image/svg+xml`, `image/webp`, and\n`image/gif` are accepted, capped at 200KB (the logo renders at 28×28 in the\ncard — there's no reason to ship more than that over the wire).\n\n## CLI rendering\n\nTerminals have no widget surface — the model's own text is the only\noutput there is, and it's genuinely the model's judgment call whether to\nmention the disclosed line at all (never forced, ever — see Guarantees).\n`LuluAdsMiddleware` / `withLuluAds` detect known CLI clients via the MCP\n`clientInfo.name` sent at `initialize` (currently: `claude-code`, verified\nlive) and, when connected from one, append a bordered plain-text card to\n`content[]` in addition to the plain field — still just data, still zero\ninstruction to the model, just formatted so it reads as a distinct block\ninstead of a plain sentence if the model does choose to relay it:\n\n```\n╭─ Sponsored ────────────────────────────────────╮\n│ Search 700+ airlines in one place — Kiwi.com   │\n│ finds routes other search engines miss.        │\n╰─ via Lulu Ads ─────────────────────────────────╯\n→ https://ads.getlulu.dev/c/9f2a1c\n```\n\nKnown limitation, disclosed here rather than glossed over: some MCP\nclients don't forward every `content[]` block to the model when\n`structuredContent` is also present on the same result — an open\nclient-side bug in Claude Code, twice reported and twice closed without a\nfix ([#55677](https://github.com/anthropics/claude-code/issues/55677) →\nconsolidated into\n[#45575](https://github.com/anthropics/claude-code/issues/45575) →\nauto-closed stale). Live-tested against Claude Code specifically\n(2026-07-21): with `structuredContent` present (the shipped default), the\nboxed card never reaches the model, but the plain `sponsored` field still\ndoes — the model reliably surfaces it as an honest, labeled\n\"Sponsored: ...\" line in its own words, 3/3 runs, no issues.\n\n### `cliTextMode` — opt-in fix for the client bug above\n\nWe also tested the obvious-looking fix — omit `structuredContent` so\n`content[]` has nothing competing with it — and the result depended\nentirely on what else was in `content[]`:\n\n- Ad **alone**, no real tool data alongside it: the card arrives every\n  time, but the model flags it as a suspected prompt-injection attempt\n  and warns the user off it, 3/3 runs. Worse than not showing it.\n- Ad **alongside a real, complete rendering of the tool's own result**:\n  the card arrives every time, the model treats it as an ordinary\n  disclosed ad and mentions it neutrally, 3/3 runs. No suspicion.\n\nSo the fix is real, but conditional on your tool's own behavior — which\nthis SDK can't verify for you, hence opt-in, off by default:\n\n```python\nmcp.add_middleware(LuluAdsMiddleware(cli_text_mode=True))\n```\n\n```typescript\nwithLuluAds(server, ads, { cliTextMode: true });\n```\n\nTurn this on only if your tool's `content[]` already contains a\ncomplete, human-readable rendering of the result on its own — not a\nplaceholder like \"see structuredContent\". When on, detected CLI clients\nwith no declared `outputSchema` get `structuredContent` stripped so\n`content[]` (your tool's own text + our card) reliably reaches the\nmodel. Tools that declare an `outputSchema` are never touched by this —\nstripping `structuredContent` there would break client-side schema\nvalidation outright (confirmed: `fastmcp.exceptions.ToolError`\n\"outputSchema defined but no structured output returned\"), which is a\nbroken tool call, a strictly worse outcome than a dropped card. This SDK\nnever drops `structuredContent.sponsored` on schema'd tools to chase card\nvisibility, `cliTextMode` or not.\n\nUntil the upstream client bug is fixed, treat the CLI card as \"renders\nreliably once you opt in and your tool qualifies, on top of a disclosure\nthat already works either way\" — same verify-in-your-own-host caveat as\nthe widget path above.\n\n## stdio servers\n\nEverything above the \"Widget rendering\" section works unmodified on a\nstdio-transport server — the SDK is a library your code imports and calls;\nit doesn't know or care how your own server talks to *its* clients. The\nplain `sponsored` data field (`LuluAdsMiddleware` / `mcp.add_middleware()`,\n`withLuluAds(server)`) takes no endpoint argument and makes a plain\noutbound HTTPS call to `ads.getlulu.dev/slot` — same request whether your\nprocess is a long-running remote server or a `npx`/`uvx`-launched local\none. The CLI text-card path (see \"CLI rendering\" above) is the common\nreal-world case here: Claude Code launches most of its MCP servers over\nstdio, and that's exactly the client this SDK already detects and renders\na disclosed plain-text card for.\n\nThe rendered **MCP Apps widget is the one piece that doesn't apply** —\n`enable_lulu_ads`/`enableLuluAds` and the lower-level\n`register_sponsored_widget`/`registerSponsoredWidget` all require a real\n`endpoint_url`, hashed into Claude's undocumented `_meta.ui.domain` value\nfor the widget's iframe CSP. That's not a Lulu Ads limit; MCP Apps'\n`ui/initialize` handshake is a network protocol between the host and your\nserver's own HTTP endpoint, and a stdio server has none. If your server is\nstdio-only, call `LuluAdsMiddleware`/`mcp.add_middleware()` directly (or\n`withLuluAds(server)` in TypeScript) — never `enable_lulu_ads` — and you\nget the data field plus the CLI text-card, with nothing to configure for\nthe endpoint you don't have.\n\nPublisher-side note: the marketplace's automatic \"monetized\" badge\ncurrently matches a listing to your registered publisher account by\n`remote_url` — a stdio listing has none, so it won't auto-badge even once\nyou've integrated the SDK and are earning. The SDK/earnings path itself is\nunaffected; this is purely a marketplace-listing display gap, being\ntracked separately.\n\n## Guarantees (enforced in code, not just promised)\n\n| Guarantee | How |\n|---|---|\n| A tool call can never break because of ads | every failure path returns `None`/`null`; hard 800ms wall-clock timeout (3000ms when the call implies server-side classification) |\n| Always disclosed | `label: \"Sponsored\"` is set by the SDK, never sourced from the response body |\n| No prompt injection, ever | we ship a data field; there is no display instruction anywhere in the contract |\n| No PII leaves your server | `context` is filtered against an allowlist client-side, before any request is built |\n| Quality-gated | every creative passes [Dali](https://dali.getlulu.dev) scoring (≥70) before it can fill a slot |\n| Intent, not identity | targeting uses this call's stated context only — no user profiles, no cross-session ID |\n| Misconfigured? Still safe | missing credentials → client is inert, returns `None`/`null`, zero network calls |\n\n## Why not just…\n\n**…tell the model to mention a sponsor in its reply?**\nDisplay instructions get MCP servers delisted by registries that scan for\ninjected directives. We ship a plain data object — `label`, `text`, `url` —\nwith no field, anywhere in the contract, that tells a model how to render or\nphrase anything.\n\n**…count impressions and charge per view?**\nAn \"impression\" only exists if a model actually rendered it, and that's\nunverifiable from the server side — easy to game, hard to audit. We charge\nCPA only, on a click that redeems a signed, server-verified token. Payment\nmaps to a real user action, not a claim.\n\n**…scan the conversation to target better?**\nReading transcripts to target ads is a privacy trap: everything a user says\nbecomes ad-targeting data. We accept six allowlisted context keys — `tool`,\n`category`, `query`, `route`, `locale`, `country` — stated intent for this\ncall only. No transcripts, no profiles, no PII fields exist in the schema.\n\n## How it works\n\n```\ntool call\n   │\n   ▼\nyour tool's own result\n   │\n   ▼\nPOST /slot  (1500ms cap — 3000ms when classifying a raw prompt — allowlisted context only)\n   │\n   ▼\nlabeled data field  { label: \"Sponsored\", text, url }   ← attached, never injected\n   │\n   ▼\nhost / model judgment   →   renders it, or doesn't — not our call\n   │  user clicks\n   ▼\nGET /c/{token}   →   signed redirect, click recorded\n   │\n   ▼\nadvertiser's affiliate rails   →   POST /postback on conversion\n   │\n   ▼\n70% publisher / 30% Lulu, on the ledger. Earnings accrue to your balance from the first audited conversion — cash out from $100.\n```\n\nFull wire-level detail: [`docs/contract.md`](docs/contract.md).\n\n---\n\nDocs: https://getlulu.dev/docs · [Quickstart](docs/quickstart.md) ·\n[API contract](docs/contract.md) · [Integrations](docs/integrations.md) ·\n[Publisher signup](https://getlulu.dev/publishers) · Quality gate:\n[Dali](https://dali.getlulu.dev) · [MIT](LICENSE)\n\n## Changelog\n\n- **0.9.19** — **Fixes what the SDK reported about itself.**\n\n  `SDK_VERSION` in the TypeScript client was a hardcoded `\"0.9.14\"` while the\n  package moved through four releases — and it is *sent* to `/slot` as\n  `sdk_version`, so every TypeScript publisher reported 0.9.14 and upgrade\n  telemetry could not tell who had actually upgraded. Now correct, and pinned\n  by a test against `package.json` so a release that forgets it fails the suite\n  instead of quietly corrupting the data. The Python client never had this bug;\n  it imports `lulu_ads.__version__`.\n\n  Docs, no behaviour change: `js/src/skybridge.ts`'s header still described the\n  adapter as `_meta`-only, which stopped being true in 0.9.15 — it now carries\n  the same four-case landing table as `docs/integrations.md`. And\n  `python/README.md`, which is what PyPI renders, had no sync with the root\n  README and had fallen four releases behind, so the package page described\n  Skybridge using that same retired claim. Both package READMEs are now fed by\n  `scripts/sync-readmes.sh`.\n\n- **0.9.18** — **Skybridge 2.x support, and a guard against its one silent\n  failure.**\n\n  skybridge 2.x moved protocol-middleware wiring out of\n  `McpServer.connect()` into the app's request path, so the attach point\n  differs by major:\n\n  ```ts\n  // 2.x — inside the app handler\n  new Skybridge({ name, version, handler: (server) => {\n    withLuluAdsSkybridge(server);\n    return server.registerTool({ name: \"t\" }, handler);\n  }});\n\n  // 1.x — on the server you connect yourself\n  withLuluAdsSkybridge(server);\n  ```\n\n  Using the 1.x shape on 2.x registers the middleware into a chain nothing\n  applies: no error, no ad, nothing to debug. The adapter now detects that\n  (its middleware always runs before a tool handler, so a tool executing\n  while it never ran means it isn't wired) and **warns once** with the\n  correct snippet. Warned, never thrown.\n\n  Verified against both majors — 106/106 on `skybridge@1.4.1` and `@2.0.0`,\n  plus an end-to-end example run against the published package. Note that on\n  2.x an idiomatic `content`-only tool carries the ad on `_meta` alone, so a\n  view should read `structuredContent` first and fall back to `_meta`; the\n  reference view in `examples/skybridge-views/` does exactly that.\n\n- **0.9.15–0.9.17** — **Skybridge delivers at all, and the SDK reports who is\n  calling.**\n\n  > **On 2.0.1:** these changes were briefly published as `2.0.1` before being\n  > retired — the major stranded every existing `^0.9.x` dependency range,\n  > which meant nobody would have received them without hand-editing their\n  > package.json. It is yanked on PyPI and superseded on npm; use the 0.9.x\n  > line. Nothing was lost, only renumbered.\n\n  *Skybridge.* `withLuluAdsSkybridge` used to\n  attach `sponsored` to `_meta` only. Nothing on the Skybridge path reads\n  `_meta` — `enableLuluAds` can't register a widget there (Skybridge's\n  `registerViewResource` is private) and there's no CLI card — so the slot\n  was fetched, logged, and surfaced to nobody. Probing the live result\n  shape showed `content[]` arrives **empty** on Skybridge with\n  `structuredContent` populated (the inverse of the official SDK), so\n  `structuredContent` is what a view renders from. It now lands there:\n\n  | tool shape | `sponsored` goes to |\n  |---|---|\n  | no `outputSchema` | `structuredContent` **and** `_meta` |\n  | has `outputSchema` | `_meta` only — an unlisted field would fail the client's validation |\n  | registered before `withLuluAdsSkybridge` | `_meta` only — schema status unknown, safe default |\n\n  The schema flag is captured at registration time via a 2-arg\n  `registerTool` wrapper, since `mcpMiddleware` can't see `outputSchema`.\n\n  *Client identity.* Every adapter now forwards the MCP client name as\n  `context.client`, so ads-server can tell a real agent from a directory\n  crawler. `\"client\"` joins the context allowlist. No integrator code\n  changes.\n\n  *Two silent breakages fixed on fastmcp 4.x / MCP SDK v2.* `clientInfo`\n  was renamed `client_info`; the old spelling raised inside a bare\n  `except`, so `_connected_client_name` returned `None` on every 4.x host\n  — which also silently disabled the **CLI sponsored card**\n  (`is_cli_client(None)` is False). And 4.x negotiates `server/discover`\n  instead of `initialize`, so `on_initialize` never fired and the async\n  warm-up stopped, handing back the cold-start latency the tiered-timeout\n  work exists to avoid. Both accessors now try new-then-old spellings, and\n  `on_discover` runs alongside `on_initialize`. Python suite: 144 passed /\n  0 failed on **both** 4.0.5 and 3.4.4 (was 8 failing). JS: 104/104.\n\n  *Upgrading:* staying on the 0.9.x line is deliberate — a `^0.9.x` range\n  reaches 0.9.18, so `npm update lulu-ads` / `pip install -U lulu-ads` is\n  enough and no dependency range needs editing. That propagation is exactly\n  what the retired 2.0.1 would have cost.\n\n  See [`examples/skybridge_server.ts`](examples/skybridge_server.ts) and\n  `npm run verify:skybridge`, which asserts all of the above against a\n  real server over an in-memory transport.\n\n- **0.9.14** — An ad's per-call `template` (LUL-64, when `/slot` reports one)\n  now wins over the `template=`/`template:` you registered with, for the\n  standalone sponsor-card widget (`register_sponsored_widget()`/\n  `registerSponsoredWidget()`). If it's absent or not a template this\n  bundle build recognizes, it falls back to your registration-time\n  default as before, then to `\"card\"`. **Behavior change on upgrade, no\n  code change required:** if you registered with a non-default\n  `template=` (e.g. `\"hero\"`), ads that carry their own live template\n  will now render in that template instead, with no opt-out. This is\n  intentional — an admin picking a template for a specific ad is meant to\n  be more specific than a blanket integrator default — but it does mean\n  your widget's visual output can change after upgrading even though you\n  changed no code. Also fixes a lookup hazard where a prototype-chain\n  name (e.g. `\"constructor\"`) in a live `template` value could be\n  misread as \"recognized\" and crash the render after the impression\n  beacon had already fired.\n- **0.9.13** — Fixed a rendered-impression billing gap (LUL-71) in the\n  standalone sponsor-card widget (`register_sponsored_widget()`/\n  `registerSponsoredWidget()` — the React-built card, banner, flip-card,\n  scratch-reveal, spin, and hero templates): the wire payload's `imp_url`/\n  `impUrl` field was parsed and exposed by both clients (`Sponsored.impUrl`\n  in the Node SDK, `imp_url` in the Python client) but silently dropped by\n  the widget bundle's own message parsing before it ever reached the\n  React components — so the rendered-impression beacon (a 1px `<img>` that\n  confirms a human actually saw the ad, which CPM is billed against) never\n  fired for this widget at all, for any template, since it shipped. Fixed\n  centrally in `App.tsx`'s loading→\"loaded\" transition — the same moment\n  every template's disclosed content becomes visible, including\n  flip-card's front teaser (fires before the user ever flips it, matching\n  `register_result_widget()`'s footer strip's own already-correct\n  behavior) and scratch-reveal's covered content (fires before anyone\n  scratches). `register_sponsored_widget()`/`registerSponsoredWidget()`\n  also now declare the `ads.getlulu.dev` resource/connect CSP domains the\n  beacon pixel needs to not be silently blocked by a host's default\n  `img-src 'self' data:` policy — the same declaration\n  `register_result_widget()` already had. Verified live: the beacon fires\n  a real HTTP request the instant a `tool-result` with `imp_url` arrives,\n  confirmed via a local server's access log, not just unit tests.\n- **0.9.12** — Result-widget footer `sponsor_template=` (LUL-69) redesigned\n  from a slim single-line strip into a cover card: a colorful cover band —\n  a real sponsor image when the live payload supplies `cover_image_url`/\n  `coverImageUrl`, an animated gradient otherwise — with the logo tile\n  overlapping the seam into the body, bigger type, and a real pill CTA\n  button. `\"flip-card\"`'s teaser now carries the same cover identity\n  instead of a bare label. `\"spin\"` is removed: a coin-flip `scaleX`\n  animation on a small, often-flat letter-tile logo turned out visually\n  illegible in practice (mid-animation it shrinks to a near-invisible\n  sliver against a busy cover background), caught live rather than\n  inferred. It's replaced by `\"carousel\"` — auto-cycles through three\n  framings of the *same* single sponsored payload (a bigger brand logo,\n  the offer text, then the CTA), never multiple sponsors: this frame only\n  ever gets one sponsored payload per call, so unlike the standalone\n  gallery's carousel template there is no multi-advertiser rotation here\n  (see LUL-49 for that separate, still-blocked, backend question).\n  `\"scratch-reveal\"` is restyled as a lottery-ticket foil stub — gold\n  metallic gradient, diagonal hatching, a dashed perforation line, a\n  ticket glyph — and its auto-reveal window is 5s now, not 3s, long enough\n  to actually register as an interaction; it remains a strictly\n  deterministic reveal with no \"win/lose\" state, which is what keeps the\n  ticket styling out of actual gambling-mechanic territory. The \"single\n  row, no room for a full-bleed image\" reasoning that used to also exclude\n  `\"hero\"` no longer holds now that the strip itself is cover-height —\n  noted as an open follow-up, not resolved by this release.\n- **0.9.11** — `register_result_widget()`/`registerResultWidget()` gain\n  `sponsor_template=`/`sponsorTemplate:` (LUL-69): the SPONSORED strip built\n  into a result widget's footer (`stat-card`/`table-card`/`notice-card`/\n  `carousel-card` — a publisher's own tool output, not the standalone\n  sponsor-card widget) can now pick a visual format too, independent of\n  `template=`, this widget's own body layout. `\"card\"` (default) is the\n  original always-visible strip. `\"flip-card\"` is a compact \"Sponsored\"\n  teaser that crossfades to reveal the real offer on tap — the front\n  face carries an actual prompt (\"Tap to reveal →\"), not just a bare\n  disclosure label, so there's a reason to tap it. `\"spin\"` is a\n  decorative spin-settle flourish on the logo badge, content visible\n  immediately, never gated (no variable outcomes — see the spin\n  guardrail below). `\"scratch-reveal\"` is a canvas scratch-off layer,\n  auto-revealing after 3s regardless of interaction — the offer\n  underneath is identical whether or not anyone scratches. `\"banner\"`/\n  `\"hero\"` are deliberately not offered here: this strip is already one\n  horizontal row (banner would be a no-op) and a full-bleed background\n  doesn't fit a slim footer bar. This is a different system from the\n  standalone sponsor-card gallery above (`register_sponsored_widget()`'s\n  own `template=`) — same template *names* where they overlap, ported\n  into this frame's own vanilla-JS renderer rather than sharing code,\n  since the two frames are independent implementations by design.\n- **0.9.10** — Four more templates: `\"flip-card\"` (LUL-53, a CSS 3D flip on\n  tap revealing the offer on the back face — front always shows the\n  disclosed label first, never hides *what* this is, only the offer\n  details), `\"scratch-reveal\"` (LUL-52, a canvas scratch-off layer,\n  auto-reveals after 3s regardless of interaction — the underlying offer\n  is identical whether or not anyone scratches, this is a reveal\n  animation, never gated content), `\"spin\"` (LUL-54, a decorative\n  spin-and-settle flourish on the logo badge — deterministic by design, no\n  wheel-of-fortune-style variable outcomes, since that would be a gambling\n  mechanic), and `\"hero\"` (LUL-48, a full-bleed background image or\n  gradient with logo/text/CTA anchored over a legibility scrim).\n  `register_sponsored_widget()`/`registerSponsoredWidget()` also gain an\n  optional `background_image`/`backgroundImage` param for `\"hero\"` — same\n  fetch-once-and-inline-as-`data:`-URI contract `logo` already has (a\n  fetch failure just falls back to the shared gradient, never a\n  registration error). This is integrator-supplied, registration-time\n  branding, same category as `logo`/`accent*` — not yet wired into\n  ads-server's automatic per-campaign ad matching, which doesn't have an\n  image field of its own (tracked separately).\n- **0.9.9** — First real entry in the template gallery: `template=\"banner\"`\n  (LUL-47), a full-width horizontal strip (label, logo, text/CTA all in one\n  row) instead of the default `\"card\"`'s stacked layout — better fit for\n  wide-but-short surfaces (VS Code sidebar, wide CLI panes). Same shared\n  contract as every template: renders inside the same persistent gradient\n  shell, same disclosed label + \"Powered by Lulu Ads\" footer, same\n  skeleton-on-load and fail-open behavior — nothing about those guarantees\n  is template-specific. No background-image support yet (LUL-47's spec\n  allows \"image or gradient\"; a real background-image field needs new\n  schema on the advertiser side, tracked separately) — uses the existing\n  accent-token gradient. Docs added: Widget rendering now documents\n  `template=` with a live example and a table of available formats.\n- **0.9.8** — `register_sponsored_widget()` / `registerSponsoredWidget()` gain\n  a `template=` parameter (LUL-46), same shape as `register_result_widget`'s:\n  keyword-only, defaults to `\"card\"` (today's only format, fully backward\n  compatible — no existing integrator's call site changes behavior), raises\n  immediately on an unrecognized value (before any network call, e.g. the\n  logo fetch). This is a registration-time integrator choice, not a\n  per-call value — matches the static, \"baked into the compiled bundle at\n  registration\" behavior `register_result_widget`'s own template already\n  has, not something that varies per served ad. Foundational only: the\n  registry/dispatch mechanism in `js/widget-src/` now supports looking up a\n  template by name, but `\"card\"` (the existing hand-built layout) is still\n  the only entry — more templates land in their own follow-up releases as\n  they're built (banner, hero, carousel, comparison, flip-card,\n  scratch-reveal, spin, testimonial, countdown, quiz, video). Also fixes a\n  real, pre-existing drift: the TS SDK's own `SDK_VERSION` telemetry\n  constant had been stuck at `0.9.0` since a much earlier release despite\n  `package.json` moving on to `0.9.6` — realigned here, and the two\n  packages' version numbers themselves are now back in sync (the previous\n  `0.9.7` was Python-only; the TS package skips straight to `0.9.8`).\n- **0.9.7** (Python only) — CLI/text clients now get a **delivery-confirmed**\n  beacon: the normal rendered-impression pixel (`imp_url`) is fetched by a\n  rendering client itself the instant it displays the sponsored strip —\n  terminal/CLI hosts (Claude Code and friends) have no rendering engine to\n  do that, so every CLI-delivered card was previously invisible in\n  `ad_events`, full stop, even on 100%-successful deliveries. The\n  middleware now fires that same beacon URL itself (fire-and-forget,\n  non-blocking, tagged `src=cli_server`) the moment it appends a card to a\n  CLI client's `content[]`, on both is_cli card-append paths (the\n  middleware's own fetched slot, and a tool's pre-set `sponsored`). This\n  logs as a new, distinct `cli_card_delivered` event — **not**\n  `impression_rendered`, and never counted toward CPM billing/payout — a\n  deliberately weaker signal than a real rendered-pixel hit: it proves the\n  card left the server in the tool response, never that a human actually\n  saw it. Needs no config; existing `imp_url`-carrying slots pick this up\n  automatically. (ads-server: `/i/{token}` now accepts an optional\n  `src=cli_server` query param to log the distinct event type.)\n- **0.9.6** — Docs only: new [Supported surfaces](docs/supported-surfaces.md)\n  page sorting every agent surface (chat hosts, agentic SDKs/frameworks,\n  response-suffix runtimes, AI app builders, MCP hosting/registries) by how\n  it actually reaches the SDK — a direct adapter, MCP protocol passthrough\n  (no adapter needed once a server has Lulu Ads wired in), the generic\n  `format_suffix` contract, or genuinely not yet evaluated — same\n  evidentiary bar as the rest of this repo. Also adds a \"stdio servers\"\n  section clarifying the data-field path needs no `endpoint_url` and works\n  unmodified on stdio-transport servers; only the rendered MCP Apps widget\n  requires one and can't apply to stdio. Also fixes `lulu_ads.__version__`,\n  which had drifted to 0.9.0 while the package published as 0.9.5 — same\n  class of bug as the 0.7.0 entry below, recurred because nothing enforces\n  the two staying in sync; consider that the next real gap to close here.\n- **0.9.2** (Python only) — Fixed a middleware bug: a tool that sets its\n  own `sponsored` field (a documented pattern for e.g. a category-specific\n  cross-sell) triggered the \"never overwrite\" early return in\n  `on_call_tool` before the CLI-client check ran, so CLI hosts (Claude\n  Code) got no visible ad at all on that tool — no widget surface, and no\n  text-card safety net either, both skipped by the same early exit. The\n  client check now runs first; a pre-set `sponsored` value still gets the\n  CLI text-card treatment, using the tool's own chosen ad.\n- **0.9.1** — `table-card` widget gains `rowLink`: an optional per-row\n  dot-path resolving to a URL (e.g. a booking/checkout link), wired to\n  the same host-agnostic `openLink()` the sponsored strip already uses.\n  Rows without a resolvable URL render exactly as before.\n- **0.9.0** — Skybridge (https://skybridge.tech) support:\n  `withLuluAdsSkybridge(server)` (`lulu-ads/skybridge`). Skybridge's\n  `McpServer.registerTool` takes a 2-arg `(config, handler)` shape with\n  `name` folded into `config`, not the official SDK's 3-arg\n  `(name, config, handler)` that `withLuluAds` wraps — reusing `withLuluAds`\n  as-is would misread the config object as the tool name. The new adapter\n  instead uses Skybridge's own `mcpMiddleware(\"tools/call\", ...)` protocol\n  hook, verified against the real `skybridge@1.4.0` package's shipped types\n  and a live `InMemoryTransport` round-trip. Deliberately `_meta`-only:\n  the middleware sees the call result but not the tool's registered\n  `outputSchema`, so `structuredContent` is never touched.\n- **0.8.1** — Result-widget template gallery (supersedes 0.8.0, which\n  briefly shipped on npm with a louder strip design): `lulu_ads.widgets` /\n  `lulu-ads/widgets` with four predefined templates (`stat-card`,\n  `table-card`, `notice-card`, `carousel-card`), design tokens + `.lw-*`\n  primitives, and the disclosed SPONSORED strip built into the frame\n  (advertiser logo via the slot's new `logo_url`, letter-tile fallback).\n  `register_result_widget()` patches an already-registered FastMCP tool in\n  place (or returns the AppConfig for explicit `app=`).\n\n- **0.7.4** — Widget: the sponsored card's iframe canvas no longer paints\n  an opaque white box on dark hosts. `background: transparent` alone is\n  not enough for an embedded iframe: Chromium keeps the canvas\n  transparent only when the embedded document's used color scheme matches\n  the embedder's, and this document declared none (defaulting to\n  `light`), so dark-themed hosts (e.g. claude.ai in dark mode) forced a\n  white backdrop behind the card. The widget now declares\n  `color-scheme: light dark`, which resolves to the user's preferred\n  scheme — matching hosts that follow it (claude.ai does by default) on\n  both light and dark themes. Verified empirically against light- and\n  dark-scheme embedding pages. (Also aligns `lulu_ads.__version__`, which\n  had drifted to 0.7.2 while the packages published as 0.7.3.)\n\n- **0.7.0** — Two real bugs, found live against a real third-party MCP\n  server behind Claude.ai's remote connector, both fixed:\n  - **0% ad delivery on hosts that reconnect per message** (confirmed:\n    Claude.ai opens a brand-new MCP session per chat message, not once per\n    conversation). Root cause: this SDK's persistent HTTP connection goes\n    cold on any real idle gap between messages, but only a one-time\n    \"have I ever succeeded\" check protected the very first call ever —\n    every later cold call still got the tight steady-state timeout and\n    failed. Fixed by re-checking coldness on every call, keyed to time\n    since the last real success, not a permanent latch. Also: the fast\n    steady-state timeout itself was raised 800ms → 1500ms\n    (Python and TS) — production evidence showed even \"warm\" calls\n    sometimes measuring 796-802ms, right at the old line rather than\n    comfortably under it.\n  - **Ad fetched successfully, never seen by the model.** FastMCP/the\n    MCP TS SDK build a tool result's `content[]` once, from the tool's\n    original return value, before `LuluAdsMiddleware`/`withLuluAds` ever\n    run — mutating `structuredContent` alone (the only thing this SDK's\n    own test suite checked) left `content[]` permanently stale. Confirmed\n    live: the wire response's `structuredContent` demonstrably had\n    `sponsored`, but Claude.ai read and reported back from `content[]`,\n    which didn't. Both SDKs now keep `content[]` in sync whenever it's\n    safe to (a single auto-generated JSON text block); regression tests\n    added for the exact gap that let this ship unnoticed the first time.\n  - **New:** `enable_lulu_ads()` (Python) / `enableLuluAds()` (TS) — one\n    call that wires both the data field AND the rendered MCP Apps widget\n    onto every tool automatically, present and future. Existing\n    `register_sponsored_widget()`/`registerSponsoredWidget()` +\n    `app=`/`_meta.ui` per tool still works and is now documented as the\n    lower-level building block for per-tool control; the gap it left (an\n    easy-to-forget manual step per tool) is exactly what this closes —\n    found live on our own dogfood server, which had wired the widget onto\n    exactly one tool by hand and silently never updated it for tools\n    added since.\n- **0.6.2** — The sponsored card now plays a one-time diagonal light sweep\n  across itself when it settles into the loaded state (a real ad won) —\n  pure CSS (`.card-shine` in `js/widget-src/src/index.css`), fires exactly\n  once per mount (not a looping shimmer, since this sits inline in a real\n  chat thread), and respects `prefers-reduced-motion`. Skeleton and\n  no-fill states are unaffected.\n- **0.6.1** — Corrects a stale `0.6.0` published to npm before `dist/` was\n  rebuilt from the merged source (`js/` has no `prepublishOnly` build\n  step) — 0.6.0 is deprecated on npm pointing here. Also fixes README.md\n  and both languages' `widget.py`/`widget.ts` docstrings, which\n  incorrectly claimed `text`/`url`/`logo` passed to\n  `register_sponsored_widget()` render as a fallback \"house ad\" until a\n  live `tool-result` arrives; they never do — the widget shows the\n  skeleton indefinitely if a host never pushes it.\n- **0.6.0** — The MCP Apps sponsored widget now shows **live, per-call ad\n  content** instead of a fixed house ad baked in at registration time:\n  rebuilt in React + shadcn/ui (`Card`, `Skeleton`, `Button`), compiled to\n  a single self-contained bundle shared byte-for-byte by both SDKs\n  (`js/widget-src/`). The widget shows a skeleton immediately on load,\n  then listens for the MCP Apps host's own `ui/notifications/tool-result`\n  push — which the spec already delivers once per call, to a fresh iframe\n  per call, with no server-side change needed — and swaps to that call's\n  real `structuredContent.sponsored` data — the widget shows the skeleton\n  indefinitely if a host never pushes it, not a fallback ad; only\n  `label`/`cta`/`accent*` from `register_sponsored_widget()`/\n  `registerSponsoredWidget()`'s options are actually used by the live\n  path. The \"Powered by Lulu Ads\" footer renders once, immediately, and\n  is never itself part of the skeleton→card swap. Live-verified against a\n  real host (claude.ai) with a throwaway test server: skeleton renders\n  before the tool call resolves, swaps to the real per-call card once it\n  does, the footer never disappears or reflows during the swap, and two\n  tool calls in the same turn render two fully independent widget\n  instances, each showing only its own call's data — confirming the \"per\n  call, not per tool\" behavior this feature is built on. (The CTA's\n  `ui/open-link` redirect — vs. a raw navigation — was re-confirmed by\n  static code inspection and this repo's existing unit tests during this\n  same pass; live click-through capture was attempted but blocked by\n  browser-automation tooling limits reaching inside the host's\n  double-sandboxed iframe, not by any observed product failure.)\n- **0.4.0** — Automatic pre-connect on construction for LangChain's\n  `LuluAdsAgentMiddleware`, CrewAI's `install()`, and TypeScript's\n  `withLuluAds` (matching the FastMCP `LuluAdsMiddleware`, which already\n  had this). Also: FastMCP's `LuluAdsMiddleware` and LangChain's\n  `LuluAdsAgentMiddleware` now additionally warm the **async** connection\n  pool their `await`ed `sponsored_slot()` traffic actually uses — the\n  construction-time warm-up above only ever touched the sync client, a\n  separate pool the async path never touches. `LuluAds.async_warm_up()`\n  is fired once per instance from a real framework lifecycle hook on the\n  live serving event loop (FastMCP's `on_initialize`, LangChain's\n  `abefore_agent`), since a background thread can't safely pre-warm a\n  connection meant for a different event loop. Gated by the same\n  `auto_warm_up` flag as the sync warm-up (this async path is Python-only —\n  TypeScript's `autoWarmUp` only ever had one pool to gate). This is the fix\n  that closes the cold-start gap for `dali-mcp` in production, which\n  consumes the async path. Short-TTL (default 45s) success-only cache in\n  both base clients, keyed on resolved category or a hash of the prompt\n  text. Corrected documentation: the real default timeout is 800ms (fast\n  path) / 3000ms (classify path) adaptive, not a flat 300ms.\n- **0.3.7** — `cliTextMode` (opt-in, off by default): fixes the Claude Code\n  content[]-drop bug for real, but only for tools whose `content[]` already\n  stands on its own without `structuredContent` — live-tested both\n  qualifying and non-qualifying cases, see \"CLI rendering\". Never touches\n  tools with a declared `outputSchema` (would break client-side schema\n  validation, confirmed via `fastmcp.exceptions.ToolError`).\n- **0.3.6** — automatic connection warm-up on `LuluAdsMiddleware` construction\n  (`auto_warm_up`, on by default): a genuinely cold first tool call measured\n  804ms against the 800ms fast-path default — right at the ceiling, not\n  under it. `LuluAds` itself still never auto-warms (a network call as a\n  constructor side effect is surprising in a general-purpose client), but\n  the middleware is the \"one line, zero config\" promise, so it warms itself.\n- **0.3.5** — fixed a hardcoded 300ms default `timeout_ms` on\n  `LuluAdsMiddleware` that silently dropped real, fillable ads on real\n  network latency — every test in the suite used an instant mock transport,\n  which is exactly why this shipped unnoticed. Default is now `None`,\n  deferring to `LuluAds`'s own conditional 800ms/3000ms default.\n- **0.3.4** — CLI card gets rounded corners and a \"via Lulu Ads\" footer\n  (Unicode box-drawing only — a live test against Claude Code confirmed it\n  strips raw ANSI color escapes from tool output before the model sees\n  them, so color was never on the table). Also live-tested and explicitly\n  rejected dropping `structuredContent` to force `content[]` through: it\n  does make the card arrive, but the model then flags it as suspected\n  prompt injection and warns the user off it — worse than the status quo,\n  where the plain field still gets surfaced honestly even without the\n  card. See \"CLI rendering\" for the full writeup.\n- **0.3.3** — CLI-adaptive rendering: `LuluAdsMiddleware` / `withLuluAds` detect\n  known CLI clients via the MCP `clientInfo.name` sent at `initialize`\n  (currently: `claude-code`, verified live) and append a bordered plain-text\n  card to `content[]` for them, in addition to the plain field — terminals\n  have no widget surface, so this is the CLI-safe equivalent of the MCP Apps\n  widget above. Still just data; see \"CLI rendering\" for the disclosed known\n  limitation on some clients' `content[]` forwarding.\n- **0.3.0** — `register_sponsored_widget()` / `registerSponsoredWidget()` gain\n  a `logo` option: fetched server-side at registration time and inlined into\n  the widget as a `data:` URI, so it renders under the widget sandbox's CSP\n  (`img-src 'self' data: <resourceDomains>`) with no `resourceDomains` config\n  needed on your part — a raw remote logo URL would otherwise be silently\n  dropped, with no error anywhere. A bad/unreachable logo never breaks\n  registration; the card just renders without one. TypeScript's\n  `registerSponsoredWidget()` is now `async` (it may need to fetch the logo\n  before returning) — add `await` at existing call sites.\n- **0.2.0** — `register_sponsored_widget()` (Python: `lulu_ads.widget`, now also\n  TypeScript: `lulu-ads/widget`, official MCP SDK): registers a real rendered\n  MCP Apps UI sponsored card on your server (not just the plain JSON field),\n  handling Claude's undocumented iframe-domain requirement and the\n  `ui/notifications/initialized` handshake for you. Generalizes the fix\n  verified live on `dali.getlulu.dev/mcp` against\n  [ext-apps#671](https://github.com/modelcontextprotocol/ext-apps/issues/671).\n  Both SDKs produce byte-identical `_meta.ui.domain` values for the same\n  endpoint URL.\n- **0.1.1** — persistent HTTP clients in the Python SDK (per-call client\n  construction could burn the entire slot budget on CPU-constrained\n  containers; clients are now created once per `LuluAds` instance and reused\n  with keep-alive). Fail-open behavior unchanged.\n- **0.1.0** — initial release: Python + TypeScript clients, FastMCP /\n  LangChain / LangGraph / CrewAI / MCP-TS adapters, suffix helpers, MCP\n  concierge onboarding.\n","readmeFilename":"README.md"}