Lumen Agent Utilities

x402 agent tools: calldata/EIP-712/x402 decoders, web→MD, ENS, DNS, PubMed, arXiv, SEC, weather

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
83%
Naming quality
81%
Poisoning risk
80%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domainin web_markdown
  • LOWTool 'eip712_decode' description lacks action verbin eip712_decode

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,105Tokens (tool definitions)
~729 BTypical response size
Moderate attention impact (1.64% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "lumenworks-decoder": {
      "url": "https://lumenworks-x402-decoder.onrender.com/mcp"
    }
  }
}

Remote endpoints

https://lumenworks-x402-decoder.onrender.com/mcpstreamable-http

What it can do

Tool inventory

Tools (14)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪x402_lint(header, json)

Decode and lint an x402 PAYMENT-REQUIRED / PAYMENT-SIGNATURE / PAYMENT-RESPONSE header (base64 or JSON): kind, decoded object, errors/warnings (CAIP-2, checksum, EIP-712 domain, expiry).

Input Schema

{
  "type": "object",
  "properties": {
    "header": {
      "type": "string",
      "description": "base64 x402 header value"
    },
    "json": {
      "type": "object"
    }
  }
}
⚪eip712_decode(typedData)

Decode EIP-712 typed data: domain separator, signing digest, message, and plain-language risk notes (Permit, Permit2, EIP-3009, unlimited values).

Input Schema

{
  "type": "object",
  "properties": {
    "typedData": {
      "type": "object"
    }
  },
  "required": [
    "typedData"
  ]
}
🟢web_markdown(url, fullPage, maxChars)

Use when you need to read a public web page as clean LLM-ready Markdown: Readability main-content extraction (nav/scripts stripped) plus title, byline, excerpt, OpenGraph metadata. {fullPage:true} keeps the whole body; {maxChars} caps output (default 100k). No JavaScript rendering, no PDFs. Example: {url:"https://example.com"} -> {title:"Example Domain", markdown:"# Example Domain …"}. $0.001, no signup; not charged if the fetch fails.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public http(s) URL"
    },
    "fullPage": {
      "type": "boolean",
      "description": "Keep the whole body instead of Readability main content"
    },
    "maxChars": {
      "type": "number",
      "description": "Max Markdown characters (default 100000)"
    }
  },
  "required": [
    "url"
  ]
}
⚪url_unfurl(url)

Unfurl a URL: final URL after redirects, HTTP status, title, description, OpenGraph/Twitter image, site name, canonical, favicon, language, published time.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    }
  },
  "required": [
    "url"
  ]
}
⚪evm_address_lookup(address)

Look up an EVM address or ENS name on Ethereum + Base: ENS forward/reverse + text records, EOA vs contract (EIP-7702 delegation flag), native balance, tx count, USDC/USDT balances, and ERC-20 name/symbol/decimals/supply if it is a token.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "0x address or ENS name"
    }
  },
  "required": [
    "address"
  ]
}
⚪domain_lookup(domain)

Domain intelligence: DNS A/AAAA/CNAME/MX/NS/TXT/CAA (DNS-over-HTTPS), SPF + DMARC, RDAP registration/expiry/registrar/status, domain age in days. Useful for phishing/fraud checks and lead qualification.

Input Schema

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string"
    }
  },
  "required": [
    "domain"
  ]
}
🟢explain_before_sign(transaction, calldata, typedData, chainId, expected_pay_to)

Lumen Pre-Sign Check. Use before signing any EVM transaction or EIP-712 message: returns {summary, flags[], verdict} with verdict looks_ok | review | do_not_sign_unless_intended. Flags unlimited approve/increaseAllowance, EIP-2612 Permit and Permit2 (typed data and on-chain), setApprovalForAll, unknown spender, admin calls (upgradeTo/transferOwnership), zero-price Seaport orders, long deadlines, chain mismatch and x402 payTo mismatch; decodes multicall/aggregate3 inner calls one level. Example: USDC approve(spender, 2^256-1) -> do_not_sign_unless_intended, UNLIMITED_APPROVAL. Agent policy: abort on do_not_sign_unless_intended, escalate review. Informational, not a security guarantee; looks_ok does not mean safe; no simulation. $0.002, no signup, free tier 20/h; not charged if the call errors.

Input Schema

{
  "type": "object",
  "properties": {
    "transaction": {
      "type": "object",
      "description": "Unsigned EVM transaction",
      "properties": {
        "to": {
          "type": "string",
          "description": "Target contract/address (0x…)"
        },
        "data": {
          "type": "string",
          "description": "Calldata hex (0x…)"
        },
        "value": {
          "type": "string",
          "description": "Native value in wei (decimal string)"
        }
      },
      "required": [
        "data"
      ]
    },
    "calldata": {
      "type": "string",
      "description": "Shortcut: calldata hex when you have no tx object"
    },
    "typedData": {
      "type": "object",
      "description": "EIP-712 typed data {domain, types, primaryType, message} (Permit, Permit2, EIP-3009, Seaport…)"
    },
    "chainId": {
      "type": "number",
      "description": "Chain the wallet is on; used for chain-mismatch checks"
    },
    "expected_pay_to": {
      "type": "string",
      "description": "For x402/EIP-3009 payments: the payTo you expect; mismatch is flagged"
    }
  },
  "anyOf": [
    {
      "required": [
        "transaction"
      ]
    },
    {
      "required": [
        "calldata"
      ]
    },
    {
      "required": [
        "typedData"
      ]
    }
  ]
}
🟢pubmed_search(query, limit, sort, abstracts)

Search PubMed (36M+ biomedical citations): PMID, title, journal, date, authors, DOI, URL and abstract. {query, limit<=50, sort:relevance|date, abstracts:true}.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "limit": {
      "type": "number"
    },
    "sort": {
      "type": "string",
      "enum": [
        "relevance",
        "date"
      ]
    },
    "abstracts": {
      "type": "boolean"
    }
  },
  "required": [
    "query"
  ]
}
🟢arxiv_search(query, limit, sort)

Search arXiv preprints: id, title, abstract, authors, categories, dates, PDF link. Supports arXiv field prefixes (ti:, au:, cat:). {query, limit<=50, sort:relevance|date}.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "limit": {
      "type": "number"
    },
    "sort": {
      "type": "string",
      "enum": [
        "relevance",
        "date"
      ]
    }
  },
  "required": [
    "query"
  ]
}
⚪sec_filings(ticker, cik, forms, limit, facts)

SEC EDGAR company lookup by ticker or CIK: company profile, recent filings (filter by form e.g. 10-K, 10-Q, 8-K, 4) with document links, and latest annual XBRL facts (revenue, net income, assets, liabilities, equity, EPS, cash).

Input Schema

{
  "type": "object",
  "properties": {
    "ticker": {
      "type": "string"
    },
    "cik": {
      "type": "string"
    },
    "forms": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "limit": {
      "type": "number"
    },
    "facts": {
      "type": "boolean"
    }
  }
}
⚪weather_forecast(location, latitude, longitude, days, units)

Weather for any place name or lat/lon (Open-Meteo): current conditions plus up to 16-day daily forecast (temp min/max, precipitation and probability, wind, UV, sunrise/sunset). {location | latitude+longitude, days, units:metric|imperial}.

Input Schema

{
  "type": "object",
  "properties": {
    "location": {
      "type": "string",
      "description": "Place name, e.g. Berlin (geocoded)"
    },
    "latitude": {
      "type": "number",
      "description": "Latitude (use with longitude instead of location)"
    },
    "longitude": {
      "type": "number",
      "description": "Longitude"
    },
    "days": {
      "type": "number",
      "description": "Forecast days, 1-16 (default 7)"
    },
    "units": {
      "type": "string",
      "enum": [
        "metric",
        "imperial"
      ],
      "description": "Default metric"
    }
  },
  "anyOf": [
    {
      "required": [
        "location"
      ]
    },
    {
      "required": [
        "latitude",
        "longitude"
      ]
    }
  ]
}
🟢polymarket_markets(query, limit)

Read-only Polymarket prediction-market data: search by {query} or top active markets by 24h volume. Returns question, outcomes with implied probabilities, 24h/total volume, liquidity, end date, URL. Data only, no trading.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "limit": {
      "type": "number"
    }
  }
}
⚪calldata_decode(data, signature)

Use when you hold raw EVM calldata and need to know what function it calls: returns selector, matching signatures (built-in + openchain/4byte) and ABI-decoded args for each candidate; unknown selectors return signaturesFound:0 instead of an error. Optional {signature} override. Example: 0xa9059cbb… -> transfer(address,uint256) with args. $0.002, no signup; not charged if the call errors.

Input Schema

{
  "type": "object",
  "properties": {
    "data": {
      "type": "string",
      "description": "Calldata hex starting with the 4-byte selector (0x…)"
    },
    "signature": {
      "type": "string",
      "description": "Optional function signature override, e.g. transfer(address,uint256)"
    }
  },
  "required": [
    "data"
  ]
}
🟢x402_payment_safety_check(url, method, payment_required, expected_pay_to, expected_network, ...)

FREE, deterministic pre-payment check for an x402 endpoint. Give {url} (we fetch its unpaid 402) and/or {payment_required} (402 JSON or base64 header), plus optional expected_pay_to, expected_network, max_price_usdc, listed_price_usdc, facilitator_url, client_config {max_per_call_usdc, max_daily_usdc, idempotency_key, allow_any_pay_to}. Returns verdict ok/review/do_not_pay with checks: HTTPS/health, payTo validity & mismatch, unknown asset/network, price sanity vs cap/listing, timeout/replay window, multiple payTo, unknown facilitator, missing spend caps/idempotency. Nothing is stored; inputs that look like private keys are rejected.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "method": {
      "type": "string",
      "enum": [
        "POST",
        "GET"
      ]
    },
    "payment_required": {},
    "expected_pay_to": {
      "type": "string"
    },
    "expected_network": {
      "type": "string"
    },
    "max_price_usdc": {
      "type": "number"
    },
    "listed_price_usdc": {
      "type": "number"
    },
    "facilitator_url": {
      "type": "string"
    },
    "client_config": {
      "type": "object"
    }
  }
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded14 tools