Skip to main content
Glama

Name Whisper — ENS Intelligence Layer

renew_ens_name

Destructive

Renew an ENS name or batch of names. Returns the transaction data needed to extend registration.

Unlike registration, renewal is simple — just one transaction with payment. No commit/reveal needed.

Accepts any duration from 1 day up — days, weeks, months, years. ENS protocol has no minimum renewal period; this tool floors at 1 day for safety. Examples: 1 day, 7 days (1 week), 28 days (1 month), 365 days (1 year).

Anyone can renew any name (you don't need to be the owner). This is useful for:

  • Extending your own names before expiry

  • Gifting renewal to a friend's name

  • Protecting valuable names from expiring

While ENS v1 is open (paid in ETH): returns exact on-chain pricing from the ETHRegistrarController with a 5% buffer (excess is refunded) — do NOT estimate renewal prices yourself. For batch renewals (multiple names), all names are bundled into a SINGLE Multicall3 transaction.

Once ENS has moved to v2 the result has type "ens_v2_renewal" instead: paid in USDC or DAI (never ETH) from walletAddress, with NO buffer and nothing refunded — the wallet pays exactly the total shown. Steps: approve (if needed), then one renew transaction per ENS contract (names already on v2 and names not yet upgraded renew through different contracts, so a mixed batch is two renew transactions). Through Name Whisper's ENS v2 router (feeMode "atomic") the Name Whisper fee (1%, same token) is taken in the same transaction as each renewal; otherwise it is a separate last transaction. Follow the result's message: quote the total once in the token, as the result shows it (e.g. 8.09 USDC), with the Name Whisper fee as included in it.

Calling this tool never spends money — it only builds an unsigned transaction rendered as a sign-card; nothing happens until the user clicks Sign. So the sign-card IS the confirmation step.

Conversational flow:

  • User names the specific name(s) ("renew coffee.eth", "renew coffee.eth for 3 months"): call this tool IMMEDIATELY. If no duration was given, use the 1-year default and say so ("built it for 1 year — tell me if you want longer/shorter") — do NOT stop to ask the duration first; they can just say a different one and you rebuild.

  • User names a BUDGET ("renew coffee.eth for $45", "put 0.02 ETH into it", "I only have ETH for $45"): pass budgetUsd / budgetEth and NO duration. The tool solves the duration from live on-chain pricing — do not work it out yourself (a 4-character name costs ~$160/yr, a 3-character ~$640/yr; the model got the tier wrong live and quoted 26 days for a 4-char name that $45 actually renews for ~100 days). A budget is a HARD CAP: never rebuild above it to "save the name" or reach Active. If the capped renewal leaves the name in grace, the result's budget.summary says so — relay that ONE sentence and hand over the card. Never call this tool more than once for the same budget. Any dollar cost you state comes from budget.summary or price.approxUsd — never from your own ETH/USD conversion.

  • Every result carries whatThisBuys — the new expiry DATE and days from now. That sentence is what you quote before and AFTER the transaction, never the duration ("locked in for 90 days" was said live about a renewal that bought 2 days: it extends from the ORIGINAL expiry).

  • Open-ended "renew my names" / "bulk renew" with no list: first call get_wallet_portfolio to find the names, IGNORE every EXPIRED and PREMIUM_AUCTION name (renewing those reverts the whole batch), present a numbered list grouped by urgency, and ask which names + what duration. Only THEN call this tool.

Input Schema

NameRequiredDescriptionDefault
namesYesENS name or array of names to renew (e.g. "coffee.eth" or ["coffee.eth", "wallet.eth"])
yearsNoDEPRECATED — use duration instead. Number of years (converted to days internally). At most 100, the same ceiling as duration.
durationNoDuration in days to extend registration (e.g. 7 for 1 week, 28 for a month, 365 for a year). Default: 365. Minimum: 1 day. Maximum: 36500 (100 years). When a budget is also given, the budget wins: the duration is capped to what the budget covers.
budgetEthNoSpend cap in ETH ("renew X with 0.02 ETH", "I only have 0.05 ETH") — ONLY when the user states an ETH amount. A dollar figure is budgetUsd even when it says ETH ("$1 of eth", "$20 worth of ETH"): never convert dollars to ETH yourself. Same behaviour as budgetUsd. Mutually exclusive with budgetUsd. Not accepted on ENS v2, which is paid in USDC/DAI.
budgetUsdNoSpend cap in USD ("renew X for $45", "put $20 into it"). The tool prices the name(s) on-chain and picks the LONGEST whole number of days whose transaction value fits under this cap — never compute the duration yourself from a budget. Mutually exclusive with budgetEth.
paymentTokenNoENS v2 only: the stablecoin symbol or address explicitly chosen by the user. Otherwise omit: defaults to the first USDC-family token accepted by the active router (MOCKUSDC on Sepolia; Circle USDC is not accepted there), then DAI, then other accepted tokens. Do not choose based on wallet balances.
walletAddressNoThe wallet that will sign and pay. Required on ENS v2, where the renewal pulls USDC/DAI from this wallet; ignored on v1.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / budgetEth / description
      Previous value: -"Spend cap in ETH (\"renew X with 0.02 ETH\", \"I only have 0.05 ETH\") — ONLY when the user states an ETH amount. A dollar figure is budgetUsd even when it says ETH (\"$1 of eth\", \"$20 worth of ETH\"): never convert dollars to ETH yourself. Same behaviour as budgetUsd. Mutually exclusive with budgetUsd."New value: +"Spend cap in ETH (\"renew X with 0.02 ETH\", \"I only have 0.05 ETH\") — ONLY when the user states an ETH amount. A dollar figure is budgetUsd even when it says ETH (\"$1 of eth\", \"$20 worth of ETH\"): never convert dollars to ETH yourself. Same behaviour as budgetUsd. Mutually exclusive with budgetUsd. Not accepted on ENS v2, which is paid in USDC/DAI."
    • addedInput schema / properties / paymentToken
      Added value: +{
      +  "description": "ENS v2 only: the stablecoin symbol or address explicitly chosen by the user. Otherwise omit: defaults to the first USDC-family token accepted by the active router (MOCKUSDC on Sepolia; Circle USDC is not accepted there), then DAI, then other accepted tokens. Do not choose based on wallet balances.",
      +  "type": "string"
      +}
    • addedInput schema / properties / walletAddress
      Added value: +{
      +  "description": "The wallet that will sign and pay. Required on ENS v2, where the renewal pulls USDC/DAI from this wallet; ignored on v1.",
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / budgetEth / description
      Previous value: -"Spend cap in ETH (\"renew X with 0.02 ETH\", \"I only have 0.05 ETH\"). Same behaviour as budgetUsd. Mutually exclusive with budgetUsd."New value: +"Spend cap in ETH (\"renew X with 0.02 ETH\", \"I only have 0.05 ETH\") — ONLY when the user states an ETH amount. A dollar figure is budgetUsd even when it says ETH (\"$1 of eth\", \"$20 worth of ETH\"): never convert dollars to ETH yourself. Same behaviour as budgetUsd. Mutually exclusive with budgetUsd."
  3. Changed3 schema fields changed
    • changedInput schema / properties / years / description
      Previous value: -"DEPRECATED — use duration instead. Number of years (converted to days internally)."New value: +"DEPRECATED — use duration instead. Number of years (converted to days internally). At most 100, the same ceiling as duration."
    • addedInput schema / properties / years / exclusiveMinimum
      Added value: +0
    • addedInput schema / properties / years / maximum
      Added value: +100
  4. Changed3 schema fields changed
    • addedInput schema / properties / budgetEth
      Added value: +{
      +  "description": "Spend cap in ETH (\"renew X with 0.02 ETH\", \"I only have 0.05 ETH\"). Same behaviour as budgetUsd. Mutually exclusive with budgetUsd.",
      +  "exclusiveMinimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / budgetUsd
      Added value: +{
      +  "description": "Spend cap in USD (\"renew X for $45\", \"put $20 into it\"). The tool prices the name(s) on-chain and picks the LONGEST whole number of days whose transaction value fits under this cap — never compute the duration yourself from a budget. Mutually exclusive with budgetEth.",
      +  "exclusiveMinimum": 0,
      +  "type": "number"
      +}
    • changedInput schema / properties / duration / description
      Previous value: -"Duration in days to extend registration (e.g. 7 for 1 week, 28 for a month, 365 for a year). Default: 365. Minimum: 1 day. Maximum: 36500 (100 years)."New value: +"Duration in days to extend registration (e.g. 7 for 1 week, 28 for a month, 365 for a year). Default: 365. Minimum: 1 day. Maximum: 36500 (100 years). When a budget is also given, the budget wins: the duration is capped to what the budget covers."
  5. Changed4 schema fields changed
    • changedInput schema / properties / duration / description
      Previous value: -"Duration in days to extend registration (e.g. 7 for 1 week, 28 for a month, 365 for a year). Default: 365. Any positive number is valid — there is NO minimum."New value: +"Duration in days to extend registration (e.g. 7 for 1 week, 28 for a month, 365 for a year). Default: 365. Minimum: 1 day. Maximum: 36500 (100 years)."
    • addedInput schema / properties / duration / maximum
      Added value: +36500
    • addedInput schema / properties / duration / minimum
      Added value: +1
    • changedInput schema / properties / duration / type
      Previous value: -"number"New value: +"integer"
  6. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses that the call never spends money and only builds an unsigned sign-card, that v1 pricing includes a 5% buffer with refund, that v2 is USDC/DAI with no buffer and one transaction per contract, and that a batch containing EXPIRED names reverts entirely. It also explains the Name Whisper 1% fee mechanics and when it is folded into the atomic renewal.

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

Conciseness3/5

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

Purpose and the v1/v2 distinction are front-loaded, which is good, but the prose is roughly 500 words with redundant restatements ('never compute the duration yourself' appears in two places, the $160/$640 tier aside and the 'model got the tier wrong live' retrospectives are noise). A meaningful fraction could be trimmed without losing capability-relevant guidance.

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

Completeness5/5

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

For a 7-parameter, mutation-capable, dual-protocol (v1/v2) tool with no output schema, the description still covers the full decision space: duration vs budget, batching, token choice, expiry semantics, confirmation flow, and the pre-step for bulk renewals. Nothing an agent needs in order to invoke it correctly is missing.

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?

Schema coverage is already 100%, so the baseline is 3; the description still adds cross-parameter behavior — duration is floored at 1 day and capped at 100 years, and 'when a budget is also given, the budget wins' clarifies the budget/duration precedence. The 'days, weeks, months, years' phrasing is slightly at odds with the integer-days parameter, but the schema resolves it.

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?

States a specific verb and resource ('Renew an ENS name or batch of names') and immediately contrasts with registration ('unlike registration, renewal is simple — just one transaction'). An agent can distinguish it from bulk_register, purchase_name, extend_subname_expiry, and get_expiring_names without reading schemas.

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

Usage Guidelines5/5

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

Explicitly routes the agent: call immediately when specific names are given (duration default 1 year, don't stop to ask), pass budgetUsd/budgetEth instead of duration when a budget is stated, and for open-ended 'renew my names' first call get_wallet_portfolio and ignore EXPIRED/PREMIUM_AUCTION names. Exclusions ('never rebuild above the cap', 'never call more than once for the same budget') are spelled out.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.