@axiomworks/agentreader-mcp 1.30.0 → 1.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -420,7 +420,7 @@ var chain_routes_default = [
420
420
 
421
421
  // src/tools.ts
422
422
  var ORIGIN = process.env.AGENTREADER_ORIGIN || "https://api.axiomworks.co.uk";
423
- var VERSION = "1.30.0";
423
+ var VERSION = "1.31.0";
424
424
  var CH = z.enum(["base", "ethereum", "arbitrum", "optimism", "polygon"]).optional();
425
425
  var qs = (a) => new URLSearchParams(
426
426
  Object.entries(a).filter(([, v]) => v != null && v !== "").map(([k, v]) => [k, String(v)])
@@ -991,7 +991,7 @@ var ALL_TOOLS = [
991
991
  },
992
992
  {
993
993
  name: "uk_watch",
994
- description: "Watch one UK company 30 days: hourly CH poll \u2192 webhook on change. $5.00/30d USDC.",
994
+ description: "Watch one UK company 30 days: hourly CH poll of status/officers/filings/PSC/charges \u2192 webhook on change. $5.00/30d USDC.",
995
995
  price: "$5.00",
996
996
  schema: {
997
997
  number: z.string(),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/tools.ts","../src/chain-routes.json","../src/payment.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * @axiomworks/agentreader-mcp\n * Stdio MCP server for Axiom Works AgentReader.\n * Proxies tool calls to https://api.axiomworks.co.uk (same surface as /mcp).\n * Optional AGENTREADER_PRIVATE_KEY / EVM_PRIVATE_KEY enables auto x402 payment (USDC on Base).\n * Without a key, free previews (&preview=1) still work; paid calls return payment requirements.\n */\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { TOOLS, VERSION, ORIGIN, type ToolDef } from \"./tools.js\";\nimport { createFetch } from \"./payment.js\";\n\nfunction b64json(header: string | null) {\n if (!header) return null;\n try {\n return JSON.parse(Buffer.from(header, \"base64\").toString(\"utf8\"));\n } catch {\n return { raw: header.slice(0, 200) };\n }\n}\n\nfunction withPreview(url: string, tool: ToolDef, paying: boolean, args: Record<string, any>): string {\n if (paying || tool.free || tool.method === \"POST\" || !tool.previewable) return url;\n // Explicit preview:false disables free truncated mode\n if (args?.preview === false || args?.preview === \"0\") return url;\n const u = new URL(url);\n if (!u.searchParams.has(\"preview\")) u.searchParams.set(\"preview\", \"1\");\n return u.toString();\n}\n\nasync function callHttp(\n tool: ToolDef,\n args: Record<string, any>,\n fetchFn: typeof fetch,\n paying: boolean,\n) {\n let url = tool.http(args || {});\n url = withPreview(url, tool, paying, args || {});\n const init: RequestInit = {\n method: tool.method || \"GET\",\n headers: {\n accept: \"application/json\",\n \"user-agent\": `axiomworks-agentreader-mcp/${VERSION}`,\n },\n };\n if (tool.method === \"POST\") {\n (init.headers as Record<string, string>)[\"content-type\"] = \"application/json\";\n init.body = JSON.stringify(tool.body ? tool.body(args) : args);\n }\n const res = await fetchFn(url, init);\n const pr = res.headers.get(\"payment-required\") || res.headers.get(\"PAYMENT-REQUIRED\");\n const text = await res.text();\n let body: any;\n try {\n body = JSON.parse(text);\n } catch {\n body = { raw: text.slice(0, 2000) };\n }\n\n if (res.status === 402 || pr) {\n const payment = b64json(pr);\n return {\n content: [\n {\n type: \"text\" as const,\n text: JSON.stringify(\n {\n error: \"payment_required\",\n status: 402,\n message:\n \"This tool is paid via x402 (USDC on Base). Set AGENTREADER_PRIVATE_KEY (or EVM_PRIVATE_KEY) so this MCP server can auto-pay, or retry the HTTP URL with @x402/fetch / @axiomworks/agentreader.\",\n paid_http: url.replace(/([?&])preview=1(&|$)/, \"$1\").replace(/\\?$/, \"\"),\n mcp: `${ORIGIN}/mcp`,\n preview_hint:\n \"Without a key, GET tools are called with preview=1 (free truncated sample, 8/IP/day).\",\n payment_required: payment,\n body,\n },\n null,\n 2,\n ),\n },\n ],\n };\n }\n if (!res.ok) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: JSON.stringify(\n { error: body?.error || `HTTP ${res.status}`, status: res.status, body },\n null,\n 2,\n ),\n },\n ],\n };\n }\n return {\n content: [{ type: \"text\" as const, text: typeof body === \"string\" ? body : JSON.stringify(body) }],\n };\n}\n\nasync function main() {\n const { fetch: fetchFn, paying } = createFetch();\n const server = new McpServer({\n name: \"agentreader\",\n title: \"Axiom Works AgentReader\",\n version: VERSION,\n });\n\n for (const t of TOOLS) {\n server.tool(t.name, t.description, t.schema, async (args) => {\n try {\n return await callHttp(t, (args as Record<string, any>) || {}, fetchFn, paying);\n } catch (e: any) {\n return {\n isError: true,\n content: [{ type: \"text\" as const, text: String(e?.message || e) }],\n };\n }\n });\n }\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nmain().catch((e) => {\n console.error(e);\n process.exit(1);\n});\n","import { z } from \"zod\";\n\nexport const ORIGIN = process.env.AGENTREADER_ORIGIN || \"https://api.axiomworks.co.uk\";\nexport const VERSION = \"1.30.0\";\nimport CHAIN from \"./chain-routes.json\";\n\nconst CH = z.enum([\"base\", \"ethereum\", \"arbitrum\", \"optimism\", \"polygon\"]).optional();\nconst qs = (a: Record<string, unknown>) =>\n new URLSearchParams(\n Object.entries(a)\n .filter(([, v]) => v != null && v !== \"\")\n .map(([k, v]) => [k, String(v)]),\n ).toString();\n\nexport type ToolDef = {\n name: string;\n description: string;\n price: string;\n schema: Record<string, z.ZodTypeAny>;\n http: (a: Record<string, any>) => string;\n method?: \"GET\" | \"POST\";\n body?: (a: Record<string, any>) => unknown;\n free?: boolean;\n /** When true, unpaid preview mode appends preview=1 */\n previewable?: boolean;\n};\n\nexport const HIDDEN_TOOLS = new Set([\"iban_validate\",\"phone_check\",\"uk_postcode_validate\",\"siren_validate\",\"siret_validate\",\"partita_iva_validate\",\"orgnr_se_validate\",\"bn_ca_validate\",\"cvr_dk_validate\",\"fn_at_validate\",\"cin_in_validate\",\"kvk_nl_validate\",\"hr_de_validate\",\"nif_es_validate\",\"cnpj_validate\",\"nip_pl_validate\",\"uid_ch_validate\"]);\nconst ALL_TOOLS: ToolDef[] = [\n {\n name: \"read_url\",\n description:\n \"Use this when you need clean Markdown + metadata from a public URL (not raw HTML). $0.002 USDC on Base via x402.\",\n price: \"$0.002\",\n schema: { url: z.string().url() },\n http: (a) => `${ORIGIN}/read?url=${encodeURIComponent(a.url)}`,\n previewable: true,\n },\n {\n name: \"extract_links\",\n description: \"Use this when you only need de-duplicated absolute links. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { url: z.string().url() },\n http: (a) => `${ORIGIN}/links?url=${encodeURIComponent(a.url)}`,\n previewable: true,\n },\n {\n name: \"check_domain\",\n description: \"Use this when vetting domain health: DNS/TLS/MX/SPF/DMARC + score. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { domain: z.string() },\n http: (a) => `${ORIGIN}/check?domain=${encodeURIComponent(a.domain)}`,\n previewable: true,\n },\n {\n name: \"email_check\",\n description: \"Validate an email address: syntax, MX/A DNS, disposable/free/role flags, provider guess, score+verdict. No SMTP probe. $0.002 USDC.\",\n price: \"$0.002\",\n schema: { email: z.string() },\n http: (a) => `${ORIGIN}/email-check?email=${encodeURIComponent(a.email)}`,\n previewable: true,\n },\n {\n name: \"domain_lookup\",\n description: \"RDAP domain registration lookup: registrar, registered, expires, age_days, status. $0.002 USDC.\",\n price: \"$0.002\",\n schema: { domain: z.string() },\n http: (a) => `${ORIGIN}/domain?domain=${encodeURIComponent(a.domain)}`,\n previewable: true,\n },\n {\n name: \"dns_lookup\",\n description: \"DNS resolve via Cloudflare DoH: A/AAAA/MX/TXT/NS/CNAME (optional type=). $0.001 USDC.\",\n price: \"$0.001\",\n schema: { name: z.string(), type: z.string().optional() },\n http: (a) => {\n const q = new URLSearchParams({ name: a.name });\n if (a.type) q.set(\"type\", a.type);\n return `${ORIGIN}/dns?${q}`;\n },\n previewable: true,\n },\n {\n name: \"url_redirects\",\n description: \"Unwrap URL redirects / short links: final_url + hop chain (SSRF-safe). $0.001 USDC.\",\n price: \"$0.001\",\n schema: { url: z.string() },\n http: (a) => `${ORIGIN}/redirects?url=${encodeURIComponent(a.url)}`,\n previewable: true,\n },\n {\n name: \"page_meta\",\n description: \"Lightweight page metadata: title, description, canonical, Open Graph + Twitter, favicons, JSON-LD types, h1/h2. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { url: z.string() },\n http: (a) => `${ORIGIN}/meta?url=${encodeURIComponent(a.url)}`,\n previewable: true,\n },\n {\n name: \"http_headers\",\n description: \"HTTP security headers audit: HSTS/CSP/XFO/XCTO + score (SSRF-safe). Not a pen-test. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { url: z.string().optional(), domain: z.string().optional() },\n http: (a) => {\n const q = new URLSearchParams();\n if (a.url) q.set(\"url\", a.url);\n if (a.domain) q.set(\"domain\", a.domain);\n return `${ORIGIN}/headers?${q}`;\n },\n previewable: true,\n },\n {\n name: \"iban_validate\",\n description: \"Offline IBAN validation (ISO 13616 mod-97 + country length). Checksum only. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { iban: z.string() },\n http: (a) => `${ORIGIN}/iban?iban=${encodeURIComponent(a.iban)}`,\n previewable: true,\n },\n {\n name: \"phone_check\",\n description: \"Offline phone validate (E.164 + country length). Structure only — not HLR/carrier. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { phone: z.string(), country: z.string().optional() },\n http: (a) => {\n const q = new URLSearchParams({ phone: a.phone });\n if (a.country) q.set(\"country\", a.country);\n return `${ORIGIN}/phone?${q}`;\n },\n previewable: true,\n },\n {\n name: \"uk_postcode_validate\",\n description: \"Offline UK postcode structural validate (Royal Mail format only — not assigned/deliverable). $0.001 USDC.\",\n price: \"$0.001\",\n schema: { postcode: z.string() },\n http: (a) => `${ORIGIN}/uk-postcode?postcode=${encodeURIComponent(a.postcode)}`,\n previewable: true,\n },\n {\n name: \"siren_validate\",\n description: \"Offline French SIREN (9-digit Luhn) validate. Structure only. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { siren: z.string() },\n http: (a) => `${ORIGIN}/siren?siren=${encodeURIComponent(a.siren)}`,\n previewable: true,\n },\n {\n name: \"siret_validate\",\n description: \"Offline French SIRET (14-digit Luhn = SIREN+NIC) validate. Structure only. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { siret: z.string() },\n http: (a) => `${ORIGIN}/siret?siret=${encodeURIComponent(a.siret)}`,\n previewable: true,\n },\n {\n name: \"partita_iva_validate\",\n description: \"Offline Italian Partita IVA (11-digit checksum; optional IT prefix) validate. Structure only. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { vat: z.string() },\n http: (a) => `${ORIGIN}/partita-iva?vat=${encodeURIComponent(a.vat)}`,\n previewable: true,\n },\n {\n name: \"orgnr_se_validate\",\n description: \"Offline Swedish organisationsnummer (10-digit Luhn from left) validate. Structure only. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { orgnr: z.string() },\n http: (a) => `${ORIGIN}/orgnr?orgnr=${encodeURIComponent(a.orgnr)}`,\n previewable: true,\n },\n {\n name: \"bn_ca_validate\",\n description: \"Offline Canadian CRA Business Number shape check (9-digit or program account). No check digit. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { bn: z.string() },\n http: (a) => `${ORIGIN}/bn-ca?bn=${encodeURIComponent(a.bn)}`,\n previewable: true,\n },\n {\n name: \"cvr_dk_validate\",\n description: \"Offline Danish CVR validate (8-digit modulus-11). $0.001\",\n schema: { cvr: z.string() },\n http: (a) => `${ORIGIN}/cvr?cvr=${encodeURIComponent(a.cvr)}`,\n },\n {\n name: \"fn_at_validate\",\n description: \"Offline Austrian Firmenbuchnummer (FN) validate. $0.001\",\n schema: { fn: z.string() },\n http: (a) => `${ORIGIN}/fn-at?fn=${encodeURIComponent(a.fn)}`,\n },\n {\n name: \"kvk_nl_validate\",\n description: \"Offline Dutch KvK (Chamber of Commerce) number validate (8 digits; elfproef informational). Accepts number= as alias of kvk=. $0.001\",\n schema: { kvk: z.string() },\n http: (a) => `${ORIGIN}/kvk-nl?kvk=${encodeURIComponent(a.kvk)}`,\n },\n {\n name: \"hr_de_validate\",\n description: \"Offline German Handelsregister number validate (HRA/HRB/GnR/PR/VR/GsR + number; optional court prefix e.g. 'Amtsgericht München HRB 6684'). Accepts number= as alias of hr=. $0.001\",\n schema: { hr: z.string() },\n http: (a) => `${ORIGIN}/hr-de?hr=${encodeURIComponent(a.hr)}`,\n },\n {\n name: \"nif_es_validate\",\n description: \"Offline Spanish NIF/NIE/CIF validate (control letter/digit; optional ES prefix). Accepts number=/vat= as aliases of nif=. $0.001\",\n schema: { nif: z.string() },\n http: (a) => `${ORIGIN}/nif-es?nif=${encodeURIComponent(a.nif)}`,\n },\n {\n name: \"cnpj_validate\",\n description: \"Offline Brazilian CNPJ validate (14 digits + check digits; punctuation ok). Accepts number= as alias of cnpj=. $0.001\",\n schema: { cnpj: z.string() },\n http: (a) => `${ORIGIN}/cnpj?cnpj=${encodeURIComponent(a.cnpj)}`,\n },\n {\n name: \"nip_pl_validate\",\n description: \"Offline Polish NIP validate (10-digit modulus-11; optional PL prefix). Accepts number=/vat= as aliases of nip=. $0.001\",\n schema: { nip: z.string() },\n http: (a) => `${ORIGIN}/nip-pl?nip=${encodeURIComponent(a.nip)}`,\n },\n {\n name: \"uid_ch_validate\",\n description: \"Offline Swiss UID (CHE-xxx.xxx.xxx) validate (9 digits + check digit; optional MWST/TVA/IVA suffix). Accepts number=/che= as aliases of uid=. $0.001\",\n schema: { uid: z.string() },\n http: (a) => `${ORIGIN}/uid-ch?uid=${encodeURIComponent(a.uid)}`,\n },\n {\n name: \"cin_in_validate\",\n description: \"Offline Indian CIN structural validate (21 chars). $0.001\",\n schema: { cin: z.string() },\n http: (a) => `${ORIGIN}/cin-in?cin=${encodeURIComponent(a.cin)}`,\n },\n\n {\n name: \"company_research\",\n description:\n \"Website company research (tech, contacts, DNS, RDAP, news) with sources — not UK Companies House. $0.25 USDC.\",\n price: \"$0.25\",\n schema: { domain: z.string() },\n http: (a) => `${ORIGIN}/company?domain=${encodeURIComponent(a.domain)}`,\n previewable: true,\n },\n {\n name: \"uk_company\",\n description:\n \"Full UK Companies House due diligence (number or name) + red flags. $0.50 USDC. Prefer uk_company_lite for a cheap snapshot.\",\n price: \"$0.50\",\n schema: { number: z.string().optional(),\n company_number: z.string().optional(), name: z.string().optional() },\n http: (a) =>\n a.number\n ? `${ORIGIN}/uk-company?number=${encodeURIComponent(a.number)}`\n : `${ORIGIN}/uk-company?name=${encodeURIComponent(a.name || \"\")}`,\n previewable: true,\n },\n {\n name: \"uk_officer\",\n description: \"Reverse-search a UK Companies House officer/director name -> their appointments. $0.15 USDC.\",\n price: \"$0.15\",\n schema: { name: z.string(), limit: z.string().optional() },\n http: (a) => `${ORIGIN}/uk-officer?name=${encodeURIComponent(a.name)}${a.limit ? `&limit=${encodeURIComponent(a.limit)}` : \"\"}`,\n },\n {\n name: \"fr_company\",\n description: \"French company lookup (Recherche d'entreprises): SIREN/SIRET/name → status, NAF, siège, dirigeants, finances. $0.25 USDC.\",\n price: \"$0.25\",\n schema: { siren: z.string().optional(), siret: z.string().optional(), name: z.string().optional(), q: z.string().optional(), limit: z.string().optional() },\n http: (a) => `${ORIGIN}/fr-company?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"no_company\",\n description: \"Norwegian company lookup via Brønnøysundregistrene Enhetsregisteret by orgnr (9 digits) or name. $0.25 USDC.\",\n price: \"$0.25\",\n schema: { orgnr: z.string().optional(), name: z.string().optional(), q: z.string().optional(), limit: z.string().optional() },\n http: (a) => `${ORIGIN}/no-company?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"registry_batch\",\n description: \"Batch verify up to 25 UK (Companies House, max 10), Australian (ACN/ABN), Canadian (number/BN), French (SIREN) and Norwegian (orgnr) companies in one call; comma-separated ids. $0.30 USDC.\",\n price: \"$0.30\",\n schema: { uk: z.string().optional(), au: z.string().optional(), ca: z.string().optional(), fr: z.string().optional(), no: z.string().optional() },\n http: (a) => `${ORIGIN}/registry-batch?${new URLSearchParams(Object.entries(a).filter(([, v]) => v) as any)}`,\n },\n {\n name: \"ca_company\",\n description: \"Canadian federal corporation lookup (Corporations Canada, ~697k active) by corporation number or 9-digit Business Number: legal name, governing act, status, filings, registered office, directors. $0.02 USDC.\",\n price: \"$0.02\",\n schema: { number: z.string().optional(), bn: z.string().optional() },\n http: (a) => a.number ? `${ORIGIN}/ca-company?number=${encodeURIComponent(a.number)}` : `${ORIGIN}/ca-company?bn=${encodeURIComponent(a.bn || \"\")}`,\n },\n {\n name: \"au_company\",\n description: \"Australian company lookup (ASIC register, ~4M companies) by ACN or ABN: name, type, status, registration date. $0.02 USDC.\",\n price: \"$0.02\",\n schema: { acn: z.string().optional(), abn: z.string().optional() },\n http: (a) => a.acn ? `${ORIGIN}/au-company?acn=${encodeURIComponent(a.acn)}` : `${ORIGIN}/au-company?abn=${encodeURIComponent(a.abn || \"\")}`,\n },\n {\n name: \"uk_company_lite\",\n description: \"Cheap UK company snapshot: status, compliance, red flags. $0.05 USDC.\",\n price: \"$0.05\",\n schema: { number: z.string().optional(),\n company_number: z.string().optional(), name: z.string().optional() },\n http: (a) =>\n a.number\n ? `${ORIGIN}/uk-company-lite?number=${encodeURIComponent(a.number)}`\n : `${ORIGIN}/uk-company-lite?name=${encodeURIComponent(a.name || \"\")}`,\n previewable: true,\n },\n {\n name: \"company_full\",\n description: \"Website company research + UK CH pack when detected ($0.65 vs $0.75 separate).\",\n price: \"$0.65\",\n schema: { domain: z.string() },\n http: (a) => `${ORIGIN}/company-full?domain=${encodeURIComponent(a.domain)}`,\n previewable: true,\n },\n {\n name: \"convert_document\",\n description: \"Convert public PDF/DOCX/HTML/text URL to markdown or text. $0.03 USDC.\",\n price: \"$0.03\",\n schema: { url: z.string().url(), format: z.enum([\"markdown\", \"text\"]).optional() },\n http: (a) =>\n `${ORIGIN}/convert?url=${encodeURIComponent(a.url)}&format=${encodeURIComponent(a.format || \"markdown\")}`,\n previewable: true,\n },\n {\n name: \"create_monitor\",\n description: \"30-day hourly web change monitor → webhook. $1.00 USDC. POST body.\",\n price: \"$1.00\",\n schema: {\n url: z.string().url(),\n webhook: z.string().url(),\n selector: z.string().optional(),\n keyword: z.string().optional(),\n },\n http: () => `${ORIGIN}/monitor`,\n method: \"POST\",\n body: (a) => a,\n },\n {\n name: \"pricing\",\n description: \"Free: list Axiom Works AgentReader tools, prices and payment details.\",\n price: \"free\",\n schema: {},\n http: () => `${ORIGIN}/.well-known/x402`,\n free: true,\n },\n {\n name: \"wallet_balances\",\n description: \"EVM wallet balances (native + majors), 5 chains. $0.003 USDC.\",\n price: \"$0.003\",\n schema: { address: z.string(), chain: CH, tokens: z.string().optional() },\n http: (a) => `${ORIGIN}/wallet?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"tx_status\",\n description: \"Did a tx/payment land: status, confirmations, fee, decoded ERC20 transfers. $0.003 USDC.\",\n price: \"$0.003\",\n schema: { hash: z.string(), chain: CH },\n http: (a) => `${ORIGIN}/tx?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"token_check\",\n description: \"ERC20 token risk: owner, proxy, liquidity, flags, score. $0.01 USDC.\",\n price: \"$0.01\",\n schema: { address: z.string(), chain: CH },\n http: (a) => `${ORIGIN}/token-check?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"fx_rates\",\n description: \"ECB FX rates, latest/historical, with conversion. $0.002 USDC.\",\n price: \"$0.002\",\n schema: {\n base: z.string().optional(),\n symbols: z.string().optional(),\n date: z.string().optional(),\n amount: z.string().optional(),\n },\n http: (a) => `${ORIGIN}/fx?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"ens_lookup\",\n description: \"ENS name -> address + records, or reverse. $0.002 USDC.\",\n price: \"$0.002\",\n schema: { name: z.string().optional(), address: z.string().optional() },\n http: (a) => `${ORIGIN}/ens?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"token_metadata\",\n description: \"ERC20 name/symbol/decimals/supply. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { address: z.string(), chain: CH },\n http: (a) => `${ORIGIN}/token?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"token_allowance\",\n description: \"ERC20 allowance owner->spender, unlimited flag. $0.002 USDC.\",\n price: \"$0.002\",\n schema: { token: z.string(), owner: z.string(), spender: z.string(), chain: CH },\n http: (a) => `${ORIGIN}/allowance?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"contract_info\",\n description: \"Contract/proxy/clone/7702/standards/Sourcify name. $0.003 USDC.\",\n price: \"$0.003\",\n schema: { address: z.string(), chain: CH },\n http: (a) => `${ORIGIN}/contract?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"gas_fees\",\n description: \"Current gas fees + USD cost estimates. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { chain: CH },\n http: (a) => `${ORIGIN}/gas?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"block_lookup\",\n description: \"Block by number or timestamp. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { number: z.string().optional(), timestamp: z.string().optional(), chain: CH },\n http: (a) => `${ORIGIN}/block?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"nft_lookup\",\n description: \"NFT owner + metadata. $0.002 USDC.\",\n price: \"$0.002\",\n schema: { contract: z.string(), token_id: z.string(), chain: CH },\n http: (a) => `${ORIGIN}/nft?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"web_search\",\n description:\n \"Open research search: Wikipedia + OpenAlex + arXiv + Crossref merged, deduped, ranked with snippets. $0.003 USDC.\",\n price: \"$0.003\",\n schema: { q: z.string(), sources: z.string().optional(), limit: z.string().optional() },\n http: (a) => `${ORIGIN}/search?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"uk_property_prices\",\n description: \"England & Wales Land Registry sold prices near a postcode + medians. $0.01 USDC.\",\n price: \"$0.01\",\n schema: { postcode: z.string(), radius: z.string().optional() },\n http: (a) => `${ORIGIN}/uk-property?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"uk_area_profile\",\n description: \"UK postcode profile: ONS geography, police crime, FSA hygiene. $0.005 USDC.\",\n price: \"$0.005\",\n schema: { postcode: z.string() },\n http: (a) => `${ORIGIN}/uk-area?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"uk_charity\",\n description:\n \"UK Charity Commission snapshot: status, income, trustees count, activities. $0.05 USDC.\",\n price: \"$0.05\",\n schema: {\n number: z.string().optional(),\n name: z.string().optional(),\n suffix: z.string().optional(),\n },\n http: (a) =>\n a.number\n ? `${ORIGIN}/uk-charity?number=${encodeURIComponent(a.number)}${a.suffix != null ? `&suffix=${encodeURIComponent(a.suffix)}` : \"\"}`\n : `${ORIGIN}/uk-charity?name=${encodeURIComponent(a.name || \"\")}`,\n previewable: true,\n },\n\n {\n name: \"us_sec\",\n description:\n \"US SEC EDGAR company snapshot by ticker or CIK: filings, SIC, addresses. $0.05 USDC.\",\n price: \"$0.05\",\n schema: { ticker: z.string().optional(), cik: z.string().optional() },\n http: (a) =>\n a.ticker\n ? `${ORIGIN}/us-sec?ticker=${encodeURIComponent(a.ticker)}`\n : `${ORIGIN}/us-sec?cik=${encodeURIComponent(a.cik || \"\")}`,\n previewable: true,\n },\n {\n name: \"us_sec_full\",\n description:\n \"US SEC full DD: lite + us-gaap highlights + red-flag heuristics. $0.25 USDC.\",\n price: \"$0.25\",\n schema: { ticker: z.string().optional(), cik: z.string().optional() },\n http: (a) =>\n a.ticker\n ? `${ORIGIN}/us-sec-full?ticker=${encodeURIComponent(a.ticker)}`\n : `${ORIGIN}/us-sec-full?cik=${encodeURIComponent(a.cik || \"\")}`,\n previewable: true,\n },\n {\n name: \"eu_vat\",\n description: \"EU VIES VAT validation: valid, name, address. $0.01 USDC.\",\n price: \"$0.01\",\n schema: {\n vat: z.string().optional(),\n country: z.string().optional(),\n number: z.string().optional(),\n },\n http: (a) =>\n a.vat\n ? `${ORIGIN}/eu-vat?vat=${encodeURIComponent(a.vat)}`\n : `${ORIGIN}/eu-vat?country=${encodeURIComponent(a.country || \"\")}&number=${encodeURIComponent(a.number || \"\")}`,\n previewable: true,\n },\n {\n name: \"lei_lookup\",\n description: \"GLEIF LEI lookup with parents.direct/ultimate + BIC. $0.005 USDC.\",\n price: \"$0.005\",\n schema: {\n lei: z.string().optional(),\n name: z.string().optional(),\n registered_as: z.string().optional(),\n country: z.string().optional(),\n },\n http: (a) => `${ORIGIN}/lei?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"lei_full\",\n description: \"GLEIF name/registered_as search up to 10 matches each with parents. $0.05 USDC.\",\n price: \"$0.05\",\n schema: {\n name: z.string().optional(),\n registered_as: z.string().optional(),\n country: z.string().optional(),\n lei: z.string().optional(),\n },\n http: (a) => `${ORIGIN}/lei-full?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"read_batch\",\n description: \"Batch web read up to 8 URLs as Markdown. $0.015 USDC.\",\n price: \"$0.015\",\n schema: { urls: z.any() },\n http: (a) => `${ORIGIN}/read-batch?urls=${encodeURIComponent(Array.isArray(a.urls) ? a.urls.join(\",\") : String(a.urls || \"\"))}`,\n previewable: true,\n },\n {\n name: \"uk_charity_full\",\n description:\n \"Full UK charity DD: trustees, finances, assets, governance, regulatory + red flags. $0.25 USDC.\",\n price: \"$0.25\",\n schema: {\n number: z.string().optional(),\n name: z.string().optional(),\n suffix: z.string().optional(),\n },\n http: (a) =>\n a.number\n ? `${ORIGIN}/uk-charity-full?number=${encodeURIComponent(a.number)}${a.suffix != null ? `&suffix=${encodeURIComponent(a.suffix)}` : \"\"}`\n : `${ORIGIN}/uk-charity-full?name=${encodeURIComponent(a.name || \"\")}`,\n previewable: true,\n },\n {\n name: \"uk_leads_lite\",\n description: \"UK new-incorporation leads by SIC/location/postcode_area (1-7 days), no directors. $0.25 USDC.\",\n price: \"$0.25\",\n schema: {\n sic: z.string().optional(),\n location: z.string().optional(),\n postcode_area: z.string().optional(),\n days: z.union([z.string(), z.number()]).optional(),\n limit: z.union([z.string(), z.number()]).optional(),\n },\n http: (a) => `${ORIGIN}/uk-leads-lite?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"uk_leads\",\n description: \"UK new-incorporation leads with active director names. $1.00 USDC.\",\n price: \"$1.00\",\n schema: {\n sic: z.string().optional(),\n location: z.string().optional(),\n postcode_area: z.string().optional(),\n days: z.union([z.string(), z.number()]).optional(),\n limit: z.union([z.string(), z.number()]).optional(),\n },\n http: (a) => `${ORIGIN}/uk-leads?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"uk_leads_feed\",\n description: \"30-day daily webhook of new UK incorporations matching SIC/location/postcode_area. $25.00/30d USDC.\",\n price: \"$25.00\",\n schema: {\n webhook: z.string().url(),\n sic: z.string().optional(),\n location: z.string().optional(),\n postcode_area: z.string().optional(),\n },\n http: () => `${ORIGIN}/uk-leads-feed`,\n method: \"POST\",\n body: (a) => a,\n },\n {\n name: \"uk_watch\",\n description: \"Watch one UK company 30 days: hourly CH poll → webhook on change. $5.00/30d USDC.\",\n price: \"$5.00\",\n schema: { number: z.string(),\n company_number: z.string().optional(), webhook: z.string().url() },\n http: () => `${ORIGIN}/uk-watch`,\n method: \"POST\",\n body: (a) => a,\n },\n {\n name: \"uk_dd\",\n description: \"UK-only DD job: full Companies House pack + sanctions (entity+officers) + optional domain RDAP/website skim → trust flag. Screening only. $1.00 USDC.\",\n price: \"$1.00\",\n schema: {\n number: z.string().optional(),\n company_number: z.string().optional(),\n name: z.string().optional(),\n domain: z.string().optional(),\n },\n http: (a) => `${ORIGIN}/uk-dd?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"kyb_report\",\n description: \"Agent KYB pack: UK/AU/CA/FR registry + EU VAT + optional GLEIF LEI (parents) + website + sanctions + director appointments → trust flag. Screening only. $2.50 USDC.\",\n price: \"$2.50\",\n schema: {\n domain: z.string().optional(),\n number: z.string().optional(),\n company_number: z.string().optional(),\n name: z.string().optional(),\n vat: z.string().optional(),\n country: z.string().optional(),\n vat_number: z.string().optional(),\n acn: z.string().optional(),\n ca_number: z.string().optional(),\n bn: z.string().optional(),\n lei: z.string().optional(),\n siren: z.string().optional(),\n siret: z.string().optional(),\n },\n http: (a) => `${ORIGIN}/kyb?${qs(a)}`,\n previewable: true,\n },\n];\n\n// Single-fact EVM tools (/chain/*), generated from the server's route table.\nfor (const r of CHAIN as any[]) {\n ALL_TOOLS.push({\n name: r.tool,\n description: r.description.replace(/\\$0\\.00\\d\\.$/, `${r.price} USDC.`),\n price: r.price,\n schema: Object.fromEntries(Object.keys(r.params).map((k) => [k, r.required.includes(k) ? z.string().describe(r.params[k]) : z.string().optional().describe(r.params[k])])),\n http: (a) => `${ORIGIN}${r.path}?${qs(a)}`,\n previewable: true,\n } as ToolDef);\n}\n\n// 2026-11-06: $0.001 format validators unlisted; HTTP routes still work.\nexport const TOOLS: ToolDef[] = ALL_TOOLS.filter((t) => !HIDDEN_TOOLS.has(t.name));\n","[\n {\n \"path\": \"/chain/erc20-balance\",\n \"tool\": \"chain_erc20_balance\",\n \"price\": \"$0.001\",\n \"description\": \"ERC20 token balance for any wallet on Base/Ethereum/Arbitrum/Optimism/Polygon via balanceOf (eth_call). Returns raw + decimal-formatted balance, symbol, decimals, block. Example: {address:\\\"0xd8dA…6045\\\", token:\\\"0x8335…2913\\\", chain:\\\"base\\\"}. $0.001.\",\n \"params\": {\n \"address\": \"Wallet address\",\n \"token\": \"ERC20 contract\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\",\n \"token\"\n ],\n \"example\": {\n \"address\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\n \"token\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/balance\",\n \"tool\": \"chain_balance\",\n \"price\": \"$0.001\",\n \"description\": \"Native coin balance (ETH/POL) of any address via eth_getBalance, optionally at a historical block. Example: {address:\\\"0xd8dA…6045\\\", chain:\\\"ethereum\\\"} → {balance:\\\"…\\\", balance_wei, block}. Use /wallet ($0.003) for native + major tokens in one call. $0.001.\",\n \"params\": {\n \"address\": \"Address\",\n \"chain\": \"EVM chain (default base)\",\n \"block\": \"Block number or tag (default latest)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\"\n ],\n \"example\": {\n \"address\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\n \"chain\": \"ethereum\"\n }\n },\n {\n \"path\": \"/chain/live-balance\",\n \"tool\": \"chain_live_balance\",\n \"price\": \"$0.002\",\n \"description\": \"Live wallet balance — native ETH/POL plus up to 20 caller-supplied ERC20 tokens in one RPC batch (balanceOf + decimals + symbol). No hardcoded majors (use /wallet $0.003 for USDC/USDT/DAI/WETH pack). Example: {address:\\\"0xd8dA…6045\\\", tokens:\\\"0xdAC1…1ec7,0xA0b8…eB48\\\", chain:\\\"ethereum\\\"}. $0.002.\",\n \"params\": {\n \"address\": \"Wallet address\",\n \"tokens\": \"Comma-separated ERC20 contracts (max 20)\",\n \"chain\": \"EVM chain (default base)\",\n \"network\": \"Alias for chain (onesource-compatible)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\"\n ],\n \"example\": {\n \"address\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\n \"tokens\": \"0xdAC17F958D2ee523a2206206994597C13D831ec7,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n \"chain\": \"ethereum\"\n }\n },\n {\n \"path\": \"/chain/block-number\",\n \"tool\": \"chain_block_number\",\n \"price\": \"$0.001\",\n \"description\": \"Latest block height (chain tip) plus safe/finalized heights and head age in seconds, via eth_blockNumber/eth_getBlockByNumber. Base/Ethereum/Arbitrum/Optimism/Polygon. Example: {chain:\\\"base\\\"}. $0.001.\",\n \"params\": {\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [],\n \"example\": {\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/nonce\",\n \"tool\": \"chain_nonce\",\n \"price\": \"$0.001\",\n \"description\": \"Next transaction nonce for any address (latest and pending) via eth_getTransactionCount — how many txs it has sent, and whether one is stuck in the mempool. Example: {address:\\\"0xd8dA…6045\\\", chain:\\\"base\\\"}. $0.001.\",\n \"params\": {\n \"address\": \"Address\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\"\n ],\n \"example\": {\n \"address\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/total-supply\",\n \"tool\": \"chain_total_supply\",\n \"price\": \"$0.001\",\n \"description\": \"Total supply of an ERC20 or ERC721 token via totalSupply (eth_call), formatted with decimals and symbol. Example: {token:\\\"0x8335…2913\\\", chain:\\\"base\\\"} → {total_supply, symbol, decimals}. $0.001.\",\n \"params\": {\n \"token\": \"Token contract\",\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [\n \"token\"\n ],\n \"example\": {\n \"token\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/erc20-transfers\",\n \"tool\": \"chain_erc20_transfers\",\n \"price\": \"$0.003\",\n \"description\": \"ERC20 Transfer events for a token and/or wallet via eth_getLogs, decoded (from, to, amount with decimals, tx hash, block). Default last 100 blocks, max 5000. Public RPCs need a contract filter: pass token=; if only wallet address is given, known chain tokens (USDC/WETH/…) are scanned. Example: {token:\\\"0x8335…2913\\\", address:\\\"0x88b1…3ff6\\\", chain:\\\"base\\\"}. $0.003.\",\n \"params\": {\n \"token\": \"ERC20 contract (recommended; required unless scanning known tokens for a wallet)\",\n \"address\": \"Wallet to filter (optional if token given)\",\n \"direction\": \"one of in|out|any\",\n \"blocks\": \"Lookback blocks (default 100, max 5000)\",\n \"from_block\": \"from_block\",\n \"to_block\": \"to_block\",\n \"limit\": \"Max items (default 50, max 200)\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [],\n \"example\": {\n \"token\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"address\": \"0x88b1c747c33A5868A34057D8C57318E5602b3ff6\",\n \"chain\": \"base\",\n \"blocks\": \"100\"\n }\n },\n {\n \"path\": \"/chain/events\",\n \"tool\": \"chain_events\",\n \"price\": \"$0.003\",\n \"description\": \"Contract event logs via eth_getLogs filtered by contract and topics (topic0 = event signature hash). Raw logs, newest first; default last 100 blocks, max 5000 (auto-chunked for public RPC limits). Example: {address:\\\"0x8335…2913\\\", topic0:\\\"0xddf2…b3ef\\\", chain:\\\"base\\\", blocks:\\\"50\\\"}. $0.003.\",\n \"params\": {\n \"address\": \"Contract emitting the logs\",\n \"topic0\": \"Event signature hash (0x + 64 hex)\",\n \"topic1\": \"topic1\",\n \"topic2\": \"topic2\",\n \"topic3\": \"topic3\",\n \"blocks\": \"blocks\",\n \"from_block\": \"from_block\",\n \"to_block\": \"to_block\",\n \"limit\": \"limit\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\"\n ],\n \"example\": {\n \"address\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"topic0\": \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\n \"blocks\": \"20\",\n \"limit\": \"5\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/network-info\",\n \"tool\": \"chain_network_info\",\n \"price\": \"$0.001\",\n \"description\": \"EVM network info in one call: chain ID, client version, block height, head age, gas price, base fee, native symbol. Confirms which chain an RPC is on before signing. Example: {chain:\\\"base\\\"}. $0.001.\",\n \"params\": {\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [],\n \"example\": {\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/receipt\",\n \"tool\": \"chain_receipt\",\n \"price\": \"$0.002\",\n \"description\": \"Transaction receipt via eth_getTransactionReceipt: success/revert status, gas used, effective gas price, fee in native coin, contract created, log count + raw logs. Example: {hash:\\\"0x…\\\", chain:\\\"base\\\"}. Use /tx ($0.003) for decoded transfers + confirmations. $0.002.\",\n \"params\": {\n \"hash\": \"hash\",\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [\n \"hash\"\n ],\n \"example\": {\n \"hash\": \"0x6f0d9bbb400eef11b67d1b9b41a5b9053b6790f254a3e9dea264dd1a8ded6a73\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/code\",\n \"tool\": \"chain_code\",\n \"price\": \"$0.001\",\n \"description\": \"Is this address a contract or a wallet (EOA)? eth_getCode → is_contract, bytecode size and prefix, EIP-7702 delegation detection. Example: {address:\\\"0x8335…2913\\\", chain:\\\"base\\\"}. Use /contract ($0.003) for proxy/owner/token detail. $0.001.\",\n \"params\": {\n \"address\": \"Address\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\"\n ],\n \"example\": {\n \"address\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/call\",\n \"tool\": \"chain_call\",\n \"price\": \"$0.002\",\n \"description\": \"Read-only contract call via eth_call (no transaction sent): pass to + ABI-encoded data, get the raw return hex plus best-effort uint/address/string decodes and revert reason. Example: {to:\\\"0x8335…2913\\\", data:\\\"0x18160ddd\\\", chain:\\\"base\\\"}. $0.002.\",\n \"params\": {\n \"to\": \"Contract\",\n \"data\": \"0x calldata\",\n \"from\": \"Optional caller\",\n \"block\": \"block\",\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [\n \"to\",\n \"data\"\n ],\n \"example\": {\n \"to\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"data\": \"0x18160ddd\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/estimate-gas\",\n \"tool\": \"chain_estimate_gas\",\n \"price\": \"$0.002\",\n \"description\": \"Estimate gas for a transaction before signing (eth_estimateGas) plus current fee → cost in native coin; returns the revert reason if it would fail. Example: {from:\\\"0xd8dA…6045\\\", to:\\\"0x8335…2913\\\", data:\\\"0xa9059cbb…\\\", chain:\\\"base\\\"}. $0.002.\",\n \"params\": {\n \"to\": \"Recipient/contract\",\n \"from\": \"Sender\",\n \"data\": \"data\",\n \"value\": \"Wei (decimal)\",\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [\n \"to\"\n ],\n \"example\": {\n \"from\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\n \"to\": \"0x88b1c747c33A5868A34057D8C57318E5602b3ff6\",\n \"value\": \"1000000000000\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/nft-owner\",\n \"tool\": \"chain_nft_owner\",\n \"price\": \"$0.001\",\n \"description\": \"Current owner of an ERC721 token_id via ownerOf (eth_call), plus collection name/symbol. Example: {contract:\\\"0xBC4C…f13D\\\", token_id:\\\"1\\\", chain:\\\"ethereum\\\"} → {owner}. Use /nft ($0.002) for metadata. $0.001.\",\n \"params\": {\n \"contract\": \"ERC721 contract\",\n \"token_id\": \"token_id\",\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [\n \"contract\",\n \"token_id\"\n ],\n \"example\": {\n \"contract\": \"0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D\",\n \"token_id\": \"1\",\n \"chain\": \"ethereum\"\n }\n },\n {\n \"path\": \"/chain/nft-metadata\",\n \"tool\": \"chain_nft_metadata\",\n \"price\": \"$0.002\",\n \"description\": \"ERC721/1155 tokenURI/uri + resolved JSON metadata (IPFS/Arweave/data URI) plus collection name/symbol. Does not require ownerOf — use when explorers ask for /chain/nft-metadata. Prefer /nft ($0.002) when you also need current owner; /chain/nft-owner ($0.001) for owner only. Example: {contract:\\\"0xBC4C…f13D\\\", token_id:\\\"1\\\", chain:\\\"ethereum\\\"}. $0.002.\",\n \"params\": {\n \"contract\": \"ERC721/1155 contract\",\n \"token_id\": \"token_id\",\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [\n \"contract\",\n \"token_id\"\n ],\n \"example\": {\n \"contract\": \"0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D\",\n \"token_id\": \"1\",\n \"chain\": \"ethereum\"\n }\n },\n {\n \"path\": \"/chain/erc721-tokens\",\n \"tool\": \"chain_erc721_tokens\",\n \"price\": \"$0.002\",\n \"description\": \"List every ERC721 token_id a wallet owns in a collection via balanceOf + tokenOfOwnerByIndex (ERC721Enumerable). Caps at limit (default 50, max 100). If the collection is not enumerable, returns is_enumerable:false with balance. Example: {contract:\\\"0xBC4C…f13D\\\", address:\\\"0x46ef…2496\\\", chain:\\\"ethereum\\\"}. $0.002.\",\n \"params\": {\n \"contract\": \"ERC721 collection\",\n \"address\": \"Owner wallet\",\n \"chain\": \"EVM chain (default base)\",\n \"network\": \"Alias for chain (onesource-compatible)\",\n \"limit\": \"Max token_ids (default 50, max 100)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"contract\",\n \"address\"\n ],\n \"example\": {\n \"contract\": \"0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D\",\n \"address\": \"0x46efbaedc92067e6d60e84ed6395099723252496\",\n \"chain\": \"ethereum\"\n }\n },\n {\n \"path\": \"/chain/erc1155-balance\",\n \"tool\": \"chain_erc1155_balance\",\n \"price\": \"$0.001\",\n \"description\": \"ERC1155 balance: how many copies of token_id a wallet holds, via balanceOf(address,uint256) (eth_call). Example: {contract:\\\"0x…\\\", address:\\\"0x…\\\", token_id:\\\"1\\\", chain:\\\"base\\\"}. $0.001.\",\n \"params\": {\n \"contract\": \"ERC1155 contract\",\n \"address\": \"Holder\",\n \"token_id\": \"token_id\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"contract\",\n \"address\",\n \"token_id\"\n ],\n \"example\": {\n \"contract\": \"0x76be3b62873462d2142405439777e971754e8e77\",\n \"address\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\n \"token_id\": \"10229\",\n \"chain\": \"ethereum\"\n }\n },\n {\n \"path\": \"/chain/storage\",\n \"tool\": \"chain_storage\",\n \"price\": \"$0.001\",\n \"description\": \"Read a raw storage slot of any contract via eth_getStorageAt, with uint and address decodes. Example: {address:\\\"0x8335…2913\\\", slot:\\\"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\\\", chain:\\\"base\\\"} (EIP-1967 implementation slot). $0.001.\",\n \"params\": {\n \"address\": \"Contract\",\n \"slot\": \"Slot (decimal or 0x hex)\",\n \"block\": \"block\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\",\n \"slot\"\n ],\n \"example\": {\n \"address\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"slot\": \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/proxy\",\n \"tool\": \"chain_proxy\",\n \"price\": \"$0.002\",\n \"description\": \"Detect upgradeable proxies (EIP-1967 transparent/UUPS, beacon, legacy OZ, EIP-1167 minimal clones, EIP-7702) via eth_getStorageAt/eth_getCode: implementation, admin, beacon, and whether the implementation is a live contract. Example: {address:\\\"0x8335…2913\\\", chain:\\\"base\\\"}. $0.002.\",\n \"params\": {\n \"address\": \"Contract\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\"\n ],\n \"example\": {\n \"address\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/chain-id\",\n \"tool\": \"chain_chain_id\",\n \"price\": \"$0.001\",\n \"description\": \"EIP-155 chain ID straight from the RPC (eth_chainId + net_version) — confirm which network you are about to sign on. Example: {chain:\\\"base\\\"} → {chain_id:8453}. $0.001.\",\n \"params\": {\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [],\n \"example\": {\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/pending\",\n \"tool\": \"chain_pending\",\n \"price\": \"$0.001\",\n \"description\": \"Pending + latest block snapshot via eth_getBlockByNumber: pending number/hash/parentHash/timestamp/gas/baseFee/tx count/miner vs latest head age. Public RPCs may omit pending — then 502. Example: {chain:\\\"base\\\"}. $0.001.\",\n \"params\": {\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [],\n \"example\": {\n \"chain\": \"base\"\n }\n }\n]","import { wrapFetchWithPayment, x402Client } from \"@x402/fetch\";\nimport { ExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\nexport type PaidFetch = typeof fetch;\n\n/** Resolve an EVM private key from common env names. */\nexport function resolvePrivateKey(): `0x${string}` | undefined {\n const raw =\n process.env.AGENTREADER_PRIVATE_KEY ||\n process.env.EVM_PRIVATE_KEY ||\n process.env.PRIVATE_KEY ||\n process.env.X402_PRIVATE_KEY;\n if (!raw) return undefined;\n const key = raw.startsWith(\"0x\") ? raw : `0x${raw}`;\n if (!/^0x[0-9a-fA-F]{64}$/.test(key)) {\n throw new Error(\n \"Invalid AGENTREADER_PRIVATE_KEY / EVM_PRIVATE_KEY (expected 32-byte hex with optional 0x)\",\n );\n }\n return key as `0x${string}`;\n}\n\n/** Build a fetch that auto-settles x402 exact USDC on Base when a key is present. */\nexport function createFetch(): { fetch: PaidFetch; paying: boolean } {\n const key = resolvePrivateKey();\n if (!key) return { fetch: globalThis.fetch.bind(globalThis), paying: false };\n const account = privateKeyToAccount(key);\n const client = new x402Client().register(\"eip155:8453\", new ExactEvmScheme(account));\n return { fetch: wrapFetchWithPayment(globalThis.fetch.bind(globalThis), client), paying: true };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/tools.ts","../src/chain-routes.json","../src/payment.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * @axiomworks/agentreader-mcp\n * Stdio MCP server for Axiom Works AgentReader.\n * Proxies tool calls to https://api.axiomworks.co.uk (same surface as /mcp).\n * Optional AGENTREADER_PRIVATE_KEY / EVM_PRIVATE_KEY enables auto x402 payment (USDC on Base).\n * Without a key, free previews (&preview=1) still work; paid calls return payment requirements.\n */\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { TOOLS, VERSION, ORIGIN, type ToolDef } from \"./tools.js\";\nimport { createFetch } from \"./payment.js\";\n\nfunction b64json(header: string | null) {\n if (!header) return null;\n try {\n return JSON.parse(Buffer.from(header, \"base64\").toString(\"utf8\"));\n } catch {\n return { raw: header.slice(0, 200) };\n }\n}\n\nfunction withPreview(url: string, tool: ToolDef, paying: boolean, args: Record<string, any>): string {\n if (paying || tool.free || tool.method === \"POST\" || !tool.previewable) return url;\n // Explicit preview:false disables free truncated mode\n if (args?.preview === false || args?.preview === \"0\") return url;\n const u = new URL(url);\n if (!u.searchParams.has(\"preview\")) u.searchParams.set(\"preview\", \"1\");\n return u.toString();\n}\n\nasync function callHttp(\n tool: ToolDef,\n args: Record<string, any>,\n fetchFn: typeof fetch,\n paying: boolean,\n) {\n let url = tool.http(args || {});\n url = withPreview(url, tool, paying, args || {});\n const init: RequestInit = {\n method: tool.method || \"GET\",\n headers: {\n accept: \"application/json\",\n \"user-agent\": `axiomworks-agentreader-mcp/${VERSION}`,\n },\n };\n if (tool.method === \"POST\") {\n (init.headers as Record<string, string>)[\"content-type\"] = \"application/json\";\n init.body = JSON.stringify(tool.body ? tool.body(args) : args);\n }\n const res = await fetchFn(url, init);\n const pr = res.headers.get(\"payment-required\") || res.headers.get(\"PAYMENT-REQUIRED\");\n const text = await res.text();\n let body: any;\n try {\n body = JSON.parse(text);\n } catch {\n body = { raw: text.slice(0, 2000) };\n }\n\n if (res.status === 402 || pr) {\n const payment = b64json(pr);\n return {\n content: [\n {\n type: \"text\" as const,\n text: JSON.stringify(\n {\n error: \"payment_required\",\n status: 402,\n message:\n \"This tool is paid via x402 (USDC on Base). Set AGENTREADER_PRIVATE_KEY (or EVM_PRIVATE_KEY) so this MCP server can auto-pay, or retry the HTTP URL with @x402/fetch / @axiomworks/agentreader.\",\n paid_http: url.replace(/([?&])preview=1(&|$)/, \"$1\").replace(/\\?$/, \"\"),\n mcp: `${ORIGIN}/mcp`,\n preview_hint:\n \"Without a key, GET tools are called with preview=1 (free truncated sample, 8/IP/day).\",\n payment_required: payment,\n body,\n },\n null,\n 2,\n ),\n },\n ],\n };\n }\n if (!res.ok) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: JSON.stringify(\n { error: body?.error || `HTTP ${res.status}`, status: res.status, body },\n null,\n 2,\n ),\n },\n ],\n };\n }\n return {\n content: [{ type: \"text\" as const, text: typeof body === \"string\" ? body : JSON.stringify(body) }],\n };\n}\n\nasync function main() {\n const { fetch: fetchFn, paying } = createFetch();\n const server = new McpServer({\n name: \"agentreader\",\n title: \"Axiom Works AgentReader\",\n version: VERSION,\n });\n\n for (const t of TOOLS) {\n server.tool(t.name, t.description, t.schema, async (args) => {\n try {\n return await callHttp(t, (args as Record<string, any>) || {}, fetchFn, paying);\n } catch (e: any) {\n return {\n isError: true,\n content: [{ type: \"text\" as const, text: String(e?.message || e) }],\n };\n }\n });\n }\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nmain().catch((e) => {\n console.error(e);\n process.exit(1);\n});\n","import { z } from \"zod\";\n\nexport const ORIGIN = process.env.AGENTREADER_ORIGIN || \"https://api.axiomworks.co.uk\";\nexport const VERSION = \"1.31.0\";\nimport CHAIN from \"./chain-routes.json\";\n\nconst CH = z.enum([\"base\", \"ethereum\", \"arbitrum\", \"optimism\", \"polygon\"]).optional();\nconst qs = (a: Record<string, unknown>) =>\n new URLSearchParams(\n Object.entries(a)\n .filter(([, v]) => v != null && v !== \"\")\n .map(([k, v]) => [k, String(v)]),\n ).toString();\n\nexport type ToolDef = {\n name: string;\n description: string;\n price: string;\n schema: Record<string, z.ZodTypeAny>;\n http: (a: Record<string, any>) => string;\n method?: \"GET\" | \"POST\";\n body?: (a: Record<string, any>) => unknown;\n free?: boolean;\n /** When true, unpaid preview mode appends preview=1 */\n previewable?: boolean;\n};\n\nexport const HIDDEN_TOOLS = new Set([\"iban_validate\",\"phone_check\",\"uk_postcode_validate\",\"siren_validate\",\"siret_validate\",\"partita_iva_validate\",\"orgnr_se_validate\",\"bn_ca_validate\",\"cvr_dk_validate\",\"fn_at_validate\",\"cin_in_validate\",\"kvk_nl_validate\",\"hr_de_validate\",\"nif_es_validate\",\"cnpj_validate\",\"nip_pl_validate\",\"uid_ch_validate\"]);\nconst ALL_TOOLS: ToolDef[] = [\n {\n name: \"read_url\",\n description:\n \"Use this when you need clean Markdown + metadata from a public URL (not raw HTML). $0.002 USDC on Base via x402.\",\n price: \"$0.002\",\n schema: { url: z.string().url() },\n http: (a) => `${ORIGIN}/read?url=${encodeURIComponent(a.url)}`,\n previewable: true,\n },\n {\n name: \"extract_links\",\n description: \"Use this when you only need de-duplicated absolute links. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { url: z.string().url() },\n http: (a) => `${ORIGIN}/links?url=${encodeURIComponent(a.url)}`,\n previewable: true,\n },\n {\n name: \"check_domain\",\n description: \"Use this when vetting domain health: DNS/TLS/MX/SPF/DMARC + score. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { domain: z.string() },\n http: (a) => `${ORIGIN}/check?domain=${encodeURIComponent(a.domain)}`,\n previewable: true,\n },\n {\n name: \"email_check\",\n description: \"Validate an email address: syntax, MX/A DNS, disposable/free/role flags, provider guess, score+verdict. No SMTP probe. $0.002 USDC.\",\n price: \"$0.002\",\n schema: { email: z.string() },\n http: (a) => `${ORIGIN}/email-check?email=${encodeURIComponent(a.email)}`,\n previewable: true,\n },\n {\n name: \"domain_lookup\",\n description: \"RDAP domain registration lookup: registrar, registered, expires, age_days, status. $0.002 USDC.\",\n price: \"$0.002\",\n schema: { domain: z.string() },\n http: (a) => `${ORIGIN}/domain?domain=${encodeURIComponent(a.domain)}`,\n previewable: true,\n },\n {\n name: \"dns_lookup\",\n description: \"DNS resolve via Cloudflare DoH: A/AAAA/MX/TXT/NS/CNAME (optional type=). $0.001 USDC.\",\n price: \"$0.001\",\n schema: { name: z.string(), type: z.string().optional() },\n http: (a) => {\n const q = new URLSearchParams({ name: a.name });\n if (a.type) q.set(\"type\", a.type);\n return `${ORIGIN}/dns?${q}`;\n },\n previewable: true,\n },\n {\n name: \"url_redirects\",\n description: \"Unwrap URL redirects / short links: final_url + hop chain (SSRF-safe). $0.001 USDC.\",\n price: \"$0.001\",\n schema: { url: z.string() },\n http: (a) => `${ORIGIN}/redirects?url=${encodeURIComponent(a.url)}`,\n previewable: true,\n },\n {\n name: \"page_meta\",\n description: \"Lightweight page metadata: title, description, canonical, Open Graph + Twitter, favicons, JSON-LD types, h1/h2. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { url: z.string() },\n http: (a) => `${ORIGIN}/meta?url=${encodeURIComponent(a.url)}`,\n previewable: true,\n },\n {\n name: \"http_headers\",\n description: \"HTTP security headers audit: HSTS/CSP/XFO/XCTO + score (SSRF-safe). Not a pen-test. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { url: z.string().optional(), domain: z.string().optional() },\n http: (a) => {\n const q = new URLSearchParams();\n if (a.url) q.set(\"url\", a.url);\n if (a.domain) q.set(\"domain\", a.domain);\n return `${ORIGIN}/headers?${q}`;\n },\n previewable: true,\n },\n {\n name: \"iban_validate\",\n description: \"Offline IBAN validation (ISO 13616 mod-97 + country length). Checksum only. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { iban: z.string() },\n http: (a) => `${ORIGIN}/iban?iban=${encodeURIComponent(a.iban)}`,\n previewable: true,\n },\n {\n name: \"phone_check\",\n description: \"Offline phone validate (E.164 + country length). Structure only — not HLR/carrier. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { phone: z.string(), country: z.string().optional() },\n http: (a) => {\n const q = new URLSearchParams({ phone: a.phone });\n if (a.country) q.set(\"country\", a.country);\n return `${ORIGIN}/phone?${q}`;\n },\n previewable: true,\n },\n {\n name: \"uk_postcode_validate\",\n description: \"Offline UK postcode structural validate (Royal Mail format only — not assigned/deliverable). $0.001 USDC.\",\n price: \"$0.001\",\n schema: { postcode: z.string() },\n http: (a) => `${ORIGIN}/uk-postcode?postcode=${encodeURIComponent(a.postcode)}`,\n previewable: true,\n },\n {\n name: \"siren_validate\",\n description: \"Offline French SIREN (9-digit Luhn) validate. Structure only. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { siren: z.string() },\n http: (a) => `${ORIGIN}/siren?siren=${encodeURIComponent(a.siren)}`,\n previewable: true,\n },\n {\n name: \"siret_validate\",\n description: \"Offline French SIRET (14-digit Luhn = SIREN+NIC) validate. Structure only. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { siret: z.string() },\n http: (a) => `${ORIGIN}/siret?siret=${encodeURIComponent(a.siret)}`,\n previewable: true,\n },\n {\n name: \"partita_iva_validate\",\n description: \"Offline Italian Partita IVA (11-digit checksum; optional IT prefix) validate. Structure only. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { vat: z.string() },\n http: (a) => `${ORIGIN}/partita-iva?vat=${encodeURIComponent(a.vat)}`,\n previewable: true,\n },\n {\n name: \"orgnr_se_validate\",\n description: \"Offline Swedish organisationsnummer (10-digit Luhn from left) validate. Structure only. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { orgnr: z.string() },\n http: (a) => `${ORIGIN}/orgnr?orgnr=${encodeURIComponent(a.orgnr)}`,\n previewable: true,\n },\n {\n name: \"bn_ca_validate\",\n description: \"Offline Canadian CRA Business Number shape check (9-digit or program account). No check digit. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { bn: z.string() },\n http: (a) => `${ORIGIN}/bn-ca?bn=${encodeURIComponent(a.bn)}`,\n previewable: true,\n },\n {\n name: \"cvr_dk_validate\",\n description: \"Offline Danish CVR validate (8-digit modulus-11). $0.001\",\n schema: { cvr: z.string() },\n http: (a) => `${ORIGIN}/cvr?cvr=${encodeURIComponent(a.cvr)}`,\n },\n {\n name: \"fn_at_validate\",\n description: \"Offline Austrian Firmenbuchnummer (FN) validate. $0.001\",\n schema: { fn: z.string() },\n http: (a) => `${ORIGIN}/fn-at?fn=${encodeURIComponent(a.fn)}`,\n },\n {\n name: \"kvk_nl_validate\",\n description: \"Offline Dutch KvK (Chamber of Commerce) number validate (8 digits; elfproef informational). Accepts number= as alias of kvk=. $0.001\",\n schema: { kvk: z.string() },\n http: (a) => `${ORIGIN}/kvk-nl?kvk=${encodeURIComponent(a.kvk)}`,\n },\n {\n name: \"hr_de_validate\",\n description: \"Offline German Handelsregister number validate (HRA/HRB/GnR/PR/VR/GsR + number; optional court prefix e.g. 'Amtsgericht München HRB 6684'). Accepts number= as alias of hr=. $0.001\",\n schema: { hr: z.string() },\n http: (a) => `${ORIGIN}/hr-de?hr=${encodeURIComponent(a.hr)}`,\n },\n {\n name: \"nif_es_validate\",\n description: \"Offline Spanish NIF/NIE/CIF validate (control letter/digit; optional ES prefix). Accepts number=/vat= as aliases of nif=. $0.001\",\n schema: { nif: z.string() },\n http: (a) => `${ORIGIN}/nif-es?nif=${encodeURIComponent(a.nif)}`,\n },\n {\n name: \"cnpj_validate\",\n description: \"Offline Brazilian CNPJ validate (14 digits + check digits; punctuation ok). Accepts number= as alias of cnpj=. $0.001\",\n schema: { cnpj: z.string() },\n http: (a) => `${ORIGIN}/cnpj?cnpj=${encodeURIComponent(a.cnpj)}`,\n },\n {\n name: \"nip_pl_validate\",\n description: \"Offline Polish NIP validate (10-digit modulus-11; optional PL prefix). Accepts number=/vat= as aliases of nip=. $0.001\",\n schema: { nip: z.string() },\n http: (a) => `${ORIGIN}/nip-pl?nip=${encodeURIComponent(a.nip)}`,\n },\n {\n name: \"uid_ch_validate\",\n description: \"Offline Swiss UID (CHE-xxx.xxx.xxx) validate (9 digits + check digit; optional MWST/TVA/IVA suffix). Accepts number=/che= as aliases of uid=. $0.001\",\n schema: { uid: z.string() },\n http: (a) => `${ORIGIN}/uid-ch?uid=${encodeURIComponent(a.uid)}`,\n },\n {\n name: \"cin_in_validate\",\n description: \"Offline Indian CIN structural validate (21 chars). $0.001\",\n schema: { cin: z.string() },\n http: (a) => `${ORIGIN}/cin-in?cin=${encodeURIComponent(a.cin)}`,\n },\n\n {\n name: \"company_research\",\n description:\n \"Website company research (tech, contacts, DNS, RDAP, news) with sources — not UK Companies House. $0.25 USDC.\",\n price: \"$0.25\",\n schema: { domain: z.string() },\n http: (a) => `${ORIGIN}/company?domain=${encodeURIComponent(a.domain)}`,\n previewable: true,\n },\n {\n name: \"uk_company\",\n description:\n \"Full UK Companies House due diligence (number or name) + red flags. $0.50 USDC. Prefer uk_company_lite for a cheap snapshot.\",\n price: \"$0.50\",\n schema: { number: z.string().optional(),\n company_number: z.string().optional(), name: z.string().optional() },\n http: (a) =>\n a.number\n ? `${ORIGIN}/uk-company?number=${encodeURIComponent(a.number)}`\n : `${ORIGIN}/uk-company?name=${encodeURIComponent(a.name || \"\")}`,\n previewable: true,\n },\n {\n name: \"uk_officer\",\n description: \"Reverse-search a UK Companies House officer/director name -> their appointments. $0.15 USDC.\",\n price: \"$0.15\",\n schema: { name: z.string(), limit: z.string().optional() },\n http: (a) => `${ORIGIN}/uk-officer?name=${encodeURIComponent(a.name)}${a.limit ? `&limit=${encodeURIComponent(a.limit)}` : \"\"}`,\n },\n {\n name: \"fr_company\",\n description: \"French company lookup (Recherche d'entreprises): SIREN/SIRET/name → status, NAF, siège, dirigeants, finances. $0.25 USDC.\",\n price: \"$0.25\",\n schema: { siren: z.string().optional(), siret: z.string().optional(), name: z.string().optional(), q: z.string().optional(), limit: z.string().optional() },\n http: (a) => `${ORIGIN}/fr-company?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"no_company\",\n description: \"Norwegian company lookup via Brønnøysundregistrene Enhetsregisteret by orgnr (9 digits) or name. $0.25 USDC.\",\n price: \"$0.25\",\n schema: { orgnr: z.string().optional(), name: z.string().optional(), q: z.string().optional(), limit: z.string().optional() },\n http: (a) => `${ORIGIN}/no-company?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"registry_batch\",\n description: \"Batch verify up to 25 UK (Companies House, max 10), Australian (ACN/ABN), Canadian (number/BN), French (SIREN) and Norwegian (orgnr) companies in one call; comma-separated ids. $0.30 USDC.\",\n price: \"$0.30\",\n schema: { uk: z.string().optional(), au: z.string().optional(), ca: z.string().optional(), fr: z.string().optional(), no: z.string().optional() },\n http: (a) => `${ORIGIN}/registry-batch?${new URLSearchParams(Object.entries(a).filter(([, v]) => v) as any)}`,\n },\n {\n name: \"ca_company\",\n description: \"Canadian federal corporation lookup (Corporations Canada, ~697k active) by corporation number or 9-digit Business Number: legal name, governing act, status, filings, registered office, directors. $0.02 USDC.\",\n price: \"$0.02\",\n schema: { number: z.string().optional(), bn: z.string().optional() },\n http: (a) => a.number ? `${ORIGIN}/ca-company?number=${encodeURIComponent(a.number)}` : `${ORIGIN}/ca-company?bn=${encodeURIComponent(a.bn || \"\")}`,\n },\n {\n name: \"au_company\",\n description: \"Australian company lookup (ASIC register, ~4M companies) by ACN or ABN: name, type, status, registration date. $0.02 USDC.\",\n price: \"$0.02\",\n schema: { acn: z.string().optional(), abn: z.string().optional() },\n http: (a) => a.acn ? `${ORIGIN}/au-company?acn=${encodeURIComponent(a.acn)}` : `${ORIGIN}/au-company?abn=${encodeURIComponent(a.abn || \"\")}`,\n },\n {\n name: \"uk_company_lite\",\n description: \"Cheap UK company snapshot: status, compliance, red flags. $0.05 USDC.\",\n price: \"$0.05\",\n schema: { number: z.string().optional(),\n company_number: z.string().optional(), name: z.string().optional() },\n http: (a) =>\n a.number\n ? `${ORIGIN}/uk-company-lite?number=${encodeURIComponent(a.number)}`\n : `${ORIGIN}/uk-company-lite?name=${encodeURIComponent(a.name || \"\")}`,\n previewable: true,\n },\n {\n name: \"company_full\",\n description: \"Website company research + UK CH pack when detected ($0.65 vs $0.75 separate).\",\n price: \"$0.65\",\n schema: { domain: z.string() },\n http: (a) => `${ORIGIN}/company-full?domain=${encodeURIComponent(a.domain)}`,\n previewable: true,\n },\n {\n name: \"convert_document\",\n description: \"Convert public PDF/DOCX/HTML/text URL to markdown or text. $0.03 USDC.\",\n price: \"$0.03\",\n schema: { url: z.string().url(), format: z.enum([\"markdown\", \"text\"]).optional() },\n http: (a) =>\n `${ORIGIN}/convert?url=${encodeURIComponent(a.url)}&format=${encodeURIComponent(a.format || \"markdown\")}`,\n previewable: true,\n },\n {\n name: \"create_monitor\",\n description: \"30-day hourly web change monitor → webhook. $1.00 USDC. POST body.\",\n price: \"$1.00\",\n schema: {\n url: z.string().url(),\n webhook: z.string().url(),\n selector: z.string().optional(),\n keyword: z.string().optional(),\n },\n http: () => `${ORIGIN}/monitor`,\n method: \"POST\",\n body: (a) => a,\n },\n {\n name: \"pricing\",\n description: \"Free: list Axiom Works AgentReader tools, prices and payment details.\",\n price: \"free\",\n schema: {},\n http: () => `${ORIGIN}/.well-known/x402`,\n free: true,\n },\n {\n name: \"wallet_balances\",\n description: \"EVM wallet balances (native + majors), 5 chains. $0.003 USDC.\",\n price: \"$0.003\",\n schema: { address: z.string(), chain: CH, tokens: z.string().optional() },\n http: (a) => `${ORIGIN}/wallet?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"tx_status\",\n description: \"Did a tx/payment land: status, confirmations, fee, decoded ERC20 transfers. $0.003 USDC.\",\n price: \"$0.003\",\n schema: { hash: z.string(), chain: CH },\n http: (a) => `${ORIGIN}/tx?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"token_check\",\n description: \"ERC20 token risk: owner, proxy, liquidity, flags, score. $0.01 USDC.\",\n price: \"$0.01\",\n schema: { address: z.string(), chain: CH },\n http: (a) => `${ORIGIN}/token-check?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"fx_rates\",\n description: \"ECB FX rates, latest/historical, with conversion. $0.002 USDC.\",\n price: \"$0.002\",\n schema: {\n base: z.string().optional(),\n symbols: z.string().optional(),\n date: z.string().optional(),\n amount: z.string().optional(),\n },\n http: (a) => `${ORIGIN}/fx?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"ens_lookup\",\n description: \"ENS name -> address + records, or reverse. $0.002 USDC.\",\n price: \"$0.002\",\n schema: { name: z.string().optional(), address: z.string().optional() },\n http: (a) => `${ORIGIN}/ens?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"token_metadata\",\n description: \"ERC20 name/symbol/decimals/supply. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { address: z.string(), chain: CH },\n http: (a) => `${ORIGIN}/token?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"token_allowance\",\n description: \"ERC20 allowance owner->spender, unlimited flag. $0.002 USDC.\",\n price: \"$0.002\",\n schema: { token: z.string(), owner: z.string(), spender: z.string(), chain: CH },\n http: (a) => `${ORIGIN}/allowance?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"contract_info\",\n description: \"Contract/proxy/clone/7702/standards/Sourcify name. $0.003 USDC.\",\n price: \"$0.003\",\n schema: { address: z.string(), chain: CH },\n http: (a) => `${ORIGIN}/contract?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"gas_fees\",\n description: \"Current gas fees + USD cost estimates. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { chain: CH },\n http: (a) => `${ORIGIN}/gas?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"block_lookup\",\n description: \"Block by number or timestamp. $0.001 USDC.\",\n price: \"$0.001\",\n schema: { number: z.string().optional(), timestamp: z.string().optional(), chain: CH },\n http: (a) => `${ORIGIN}/block?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"nft_lookup\",\n description: \"NFT owner + metadata. $0.002 USDC.\",\n price: \"$0.002\",\n schema: { contract: z.string(), token_id: z.string(), chain: CH },\n http: (a) => `${ORIGIN}/nft?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"web_search\",\n description:\n \"Open research search: Wikipedia + OpenAlex + arXiv + Crossref merged, deduped, ranked with snippets. $0.003 USDC.\",\n price: \"$0.003\",\n schema: { q: z.string(), sources: z.string().optional(), limit: z.string().optional() },\n http: (a) => `${ORIGIN}/search?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"uk_property_prices\",\n description: \"England & Wales Land Registry sold prices near a postcode + medians. $0.01 USDC.\",\n price: \"$0.01\",\n schema: { postcode: z.string(), radius: z.string().optional() },\n http: (a) => `${ORIGIN}/uk-property?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"uk_area_profile\",\n description: \"UK postcode profile: ONS geography, police crime, FSA hygiene. $0.005 USDC.\",\n price: \"$0.005\",\n schema: { postcode: z.string() },\n http: (a) => `${ORIGIN}/uk-area?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"uk_charity\",\n description:\n \"UK Charity Commission snapshot: status, income, trustees count, activities. $0.05 USDC.\",\n price: \"$0.05\",\n schema: {\n number: z.string().optional(),\n name: z.string().optional(),\n suffix: z.string().optional(),\n },\n http: (a) =>\n a.number\n ? `${ORIGIN}/uk-charity?number=${encodeURIComponent(a.number)}${a.suffix != null ? `&suffix=${encodeURIComponent(a.suffix)}` : \"\"}`\n : `${ORIGIN}/uk-charity?name=${encodeURIComponent(a.name || \"\")}`,\n previewable: true,\n },\n\n {\n name: \"us_sec\",\n description:\n \"US SEC EDGAR company snapshot by ticker or CIK: filings, SIC, addresses. $0.05 USDC.\",\n price: \"$0.05\",\n schema: { ticker: z.string().optional(), cik: z.string().optional() },\n http: (a) =>\n a.ticker\n ? `${ORIGIN}/us-sec?ticker=${encodeURIComponent(a.ticker)}`\n : `${ORIGIN}/us-sec?cik=${encodeURIComponent(a.cik || \"\")}`,\n previewable: true,\n },\n {\n name: \"us_sec_full\",\n description:\n \"US SEC full DD: lite + us-gaap highlights + red-flag heuristics. $0.25 USDC.\",\n price: \"$0.25\",\n schema: { ticker: z.string().optional(), cik: z.string().optional() },\n http: (a) =>\n a.ticker\n ? `${ORIGIN}/us-sec-full?ticker=${encodeURIComponent(a.ticker)}`\n : `${ORIGIN}/us-sec-full?cik=${encodeURIComponent(a.cik || \"\")}`,\n previewable: true,\n },\n {\n name: \"eu_vat\",\n description: \"EU VIES VAT validation: valid, name, address. $0.01 USDC.\",\n price: \"$0.01\",\n schema: {\n vat: z.string().optional(),\n country: z.string().optional(),\n number: z.string().optional(),\n },\n http: (a) =>\n a.vat\n ? `${ORIGIN}/eu-vat?vat=${encodeURIComponent(a.vat)}`\n : `${ORIGIN}/eu-vat?country=${encodeURIComponent(a.country || \"\")}&number=${encodeURIComponent(a.number || \"\")}`,\n previewable: true,\n },\n {\n name: \"lei_lookup\",\n description: \"GLEIF LEI lookup with parents.direct/ultimate + BIC. $0.005 USDC.\",\n price: \"$0.005\",\n schema: {\n lei: z.string().optional(),\n name: z.string().optional(),\n registered_as: z.string().optional(),\n country: z.string().optional(),\n },\n http: (a) => `${ORIGIN}/lei?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"lei_full\",\n description: \"GLEIF name/registered_as search up to 10 matches each with parents. $0.05 USDC.\",\n price: \"$0.05\",\n schema: {\n name: z.string().optional(),\n registered_as: z.string().optional(),\n country: z.string().optional(),\n lei: z.string().optional(),\n },\n http: (a) => `${ORIGIN}/lei-full?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"read_batch\",\n description: \"Batch web read up to 8 URLs as Markdown. $0.015 USDC.\",\n price: \"$0.015\",\n schema: { urls: z.any() },\n http: (a) => `${ORIGIN}/read-batch?urls=${encodeURIComponent(Array.isArray(a.urls) ? a.urls.join(\",\") : String(a.urls || \"\"))}`,\n previewable: true,\n },\n {\n name: \"uk_charity_full\",\n description:\n \"Full UK charity DD: trustees, finances, assets, governance, regulatory + red flags. $0.25 USDC.\",\n price: \"$0.25\",\n schema: {\n number: z.string().optional(),\n name: z.string().optional(),\n suffix: z.string().optional(),\n },\n http: (a) =>\n a.number\n ? `${ORIGIN}/uk-charity-full?number=${encodeURIComponent(a.number)}${a.suffix != null ? `&suffix=${encodeURIComponent(a.suffix)}` : \"\"}`\n : `${ORIGIN}/uk-charity-full?name=${encodeURIComponent(a.name || \"\")}`,\n previewable: true,\n },\n {\n name: \"uk_leads_lite\",\n description: \"UK new-incorporation leads by SIC/location/postcode_area (1-7 days), no directors. $0.25 USDC.\",\n price: \"$0.25\",\n schema: {\n sic: z.string().optional(),\n location: z.string().optional(),\n postcode_area: z.string().optional(),\n days: z.union([z.string(), z.number()]).optional(),\n limit: z.union([z.string(), z.number()]).optional(),\n },\n http: (a) => `${ORIGIN}/uk-leads-lite?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"uk_leads\",\n description: \"UK new-incorporation leads with active director names. $1.00 USDC.\",\n price: \"$1.00\",\n schema: {\n sic: z.string().optional(),\n location: z.string().optional(),\n postcode_area: z.string().optional(),\n days: z.union([z.string(), z.number()]).optional(),\n limit: z.union([z.string(), z.number()]).optional(),\n },\n http: (a) => `${ORIGIN}/uk-leads?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"uk_leads_feed\",\n description: \"30-day daily webhook of new UK incorporations matching SIC/location/postcode_area. $25.00/30d USDC.\",\n price: \"$25.00\",\n schema: {\n webhook: z.string().url(),\n sic: z.string().optional(),\n location: z.string().optional(),\n postcode_area: z.string().optional(),\n },\n http: () => `${ORIGIN}/uk-leads-feed`,\n method: \"POST\",\n body: (a) => a,\n },\n {\n name: \"uk_watch\",\n description: \"Watch one UK company 30 days: hourly CH poll of status/officers/filings/PSC/charges → webhook on change. $5.00/30d USDC.\",\n price: \"$5.00\",\n schema: { number: z.string(),\n company_number: z.string().optional(), webhook: z.string().url() },\n http: () => `${ORIGIN}/uk-watch`,\n method: \"POST\",\n body: (a) => a,\n },\n {\n name: \"uk_dd\",\n description: \"UK-only DD job: full Companies House pack + sanctions (entity+officers) + optional domain RDAP/website skim → trust flag. Screening only. $1.00 USDC.\",\n price: \"$1.00\",\n schema: {\n number: z.string().optional(),\n company_number: z.string().optional(),\n name: z.string().optional(),\n domain: z.string().optional(),\n },\n http: (a) => `${ORIGIN}/uk-dd?${qs(a)}`,\n previewable: true,\n },\n {\n name: \"kyb_report\",\n description: \"Agent KYB pack: UK/AU/CA/FR registry + EU VAT + optional GLEIF LEI (parents) + website + sanctions + director appointments → trust flag. Screening only. $2.50 USDC.\",\n price: \"$2.50\",\n schema: {\n domain: z.string().optional(),\n number: z.string().optional(),\n company_number: z.string().optional(),\n name: z.string().optional(),\n vat: z.string().optional(),\n country: z.string().optional(),\n vat_number: z.string().optional(),\n acn: z.string().optional(),\n ca_number: z.string().optional(),\n bn: z.string().optional(),\n lei: z.string().optional(),\n siren: z.string().optional(),\n siret: z.string().optional(),\n },\n http: (a) => `${ORIGIN}/kyb?${qs(a)}`,\n previewable: true,\n },\n];\n\n// Single-fact EVM tools (/chain/*), generated from the server's route table.\nfor (const r of CHAIN as any[]) {\n ALL_TOOLS.push({\n name: r.tool,\n description: r.description.replace(/\\$0\\.00\\d\\.$/, `${r.price} USDC.`),\n price: r.price,\n schema: Object.fromEntries(Object.keys(r.params).map((k) => [k, r.required.includes(k) ? z.string().describe(r.params[k]) : z.string().optional().describe(r.params[k])])),\n http: (a) => `${ORIGIN}${r.path}?${qs(a)}`,\n previewable: true,\n } as ToolDef);\n}\n\n// 2026-11-06: $0.001 format validators unlisted; HTTP routes still work.\nexport const TOOLS: ToolDef[] = ALL_TOOLS.filter((t) => !HIDDEN_TOOLS.has(t.name));\n","[\n {\n \"path\": \"/chain/erc20-balance\",\n \"tool\": \"chain_erc20_balance\",\n \"price\": \"$0.001\",\n \"description\": \"ERC20 token balance for any wallet on Base/Ethereum/Arbitrum/Optimism/Polygon via balanceOf (eth_call). Returns raw + decimal-formatted balance, symbol, decimals, block. Example: {address:\\\"0xd8dA…6045\\\", token:\\\"0x8335…2913\\\", chain:\\\"base\\\"}. $0.001.\",\n \"params\": {\n \"address\": \"Wallet address\",\n \"token\": \"ERC20 contract\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\",\n \"token\"\n ],\n \"example\": {\n \"address\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\n \"token\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/balance\",\n \"tool\": \"chain_balance\",\n \"price\": \"$0.001\",\n \"description\": \"Native coin balance (ETH/POL) of any address via eth_getBalance, optionally at a historical block. Example: {address:\\\"0xd8dA…6045\\\", chain:\\\"ethereum\\\"} → {balance:\\\"…\\\", balance_wei, block}. Use /wallet ($0.003) for native + major tokens in one call. $0.001.\",\n \"params\": {\n \"address\": \"Address\",\n \"chain\": \"EVM chain (default base)\",\n \"block\": \"Block number or tag (default latest)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\"\n ],\n \"example\": {\n \"address\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\n \"chain\": \"ethereum\"\n }\n },\n {\n \"path\": \"/chain/live-balance\",\n \"tool\": \"chain_live_balance\",\n \"price\": \"$0.002\",\n \"description\": \"Live wallet balance — native ETH/POL plus up to 20 caller-supplied ERC20 tokens in one RPC batch (balanceOf + decimals + symbol). No hardcoded majors (use /wallet $0.003 for USDC/USDT/DAI/WETH pack). Example: {address:\\\"0xd8dA…6045\\\", tokens:\\\"0xdAC1…1ec7,0xA0b8…eB48\\\", chain:\\\"ethereum\\\"}. $0.002.\",\n \"params\": {\n \"address\": \"Wallet address\",\n \"tokens\": \"Comma-separated ERC20 contracts (max 20)\",\n \"chain\": \"EVM chain (default base)\",\n \"network\": \"Alias for chain (onesource-compatible)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\"\n ],\n \"example\": {\n \"address\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\n \"tokens\": \"0xdAC17F958D2ee523a2206206994597C13D831ec7,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n \"chain\": \"ethereum\"\n }\n },\n {\n \"path\": \"/chain/block-number\",\n \"tool\": \"chain_block_number\",\n \"price\": \"$0.001\",\n \"description\": \"Latest block height (chain tip) plus safe/finalized heights and head age in seconds, via eth_blockNumber/eth_getBlockByNumber. Base/Ethereum/Arbitrum/Optimism/Polygon. Example: {chain:\\\"base\\\"}. $0.001.\",\n \"params\": {\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [],\n \"example\": {\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/nonce\",\n \"tool\": \"chain_nonce\",\n \"price\": \"$0.001\",\n \"description\": \"Next transaction nonce for any address (latest and pending) via eth_getTransactionCount — how many txs it has sent, and whether one is stuck in the mempool. Example: {address:\\\"0xd8dA…6045\\\", chain:\\\"base\\\"}. $0.001.\",\n \"params\": {\n \"address\": \"Address\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\"\n ],\n \"example\": {\n \"address\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/total-supply\",\n \"tool\": \"chain_total_supply\",\n \"price\": \"$0.001\",\n \"description\": \"Total supply of an ERC20 or ERC721 token via totalSupply (eth_call), formatted with decimals and symbol. Example: {token:\\\"0x8335…2913\\\", chain:\\\"base\\\"} → {total_supply, symbol, decimals}. $0.001.\",\n \"params\": {\n \"token\": \"Token contract\",\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [\n \"token\"\n ],\n \"example\": {\n \"token\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/erc20-transfers\",\n \"tool\": \"chain_erc20_transfers\",\n \"price\": \"$0.003\",\n \"description\": \"ERC20 Transfer events for a token and/or wallet via eth_getLogs, decoded (from, to, amount with decimals, tx hash, block). Default last 100 blocks, max 5000. Public RPCs need a contract filter: pass token=; if only wallet address is given, known chain tokens (USDC/WETH/…) are scanned. Example: {token:\\\"0x8335…2913\\\", address:\\\"0x88b1…3ff6\\\", chain:\\\"base\\\"}. $0.003.\",\n \"params\": {\n \"token\": \"ERC20 contract (recommended; required unless scanning known tokens for a wallet)\",\n \"address\": \"Wallet to filter (optional if token given)\",\n \"direction\": \"one of in|out|any\",\n \"blocks\": \"Lookback blocks (default 100, max 5000)\",\n \"from_block\": \"from_block\",\n \"to_block\": \"to_block\",\n \"limit\": \"Max items (default 50, max 200)\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [],\n \"example\": {\n \"token\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"address\": \"0x88b1c747c33A5868A34057D8C57318E5602b3ff6\",\n \"chain\": \"base\",\n \"blocks\": \"100\"\n }\n },\n {\n \"path\": \"/chain/events\",\n \"tool\": \"chain_events\",\n \"price\": \"$0.003\",\n \"description\": \"Contract event logs via eth_getLogs filtered by contract and topics (topic0 = event signature hash). Raw logs, newest first; default last 100 blocks, max 5000 (auto-chunked for public RPC limits). Example: {address:\\\"0x8335…2913\\\", topic0:\\\"0xddf2…b3ef\\\", chain:\\\"base\\\", blocks:\\\"50\\\"}. $0.003.\",\n \"params\": {\n \"address\": \"Contract emitting the logs\",\n \"topic0\": \"Event signature hash (0x + 64 hex)\",\n \"topic1\": \"topic1\",\n \"topic2\": \"topic2\",\n \"topic3\": \"topic3\",\n \"blocks\": \"blocks\",\n \"from_block\": \"from_block\",\n \"to_block\": \"to_block\",\n \"limit\": \"limit\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\"\n ],\n \"example\": {\n \"address\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"topic0\": \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\n \"blocks\": \"20\",\n \"limit\": \"5\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/network-info\",\n \"tool\": \"chain_network_info\",\n \"price\": \"$0.001\",\n \"description\": \"EVM network info in one call: chain ID, client version, block height, head age, gas price, base fee, native symbol. Confirms which chain an RPC is on before signing. Example: {chain:\\\"base\\\"}. $0.001.\",\n \"params\": {\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [],\n \"example\": {\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/receipt\",\n \"tool\": \"chain_receipt\",\n \"price\": \"$0.002\",\n \"description\": \"Transaction receipt via eth_getTransactionReceipt: success/revert status, gas used, effective gas price, fee in native coin, contract created, log count + raw logs. Example: {hash:\\\"0x…\\\", chain:\\\"base\\\"}. Use /tx ($0.003) for decoded transfers + confirmations. $0.002.\",\n \"params\": {\n \"hash\": \"hash\",\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [\n \"hash\"\n ],\n \"example\": {\n \"hash\": \"0x6f0d9bbb400eef11b67d1b9b41a5b9053b6790f254a3e9dea264dd1a8ded6a73\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/code\",\n \"tool\": \"chain_code\",\n \"price\": \"$0.001\",\n \"description\": \"Is this address a contract or a wallet (EOA)? eth_getCode → is_contract, bytecode size and prefix, EIP-7702 delegation detection. Example: {address:\\\"0x8335…2913\\\", chain:\\\"base\\\"}. Use /contract ($0.003) for proxy/owner/token detail. $0.001.\",\n \"params\": {\n \"address\": \"Address\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\"\n ],\n \"example\": {\n \"address\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/call\",\n \"tool\": \"chain_call\",\n \"price\": \"$0.002\",\n \"description\": \"Read-only contract call via eth_call (no transaction sent): pass to + ABI-encoded data, get the raw return hex plus best-effort uint/address/string decodes and revert reason. Example: {to:\\\"0x8335…2913\\\", data:\\\"0x18160ddd\\\", chain:\\\"base\\\"}. $0.002.\",\n \"params\": {\n \"to\": \"Contract\",\n \"data\": \"0x calldata\",\n \"from\": \"Optional caller\",\n \"block\": \"block\",\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [\n \"to\",\n \"data\"\n ],\n \"example\": {\n \"to\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"data\": \"0x18160ddd\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/estimate-gas\",\n \"tool\": \"chain_estimate_gas\",\n \"price\": \"$0.002\",\n \"description\": \"Estimate gas for a transaction before signing (eth_estimateGas) plus current fee → cost in native coin; returns the revert reason if it would fail. Example: {from:\\\"0xd8dA…6045\\\", to:\\\"0x8335…2913\\\", data:\\\"0xa9059cbb…\\\", chain:\\\"base\\\"}. $0.002.\",\n \"params\": {\n \"to\": \"Recipient/contract\",\n \"from\": \"Sender\",\n \"data\": \"data\",\n \"value\": \"Wei (decimal)\",\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [\n \"to\"\n ],\n \"example\": {\n \"from\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\n \"to\": \"0x88b1c747c33A5868A34057D8C57318E5602b3ff6\",\n \"value\": \"1000000000000\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/nft-owner\",\n \"tool\": \"chain_nft_owner\",\n \"price\": \"$0.001\",\n \"description\": \"Current owner of an ERC721 token_id via ownerOf (eth_call), plus collection name/symbol. Example: {contract:\\\"0xBC4C…f13D\\\", token_id:\\\"1\\\", chain:\\\"ethereum\\\"} → {owner}. Use /nft ($0.002) for metadata. $0.001.\",\n \"params\": {\n \"contract\": \"ERC721 contract\",\n \"token_id\": \"token_id\",\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [\n \"contract\",\n \"token_id\"\n ],\n \"example\": {\n \"contract\": \"0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D\",\n \"token_id\": \"1\",\n \"chain\": \"ethereum\"\n }\n },\n {\n \"path\": \"/chain/nft-metadata\",\n \"tool\": \"chain_nft_metadata\",\n \"price\": \"$0.002\",\n \"description\": \"ERC721/1155 tokenURI/uri + resolved JSON metadata (IPFS/Arweave/data URI) plus collection name/symbol. Does not require ownerOf — use when explorers ask for /chain/nft-metadata. Prefer /nft ($0.002) when you also need current owner; /chain/nft-owner ($0.001) for owner only. Example: {contract:\\\"0xBC4C…f13D\\\", token_id:\\\"1\\\", chain:\\\"ethereum\\\"}. $0.002.\",\n \"params\": {\n \"contract\": \"ERC721/1155 contract\",\n \"token_id\": \"token_id\",\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [\n \"contract\",\n \"token_id\"\n ],\n \"example\": {\n \"contract\": \"0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D\",\n \"token_id\": \"1\",\n \"chain\": \"ethereum\"\n }\n },\n {\n \"path\": \"/chain/erc721-tokens\",\n \"tool\": \"chain_erc721_tokens\",\n \"price\": \"$0.002\",\n \"description\": \"List every ERC721 token_id a wallet owns in a collection via balanceOf + tokenOfOwnerByIndex (ERC721Enumerable). Caps at limit (default 50, max 100). If the collection is not enumerable, returns is_enumerable:false with balance. Example: {contract:\\\"0xBC4C…f13D\\\", address:\\\"0x46ef…2496\\\", chain:\\\"ethereum\\\"}. $0.002.\",\n \"params\": {\n \"contract\": \"ERC721 collection\",\n \"address\": \"Owner wallet\",\n \"chain\": \"EVM chain (default base)\",\n \"network\": \"Alias for chain (onesource-compatible)\",\n \"limit\": \"Max token_ids (default 50, max 100)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"contract\",\n \"address\"\n ],\n \"example\": {\n \"contract\": \"0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D\",\n \"address\": \"0x46efbaedc92067e6d60e84ed6395099723252496\",\n \"chain\": \"ethereum\"\n }\n },\n {\n \"path\": \"/chain/erc1155-balance\",\n \"tool\": \"chain_erc1155_balance\",\n \"price\": \"$0.001\",\n \"description\": \"ERC1155 balance: how many copies of token_id a wallet holds, via balanceOf(address,uint256) (eth_call). Example: {contract:\\\"0x…\\\", address:\\\"0x…\\\", token_id:\\\"1\\\", chain:\\\"base\\\"}. $0.001.\",\n \"params\": {\n \"contract\": \"ERC1155 contract\",\n \"address\": \"Holder\",\n \"token_id\": \"token_id\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"contract\",\n \"address\",\n \"token_id\"\n ],\n \"example\": {\n \"contract\": \"0x76be3b62873462d2142405439777e971754e8e77\",\n \"address\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\n \"token_id\": \"10229\",\n \"chain\": \"ethereum\"\n }\n },\n {\n \"path\": \"/chain/storage\",\n \"tool\": \"chain_storage\",\n \"price\": \"$0.001\",\n \"description\": \"Read a raw storage slot of any contract via eth_getStorageAt, with uint and address decodes. Example: {address:\\\"0x8335…2913\\\", slot:\\\"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\\\", chain:\\\"base\\\"} (EIP-1967 implementation slot). $0.001.\",\n \"params\": {\n \"address\": \"Contract\",\n \"slot\": \"Slot (decimal or 0x hex)\",\n \"block\": \"block\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\",\n \"slot\"\n ],\n \"example\": {\n \"address\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"slot\": \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/proxy\",\n \"tool\": \"chain_proxy\",\n \"price\": \"$0.002\",\n \"description\": \"Detect upgradeable proxies (EIP-1967 transparent/UUPS, beacon, legacy OZ, EIP-1167 minimal clones, EIP-7702) via eth_getStorageAt/eth_getCode: implementation, admin, beacon, and whether the implementation is a live contract. Example: {address:\\\"0x8335…2913\\\", chain:\\\"base\\\"}. $0.002.\",\n \"params\": {\n \"address\": \"Contract\",\n \"chain\": \"EVM chain (default base)\",\n \"wallet\": \"Alias for address (owner wallet)\"\n },\n \"required\": [\n \"address\"\n ],\n \"example\": {\n \"address\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/chain-id\",\n \"tool\": \"chain_chain_id\",\n \"price\": \"$0.001\",\n \"description\": \"EIP-155 chain ID straight from the RPC (eth_chainId + net_version) — confirm which network you are about to sign on. Example: {chain:\\\"base\\\"} → {chain_id:8453}. $0.001.\",\n \"params\": {\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [],\n \"example\": {\n \"chain\": \"base\"\n }\n },\n {\n \"path\": \"/chain/pending\",\n \"tool\": \"chain_pending\",\n \"price\": \"$0.001\",\n \"description\": \"Pending + latest block snapshot via eth_getBlockByNumber: pending number/hash/parentHash/timestamp/gas/baseFee/tx count/miner vs latest head age. Public RPCs may omit pending — then 502. Example: {chain:\\\"base\\\"}. $0.001.\",\n \"params\": {\n \"chain\": \"EVM chain (default base)\"\n },\n \"required\": [],\n \"example\": {\n \"chain\": \"base\"\n }\n }\n]","import { wrapFetchWithPayment, x402Client } from \"@x402/fetch\";\nimport { ExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\nexport type PaidFetch = typeof fetch;\n\n/** Resolve an EVM private key from common env names. */\nexport function resolvePrivateKey(): `0x${string}` | undefined {\n const raw =\n process.env.AGENTREADER_PRIVATE_KEY ||\n process.env.EVM_PRIVATE_KEY ||\n process.env.PRIVATE_KEY ||\n process.env.X402_PRIVATE_KEY;\n if (!raw) return undefined;\n const key = raw.startsWith(\"0x\") ? raw : `0x${raw}`;\n if (!/^0x[0-9a-fA-F]{64}$/.test(key)) {\n throw new Error(\n \"Invalid AGENTREADER_PRIVATE_KEY / EVM_PRIVATE_KEY (expected 32-byte hex with optional 0x)\",\n );\n }\n return key as `0x${string}`;\n}\n\n/** Build a fetch that auto-settles x402 exact USDC on Base when a key is present. */\nexport function createFetch(): { fetch: PaidFetch; paying: boolean } {\n const key = resolvePrivateKey();\n if (!key) return { fetch: globalThis.fetch.bind(globalThis), paying: false };\n const account = privateKeyToAccount(key);\n const client = new x402Client().register(\"eip155:8453\", new ExactEvmScheme(account));\n return { fetch: wrapFetchWithPayment(globalThis.fetch.bind(globalThis), client), paying: true };\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@axiomworks/agentreader-mcp",
3
- "version": "1.30.0",
4
- "description": "Axiom Works AgentReader stdio MCP server — x402-paid tools (web read, UK CH/charity/property, US SEC EDGAR, EU VIES VAT, GLEIF LEI, EVM wallet/tx/token/ENS, FX, search). Auto-pays USDC on Base when AGENTREADER_PRIVATE_KEY is set. Run: npx -y @axiomworks/agentreader-mcp",
3
+ "version": "1.31.1",
4
+ "description": "Axiom Works AgentReader stdio MCP server \u2014 x402-paid tools (web read, UK CH/charity/property, US SEC EDGAR, EU VIES VAT, GLEIF LEI, EVM wallet/tx/token/ENS, FX, search). Auto-pays USDC on Base when AGENTREADER_PRIVATE_KEY is set. Run: npx -y @axiomworks/agentreader-mcp",
5
5
  "type": "module",
6
6
  "mcpName": "io.github.grokbot1233/agentreader",
7
7
  "bin": {