nerve-agent-payment-7a032f — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited nerve-agent-payment-7a032f (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Nerve as native payment layer for AI Agents: no gas fees, fast confirmation (~2s), decentralized, locally managed accounts.
| Goal | Use |
|---|---|
| Create / validate Nerve address | nerve-sdk-js (local) |
| Check received balance / which asset | nerve_get_balance_list (MCP) |
| Check one asset balance | nerve_get_account_balance (MCP) |
| Query chain info / tx | nerve_info, nerve_get_tx (MCP) |
| Transfer assets (pay) | NerveSwap SDK transfer.transfer |
| Swap then pay | NerveSwap SDK swap.getSwapInfo + swap.swapTrade + transfer.transfer |
Add to your MCP client (Cursor, Claude Desktop, etc.) — replace <PATH> with your local nerve-agent dir:
{
"mcpServers": {
"nerve-rpc": {
"command": "node",
"args": ["<PATH>/nerve rpc mcp/dist/index.js"],
"env": { "NERVE_API_BASE_URL": "https://api.nerve.network" }
}
}
}Or with npx (after npm publish): "command": "npx", "args": ["-y", "nerve-rpc-mcp"]
Build once: cd "nerve rpc mcp" && npm install && npm run build
npm i nerve-sdk-jsimport nerve from 'nerve-sdk-js';
// Testnet
nerve.testnet();
const account = await nerve.newAddress(261, 'yourPassword', 'TNVT');
// account.address → "TNVT..."
// account.pri → private key (store securely, never expose)
// Mainnet
nerve.mainnet();
const acct = await nerve.newAddress(9, 'yourPassword', 'NVT');Import from existing private key:
const account = await nerve.importByKey(9, privateKey, 'yourPassword', 'NVT');Security: Private key and mnemonic stay on-device. Never upload or custody.
Share your Nerve address (e.g. TNVTdTSP...) with the payer. They send any Nerve-supported asset to it.
// All assets for an address (which currencies + how much)
nerve_get_balance_list(chainId=9, address="TNVTdTSP...")
// Confirm one specific asset (e.g. NVT: assetChainId=9, assetId=1)
nerve_get_account_balance(chainId=9, assetChainId=9, assetId=1, address="TNVTdTSP...")
// Validate address before use
nerve_validate_address(chainId=9, address="TNVTdTSP...")
// Chain info (chainId, default asset, decimals, etc.)
nerve_infoAsset key format:chainId-assetId(e.g.9-1= NVT on mainnet). On-chain amounts are in smallest units (8 decimals → 1 NVT = 100_000_000).
nerve_get_balance_list(chainId=9, address="<payer address>")Returns all assets and balances. Check if target asset exists and amount is sufficient.
npm i @nerve-finance/nerveswap-web3import { nerveswap } from '@nerve-finance/nerveswap-web3';
await nerveswap.transfer.transfer({
provider, // wallet provider (or local Provider via nerve-sdk-js)
from: 'TNVT...', // payer address
to: 'TNVT...', // receiver address
assetChainId: 9,
assetId: 1, // NVT
amount: '100000000', // 1 NVT in smallest unit (8 decimals)
remark: 'payment',
type: 1,
EVMAddress: '0x...',
pub: '<hex public key>',
});// Step 1: Get quote
const info = await nerveswap.swap.getSwapInfo({
fromAssetKey: '9-2', // from asset (chainId-assetId)
toAssetKey: '9-1', // to NVT
amount: '100000000',
direction: 'from', // 'from' = given from-amount, compute to-amount
});
// info.amountOut, info.priceImpact, info.routes, info.fee
// Step 2: Execute swap
await nerveswap.swap.swapTrade({
provider, from, fromAssetKey: '9-2', toAssetKey: '9-1',
amount: '100000000', slippage: 0.5, remark: 'swap',
EVMAddress: '0x...', pub: '<hex pub>',
});
// Step 3: Transfer to receiver
await nerveswap.transfer.transfer({ provider, from, to, ... });For Agent / server use, wrap nerve-sdk-js as a local provider:
nerve-sdk-js, broadcast with nerve_jsonrpc("broadcastTx", [...]).nerve-sdk-js's exportKeyInfo and sign method; pass to transfer.transfer / swap.swapTrade. Keep the private key only locally or in a secure module.| Tool | Description |
|---|---|
nerve_info | Chain info: chainId, default asset, decimals, address prefix |
nerve_validate_address | Check if address is valid |
nerve_get_balance_list | All asset balances for an address |
nerve_get_account_balance | Single asset balance |
nerve_get_tx | Transaction detail by hash |
nerve_get_latest_height | Latest block height |
nerve_jsonrpc | Call any Nerve JSON-RPC method (advanced) |
nerve_rest | Call any Nerve REST endpoint |
100_000_000 (smallest unit)decimals field in balance/info response10^decimals for display| Network | chainId | Address prefix |
|---|---|---|
| Mainnet | 9 | NVT |
| Testnet | 261 | TNVT |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.