ai.namewhisper/ens-tools
Name Whisper — ENS Intelligence Layer
34 MCP tools to search, register, manage, value, and trade ENS names. AI-powered intelligence layer.
Status
Failing
Score
58.0
Transport
streamable-http
Tools
0
Production readiness
Verdict
Needs remediation
Current validation evidence shows operational or discovery gaps that should be fixed first.
Critical alerts
1
Production verdicts degrade quickly when critical alerts are active.
Evidence confidence
Confidence score
55.0
Based on 20 recent validations, 26 captured checks, and validation age of 48.6 hours.
Live checks captured
26
More direct checks increase trust in the current verdict.
Validation age
48.6h
Lower age means fresher evidence.
Recommended for
Generic Streamable HTTP
Generic Streamable HTTP is marked compatible with score 83.
Client readiness verdicts
Ready for ChatGPT custom connector
Partial
Dynamic client registration materially improves connector setup.; tools/list must succeed.; Transport compliance should be in good shape.
Confidence: medium (55.0)
Evidence provenance
Winner: live_validation
Supporting sources: live_validation, history, server_card
Disagreements: none
initialize• OKtools_list• Errortransport_compliance_probe• Errorstep_up_auth_probe• OKconnector_replay_probe• Missing — Frozen tool snapshots must survive refresh.request_association_probe• Missing — Roots, sampling, and elicitation should stay request-scoped.
Ready for Claude remote MCP
Blocked
tools/list must succeed.; Transport behavior should match Claude-compatible HTTP expectations.; A useful Claude integration needs at least one exposed tool.
Confidence: medium (55.0)
Evidence provenance
Winner: live_validation
Supporting sources: live_validation, history, server_card
Disagreements: none
initialize• OKtools_list• Errortransport_compliance_probe• Error
Unsafe for write actions
No
Current write surface is bounded enough for cautious review.
Confidence: medium (55.0)
Evidence provenance
Winner: live_validation
Supporting sources: live_validation, history
Disagreements: none
action_safety_probe• OK
Snapshot churn risk
Low
No material tool-surface churn detected in the latest comparison.
Confidence: medium (55.0)
Evidence provenance
Winner: history
Supporting sources: history, live_validation
Disagreements: none
tool_snapshot_probe• Missingconnector_replay_probe• Missing
Why not ready by client
ChatGPT custom connector
Partial
Remediation checklist
- No explicit blockers recorded.
Claude remote MCP
Blocked
Remediation checklist
- No explicit blockers recorded.
Write-safe publishing
Ready
Remediation checklist
- No explicit blockers recorded.
Verdict traces
Production verdict
Needs remediation
Current validation evidence shows operational or discovery gaps that should be fixed first.
Confidence: medium (55.0)
Winning source: live_validation
Triggering alerts
validation_stale• medium • Validation evidence is staleserver_failing• critical • Latest validation is failing
Client verdict trace table
| Verdict | Status | Checks | Winning source | Conflicts |
|---|---|---|---|---|
openai_connectors |
Partial | initialize, tools_list, transport_compliance_probe, step_up_auth_probe, connector_replay_probe, request_association_probe | live_validation | none |
claude_desktop |
Blocked | initialize, tools_list, transport_compliance_probe | live_validation | none |
unsafe_for_write_actions |
No | action_safety_probe | live_validation | none |
snapshot_churn_risk |
Low | tool_snapshot_probe, connector_replay_probe | history | none |
Publishability policy profiles
ChatGPT custom connector publishability
Caution
Dynamic client registration materially improves connector setup.; tools/list must succeed.; Transport compliance should be in good shape.
- Search Fetch Only: No
- Write Actions Present: No
- Oauth Configured: Yes
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
Claude remote MCP publishability
Caution
tools/list must succeed.; Transport behavior should match Claude-compatible HTTP expectations.; A useful Claude integration needs at least one exposed tool.
- Search Fetch Only: No
- Write Actions Present: No
- Oauth Configured: Yes
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
Compatibility fixtures
ChatGPT custom connector fixture
Degraded
Dynamic client registration materially improves connector setup.; tools/list must succeed.; Transport compliance should be in good shape.
- remote_http_endpoint: Passes
- oauth_discovery: Passes
- frozen_tool_snapshot_refresh: Passes
- request_association: Passes
Anthropic remote MCP fixture
Degraded
tools/list must succeed.; Transport behavior should match Claude-compatible HTTP expectations.; A useful Claude integration needs at least one exposed tool.
- remote_transport: Passes
- tool_discovery: Likely to fail
- auth_connect: Passes
- safe_write_review: Passes
Authenticated validation sessions
Latest profile
remote_mcp
Authenticated session used
Public score isolation
Preview endpoint
/v1/verifyCI preview endpoint
/v1/ci/previewPublic server reputation
Validation success 7d
0.0
Validation success 30d
0.0
Mean time to recover
n/a
Breaking diffs 30d
0
Registry drift frequency 30d
0
Snapshot changes 30d
0
Incident & change feed
| Timestamp | Event | Details |
|---|---|---|
| May 02, 2026 05:18:02 AM UTC | Latest validation: failing | Score 58.0 with status failing. |
Capabilities
- OAuth:
- DCR/CIMD:
- Prompts:
- Homepage: none
- Docs: none
- Support: none
- Icon: none
- Remote endpoint: https://namewhisper.ai/mcp
- Server card: none
Use-case taxonomy
search
Security posture
Tools analyzed
0
High-risk tools
0
Destructive tools
0
Exec tools
0
Egress tools
0
Secret tools
0
Bulk-access tools
0
Risk distribution
none
Tool capability & risk inventory
No tool inventory available from the latest validation run.
Write-action governance
Governance status
OK
Safe to publish
Auth boundary
oauth_or_auth_required
Blast radius
Low
High-risk tools
0
Confirmation signals
none
Safeguard count
0
Status detail: No unsafe write-action governance gaps detected on the latest validation.
| Tool | Risk | Flags | Safeguards |
|---|---|---|---|
| No high-risk tools were detected on the latest run. | |||
Action-controls diff
Need at least two validation runs before diffing action controls.
Why this score?
Access & Protocol
32.5/44
Connectivity, auth, and transport expectations for common clients.
Interface Quality
13.75/56
How well the tool/resource interface communicates and behaves under automation.
Security Posture
27/36
How safely the exposed tool surface handles destructive actions, egress, execution, secrets, and risky inputs.
Reliability & Trust
16.86/24
Operational stability, consistency, and trustworthiness over time.
Discovery & Governance
19.5/28
How well the server is documented, listed, and governed in public registries.
Adoption & Market
4/8
Adoption clues and public evidence that the server is intended for external use.
Algorithmic score breakdown
Auth Operability
3/4
Measures whether auth discovery and protected access behave predictably for clients.
Error Contract Quality
1/4
Grades machine-readable error structure, status alignment, and remediation hints.
Rate-Limit Semantics
2/4
Checks whether quota/throttle responses are deterministic and automation-friendly.
Schema Completeness
0/4
Completeness of tool descriptions, parameter docs, examples, and schema shape.
Backward Compatibility
4/4
Stability score across tool schema/name drift relative to prior validations.
SLO Health
2/4
Availability, latency, and burst-failure profile across recent validation history.
Security Hygiene
4/4
HTTPS posture, endpoint hygiene, and response-surface hardening checks.
Task Success
3.3/4
Can an agent reliably initialize, enumerate tools, and execute core MCP flows?
Trust Confidence
2/4
Confidence-adjusted reliability score that penalizes low evidence volume.
Abuse/Noise Resilience
2.5/4
How well the server preserves core behavior in the presence of noisy traffic patterns.
Prompt Contract
1.5/4
Quality of prompt metadata, argument shape, and prompt discoverability for clients.
Resource Contract
1.5/4
How completely resources and resource templates describe URIs, types, and usage shape.
Discovery Metadata
2/4
Homepage, docs, icon, repository, support, and license coverage for directory consumers.
Registry Consistency
2/4
Agreement between stored registry metadata, live server-card data, and current validation output.
Installability
2/4
How cleanly a real client can connect, initialize, enumerate tools, and proceed through auth.
Session Semantics
2.5/4
Determinism and state behavior across repeated MCP calls, including sticky-session surprises.
Tool Surface Design
0/4
Naming clarity, schema ergonomics, and parameter complexity across the tool surface.
Result Shape Stability
0/4
Stability of declared output schemas across validations, with penalties for drift or missing shapes.
OAuth Interop
3/4
Depth and client compatibility of OAuth/OIDC metadata beyond the minimal protected-resource check.
Recovery Semantics
0.8/4
Whether failures include actionable machine-readable next steps such as retry or upgrade guidance.
Maintenance Signal
3/4
Versioning, update recency, and historical validation cadence that indicate active stewardship.
Adoption Signal
2/4
Directory presence and distribution clues that suggest the server is intended for external use.
Freshness Confidence
3/4
Confidence that recent validations are current enough and dense enough to trust operationally.
Transport Fidelity
4/4
Whether declared transport metadata matches the observed endpoint behavior and response formats.
Spec Recency
2/4
How close the server’s claimed MCP protocol version is to the latest known public revision.
Session Resume
4/4
Whether Streamable HTTP session identifiers and resumed requests behave cleanly for real clients.
Step-Up Auth
4/4
Whether OAuth metadata and WWW-Authenticate challenges support granular, incremental consent instead of broad upfront scopes.
Transport Compliance
2/4
Checks session headers, protocol-version enforcement, session teardown, and expired-session behavior.
Utility Coverage
2/4
Signals support for completions, pagination, and task-oriented utility surfaces that larger clients increasingly expect.
Advanced Capability Coverage
2/4
Coverage of newer MCP surfaces like roots, sampling, elicitation, structured output, and related metadata.
Connector Publishability
2/4
How ready the server looks for client catalogs and managed connector programs.
Tool Snapshot Churn
0/4
Stability of the tool surface across recent validations, including add/remove and output-shape drift.
Connector Replay
3/4
Whether a previously published frozen connector snapshot would remain backward compatible after the latest tool refresh.
Request Association
3/4
Whether roots, sampling, and elicitation appear tied to active client requests instead of arriving unsolicited on idle sessions.
Interactive Flow Safety
4/4
Whether prompts and docs steer users toward safe auth flows instead of pasting secrets directly.
Action Safety
3/4
Risk-weighted view of destructive, exec, egress, and confirmation semantics across the tool surface.
Official Registry Presence
4/4
Whether the server appears directly or indirectly in the official MCP registry.
Provenance Divergence
4/4
How closely official registry metadata, the live server card, and public repo/package signals agree with each other.
Safety Transparency
2/4
Clarity of docs, auth disclosure, support links, and other trust signals visible to integrators.
Tool Capability Clarity
0/4
How clearly the tool surface communicates whether each action reads, writes, deletes, executes, or exports data.
Destructive Operation Safety
3/4
Penalizes delete/revoke/destroy style tools unless auth and safeguards reduce blast radius.
Egress / SSRF Resilience
3/4
Assesses arbitrary URL fetch, crawl, webhook, and remote-request exposure on the tool surface.
Execution / Sandbox Safety
4/4
Evaluates shell, code, script, and command-execution exposure and whether that surface appears contained.
Data Exfiltration Resilience
3/4
Assesses export, dump, backup, and bulk-read behavior against the surrounding auth and safeguard signals.
Least Privilege Scope
3/4
Rewards scoped auth metadata and penalizes broad or missing scopes around privileged tools.
Secret Handling Hygiene
3/4
Assesses secret-bearing tools, token leakage risk, and whether the public surface avoids obvious secret exposure.
Supply Chain Signal
2.5/4
Public metadata signal for repository, changelog, license, versioning, and recency that supports supply-chain trust.
Input Sanitization Safety
0/4
Penalizes risky freeform string inputs when schemas do not constrain URLs, code, paths, queries, or templates.
Tool Namespace Clarity
0/4
Measures naming uniqueness and ambiguity across the tool namespace to reduce collision and confusion risk.
Compatibility profiles
OpenAI Connectors
66.7
partial
Dynamic client registration materially improves connector setup.; tools/list must succeed.; Transport compliance should be in good shape.
Connector URL: https://namewhisper.ai/mcp # Complete OAuth in the client when prompted. # Server: ai.namewhisper/ens-tools
Claude Desktop
50.0
blocked
tools/list must succeed.; Transport behavior should match Claude-compatible HTTP expectations.; A useful Claude integration needs at least one exposed tool.
{
"mcpServers": {
"ens-tools": {
"command": "npx",
"args": ["mcp-remote", "https://namewhisper.ai/mcp"]
}
}
}
Smithery
60.0
partial
Tool discovery must succeed.; Machine-readable failure semantics should be present.
smithery mcp add "https://namewhisper.ai/mcp"
Generic Streamable HTTP
83.3
compatible
tools/list must succeed.
curl -sS https://namewhisper.ai/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Actionable remediation
| Severity | Remediation | Why it matters | Recommended action |
|---|---|---|---|
| Critical | Ensure tools/list succeeds consistently | Tools discovery is the minimum viable contract for most MCP clients and directories. | Make tools/list succeed unauthenticated when possible, or document the auth flow in the server card.Playbook
|
| Critical | Respond to latest validation is failing | Core MCP flows did not validate successfully on the latest run. | Fix the failing checks first, then revalidate to confirm the recovery path.Playbook
|
| High | Align session and protocol behavior with Streamable HTTP expectations | Clients increasingly rely on MCP-Protocol-Version, session teardown, and expired-session semantics. | Align MCP-Protocol-Version, MCP-Session-Id, DELETE teardown, and expired-session handling with the transport spec.Playbook
|
| High | Associate roots, sampling, and elicitation with active client requests | Modern MCP guidance expects roots, sampling, and elicitation traffic to be tied to an active client request instead of arriving unsolicited on idle sessions. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| High | Keep connector refreshes backward compatible | Managed connector clients freeze tool snapshots, so removed tools, new required args, and breaking output changes can break published integrations after refresh. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Adopt a current MCP protocol revision | Older protocol revisions reduce compatibility with newer clients and registry programs. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Close connector-publishing gaps | Connector catalogs care about protocol recency, session behavior, auth clarity, and tool-surface stability. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Publish OpenID configuration | OIDC metadata improves token validation and client compatibility. | Expose /.well-known/openid-configuration with issuer, jwks_uri, and supported grants.Playbook
|
| Medium | Raise Adoption & Market score | Adoption clues and public evidence that the server is intended for external use. | Increase external documentation and directory coverage so users can discover and evaluate the server.Playbook
|
| Medium | Raise Interface Quality score | How well the tool/resource interface communicates and behaves under automation. | Improve schemas, error contracts, and recovery messages so agents can reason about the surface automatically.Playbook
|
| Medium | Reduce tool-surface churn | Frequent add/remove or output-shape drift makes published connectors and cached tool snapshots brittle. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Repair prompts/list or stop advertising prompts | Prompt metadata should either work live or be removed from the advertised capability set. | Only advertise prompts if prompts/list works and prompt arguments are documented.Playbook
|
| Medium | Repair resources/list or stop advertising resources | Resource metadata should either work live or be removed from the advertised capability set. | Only advertise resources if resources/list works and resources expose stable URIs/types.Playbook
|
| Medium | Respond to validation evidence is stale | Latest validation is 48.6 hours old. | Trigger a fresh validation run or increase scheduler priority for this server.Playbook
|
| Low | Expose modern utility surfaces like completions, pagination, or tasks | Utility coverage improves interoperability with larger clients and long-lived agent workflows. | Expose completions, pagination, and task metadata where supported so larger clients can plan and resume work safely.Playbook
|
| Low | Publish newer MCP capability signals | Roots, sampling, elicitation, structured outputs, and related metadata improve client understanding and ranking. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
Point loss breakdown
| Component | Current | Points missing |
|---|---|---|
| Tool Surface Design | 0/4 | -4.0 |
| Tool Snapshot Churn | 0/4 | -4.0 |
| Tool Namespace Clarity | 0/4 | -4.0 |
| Tool Capability Clarity | 0/4 | -4.0 |
| Schema Completeness | 0/4 | -4.0 |
| Result Shape Stability | 0/4 | -4.0 |
| Input Sanitization Safety | 0/4 | -4.0 |
| Recovery Semantics | 0.8/4 | -3.2 |
| Error Contract | 1/4 | -3.0 |
| Resource Contract | 1.5/4 | -2.5 |
| Prompt Contract | 1.5/4 | -2.5 |
| Utility Coverage | 2/4 | -2.0 |
Validation diff
Score delta
0
Summary changed
no
Tool delta
0
Prompt delta
0
Auth mode changed
no
Write surface expanded
no
Protocol regressed
no
Registry drift changed
no
Regressed checks: none
Improved checks: none
| Component | Previous | Latest | Delta |
|---|---|---|---|
| No component deltas between the latest two runs. | |||
Tool snapshot diff & changelog
Need at least two validation runs before building a tool changelog.
Connector replay
Status
Missing
Backward compatible
Would break after refresh
Added tools
none
Removed tools
none
Additive output changes
none
Required-argument replay breaks
| Tool | Added required args | Removed required args |
|---|---|---|
| No required-argument replay breaks detected. | ||
Output-schema replay breaks
| Tool | Removed properties | Added properties |
|---|---|---|
| No output-schema replay breaks detected. | ||
Transport compliance drilldown
Probe status
Error
Transport
streamable-http
Session header
yes
Protocol header
no
Bad protocol response
400
DELETE teardown
200
Expired session retry
400
Last-Event-ID visible
no
Issues: missing_protocol_header, expired_session_not_404
Request association
Status
Missing
Advertised capabilities
none
Observed idle methods
none
Violating methods
none
Probe HTTP status
n/a
Issues
none
Utility coverage
Probe status
Missing
Completions
not detected
Completion probe target: none
Pagination
not detected
No nextCursor evidence.
Tasks
Missing
Advertised: no
Benchmark tasks
| Benchmark task | Status | Evidence |
|---|---|---|
| Discover tools | Likely to fail |
|
| Read-only fetch flow | Likely to fail |
|
| OAuth-required connect | Passes |
|
| Safe write flow with confirmation | Passes |
|
Registry & provenance divergence
Probe status
OK
Direct official match
yes
Drift fields
none
| Field | Registry | Live server card |
|---|---|---|
| Title | n/a | NW Terminal |
| Version | n/a | 2.0.0 |
| Homepage | n/a | n/a |
Active alerts
- Validation evidence is stale (medium)
Latest validation is 48.6 hours old. - Latest validation is failing (critical)
Core MCP flows did not validate successfully on the latest run.
Aliases & registry graph
| Identifier | Source | Canonical | Score |
|---|---|---|---|
ai.namewhisper/ens-tools |
official_registry | yes | 57.96 |
Alias consolidation
Canonical identifier
ai.namewhisper/ens-tools
Duplicate aliases
0
Registry sources
official_registry
Remote URLs
Homepages
none
Source disagreements
| Field | What differs | Observed values |
|---|---|---|
| No source disagreements detected. | ||
Install snippets
Openai Connectors
Connector URL: https://namewhisper.ai/mcp # Complete OAuth in the client when prompted. # Server: ai.namewhisper/ens-tools
Claude Desktop
{
"mcpServers": {
"ens-tools": {
"command": "npx",
"args": ["mcp-remote", "https://namewhisper.ai/mcp"]
}
}
}
Smithery
smithery mcp add "https://namewhisper.ai/mcp"
Generic Http
curl -sS https://namewhisper.ai/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Agent access & tool surface
Live server tools
No live tool surface captured yet.
Observed from the latest live validation against https://namewhisper.ai/mcp. This is the target server surface, not Verify's own inspection tools.
Live capability counts
0 tools • 0 prompts • 0 resources
Counts come from the latest
tools/list, prompts/list, and resources/list checks.Inspect with Verify
search_servers recommend_servers get_server_report compare_servers
Use Verify itself to search, recommend, compare, and fetch the full report for
ai.namewhisper/ens-tools.Direct machine links
Claims & monitoring
Server ownership
No verified maintainer claim recorded.
Watch subscriptions
0
Teams: none
Alert routing
Active watches
0
Generic webhooks
0
Slack routes
0
Teams routes
0
Email routes
0
| Watch | Team | Channels | Minimum severity |
|---|---|---|---|
| No active watch destinations. | |||
Maintainer analytics
Validation Run Count
20
Average Latency Ms
1926.67
Healthy Run Ratio Recent
0.0
Registry Presence Count
1
Active Alert Count
2
Watcher Count
0
Verified Claim
False
Taxonomy Tags
search
Score Trend
57.96, 57.96, 57.96, 57.96, 57.96, 57.96, 57.96, 57.99, 57.96, 57.96
Remediation Count
16
High Risk Tool Count
0
Destructive Tool Count
0
Exec Tool Count
0
Maintainer response quality
Score
16.67
Verified claim
Support contact
Changelog present
Incident notes present
Tool changes documented
Annotation history
Annotation count
0
Maintainer annotations
No maintainer annotations have been recorded yet.
Maintainer rebuttals & expected behavior
No maintainer rebuttals or expected-behavior overrides are recorded yet.
Latest validation evidence
Latest summary
Failing
Validation profile
remote_mcp
Started
May 02, 2026 05:18:01 AM UTC
Latency
1876.9 ms
Failures
openid_configurationClient error '404 ' for url 'https://namewhisper.ai/.well-known/openid-configuration' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404prompts_listClient error '400 ' for url 'https://namewhisper.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400resources_listClient error '400 ' for url 'https://namewhisper.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400tools_listClient error '400 ' for url 'https://namewhisper.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400transport_compliance_probeIssues: missing protocol header, expired session not 404 (bad protocol=400, DELETE=200, expired session=400).
Checks
| Check | Status | Latency | Evidence |
|---|---|---|---|
action_safety_probe |
OK | n/a | No high-risk write, destructive, or exec tools detected. |
advanced_capabilities_probe |
Missing | n/a | No advanced MCP capability signals detected. |
connector_publishability_probe |
Error | n/a | Publishability blockers: tools list, transport compliance, tool surface. |
connector_replay_probe |
Missing | n/a | No connector replay evidence recorded. |
determinism_probe |
Missing | n/a | tools list unavailable |
initialize |
OK | 141.1 ms | Protocol 2025-03-26 |
interactive_flow_probe |
OK | n/a | Check completed |
oauth_authorization_server |
OK | 137.3 ms | authorization_endpoint, grant_types_supported, issuer, note |
oauth_protected_resource |
OK | 133.9 ms | 1 authorization server(s) |
official_registry_probe |
OK | n/a | Check completed |
openid_configuration |
Error | 131.8 ms | Client error '404 ' for url 'https://namewhisper.ai/.well-known/openid-configuration' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404 |
probe_noise_resilience |
OK | 77.3 ms | Fetched https://namewhisper.ai/robots.txt |
prompt_get |
Missing | n/a | no prompt name |
prompts_list |
Error | 156.0 ms | Client error '400 ' for url 'https://namewhisper.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400 |
protocol_version_probe |
Warning | n/a | Claims 2025-03-26; 2 release(s) behind 2025-11-25. |
provenance_divergence_probe |
OK | n/a | Check completed |
request_association_probe |
Missing | n/a | No request-association capabilities were advertised. |
resource_read |
Missing | n/a | no resource uri |
resources_list |
Error | 139.0 ms | Client error '400 ' for url 'https://namewhisper.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400 |
server_card |
OK | 168.7 ms | authentication, capabilities, contact, description |
session_resume_probe |
OK | 200.0 ms | 40 tool(s) exposed |
step_up_auth_probe |
OK | n/a | Scopes=mcp.read, mcp.transact. |
tool_snapshot_probe |
Missing | n/a | no tools |
tools_list |
Error | 142.2 ms | Client error '400 ' for url 'https://namewhisper.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400 |
transport_compliance_probe |
Error | 146.6 ms | Issues: missing protocol header, expired session not 404 (bad protocol=400, DELETE=200, expired session=400). |
utility_coverage_probe |
Missing | 136.6 ms | No completions evidence; no pagination evidence; tasks missing. |
Raw evidence view
Show raw JSON evidence
{
"checks": {
"action_safety_probe": {
"details": {
"auth_present": true,
"confirmation_signals": [],
"safeguard_count": 0,
"summary": {
"bulk_access_tools": 0,
"capability_distribution": {},
"destructive_tools": 0,
"egress_tools": 0,
"exec_tools": 0,
"high_risk_tools": 0,
"risk_distribution": {
"critical": 0,
"high": 0,
"low": 0,
"medium": 0
},
"secret_tools": 0,
"tool_count": 0
}
},
"latency_ms": null,
"status": "ok"
},
"advanced_capabilities_probe": {
"details": {
"capabilities": {
"completions": false,
"elicitation": false,
"prompts": false,
"resource_links": false,
"resources": false,
"roots": false,
"sampling": false,
"structured_outputs": false
},
"enabled": [],
"enabled_count": 0,
"initialize_capability_keys": [
"tools"
]
},
"latency_ms": null,
"status": "missing"
},
"connector_publishability_probe": {
"details": {
"blockers": [
"tools_list",
"transport_compliance",
"tool_surface"
],
"criteria": {
"action_safety": true,
"auth_flow": true,
"connector_replay": true,
"initialize": true,
"protocol_version": true,
"remote_transport": true,
"request_association": true,
"server_card": true,
"session_resume": true,
"step_up_auth": true,
"tool_surface": false,
"tools_list": false,
"transport_compliance": false
},
"high_risk_tools": 0,
"tool_count": 0,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "error"
},
"connector_replay_probe": {
"details": {
"reason": "no_tools"
},
"latency_ms": null,
"status": "missing"
},
"determinism_probe": {
"details": {
"reason": "tools_list_unavailable"
},
"latency_ms": null,
"status": "missing"
},
"initialize": {
"details": {
"headers": {
"content-type": "text/event-stream",
"mcp-session-id": "af09fccf-72a2-4deb-89f5-b1960ae65121",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"http_status": 200,
"payload": {
"id": 1,
"jsonrpc": "2.0",
"result": {
"capabilities": {
"tools": {
"listChanged": true
}
},
"protocolVersion": "2025-03-26",
"serverInfo": {
"description": "NW Terminal \u2014 AI-powered ENS name search, valuation, and marketplace tools for the autonomous economy.",
"name": "nw-terminal",
"version": "2.0.0"
}
}
},
"url": "https://namewhisper.ai/mcp"
},
"latency_ms": 141.11,
"status": "ok"
},
"interactive_flow_probe": {
"details": {
"oauth_supported": true,
"prompt_available": false,
"risk_hits": [],
"safe_hits": [
"oauth"
]
},
"latency_ms": null,
"status": "ok"
},
"oauth_authorization_server": {
"details": {
"headers": {
"content-type": "application/json; charset=utf-8",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"http_status": 200,
"payload": {
"authorization_endpoint": "https://namewhisper.ai/oauth/authorize",
"grant_types_supported": [
"erc8128_signed_request"
],
"issuer": "https://namewhisper.ai",
"note": "NameWhisper uses ERC-8128 (signed HTTP requests) for per-request auth. See /.well-known/oauth-protected-resource.",
"response_types_supported": [
"none"
],
"scopes_supported": [
"mcp.read",
"mcp.transact"
],
"service_documentation": "https://namewhisper.ai/docs",
"token_endpoint": "https://namewhisper.ai/oauth/token",
"token_endpoint_auth_methods_supported": [
"none",
"erc8128"
],
"ui_locales_supported": [
"en"
]
},
"url": "https://namewhisper.ai/.well-known/oauth-authorization-server"
},
"latency_ms": 137.3,
"status": "ok"
},
"oauth_protected_resource": {
"details": {
"headers": {
"content-type": "application/json; charset=utf-8",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"http_status": 200,
"payload": {
"authorization_details_types_supported": [
"erc8128"
],
"authorization_servers": [
"https://namewhisper.ai"
],
"bearer_methods_supported": [],
"erc8128": {
"benefits": [
"Cryptographic per-request authentication tied to Ethereum wallet",
"Agent reputation tracking via ENS name resolution",
"Usage analytics per authenticated agent",
"Future: premium tool access for verified agents"
],
"documentation": "https://erc8128.slice.so",
"endpoint": "https://namewhisper.ai/mcp",
"policy": {
"maxValiditySec": 300,
"note": "ERC-8128 authentication is optional. Unsigned requests are accepted but do not receive identity-aware features (agent reputation, usage tracking).",
"replayProtection": true,
"smartContractWallets": true
},
"supported": true,
"version": "1.0"
},
"resource": "https://namewhisper.ai/mcp",
"resource_documentation": "https://namewhisper.ai/docs",
"resource_signing_alg_values_supported": [
"ES256K",
"EIP191",
"EIP1271"
],
"scopes_supported": [
"mcp.read",
"mcp.transact"
]
},
"url": "https://namewhisper.ai/.well-known/oauth-protected-resource"
},
"latency_ms": 133.91,
"status": "ok"
},
"official_registry_probe": {
"details": {
"direct_match": true,
"official_peer_count": 1,
"registry_identifier": "ai.namewhisper/ens-tools",
"registry_source": "official_registry"
},
"latency_ms": null,
"status": "ok"
},
"openid_configuration": {
"details": {
"error": "Client error '404 ' for url 'https://namewhisper.ai/.well-known/openid-configuration'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://namewhisper.ai/.well-known/openid-configuration"
},
"latency_ms": 131.81,
"status": "error"
},
"probe_noise_resilience": {
"details": {
"headers": {
"content-type": "text/plain; charset=utf-8",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"http_status": 200,
"url": "https://namewhisper.ai/robots.txt"
},
"latency_ms": 77.32,
"status": "ok"
},
"prompt_get": {
"details": {
"reason": "no_prompt_name"
},
"latency_ms": null,
"status": "missing"
},
"prompts_list": {
"details": {
"error": "Client error '400 ' for url 'https://namewhisper.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "application/json",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"http_status": 400,
"payload": {},
"url": "https://namewhisper.ai/mcp"
},
"latency_ms": 155.99,
"status": "error"
},
"protocol_version_probe": {
"details": {
"claimed_version": "2025-03-26",
"lag_days": 244,
"latest_known_version": "2025-11-25",
"releases_behind": 2,
"validator_protocol_version": "2025-03-26"
},
"latency_ms": null,
"status": "warning"
},
"provenance_divergence_probe": {
"details": {
"direct_official_match": true,
"drift_fields": [],
"metadata_document_count": 2,
"registry_homepage": null,
"registry_repository": null,
"registry_title": null,
"registry_version": null,
"server_card_homepage": null,
"server_card_repository": null,
"server_card_title": "NW Terminal",
"server_card_version": "2.0.0"
},
"latency_ms": null,
"status": "ok"
},
"request_association_probe": {
"details": {
"reason": "no_request_association_capabilities_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resource_read": {
"details": {
"reason": "no_resource_uri"
},
"latency_ms": null,
"status": "missing"
},
"resources_list": {
"details": {
"error": "Client error '400 ' for url 'https://namewhisper.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "application/json",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"http_status": 400,
"payload": {},
"url": "https://namewhisper.ai/mcp"
},
"latency_ms": 138.96,
"status": "error"
},
"server_card": {
"details": {
"headers": {
"content-type": "application/json; charset=utf-8",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"http_status": 200,
"payload": {
"authentication": {
"erc8128": {
"discovery": "https://namewhisper.ai/.well-known/erc8128",
"documentation": "https://erc8128.slice.so"
},
"oauth": {
"authorizationServer": "https://namewhisper.ai/.well-known/oauth-authorization-server",
"protectedResource": "https://namewhisper.ai/.well-known/oauth-protected-resource"
},
"schemes": [
"none",
"erc8128"
]
},
"capabilities": {
"logging": {},
"prompts": {
"listChanged": false
},
"resources": {
"listChanged": false
},
"tools": {
"listChanged": false
}
},
"contact": {
"email": "support@namewhisper.ai",
"url": "https://x.com/namewhisper_ai"
},
"description": "AI-powered ENS name search, valuation, and marketplace tools for the autonomous economy. Natural language search across 3.6M+ names, comparable sales valuations, wallet portfolio analysis, and agent identity infrastructure.",
"documentation": "https://namewhisper.ai/docs",
"name": "NW Terminal",
"payments": {
"mpp": "https://namewhisper.ai/.well-known/x402",
"x402": "https://namewhisper.ai/.well-known/x402"
},
"protocolVersions": [
"2024-11-05",
"2025-06-18"
],
"registryListing": "ai.namewhisper/ens-tools",
"serverInfo": {
"name": "NW Terminal",
"title": "Name Whisper \u2014 ENS Intelligence for AI Agents",
"version": "2.0.0"
},
"tools": {
"free": [
{
"description": "Natural language search across 3.6M+ ENS names with automatic intent detection.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "search_ens_names"
},
{
"description": "Full metadata for a name: owner, expiry, listings, offers, ENSIP-25 agent bindings.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_name_details"
},
{
"description": "Bulk check registration status for multiple names.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "check_availability"
},
{
"description": "Semantic vector similarity search (256-dim embeddings) across the full ENS corpus.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_similar_names"
},
{
"description": "Three-track valuation (comparable-sales, quality-reference, self-history) with confidence rating.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_valuation"
},
{
"description": "Recent marketplace events: sales, listings, offers, mints, transfers, renewals, burns.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_market_activity"
},
{
"description": "All ENS names owned by a wallet with listings, offers, expiry, and tags.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_wallet_portfolio"
},
{
"description": "Scan the marketplace for names listed below comparable-sales valuation.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "find_alpha"
},
{
"description": "Detect suspicious wash-trading patterns in a name's sales history.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "wash_check"
},
{
"description": "Resolve the ENS primary name for a wallet address.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_primary_name"
},
{
"description": "Comprehensive management info for a name: status, expiry, wrapper state, recommendations.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "manage_ens_name"
},
{
"description": "One-call agent identity setup with ENS name recommendations and ENSIP-25 binding.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "provision_agent_identity"
},
{
"description": "Check ENSIP-25 bindings and ERC-8004 reputation for a name or wallet.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_agent_reputation"
},
{
"description": "Find AI agents by capability, reputation, or name.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "search_agent_directory"
},
{
"description": "Return the authenticated caller identity derived from ERC-8128 signature.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_caller_identity"
},
{
"description": "Search the ENS knowledge base (governance, protocol docs, forum, Farcaster).",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "search_knowledge"
},
{
"description": "Session usage statistics: tool call counts, success rates, latency.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_usage_stats"
}
],
"totalCount": 40,
"transaction": [
{
"description": "Buy a listed name or register an available name on-chain.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "purchase_name"
},
{
"description": "Submit a bid on a registered ENS name.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "make_offer"
},
{
"description": "Register up to 20 names in 2 transactions via Multicall3.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "bulk_register"
},
{
"description": "Renew a name or batch of names via Multicall3.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "renew_ens_name"
},
{
"description": "Transfer name ownership (auto-detects wrapped vs unwrapped).",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "transfer_ens_name"
},
{
"description": "Transfer up to 20 names in a single Multicall3 transaction.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "bulk_transfer_ens_names"
},
{
"description": "Set resolver records (addresses, texts, content hash, ENSIP-25 agent bindings).",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "set_ens_records"
},
{
"description": "Set records for up to 50 names in a single resolver multicall.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "bulk_set_records"
},
{
"description": "Set the reverse resolution (primary name) for a wallet.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "set_primary_name"
},
{
"description": "Change the resolver contract for a name.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "set_resolver"
},
{
"description": "Wrap a name into the ENS NameWrapper (ERC-721 \u2192 ERC-1155).",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "wrap_name"
},
{
"description": "Unwrap a wrapped name back to the BaseRegistrar.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "unwrap_name"
},
{
"description": "Read or burn fuses on a wrapped name (irreversible).",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "manage_fuses"
},
{
"description": "Bulk create subnames under a parent name \u2014 agent fleet deployment.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "mint_subnames"
},
{
"description": "Extend the expiry of a subname up to the parent's expiry.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "extend_subname_expiry"
},
{
"description": "Approve or revoke an operator for ENS contract interactions.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "approve_operator"
},
{
"description": "Reclaim ENS Registry ownership of a name after BaseRegistrar transfer.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "reclaim_name"
},
{
"description": "See https://namewhisper.ai/llms-full.txt for tool details.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "create_listing"
},
{
"description": "See https://namewhisper.ai/llms-full.txt for tool details.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "cancel_listing"
},
{
"description": "See https://namewhisper.ai/llms-full.txt for tool details.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "cancel_offer"
},
{
"description": "See https://namewhisper.ai/llms-full.txt for tool details.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "accept_offer"
},
{
"description": "See https://namewhisper.ai/llms-full.txt for tool details.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "batch_purchase"
},
{
"description": "See https://namewhisper.ai/llms-full.txt for tool details.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "batch_create_listings"
}
]
},
"transports": [
{
"sessionHeader": "mcp-session-id",
"type": "streamable-http",
"url": "https://namewhisper.ai/mcp"
}
],
"version": "2.0.0"
},
"url": "https://namewhisper.ai/.well-known/mcp/server-card.json"
},
"latency_ms": 168.7,
"status": "ok"
},
"session_resume_probe": {
"details": {
"headers": {
"content-type": "text/event-stream",
"mcp-session-id": "af09fccf-72a2-4deb-89f5-b1960ae65121",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"http_status": 200,
"payload": {
"id": 301,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"description": "Search ENS names using natural language. Supports all query types:\n- Filtered search: \"4-letter words under 0.1 ETH\"\n- Concept search: \"ocean themed names\" (semantic similarity across 3.6M names)\n- Creative search: \"names for a coffee brand\" (AI-generated suggestions)\n- Collection search: \"crypto terms expiring soon\"\n- Activity: \"what sold recently?\"\n- Availability check: \"is coffee.eth taken?\"\n- Bulk check: \"check apple.eth, banana.eth, cherry.eth\"\nReturns structured results with name, price, owner, tags, and availability info.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"query": {
"description": "Natural language search query (e.g. \"cheap 3-letter words\", \"ocean themed names\", \"is coffee.eth taken?\")",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_ens_names"
},
{
"description": "Get full details for a specific ENS name including owner, expiry, creation date, tags, active listings (with prices in ETH and USD), active offers, ENSIP-25 agent identity bindings, and ENSIP-26 agent context records. creationDate is always populated \u2014 for Vickrey-era names (isVickreyEra=true) it reflects the true first-creation date from the 2017-2019 legacy auction contract; for all other names it reflects the on-chain registration date. Always mention creationDate when answering questions about when a name was created or registered.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "ENS name or label (e.g. \"vitalik\" or \"vitalik.eth\")",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "get_name_details"
},
{
"description": "Check availability of one or more ENS names. Returns status (AVAILABLE, REGISTERED, EXPIRED, or INVALID), owner address, and expiry date for each name. Validates ENS character rules. Accepts names with or without .eth suffix.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"names": {
"description": "Array of ENS names or labels to check (max 100). e.g. [\"coffee\", \"tea.eth\", \"pixel\"]",
"items": {
"type": "string"
},
"maxItems": 100,
"type": "array"
}
},
"required": [
"names"
],
"type": "object"
},
"name": "check_availability"
},
{
"description": "Find ENS names semantically similar to a given name using vector embeddings across 3.6M+ names. Returns similar names with similarity scores and live marketplace data (price, owner, expiry). Great for discovering related names for portfolio building or brand exploration.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 20,
"description": "Max results (default 20, max 50)",
"type": "number"
},
"name": {
"description": "ENS name or label to find similar names for (e.g. \"coffee\", \"pixel.eth\")",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "get_similar_names"
},
{
"description": "Get a confidence-rated valuation for an ENS name based on comparable sales, entity recognition (Wikipedia/Wikidata), search interest, word frequency, and fame-scaled pricing. Returns estimated value range, background context on the name (person/place/brand/concept), comparable sales data, and a narrative explaining the valuation methodology. Essential for pricing decisions.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "ENS name or label to value (e.g. \"coffee\" or \"coffee.eth\")",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "get_valuation"
},
{
"description": "Get recent ENS marketplace activity \u2014 sales, new listings, offers, mints, transfers, renewals, and burns. Filter by event type. Returns event details including name, price (in ETH), buyer/seller addresses, and timestamp. Sorted by most recent first.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"eventTypes": {
"description": "Filter by event type(s). Defaults to all types.",
"items": {
"enum": [
"SALE",
"LISTING_CREATED",
"OFFER_CREATED",
"MINT",
"TRANSFER",
"RENEWAL",
"BURN"
],
"type": "string"
},
"type": "array"
},
"limit": {
"default": 25,
"description": "Max results (default 25, max 100)",
"type": "number"
},
"offset": {
"default": 0,
"description": "Pagination offset",
"type": "number"
}
},
"type": "object"
},
"name": "get_market_activity"
},
{
"description": "Check if an ENS sale is a wash trade. Provide either a tx_hash to look up a pre-computed score, or provide label + buyer + seller + price_eth for live on-demand analysis. Returns a wash confidence score (0-1), a label (clean/suspicious/likely_wash), detected signals, and a human-readable summary.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"buyer": {
"description": "Buyer wallet address for live analysis",
"type": "string"
},
"label": {
"description": "ENS label (e.g. \"defirm\") for live analysis",
"type": "string"
},
"price_eth": {
"description": "Sale price in ETH for live analysis",
"type": "number"
},
"seller": {
"description": "Seller wallet address for live analysis",
"type": "string"
},
"tx_hash": {
"description": "Transaction hash to look up pre-computed wash score",
"type": "string"
}
},
"type": "object"
},
"name": "wash_check"
},
{
"description": "Get all ENS names owned by a wallet address. Returns each name with label, tags, expiry, registration date, and active listing/offer prices. Useful for portfolio analysis and wallet profiling.\n\nIf you are authenticated via ERC-8128 and omit the wallet parameter, your own wallet is used automatically.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 100,
"description": "Max results (default 100, max 200)",
"type": "number"
},
"offset": {
"default": 0,
"description": "Pagination offset",
"type": "number"
},
"wallet": {
"description": "Ethereum wallet address (0x...) or ENS name",
"type": "string"
}
},
"required": [
"wallet"
],
"type": "object"
},
"name": "get_wallet_portfolio"
},
{
"description": "Scan the ENS marketplace for alpha \u2014 names listed below their comparable-sales valuation. Returns ranked opportunities with discount percentage, estimated value range, confidence rating, and comparable data. The autonomous agent's edge: find mispriced names before anyone else. Pair with get_valuation for deep analysis, then purchase_name to execute.\n\n**Use this instead of search_ens_names + repeated get_valuation when the user asks for \"best value\", \"best buy\", \"cheapest good name\", \"undervalued\", \"bargains\", or any ranked-by-value query across multiple listings.** find_alpha does the search + valuation + ranking in a single call. Supports filters (minLength, maxLength, maxPriceEth, tags) so narrow queries like \"4-letter names under 1 ETH, best value\" are one call, not six.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"charType": {
"description": "Filter by character type",
"enum": [
"letters",
"numbers",
"emoji"
],
"type": "string"
},
"limit": {
"default": 25,
"description": "Max results to return. Default 25, max 100.",
"type": "number"
},
"maxLength": {
"description": "Maximum label length (e.g. 5 for up to 5-letter names)",
"type": "number"
},
"maxPriceEth": {
"description": "Maximum listing price in ETH (e.g. 1.0). Omit for no cap.",
"type": "number"
},
"minConfidence": {
"default": "LOW",
"description": "Minimum confidence for comparable data. HIGH = 20+ sales, MEDIUM = 10+, LOW = 3+.",
"enum": [
"HIGH",
"MEDIUM",
"LOW"
],
"type": "string"
},
"minDiscountPct": {
"default": 20,
"description": "Minimum discount vs estimated value. Default 20%. Range: 1-99.",
"type": "number"
},
"minLength": {
"description": "Minimum label length (e.g. 3 for 3-letter names and up)",
"type": "number"
}
},
"type": "object"
},
"name": "find_alpha"
},
{
"description": "Check what primary ENS name is set for a wallet address (reverse resolution).\n\nReturns the ENS name that this address resolves to, or null if no primary name is set.\n\nThis verifies both directions:\n- Reverse: address \u2192 name (the reverse record)\n- Forward: name \u2192 address (confirms the name actually points back to this wallet)\n\nIf either direction is missing, the primary name won't resolve. Use this to:\n- Verify a primary name was set correctly after set_primary_name\n- Check if a wallet has any primary name configured\n- Debug why a primary name isn't showing up (missing ETH address record)",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"walletAddress": {
"description": "Ethereum wallet address (0x...) to check reverse resolution for",
"type": "string"
}
},
"required": [
"walletAddress"
],
"type": "object"
},
"name": "get_primary_name"
},
{
"description": "Provision a complete ENS identity for an AI agent in one call. Describe your agent's purpose and budget \u2014 get back recommended available names, a multi-step registration recipe (commit \u2192 register \u2192 set agent records), and ready-to-sign transaction data.\n\nThe registration recipe includes agent identity records (ENSIP-25: ai.agent, ai.purpose, ai.capabilities + ENSIP-26: agent-context) as a mandatory final step \u2014 these records make the agent discoverable in the ENS Agents directory. ENSIP-25 agent-registration binding is included when an agentRegistry is provided.\n\nIMPORTANT: The calling AI MUST execute all steps in the recipe, including the final set_ens_records step. Agent identity is not complete until the text records are on-chain.\n\nExample: \"DeFi trading bot, 0.05 ETH budget\" \u2192 names like swiftswap.eth with full registration + identity setup instructions.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"agentRegistry": {
"description": "ENSIP-25 agent registry binding. If provided, the provisioning flow will include the agent-registration text record that links this ENS name to your on-chain agent identity.",
"properties": {
"agentId": {
"description": "Agent ID in the registry (e.g. \"42\")",
"type": "string"
},
"chainId": {
"default": 1,
"description": "Chain ID where the registry is deployed (default: 1 for Ethereum mainnet)",
"type": "number"
},
"registryAddress": {
"description": "ERC-8004 IdentityRegistry contract address (checksummed 0x...)",
"type": "string"
}
},
"required": [
"registryAddress",
"agentId"
],
"type": "object"
},
"budgetEth": {
"default": 0.1,
"description": "Maximum budget in ETH for name acquisition (default: 0.1)",
"type": "number"
},
"preferences": {
"description": "Optional naming preferences",
"properties": {
"maxLength": {
"default": 15,
"description": "Maximum name length (default: 15)",
"type": "number"
},
"mustInclude": {
"description": "Word or pattern the name must include (e.g. \"trade\", \"data\")",
"type": "string"
},
"style": {
"default": "professional",
"description": "Naming style preference",
"enum": [
"professional",
"creative",
"technical",
"minimal"
],
"type": "string"
}
},
"type": "object"
},
"purpose": {
"description": "What the agent does (e.g. \"DeFi trading bot\", \"data analytics agent\", \"social media manager\", \"infrastructure monitor\")",
"type": "string"
},
"walletAddress": {
"description": "Agent wallet address (will own the name and sign transactions)",
"type": "string"
}
},
"required": [
"purpose",
"walletAddress"
],
"type": "object"
},
"name": "provision_agent_identity"
},
{
"description": "Submit an offer (bid) on a registered ENS name. Validates the offer, provides market context (listing price, comparable sales, existing offers), and directs you to execute on the Vision marketplace.\n\nRequires wallet signature for on-chain execution via Seaport protocol. The name owner can accept, counter, or decline on ensvision.com.\n\nTip: Use get_valuation first to understand fair market value before making an offer.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"amountEth": {
"description": "Offer amount in ETH",
"type": "number"
},
"currency": {
"default": "WETH",
"description": "Payment currency (default: WETH)",
"enum": [
"WETH",
"USDC",
"DAI"
],
"type": "string"
},
"expiryHours": {
"default": 72,
"description": "Offer expiry in hours (default: 72)",
"type": "number"
},
"name": {
"description": "ENS name to make an offer on (e.g. \"coffee.eth\")",
"type": "string"
},
"walletAddress": {
"description": "Your wallet address (offer maker)",
"type": "string"
}
},
"required": [
"name",
"amountEth",
"walletAddress"
],
"type": "object"
},
"name": "make_offer"
},
{
"description": "Purchase an ENS name \u2014 either buy a listed name from a marketplace or register an available name directly on-chain.\n\nFor AVAILABLE names: Returns a complete registration recipe with contract address, ABI, step-by-step instructions, and a pre-generated secret. Your wallet signs and submits the transactions (commit \u2192 wait 60s \u2192 register).\n\nFor LISTED names: Searches all marketplaces (OpenSea, Grails) for the best price. If there are MULTIPLE active listings, returns CHOOSE_LISTING status with all options \u2014 present these to the user and ask which one they want. When the user chooses, call this tool again with the chosen orderHash to get the buy transaction.\n\nThe tool auto-detects whether the name is available or listed. You can override with the 'action' parameter.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"action": {
"default": "auto",
"description": "Action: buy_listing (purchase listed name), register (register available name), auto (detect automatically)",
"enum": [
"buy_listing",
"register",
"auto"
],
"type": "string"
},
"durationYears": {
"default": 1,
"description": "Registration duration in years (1-10, default: 1)",
"maximum": 10,
"minimum": 1,
"type": "number"
},
"maxPriceEth": {
"description": "Maximum price willing to pay in ETH (for listed names)",
"type": "number"
},
"name": {
"description": "ENS name to purchase (e.g. \"coffee.eth\")",
"type": "string"
},
"orderHash": {
"description": "Specific Seaport order hash to fulfill. Use this when the user has chosen a specific listing from multiple options.",
"type": "string"
},
"walletAddress": {
"description": "Buyer wallet address (will own the name)",
"type": "string"
}
},
"required": [
"name",
"walletAddress"
],
"type": "object"
},
"name": "purchase_name"
},
{
"description": "Register multiple ENS names in bulk \u2014 batched into just 2 transactions (commit + register) via Multicall3.\n\nMuch cheaper and faster than registering names one at a time. Supports up to 20 names per batch.\n\nFlow: batchCommit (1 tx) \u2192 wait 60 seconds \u2192 batchRegister (1 tx with total ETH). Excess ETH is refunded.\n\nEach name gets its own secret for front-running protection. All names must be available for registration.\n\nAfter registration, use bulk_set_records to configure all names at once with addresses, text records, and content hashes.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"durationYears": {
"default": 1,
"description": "Registration duration in years (same for all names, default: 1)",
"type": "number"
},
"names": {
"description": "Array of ENS names to register (e.g. [\"coffee.eth\", \"tea.eth\"]). Max 20 per batch.",
"items": {
"type": "string"
},
"maxItems": 20,
"minItems": 1,
"type": "array"
},
"walletAddress": {
"description": "Wallet address that will own all registered names",
"type": "string"
}
},
"required": [
"names",
"walletAddress"
],
"type": "object"
},
"name": "bulk_register"
},
{
"description": "List an ENS name for sale on NameWhisper's marketplace via Seaport 1.6.\n\nReturns an unsigned Seaport OrderComponents payload (plus EIP-712 domain/types) that the caller's wallet signs. After signing, POST the { orderComponents, signature, label, orderType: 'listing' } payload to https://namewhisper.ai/api/orderbook/submit (authenticated) to store the order.\n\nFee structure: 1% marketplace fee baked into the order as a Seaport consideration item (seller-paid, not added on top).\n\nNW-native only \u2014 MCP listings stay on NameWhisper. If you want your listing on OpenSea too, list it separately through their interface.\n\nRequires the wallet to have approved NameWrapper (for wrapped names) or BaseRegistrar (for unwrapped) as an operator first. Use approve_operator if needed.\n\nTip: Use get_valuation first to price competitively. Use get_name_details to confirm the name is unwrapped vs wrapped before listing.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"durationSeconds": {
"default": 2592000,
"description": "Listing duration in seconds (default: 30 days / 2592000)",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"name": {
"description": "ENS name to list (e.g. \"coffee.eth\")",
"minLength": 1,
"type": "string"
},
"priceEth": {
"description": "Listing price in ETH (what the seller receives before the 1% marketplace fee)",
"exclusiveMinimum": 0,
"type": "number"
},
"walletAddress": {
"description": "Wallet address of the seller. Must own the name.",
"pattern": "^0x[a-fA-F0-9]{40}$",
"type": "string"
}
},
"required": [
"name",
"priceEth",
"walletAddress"
],
"type": "object"
},
"name": "create_listing"
},
{
"description": "Cancel an active ENS name listing by submitting Seaport's cancel() on-chain.\n\nReturns the unsigned Seaport cancel() transaction calldata. Your wallet signs and submits; once mined, Seaport marks the order invalid and no marketplace (NW, Grails, OpenSea) can fulfill it anymore.\n\nOnly the original seller (the order's offerer) can cancel. If you cross-posted to OpenSea, you signed a second 'opensea' variant of the listing \u2014 pass BOTH order hashes as alsoCancel so a single tx kills both variants atomically.\n\nFor cancelling offers you've made as a buyer, use cancel_offer instead.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"alsoCancel": {
"description": "Sibling order hashes to cancel atomically in the same tx (e.g. the OpenSea-variant counterpart of an NW listing). Seaport.cancel() accepts an array \u2014 cancelling N orders costs barely more than cancelling one.",
"items": {
"pattern": "^0x[a-f0-9]{64}$",
"type": "string"
},
"type": "array"
},
"orderHash": {
"description": "Seaport order hash of the listing to cancel (from get_name_details or the orderbook)",
"pattern": "^0x[a-f0-9]{64}$",
"type": "string"
},
"walletAddress": {
"description": "Wallet address of the seller. Must match the original offerer on the order.",
"pattern": "^0x[a-fA-F0-9]{40}$",
"type": "string"
}
},
"required": [
"orderHash",
"walletAddress"
],
"type": "object"
},
"name": "cancel_listing"
},
{
"description": "Cancel an active offer you made on an ENS name. Returns unsigned Seaport cancel() calldata.\n\nOnly the bidder (the order's offerer) can cancel. If the offer was cross-posted to OpenSea, you signed a second 'opensea' variant \u2014 pass BOTH order hashes as alsoCancel so one tx kills both.\n\nCancelling releases the WETH you'd committed to the offer \u2014 the buyer's wallet keeps its WETH balance free to bid elsewhere once the Seaport order is invalidated.\n\nFor cancelling your own listings, use cancel_listing.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"alsoCancel": {
"description": "Sibling order hashes to cancel in the same tx (e.g. the OpenSea-variant of an NW offer). Cancelling N orders costs barely more than cancelling one.",
"items": {
"pattern": "^0x[a-f0-9]{64}$",
"type": "string"
},
"type": "array"
},
"orderHash": {
"description": "Seaport order hash of the offer to cancel (from get_name_details or the orderbook)",
"pattern": "^0x[a-f0-9]{64}$",
"type": "string"
},
"walletAddress": {
"description": "Wallet address of the bidder. Must match the original offerer on the order.",
"pattern": "^0x[a-fA-F0-9]{40}$",
"type": "string"
}
},
"required": [
"orderHash",
"walletAddress"
],
"type": "object"
},
"name": "cancel_offer"
},
{
"description": "Accept a standing offer on an ENS name you own. Returns unsigned Seaport fulfillOrder() calldata.\n\nWhen you submit this transaction, Seaport atomically:\n- Pulls the offered WETH from the buyer's wallet\n- Transfers the ENS name from your wallet to the buyer\n- Pays the 1% marketplace fee from the WETH\n\nYou receive the offer amount minus the 1% fee. The buyer needs a live WETH balance + approval for Seaport/OpenSea conduit \u2014 if either is missing the tx will revert; you'll have signed but the chain won't execute.\n\nBefore accepting: you must have approved Seaport (or the OpenSea conduit, for cross-posted offers) on NameWrapper (wrapped name) or BaseRegistrar (unwrapped). Use approve_operator if needed. Use get_name_details to see the offer hash and confirm the highest offer.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"orderHash": {
"description": "Seaport order hash of the buyer's offer to accept",
"pattern": "^0x[a-f0-9]{64}$",
"type": "string"
},
"walletAddress": {
"description": "Your wallet address (the seller). Must own the ENS name in the offer.",
"pattern": "^0x[a-fA-F0-9]{40}$",
"type": "string"
}
},
"required": [
"orderHash",
"walletAddress"
],
"type": "object"
},
"name": "accept_offer"
},
{
"description": "Buy up to 20 NameWhisper-listed ENS names in a single Seaport transaction.\n\nFor each name, picks the cheapest active NW listing, validates it on-chain via Seaport.getOrderStatus, then encodes one fulfillAvailableAdvancedOrders call. NFTs go directly to your wallet.\n\nPartial failures are safe: if an order went stale between discovery and execution, Seaport skips it and refunds excess ETH. The response lists which labels succeeded and which were dropped.\n\nCheaper per name than individual buys (gas is amortized). For a single name, use purchase_name.\n\nNW-only: this tool ignores listings posted exclusively to Grails / OpenSea. If a name isn't listed on NameWhisper, you'll see it in the 'failed' array.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"names": {
"description": "Array of ENS names to buy (e.g. [\"coffee.eth\", \"tea.eth\"]). Max 20 per batch.",
"items": {
"type": "string"
},
"maxItems": 20,
"minItems": 1,
"type": "array"
},
"walletAddress": {
"description": "Buyer wallet address \u2014 receives all purchased names.",
"pattern": "^0x[a-fA-F0-9]{40}$",
"type": "string"
}
},
"required": [
"names",
"walletAddress"
],
"type": "object"
},
"name": "batch_purchase"
},
{
"description": "Bulk-list up to 10 ENS names for sale on NameWhisper in one signing flow.\n\nReturns an array of unsigned Seaport OrderComponents payloads. The caller's wallet signs them all in one EIP-712 bulk signature (SIP-6), then POSTs each signature back to https://namewhisper.ai/api/orderbook/submit to store.\n\nNW-native only \u2014 listings stay on NameWhisper. Cheaper UX than calling create_listing in a loop (one wallet popup vs N).\n\nPer-name errors (invalid label, zero price) are collected in the 'errors' field instead of aborting the whole batch \u2014 partial success is normal.\n\nRequires operator approval on the ENS token contract (NameWrapper or BaseRegistrar) \u2014 do this once per wallet via approve_operator.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"durationSeconds": {
"default": 2592000,
"description": "Listing duration in seconds (applied to every name, default: 30 days)",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"listings": {
"description": "Array of { name, priceEth }. Per-item validation (empty name, non-positive price) is collected in the errors array rather than rejecting the whole batch.",
"items": {
"properties": {
"name": {
"type": "string"
},
"priceEth": {
"type": "number"
}
},
"required": [
"name",
"priceEth"
],
"type": "object"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
"walletAddress": {
"description": "Wallet address of the seller. Must own all the names.",
"pattern": "^0x[a-fA-F0-9]{40}$",
"type": "string"
}
},
"required": [
"listings",
"walletAddress"
],
"type": "object"
},
"name": "batch_create_listings"
},
{
"description": "Renew an ENS name or batch of names. Returns the transaction data needed to extend registration.\n\nUnlike registration, renewal is simple \u2014 just one transaction with payment. No commit/reveal needed.\n\nAccepts ANY duration \u2014 days, weeks, months, years. There is no minimum renewal period on ENS.\nExamples: 7 days (1 week), 28 days (1 month), 365 days (1 year).\n\nAnyone can renew any name (you don't need to be the owner). This is useful for:\n- Extending your own names before expiry\n- Gifting renewal to a friend's name\n- Protecting valuable names from expiring\n\nReturns exact on-chain pricing from the ETHRegistrarController with a 5% buffer (excess is refunded).\n\nFor batch renewals (multiple names), all names are bundled into a SINGLE Multicall3 transaction.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"duration": {
"description": "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 \u2014 there is NO minimum.",
"type": "number"
},
"names": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
],
"description": "ENS name or array of names to renew (e.g. \"coffee.eth\" or [\"coffee.eth\", \"wallet.eth\"])"
},
"years": {
"description": "DEPRECATED \u2014 use duration instead. Number of years (converted to days internally).",
"type": "number"
}
},
"required": [
"names"
],
"type": "object"
},
"name": "renew_ens_name"
},
{
"description": "Transfer ownership of an ENS name to another wallet address.\n\nAutomatically detects whether the name is wrapped (NameWrapper/ERC-1155) or unwrapped (BaseRegistrar/ERC-721) and builds the correct transaction.\n\nRequirements:\n- The fromAddress must currently own the name\n- Both addresses must be valid Ethereum addresses\n- The name must be registered (not expired)\n\nWARNING: This transfers FULL ownership. The recipient gains complete control including the ability to transfer, set records, or let the name expire.\n\nResolver records (avatar, addresses, etc.) are NOT affected by transfer \u2014 they stay on the name.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fromAddress": {
"description": "Current owner wallet address (must sign the transaction)",
"type": "string"
},
"name": {
"description": "ENS name to transfer (e.g. \"coffee.eth\")",
"type": "string"
},
"toAddress": {
"description": "Recipient wallet address",
"type": "string"
}
},
"required": [
"name",
"fromAddress",
"toAddress"
],
"type": "object"
},
"name": "transfer_ens_name"
},
{
"description": "Set ENS resolver records for a name you own. Returns encoded transaction calldata ready to sign and broadcast.\n\nSupports address records (ETH, BTC, SOL, etc.), text records (avatar, description, url, social handles, AI agent metadata), content hash (IPFS/IPNS), ENSIP-25 agent-registration records, and ENSIP-26 agent context and endpoint discovery.\n\nMultiple records are batched into a single multicall transaction to save gas.\n\nCommon text record keys: avatar, description, url, email, com.twitter, com.github, com.discord, ai.agent, ai.purpose, ai.capabilities, ai.category.\n\nENSIP-25 support: Pass agentRegistration with registryAddress and agentId to automatically set the standardized agent-registration text record. This creates a verifiable on-chain binding between your ENS name and your agent identity in an ERC-8004 registry.\n\nENSIP-26 support: Pass agentContext to set the agent-context text record (free-form agent description). Pass agentEndpoints with protocol URLs (mcp, a2a, oasf, web) to set agent-endpoint[protocol] discovery records.\n\nThe returned transaction can be signed and submitted directly using any wallet framework (Coinbase AgentKit, ethers.js, etc.).",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "ENS name to set records for (e.g. \"myagent.eth\")",
"type": "string"
},
"records": {
"description": "Records to set on the name",
"properties": {
"addresses": {
"additionalProperties": {
"type": "string"
},
"description": "Address records by coin type (e.g. {\"ETH\": \"0x...\", \"BTC\": \"bc1...\"})",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"agentContext": {
"description": "ENSIP-26 agent-context text record \u2014 free-form text describing the agent (markdown, JSON, YAML, etc.). The entry point for agent discovery.",
"type": "string"
},
"agentEndpoints": {
"description": "ENSIP-26 agent endpoint URLs by protocol. Sets agent-endpoint[<protocol>] text records.",
"properties": {
"a2a": {
"description": "Agent-to-Agent Protocol endpoint URL",
"type": "string"
},
"mcp": {
"description": "Model Context Protocol endpoint URL",
"type": "string"
},
"oasf": {
"description": "OpenAPI Service Format endpoint URL",
"type": "string"
},
"web": {
"description": "Web interface URL",
"type": "string"
}
},
"type": "object"
},
"agentRegistration": {
"description": "ENSIP-25 shorthand: set an agent-registration text record linking this name to an on-chain agent identity. Automatically builds the correct ERC-7930 encoded key.",
"properties": {
"agentId": {
"description": "Agent ID in the registry",
"type": "string"
},
"chainId": {
"default": 1,
"description": "Chain ID (default: 1 for mainnet)",
"type": "number"
},
"registryAddress": {
"description": "ERC-8004 IdentityRegistry contract address (0x...)",
"type": "string"
}
},
"required": [
"registryAddress",
"agentId"
],
"type": "object"
},
"contentHash": {
"description": "Content hash for decentralized website (IPFS CID or IPNS key)",
"type": "string"
},
"texts": {
"additionalProperties": {
"type": "string"
},
"description": "Text records (e.g. {\"avatar\": \"https://...\", \"description\": \"An AI trading agent\", \"ai.agent\": \"true\", \"ai.capabilities\": \"trading,defi\"})",
"propertyNames": {
"type": "string"
},
"type": "object"
}
},
"type": "object"
},
"walletAddress": {
"description": "Wallet address that owns the name (must sign the transaction)",
"type": "string"
}
},
"required": [
"name",
"records",
"walletAddress"
],
"type": "object"
},
"name": "set_ens_records"
},
{
"description": "Set ENS resolver records for multiple names in a single transaction \u2014 bulk record editing.\n\nAll record updates across all names are batched into one resolver.multicall() call. Much cheaper than setting records one name at a time.\n\nSupports the same record types as set_ens_records: address records (ETH, BTC, SOL, etc.), text records (avatar, description, social handles, AI agent metadata), content hash (IPFS/IPNS), and ENSIP-25 agent-registration records.\n\nYou can set different records for each name (e.g., unique avatars) or the same records across all names (e.g., same ETH address).\n\nMax 50 names per batch. The wallet signing the transaction must be the owner/manager of all included names.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"nameRecords": {
"description": "Array of name + records pairs. Max 50 names per batch.",
"items": {
"properties": {
"name": {
"description": "ENS name (e.g. \"myagent.eth\")",
"type": "string"
},
"records": {
"description": "Records to set on this name",
"properties": {
"addresses": {
"additionalProperties": {
"type": "string"
},
"description": "Address records by coin type (e.g. {\"ETH\": \"0x...\", \"BTC\": \"bc1...\"})",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"agentRegistration": {
"description": "ENSIP-25 shorthand: link this name to an on-chain agent identity",
"properties": {
"agentId": {
"description": "Agent ID in the registry",
"type": "string"
},
"chainId": {
"default": 1,
"description": "Chain ID (default: 1)",
"type": "number"
},
"registryAddress": {
"description": "ERC-8004 IdentityRegistry contract address",
"type": "string"
}
},
"required": [
"registryAddress",
"agentId"
],
"type": "object"
},
"contentHash": {
"description": "Content hash for decentralized website (IPFS CID or IPNS key)",
"type": "string"
},
"texts": {
"additionalProperties": {
"type": "string"
},
"description": "Text records (e.g. {\"avatar\": \"https://...\", \"description\": \"My name\"})",
"propertyNames": {
"type": "string"
},
"type": "object"
}
},
"type": "object"
}
},
"required": [
"name",
"records"
],
"type": "object"
},
"maxItems": 50,
"minItems": 1,
"type": "array"
},
"walletAddress": {
"description": "Wallet address that owns these names (must sign the transaction)",
"type": "string"
}
},
"required": [
"nameRecords",
"walletAddress"
],
"type": "object"
},
"name": "bulk_set_records"
},
{
"description": "Transfer multiple ENS names in a single transaction via Multicall3 \u2014 bulk send.\n\nMuch cheaper and faster than transferring names one at a time. Supports up to 20 names per batch.\n\nAutomatically detects whether each name is wrapped (NameWrapper/ERC-1155) or unwrapped (BaseRegistrar/ERC-721) and builds the correct transfer call for each.\n\nAll names can go to the same recipient or to different recipients \u2014 specify a toAddress per name.\n\nRequirements:\n- The fromAddress must currently own ALL names in the batch\n- All addresses must be valid Ethereum addresses\n- Names must be registered (not expired)\n\nWARNING: This transfers FULL ownership of every name. Recipients gain complete control.\n\nResolver records (avatar, addresses, etc.) are NOT affected by transfer \u2014 they stay on each name.\n\nAfter transfer, consider using bulk_set_records to update ETH address records on the transferred names.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fromAddress": {
"description": "Current owner wallet address (must sign the transaction). All names must be owned by this address.",
"type": "string"
},
"transfers": {
"description": "Array of name + recipient pairs. Max 20 per batch. All names must be owned by fromAddress.",
"items": {
"properties": {
"name": {
"description": "ENS name to transfer (e.g. \"coffee.eth\")",
"type": "string"
},
"toAddress": {
"description": "Recipient wallet address",
"type": "string"
}
},
"required": [
"name",
"toAddress"
],
"type": "object"
},
"maxItems": 20,
"minItems": 1,
"type": "array"
}
},
"required": [
"transfers",
"fromAddress"
],
"type": "object"
},
"name": "bulk_transfer_ens_names"
},
{
"description": "Set the primary ENS name (reverse resolution) for a wallet address.\n\nThis controls what name is displayed when someone looks up your Ethereum address. For example, instead of seeing \"0x1234...abcd\", they'd see \"myname.eth\".\n\nRequirements:\n- You must own or control the ENS name\n- The name's ETH address record must point to your wallet\n- Only the wallet owner can set their own primary name\n\nIf the ETH address record doesn't match, use set_ens_records first to update it.\n\nOnly one primary name per address \u2014 setting a new one replaces the previous.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "ENS name to set as primary (e.g. \"myname.eth\")",
"type": "string"
},
"walletAddress": {
"description": "Wallet address to set the primary name for (must sign the transaction)",
"type": "string"
}
},
"required": [
"name",
"walletAddress"
],
"type": "object"
},
"name": "set_primary_name"
},
{
"description": "Change the resolver contract for an ENS name.\n\nThe resolver is where a name's records live (ETH address, text records, content hash, etc.). Changing the resolver points the name at a different contract.\n\nCommon use cases:\n- Migrating to the latest ENS Public Resolver\n- Pointing to a custom resolver (e.g. for off-chain/CCIP-read resolution)\n- Fixing a name that has no resolver set\n\nPass \"public\" as the resolver address to use the ENS Public Resolver (0x231b0Ee14048e9dCcD1d247744d114a4EB5E8E63).\n\nWARNING: Records on the old resolver won't be visible after switching. Set up records on the new resolver first, or use the ENS Public Resolver which most names already use.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "ENS name to change resolver for (e.g. \"coffee.eth\")",
"type": "string"
},
"resolver": {
"description": "New resolver contract address. Use \"public\" for the ENS Public Resolver.",
"type": "string"
}
},
"required": [
"name",
"resolver"
],
"type": "object"
},
"name": "set_resolver"
},
{
"description": "One-shot management report for an ENS name. This is the ONLY tool you need to answer \"management report\", \"full overview\", \"health check\", \"status check\", \"what should I do about X\", or \"tell me what to do with X\" queries. Prefer this over calling get_name_details + get_valuation separately \u2014 this tool is purpose-built for status/recommendation queries and returns the full picture in one call.\n\nReturns:\n- Registration status (active, expiring soon, grace period, premium auction, expired, available)\n- Exact expiry date and days remaining\n- Whether the name is wrapped (NameWrapper) or unwrapped (BaseRegistrar)\n- Current owner address\n- On-chain renewal pricing\n- Ranked recommended actions based on current status (renew now, migrate to wrapper, etc.)\n\nDistinct from get_name_details (which returns owner/listings/offers without a recommendation engine). Use this for \"what should I do\" queries; use get_name_details only if you need marketplace data (active listings, offers) which this tool does not include.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"includeRenewalPricing": {
"default": true,
"description": "Include on-chain renewal pricing (default: true)",
"type": "boolean"
},
"name": {
"description": "ENS name to check (e.g. \"coffee.eth\")",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "manage_ens_name"
},
{
"description": "Wrap an unwrapped .eth name into the ENS NameWrapper contract.\n\nWrapping converts the name from an ERC-721 token (BaseRegistrar) to an ERC-1155 token (NameWrapper). This enables:\n- Fuse permissions (restrict what can be done with the name)\n- Protected subnames (subnames with guaranteed permissions)\n- ERC-1155 compatibility for marketplaces and protocols\n\nReturns a two-step transaction recipe: approve + wrap.\n\nAvailable fuses (all IRREVERSIBLE once burned):\n- CANNOT_UNWRAP \u2014 prevents unwrapping back to BaseRegistrar\n- CANNOT_BURN_FUSES \u2014 prevents burning additional fuses\n- CANNOT_TRANSFER \u2014 prevents transfers\n- CANNOT_SET_RESOLVER \u2014 prevents resolver changes\n- CANNOT_SET_TTL \u2014 prevents TTL changes\n- CANNOT_CREATE_SUBDOMAIN \u2014 prevents new subnames\n- CANNOT_APPROVE \u2014 prevents approving operators\n\nCANNOT_UNWRAP must be burned before any other fuses can be burned.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fuses": {
"description": "Optional fuses to burn on wrap (e.g. [\"CANNOT_UNWRAP\"]). WARNING: irreversible.",
"items": {
"type": "string"
},
"type": "array"
},
"name": {
"description": "ENS name to wrap (e.g. \"coffee.eth\")",
"type": "string"
},
"owner": {
"description": "Address of the current name owner (must own the BaseRegistrar token)",
"pattern": "^0x[a-fA-F0-9]{40}$",
"type": "string"
}
},
"required": [
"name",
"owner"
],
"type": "object"
},
"name": "wrap_name"
},
{
"description": "Unwrap a .eth name from the ENS NameWrapper back to BaseRegistrar.\n\nThis converts the name from an ERC-1155 token back to an ERC-721 token. All fuses are cleared upon unwrapping.\n\nWill fail if the CANNOT_UNWRAP fuse has been burned \u2014 that restriction is permanent.\n\nUse cases:\n- Reverting a wrapped name to standard ERC-721 for compatibility\n- Regaining full control after wrapping without burning CANNOT_UNWRAP\n- Moving a name to a platform that only supports ERC-721",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "ENS name to unwrap (e.g. \"coffee.eth\")",
"type": "string"
},
"owner": {
"description": "Address of the current wrapped name owner",
"pattern": "^0x[a-fA-F0-9]{40}$",
"type": "string"
}
},
"required": [
"name",
"owner"
],
"type": "object"
},
"name": "unwrap_name"
},
{
"description": "Manage fuses on a wrapped ENS name. Fuses are permission bits that can be permanently burned to restrict what can be done with a name.\n\nThree modes:\n1. **read** \u2014 Check which fuses are currently burned on a name\n2. **burn_owner_fuses** \u2014 Burn fuses on a name you own (CANNOT_UNWRAP must be burned first)\n3. **burn_child_fuses** \u2014 As a parent, burn fuses on a subname (e.g. burn PARENT_CANNOT_CONTROL on sub.parent.eth)\n\nOwner-controlled fuses:\n- CANNOT_UNWRAP \u2014 prevents unwrapping (MUST be burned first before any other fuse)\n- CANNOT_BURN_FUSES \u2014 prevents burning additional fuses\n- CANNOT_TRANSFER \u2014 prevents transfers\n- CANNOT_SET_RESOLVER \u2014 prevents resolver changes\n- CANNOT_SET_TTL \u2014 prevents TTL changes\n- CANNOT_CREATE_SUBDOMAIN \u2014 prevents creating new subnames\n- CANNOT_APPROVE \u2014 prevents approving operators\n\nParent-controlled fuses (for subnames):\n- PARENT_CANNOT_CONTROL \u2014 parent permanently gives up control over the subname\n- CAN_EXTEND_EXPIRY \u2014 allows the subname owner to extend their own expiry\n\nWARNING: All fuse burning is IRREVERSIBLE. Fuses expire when the name expires.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"action": {
"default": "read",
"description": "Action: \"burn_owner_fuses\" burns fuses on a name you own, \"burn_child_fuses\" burns fuses on a subname you are parent of, \"read\" reads current fuses",
"enum": [
"burn_owner_fuses",
"burn_child_fuses",
"read"
],
"type": "string"
},
"expiry": {
"description": "For burn_child_fuses only: Unix timestamp for subname expiry (cannot exceed parent expiry)",
"type": "number"
},
"fuses": {
"default": [],
"description": "Fuses to burn. Required for burn actions, optional for read. Owner fuses: CANNOT_UNWRAP, CANNOT_BURN_FUSES, CANNOT_TRANSFER, CANNOT_SET_RESOLVER, CANNOT_SET_TTL, CANNOT_CREATE_SUBDOMAIN, CANNOT_APPROVE. Parent-controlled fuses (for subnames): PARENT_CANNOT_CONTROL, CAN_EXTEND_EXPIRY.",
"items": {
"type": "string"
},
"type": "array"
},
"name": {
"description": "ENS name to manage fuses on (e.g. \"coffee.eth\" for owner fuses, or \"sub.coffee.eth\" for child fuses)",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "manage_fuses"
},
{
"description": "Bulk create subnames under a parent ENS name. Designed for agent fleet deployment \u2014 create identities like agent001.company.eth, agent002.company.eth, etc. Each subname can have its own owner and records (addresses, text records). Uses the ENS NameWrapper for subname creation.\n\nReturns complete transaction recipes (contract address, encoded calldata, gas estimates) for each subname. Your wallet signs and broadcasts the transactions. Subnames are free to create \u2014 only gas costs apply.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"parentName": {
"description": "Parent ENS name (e.g. \"company.eth\")",
"type": "string"
},
"subnames": {
"description": "Array of subnames to create",
"items": {
"properties": {
"label": {
"description": "Subname label (e.g. \"agent001\" for agent001.company.eth)",
"type": "string"
},
"owner": {
"description": "Owner wallet address (defaults to parent owner)",
"type": "string"
},
"records": {
"description": "Optional records to set on the subname",
"properties": {
"addresses": {
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"texts": {
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"type": "string"
},
"type": "object"
}
},
"type": "object"
}
},
"required": [
"label"
],
"type": "object"
},
"type": "array"
},
"walletAddress": {
"description": "Wallet address that owns the parent name",
"type": "string"
}
},
"required": [
"parentName",
"subnames",
"walletAddress"
],
"type": "object"
},
"name": "mint_subnames"
},
{
"description": "Extend the expiry of an ENS subname in the NameWrapper.\n\nSubnames have their own expiry that cannot exceed the parent name's expiry. This tool extends a subname's expiry.\n\nWho can call this:\n- The parent name owner (always)\n- The subname owner (only if CAN_EXTEND_EXPIRY fuse is burned on the subname)\n\nUse cases:\n- Extending subnames you've issued to users\n- Self-extending your own subname (if CAN_EXTEND_EXPIRY is set)\n- Keeping organizational subnames active",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "Full subname to extend (e.g. \"sub.coffee.eth\")",
"type": "string"
},
"years": {
"default": 1,
"description": "Number of years to extend from now (default: 1). Cannot exceed parent expiry.",
"maximum": 10,
"minimum": 1,
"type": "number"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "extend_subname_expiry"
},
{
"description": "Approve or revoke an operator for ENS contract interactions.\n\nAn approved operator can transfer ANY token owned by the approver on the specified contract. This is setApprovalForAll \u2014 it covers all tokens, not just one.\n\nContracts:\n- **base_registrar** \u2014 ERC-721 tokens (unwrapped .eth names)\n- **name_wrapper** \u2014 ERC-1155 tokens (wrapped names and subnames)\n- **ens_registry** \u2014 ENS node ownership\n\nCommon use cases:\n- Approve NameWrapper on BaseRegistrar before wrapping a name\n- Approve a marketplace contract for trading\n- Approve a management contract for batch operations\n- Revoke a previously approved operator\n\nContract addresses:\n- BaseRegistrar: 0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85\n- NameWrapper: 0xD4416b13d2b3a9aBae7AcD5D6C2BbDBE25686401\n- ENS Registry: 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\n\nWARNING: Only approve addresses you trust. An approved operator can move ALL your names on that contract.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"approved": {
"default": true,
"description": "true to approve, false to revoke (default: true)",
"type": "boolean"
},
"contract": {
"description": "Which contract to set approval on: base_registrar (ERC-721), name_wrapper (ERC-1155), or ens_registry",
"enum": [
"base_registrar",
"name_wrapper",
"ens_registry"
],
"type": "string"
},
"operator": {
"description": "Address being approved/revoked as operator",
"pattern": "^0x[a-fA-F0-9]{40}$",
"type": "string"
},
"owner": {
"description": "Address granting/revoking operator approval",
"pattern": "^0x[a-fA-F0-9]{40}$",
"type": "string"
}
},
"required": [
"owner",
"operator",
"contract"
],
"type": "object"
},
"name": "approve_operator"
},
{
"description": "Reclaim ENS Registry ownership of a .eth name.\n\nThis syncs the ENS Registry owner to match the BaseRegistrar token owner. Used when:\n- A name was transferred via direct safeTransferFrom (bypassed ENS routing)\n- ENS Registry ownership is out of sync with token ownership\n- Recovery after a contract migration or edge case\n\nThe caller must own the BaseRegistrar ERC-721 token for the name. After reclaiming, you may also need to set the resolver if it was cleared.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "ENS name to reclaim (e.g. \"coffee.eth\")",
"type": "string"
},
"owner": {
"description": "Address to set as the ENS Registry owner (must own the BaseRegistrar token)",
"pattern": "^0x[a-fA-F0-9]{40}$",
"type": "string"
}
},
"required": [
"name",
"owner"
],
"type": "object"
},
"name": "reclaim_name"
},
{
"description": "Check if an ENS name or wallet is a registered AI agent. Returns ENSIP-25 agent-registration verification (text record bindings between ENS names and on-chain agent registries), AI metadata from text records, and ERC-8004 reputation data when available.\n\nENSIP-25 verification is live: reads agent-registration text records from the name's resolver to confirm the ENS name \u2194 registry binding.\n\nERC-8004 reputation queries (scores, reviews, validations) use the live mainnet contracts deployed January 29, 2026.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"nameOrWallet": {
"description": "ENS name (e.g. \"agent.eth\") or wallet address (0x...) to look up",
"type": "string"
}
},
"required": [
"nameOrWallet"
],
"type": "object"
},
"name": "get_agent_reputation"
},
{
"description": "Search the AI agent directory \u2014 find registered agents by name, capability, protocol support, or reputation. Powered by the live ERC-8004 registry via 8004scan (110,000+ agents indexed across 50+ chains).\n\nReturns agent identity, owner wallet/ENS, reputation scores, supported protocols (MCP/A2A/OASF), verification status, and links to 8004scan profiles.\n\nExamples:\n- \"trading agents on Base\" \u2192 search for trading agents filtered to Base chain\n- \"MCP agents\" \u2192 find agents that support the Model Context Protocol\n- \"high reputation agents\" \u2192 set minReputation to find top-scored agents",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"capabilities": {
"description": "Filter by supported protocols (e.g. [\"MCP\", \"A2A\", \"OASF\"])",
"items": {
"type": "string"
},
"type": "array"
},
"chain": {
"description": "Filter by chain name (e.g. \"Ethereum Mainnet\", \"Base\", \"Solana Mainnet\")",
"type": "string"
},
"limit": {
"default": 25,
"description": "Max results (default 25, max 50)",
"type": "number"
},
"minReputation": {
"description": "Minimum total score (0-100)",
"type": "number"
},
"query": {
"description": "Search query \u2014 agent name, capability, or description",
"type": "string"
}
},
"type": "object"
},
"name": "search_agent_directory"
},
{
"description": "Returns the authenticated identity of the calling agent. If you connected with ERC-8128 signed requests, this resolves your wallet address to your ENS name, agent metadata, and portfolio summary. Call this first to confirm your identity is recognized.\n\nRequires ERC-8128 authentication (signed HTTP requests). See GET /mcp/auth for setup details.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "get_caller_identity"
},
{
"description": "Search the ENS knowledge base \u2014 governance proposals, protocol documentation, developer insights, blog posts, forum discussions, and Farcaster casts from key ENS figures (Vitalik, Nick Johnson, etc.). Covers ENS governance and DAO proposals, protocol details (ENSv2, resolvers, subnames), community sentiment, historical decisions, and what specific people have said about a topic. Powered by semantic search over curated ENS sources.\n\nDo NOT use this for name valuations, market data, or availability checks \u2014 use the other tools for those.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 6,
"description": "Number of results to return (default 6)",
"type": "number"
},
"query": {
"description": "Search query \u2014 what you want to know about ENS governance, protocol, ecosystem, or history",
"type": "string"
},
"source": {
"description": "Filter to a specific source. Omit to search all sources.",
"enum": [
"ens-forum",
"vitalik-blog",
"ens-blog",
"ens-docs",
"farcaster"
],
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_knowledge"
},
{
"description": "Get usage statistics for this MCP server session. Returns tool call counts, success rates, and average latency.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "get_usage_stats"
}
]
}
},
"requested_protocol_version": "2025-03-26",
"resumed": true,
"session_id_present": true,
"transport": "streamable-http",
"url": "https://namewhisper.ai/mcp"
},
"latency_ms": 199.99,
"status": "ok"
},
"step_up_auth_probe": {
"details": {
"auth_required_checks": [],
"broad_scopes": [],
"challenge_headers": [],
"minimal_scope_documented": true,
"oauth_present": true,
"scope_specificity_ratio": 0.6667,
"step_up_signals": [],
"supported_scopes": [
"mcp.read",
"mcp.transact"
]
},
"latency_ms": null,
"status": "ok"
},
"tool_snapshot_probe": {
"details": {
"reason": "no_tools"
},
"latency_ms": null,
"status": "missing"
},
"tools_list": {
"details": {
"error": "Client error '400 ' for url 'https://namewhisper.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "application/json",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"http_status": 400,
"payload": {},
"url": "https://namewhisper.ai/mcp"
},
"latency_ms": 142.19,
"status": "error"
},
"transport_compliance_probe": {
"details": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "application/json",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"bad_protocol_payload": {
"error": {
"code": -32000,
"message": "Bad Request: Unsupported protocol version: 1999-99-99 (supported versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07)"
},
"id": null,
"jsonrpc": "2.0"
},
"bad_protocol_status_code": 400,
"delete_error": null,
"delete_status_code": 200,
"expired_session_error": null,
"expired_session_status_code": 400,
"issues": [
"missing_protocol_header",
"expired_session_not_404"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2025-03-26",
"session_id_present": true,
"transport": "streamable-http"
},
"latency_ms": 146.63,
"status": "error"
},
"utility_coverage_probe": {
"details": {
"completions": {
"advertised": false,
"live_probe": "not_executed",
"sample_target": null
},
"initialize_capability_keys": [
"tools"
],
"pagination": {
"metadata_signal": false,
"next_cursor_methods": [],
"supported": false
},
"tasks": {
"advertised": false,
"http_status": 400,
"probe_status": "missing"
}
},
"latency_ms": 136.62,
"status": "missing"
}
},
"failures": {
"openid_configuration": {
"error": "Client error '404 ' for url 'https://namewhisper.ai/.well-known/openid-configuration'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://namewhisper.ai/.well-known/openid-configuration"
},
"prompts_list": {
"error": "Client error '400 ' for url 'https://namewhisper.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "application/json",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"http_status": 400,
"payload": {},
"url": "https://namewhisper.ai/mcp"
},
"resources_list": {
"error": "Client error '400 ' for url 'https://namewhisper.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "application/json",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"http_status": 400,
"payload": {},
"url": "https://namewhisper.ai/mcp"
},
"tools_list": {
"error": "Client error '400 ' for url 'https://namewhisper.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "application/json",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"http_status": 400,
"payload": {},
"url": "https://namewhisper.ai/mcp"
},
"transport_compliance_probe": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "application/json",
"strict-transport-security": "max-age=31536000; includeSubDomains"
},
"bad_protocol_payload": {
"error": {
"code": -32000,
"message": "Bad Request: Unsupported protocol version: 1999-99-99 (supported versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07)"
},
"id": null,
"jsonrpc": "2.0"
},
"bad_protocol_status_code": 400,
"delete_error": null,
"delete_status_code": 200,
"expired_session_error": null,
"expired_session_status_code": 400,
"issues": [
"missing_protocol_header",
"expired_session_not_404"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2025-03-26",
"session_id_present": true,
"transport": "streamable-http"
}
},
"remote_url": "https://namewhisper.ai/mcp",
"server_card_payload": {
"authentication": {
"erc8128": {
"discovery": "https://namewhisper.ai/.well-known/erc8128",
"documentation": "https://erc8128.slice.so"
},
"oauth": {
"authorizationServer": "https://namewhisper.ai/.well-known/oauth-authorization-server",
"protectedResource": "https://namewhisper.ai/.well-known/oauth-protected-resource"
},
"schemes": [
"none",
"erc8128"
]
},
"capabilities": {
"logging": {},
"prompts": {
"listChanged": false
},
"resources": {
"listChanged": false
},
"tools": {
"listChanged": false
}
},
"contact": {
"email": "support@namewhisper.ai",
"url": "https://x.com/namewhisper_ai"
},
"description": "AI-powered ENS name search, valuation, and marketplace tools for the autonomous economy. Natural language search across 3.6M+ names, comparable sales valuations, wallet portfolio analysis, and agent identity infrastructure.",
"documentation": "https://namewhisper.ai/docs",
"name": "NW Terminal",
"payments": {
"mpp": "https://namewhisper.ai/.well-known/x402",
"x402": "https://namewhisper.ai/.well-known/x402"
},
"protocolVersions": [
"2024-11-05",
"2025-06-18"
],
"registryListing": "ai.namewhisper/ens-tools",
"serverInfo": {
"name": "NW Terminal",
"title": "Name Whisper \u2014 ENS Intelligence for AI Agents",
"version": "2.0.0"
},
"tools": {
"free": [
{
"description": "Natural language search across 3.6M+ ENS names with automatic intent detection.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "search_ens_names"
},
{
"description": "Full metadata for a name: owner, expiry, listings, offers, ENSIP-25 agent bindings.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_name_details"
},
{
"description": "Bulk check registration status for multiple names.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "check_availability"
},
{
"description": "Semantic vector similarity search (256-dim embeddings) across the full ENS corpus.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_similar_names"
},
{
"description": "Three-track valuation (comparable-sales, quality-reference, self-history) with confidence rating.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_valuation"
},
{
"description": "Recent marketplace events: sales, listings, offers, mints, transfers, renewals, burns.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_market_activity"
},
{
"description": "All ENS names owned by a wallet with listings, offers, expiry, and tags.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_wallet_portfolio"
},
{
"description": "Scan the marketplace for names listed below comparable-sales valuation.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "find_alpha"
},
{
"description": "Detect suspicious wash-trading patterns in a name's sales history.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "wash_check"
},
{
"description": "Resolve the ENS primary name for a wallet address.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_primary_name"
},
{
"description": "Comprehensive management info for a name: status, expiry, wrapper state, recommendations.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "manage_ens_name"
},
{
"description": "One-call agent identity setup with ENS name recommendations and ENSIP-25 binding.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "provision_agent_identity"
},
{
"description": "Check ENSIP-25 bindings and ERC-8004 reputation for a name or wallet.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_agent_reputation"
},
{
"description": "Find AI agents by capability, reputation, or name.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "search_agent_directory"
},
{
"description": "Return the authenticated caller identity derived from ERC-8128 signature.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_caller_identity"
},
{
"description": "Search the ENS knowledge base (governance, protocol docs, forum, Farcaster).",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "search_knowledge"
},
{
"description": "Session usage statistics: tool call counts, success rates, latency.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "get_usage_stats"
}
],
"totalCount": 40,
"transaction": [
{
"description": "Buy a listed name or register an available name on-chain.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "purchase_name"
},
{
"description": "Submit a bid on a registered ENS name.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "make_offer"
},
{
"description": "Register up to 20 names in 2 transactions via Multicall3.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "bulk_register"
},
{
"description": "Renew a name or batch of names via Multicall3.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "renew_ens_name"
},
{
"description": "Transfer name ownership (auto-detects wrapped vs unwrapped).",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "transfer_ens_name"
},
{
"description": "Transfer up to 20 names in a single Multicall3 transaction.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "bulk_transfer_ens_names"
},
{
"description": "Set resolver records (addresses, texts, content hash, ENSIP-25 agent bindings).",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "set_ens_records"
},
{
"description": "Set records for up to 50 names in a single resolver multicall.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "bulk_set_records"
},
{
"description": "Set the reverse resolution (primary name) for a wallet.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "set_primary_name"
},
{
"description": "Change the resolver contract for a name.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "set_resolver"
},
{
"description": "Wrap a name into the ENS NameWrapper (ERC-721 \u2192 ERC-1155).",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "wrap_name"
},
{
"description": "Unwrap a wrapped name back to the BaseRegistrar.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "unwrap_name"
},
{
"description": "Read or burn fuses on a wrapped name (irreversible).",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "manage_fuses"
},
{
"description": "Bulk create subnames under a parent name \u2014 agent fleet deployment.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "mint_subnames"
},
{
"description": "Extend the expiry of a subname up to the parent's expiry.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "extend_subname_expiry"
},
{
"description": "Approve or revoke an operator for ENS contract interactions.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "approve_operator"
},
{
"description": "Reclaim ENS Registry ownership of a name after BaseRegistrar transfer.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "reclaim_name"
},
{
"description": "See https://namewhisper.ai/llms-full.txt for tool details.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "create_listing"
},
{
"description": "See https://namewhisper.ai/llms-full.txt for tool details.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "cancel_listing"
},
{
"description": "See https://namewhisper.ai/llms-full.txt for tool details.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "cancel_offer"
},
{
"description": "See https://namewhisper.ai/llms-full.txt for tool details.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "accept_offer"
},
{
"description": "See https://namewhisper.ai/llms-full.txt for tool details.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "batch_purchase"
},
{
"description": "See https://namewhisper.ai/llms-full.txt for tool details.",
"inputSchemaUrl": "https://namewhisper.ai/llms-full.txt",
"name": "batch_create_listings"
}
]
},
"transports": [
{
"sessionHeader": "mcp-session-id",
"type": "streamable-http",
"url": "https://namewhisper.ai/mcp"
}
],
"version": "2.0.0"
},
"server_identifier": "ai.namewhisper/ens-tools"
}
Known versions
1.0.2
Validation history
7 day score delta
n/a
30 day score delta
n/a
Recent healthy ratio
0%
Freshness
48.6h
| Timestamp | Status | Score | Latency | Tools |
|---|---|---|---|---|
| May 02, 2026 05:18:02 AM UTC | Failing | 58.0 | 1876.9 ms | 0 |
| May 02, 2026 05:15:27 AM UTC | Failing | 58.0 | 1864.1 ms | 0 |
| May 02, 2026 05:12:29 AM UTC | Failing | 58.0 | 1996.5 ms | 0 |
| May 02, 2026 05:09:56 AM UTC | Failing | 58.0 | 1759.6 ms | 0 |
| May 02, 2026 05:06:22 AM UTC | Failing | 58.0 | 1866.8 ms | 0 |
| May 02, 2026 05:03:25 AM UTC | Failing | 58.0 | 2052.5 ms | 0 |
| May 02, 2026 05:01:47 AM UTC | Failing | 58.0 | 2234.9 ms | 0 |
| May 02, 2026 04:59:23 AM UTC | Failing | 58.0 | 1741.4 ms | 0 |
Validation timeline
| Validated | Summary | Score | Protocol | Auth mode | Tools | High-risk tools | Changes |
|---|---|---|---|---|---|---|---|
| May 02, 2026 05:18:02 AM UTC | Failing | 58.0 | 2025-03-26 | oauth_supported | 0 | 0 | none |
| May 02, 2026 05:15:27 AM UTC | Failing | 58.0 | 2025-03-26 | oauth_supported | 0 | 0 | none |
| May 02, 2026 05:12:29 AM UTC | Failing | 58.0 | 2025-03-26 | oauth_supported | 0 | 0 | none |
| May 02, 2026 05:09:56 AM UTC | Failing | 58.0 | 2025-03-26 | oauth_supported | 0 | 0 | none |
| May 02, 2026 05:06:22 AM UTC | Failing | 58.0 | 2025-03-26 | oauth_supported | 0 | 0 | none |
| May 02, 2026 05:03:25 AM UTC | Failing | 58.0 | 2025-03-26 | oauth_supported | 0 | 0 | none |
| May 02, 2026 05:01:47 AM UTC | Failing | 58.0 | 2025-03-26 | oauth_supported | 0 | 0 | none |
| May 02, 2026 04:59:23 AM UTC | Failing | 58.0 | 2025-03-26 | oauth_supported | 0 | 0 | none |
| May 02, 2026 04:55:57 AM UTC | Failing | 58.0 | 2025-03-26 | oauth_supported | 0 | 0 | none |
| May 02, 2026 04:52:34 AM UTC | Failing | 58.0 | 2025-03-26 | oauth_supported | 0 | 0 | none |
| May 02, 2026 04:49:05 AM UTC | Failing | 58.0 | 2025-03-26 | oauth_supported | 0 | 0 | none |
| May 02, 2026 04:46:24 AM UTC | Failing | 58.0 | 2025-03-26 | oauth_supported | 0 | 0 | none |
Recent validation runs
| Started | Status | Summary | Latency | Checks |
|---|---|---|---|---|
| May 02, 2026 05:18:01 AM UTC | Completed | Failing | 1876.9 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 02, 2026 05:15:26 AM UTC | Completed | Failing | 1864.1 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 02, 2026 05:12:27 AM UTC | Completed | Failing | 1996.5 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 02, 2026 05:09:54 AM UTC | Completed | Failing | 1759.6 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 02, 2026 05:06:20 AM UTC | Completed | Failing | 1866.8 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 02, 2026 05:03:23 AM UTC | Completed | Failing | 2052.5 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 02, 2026 05:01:45 AM UTC | Completed | Failing | 2234.9 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 02, 2026 04:59:21 AM UTC | Completed | Failing | 1741.4 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 02, 2026 04:55:55 AM UTC | Completed | Failing | 1846.6 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 02, 2026 04:52:32 AM UTC | Completed | Failing | 1867.2 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |