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 分

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