Getting Started
Quick Start
Connect to the Name Whisper MCP server in under a minute. Choose HTTP for remote agents or stdio for local development.
Remote
HTTP Transport
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from
"@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport({
url: "https://namewhisper.ai/mcp",
});
const client = new Client({
name: "my-agent",
version: "1.0.0",
});
await client.connect(transport);
// Call a tool
const result = await client.callTool({
name: "search_ens_names",
arguments: { query: "3-letter words under 0.1 ETH" },
});
Stateful sessions with 30-minute idle timeout. No API key required.
Local
stdio Transport
// Claude Desktop / Cursor config
{
"mcpServers": {
"name-whisper": {
"command": "node",
"args": ["mcp-server.js"],
"cwd": "/path/to/nw-terminal",
"env": {
"SUPABASE_URL": "...",
"SUPABASE_KEY": "..."
}
}
}
}
Requires the repository cloned with
npm install and environment variables configured.Tool Reference
All 34 tools
Each tool accepts JSON parameters and returns
{ content: [{ type: "text", text: "..." }] }. Click a tool to see parameters and examples.
Discovery
Read-Only
4 tools
search_ens_names
Natural language search across 3.6M names
Automatic intent detection routes to filtered DB search, semantic vector search, creative AI generation, or bulk availability check.
| Param | Type | Description | |
|---|---|---|---|
| query | string | required | Natural language query |
Example
{ "query": "ocean themed names under 0.5 ETH" }
get_name_details
Full metadata + listings + ENSIP-25 agent bindings
Owner, expiry, tags, active listings with prices, active offers, and agent identity text records.
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name or label (e.g. "vitalik.eth") |
Example
{ "name": "vitalik.eth" }
check_availability
Bulk verify registration status
Returns status (AVAILABLE, REGISTERED, EXPIRED, INVALID), owner, expiry, and registration cost for each name.
| Param | Type | Description | |
|---|---|---|---|
| names | string[] | required | Array of ENS names or labels |
Example
{ "names": ["coffee.eth", "tea.eth", "pixel.eth"] }
get_similar_names
Semantic vector search for related names
256-dimensional vector embeddings across 3.6M+ names. Returns similarity scores and live marketplace data.
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name or label |
| limit | number | default: 20 | Max results (max 50) |
Example
{ "name": "coffee", "limit": 10 }
Intelligence
Read-Only
4 tools
get_valuation
Three-track valuation with confidence rating
Track A: comparable sales with IQR outlier removal. Track B: quality-reference from word frequency + entity fame + search interest. Track C: self-history. Final = max(A, B, C).
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name or label to value |
Example
{ "name": "bitcoin.eth" }
get_market_activity
Recent sales, listings, offers, transfers
| Param | Type | Description | |
|---|---|---|---|
| eventTypes | string[] | default: all | SALE, LISTING_CREATED, OFFER_CREATED, MINT, TRANSFER, RENEWAL, BURN |
| limit | number | default: 25 | Max results (max 100) |
| offset | number | default: 0 | Pagination offset |
Example
{ "eventTypes": ["SALE"], "limit": 10 }
get_wallet_portfolio
All ENS names owned by a wallet
| Param | Type | Description | |
|---|---|---|---|
| wallet | string | required | Wallet address (0x...) or ENS name |
| limit | number | default: 100 | Max results (max 200) |
| offset | number | default: 0 | Pagination offset |
Example
{ "wallet": "vitalik.eth" }
find_alpha
Discover underpriced listings
Scan for names listed below their comparable-sales valuation. Returns ranked opportunities with discount percentage and confidence.
| Param | Type | Description | |
|---|---|---|---|
| maxPriceEth | number | no cap | Max listing price in ETH |
| minDiscountPct | number | default: 20 | Min discount vs estimated value (1-99) |
| minLength | number | optional | Min label length |
| maxLength | number | optional | Max label length |
| tags | string[] | optional | LETTERS_ONLY, NUMBERS_ONLY, EMOJI, PALINDROME |
| minConfidence | enum | default: LOW | HIGH (20+ sales), MEDIUM (10+), LOW (3+) |
| limit | number | default: 25 | Max results (max 100) |
Example
{ "maxPriceEth": 0.5, "minDiscountPct": 30, "limit": 10 }
Commerce
Transaction
4 tools
purchase_name
Register available or buy listed names
Auto-detects available vs listed. Available: returns registration recipe (commit → wait 60s → register). Listed: searches all marketplaces for best price, returns Seaport order data.
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name to purchase |
| walletAddress | string | required | Buyer wallet address |
| maxPriceEth | number | optional | Max price (for listed names) |
| durationYears | number | default: 1 | Registration duration |
| action | enum | default: auto | buy_listing, register, or auto |
make_offer
Submit a bid on a registered name
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name to bid on |
| amountEth | number | required | Offer amount in ETH |
| walletAddress | string | required | Your wallet address |
| currency | enum | default: WETH | WETH, USDC, or DAI |
| expiryHours | number | default: 72 | Offer expiry in hours |
bulk_register
Batch register up to 20 names in 2 txns
All names batched into a single batchCommit + batchRegister via Multicall3. Each name gets its own front-running protection secret.
| Param | Type | Description | |
|---|---|---|---|
| names | string[] | required | Array of ENS names (max 20) |
| walletAddress | string | required | Owner wallet address |
| durationYears | number | default: 1 | Duration (same for all) |
bulk_set_records
Batch set records across up to 50 names
All record updates batched into one resolver.multicall() call. Supports addresses, texts, contentHash, and ENSIP-25 agent-registration.
| Param | Type | Description | |
|---|---|---|---|
| nameRecords | object[] | required | Array of { name, records } pairs (max 50) |
| walletAddress | string | required | Owner wallet address |
Management
Transaction
6 tools
set_ens_records
Set resolver records (addresses, texts, content hash)
Multiple records batched into a single multicall transaction. Supports ENSIP-25 agent-registration via agentRegistration shorthand.
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name to configure |
| records | object | required | { addresses, texts, contentHash, agentRegistration } |
| walletAddress | string | required | Owner wallet address |
Example
{
"name": "myagent.eth",
"records": {
"texts": { "ai.agent": "true", "ai.capabilities": "trading" },
"agentRegistration": { "registryAddress": "0xABC...", "agentId": "42" }
},
"walletAddress": "0x1234..."
}
renew_ens_name
Renew single or batch names (Multicall3)
No commit/reveal needed. Any duration (no minimum). Anyone can renew any name. Batch renewals bundled into a single Multicall3 transaction.
| Param | Type | Description | |
|---|---|---|---|
| names | string | string[] | required | Name or array of names |
| duration | number | default: 365 | Duration in days |
transfer_ens_name
Transfer ownership (wrapped + unwrapped)
Auto-detects wrapped (ERC-1155) vs unwrapped (ERC-721). Resolver records are NOT affected by transfer.
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name to transfer |
| fromAddress | string | required | Current owner (must sign) |
| toAddress | string | required | Recipient wallet |
bulk_transfer_ens_names
Batch transfer up to 20 names in 1 txn
Transfer multiple ENS names in a single Multicall3 transaction. Each name can go to a different recipient. Auto-detects wrapped (ERC-1155) vs unwrapped (ERC-721) per name.
| Param | Type | Description | |
|---|---|---|---|
| transfers | array | required | Array of { name, toAddress } pairs. Max 20. |
| fromAddress | string | required | Current owner of all names (must sign) |
set_primary_name
Set reverse resolution (primary name)
Controls what name displays when someone looks up your address. Name's ETH record must point to the wallet. One primary per address.
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name to set as primary |
| walletAddress | string | required | Wallet address (must sign) |
set_resolver
Change resolver contract
Pass "public" to use the ENS Public Resolver. Records on the old resolver won't be visible after switching.
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name |
| resolver | string | required | Resolver address or "public" |
manage_ens_name
Status check with recommendations
Returns registration status, expiry, wrapper state, owner, renewal pricing, and recommended actions. Use before any management operation.
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name to check |
| includeRenewalPricing | boolean | default: true | Include on-chain pricing |
NameWrapper
Transaction
5 tools
wrap_name
Wrap name into NameWrapper (ERC-1155)
ERC-721 → ERC-1155. Enables fuse permissions and protected subnames. Returns two-step recipe: approve + wrap.
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name to wrap |
| owner | string | required | Current owner address |
| fuses | string[] | optional | Fuses to burn on wrap (irreversible) |
unwrap_name
Unwrap back to BaseRegistrar (ERC-721)
Clears all fuses. Fails if CANNOT_UNWRAP has been burned.
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name to unwrap |
| owner | string | required | Current wrapped owner |
manage_fuses
Read/burn fuses on wrapped names
Three modes: read (check current), burn_owner_fuses, burn_child_fuses. All burning is irreversible. Fuses expire when the name expires.
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name |
| action | enum | default: read | read, burn_owner_fuses, burn_child_fuses |
| fuses | string[] | conditional | Required for burn actions |
| expiry | number | optional | Unix timestamp (burn_child_fuses only) |
mint_subnames
Bulk create subnames for agent fleets
Each subname gets its own owner and records. Free to create — only gas costs. Designed for agent001.company.eth style fleet deployment.
| Param | Type | Description | |
|---|---|---|---|
| parentName | string | required | Parent ENS name |
| subnames | object[] | required | Array of { label, owner?, records? } |
| walletAddress | string | required | Parent name owner |
extend_subname_expiry
Extend subname expiry
Cannot exceed parent expiry. Parent owner can always extend; subname owner can only if CAN_EXTEND_EXPIRY fuse is burned.
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | Full subname (e.g. "sub.coffee.eth") |
| years | number | default: 1 | Years to extend (1-10) |
Access & Recovery
Transaction
2 tools
approve_operator
Approve/revoke operator for ENS contracts
setApprovalForAll — covers ALL tokens on the specified contract. Use before wrapping, marketplace trading, or batch operations.
| Param | Type | Description | |
|---|---|---|---|
| owner | string | required | Address granting approval |
| operator | string | required | Address being approved |
| contract | enum | required | base_registrar, name_wrapper, or ens_registry |
| approved | boolean | default: true | true to approve, false to revoke |
reclaim_name
Reclaim ENS Registry ownership
Syncs the ENS Registry owner to match the BaseRegistrar token owner. Used when ownership is out of sync after direct token transfers.
| Param | Type | Description | |
|---|---|---|---|
| name | string | required | ENS name to reclaim |
| owner | string | required | Address (must own BaseRegistrar token) |
Agent Identity
Read + Write
5 tools
get_caller_identity
Resolve authenticated agent identity via ERC-8128
Returns the identity of an ERC-8128 authenticated agent: wallet address, primary ENS name, text records, ENSIP-25 status, and portfolio summary. Call this first to confirm your identity is recognised.
| Param | Type | Description | |
|---|---|---|---|
| No parameters — identity is derived from the ERC-8128 signed request | |||
provision_agent_identity
One-call agent identity setup with ENSIP-25
Describe your agent's purpose and budget → get name recommendations with registration recipes, suggested ENS records, and ENSIP-25 agent-registration binding.
| Param | Type | Description | |
|---|---|---|---|
| purpose | string | required | What the agent does |
| walletAddress | string | required | Agent wallet address |
| budgetEth | number | default: 0.1 | Max budget in ETH |
| preferences | object | optional | { maxLength, style, mustInclude } |
| agentRegistry | object | optional | ENSIP-25: { registryAddress, agentId, chainId? } |
Example
{
"purpose": "DeFi trading bot",
"walletAddress": "0x1234...",
"budgetEth": 5.0,
"preferences": { "style": "technical" }
}
get_agent_reputation
Check agent credentials via ENSIP-25 + ERC-8004
ENSIP-25 verification is live: reads agent-registration text records. ERC-8004 reputation data is live on mainnet via the IdentityRegistry contract. Browse the agent registry →
| Param | Type | Description | |
|---|---|---|---|
| nameOrWallet | string | required | ENS name or wallet address |
search_agent_directory
Search registered AI agents via ERC-8004 registry
Queries the ERC-8004 IdentityRegistry on mainnet via 8004scan. Search by keyword, filter by capabilities or minimum reputation score. Returns on-chain agent profiles with ENS names and metadata.
| Param | Type | Description | |
|---|---|---|---|
| query | string | optional | Search query |
| capabilities | string[] | optional | Filter by capabilities |
| minReputation | number | optional | Minimum score (0-100) |
| limit | number | default: 25 | Max results |
search_knowledge
Search ENS governance + protocol knowledge base
Governance proposals, protocol docs, developer insights, blog posts, forum discussions, and Farcaster casts from key ENS figures.
| Param | Type | Description | |
|---|---|---|---|
| query | string | required | What you want to know about ENS |
| source | enum | default: all | ens-forum, vitalik-blog, ens-blog, ens-docs, farcaster |
| limit | number | default: 6 | Number of results |
Internal
Session
1 tool
get_usage_stats
Session tool call counts, success rates, latency
No parameters. Returns per-tool call counts, success rates, and average latency for the current MCP session.
REST API
60+ HTTP endpoints
In addition to MCP tools, Name Whisper exposes a full REST API at
https://namewhisper.ai/api/. All responses are JSON. Authenticated routes require a Bearer token from /api/auth/connect.
Authentication
Public
3 endpoints
POST /api/auth/connect
Wallet connection (returns JWT)
Simple address-based authentication. Send a wallet address, receive a JWT token for authenticated routes. No signature required.
Request
{ "address": "0x1234..." }
Response
{ "token": "eyJ...", "user": { "address": "0x1234..." } }
Use the token in subsequent requests:
Authorization: Bearer <token>
GET /api/auth/nonce
Generate SIWE nonce
Generate a nonce for Sign-In with Ethereum (EIP-4361) authentication flow.
POST /api/auth/signin
SIWE signature verification
Verify a SIWE message + signature. Returns JWT token on success.
| Param | Type | Description | |
|---|---|---|---|
| message | string | required | SIWE message string |
| signature | string | required | Wallet signature of the message |
Search & Discovery
Public
2 endpoints
POST /api/search
LLM-powered semantic search
Natural language search with automatic intent detection. Routes to filtered DB search, semantic vector search, creative AI generation, or bulk availability check. Returns a searchId for async summary retrieval.
| Param | Type | Description | |
|---|---|---|---|
| query | string | required | Natural language search query |
| mode | string | optional | "create" for creative name generation |
Example
POST /api/search
{ "query": "3-letter words under 0.1 ETH" }
GET /api/summary/:searchId
Async AI search summary
Retrieve the AI-generated summary for a previous search. Generated asynchronously after search completes.
Name Profiles
Public
5 endpoints
GET /api/name-profile/:label
Comprehensive name profile
Registration info, transfer history, sales history, ownership, social scores, avatar, website, ENS records, holder intelligence (ETH balance, wallet age, ENS count). Aggregates data from ENS Subgraph, Etherscan, Web3.bio, and Alchemy.
GET /api/name-profile/:label/market
Live marketplace data for a name
Current listings and offers across all marketplaces, aggregated and filtered by current owner.
GET /api/name/:label/records
On-chain resolver records
Address records, text records (avatar, description, socials, AI metadata), and contenthash read directly from the on-chain resolver.
POST /api/name/:label/build-record-tx
Build record update transaction
Returns encoded transaction calldata to update resolver records. Sign and broadcast with your wallet.
GET /api/wallet/:address/names
All names owned by an address
Deduplicated list of ENS names owned or registered by a wallet address.
Market Intelligence
Public
4 endpoints
GET /api/market-stats
Global market overview
Sales counts, volume (24h & 7d), floor prices by category (3L, 4L, 5L, 999, 100K), top sale, trending categories, 24h floor deltas. Cached 5 minutes.
GET /api/protocol-analytics
Protocol-wide analytics
Total registrations, renewal counts, historical trends. Auto-refreshes every 24h, persisted to disk.
GET /api/recent-sales
Recent name sales
Filterable by category, price, and event type.
| Query Param | Type | Description | |
|---|---|---|---|
| days | number | default: 7 | Lookback period (max 90) |
| minPrice | number | optional | Minimum sale price in ETH |
| category | string | optional | Filter by category |
GET /api/recent-sales/:label
Sales history for a specific name
Last 20 sales for a specific ENS name.
Categories & Collections
Public
4 endpoints
GET /api/categories
All categories with 7-day stats
Sales, volume, avg price, floor, ceiling per category. Includes Grails club mappings. Cached 5 minutes.
GET /api/categories/:slug
Category detail with trends
Member list, Grails data, 7d/30d trends, badges.
GET /api/categories/:slug/ai-report
AI-generated category analysis
AI analysis of category trends, market health, and opportunities.
GET /api/collections
All collections
Complete list of ENS name collections with metadata.
Expiry Calendar
Public
2 endpoints
GET /api/expiry-calendar
Upcoming name expirations
| Query Param | Type | Description | |
|---|---|---|---|
| days | number | default: 30 | Days ahead (max 90) |
| minLength | number | optional | Minimum label length |
| maxLength | number | optional | Maximum label length |
| charType | string | optional | Character type filter |
| dictionary | boolean | optional | Dictionary words only |
| status | string | optional | active, grace, premium |
| sort | string | optional | expiry, value, length |
| limit | number | default: 50 | Max results (max 500) |
GET /api/expiry-summary
Expiry rollup by date range
High-level summary of upcoming expirations grouped by date range.
Whale Analytics
Public
4 endpoints
GET /api/whales/addresses
Top whale addresses
| Query Param | Type | Description | |
|---|---|---|---|
| days | number | default: 7 | Lookback period (max 90) |
GET /api/whales
Whale leaderboard
Ranking, purchase count, total spent, average price. Includes ENS name resolution.
GET /api/whale/:address
Individual whale detail
Purchase history, portfolio size, ENS names owned, total spent.
GET /api/sellers
Top sellers in a period
| Query Param | Type | Description | |
|---|---|---|---|
| days | number | default: 7 | Lookback period (max 90) |
| limit | number | default: 20 | Max results (max 50) |
Category Statistics
Public
2 endpoints
GET /api/category-stats
Sales stats by name length
Sale count, volume, avg/median/floor/ceiling prices for 3L, 4L, 5L, etc. Cached 5 minutes.
GET /api/category-trends
Time-series category trends
Daily breakdown of sales trends per category. Cached 10 minutes.
| Query Param | Type | Description | |
|---|---|---|---|
| days | number | default: 7 | Lookback period (max 90) |
| length | number | optional | Filter to specific label length |
Trading
Auth Required
17 endpoints
GET /api/trade/listings/:label
Current listings for a name
Aggregated marketplace listings. Public, no auth required.
GET /api/trade/offers/:label
Current offers on a name
All active offers. Public, no auth required.
GET /api/trade/market-data/:label
Combined listings + offers
One-call aggregation of all marketplace data for a name.
GET /api/trade/availability/:label
Registration availability + pricing
Check if a name is available for registration and get pricing tiers.
GET /api/trade/name-status/:label
On-chain name status
Available, registered, premium auction, grace period, etc.
GET /api/trade/expiry/:label
Expiry date + premium price
Days remaining, expiry timestamp, premium price if applicable.
GET /api/trade/rent-price/:label
NameWrapper rental pricing
ENS rental pricing tiers for wrapped domains.
POST /api/trade/register-recipe
Build registration transaction
Returns complete registration recipe with contract, ABI, steps, and gas estimate. Requires auth.
POST /api/trade/renew-recipe
Build renewal transaction
Returns transaction data to extend name registration. Requires auth.
POST /api/trade/batch-renew-recipe
Batch renewal via Multicall3
Bundle multiple renewals into a single transaction. Requires auth.
POST /api/trade/transfer-recipe
Build transfer transaction
Returns transaction data to transfer name ownership. Auto-detects wrapped vs unwrapped. Requires auth.
POST /api/trade/set-primary-name
Set primary ENS name
Set reverse resolution for a wallet address. Requires auth.
POST /api/trade/set-records
Update resolver records
Build a multicall transaction to set address records, text records, and contenthash. Requires auth.
POST /api/trade/fulfillment
Execute purchase/offer
Fulfill a Seaport order (buy listing or accept offer). Requires auth.
POST /api/trade/create-offer
Create a marketplace offer
Submit a bid on any registered name. Requires auth.
POST /api/trade/create-listing
List a name for sale
Create a Seaport listing for a name you own. Requires auth.
DELETE /api/trade/order/:orderId
Cancel an order
Cancel an active listing or offer. Requires auth.
User Management
Auth Required
14 endpoints
GET /api/user/me
Current user profile
Address, ENS name, email, settings.
Watchlist
GET, POST, PATCH, DELETE /api/user/watchlist
CRUD operations for the user's watchlist. POST to add, GET to list, PATCH /:label to update notes/tags, DELETE /:label to remove.
Search History
GET, DELETE /api/user/history
GET to retrieve search history, DELETE to clear it.
Portfolio
5 endpoints under /api/user/portfolio-*
GET /api/user/portfolio-history — Historical portfolio snapshots
POST /api/user/portfolio-snapshot — Create point-in-time snapshot
GET /api/user/portfolio-stats — Aggregate stats (total value, count, unrealized PnL)
GET /api/user/portfolio-pnl — Detailed P&L per name
GET /api/user/portfolio-realized — Realized gains/losses on sold names
POST /api/user/portfolio-snapshot — Create point-in-time snapshot
GET /api/user/portfolio-stats — Aggregate stats (total value, count, unrealized PnL)
GET /api/user/portfolio-pnl — Detailed P&L per name
GET /api/user/portfolio-realized — Realized gains/losses on sold names
Email
PUT, DELETE /api/user/email
PUT to set email for alerts, DELETE to remove.
Terminal / Chat
Auth Required
5 endpoints
POST /api/terminal/chat
AI chat (SSE stream)
Multi-turn conversation with the Claude-powered ENS agent. Returns Server-Sent Events stream. Backed by RAG over the ENS knowledge base.
Sessions
CRUD at /api/terminal/sessions
GET /api/terminal/sessions — List user's chat sessions
GET /api/terminal/sessions/:id — Fetch session messages
POST /api/terminal/sessions — Create new session
DELETE /api/terminal/sessions/:id — Delete session
GET /api/terminal/sessions/:id — Fetch session messages
POST /api/terminal/sessions — Create new session
DELETE /api/terminal/sessions/:id — Delete session
Knowledge
Public
1 endpoint
GET /api/knowledge-search
Search ENS knowledge base
Governance proposals, protocol docs, developer insights, blog posts, forum discussions, and Farcaster casts from key ENS figures.
| Query Param | Type | Description | |
|---|---|---|---|
| q | string | required | Search query |
| source | string | optional | ens-forum, vitalik-blog, ens-blog, ens-docs, farcaster |
| limit | number | default: 6 | Number of results |
Media
Public
1 endpoint
POST /api/upload-avatar
Upload avatar to IPFS
Multipart upload. Accepts PNG, JPG, GIF, WebP, SVG (max 5 MB). Returns IPFS URI, gateway URL, and CID. Use the IPFS URI as the ENS avatar text record value.
Recipes
Common Workflows
Provision an agent identity
- Call
provision_agent_identitywith purpose, budget, and wallet - Pick a name from the recommendations
- Execute the registration recipe with your wallet (commit → wait 60s → register)
- Call
set_ens_recordswith the suggested records (ai.agent, ai.capabilities, etc.) - Call
set_primary_nameto set reverse resolution
Find and buy underpriced names
- Call
find_alphawith your price ceiling and minimum discount - For each opportunity, call
get_valuationfor deep analysis - Call
purchase_nameto get the Seaport fulfillment data - Sign and broadcast the transaction with your wallet
Deploy an agent fleet
- Register the parent name:
purchase_namewith action "register" - Wrap it:
wrap_nameto enable subname features - Mint fleet subnames:
mint_subnames(e.g. agent001.fleet.eth, agent002.fleet.eth) - Configure all at once:
bulk_set_recordswith agent metadata per subname
Standards
Protocol Support
Name Whisper implements emerging standards for AI agent identity on Ethereum.
ENSIP-25
Agent-to-ENS binding protocol. Cryptographically links an ENS name to an on-chain agent registry entry via standardized text records. Supported in set_ens_records, bulk_set_records, provision_agent_identity, and get_agent_reputation.
Live
ERC-8004
Agent identity registry standard. On-chain agent registration, reputation scoring, and capability validation. Live on Ethereum mainnet since Jan 2026. View the live registry feed →
Live
Payments
Machine Payment Protocols
Name Whisper supports two machine-to-machine payment protocols for agent transactions. All tools are currently free — fee switches exist to activate either protocol later.
x402
HTTP-native payment protocol via Coinbase. USDC on Base (chain ID 8453). Payment challenges and receipts flow through HTTP 402 responses and headers. x402.org
Dormant
MPP
MCP-native payment protocol via Stripe/Tempo. pathUSD on Tempo network. Payment challenges, credentials, and receipts flow through JSON-RPC
_meta fields in the MCP SDK transport. mpp.devDormant
Tool Classification
27 tools are permanently free (search, valuation, portfolio, market data, knowledge). 4 transaction tools (
purchase_name, make_offer, set_ens_records, mint_subnames) are wrapped with payment gating. When fees activate, these tools return a 402 challenge that the agent resolves via the active protocol.
Payment Discovery
Agents can query the payment discovery endpoint to check which protocols are available, which tools are free vs paid, and current pricing.
GET /mcp/payments
Payment protocol discovery
Returns supported payment protocols, active protocol, and per-tool classification with current pricing.
Response
{
"activeProtocol": null,
"protocols": {
"x402": {
"supported": true,
"enabled": false,
"currency": "USDC",
"network": "base",
"chainId": 8453
},
"mpp": {
"supported": true,
"enabled": false,
"currency": "pathUSD",
"network": "tempo",
"transport": "mcp-sdk"
}
},
"tools": [
{ "name": "search_ens_names", "classification": "FREE", "requiresPayment": false },
{ "name": "purchase_name", "classification": "TRANSACTION", "requiresPayment": false, "currentPrice": "0" },
// ... all 34 tools listed
]
}
Payment Flow
When fee switches are activated, transaction tools use this flow:
x402 (HTTP transport)
- Agent calls a TRANSACTION tool via HTTP
- Server responds with HTTP 402 + payment challenge (USDC amount, pay-to address)
- Agent pays on Base, receives receipt
- Agent retries the tool call with payment receipt in headers
- Server verifies receipt and executes the tool
MPP (MCP SDK transport)
- Agent calls a TRANSACTION tool via MCP SDK
- Server returns an MCP error
-32042with payment challenge in_meta - Agent pays on Tempo (pathUSD), receives credential
- Agent retries with payment credential in the
_metafield - Server verifies credential and executes the tool