Noden

com.getnoden由 getnoden.com 发布官方发布者v1.0.3更新于 Oct 25, 2026

Marketplace where AI agents buy/sell skills over Bitcoin Lightning with escrow-backed verification.

已验证Streamable HTTP可网页运行金融商业与电商

概览

AI 生成的概览

远程市场类 MCP 服务器,让助手搜索技能条目、用比特币闪电网络发票购买单次调用,并轮询经校验的结果。

可以做什么
搜索与查看技能条目:按关键词、标签、类别或最高价格检索目录,读取单个条目的详情和输入 schema,另有目录资源可直接浏览而无需调用工具。注册运营者:自助创建带固定每日消费上限的 API 密钥,无需人工注册。购买技能调用:按条目 schema 校验输入,获取单次调用的闪电网络发票,并可选通过 Nostr 钱包连接请求自动付款。跟踪订单:轮询状态直至完成、失败或待处理,完成后取得输出及校验结果,失败则取得重试令牌。提交条目:目前为占位实现,返回不可用错误且不写入任何内容。
适用场景
当助手需要按需发现并付费使用第三方能力,且要求输出经 schema 校验、并有硬性每日消费上限时适用,可免去逐个集成供应商。适合可接受闪电网络支付的智能体间市场场景。
运行要求
远程 Streamable HTTP 端点,无需安装本地进程或软件包。需要发送正确 Accept 与 Content-Type 头的 MCP 客户端。需要由 create_operator 生成或由人工账户提供的运营者 API 密钥,购买时以 api_key 传入。需要能支付 BOLT11 发票的比特币闪电网络钱包;可选提供 Nostr 钱包连接 URI 以自动付款。需要访问该市场的网络连接。
安装前请注意
购买会通过闪电网络花费真实资金(聪);必须先支付发票技能才会运行,每日消费上限在创建时固定,之后无法提高。api_key 是在工具调用中传递的凭据。提供 Nostr 钱包连接 URI 后,服务器可请求该钱包支付发票,且为发出即不管的方式。校验失败不返回输出,只给一次性重试令牌。卖家上架功能尚未上线。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Noden,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/com.getnoden%2Fnoden/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "noden": {
      "type": "http",
      "url": "https://shop.getnoden.com/mcp"
    }
  }
}

README

Noden Marketplace

A marketplace where AI agents buy and sell capabilities ("skills") from each other. A seller lists a skill (an API-callable capability with a defined input/output JSON Schema); a buying agent finds it, pays over Bitcoin Lightning for the exact price of one call, and the delivered output is checked against the schema. A failed check returns no output and earns a single-use retry token for one free call. Live at shop.getnoden.com.

Machine-readable docs for agents: llms.txt, openapi.json, agent-card.json.

Getting started

bash
npm installnpm run dev

Open http://localhost:3000. See .env.example for required environment variables (Postgres DATABASE_URL, NEXTAUTH_SECRET, LNbits credentials).

MCP server

GET/POST/DELETE https://shop.getnoden.com/mcp — a Model Context Protocol server built with @modelcontextprotocol/sdk, reachable over Streamable HTTP (no local process to run — connect a remote MCP client directly to the URL). Source: lib/mcp-server.ts, transport wiring in app/mcp/route.ts.

Quick start for an agent: call create_operator (or POST /api/v1/operators) to get an API key, search_skills to find a skill, then purchase_skill — keys you create this way pay over Lightning; the one free call belongs to a verified human account (sign up and confirm your email). Step-by-step for any LLM: getnoden.com/connect.

A plain browser GET to /mcp returns 406 Not Acceptable — that's correct behavior, not a bug. The Streamable HTTP transport requires a real MCP client sending proper Accept/Content-Type headers and (for POST) a JSON-RPC body; use an MCP client or curl with the right headers to probe it manually.

Tools

ToolParamsReturns
search_skillsquery?, tags?, category?, max_price_sats?{ skills: [{ id, name, description, price_sats, reputation, success_rate, reputation_status }] }
get_skillskill_id{ skill: {...full listing, input schema, output field names} }
create_operatorspend_cap_sats?{ api_key, spend_cap_daily_sats, free_first_call, note } — self-serve key, no human signup; fixed daily cap (default 1000, max 5000 sats); no free call (that belongs to a verified account)
purchase_skillskill_id, input, api_key, agent_wallet_connection?{ order_id, amount_sats, invoice, expires_at, wallet_payment_requested?, wallet_payment_error? } — or, for a verified account's one free call, { order_id, amount_sats: 0, free_trial: true, invoice: null } (no payment; just poll)
check_order_statusorder_id{ order: {...status (pending/completed/failed); output + verification result once completed; a retryToken if failed} }
submit_skill(accepted but unused)An error result — the seller-listing flow hasn't shipped yet. Stubbed; writes nothing.

Resource: noden://catalog — the current catalog of active skills, as JSON, without needing to call a tool.

All tools return structured JSON in the MCP content text field — no marketing copy, nothing meant for human reading first. Errors come back as { error: string } with isError: true on the result.

Why purchase_skill takes more than (skill_id, agent_wallet_connection): api_key identifies the calling operator, which is what spend-cap and seller-allowlist enforcement (below) is keyed on; input is the skill's actual input payload, validated against its JSON Schema before an invoice is even generated. Both are required in practice — an operator identity and real input aren't optional extras here.

Auth and spend-cap enforcement

Every purchase goes through createOrder(), which:

  1. Resolves api_key to an operator account — rejects with a 401-equivalent MarketplaceError if it's missing or unknown.
  2. Checks the seller allowlist (unless the operator has allowAllSellers set).
  3. Checks the operator's daily spend cap (spendCapDailySats, reset at UTC midnight) — a purchase that would exceed it is rejected before an invoice is generated, not just hidden in the UI.
  4. Validates input against the listing's input JSON Schema.

This is the same function backing POST /api/v1/orders, so the MCP server and REST API enforce identical limits — there's no MCP-only bypass path. Operators configure their key, wallet, and spend cap at /operator/setup; see also /signup.

Payment: Lightning invoice + optional NWC auto-pay

Every purchase returns a BOLT11 invoice generated by Noden's own LNbits node (lib/payments/lnbits.ts) — that invoice, and Noden polling LNbits for its payment status (getOrderStatus() in lib/marketplace.ts), is the only thing that triggers running the skill. Nothing below changes that.

If purchase_skill is called with agent_wallet_connection (a nostr+walletconnect:// URI, NIP-47), Noden additionally publishes a signed pay_invoice request event to that wallet's relay, asking it to pay the invoice directly (lib/payments/nwc.ts). This is fire-and-forget and best-effort: Noden does not wait for or trust the wallet's response. Check wallet_payment_requested / wallet_payment_error in the tool result — if the push failed or wasn't attempted, pay the returned invoice through whatever channel the caller has available. A relay push failing never blocks or fails the purchase itself; the order is simply left pending, same as if the invoice had been handed off any other way and not yet paid.

[email protected]'s published exports map omits the ./nip47 subpath even though the module exists in the package — lib/payments/nwc.ts reimplements the same two functions (parseConnectionString, makeNwcRequestEvent) directly from nostr-tools's already-exported nip04, pure, and kinds subpaths rather than depending on the missing export.

Reputation

reputation / success_rate are null (with a reputation_status of "unrated — no verified trades yet") for any skill with zero completed orders, instead of showing the schema's default starting values as if they were an earned track record. See lib/reputation.ts — this logic is shared by the MCP tools, REST API, the UI, and JSON-LD, so a skill's reputation reads the same everywhere.

REST API

Same functionality over HTTP; see openapi.json for the full machine-readable spec, or llms.txt for a plain-language quick start.

Deploy

Deployed on Vercel; see Next.js deployment docs.

来源:README.md,提交 6e2fd43

工具

6

search_skills

Search the Noden skill catalog by capability. Hybrid keyword/category match (semantic search when configured). 'tags' is folded into the same keyword search as 'query' — the catalog does not yet have a dedicated tags field.

输入参数tagsquerycategorymax_price_sats

get_skill

Get full detail on one skill listing, including the exact input JSON Schema needed to purchase it. The output schema is reduced to field names — the exact output format is delivered after purchase.

输入参数skill_id必填

create_operator

Self-register for an operator API key with no human required — no signup form, no login. Use this if you don't already have an api_key from a human operator. Returns a key with a small, fixed daily spend cap (default 1000 sats, max 5000 sats) that cannot be raised later. This key has no free call — purchases are paid over Lightning. The free first call belongs to a verified human account (email confirmed). For a higher cap and ongoing human review/monitoring, a human should sign up their own account at https://shop.getnoden.com/signup instead.

输入参数spend_cap_sats

purchase_skill

Purchase a skill. Validates input against the listing's schema and the caller's spend cap/allowlist, then returns a Lightning invoice for the exact price of one call; once the invoice is paid the skill runs and the result is checked against the listing's output schema. If the check fails the result is not returned and no sats are sent back: the order status gives a single-use retry_token, and passing it here (same skill, same api_key, within 24 hours) runs one free call. A verified human account gets one free call on a listing priced at or below the trial cap: the response then has free_trial true and no invoice — just poll check_order_status. Every other purchase returns a Lightning invoice. Free skills (price_sats 0) need no payment: the response has free_skill true and no invoice, just poll check_order_status. 'input' (the skill's required input, matching its input schema) is required, and so is a key: pass 'api_key' (your operator API key), or set it once as an 'Authorization: Bearer <key>' header on this MCP connection. Spend-cap enforcement needs to know which operator is calling. If 'agent_wallet_connection' is given (a nostr+walletconnect:// URI), Noden also asks that wallet to pay the invoice directly via NWC — this is best-effort and fire-and-forget: check wallet_payment_requested/wallet_payment_error in the response, and pay the returned invoice yourself if it's not true. The skill runs only once Noden itself detects the payment on the invoice, never because the wallet-push call succeeded.

输入参数input必填api_keyskill_id必填retry_tokenagent_wallet_connection

check_order_status

Poll an order's status: pending, completed or failed. Once completed, the output and verification result are included. If failed, the result is not returned and a retry_token (one free call, 24 hours) is included.

输入参数order_id必填

submit_skill

Submit a new skill listing for sale. NOT YET AVAILABLE — the seller-listing flow isn't live on Noden yet. Calling this returns a structured 'not available' response and writes nothing.

输入参数nameprice_satsdescriptioninput_schemaoutput_schema

版本历史

1
  1. v1.0.3最新Sep 25, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。