x402 Bazaar Listing Monitor

com.acjlabs由 acjlabs.com 發布官方發布者v0.1.0更新於 Oct 27, 2026

Checks x402 Bazaar resource listings against the public discovery catalog and flags drops.

發布方自己的服務:Catalog Attribute Normalizer

已驗證Streamable HTTP可網頁執行金融安全與監控

概覽

AI 產生的概覽

遠端 MCP 伺服器,用來檢查 x402 賣家的資源是否仍出現在 Coinbase CDP 公開的 Bazaar 探索目錄中。

可以做什麼
  • 檢查上架狀態:給定 payTo 位址與最多 200 個資源 URL,與即時的公開 Bazaar 探索目錄做差異比對。
  • 回傳逐項結果:每個資源以 JSON 標示為已上架或缺失。
  • 適用於任意 payTo 與資源組合,無論該賣家是否已在託管服務中註冊。
  • 重現服務端每六小時排程輪詢所用的同一套依賣家差異比對,但可依需求即時執行。
適用情境
適合 x402 賣家在懷疑資源被無聲下架後,或準備向 CDP 支援升級問題前,依需求快速確認其付費資源是否仍可在 Bazaar 目錄中被找到。
執行需求
遠端 streamable HTTP 端點,無需註冊、API 金鑰或標頭。工具參數為 0x 開頭的 40 位十六進位 payTo 位址,以及 1 至 200 個 http(s) 資源 URL。需要能連線至該託管端點的網路,並受依 IP 的速率限制。
安裝前請注意
此檢查僅是對公開目錄的唯讀比對,因此送出的 payTo 位址與資源 URL 屬於公開資訊。託管服務的排程輪詢、Webhook 告警與付費方案屬於另外的 HTTP API 功能,不在此工具範圍內;服務實作不開源,且處於早期發布階段。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 x402 Bazaar Listing Monitor,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.acjlabs%2Fx402-listing-monitor/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "x402-bazaar-listing-monitor": {
      "type": "http",
      "url": "https://x402-listing-monitor.acjlabs.com/mcp"
    }
  }
}

README

x402 Bazaar Listing Monitor

Scheduled watchdog for x402 sellers: polls Coinbase CDP's public Bazaar discovery catalog for the resources you register and alerts when one drops out or comes back — instead of finding out from a revenue dip days later.

Sellers who settle real x402 payments have no reliable way to confirm their resources stay discoverable in CDP's Bazaar catalog. The discovery API has a recurring, publicly-reported class of bug where a resource silently stops appearing despite confirmed settlements — sellers currently catch this only by manually re-running GET /discovery/merchant?payTo=<address> on their own schedule.

This service automates that check: register your payTo address and the resource URLs you serve, and a scheduled poll diffs them against the live discovery catalog. State changes are recorded with timestamps, so you have a durable history you can cite if you need to escalate to CDP support.

MCP server

Endpoint: https://x402-listing-monitor.acjlabs.com/mcp (streamable HTTP)

One tool — no signup, no API key:

check_listing_health

Checks whether a seller's x402 Bazaar resources are currently listed under a given payTo address in the public discovery catalog. Runs the same per-seller diff as the scheduled poller, on demand, for any payTo/resources pair — registered here or not.

parametertypenotes
payTostring0x-prefixed, 40 hex characters
resourcesstring[]1–200 http(s) URLs

Returns each resource flagged as listed or missing, as JSON.

HTTP API

Base URL: https://x402-listing-monitor.acjlabs.com

methodpathpurpose
GET/healthliveness check
POST/registerregister a seller for scheduled polling
GET/statusread your own current status and recent alerts
POST/pollrun a poll immediately (counts only, see below)

POST /register

json
{  "sellerId": "your-slug",  "payTo": "0x0000000000000000000000000000000000000000",  "resources": ["https://api.example.com/your-resource"],  "alertWebhookUrl": "https://example.com/hook"}
  • sellerId — 2–64 characters: letters, digits, -, _
  • payTo — 0x-prefixed, 40 hex characters
  • resources — 1–200 http(s) URLs, no duplicates
  • alertWebhookUrl — optional. A public https URL; alerts on your plan are POSTed to it. IP-literal, loopback, .internal/.local hosts and URLs carrying credentials are rejected.
  • alertEmail — optional, and stored but not yet used: email delivery is not enabled (see Status).

Both contact fields are optional and registration succeeds without either. Supply neither and nothing is pushed to you — use GET /status below to check on your listings yourself.

Resources are watched by self-declaration: the service checks what you tell it to check. A sellerId that already exists is rejected rather than overwritten.

GET /status

GET /status?sellerId=your-slug&payTo=0x0000000000000000000000000000000000000000

Returns your own record: every resource you registered with its current status (listed, missing, payTo-mismatch, or null if no poll has reached it yet), its consecutive-miss count and last-checked timestamp, plus your most recent alerts and whether each was delivered.

Both sellerId and payTo are required and must match your registration; anything else returns 404. This is a knowledge check, not authentication — the data it returns is a diff against a public catalog. Your alertEmail and alertWebhookUrl are never echoed back, only reported as set or not set.

POST /poll

Runs the same poll the six-hourly cron runs, immediately, for every registered seller. Takes no body and returns counts only:

json
{ "polled": 2, "ok": 2, "failed": 0 }

It reports nothing about any individual seller. This endpoint is unauthenticated, so anything it returned would be public — read your own state with GET /status instead.

Only one poll runs at a time. If a poll is already in progress — whether someone else triggered it or the six-hourly cron did — this returns 409 and does no work:

json
{ "status": "already_running" }

That is not an error to retry through: the poll you asked for is already happening, and retrying cannot make its alerts arrive sooner or arrive twice — the lock is what stops two concurrent polls from sending you the same alert. It is a guarantee against duplication, not a delivery guarantee: an alert is always recorded before it is sent, and if the send does not land it stays recorded and undelivered rather than being retried. Wait, then read GET /status, which shows each recent alert and whether it was delivered.

Per-IP rate limits apply to /register, /status, /poll and MCP tool calls.

Webhook payload

json
{  "service": "x402-listing-monitor",  "sellerId": "your-slug",  "checkedAt": "2026-08-07T00:00:00.000Z",  "alerts": [    {      "type": "listing-dropped",      "resource": "https://api.example.com/your-resource",      "detail": "was listed, now missing from discovery",      "message": "⚠️ Listing dropped: https://api.example.com/your-resource — was listed, now missing from discovery"    }  ]}

checkedAt is the poll's timestamp, matching created_at on the same alerts in GET /status. Any 2xx counts as delivered. Redirects are not followed — a 3xx is treated as a failed delivery, so register the final URL. Failed deliveries are not retried; the alert stays in your history marked undelivered.

Polling and alerts

The scheduled poll runs every 6 hours. Each run diffs your registered resources against the live discovery catalog and records state changes with timestamps — a history, not just a point-in-time answer.

alert typetier
resource dropped out of the catalogfree
still missing after an indexing-lag grace periodfree
resource recoveredfree
registered payTo missing from the catalog entrypaid
catalog quality/rank droppaid

"Still missing" fires once per miss streak, from the first poll at which a resource has been absent for three or more consecutive polls — long enough that indexing lag is ruled out. It does not repeat every six hours while the resource stays missing; the current state is always readable from GET /status.

Three consecutive misses is the earliest it can fire, not the only point at which it can. A resource that is already past three consecutive misses and has not yet been alerted for that streak raises its one alert on the next poll. If the resource recovers and later drops out again, that is a new streak and it alerts again.

Paid tiers also tighten the polling interval.

Status

Early release. The service is live and polling, and the recorded alert history is authoritative for what it has observed.

  • Webhook delivery is enabled. Register an https alertWebhookUrl and alerts on your plan are POSTed to it when a check produces one.
  • Email alerts are not enabled yet. alertEmail is stored against your registration and nothing is sent to it.
  • No contact is required. GET /status gives you the same information on demand.

Source availability & support

This repository hosts the documentation for the hosted service. The service implementation is not open source. Bug reports and feature requests are welcome in this repo's Issues; you can also reach us at [email protected].

Source availability & support

This repository hosts the documentation for the hosted service. The service implementation is not open source. Bug reports and feature requests are welcome in this repo's Issues; you can also reach us at [email protected].

來源:README.md,提交 fe0213b

工具

1

check_listing_health

Checks whether a seller's x402 Bazaar resources are currently listed under the given payTo address in the public discovery catalog. Flags each resource as listed or missing — the same per-seller diff the registered poller runs on a schedule, run once on demand for a payTo/resources pair whether or not it has been registered with this service.

輸入參數payTo必填resources必填

版本歷史

1
  1. v0.1.0最新Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。

其他 Acjlabs 整合