Feed of x402/L402 services newly listed on 402index.io within a recency window (candidate #8, manual
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
Feed of x402/L402 services newly listed on 402index.io within a caller-specified recency window. NEXUS
candidate #8 -- manual build, not FORGE-generated, same manual-Cloud-Run-asset pattern as candidates #3
(agent-verification-api), #4 (url-metadata-api) and #6 (document-conversion-api).
POST /new-x402-listings {"window_hours": 24, "protocol": null, "category": null, "payment_network": null}
-- services registered on 402index.io within the window (1-168h, default 24). $0.01/call.get_new_x402_listings at /mcp, same params -- currently free, see "Known limitations".GET /health, GET /.well-known/agent-card.json, GET /openapi.json (has x-payment-info),
GET /.well-known/402index-verify.txt (402index claim verification file).Originally built and measured on Base Sepolia testnet. Cut over to Base mainnet: x402 settlement moved to
the CDP facilitator (create_facilitator_config(), same swap already applied to
ws/live-entity-verification/erc8004-agent-liveness/onchain-activity-index/x402-receipt-verifier),
and the payto wallet moved to NEXUS_X402_PAYTO_ADDRESS (fail-fast env var, no placeholder default,
renamed from X402_WALLET_ADDRESS). CDP_API_KEY_ID/CDP_API_KEY_SECRET and
NEXUS_X402_PAYTO_ADDRESS must be set in Cloud Run before this deploys.
This is not exclusive data. The registration data underneath this asset is 402index.io's own free,
public directory (https://402index.io/api-docs, no auth needed, 100 req/min free tier). Anyone can query
it directly for nothing. This asset's value is entirely in the packaging: polling and paginating the ~96k+
entry catalog so a buyer doesn't have to, merging in 402index's own recency feed for freshness, deduping,
and filtering to a caller's window/protocol/category/payment-network. This disclosure is not just in this
README -- it's baked into the product itself: every response includes a note field stating it plainly, and
the agent-card's protocol_note repeats it, so a buyer never has to dig for it.
The task brief's premise cited a prior-session figure of "~7,595 total services" on 402index.io. A real
curl https://402index.io/api/v1/services?limit=5 at the start of this session showed "total": 96093 --
the catalog grew roughly 12x since that check. registered_at is real and populated on every entry sampled.
Two upstream mechanisms were verified live, each with a real limitation neither the task brief nor
402index's own docs fully surfaced:
GET /api/v1/services (paginated, limit/offset, max 200/page) has NO sort-by-date or date-range
filter -- sort only accepts name/price/latency/uptime/reliability (checked /api-docs
directly). A window query can only be answered by walking the entire catalog and filtering
client-side -- there is no cheaper server-side path. At the real current size that's ~481 pages, not the
~40 pages the ~7,595 figure would have implied.GET /feed.xml?type=new is real, RSS 2.0, and IS already recency-sorted (pubDate) -- and is on
402index's own documented rate-limit-exempt list. But it's capped to a fixed item count: a live fetch
during this session returned exactly 90 items spanning only ~3 hours, despite the docs describing
type=new as "services added in the last 7 days". At current registration velocity it does not cover a
7-day (or even a 24h, at peak velocity) window by itself.Neither source alone honestly satisfies the product's advertised window range. Decision: proceed, using
both. See the main.py module docstring and "Architecture" below for how they're combined. This is the
kind of real, current-data discrepancy CLAUDE.md SS3 asks to surface rather than build past silently -- so it's
recorded here rather than only in a chat transcript.
asyncio task (started in FastAPI's lifespan, not blocking startup) walks the full
/api/v1/services catalog every NEXUS_CATALOG_REFRESH_SECONDS (default 600s/10min), paced at
0.65s/request (~92 req/min sustained, safety margin under 402index's 100 req/min free-tier cap). Results
are cached in memory (_catalog_cache), keyed by service id. A full walk at the current catalog size is
~481 pages / ~5.2 minutes -- entirely a background-task cost, never inline in a buyer's request./feed.xml?type=new live (rate-limit-exempt, ~1 request, cheap)
and merges it into whatever the background walk has cached, catching anything registered after the last
completed walk. Cache entries win on id conflict (richer fields); feed entries only fill gaps.The brief suggested "a short in-memory cache (5-10 min TTL)". Implemented instead: a continuously-running background loop that re-walks every 10 minutes and replaces the cache, with buyer requests always reading whatever is currently cached (never triggering a walk themselves). A literal on-demand-when-stale TTL would mean whichever buyer request happens to arrive right after expiry pays $0.01 and then blocks for up to ~5 minutes waiting on a fresh 481-page walk -- unacceptable buyer experience found during design, not retroactively. The background-loop shape gets the same "don't hammer 402index.io" goal without ever making a paying caller wait on the walk.
min-instances=0 means a fresh container starts with an empty cache. The first request(s) after any period
of inactivity get catalog_walk.status: "cold_fallback_feed_only" -- results are limited to whatever
/feed.xml?type=new currently holds (recently observed to span only a few hours), not the full requested
window. This is disclosed in the response's own note field, not hidden. Once the background task's first
walk completes (~5 minutes after container start), subsequent requests get status: "warm" with full
catalog-walk coverage. Genuinely mitigated, not solved -- see "Known limitations".
Speculative niche per the product owner (explicit direction, not a data-driven conclusion) -- same low tier
as url-metadata-api/document-conversion-api's $0.01-$0.02, not agent-verification-api's $0.35 signal
tier. No paid third-party API cost, pure CPU/memory + one free upstream fetch per call.
Reviewed across 4 lenses before first deploy, tested against the real live 402index.io API (not mocked) at each step. Real findings and fixes:
window_hours/protocol/category/payment_network) is never interpolated
into the upstream 402index.io request -- the catalog walk and feed fetch use fixed, hardcoded query params
only (limit/offset/sort/order and type=new respectively); caller filters apply exclusively to
the already-fetched, normalized in-memory result. Verified upstream JSON/XML is never trusted blindly:
every field read via .get() with type checks (_normalize_catalog_item returns None on a malformed
entry rather than raising), malformed XML from /feed.xml is caught (ET.ParseError) rather than
crashing the request, and a single malformed <item> in the feed doesn't drop the rest of it. All
confirmed with real malformed-input tests (None, missing id, wrong types, garbage timestamp, truncated
XML) during this session, not just read as correct.complete: bool internally but
never surfaced it in the response -- a caller had no way to tell a background walk that hit the
_WALK_MAX_WALL_SECONDS wall-clock cap (bailing out with a partial result) from one that finished cleanly,
even though both report status: "warm". Fixed: added catalog_walk.walk_complete to the response.
Pagination itself (offset advance, stop-at-total, wall-cap bailout) was verified against the real live API
with a bounded test walk (8 real pages, offset advancing correctly, graceful bailout logged) -- no silent
truncation, no infinite loop.document-conversion-api/url-metadata-api are built.protocol_note, and
-- more directly, so no buyer has to fetch the agent-card at all -- every single API response's own note
field. Cold-cache degraded coverage (cold_fallback_feed_only) is also disclosed in that same note
field with plain language about what it means for the requested window, not just a status enum a caller
has to already know how to interpret.No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/new-x402-listings-feed)<a href="https://allmcps.com/mcp/new-x402-listings-feed"><img src="https://allmcps.com/api/badge/new-x402-listings-feed?style=directory" alt="New X402 Listings Feed on AllMCPs" /></a>