关于 Agent Bazaar
Agent Bazaar 是面向 AI Agent 的发现市场,收录 API、MCP 工具、数据集和支持 x402 付费的服务。提供者无需账户或身份验证即可发布,客户端可通过兼容 Coinbase Bazaar 发现接口的 API 搜索目录。
主要功能
- 01免账户提交清单
- 02搜索和筛选资源
- 03排序发现与目录统计
- 04A2A Agent 卡片注册表
- 05资源与提供者详情页
适用场景
- 01无需注册发布 x402 服务
- 02按网络或价格查找付费 API
- 03查询特定提供者的资源
MCP 相关
Agent Bazaar 通过 JSON-RPC/Streamable HTTP 将目录作为 MCP 服务公开。工具包括 search_resources、get_resource、get_pricing、discover_provider、list_resources 和 get_stats。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://bazaar.saylorinnovations.com/mcpclaude mcp add --transport http saylorinnovations-agent-bazaar https://bazaar.saylorinnovations.com/mcp{"mcpServers":{"saylorinnovations-agent-bazaar":{"type":"http","url":"https://bazaar.saylorinnovations.com/mcp"}}}在 Cursor 中打开{"servers":{"saylorinnovations-agent-bazaar":{"type":"http","url":"https://bazaar.saylorinnovations.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"saylorinnovations-agent-bazaar":{"type":"http","url":"https://bazaar.saylorinnovations.com/mcp"}}}{"mcpServers":{"saylorinnovations-agent-bazaar":{"serverUrl":"https://bazaar.saylorinnovations.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
9| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| asset | string | 否 | |
| limit | integer | 否 | |
| payTo | string | 否 | |
| query | string | 否 | 自由文本关键词搜索 |
| scheme | string | 否 | |
| network | string | 否 | 例如:eip155:8453、solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp |
| maxUsdPrice | number | 否 |
详细介绍
Agent Bazaar
由 Saylor Innovations 创建
一个开放、无需许可的 AI Agent 市场和发现层,涵盖 API、MCP 工具、数据集以及可通过 x402 付费的服务,让自主软件能够查找、评估并按请求付费。为保持连续性,仓库/软件包名称仍为 open-x402-bazaar;产品名称是 Agent Bazaar。
Coinbase 自家的 x402 Bazaar 很出色,但要在其中上架,必须拥有经过验证的 Coinbase Developer Platform 账户;某些账户注册路径还可能需要进行企业/KYC 验证。对于一个旨在实现无需许可的 Agent 间商务交易的协议来说,这确实是一道门槛。本项目尝试提供一种替代方案:任何人只要拥有有效的 x402 清单,就可以在这里上架,无需账户,也无需进行任何身份验证。
本项目旨在与 Coinbase Bazaar 的发现 API 在线路层面兼容,因此任何已知如何查询 CDP Bazaar 的现有 x402 客户端库,只需更改配置即可改用本项目,无需重写。
访问地址:https://bazaar.saylorinnovations.com
状态
已在 bazaar.saylorinnovations.com 上线,运行于 Cloudflare Pages + D1。提交、验证、存储、排名发现、资源/提供者详情页面和基本反垃圾机制均已正常运行。目录通过完整镜像 Coinbase 的公开 CDP Bazaar,并加入 Saylor Innovations 自己的真实端点完成初始化——详见下文。
从 Coinbase 的 Bazaar 导入种子数据
Coinbase 的发现 API 本身无需 API 密钥或账户即可读取,但要在其中上架则需要。因此,本项目通过 scripts/import-cdp-bazaar.mjs 镜像整个公开目录(上次导入时约有 ~15,600 个资源,分布在 ~2,000 个主机上),并在此基础上支持无需许可的上架:
- 所有镜像条目都会在内部标记为
source: 'cdp-mirror'。 - 任何所有者都可以随时通过
POST /submit提交自己的清单;自行提交的条目始终会覆盖该主机的镜像副本,并标记为source: 'submitted'。导入器不会触碰已认领的主机。 - 镜像资源会将 Coinbase 自己的 30 天使用统计(
calls30d、uniquePayers30d、lastCalledAt)作为每个资源的quality字段。这是一项信任信号;由于任何人都可以随意上架,它在这里比在经过 KYC 验证的目录中更为重要。
定期重新运行镜像导入,以获取 Coinbase 新收录的资源(可安全重复运行——见脚本头部注释):
npm run seed:cdp-bazaar # generates + applies against local D1
npm run seed:cdp-bazaar:remote # generates + applies against production D1
Saylor Innovations 自有条目
scripts/import-saylor-official.mjs 会将 Saylor Innovations 真实、在线的 x402 端点(研究/安全/数据工具,以及 Solana 链上情报,均由 saylorinnovations.com 提供服务)作为已验证的资源(source: 'submitted')列出——其信任等级与自行提交的条目相同。由于 Saylor Innovations 运营着这个 Bazaar,这些资源由其直接导入。这里没有任何虚构内容:定价、描述和 accepts[] 均来自在线的 /api/services 端点和公开清单 saylorinnovations.com/.well-known/x402.json。
npm run seed:saylor-official # local
npm run seed:saylor-official:remote # production
提供者如何实际获得付款
x402 付款通过点对点方式结算——由 Agent 直接向 payTo 钱包付款——绝不经过这个 Bazaar。因此,在这里上架不会改变你如何获得付款,只会改变有多少 Agent 能找到需要付款的端点。目前,交易本身不收取平台费用;我们的计划是保持发现功能免费,并在合适时通过精选推荐位或已验证提供者工具等可选服务盈利,而不是对支付路径收费。
列表收录方式
无需注册。对你自己的 .well-known/x402.json(或等效)清单执行 POST 请求:
curl -X POST https://<this-site>/submit \
-H "content-type: application/json" \
-d '{"manifestUrl": "https://yoursite.com/.well-known/x402.json"}'
系统会通过 HTTPS 获取清单(并启用 SSRF 防护——在发出任何请求前拒绝私有/内部地址),然后进行验证,并将任何包含已填充 accepts[](scheme + network + payTo)的资源编入索引。重新提交相同的清单 URL 会刷新你的列表;如果该主机之前仅存在于 Coinbase 镜像中,还会认领该主机。提交按 IP 限流(每小时 20 次,每天 60 次)——每次尝试都会计入,而不仅是成功的尝试,因此失败的探测也无法绕过限制。
注册 A2A Agent
采用相同模式,但结构不同——A2A Agent 卡片包含 skills[] 而非 accepts[],且没有固有的支付模式,因此会存储在独立的 agent_cards 表中,而不会被强行套用资源结构:
curl -X POST https://<this-site>/submit-agent \
-H "content-type: application/json" \
-d '{"agentCardUrl": "https://youragent.example.com/.well-known/agent-card.json"}'
至少需要提供 name;若存在 skills[]、provider、protocolVersion 和 documentationUrl,则会一并存储。SSRF 防护、限流和免账户模式均相同。
发现 API(面向 Agent)
字段名称和结构与 Coinbase 的 CDP Bazaar API 相同,另增加 quality 字段和统计端点:
| 端点 | 用途 |
|---|---|
GET /discovery/search?query=&network=&asset=&scheme=&payTo=&urlSubstring=&maxUsdPrice=&limit= | 关键词/筛选搜索。文本查询按相关性排序(FTS5 bm25);仅筛选条件的查询按 30 天调用量排序 |
GET /discovery/resources?limit=&offset=&sort= | 分页列出所有已编入索引的资源。sort=recent 按最新优先排序;默认按 30 天调用量排序 |
GET /discovery/merchant?payTo=<address> | 所有向特定地址付款的资源 |
GET /discovery/facets?limit= | 可用网络、资产、方案、资源类型、提供方、价格区间、存活状态和信任状态的精简计数——可用于选择搜索筛选条件前的参考 |
GET /discovery/stats?full= | 目录总数:列表、资源、accepts、商户、网络数量、调用次数。full=1 会添加按网络/来源划分的明细——这需要全表扫描,因此需选择启用,不会默认计算 |
GET /resources/{slug}.json | 单个资源的完整机器可读记录 |
GET /discovery/agents?query=&limit=&offset= | 搜索/列出 A2A Agent 注册表(其他 Agent 的卡片,不包括 Agent Bazaar 自身) |
GET /agents/{slug}.json | 按提交内容返回完整 A2A Agent 卡片 |
GET /discovery/featured?limit= | 当前精选资源(付费展示,见下文) |
GET /feature?slug=&days={7,30,90} | 可通过 x402 付款:直接向 Agent Bazaar 付款,为已收录资源添加精选展示。见下文“精选展示” |
所有读取端点均无需 API 密钥——与 Coinbase 相同。
面向 Agent 的文档:/llms.txt · /llms-full.txt · /openapi.json · /agents.json · /.well-known/agent-card.json(A2A)。
面向用户的页面
每项资源都有一个永久、可供爬取的服务端渲染 URL——而非仅限客户端的弹窗——旁边还有一个机器可读的 JSON 版本:
| 页面 | 用途 |
|---|---|
/resources/{slug} | 资源详情:描述、定价、accepts[]、架构、curl/JS/Python 示例 |
/providers/{host} | 某个提供方发布的所有资源 |
/agents | 连接 Agent 的快速入门(发现 → 检查 → 付款 → 执行 → 验证),以及已注册 Agent 目录 |
/agents/{slug} | A2A Agent 详情页——技能、提供方、协议版本、卡片 URL |
/publish | 如何以卖家身份发布资源 |
/docs | x402/MCP/A2A 是什么、Agent 如何付款、自托管 |
/guides、/guides/{slug} | 11 篇深入且有代码支撑的指南——/docs 常见问题解答的完整版,以及面向提供方和 Agent 构建者的操作指南。每篇指南都有对应的 .json 版本 |
/categories、/categories/{type} | 按资源类型浏览(由提供方设置后显示——目录中被镜像的大部分资源未设置类型,因此此处内容较少)。.json 版本(/categories/{type}.json?limit=)会将整个集合作为一个数组返回——方便 Agent 一次调用获取“整个指南库”,而非逐个浏览卡片 |
/networks、/networks/{network} | 按 CAIP-2 网络浏览——每项资源都会显示,因为该信息来自 accepts[] |
/protocols、/protocols/{x402,mcp,a2a} | 介绍各协议及 Agent Bazaar 如何使用它们,并显示实时统计数据 |
/mcp | GET:信息页面。POST:通过同一目录提供真正的 MCP 服务(JSON-RPC/Streamable HTTP),包含 search_resources、get_resource、get_pricing、discover_provider、list_resources、get_stats |
收录于
Agent Bazaar 的 MCP 服务已作为 io.github.SaylorInnovations/agent-bazaar 发布到 官方 MCP Registry——这是其他聚合平台(Glama、PulseMCP)拉取数据的权威注册表。仓库根目录下的 server.json 是事实来源;更改后要重新发布,请递增其 version 并运行:
mcp-publisher login github # once per session
mcp-publisher publish
此外,它还被收录在 awesome-x402、awesome-mcp-servers(聚合平台)和 gold-402(市场与发现)中,但这些收录将其视为市场,而非专门的 MCP 服务。
特色展示位
发布资源始终免费——Agent Bazaar 永远不会从任何资源自身的 accepts[] 付款中抽成,包括它未编写的约 15,600 项镜像资源。它直接出售的只有展示位:提供方可以直接向 Agent Bazaar 付款(而不是支付给资源的 payTo),将已发布的资源放入首页的“特色资源”栏,并在其资源页和提供方页面上标记 featured 徽章,展示时长可选 7/30/90 天($2/$6/$15)。付款方式与这里的其他资源相同——GET /feature?slug=&days= 会返回包含 accepts[] 的 402;付款后重试,即可获得 featuredUntil 时间戳。完整操作步骤请参阅 /publish#feature。此功能使用 Saylor Innovations 自行开发的 solana-x402 库实现——详见下文的架构部分。
已验证的 Agent 技能
resource_type: "Skill" — 可下载、以 zip 打包的 Claude-Code 风格技能(包含 SKILL.md 及其支持文件/脚本),由 Agent Bazaar 自己的主机(bazaar.saylorinnovations.com)列出,并由一方提供商验证。源文件位于 skills/;scripts/import-skills.mjs 会将其打包为 zip 并列出,采用与其他导入脚本相同的先 DELETE 后 INSERT 模式。资源的 accepts[] 为空是有意为之——这表示它确实免费,而不是提交验证的疏漏,因为此脚本直接写入 D1,不经过 POST /submit 的清单验证(该验证要求 accepts[] 非空)。目录从一项免费的入门技能开始(agent-memory-bootstrap——适用于任意 Agent 的可移植、基于文件的持久记忆模式),并会逐步扩充;付费技能在此处的运作方式与其他资源完全相同,具有实际的 accepts[]。
架构
- 运行时:Cloudflare Pages Functions(Workers 运行时)。
- 存储:D1(SQLite),采用规范化结构,涉及
listings/resources/resource_accepts,并配有用于真正关键词搜索的 FTS5 虚拟表——而不只是用 JS 数组筛选。submission_log用于支持按 IP 限流。 - 数据导入:基于拉取。卖家提交清单 URL;不会推送任何内容。重新提交相同的清单 URL 时,会先删除再重新插入其资源(完整刷新,而非合并)。Coinbase 镜像导入器(
scripts/import-cdp-bazaar.mjs)是唯一例外——它是一个独立的 Node 脚本,会获取 Coinbase 的公开目录并直接写入 SQL,在 Workers 请求路径之外运行。 - 仅有一个运行时依赖——
solana-x402(Saylor Innovations 自有的 x402 资源服务库,通过github:安装并固定到一个提交 SHA),仅供functions/feature.js用于付费置顶端点的付款发放/验证。其他所有部分都没有运行时依赖;wrangler仍仅作为开发依赖,用于本地 D1/Pages 工具及镜像导入器。
本地开发
npm install
npm run db:init # applies schema.sql to a local D1 database
npm run seed:saylor-official # Saylor Innovations' own real, verified endpoints
npm run seed:cdp-bazaar # optional: mirror Coinbase's public Bazaar catalog into it
npm run check:liveness # optional: probe owner-submitted resources, flag any that don't respond
npm run dev # wrangler pages dev, with the D1 binding wired up
如果你已有部署好的 D1 数据库,且其架构早于后续变更,请按顺序应用增量迁移,而不是重新运行 schema.sql:先运行 npm run db:migrate:remote,然后依次运行 :0003、:0004、:0005、:0006、:0007。
/feature 需要设置 Pages 密钥 FEATURE_SECRET(用于对其付款报价会话进行 HMAC 签名)——运行 wrangler pages secret put FEATURE_SECRET 进行设置。如果未设置,该端点会回退到不安全的、仅供开发使用的值;这适用于 wrangler pages dev,但绝不能用于生产环境。可选的 FEATURE_RPC_URL 可覆盖默认的公开且受限流控制的 Solana RPC 端点。
保持内容更新(自托管)
seed:cdp-bazaar:remote、seed:saylor-official:remote 和 check:liveness:remote 都只是 npm 脚本——可通过你现有的任意调度器运行它们(cron、GitHub Actions、运行小型脚本的 Cloudflare Worker 自带的 Cron Trigger 等)。这些脚本有意保持为普通 Node 脚本,不依赖任何特定的调度平台。
安全说明
POST /submit 会获取调用者提供的 URL——如果不加防护,这会构成经典的 SSRF 漏洞。在发起任何请求前,系统会解析主机名;如果它指向回环地址、RFC1918 私有地址范围或链路本地地址空间(包括 169.254.169.254 云元数据地址),就会拒绝该请求。不会自动跟随重定向。清单大小和获取时间均设有上限。
D1 成本说明
D1 免费层对每日行读取量设有限制。GET /discovery/stats(以及 listNetworks/listCategories)会对 resource_accepts 执行不带筛选条件的 GROUP BY——无论索引多完善,没有 WHERE 子句的聚合操作都会读取表中的每一行,因为没有可供裁剪的条件。getStats() 默认开销很低(仅返回总数,其中 COUNT(DISTINCT network) 会搭便车,在同一查询中免费完成);只有调用方通过 ?full=1 明确请求时,才会产生按网络/来源细分的完整统计开销。此前,首页和 /protocols/x402 每次普通页面浏览都会获取完整细分统计,仅仅为了显示一个计数;在密集测试期间,光这一项就足以耗尽免费层的每日限额。如果你新增的页面需要 byNetwork/bySource,请明确请求这些数据,而不是到处默认使用 full=true。
尚未构建(路线图)
定期存活检查— 已完成。scripts/check-liveness.mjs会探测每个所有者提交的资源(不包括镜像资源 — Coinbase 已经会抓取这些资源),并将其标记为is_live: true/false;确认无法访问的资源会在其卡片、详情页和提供者页面上显示“无响应”徽章。目前还不会自动删除资源,也不会重新获取已更改的付款地址 — 无法访问的资源仍会列出,只是会加上标记。滚动可靠性指标— 已完成。每次存活检查现在也会写入liveness_checks,资源行会存储预先计算的滚动窗口(最近 10 次检查)— JSON 中的liveness.reliability: {checks, live},以及界面上的“N/M 正常运行时间”徽章。此指标仅适用于所有者提交的资源(目前只有这些资源会实际接受探测);null表示从未检查过,与低分不同。示例响应结构— 已完成。任何具有output_schema的资源现在也会在其 JSON 中包含exampleResponse(页面上也会显示“示例结构”区块),根据 schema 本身生成 — schema 提供真实example/default/enum值时使用这些值,否则使用适合相应类型的占位值。明确说明这并非捕获的实时响应;目的是让 Agent 在付费前了解响应结构。- 语义搜索。 当前搜索仅支持关键词/子字符串搜索(FTS5),不具备 Coinbase 的文本与语义混合搜索能力。
定时自动镜像— 已完成,通过每日定时任务运行两个导入器,并对生产环境进行存活检查。(通过定时运行的 Claude Code 云端例程实现,而不是 Cloudflare Cron Trigger — Pages Functions 不像独立 Workers 那样支持 cron 触发器 — 因此这是运维层面的功能,不会由此仓库的分叉自动获得;自托管时请参阅下方“保持内容更新”说明。)- 第三方 MCP 工具目录。
/mcp现在已是一个可用的 MCP 服务,基于本目录运行(见上文),但还不能代理或列出其他 MCP 服务,也没有像/resources/{slug}为 x402 资源提供的那种独立详情页。 A2A Agent 注册目录— 已完成。/discovery/agents、POST /submit-agent和/agents/{slug}会列出其他 Agent 的卡片目录(与/.well-known/agent-card.json分开,后者属于 Agent Bazaar 自身)。其中尚未实现的功能:对已注册 Agent 进行存活检查(目前只探测资源),以及超出“已注册”状态的声誉/信任指标。- 自动导入提供者。 目前只能通过 manifest URL 发布;尚未实现直接从 OpenAPI 文档、MCP schema 或 Git 仓库导入。
指南/内容库— 已完成。/guides提供 11 篇深入且配有代码的指南(src/guides.js),涵盖 x402、MCP、A2A、Agent 商务,以及面向提供者和 Agent 构建者的操作指南 — 对/docs中仅作概述的内容进行了完整详述。每篇指南都有一个机器可读的.json副本。随时可以添加更多指南;只需将其追加到GUIDES,无需更改其他内容。- 除“所有者已验证”之外的信任徽章。 尚未实现通过实时运行时间检查来验证端点/schema;目前“已验证”仅表示“所有者通过 POST /submit 证明了控制权。”
- 与 x402 Foundation 的发现工作组进行联邦协作(
x402-foundation/wg-domain-discovery)— 目标是与开放标准保持一致,而不是再造一个封闭花园。
许可证
MIT — 详见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。