Rehearse it: ?dryRun=1
Add ?dryRun=1 to the publish call and FiatDock runs the entire publish path — field validation, the address-poisoning scan, the publish gate and a live probe of your server — then tells you exactly what a real publish would answer, and creates nothing. It hands back your server's own tool names too, so filling in mcpTool becomes a paste instead of a guess. Repeat it as often as you like.
curl -sS -X POST 'https://fiatdock.com/v1/marketplace/services?dryRun=1' -H 'content-type: application/json' -H 'X-Seller-Key: YOUR_SELLER_KEY' -d '{"name":"Acme Weather MCP","mcpEndpoint":"https://mcp.acme-weather.com","mcpTool":"get_weather","priceUsd":0.01,"category":"data"}'
Click the block to select it, then copy — and swap in your own key and fields; the values above are the same example the form's “Fill an example” button uses, so as written it will report that mcp.acme-weather.com cannot be reached. Signed in here rather than using a key? The same ?dryRun=1 works from your browser session.
It is a rehearsal, not a way past the gate. The real publish applies exactly the same refusals — a dry run only lets you find them for free, before the listing exists.
Who will see it
The moment you publish, your listing is in the catalog JSON, the browse grid and the search_services MCP tool; a callable paid listing is also advertised in llms.txt, /.well-known/x402 and the sitemap. Be clear-eyed about who is looking: most traffic on those surfaces today is automated — crawlers, uptime monitors and x402/MCP indexers discovering the catalog. That is distribution, not a queue of buyers.
Non-custodial: buyers' agents pay you directly via x402. FiatDock never holds your funds.