Run a narrative-to-ENS paper trade
Turn one time-stamped crypto narrative into live ENS candidates and an expiring decision receipt without connecting a wallet.
- For
- Researchers, market-intelligence agents and first-time builders
- Typical time
- 10–15 min
- One narrative with its source URL and observation time
- Network access to https://ens.tools/mcp
- A place to retain the paper receipt for 30 days
semantic_domain_searchbatch_check_availabilitymarketplace_searchget_market_activityestimate_domain_value- 1
Pin the signal
Record the narrative, source URL and observedAt before generating names. Do not rewrite the signal after seeing results.
Success: Retain the exact source, timestamp and a SHA-256 thesisId.
- 2
Generate and recheck candidates
Call semantic_domain_search with the narrative, then pass no more than 20 normalized candidates to batch_check_availability.
Success: Every retained candidate has a live lifecycle result and checkedAt timestamp.
- 3
Collect market evidence
For each finalist, call marketplace_search, get_market_activity and estimate_domain_value. Treat the heuristic valuation as context, never as a price guarantee.
Success: The receipt links availability, active inventory, comparable activity and valuation factors separately.
- 4
Reject weak theses
Reject stale, unavailable or premium-priced registrations, unverified listings, and candidates without enough comparable evidence. Retain the rejection reason.
Success: At most five finalists remain and every exclusion is reproducible.
- 5
Publish and score the receipt
Create a paper-only receipt that expires 15 minutes after observedAt. After 30 days, score registrations, sales, offers, rent, fees and a no-trade baseline.
Success: execution is paper, no wallet action exists, expiresAt is 15 minutes, and the original receipt remains immutable.
const signal = {
narrative: 'Onchain AI agents are adopting portable identities',
source: 'https://example.com/research/onchain-agent-identities',
observedAt: new Date().toISOString()
};
const candidates = await ens.call('semantic_domain_search', {
query: signal.narrative,
limit: 20
});
const availability = await ens.call('batch_check_availability', {
names: candidates.results.map(({ name }) => name).slice(0, 20),
duration: 31536000
});
// Inspect marketplace_search, get_market_activity and
// estimate_domain_value before emitting a paper-only receipt.{
"narrative": "Onchain AI agents are adopting portable identities",
"source": "https://example.com/research/onchain-agent-identities",
"observedAt": "2026-07-29T09:00:00Z",
"maximumCandidates": 20,
"maximumFinalists": 5
}{
"schema": "ens-tools.paper-trade/v1",
"agent": "researcher.example.eth",
"thesisId": "sha256:replace-with-canonical-input-digest",
"observedAt": "2026-07-29T09:00:00Z",
"action": "watch",
"name": "agentidentity.eth",
"maximumTotalCost": "0.025 ETH",
"evidence": {
"narrativeSource": "https://example.com/research/onchain-agent-identities",
"availabilityCheckedAt": "2026-07-29T09:03:00Z",
"marketActivityCheckedAt": "2026-07-29T09:05:00Z",
"valuation": "heuristic-not-guaranteed"
},
"rejections": ["premium exceeds policy", "insufficient comparable evidence"],
"expiresAt": "2026-07-29T09:15:00Z",
"execution": "paper",
"walletRequired": false,
"scoreAfter": "2026-08-28T09:00:00Z",
"baseline": "no-trade"
}- No wallet is connected, requested or funded.
- Every candidate has fresh availability and separate market evidence.
- The receipt expires exactly 15 minutes after the pinned signal.
- Rejected candidates retain explicit, reproducible reasons.
- The immutable receipt is scored after 30 days against a no-trade baseline.