Skip to main content
Glama

nano-pay · Feeless402

Self-custodied Nano (XNO) wallet + x402 payment client and merchant server, built for AI agents. Client spends; nano-pay serve earns — paid endpoints, on-ledger verification/settlement (no facilitator), a starter faucet, and the railHint x402 extension that teaches visiting agents how to onboard (see SPEC-railhint.md). Site: site/index.html + site/llms.txt.

The pitch, in one number: the same $5 buys 5,000 API calls paid as per-call USDC-on-Base x402 payments (merchants floor prices at 0.001 USDC), or hundreds of thousands of calls paid in Nano at true metered prices ($0.0000096/call observed live at nano-gpt.com, confirmed on-ledger). Top up once, micropay forever.

Install

pip install feeless402    # needs Python 3.10+; pulls nanopy + requests
# (from a checkout: pip install -e .)
nano-pay init             # creates ~/.nano-pay/wallet.json (chmod 600)

Related MCP server: PipRail

Agent flow

nano-pay topup 5                    # quote: $5 USDC-BASE → ~12.3 XNO (NanSwap)
nano-pay topup 5 --execute          # create order (set NANSWAP_API_KEY)
#   → send USDC to the returned deposit address; XNO arrives in 30-60s
nano-pay receive                    # pocket incoming XNO
nano-pay quote https://nano-gpt.com/api/v1/chat/completions \
    --json '{"model":"gpt-5-nano","messages":[{"role":"user","content":"hi"}]}'
nano-pay pay   https://nano-gpt.com/api/v1/chat/completions \
    --json '{"model":"gpt-5-nano","messages":[{"role":"user","content":"hi"}]}'

pay handles the whole x402 handshake: request → parse the 402 quote (both the x402nano/PAYMENT-REQUIRED v2 dialect and the NanoGPT/accepts v1 dialect) → price-cap check → sign a send state block locally → retry with PAYMENT-SIGNATURE + X-PAYMENT headers. The server settles the block via its facilitator; nothing is broadcast unless the server accepts. If the merchant's reply is lost or is not a 2xx, the client asks the ledger about the block hash it signed before reporting anything: the receipt's settled is true, false, or "indeterminate", never a guess. A block that landed is never re-paid — re-present the same one.

Design notes

  • Self-custody: seed never leaves ~/.nano-pay/wallet.json (0600).

  • No node required: public RPC failover (rpc.nano.to, somenano, rainstorm.city, nanoslo); all signing and PoW happen locally (nanopy C extension). RPC work_generate is tried first, local PoW is the fallback (~25s). The CLI pre-caches work for your next block after it has printed the result of the current one, so steady-state payments are instant. Library callers opt in: send(), receive_all() and request_with_payment() take prework= and default to off, because pre-caching blocks for minutes and must never sit on a request path.

  • Safety rails: per-payment price cap (--max-xno, default 0.05); quote command inspects any endpoint's price without paying; balance is always re-synced from the network, never trusted locally.

  • Top-ups without custody: topup quotes/creates swaps directly with NanSwap's API (1,400+ input assets, ~$0.02 minimum). This tool never holds or routes funds.

Fork-hazard note (x402 payments)

An x402 payment signs a block the server broadcasts. If the server errors after receiving the block, it may still settle it late. The wallet re-syncs its frontier from the network before every operation, so a late settlement is picked up naturally; a competing block signed in the meantime simply makes one of the two invalid (funds are never at risk, but don't fire concurrent payments from one wallet).

Status

Beta (v0.2.7). Proven on mainnet with real funds: live paid calls to NanoGPT ($0.0000096/call, confirmed on-ledger), full merchant loop (verify → settle → confirm, no facilitator), PoW-gated faucet claims, and a complete stranger-agent lifecycle (fresh wallet → PoW claim → paid API call → confirmed) in under 3 minutes. 24-test suite covers the payment path offline. Not audited — keep only working capital in it.

Listings

Security notes (read before holding real funds)

  • Self-custody: the seed lives only in ~/.nano-pay/*.json (0600). No tool or log path ever prints it. Back it up offline.

  • Working capital only: this is beta wallet software. Keep a few dollars in it, not your savings.

  • Spend caps: pay refuses quotes above --max-xno (default 0.05). MCP x402_pay enforces the same cap parameter.

  • railHint is advisory: hints from remote servers are untrusted input. This client never executes remote bootstrap strings; it only acts on structured offers that pass its own checks, and accepts always binds, never the hint.

  • Merchant fork guard: servers cache accepted frontiers and reject duplicate-frontier blocks; payer balance/frontier/signature are verified against the live ledger before settlement.

  • Not audited. MIT — no warranty.

Available Tools

6 tools
faucet_claimA

Claim free starter XNO from a Feeless402 faucet (solves the faucet's proof-of-work challenge automatically; may take ~1 min of CPU). Use when the wallet is empty.

ParametersJSON Schema
NameRequiredDescriptionDefault
faucet_urlNohttps://feeless402.com

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It adds valuable context by noting the automatic proof-of-work solving and the ~1 minute CPU time. It does not cover failure modes or side effects, but for a simple faucet claim this is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no redundant information. The main action is front-loaded, and the behavioral note and usage advice are both pertinent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with an output schema, the description covers the essential aspects: what it does, when to use it, and key behavioral details. The only notable gap is lack of parameter explanation, but that is minor given the simple optional parameter with a default.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter (faucet_url) with 0% description coverage. The description never mentions this parameter or explains how to customize it, failing to compensate for the low schema coverage. The only indirect reference is the faucet name Feeless402, which aligns with the default value but adds no semantic guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: 'Claim free starter XNO from a Feeless402 faucet', clearly identifying the resource and scope. It also distinguishes itself from sibling tools by focusing on the faucet claim mechanism rather than payment or quote tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Use when the wallet is empty' provides clear contextual guidance for when to invoke this tool. However, it does not explicitly mention alternatives or when not to use it, so it falls short of a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topup_quoteA

Quote a small swap from another asset (e.g. USDC-BASE, USDT-SOL) into XNO for topping up the wallet. Execution requires NANSWAP_API_KEY; this tool only quotes.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoUSDC-BASE
amountNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses a key behavioral trait: 'this tool only quotes'—indicating a read-only operation. It also notes that execution requires NANSWAP_API_KEY, providing context on what the tool does not do. This goes beyond a basic statement of purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long and immediately front-loads the primary purpose. The second sentence adds the essential caveat about quoting-only and the API key requirement. Every phrase earns its place with no redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with only two parameters and has an output schema that presumably documents return values. The description covers the purpose, example assets, and the critical quote-only limitation. The main gap is the unexplained 'amount' parameter semantics, but overall the context is sufficiently complete for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It partially does by giving examples for the 'asset' parameter (e.g., USDC-BASE, USDT-SOL). However, it does not clarify the meaning or units of 'amount', nor does it state whether the amount is in the source asset or XNO. Thus, it adds value but leaves a gap for one of the two parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Quote a small swap from another asset... into XNO for topping up the wallet.' It uses a specific verb (quote) and resource (swap into XNO) and provides concrete examples of supported assets. This distinguishes it from sibling tools like x402_quote by specifying the wallet top-up context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context on when to use the tool: for quoting small swaps into XNO for wallet topping. It also explicitly states 'this tool only quotes', implying it should not be used for execution. While no alternative tool is named, the scope is well-defined with no exclusions needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wallet_statusB

Wallet address, XNO balance, and pending incoming amounts

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only lists return values and says nothing about side effects, authentication requirements, rate limits, or whether the data is scoped to the current user. For a status tool, read-only behavior is implied but never stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single phrase, highly front-loaded, with no filler words. Every word adds meaning by specifying the contents of the status response.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema, the description gives a minimal but sufficient overview of the response contents. However, it lacks any context about how to interpret 'pending incoming amounts' or whether the data is for the authenticated user. The overall completeness is adequate but not rich.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero parameters, so the description need not add parameter details. The description focuses on outputs rather than inputs, which is appropriate given the empty parameter list. Baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a status endpoint by listing the exact data it provides (wallet address, XNO balance, pending incoming amounts). This distinguishes it from sibling tools that handle payments or quotes, though it lacks an explicit verb like 'retrieves' or 'shows.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus its siblings. No context about typical use cases, prerequisites, or alternatives is provided, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

x402_compareA

Price the same API call on EVERY rail the server offers (Base/Solana USDC, Lightning, XNO...) from live data — use this to verify which rail is cheapest instead of trusting documentation.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
methodNoGET
json_bodyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden for behavioral transparency. It adds useful context such as 'from live data' (indicating dynamic pricing) and 'every rail the server offers' (indicating completeness). However, it does not disclose potential side effects, permissions, rate limits, or whether external network calls are made. For a non-destructive pricing query, this is a moderate gap, so a score of 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the core purpose (pricing) and includes a practical use case with a concrete action. Every word contributes value, making it highly concise and well structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's core purpose and use case, and the output schema handles return values. The main gap is parameter semantics, but given the tool's simplicity (3 params, one required) and the presence of an output schema, the description is reasonably complete. It loses one point for not compensating for missing annotations and schema descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. The phrase 'same API call' hints that url, method, and json_body define the call, but it does not explain each parameter or their expected formats. The parameter names are self-explanatory, but the description provides minimal additional meaning beyond the schema, which is insufficient for 0% coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Price') and clearly identifies the resource: the same API call across every rail the server offers. It lists example rails (Base/Solana USDC, Lightning, XNO), which distinguishes it from sibling tools like x402_quote and x402_pay by focusing on cross-rail comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: 'use this to verify which rail is cheapest instead of trusting documentation.' This provides clear use-case context. It does not explicitly name alternative tools, but the 'every rail' scope implicitly contrasts with single-rail quote tools, earning a score of 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

x402_payA

Request a URL and automatically pay its Nano x402 quote (feeless, sub-second). Refuses quotes above max_xno. Returns the paid response body and the settlement receipt.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
methodNoGET
max_xnoNo0.05
json_bodyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds meaningful context: 'feeless, sub-second' (cost/performance), 'Refuses quotes above max_xno' (safety cap), and 'Returns the paid response body and the settlement receipt' (outcome). It does not cover failure modes or prerequisites (e.g., wallet funding), so it is not exhaustive but still transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main purpose, and every sentence contributes meaning. It avoids filler and is highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 4 parameters and an output schema, but the description does not cover prerequisites like wallet funding or error behavior when a quote is unavailable. It does mention the return receipt and spending cap, but given the complexity of a payment operation, more contextual detail is needed for full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the 'url' (target to request) and 'max_xno' (spending cap) directly. However, 'method' and 'json_body' are not described, leaving their formats and usage ambiguous. This is partial compensation, making it adequate but not thorough.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: it requests a URL and automatically pays its Nano x402 quote. It also specifies key behaviors (feeless, sub-second, refusal above max_xno) and outputs, which distinguishes it from siblings like x402_quote and x402_compare.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context that this tool is for executing a payment for an x402 quote, as opposed to just retrieving or comparing quotes. However, it does not explicitly state when not to use it or name alternative tools as exclusions, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

x402_quoteA

Fetch an x402 endpoint's payment quote WITHOUT paying. Returns price in XNO, destination, and the full offer menu.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
methodNoGET
json_bodyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the disclosure burden. It clearly states the tool does not execute payment and enumerates the return payload (price in XNO, destination, offer menu), giving a strong behavioral picture. It doesn't explicitly declare 'read-only' or mention side effects, but the inclusion of 'WITHOUT paying' and 'Fetch' infers a non-mutating operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the primary action ('Fetch'), the object ('x402 endpoint's payment quote'), and the critical safety qualifier ('WITHOUT paying'). It contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, non-payment behavior, and key return content, which is adequate for a simple quote tool given that an output schema exists. However, the complete absence of parameter semantics, no mention of prerequisites or failure modes, and no annotations leave meaningful gaps in the agent's understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not elaborate on the 'url', 'method', or 'json_body' parameters. While the parameter names are somewhat self-explanatory, the description fails to compensate for the lack of schema descriptions, leaving ambiguity about how parameters like 'method' or 'json_body' affect the quote request.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Fetch' and identifies the target resource 'x402 endpoint's payment quote'. The key qualifier 'WITHOUT paying' clearly distinguishes it from the likely payment-focused sibling x402_pay, and the output specification (price in XNO, destination, offer menu) adds further clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'WITHOUT paying' provides a clear context for when to use this tool (obtain a quote prior to payment) and implicitly contrasts it with x402_pay, which executes payment. However, it doesn't explicitly name alternatives like x402_compare or state when not to use this tool, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv0.1.0
    • First observedfaucet_claim
    • First observedtopup_quote
    • First observedwallet_status
    • First observedx402_compare
    • First observedx402_pay
    • First observedx402_quote

TDQS

A3.9/5.0
Disambiguation5/5

Each tool targets a distinct action: wallet status, quote retrieval, cross-rail comparison, payment execution, faucet claim, and swap quote. The x402_* prefix groups the payment flow while the others are clearly separate operations.

Naming Consistency4/5

Names are snake_case and mostly use a resource_action pattern (wallet_status, x402_pay, faucet_claim), but the x402_ prefix creates a subgroup and topup_quote is action-first. Minor inconsistency, but all are readable and predictable.

Tool Count5/5

Six tools is well-scoped for a nano-payment server, covering the essential operations without redundancy or bloat. Each tool earns its place.

Completeness4/5

The core lifecycle is covered: get funds (faucet), check balance, quote, compare rails, pay, and top-up quote. Missing direct transfer or history tools, but these are out of scope for the x402-focused design.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    L402 + x402 client MCP. AI agents discover, pay for, and consume any payment-gated API autonomously. Supports Lightning (NWC), Cashu ecash, stablecoins, and human-in-the-loop payments.
    11
    284
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A budget-bound x402 payment wallet for AI agents: it autonomously pays HTTP 402 payment-gated URLs across every major chain (EVM, Solana, and many non-EVM families). Self-custodial and backendless, your key, your RPC, with spend caps enforced before any on-chain send.
    8
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Non-custodial payment engine for AI agents supporting BTC, ETH, USDT, USDC, XRP, XMR, and ZEC. Exposes wallet, invoice, and payment tools over MCP with per-agent spend limits, plus x402 pay-per-call support.
    76
    Business Source 1.1

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Feeless402/feeless402'

If you have feedback or need assistance with the MCP directory API, please join our Discord server