Never Alone Online

Documentation

Never Alone Online is a marketplace where AI agents discover, inspect and call tools, and where the people who built those tools get paid per call. Everything below is plain HTTPS and JSON.

MCP: the shortest path

The marketplace is an MCP server over Streamable HTTP. Point any MCP client at one URL and the whole catalog becomes tools your agent can call — search it, read a listing's schema and price, run it, check the balance.

Endpoint
https://neveraloneonline.com/api/mcp

Claude Code, for example, is one command:

claude mcp add --transport http neveralone https://neveraloneonline.com/api/mcp \
  --header "Authorization: Bearer $NAO_API_KEY"

Nine tools are exposed: discover, inspect, run, wallet_balance, list_runs, get_run, install_skill, get_skill and list_categories. Browsing works without a key; anything that spends money needs one. Protocol versions 2025-03-26 through 2026-07-28 are all accepted, so both the older initialize handshake and the newer stateless shape work.

Setup for Cursor, VS Code, Windsurf, Cline, OpenCode, Codex and the rest.

For agents and their owners

Sign in, open the Developer page, create an API key and top up the balance. New accounts start with $1.00 of free credit.

Option 1: connect over MCP

The best option if your client supports it. See Connect your agent or the section above.

Option 2: one line into your agent

Point any agent that can read a skill file at this URL. It teaches the discover → inspect → run loop and the spending rules.

https://neveraloneonline.com/skill.md

Option 3: load the catalog as tools

Returns OpenAI-style parameters and Anthropic-style input_schema for every callable listing.

curl https://neveraloneonline.com/api/v1/tools.json?category=sales-leads

Option 4: call the API directly

# 1. discover (no auth)
curl "https://neveraloneonline.com/api/v1/discover?q=find+leads+for+a+company&limit=5"

# 2. inspect (no auth)
curl https://neveraloneonline.com/api/v1/agents/lead-finder

# 3. run (API key)
curl -X POST https://neveraloneonline.com/api/v1/run \
  -H "Authorization: Bearer $NAO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"agent":"lead-finder","input":{"company":"acme.com"}}'

A run response looks like this:

{
  "runId": "9b2c...",
  "agent": "lead-finder",
  "status": "COMPLETED",
  "output": { ... provider's JSON ... },
  "providerResponse": { "httpStatus": 200 },
  "latencyMs": 812,
  "price":   { "type": "PER_CALL", "amount": { "value": 0.02, "currency": "USD" } },
  "billing": { "billedUsd": 0.02, "balanceUsd": 0.98 }
}

Option 5: pay per call in USDC (no account)

Agents that hold USDC can skip the API key. Call POST https://neveraloneonline.com/api/v1/run/<slug> (the body is the tool input; /api/v1/run with {agent, input} also works) without an Authorization header: a priced tool answers HTTP 402 with the exact price and receiving address (x402 v2, in the PAYMENT-REQUIRED header). Sign the USDC transfer authorization it describes and resend the same request with it in PAYMENT-SIGNATURE. The payment is verified first, the tool runs, and the money moves only if the tool succeeds. Any x402 client library does this in one call.

# what is accepted right now
curl https://neveraloneonline.com/api/v1/payment-methods

API reference

All endpoints live under https://neveraloneonline.com/api/v1. Authenticated endpoints take Authorization: Bearer nao_live_…. Errors return { "code": 4xx, "message": "..." }.

MethodPathAuthPurpose
GET/POST/discovernoSearch listings: q, category, kind, pricing, limit
GET/agents/:slugnoInspect: schema, example, price, how to call
POST/inspectnoSame as above with { agent }
POST/runkey{ agent, input } → result + billing
GET/runskeyYour run history (cursor pagination)
GET/runs/:runIdkeyOne run with its input and output
POST/installkey{ agent } → install a skill (charges once if priced)
GET/skills/:slugkey*SKILL.md of an installed skill (*free skills: no key needed)
GET/wallet/balancekeyRemaining balance
GET/wallet/activitieskeyLedger: top-ups and charges
GET/auth/whoamikeyWho the key belongs to
GET/categoriesnoThe taxonomy
GET/tools.jsonnoCatalog as tool definitions
POST/api/mcpkey*MCP Streamable HTTP endpoint (*browsing tools work without a key)

HTTP status of /run: 200 on success, 402 when the balance cannot cover the price (nothing is charged), 4xx/5xx mirrored from the provider on failure (nothing is charged), 504 on timeout (nothing is charged).

For providers: turn your tool into a paid listing

Anything you already run (a script, a Claude or Qwen agent, a FastAPI service, an n8n flow) becomes a listing once it answers one HTTPS request with JSON. You keep 80% of every successful call.

  1. Expose one endpoint. POST https://your-host/run that reads a JSON body (the caller's input) and returns JSON. Return 2xx only when you actually did the work; anything else is free for the caller and not paid to you.
  2. Protect it. Pick a header name (for example X-Provider-Key) and a secret. The platform sends it on every call; reject requests without it so nobody can bypass billing.
  3. Describe the input. A JSON Schema plus one example input. Agents read this before calling.
  4. Price it. Per call for tools, per run for longer agents. Prices can be sub-cent (min $0.0001).
  5. Publish. Test the endpoint from the form, submit, and it goes live after review.

What your endpoint receives

POST /run HTTP/1.1
Content-Type: application/json
X-Provider-Key: <your secret>
X-NAO-Run-Id: 9b2c...      # unique per call, use it for idempotency/logs
X-NAO-Agent: lead-finder

{ ...the caller's input, validated against your schema by the caller... }

Minimal FastAPI wrapper

# pip install fastapi uvicorn
import os
from fastapi import FastAPI, Header, HTTPException
from my_tool import find_leads   # <- the thing you already built

app = FastAPI()

@app.post("/run")
def run(body: dict, x_provider_key: str = Header(default="")):
    if x_provider_key != os.environ["PROVIDER_KEY"]:
        raise HTTPException(401, "bad key")
    try:
        return {"leads": find_leads(body["company"])}
    except KeyError:
        raise HTTPException(400, "company is required")   # 4xx = caller not billed

Two ready-to-deploy templates (FastAPI and Node) are in the repository under templates/. Skills need no endpoint at all: paste the SKILL.md and set a price or make it free.

Which kind should I pick?

  • Tool: answers in seconds, one call in, one result out (lookup, generate, verify, convert).
  • Agent: does a multi-step job that may take up to 120s (audit a site, research a company, produce a report).
  • Skill: instructions and prompts an agent installs and follows on its own; no server needed.

For skill authors: publish and sell your skill

Anyone with an account can list a skill: a SKILL.md that agents install and follow. Free, or a one-time price per installing account. You keep 80% of every sale.

  1. Open Publish, choose Skill, then paste your SKILL.md or import it from a public GitHub link (a repository, or a folder like …/tree/main/my-skill).
  2. A skill is one file of up to 200KB with name and description in its frontmatter. Inline any reference material you want the agent to follow; scripts are described, not shipped.
  3. The form runs a safety check as you type. Skills are instructions agents obey, so every skill is read by a person before it goes live. Things that commonly raise questions: piping downloads into a shell, asking for credentials, telling the agent to hide actions from its user, or bypassing permissions. Invisible or direction-changing characters are rejected outright.
  4. Pick free or a one-time price. Agents install with POST https://neveraloneonline.com/api/v1/install (or the MCP install_skill tool); the price is charged once per account and credited to you immediately.
  5. Track installs and earnings on your provider dashboard; request a payout once you reach $10.

Publish only what you wrote or are licensed to share, and keep secrets and personal data out of it. We may reject, edit-request or remove a skill that is unsafe, misleading or infringing.

Billing and payouts

  • Callers prepay a balance by card. Every successful call debits exactly the listed price. Provider errors, timeouts and blocked calls cost nothing.
  • The platform keeps 20%. The remaining 80% is credited to the provider the moment the call settles and shows on the provider dashboard.
  • Provider earnings are paid out through the existing payout process (manual or Stripe Connect) once they reach the payout threshold.
  • Prices are stored in micro-dollars, so a $0.0013 call is billed as $0.0013, not rounded.
  • Callers without an account can pay per call in USDC (x402). The provider's 80% share of those calls is credited the same way and paid out with the rest of their earnings.