From 31355374b1edf0f841f9d4eff9e591715b499ba3 Mon Sep 17 00:00:00 2001 From: Marco Pesani Date: Sun, 1 Mar 2026 00:16:37 +0100 Subject: [PATCH] feat(directory): add website and API docs links to merchant cards Add optional website and apiDocs URL fields to the merchant schema and populate them for all 25 curated merchants. Display as Globe and BookOpen icon links in the card header, opening in new tabs. Also include the new fields in the MCP browse-directory tool output. Co-Authored-By: Claude Opus 4.6 --- data/merchants.json | 39 ++++++++++++++++++++++ src/components/merchant-card.tsx | 36 +++++++++++++++++++- src/lib/mcp/tools/x402-browse-directory.ts | 2 ++ src/lib/merchants/types.ts | 2 ++ 4 files changed, 78 insertions(+), 1 deletion(-) diff --git a/data/merchants.json b/data/merchants.json index abdef4e..01796c7 100644 --- a/data/merchants.json +++ b/data/merchants.json @@ -5,6 +5,8 @@ "description": "Portfolio tracking, token pricing, and DeFi analytics via x402 micropayments.", "category": "service", "chains": ["base"], + "website": "https://zapper.xyz", + "apiDocs": "https://protocol.zapper.xyz/docs/api/", "endpoints": [ { "url": "https://public.zapper.xyz/x402/token-price", @@ -39,6 +41,8 @@ "description": "Smart money netflow data tracking institutional and whale movements.", "category": "service", "chains": ["base", "solana"], + "website": "https://www.nansen.ai", + "apiDocs": "https://docs.nansen.ai/", "endpoints": [ { "url": "https://api.nansen.ai/api/v1/smart-money/netflow", @@ -53,6 +57,8 @@ "description": "Crypto market data API with pay-per-use pricing — token prices and on-chain data for 28M+ tokens.", "category": "service", "chains": ["base", "solana"], + "website": "https://www.coingecko.com", + "apiDocs": "https://docs.coingecko.com/docs/x402", "endpoints": [ { "url": "https://pro-api.coingecko.com/api/v3/x402/simple/price", @@ -72,6 +78,8 @@ "description": "Pay-per-use headless browser sessions for AI agents. No API keys — just pay with USDC on Base and connect.", "category": "service", "chains": ["base"], + "website": "https://www.browserbase.com", + "apiDocs": "https://docs.browserbase.com/integrations/x402/introduction", "endpoints": [ { "url": "https://x402.browserbase.com/browser/session/create", @@ -85,6 +93,8 @@ "description": "Account-free IPFS uploads and retrievals using x402 crypto payments. Pin public or private files with USDC on Base.", "category": "service", "chains": ["base"], + "website": "https://pinata.cloud", + "apiDocs": "https://docs.pinata.cloud/files/x402/intro", "endpoints": [ { "url": "https://402.pinata.cloud/v1/pin/public", @@ -102,6 +112,8 @@ "description": "Farcaster social data API — casts, profiles, channels, and social graph. Pay per request with USDC on Base, no API key needed.", "category": "service", "chains": ["base"], + "website": "https://neynar.com", + "apiDocs": "https://docs.neynar.com/", "endpoints": [ { "url": "https://api.neynar.com/v2/farcaster/feed", @@ -116,6 +128,8 @@ "description": "Pay-as-you-go AI gateway providing 30+ LLMs (OpenAI, Anthropic, Google, DeepSeek, xAI) via x402. No API keys — wallet is your auth.", "category": "service", "chains": ["base"], + "website": "https://blockrun.ai", + "apiDocs": "https://blockrun.ai/docs", "endpoints": [ { "url": "https://blockrun.ai/api/v1/chat/completions", @@ -130,6 +144,8 @@ "description": "Blockchain data API across 100+ chains — balances, NFTs, transactions, DEX data, pricing, and security. Pay per call with USDC.", "category": "service", "chains": ["base"], + "website": "https://goldrush.dev", + "apiDocs": "https://goldrush.dev/blog/goldrush-x402-blockchain-data-for-agents/", "endpoints": [ { "url": "https://x402.goldrush.dev/v1/x402/endpoints", @@ -172,6 +188,7 @@ "description": "On-chain analytics, DeFi yield discovery, and crypto news aggregation.", "category": "service", "chains": ["base"], + "website": "https://httpay.xyz", "endpoints": [ { "url": "https://httpay.xyz/api/gas-tracker-advanced", @@ -196,6 +213,8 @@ "description": "AI-powered X/Twitter search agent for social media intelligence.", "category": "service", "chains": ["base"], + "website": "https://402box.io", + "apiDocs": "https://402box.io/docs", "endpoints": [ { "url": "https://agents.402box.io/x_searcher", @@ -210,6 +229,8 @@ "description": "Pay-per-request web scraping with automatic proxy rotation, JS rendering, and premium domain handling. No signup, no API keys.", "category": "service", "chains": ["base"], + "website": "https://www.payperscrape.com", + "apiDocs": "https://www.payperscrape.com/how-it-works", "endpoints": [ { "url": "https://www.payperscrape.com/api/scrape", @@ -224,6 +245,7 @@ "description": "Pay-per-request AI gateway with 200+ OpenAI-compatible models, batch USDC payments, and live Uniswap V3 swap quotes.", "category": "service", "chains": ["base"], + "website": "https://gateway.spraay.app", "endpoints": [ { "url": "https://gateway.spraay.app/api/v1/chat/completions", @@ -242,6 +264,8 @@ "description": "AI-powered blockchain analytics via x402 micropayments — on-chain token data, liquidity pools, and AI-generated market analysis powered by Bitquery.", "category": "service", "chains": ["base"], + "website": "https://emc2ai.io", + "apiDocs": "https://emc2ai.io/docs", "endpoints": [ { "url": "https://emc2ai.io/x402/bitquery/latest-pairs", @@ -256,6 +280,8 @@ "description": "Production-grade real-time speech-to-text for AI agents with VAD, noise reduction, hallucination filtering, and 99+ language support.", "category": "service", "chains": ["base"], + "website": "https://www.dtelecom.org", + "apiDocs": "https://docs.dtelecom.org/", "endpoints": [ { "url": "https://x402stt.dtelecom.org/v1/session", @@ -275,6 +301,7 @@ "description": "AI-powered crypto risk intelligence — check any token for rug pulls, honeypots, and scams. 1.1M+ historical scans with LLM forensic analysis.", "category": "service", "chains": ["base", "solana"], + "website": "https://cryptorugmunch.app", "endpoints": [ { "url": "https://cryptorugmunch.app/api/agent/v1/check-risk", @@ -314,6 +341,8 @@ "description": "Bitcoin Ordinals explorer and API — query inscriptions, runes, rare sats, and inscribe content on Bitcoin via x402.", "category": "service", "chains": ["base"], + "website": "https://ordiscan.com", + "apiDocs": "https://ordiscan.com/docs/api", "endpoints": [ { "url": "https://api.ordiscan.com/v1/inscriptions", @@ -340,6 +369,7 @@ "description": "61 pay-per-call APIs for AI agents — 30 LLMs, image generation, code execution, audio transcription, crypto data, and more.", "category": "service", "chains": ["base"], + "website": "https://x402engine.app", "endpoints": [ { "url": "https://x402engine.app/api/image/fast", @@ -365,6 +395,7 @@ "description": "Fetch metadata and content summaries from any web page via x402 micropayment.", "category": "service", "chains": ["base"], + "website": "https://minifetch.com", "endpoints": [ { "url": "https://minifetch.com/api/v1/x402/extract/url-metadata", @@ -378,6 +409,8 @@ "description": "A unified API to fund your account via x402 and tip anyone on the internet.", "category": "service", "chains": ["base"], + "website": "https://grove.city", + "apiDocs": "https://grove.city/docs", "endpoints": [ { "url": "https://api.grove.city/v1/tip", @@ -395,6 +428,7 @@ "description": "Publishing platform for AI agents with per-read micropayments via x402. Agents register, publish, and read paywalled content.", "category": "service", "chains": ["base"], + "website": "https://postera.dev", "endpoints": [ { "url": "https://postera.dev/api/agents/verify", @@ -414,6 +448,8 @@ "description": "AI agents can get prepaid cards and make Venmo/PayPal payments with a single API call. Pay with USDC on Base via x402.", "category": "service", "chains": ["base"], + "website": "https://laso.finance", + "apiDocs": "https://laso.finance/api-reference/introduction", "endpoints": [ { "url": "https://laso.finance/auth", @@ -438,6 +474,8 @@ "description": "High-performance REST API turning complex zero-knowledge proof workflows into a pay-as-you-go service via x402.", "category": "service", "chains": ["base"], + "website": "https://kurier.xyz", + "apiDocs": "https://kurier.xyz/docs", "endpoints": [ { "url": "https://api.kurier.xyz/api/v1/submit-proof", @@ -457,6 +495,7 @@ "description": "Returns any wallet's token holdings including values, prices, and NFTs across Ethereum and Solana.", "category": "service", "chains": ["base", "ethereum", "solana"], + "website": "https://invy.bot", "endpoints": [ { "url": "https://invy.bot/api/holdings", diff --git a/src/components/merchant-card.tsx b/src/components/merchant-card.tsx index 8d5599b..5ac4d35 100644 --- a/src/components/merchant-card.tsx +++ b/src/components/merchant-card.tsx @@ -1,7 +1,13 @@ "use client"; import { useState } from "react"; -import { ChevronDown, ChevronUp, ExternalLink } from "lucide-react"; +import { + ChevronDown, + ChevronUp, + ExternalLink, + Globe, + BookOpen, +} from "lucide-react"; import type { Merchant, Pricing } from "@/lib/merchants/types"; import { Card, @@ -45,6 +51,34 @@ export function MerchantCard({ merchant }: { merchant: Merchant }) { {merchant.description} + {(merchant.website || merchant.apiDocs) && ( +
+ {merchant.website && ( + e.stopPropagation()} + className="text-muted-foreground hover:text-foreground transition-colors" + > + + + )} + {merchant.apiDocs && ( + e.stopPropagation()} + className="text-muted-foreground hover:text-foreground transition-colors" + > + + + )} +
+ )}
diff --git a/src/lib/mcp/tools/x402-browse-directory.ts b/src/lib/mcp/tools/x402-browse-directory.ts index 17bbbe0..dd2abe8 100644 --- a/src/lib/mcp/tools/x402-browse-directory.ts +++ b/src/lib/mcp/tools/x402-browse-directory.ts @@ -52,6 +52,8 @@ export function registerX402BrowseDirectory( ...(e.pricing && { pricing: e.pricing }), })), source: m.source, + ...(m.website && { website: m.website }), + ...(m.apiDocs && { apiDocs: m.apiDocs }), })); return jsonContent({ count: entries.length, merchants: entries }); diff --git a/src/lib/merchants/types.ts b/src/lib/merchants/types.ts index 20b460f..e59f57e 100644 --- a/src/lib/merchants/types.ts +++ b/src/lib/merchants/types.ts @@ -24,6 +24,8 @@ export const MerchantEntrySchema = z.object({ category: z.enum(["service", "infrastructure", "client", "facilitator"]), chains: z.array(z.string()).min(1), endpoints: z.array(EndpointSchema).min(1), + website: z.url().optional(), + apiDocs: z.url().optional(), }); export type MerchantEntry = z.infer;