@agentutility/mcp-web-probe 0.2.2 → 0.27.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.
@@ -1,26 +1,106 @@
1
1
  /** Auto-generated by scripts/generate-mcp-clusters.mjs. Do not edit by hand. */
2
2
  export const CLUSTER_SLUG = "web-probe";
3
- export const VERSION = "0.2.2";
3
+ export const VERSION = "0.27.1";
4
4
  export const TOOLS = [
5
+ {
6
+ "name": "answer-web",
7
+ "http_name": "answer-web",
8
+ "description": "(0.04 USDC/call) Live web answer engine / Perplexity-style cited answers / question-to-answer with sources / web Q&A / agent search / research-grade Q&A / SERP + scrape + LLM synthesis. Asks a question in natural language, gets a synthesized answer with inline [N] citations and the source URLs. Combines Decodo Google SERP + parallel cheerio scrape + Morpheus llama-3.3-70b. No login, pay-per-call.",
9
+ "method": "POST",
10
+ "input_schema": {
11
+ "type": "object",
12
+ "properties": {
13
+ "question": {
14
+ "type": "string",
15
+ "description": "The natural-language question. 1-500 chars."
16
+ },
17
+ "max_sources": {
18
+ "type": "number",
19
+ "description": "Max sources to scrape and cite. Default 3, max 5."
20
+ },
21
+ "recency": {
22
+ "type": "string",
23
+ "enum": [
24
+ "day",
25
+ "week",
26
+ "month",
27
+ "year",
28
+ "any"
29
+ ],
30
+ "description": "Time filter passed to Google. Default 'any'."
31
+ },
32
+ "language": {
33
+ "type": "string",
34
+ "description": "Two-letter language code. Default 'en'."
35
+ }
36
+ },
37
+ "required": [
38
+ "question"
39
+ ]
40
+ }
41
+ },
5
42
  {
6
43
  "name": "archive-snapshot",
7
44
  "http_name": "archive-snapshot",
8
- "description": "(0.02 USDC/call) Wayback Machine API / archive.org wrapper. Returns closest archived snapshot URL + timestamp. Optionally fetches and cleans the archived page text. For historical content + reference rot fixes.",
45
+ "description": "(0.02 USDC/call) Archive snapshot API / web archive lookup / Wayback Machine API / historical webpage snapshot / archived URL finder. Given a public URL and optional timestamp, returns the closest archived capture URL, archive timestamp, and optional cleaned archived page text for citation repair, reference rot fixes, due diligence, and provenance checks.",
9
46
  "method": "POST",
10
47
  "input_schema": {
11
48
  "type": "object",
12
49
  "properties": {
13
50
  "url": {
14
- "type": "string",
15
- "description": "Original URL to look up in the Wayback Machine archive."
51
+ "type": "string"
16
52
  },
17
53
  "timestamp": {
18
- "type": "string",
19
- "description": "ISO 8601, YYYY-MM-DD, YYYYMMDD, or YYYYMMDDhhmmss."
54
+ "type": "string"
20
55
  },
21
56
  "fetch_text": {
22
- "type": "boolean",
23
- "description": "Also fetch + clean the archived page. Default false."
57
+ "type": "boolean"
58
+ }
59
+ },
60
+ "required": [
61
+ "url"
62
+ ]
63
+ }
64
+ },
65
+ {
66
+ "name": "archive-snapshot-api",
67
+ "http_name": "archive-snapshot-api",
68
+ "description": "(0.02 USDC/call) Archive snapshot API / Wayback Machine snapshot lookup / historical URL capture. Same archive-snapshot backend, discoverable for agents finding closest archived captures, timestamps, status codes, and replay URLs for public web pages.",
69
+ "method": "POST",
70
+ "input_schema": {
71
+ "type": "object",
72
+ "properties": {
73
+ "url": {
74
+ "type": "string"
75
+ },
76
+ "timestamp": {
77
+ "type": "string"
78
+ },
79
+ "fetch_text": {
80
+ "type": "boolean"
81
+ }
82
+ },
83
+ "required": [
84
+ "url"
85
+ ]
86
+ }
87
+ },
88
+ {
89
+ "name": "archive-url",
90
+ "http_name": "archive-url",
91
+ "description": "(0.02 USDC/call) Archive URL lookup / archive snapshot finder / web archive URL builder / Wayback Machine snapshot API. Finds the closest archived copy of a public URL by timestamp and can fetch cleaned archived page text for citation repair, provenance checks, and reference rot fixes.",
92
+ "method": "POST",
93
+ "input_schema": {
94
+ "type": "object",
95
+ "properties": {
96
+ "url": {
97
+ "type": "string"
98
+ },
99
+ "timestamp": {
100
+ "type": "string"
101
+ },
102
+ "fetch_text": {
103
+ "type": "boolean"
24
104
  }
25
105
  },
26
106
  "required": [
@@ -31,7 +111,7 @@ export const TOOLS = [
31
111
  {
32
112
  "name": "arxiv-bibtex",
33
113
  "http_name": "arxiv-bibtex",
34
- "description": "(0.002 USDC/call) arXiv to BibTeX / arxiv citation generator / paper bibtex / LaTeX citation builder / academic citation lookup. Pulls a paper's title, authors, year, abstract, and DOI from the arXiv API and generates a properly-formatted BibTeX entry with an auto-derived cite key (or your own). Free public arXiv API. Pure XML parse — no upstream auth.",
114
+ "description": "(0.002 USDC/call) arXiv to BibTeX / arxiv citation generator / paper bibtex / LaTeX citation builder / academic citation lookup. Pulls a paper's title, authors, year, abstract, and DOI from the arXiv API and generates a properly-formatted BibTeX entry with an auto-derived cite key (or your own). Free public arXiv API.",
35
115
  "method": "POST",
36
116
  "input_schema": {
37
117
  "type": "object",
@@ -59,27 +139,22 @@ export const TOOLS = [
59
139
  "type": "object",
60
140
  "properties": {
61
141
  "query": {
62
- "type": "string",
63
- "description": "Free-text search terms matched against arXiv paper titles, abstracts, and full text."
142
+ "type": "string"
64
143
  },
65
144
  "author": {
66
- "type": "string",
67
- "description": "Author name to filter results by (matches arXiv author field)."
145
+ "type": "string"
68
146
  },
69
147
  "category": {
70
- "type": "string",
71
- "description": "arXiv subject category code to filter by (e.g. cs.AI, math.NT, hep-th)."
148
+ "type": "string"
72
149
  },
73
150
  "id_list": {
74
151
  "type": "array",
75
152
  "items": {
76
153
  "type": "string"
77
- },
78
- "description": "Specific arXiv IDs to fetch directly instead of running a search query."
154
+ }
79
155
  },
80
156
  "limit": {
81
- "type": "number",
82
- "description": "Maximum number of papers to return in the response."
157
+ "type": "number"
83
158
  },
84
159
  "sort_by": {
85
160
  "type": "string",
@@ -87,20 +162,17 @@ export const TOOLS = [
87
162
  "relevance",
88
163
  "lastUpdatedDate",
89
164
  "submittedDate"
90
- ],
91
- "description": "Field to sort results by, such as relevance, lastUpdatedDate, or submittedDate."
165
+ ]
92
166
  },
93
167
  "sort_order": {
94
168
  "type": "string",
95
169
  "enum": [
96
170
  "ascending",
97
171
  "descending"
98
- ],
99
- "description": "Sort direction, either ascending or descending."
172
+ ]
100
173
  },
101
174
  "include_abstract": {
102
- "type": "boolean",
103
- "description": "Whether to include the full paper abstract in each returned result."
175
+ "type": "boolean"
104
176
  }
105
177
  }
106
178
  }
@@ -108,18 +180,16 @@ export const TOOLS = [
108
180
  {
109
181
  "name": "arxiv-summarize",
110
182
  "http_name": "arxiv-summarize",
111
- "description": "(0.04 USDC/call) arXiv paper summarizer / research-paper TLDR. Given an arXiv ID or URL, fetches the abstract via arXiv API and produces structured summary: TLDR, key findings, methods, limitations, so-what, keywords. Plus authors, categories, DOI, PDF URL.",
183
+ "description": "(0.04 USDC/call) arXiv paper summarizer / research-paper TLDR. Fetches abstract via arXiv API + LLM-generated structured summary (TLDR, key findings, methods, limitations, so-what).",
112
184
  "method": "POST",
113
185
  "input_schema": {
114
186
  "type": "object",
115
187
  "properties": {
116
188
  "arxiv_id_or_url": {
117
- "type": "string",
118
- "description": "arXiv paper identifier (e.g. 2301.12345) or full arXiv abs/pdf URL to summarize."
189
+ "type": "string"
119
190
  },
120
191
  "include_abstract": {
121
- "type": "boolean",
122
- "description": "Include the raw abstract in response. Default true."
192
+ "type": "boolean"
123
193
  }
124
194
  },
125
195
  "required": [
@@ -128,84 +198,51 @@ export const TOOLS = [
128
198
  }
129
199
  },
130
200
  {
131
- "name": "disposable-email-check",
132
- "http_name": "disposable-email-check",
133
- "description": "(0.005 USDC/call) Disposable email detector / fake email filter / fraud signup defense. Cross-checks 100k+ disposable domains list. Flags role accounts (admin@, noreply@). Verifies MX record via Cloudflare DoH.",
201
+ "name": "b2b-lead-enrich",
202
+ "http_name": "b2b-lead-enrich",
203
+ "description": "(0.01 USDC/call) B2B lead enrichment API / sales lead enrichment / prospect enrichment lite. Normalizes caller-supplied email/name/domain/company into a public-data lead profile with inferred name, company, domain, MX records, and homepage context. Designed for agentic sales workflows without private data brokers or prohibited scraping.",
134
204
  "method": "POST",
135
205
  "input_schema": {
136
206
  "type": "object",
137
207
  "properties": {
138
208
  "email": {
139
209
  "type": "string",
140
- "description": "Email address to evaluate (e.g. 'user@mailinator.com'). Only the domain and local-part shape are used; the address is not contacted."
141
- }
142
- },
143
- "required": [
144
- "email"
145
- ]
146
- }
147
- },
148
- {
149
- "name": "dmarc-check",
150
- "http_name": "dmarc-check",
151
- "description": "(0.02 USDC/call) DMARC / SPF / DKIM checker. Email-authentication audit — pulls TXT records, parses DMARC policy (none/quarantine/reject), SPF mechanisms, DKIM selectors. Returns 0-100 score + grade A-F + reasons.",
152
- "method": "POST",
153
- "input_schema": {
154
- "type": "object",
155
- "properties": {
156
- "domain": {
210
+ "description": "Prospect email address."
211
+ },
212
+ "name": {
157
213
  "type": "string",
158
- "description": "Apex domain to audit (e.g. 'google.com'). Resolves SPF/DMARC TXT at the domain and at _dmarc.<domain>."
214
+ "description": "Optional known prospect name."
159
215
  },
160
- "dkim_selectors": {
161
- "type": "array",
162
- "items": {
163
- "type": "string"
164
- },
165
- "description": "Optional list of DKIM selectors (e.g. ['google','default']). Default: 15 common selectors."
166
- }
167
- },
168
- "required": [
169
- "domain"
170
- ]
171
- }
172
- },
173
- {
174
- "name": "dns-lookup",
175
- "http_name": "dns-lookup",
176
- "description": "(0.02 USDC/call) DNS lookup / DNS resolver / DoH proxy. Query A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, CAA, DNSKEY, DS, TLSA, HTTPS, SVCB records via Cloudflare DNS-over-HTTPS. No DNS infrastructure required.",
177
- "method": "POST",
178
- "input_schema": {
179
- "type": "object",
180
- "properties": {
181
216
  "domain": {
182
217
  "type": "string",
183
- "description": "Domain or hostname to resolve (e.g. 'example.com', 'mail.example.com'). Sent as-is, not stripped to apex."
218
+ "description": "Optional company domain."
184
219
  },
185
- "types": {
186
- "type": "array",
187
- "items": {
188
- "type": "string"
189
- },
190
- "description": "Default: A, AAAA, MX, TXT, NS, CAA. Max 12 types per call."
220
+ "company": {
221
+ "type": "string",
222
+ "description": "Optional known company name."
223
+ },
224
+ "include_homepage": {
225
+ "type": "boolean",
226
+ "description": "Fetch public homepage metadata when available. Default true."
191
227
  }
192
- },
193
- "required": [
194
- "domain"
195
- ]
228
+ }
196
229
  }
197
230
  },
198
231
  {
199
- "name": "domain-availability",
200
- "http_name": "domain-availability",
201
- "description": "(0.005 USDC/call) Domain availability / RDAP lookup / WHOIS replacement / domain registration checker / expiry date lookup. Returns is_registered, registrar, registration date, expiry date, days_until_expiry, and current EPP status flags for any TLD that supports RDAP (effectively all gTLDs and most ccTLDs). Backed by rdap.org, the public RFC-7480-compliant aggregator. 404s map to is_registered: false rather than an error.",
232
+ "name": "brand-domain-check",
233
+ "http_name": "brand-domain-check",
234
+ "description": "(0.02 USDC/call) Brand domain check API / startup domain diligence / company-name domain screen. Same RDAP backend as whois-lookup, tuned for agents checking whether a brand or company domain is established, expiring, registrar-locked, or newly registered.",
202
235
  "method": "POST",
203
236
  "input_schema": {
204
237
  "type": "object",
205
238
  "properties": {
206
239
  "domain": {
207
240
  "type": "string",
208
- "description": "Domain to check (e.g. 'example.com'). Strip protocol/path automatically."
241
+ "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain before query."
242
+ },
243
+ "include_certificates": {
244
+ "type": "boolean",
245
+ "description": "If true, fetch a crt.sh certificate-transparency summary (issuer counts, first/last seen, total certs). Default false."
209
246
  }
210
247
  },
211
248
  "required": [
@@ -214,24 +251,24 @@ export const TOOLS = [
214
251
  }
215
252
  },
216
253
  {
217
- "name": "domain-suggest",
218
- "http_name": "domain-suggest",
219
- "description": "(0.05 USDC/call) Brandable domain suggester / startup-name brainstormer / product-name proposer / domain candidate generator. LLM brainstorms N short brandable candidates fitting a concept + tone, then verifies TLD availability across up to 6 TLDs via in-process domain-availability lookups. Returns candidates ranked by # available TLDs then brandability score, with per-TLD registrar info for each candidate. Pair with brand-clearance (Prooflayer) on the shortlist for trademark + Wikipedia + HN signal before adopting. Allowlisted TLDs: com, ai, dev, io, co, app, xyz, org, net, tech, tools, page, studio, shop.",
254
+ "name": "brand-name-generator",
255
+ "http_name": "brand-name-generator",
256
+ "description": "(0.05 USDC/call) Brand name generator / product naming API / brandable domain suggester. Same backend as domain-suggest, with exact brand-name wording for discovery. Returns ranked name candidates, slugs, rationale, checked TLDs, and availability counts.",
220
257
  "method": "POST",
221
258
  "input_schema": {
222
259
  "type": "object",
223
260
  "properties": {
224
261
  "concept": {
225
262
  "type": "string",
226
- "description": "Plain-language product / project description (1-240 chars). Example: 'graded-card portfolio tracker for collectors' or 'paid AI utility primitives for agents'."
263
+ "description": "Plain-language brand, product, or project concept."
227
264
  },
228
265
  "count": {
229
266
  "type": "number",
230
- "description": "Number of candidates to brainstorm. 1-20. Default 10. Multiplied by tlds.length must stay <= 80 lookups."
267
+ "description": "Number of candidates to brainstorm. 1-20. Default 10."
231
268
  },
232
269
  "tlds": {
233
270
  "type": "array",
234
- "description": "TLDs to check, without dots. Default ['com','ai','dev','io','co']. Allowlist: com, ai, dev, io, co, app, xyz, org, net, tech, tools, page, studio, shop. Max 6."
271
+ "description": "TLDs to check, without dots. Default ['com','ai','dev','io','co']; max 6."
235
272
  },
236
273
  "tone": {
237
274
  "type": "string",
@@ -242,7 +279,7 @@ export const TOOLS = [
242
279
  "luxury",
243
280
  "industrial"
244
281
  ],
245
- "description": "Naming tone hint passed to the brainstorm LLM. Default 'neutral'."
282
+ "description": "Naming tone hint. Default neutral."
246
283
  }
247
284
  },
248
285
  "required": [
@@ -251,552 +288,2892 @@ export const TOOLS = [
251
288
  }
252
289
  },
253
290
  {
254
- "name": "expand-url",
255
- "http_name": "expand-url",
256
- "description": "(0.02 USDC/call) URL expander / redirect chain tracer / link-shortener resolver. Follows HTTP redirects step-by-step, returns every hop with status, location, redirect type, response time. Phishing-link analysis, marketing attribution, click-tracking.",
291
+ "name": "brand-name-score",
292
+ "http_name": "brand-name-score",
293
+ "description": "(0.005 USDC/call) Brand name scorer / startup name evaluator / company name quality check / product naming validator. Scoring for a candidate name across length, pronounceability, handle/domain readiness, distinctiveness, generic-word risk, reserved-brand risk, and concept fit. Returns score, grade, risks, strengths, recommendations, and domain candidate slugs. Pair with domain-availability, x-handle-availability, domain-suggest, and brand-clearance for a full startup naming workflow.",
257
294
  "method": "POST",
258
295
  "input_schema": {
259
296
  "type": "object",
260
297
  "properties": {
261
- "url": {
298
+ "name": {
262
299
  "type": "string",
263
- "description": "Starting URL (typically a shortlink). Must be http(s)."
300
+ "description": "Candidate brand, company, product, or project name."
264
301
  },
265
- "max_hops": {
266
- "type": "number",
267
- "description": "1-50. Default 15."
302
+ "concept": {
303
+ "type": "string",
304
+ "description": "Optional product/business concept used to score semantic fit."
268
305
  },
269
- "user_agent": {
306
+ "audience": {
270
307
  "type": "string",
271
- "description": "Optional User-Agent header to send (some shorteners gate by UA). Default is a generic browser UA."
308
+ "description": "Optional target audience context."
309
+ },
310
+ "tlds": {
311
+ "type": "array",
312
+ "description": "Optional TLD list used to emit domain candidate strings. Does not check availability."
272
313
  }
273
314
  },
274
315
  "required": [
275
- "url"
316
+ "name"
276
317
  ]
277
318
  }
278
319
  },
279
320
  {
280
- "name": "github-readme",
281
- "http_name": "github-readme",
282
- "description": "(0.002 USDC/call) GitHub README fetch / repo readme / open-source-readme-as-markdown / package documentation puller. Pulls the raw README markdown for any public GitHub repository via the official GitHub REST API — no auth required for public repos. Returns the unaltered markdown plus byte size and char count. Useful for agents documenting a stack, explaining a library, or snipping an example.",
321
+ "name": "brand-watch-domain-risk",
322
+ "http_name": "brand-watch-domain-risk",
323
+ "description": "(0.02 USDC/call) Brand watch domain risk API / lookalike-domain RDAP triage / trademark monitoring support. Same backend as whois-lookup, surfaced for agents checking new or suspicious brand-adjacent domains for age, registrar, expiry, DNSSEC, and transfer/lock statuses.",
283
324
  "method": "POST",
284
325
  "input_schema": {
285
326
  "type": "object",
286
327
  "properties": {
287
- "repo": {
328
+ "domain": {
288
329
  "type": "string",
289
- "description": "Repository in 'owner/name' form (e.g. 'vercel/next.js')."
330
+ "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain before query."
331
+ },
332
+ "include_certificates": {
333
+ "type": "boolean",
334
+ "description": "If true, fetch a crt.sh certificate-transparency summary (issuer counts, first/last seen, total certs). Default false."
290
335
  }
291
336
  },
292
337
  "required": [
293
- "repo"
338
+ "domain"
294
339
  ]
295
340
  }
296
341
  },
297
342
  {
298
- "name": "github-stars-history",
299
- "http_name": "github-stars-history",
300
- "description": "(0.005 USDC/call) GitHub stars history / star growth chart / repo popularity over time / trending tracker. Current star count plus a sampled cumulative-stars-vs-date series for any public GitHub repo. Walks 1-10 evenly-spaced pages of /stargazers using application/vnd.github.star+json so each sample carries a starred_at timestamp. Free public API, no auth (subject to GitHub's 60 req/h unauthenticated limit).",
343
+ "name": "browser-session",
344
+ "http_name": "browser-session",
345
+ "description": "(0.03 USDC/call) Headless browser render API / JavaScript page renderer / render dynamic page / scrape JS-heavy site / get post-JavaScript DOM / full-page screenshot API. Loads a URL in a real headless browser (JS executed), then returns the rendered HTML and page title, or a base64 screenshot. For pages a plain HTTP fetch can't read because the content is built client-side.",
301
346
  "method": "POST",
302
347
  "input_schema": {
303
348
  "type": "object",
304
349
  "properties": {
305
- "repo": {
350
+ "url": {
306
351
  "type": "string",
307
- "description": "Repository in 'owner/name' form."
352
+ "description": "Absolute http(s) URL to render."
308
353
  },
309
- "pages": {
354
+ "screenshot": {
355
+ "type": "boolean",
356
+ "description": "Return a base64 PNG screenshot instead of HTML. Default false."
357
+ },
358
+ "full_page": {
359
+ "type": "boolean",
360
+ "description": "When screenshot=true, capture the full scrollable page. Default false."
361
+ },
362
+ "wait_ms": {
310
363
  "type": "number",
311
- "description": "How many sample pages to walk. Range [1, 10]. Default 5."
364
+ "description": "Extra milliseconds to wait after load for late JS (0-10000). Default 0."
365
+ },
366
+ "block_ads": {
367
+ "type": "boolean",
368
+ "description": "Block ad/tracker requests for a cleaner render. Default true."
312
369
  }
313
370
  },
314
371
  "required": [
315
- "repo"
372
+ "url"
316
373
  ]
317
374
  }
318
375
  },
319
376
  {
320
- "name": "hacker-news-search",
321
- "http_name": "hacker-news-search",
322
- "description": "(0.001 USDC/call) Hacker News search / HN search / yc-news / Algolia HN. Searches 30M+ Hacker News stories and comments. Filter by type (story/comment/poll), author, min points, ISO8601 date range; sort by relevance or recency. Returns title, author, points, comment count, URL.",
377
+ "name": "business-name-generator",
378
+ "http_name": "business-name-generator",
379
+ "description": "(0.05 USDC/call) Business name generator / company name ideas / brandable domain generator. Same backend as domain-suggest, exposed under the broad buyer wording for new business workflows. Brainstorms short brandable candidates for a concept, checks TLD availability, and ranks by available domains plus brandability score.",
323
380
  "method": "POST",
324
381
  "input_schema": {
325
382
  "type": "object",
326
383
  "properties": {
327
- "query": {
384
+ "concept": {
328
385
  "type": "string",
329
- "description": "Free-text search query (matches title, body, author, URL)."
386
+ "description": "Plain-language business or product concept."
330
387
  },
331
- "type": {
388
+ "count": {
389
+ "type": "number",
390
+ "description": "Number of candidates to brainstorm. 1-20. Default 10."
391
+ },
392
+ "tlds": {
393
+ "type": "array",
394
+ "description": "TLDs to check, without dots. Default ['com','ai','dev','io','co']; max 6."
395
+ },
396
+ "tone": {
332
397
  "type": "string",
333
398
  "enum": [
334
- "story",
335
- "comment",
336
- "poll"
399
+ "neutral",
400
+ "playful",
401
+ "technical",
402
+ "luxury",
403
+ "industrial"
337
404
  ],
338
- "description": "Restrict to a single HN item type. Omit to include all types."
339
- },
340
- "author": {
405
+ "description": "Naming tone hint. Default neutral."
406
+ }
407
+ },
408
+ "required": [
409
+ "concept"
410
+ ]
411
+ }
412
+ },
413
+ {
414
+ "name": "company-enrich",
415
+ "http_name": "company-enrich",
416
+ "description": "(0.01 USDC/call) Company enrichment API / domain enrichment / organization enrichment / firmographic lite. Given a domain or email, returns normalized domain, inferred company name, MX records, and public homepage metadata including title, description, image, and status. Public-data only; no private enrichment database or social scraping.",
417
+ "method": "POST",
418
+ "input_schema": {
419
+ "type": "object",
420
+ "properties": {
421
+ "domain": {
341
422
  "type": "string",
342
- "description": "Filter to a specific HN username (e.g. 'pg', 'dang')."
423
+ "description": "Company domain or website URL."
343
424
  },
344
- "min_points": {
345
- "type": "number",
346
- "description": "Minimum points (upvotes) floor. Comments don't have points; using this implicitly filters to stories."
425
+ "email": {
426
+ "type": "string",
427
+ "description": "Optional email address used to derive the domain."
347
428
  },
348
- "since": {
429
+ "company": {
349
430
  "type": "string",
350
- "description": "Lower bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
431
+ "description": "Optional known company name override."
432
+ }
433
+ }
434
+ }
435
+ },
436
+ {
437
+ "name": "company-name-score",
438
+ "http_name": "company-name-score",
439
+ "description": "(0.005 USDC/call) Company name score API / business name evaluator / startup name quality check. Same backend as brand-name-score, exposed for agents vetting new company names before domain, handle, trademark, and launch work.",
440
+ "method": "POST",
441
+ "input_schema": {
442
+ "type": "object",
443
+ "properties": {
444
+ "name": {
445
+ "type": "string",
446
+ "description": "Candidate company, brand, product, or project name."
351
447
  },
352
- "until": {
448
+ "concept": {
353
449
  "type": "string",
354
- "description": "Upper bound on created_at ISO8601 date (YYYY-MM-DD) or full timestamp."
450
+ "description": "Optional company/product concept used to score semantic fit."
355
451
  },
356
- "sort": {
452
+ "audience": {
357
453
  "type": "string",
358
- "enum": [
359
- "relevance",
360
- "date"
361
- ],
362
- "description": "'relevance' (default, popularity-weighted) or 'date' (most-recent-first)."
454
+ "description": "Optional target audience context."
363
455
  },
364
- "limit": {
365
- "type": "number",
366
- "description": "Max hits to return. 1-20. Default 10."
456
+ "tlds": {
457
+ "type": "array",
458
+ "description": "Optional TLD list used to emit domain candidate strings. Does not check availability."
367
459
  }
368
460
  },
369
461
  "required": [
370
- "query"
462
+ "name"
371
463
  ]
372
464
  }
373
465
  },
374
466
  {
375
- "name": "hn-search",
376
- "http_name": "hn-search",
377
- "description": "(0.001 USDC/call) HN search / Hacker News search / yc-news / startup-news search / Algolia HN / who-is-hiring scraper / programmer-news firehose. Searches 30M+ Hacker News stories and comments via the public Algolia HN index. Filter by type (story|comment|poll), author, minimum points, ISO8601 date range (since/until), and sort by relevance or recency. Returns total hit count plus per-hit objectID, title, author, points, comment count, created_at, URL, and story/comment text. Public Algolia API — no auth, commercial-OK.",
467
+ "name": "contact-enrich",
468
+ "http_name": "contact-enrich",
469
+ "description": "(0.01 USDC/call) Contact enrichment API / email-to-contact enrichment / lead contact lookup. Given email, name, domain, or company, returns a normalized public-data contact record with inferred display name, company/domain context, MX records, and optional homepage metadata. No private people database, LinkedIn scraping, or social-network scraping.",
378
470
  "method": "POST",
379
471
  "input_schema": {
380
472
  "type": "object",
381
473
  "properties": {
382
- "query": {
474
+ "email": {
383
475
  "type": "string",
384
- "description": "Free-text search query (matches title, body, author, URL)."
476
+ "description": "Contact email address."
385
477
  },
386
- "type": {
478
+ "name": {
479
+ "type": "string",
480
+ "description": "Optional known contact name."
481
+ },
482
+ "domain": {
483
+ "type": "string",
484
+ "description": "Optional company domain."
485
+ },
486
+ "company": {
487
+ "type": "string",
488
+ "description": "Optional known company name."
489
+ },
490
+ "include_homepage": {
491
+ "type": "boolean",
492
+ "description": "Fetch public homepage metadata when available. Default true."
493
+ }
494
+ }
495
+ }
496
+ },
497
+ {
498
+ "name": "crates-io-stats",
499
+ "http_name": "crates-io-stats",
500
+ "description": "(0.003 USDC/call) Crates.io package stats / Rust crate registry lookup / cargo package metadata / Rust ecosystem stats. Fetches the public crates.io API record for a Rust crate and returns description, license, repository, homepage, documentation, keywords, categories, latest stable version, total version count, recent versions with yanked flags + crate_size + Rust edition + MSRV, age in days, days_since_last_release, all-time + recent-90d downloads. Public crates.io API, no auth, commercial use permitted with identifying User-Agent. Completes the trio with npm-package-stats and pypi-package-stats.",
501
+ "method": "POST",
502
+ "input_schema": {
503
+ "type": "object",
504
+ "properties": {
505
+ "package": {
506
+ "type": "string",
507
+ "description": "Crate name. 1-64 ASCII alphanumeric with '-' or '_'."
508
+ },
509
+ "recent_versions": {
510
+ "type": "number",
511
+ "description": "How many most-recent versions to include. 1-20. Default 5."
512
+ }
513
+ },
514
+ "required": [
515
+ "package"
516
+ ]
517
+ }
518
+ },
519
+ {
520
+ "name": "creator-domain-check",
521
+ "http_name": "creator-domain-check",
522
+ "description": "(0.02 USDC/call) Creator domain check API / newsletter domain age / personal brand domain diligence. Same RDAP backend as whois-lookup, exposed for agents evaluating creator, newsletter, podcast, and community domains for age, expiry, registrar, DNSSEC, and suspicious new-registration flags.",
523
+ "method": "POST",
524
+ "input_schema": {
525
+ "type": "object",
526
+ "properties": {
527
+ "domain": {
528
+ "type": "string",
529
+ "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain before query."
530
+ },
531
+ "include_certificates": {
532
+ "type": "boolean",
533
+ "description": "If true, fetch a crt.sh certificate-transparency summary (issuer counts, first/last seen, total certs). Default false."
534
+ }
535
+ },
536
+ "required": [
537
+ "domain"
538
+ ]
539
+ }
540
+ },
541
+ {
542
+ "name": "crypto-headlines",
543
+ "http_name": "crypto-headlines",
544
+ "description": "(0.001 USDC/call) Crypto headlines API / low-cost cryptocurrency news feed / bitcoin ethereum DeFi headline search. Pulls recent articles from the public GDELT 2.1 Document API and returns headline URLs, domains, timestamps, language/country metadata, and headline sentiment. Not trading advice.",
545
+ "method": "POST",
546
+ "input_schema": {
547
+ "type": "object",
548
+ "properties": {
549
+ "topic": {
387
550
  "type": "string",
388
551
  "enum": [
389
- "story",
390
- "comment",
391
- "poll"
552
+ "crypto",
553
+ "markets",
554
+ "defi",
555
+ "bitcoin",
556
+ "ethereum",
557
+ "stablecoins"
392
558
  ],
393
- "description": "Restrict to a single HN item type. Omit to include all types."
559
+ "description": "Preset topic. Default crypto."
394
560
  },
395
- "author": {
561
+ "query": {
396
562
  "type": "string",
397
- "description": "Filter to a specific HN username (e.g. 'pg', 'dang')."
563
+ "description": "Optional GDELT query override, max 240 chars."
398
564
  },
399
- "min_points": {
565
+ "limit": {
400
566
  "type": "number",
401
- "description": "Minimum points (upvotes) floor. Comments don't have points; using this implicitly filters to stories."
567
+ "description": "Headlines to return, 1-30. Default 10."
402
568
  },
403
- "since": {
569
+ "hours": {
570
+ "type": "number",
571
+ "description": "Lookback window in hours, 1-168. Default 48."
572
+ }
573
+ }
574
+ }
575
+ },
576
+ {
577
+ "name": "crypto-news",
578
+ "http_name": "crypto-news",
579
+ "description": "(0.005 USDC/call) Crypto news API / cryptocurrency headlines / bitcoin news / ethereum news / DeFi news / stablecoin news / market news feed. Pulls recent articles from the public GDELT 2.1 Document API, filters by crypto topic or caller query, returns headline URLs, domains, timestamps, language/country metadata, and headline sentiment. Not trading advice.",
580
+ "method": "POST",
581
+ "input_schema": {
582
+ "type": "object",
583
+ "properties": {
584
+ "topic": {
404
585
  "type": "string",
405
- "description": "Lower bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
586
+ "enum": [
587
+ "crypto",
588
+ "markets",
589
+ "defi",
590
+ "bitcoin",
591
+ "ethereum",
592
+ "stablecoins"
593
+ ],
594
+ "description": "Preset topic. Default crypto."
406
595
  },
407
- "until": {
596
+ "query": {
408
597
  "type": "string",
409
- "description": "Upper bound on created_at ISO8601 date (YYYY-MM-DD) or full timestamp."
598
+ "description": "Optional GDELT query override, max 240 chars."
410
599
  },
411
- "sort": {
600
+ "limit": {
601
+ "type": "number",
602
+ "description": "Headlines to return, 1-30. Default 10."
603
+ },
604
+ "hours": {
605
+ "type": "number",
606
+ "description": "Lookback window in hours, 1-168. Default 48."
607
+ }
608
+ }
609
+ }
610
+ },
611
+ {
612
+ "name": "crypto-news-api",
613
+ "http_name": "crypto-news-api",
614
+ "description": "(0.003 USDC/call) Crypto news API / cryptocurrency news API / DeFi news endpoint. Same GDELT-backed public news handler as crypto-news, exposed under API buyer wording with a lower-cost route for routers that sort by price. Returns recent headline metadata and sentiment. No scraping and no trading advice.",
615
+ "method": "POST",
616
+ "input_schema": {
617
+ "type": "object",
618
+ "properties": {
619
+ "topic": {
412
620
  "type": "string",
413
621
  "enum": [
414
- "relevance",
415
- "date"
622
+ "crypto",
623
+ "markets",
624
+ "defi",
625
+ "bitcoin",
626
+ "ethereum",
627
+ "stablecoins"
416
628
  ],
417
- "description": "'relevance' (default, popularity-weighted) or 'date' (most-recent-first)."
629
+ "description": "Preset topic. Default crypto."
630
+ },
631
+ "query": {
632
+ "type": "string",
633
+ "description": "Optional GDELT query override, max 240 chars."
418
634
  },
419
635
  "limit": {
420
636
  "type": "number",
421
- "description": "Max hits to return. 1-20. Default 10."
637
+ "description": "Headlines to return, 1-30. Default 10."
638
+ },
639
+ "hours": {
640
+ "type": "number",
641
+ "description": "Lookback window in hours, 1-168. Default 48."
642
+ }
643
+ }
644
+ }
645
+ },
646
+ {
647
+ "name": "disposable-email-check",
648
+ "http_name": "disposable-email-check",
649
+ "description": "(0.005 USDC/call) Disposable email detector / temp-mail / throwaway email / fake email / 10minutemail filter / Mailinator + Guerrilla Mail + Yopmail blocklist / fraud signup defense / role-account flagger / MX-record validator / signup-form abuse guard. Checks the email's domain against a 100k+ disposable-domain blocklist, flags role-style local-parts (admin@, info@, noreply@, support@), and verifies a live MX record via Cloudflare DNS-over-HTTPS so dead domains can't pass.",
650
+ "method": "POST",
651
+ "input_schema": {
652
+ "type": "object",
653
+ "properties": {
654
+ "email": {
655
+ "type": "string",
656
+ "description": "Email address to evaluate (e.g. 'user@mailinator.com'). Only the domain and local-part shape are used; the address is not contacted."
422
657
  }
423
658
  },
424
659
  "required": [
425
- "query"
660
+ "email"
426
661
  ]
427
662
  }
428
663
  },
429
664
  {
430
- "name": "homoglyph-check",
431
- "http_name": "homoglyph-check",
432
- "description": "(0.003 USDC/call) Homoglyph attack detector / Unicode lookalike scanner. Detects Cyrillic / Greek / fullwidth / mathematical lookalikes commonly used in phishing (apple.com vs аpple.com). Plus invisible / zero-width / RTL-override characters. Risk score 0-100 + normalized form.",
665
+ "name": "dmarc-check",
666
+ "http_name": "dmarc-check",
667
+ "description": "(0.02 USDC/call) DMARC + SPF + DKIM email-authentication checker / mail-auth posture audit / spoofing-resistance grader / phishing-readiness scanner / domain email security score / dmarcian-style report / pre-send deliverability check. Reads the domain's DNS TXT records, parses each protocol's record (SPF mechanisms + qualifiers, DMARC tags p/sp/rua/ruf/pct/aspf/adkim, DKIM selectors with key bits and algorithm), and returns a 0-100 score, A-F grade, and per-finding human-readable reasons explaining the score.",
433
668
  "method": "POST",
434
669
  "input_schema": {
435
670
  "type": "object",
436
671
  "properties": {
437
- "text": {
672
+ "domain": {
438
673
  "type": "string",
439
- "description": "Max 10000 chars."
674
+ "description": "Apex domain to audit (e.g. 'google.com'). Resolves SPF/DMARC TXT at the domain and at _dmarc.<domain>."
675
+ },
676
+ "dkim_selectors": {
677
+ "type": "array",
678
+ "items": {
679
+ "type": "string"
680
+ },
681
+ "description": "Optional list of DKIM selectors to probe (e.g. ['google', 'selector1', 's1']). Defaults to a common-selector probe set."
440
682
  }
441
683
  },
442
684
  "required": [
443
- "text"
685
+ "domain"
444
686
  ]
445
687
  }
446
688
  },
447
689
  {
448
- "name": "ip-asn",
449
- "http_name": "ip-asn",
450
- "description": "(0.001 USDC/call) IP to ASN / IP geolocation / IP-to-ISP lookup / WHOIS for IP / cloud-provider attribution. For any IPv4 or IPv6 address, returns ASN number, ASN org, ISP, country, region, city, postal, latitude/longitude, and timezone. Primary backend: ipapi.co (1k req/day free). Fallback: ip-api.com (45 req/min free). Both are free public APIs with no auth.",
690
+ "name": "dns-lookup",
691
+ "http_name": "dns-lookup",
692
+ "description": "(0.02 USDC/call) DNS lookup / DNS resolver / dig replacement / nslookup API / DoH proxy / authoritative-record fetch / MX checker / SPF + DMARC TXT inspector / CAA + DNSSEC inspector / nameserver finder / CDN-routing detector. Queries Cloudflare 1.1.1.1 DNS-over-HTTPS for any subset of A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, CAA, DNSKEY, DS, TLSA, HTTPS, SVCB records and returns both grouped (per type, with TTL) and flat shapes for easy consumption.",
451
693
  "method": "POST",
452
694
  "input_schema": {
453
695
  "type": "object",
454
696
  "properties": {
455
- "ip": {
697
+ "domain": {
456
698
  "type": "string",
457
- "description": "IPv4 or IPv6 address."
699
+ "description": "Domain or hostname to resolve (e.g. 'example.com', 'mail.example.com'). Sent as-is, not stripped to apex."
700
+ },
701
+ "types": {
702
+ "type": "array",
703
+ "items": {
704
+ "type": "string"
705
+ },
706
+ "description": "Optional record types to query. Default: ['A', 'AAAA', 'MX', 'TXT', 'NS']. Any of A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, CAA, DNSKEY, DS, TLSA, HTTPS, SVCB."
458
707
  }
459
708
  },
460
709
  "required": [
461
- "ip"
710
+ "domain"
462
711
  ]
463
712
  }
464
713
  },
465
714
  {
466
- "name": "jwt-decode",
467
- "http_name": "jwt-decode",
468
- "description": "(0.003 USDC/call) JWT decoder / token inspector / debug tool. Splits a JWT into header / payload / signature, base64url-decodes each, parses claims (iss, aud, sub, jti, iat, exp, nbf, kid, alg), and reports clock-validity. Does NOT verify signatures.",
715
+ "name": "domain-age-check",
716
+ "http_name": "domain-age-check",
717
+ "description": "(0.02 USDC/call) Domain age check API / newly registered domain detector / registration date lookup. Same RDAP backend as whois-lookup, listed for fraud, phishing, brand-protection, and lead-enrichment workflows that need domain age and registrar metadata.",
469
718
  "method": "POST",
470
719
  "input_schema": {
471
720
  "type": "object",
472
721
  "properties": {
473
- "jwt": {
722
+ "domain": {
723
+ "type": "string",
724
+ "description": "Domain to check, e.g. 'example.com'."
725
+ },
726
+ "include_certificates": {
727
+ "type": "boolean",
728
+ "description": "Attach crt.sh certificate-transparency summary. Default false."
729
+ }
730
+ },
731
+ "required": [
732
+ "domain"
733
+ ]
734
+ }
735
+ },
736
+ {
737
+ "name": "domain-availability",
738
+ "http_name": "domain-availability",
739
+ "description": "(0.005 USDC/call) Domain availability / RDAP lookup / WHOIS replacement / domain registration checker / expiry date lookup. Returns is_registered, registrar, registration date, expiry date, days_until_expiry, and current EPP status flags for any TLD that supports RDAP (effectively all gTLDs and most ccTLDs). Backed by rdap.org, the public RFC-7480-compliant aggregator. 404s map to is_registered: false rather than an error.",
740
+ "method": "POST",
741
+ "input_schema": {
742
+ "type": "object",
743
+ "properties": {
744
+ "domain": {
474
745
  "type": "string",
475
- "description": "JWT (with or without 'Bearer ' prefix)."
746
+ "description": "Domain to check (e.g. 'example.com'). Strip protocol/path automatically."
476
747
  }
477
748
  },
478
749
  "required": [
479
- "jwt"
750
+ "domain"
480
751
  ]
481
752
  }
482
753
  },
483
754
  {
484
- "name": "keyword-suggest",
485
- "http_name": "keyword-suggest",
486
- "description": "(0.002 USDC/call) Keyword autocomplete / search suggest / SEO keyword research / query expansion / autocomplete suggestions. Aggregates suggestions from Wikipedia OpenSearch + DuckDuckGo's autocomplete (both public, no auth) into a de-duplicated ranked list. Useful for SEO content-gap analysis, LLM query expansion, agent-driven research.",
755
+ "name": "domain-enrich",
756
+ "http_name": "domain-enrich",
757
+ "description": "(0.01 USDC/call) Domain enrichment API / company enrichment / firmographic lite. Given a domain, website URL, or email, returns normalized domain, inferred company name, MX records, and public homepage metadata including title, description, image, and status. Public-data only; no private enrichment database or social scraping.",
487
758
  "method": "POST",
488
759
  "input_schema": {
489
760
  "type": "object",
490
761
  "properties": {
491
- "query": {
762
+ "domain": {
492
763
  "type": "string",
493
- "description": "Seed query."
764
+ "description": "Company domain or website URL."
494
765
  },
495
- "limit": {
766
+ "email": {
767
+ "type": "string",
768
+ "description": "Optional email address used to derive the domain."
769
+ },
770
+ "company": {
771
+ "type": "string",
772
+ "description": "Optional known company name override."
773
+ }
774
+ }
775
+ }
776
+ },
777
+ {
778
+ "name": "domain-expiry-check",
779
+ "http_name": "domain-expiry-check",
780
+ "description": "(0.02 USDC/call) Domain expiry check API / expiration date lookup / days until domain expires. Same RDAP backend as whois-lookup, exposed for renewal monitoring, vendor-risk checks, and brand-protection agents.",
781
+ "method": "POST",
782
+ "input_schema": {
783
+ "type": "object",
784
+ "properties": {
785
+ "domain": {
786
+ "type": "string"
787
+ },
788
+ "include_certificates": {
789
+ "type": "boolean"
790
+ }
791
+ },
792
+ "required": [
793
+ "domain"
794
+ ]
795
+ }
796
+ },
797
+ {
798
+ "name": "domain-name-generator",
799
+ "http_name": "domain-name-generator",
800
+ "description": "(0.05 USDC/call) Domain name generator / available domain ideas / startup domain finder. Same backend as domain-suggest. Brainstorms domain-friendly names from a concept and checks RDAP availability across allowed TLDs.",
801
+ "method": "POST",
802
+ "input_schema": {
803
+ "type": "object",
804
+ "properties": {
805
+ "concept": {
806
+ "type": "string",
807
+ "description": "Plain-language site, product, or company concept."
808
+ },
809
+ "count": {
496
810
  "type": "number",
497
- "description": "1-50. Default 10."
811
+ "description": "Number of candidates to brainstorm. 1-20. Default 10."
498
812
  },
499
- "source": {
813
+ "tlds": {
814
+ "type": "array",
815
+ "description": "TLDs to check, without dots. Default ['com','ai','dev','io','co']; max 6."
816
+ },
817
+ "tone": {
500
818
  "type": "string",
501
819
  "enum": [
502
- "wikipedia",
503
- "duckduckgo",
504
- "all"
820
+ "neutral",
821
+ "playful",
822
+ "technical",
823
+ "luxury",
824
+ "industrial"
505
825
  ],
506
- "description": "Default 'all'."
826
+ "description": "Naming tone hint. Default neutral."
827
+ }
828
+ },
829
+ "required": [
830
+ "concept"
831
+ ]
832
+ }
833
+ },
834
+ {
835
+ "name": "domain-portfolio-risk",
836
+ "http_name": "domain-portfolio-risk",
837
+ "description": "(0.02 USDC/call) Domain portfolio risk API / registrar and expiry audit / brand-domain inventory check. Same RDAP backend as whois-lookup, discoverable for agents checking individual portfolio domains for age, expiry, registrar, DNSSEC, nameservers, and lock status before renewal or acquisition decisions.",
838
+ "method": "POST",
839
+ "input_schema": {
840
+ "type": "object",
841
+ "properties": {
842
+ "domain": {
843
+ "type": "string",
844
+ "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain before query."
845
+ },
846
+ "include_certificates": {
847
+ "type": "boolean",
848
+ "description": "If true, fetch a crt.sh certificate-transparency summary (issuer counts, first/last seen, total certs). Default false."
849
+ }
850
+ },
851
+ "required": [
852
+ "domain"
853
+ ]
854
+ }
855
+ },
856
+ {
857
+ "name": "domain-renewal-monitor",
858
+ "http_name": "domain-renewal-monitor",
859
+ "description": "(0.02 USDC/call) Domain renewal monitor API / expiration date checker / vendor domain expiry watch. Same RDAP backend as whois-lookup, discoverable for agents tracking renewal deadlines, registrar metadata, nameservers, and expiring-soon risk flags.",
860
+ "method": "POST",
861
+ "input_schema": {
862
+ "type": "object",
863
+ "properties": {
864
+ "domain": {
865
+ "type": "string",
866
+ "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain before query."
867
+ },
868
+ "include_certificates": {
869
+ "type": "boolean",
870
+ "description": "If true, fetch a crt.sh certificate-transparency summary (issuer counts, first/last seen, total certs). Default false."
871
+ }
872
+ },
873
+ "required": [
874
+ "domain"
875
+ ]
876
+ }
877
+ },
878
+ {
879
+ "name": "domain-risk-check",
880
+ "http_name": "domain-risk-check",
881
+ "description": "(0.02 USDC/call) Domain risk check API / phishing triage / brand-protection domain screen. Same backend as whois-lookup; returns domain age, expiration, registrar, nameservers, DNSSEC, status codes, and risk flags such as newly-registered or expiring-soon.",
882
+ "method": "POST",
883
+ "input_schema": {
884
+ "type": "object",
885
+ "properties": {
886
+ "domain": {
887
+ "type": "string"
888
+ },
889
+ "include_certificates": {
890
+ "type": "boolean"
891
+ }
892
+ },
893
+ "required": [
894
+ "domain"
895
+ ]
896
+ }
897
+ },
898
+ {
899
+ "name": "domain-suggest",
900
+ "http_name": "domain-suggest",
901
+ "description": "(0.05 USDC/call) Brandable domain suggester / startup-name brainstormer / product-name proposer / domain candidate generator. LLM brainstorms N short brandable candidates fitting a concept + tone, then verifies TLD availability across up to 6 TLDs via in-process domain-availability lookups. Returns candidates ranked by # available TLDs then brandability score, with per-TLD registrar info for each candidate. Pair with brand-clearance (Prooflayer) on the shortlist for trademark + Wikipedia + HN signal before adopting. Allowlisted TLDs: com, ai, dev, io, co, app, xyz, org, net, tech, tools, page, studio, shop.",
902
+ "method": "POST",
903
+ "input_schema": {
904
+ "type": "object",
905
+ "properties": {
906
+ "concept": {
907
+ "type": "string",
908
+ "description": "Plain-language product / project description (1-240 chars). Example: 'graded-card portfolio tracker for collectors' or 'paid AI utility primitives for agents'."
909
+ },
910
+ "count": {
911
+ "type": "number",
912
+ "description": "Number of candidates to brainstorm. 1-20. Default 10. Multiplied by tlds.length must stay <= 80 lookups."
913
+ },
914
+ "tlds": {
915
+ "type": "array",
916
+ "description": "TLDs to check, without dots. Default ['com','ai','dev','io','co']. Allowlist: com, ai, dev, io, co, app, xyz, org, net, tech, tools, page, studio, shop. Max 6."
917
+ },
918
+ "tone": {
919
+ "type": "string",
920
+ "enum": [
921
+ "neutral",
922
+ "playful",
923
+ "technical",
924
+ "luxury",
925
+ "industrial"
926
+ ],
927
+ "description": "Naming tone hint passed to the brainstorm LLM. Default 'neutral'."
928
+ }
929
+ },
930
+ "required": [
931
+ "concept"
932
+ ]
933
+ }
934
+ },
935
+ {
936
+ "name": "email",
937
+ "http_name": "email",
938
+ "description": "(0.005 USDC/call) Email validation API / email deliverability check / email verifier. Validates address syntax, checks MX reachability, detects disposable/temp-mail domains and role accounts, and summarizes SPF/DMARC/DKIM posture. This endpoint does not send email and does not probe the recipient mailbox; it is DNS + public blocklist only.",
939
+ "method": "POST",
940
+ "input_schema": {
941
+ "type": "object",
942
+ "properties": {
943
+ "email": {
944
+ "type": "string",
945
+ "description": "Email address to validate and score, e.g. 'buyer@example.com'."
946
+ },
947
+ "dkim_selectors": {
948
+ "type": "array",
949
+ "items": {
950
+ "type": "string"
951
+ },
952
+ "description": "Optional DKIM selectors to check."
953
+ }
954
+ },
955
+ "required": [
956
+ "email"
957
+ ]
958
+ }
959
+ },
960
+ {
961
+ "name": "email-deliverability",
962
+ "http_name": "email-deliverability",
963
+ "description": "(0.005 USDC/call) Email deliverability API / email deliverability verification / email deliverability score / inbox readiness domain check. Validates address format, MX reachability, temp-mail risk, role mailbox risk, and SPF/DMARC/DKIM authentication records without contacting the recipient mailbox.",
964
+ "method": "POST",
965
+ "input_schema": {
966
+ "type": "object",
967
+ "properties": {
968
+ "email": {
969
+ "type": "string",
970
+ "description": "Email address to validate and score, e.g. 'buyer@example.com'."
971
+ },
972
+ "dkim_selectors": {
973
+ "type": "array",
974
+ "items": {
975
+ "type": "string"
976
+ },
977
+ "description": "Optional DKIM selectors to check."
978
+ }
979
+ },
980
+ "required": [
981
+ "email"
982
+ ]
983
+ }
984
+ },
985
+ {
986
+ "name": "email-deliverability-check",
987
+ "http_name": "email-deliverability-check",
988
+ "description": "(0.005 USDC/call) Email deliverability verification API / email validation / email verifier / email checker / inbox readiness score / MX lookup / disposable email risk / role-account detection / SPF DMARC DKIM posture. Validates syntax, checks whether the domain can receive mail, scores domain-level deliverability risk, detects temp-mail/disposable domains, flags role accounts, and summarizes SPF/DMARC/DKIM records. No mailbox-level SMTP probing; privacy-safe DNS + public blocklist only.",
989
+ "method": "POST",
990
+ "input_schema": {
991
+ "type": "object",
992
+ "properties": {
993
+ "email": {
994
+ "type": "string",
995
+ "description": "Email address to validate and score, e.g. 'buyer@example.com'."
996
+ },
997
+ "dkim_selectors": {
998
+ "type": "array",
999
+ "items": {
1000
+ "type": "string"
1001
+ },
1002
+ "description": "Optional DKIM selectors to check. Defaults to common selectors such as google, selector1, selector2, s1, and s2."
1003
+ }
1004
+ },
1005
+ "required": [
1006
+ "email"
1007
+ ]
1008
+ }
1009
+ },
1010
+ {
1011
+ "name": "email-deliverability-score",
1012
+ "http_name": "email-deliverability-score",
1013
+ "description": "(0.005 USDC/call) Email deliverability score API / inbox readiness score / email health check. Returns a 0-100 domain-level deliverability score from syntax, MX, disposable-domain, role-account, SPF, DMARC, and DKIM signals. No SMTP mailbox probe.",
1014
+ "method": "POST",
1015
+ "input_schema": {
1016
+ "type": "object",
1017
+ "properties": {
1018
+ "email": {
1019
+ "type": "string",
1020
+ "description": "Email address to validate and score, e.g. 'buyer@example.com'."
1021
+ },
1022
+ "dkim_selectors": {
1023
+ "type": "array",
1024
+ "items": {
1025
+ "type": "string"
1026
+ },
1027
+ "description": "Optional DKIM selectors to check."
1028
+ }
1029
+ },
1030
+ "required": [
1031
+ "email"
1032
+ ]
1033
+ }
1034
+ },
1035
+ {
1036
+ "name": "email-domain-age-check",
1037
+ "http_name": "email-domain-age-check",
1038
+ "description": "(0.02 USDC/call) Email domain age check API / sender-domain diligence / cold-email risk screen. Same RDAP backend as whois-lookup, discoverable for agents validating whether a sender or lead domain is established, expiring, DNSSEC-signed, or newly registered.",
1039
+ "method": "POST",
1040
+ "input_schema": {
1041
+ "type": "object",
1042
+ "properties": {
1043
+ "domain": {
1044
+ "type": "string",
1045
+ "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain before query."
1046
+ },
1047
+ "include_certificates": {
1048
+ "type": "boolean",
1049
+ "description": "If true, fetch a crt.sh certificate-transparency summary (issuer counts, first/last seen, total certs). Default false."
1050
+ }
1051
+ },
1052
+ "required": [
1053
+ "domain"
1054
+ ]
1055
+ }
1056
+ },
1057
+ {
1058
+ "name": "email-validator",
1059
+ "http_name": "email-validator",
1060
+ "description": "(0.005 USDC/call) Email validator / email syntax and domain validation / MX record checker / disposable email checker / domain email health API. Returns deliverability score, risk bucket, MX records, disposable-domain match, role-account signal, and SPF/DMARC/DKIM posture.",
1061
+ "method": "POST",
1062
+ "input_schema": {
1063
+ "type": "object",
1064
+ "properties": {
1065
+ "email": {
1066
+ "type": "string",
1067
+ "description": "Email address to validate and score, e.g. 'buyer@example.com'."
1068
+ },
1069
+ "dkim_selectors": {
1070
+ "type": "array",
1071
+ "items": {
1072
+ "type": "string"
1073
+ },
1074
+ "description": "Optional DKIM selectors to check."
1075
+ }
1076
+ },
1077
+ "required": [
1078
+ "email"
1079
+ ]
1080
+ }
1081
+ },
1082
+ {
1083
+ "name": "email-verify",
1084
+ "http_name": "email-verify",
1085
+ "description": "(0.005 USDC/call) Email verifier / email verification API / validate email address / email deliverability verification. DNS-based address and domain risk check with MX, disposable-domain, role-account, SPF, DMARC, and DKIM signals. Privacy-safe: does not probe the recipient mailbox.",
1086
+ "method": "POST",
1087
+ "input_schema": {
1088
+ "type": "object",
1089
+ "properties": {
1090
+ "email": {
1091
+ "type": "string",
1092
+ "description": "Email address to validate and score, e.g. 'buyer@example.com'."
1093
+ },
1094
+ "dkim_selectors": {
1095
+ "type": "array",
1096
+ "items": {
1097
+ "type": "string"
1098
+ },
1099
+ "description": "Optional DKIM selectors to check."
1100
+ }
1101
+ },
1102
+ "required": [
1103
+ "email"
1104
+ ]
1105
+ }
1106
+ },
1107
+ {
1108
+ "name": "email-verify-api",
1109
+ "http_name": "email-verify-api",
1110
+ "description": "(0.005 USDC/call) Email verify API / email verification endpoint / validate email address. Same DNS-safe email deliverability backend as email-verify, indexed for agents looking for exact email verification wording with syntax, MX, disposable-domain, role-account, SPF, DMARC, and DKIM checks.",
1111
+ "method": "POST",
1112
+ "input_schema": {
1113
+ "type": "object",
1114
+ "properties": {
1115
+ "email": {
1116
+ "type": "string",
1117
+ "description": "Email address to validate and score, e.g. 'buyer@example.com'."
1118
+ },
1119
+ "dkim_selectors": {
1120
+ "type": "array",
1121
+ "items": {
1122
+ "type": "string"
1123
+ },
1124
+ "description": "Optional DKIM selectors to check."
1125
+ }
1126
+ },
1127
+ "required": [
1128
+ "email"
1129
+ ]
1130
+ }
1131
+ },
1132
+ {
1133
+ "name": "expand-url",
1134
+ "http_name": "expand-url",
1135
+ "description": "(0.02 USDC/call) URL expander / redirect chain tracer / link unshortener / shortlink resolver / bit.ly + t.co + lnkd.in + goo.gl + tinyurl resolver / final-URL fetcher / phishing redirect inspector. Walks the HTTP redirect chain hop-by-hop, returning every step with status code, Location header, redirect_type (permanent / temporary / meta / js), per-hop duration, and content-type, plus the final landing URL and total trace time. Useful for unmasking shortened links before fetch, and for forensic / security analysis of suspicious redirects.",
1136
+ "method": "POST",
1137
+ "input_schema": {
1138
+ "type": "object",
1139
+ "properties": {
1140
+ "url": {
1141
+ "type": "string",
1142
+ "description": "Starting URL (typically a shortlink). Must be http(s)."
1143
+ },
1144
+ "max_hops": {
1145
+ "type": "number",
1146
+ "description": "Maximum redirect hops to follow. 1-20. Default 10."
1147
+ },
1148
+ "user_agent": {
1149
+ "type": "string",
1150
+ "description": "Optional User-Agent header to send (some shorteners gate by UA). Default is a generic browser UA."
1151
+ }
1152
+ },
1153
+ "required": [
1154
+ "url"
1155
+ ]
1156
+ }
1157
+ },
1158
+ {
1159
+ "name": "github-readme",
1160
+ "http_name": "github-readme",
1161
+ "description": "(0.002 USDC/call) GitHub README fetch / repo readme / open-source-readme-as-markdown / package documentation puller. Pulls the raw README markdown for any public GitHub repository via the official GitHub REST API — no auth required for public repos. Returns the unaltered markdown plus byte size and char count. Useful for agents documenting a stack, explaining a library, or snipping an example.",
1162
+ "method": "POST",
1163
+ "input_schema": {
1164
+ "type": "object",
1165
+ "properties": {
1166
+ "repo": {
1167
+ "type": "string",
1168
+ "description": "Repository in 'owner/name' form (e.g. 'vercel/next.js')."
1169
+ }
1170
+ },
1171
+ "required": [
1172
+ "repo"
1173
+ ]
1174
+ }
1175
+ },
1176
+ {
1177
+ "name": "github-stars-history",
1178
+ "http_name": "github-stars-history",
1179
+ "description": "(0.005 USDC/call) GitHub stars history / star growth chart / repo popularity over time / trending tracker. Current star count plus a sampled cumulative-stars-vs-date series for any public GitHub repo. Walks 1-10 evenly-spaced pages of /stargazers using application/vnd.github.star+json so each sample carries a starred_at timestamp. Free public API, no auth (subject to GitHub's 60 req/h unauthenticated limit).",
1180
+ "method": "POST",
1181
+ "input_schema": {
1182
+ "type": "object",
1183
+ "properties": {
1184
+ "repo": {
1185
+ "type": "string",
1186
+ "description": "Repository in 'owner/name' form."
1187
+ },
1188
+ "pages": {
1189
+ "type": "number",
1190
+ "description": "How many sample pages to walk. Range [1, 10]. Default 5."
1191
+ }
1192
+ },
1193
+ "required": [
1194
+ "repo"
1195
+ ]
1196
+ }
1197
+ },
1198
+ {
1199
+ "name": "google-search",
1200
+ "http_name": "google-search",
1201
+ "description": "(0.01 USDC/call) Google Search API / web SERP API / agent source discovery. Returns ranked Google organic results with title, URL, snippet, domain, and optional recency filter via Decodo Google Search. For cited synthesis use answer-web; for page extraction use scrape-to-json.",
1202
+ "method": "POST",
1203
+ "input_schema": {
1204
+ "type": "object",
1205
+ "properties": {
1206
+ "query": {
1207
+ "type": "string",
1208
+ "description": "Search query. 1-500 chars."
1209
+ },
1210
+ "num_results": {
1211
+ "type": "number",
1212
+ "description": "Number of results to return. Default 10, max 20."
1213
+ },
1214
+ "include_text": {
1215
+ "type": "boolean",
1216
+ "description": "Whether to include fetched page text when available."
1217
+ },
1218
+ "recency": {
1219
+ "type": "string",
1220
+ "enum": [
1221
+ "day",
1222
+ "week",
1223
+ "month",
1224
+ "year",
1225
+ "any"
1226
+ ],
1227
+ "description": "Optional freshness filter. Default 'any'."
1228
+ }
1229
+ },
1230
+ "required": [
1231
+ "query"
1232
+ ]
1233
+ }
1234
+ },
1235
+ {
1236
+ "name": "hacker-news-search",
1237
+ "http_name": "hacker-news-search",
1238
+ "description": "(0.001 USDC/call) Hacker News search / HN search / yc-news / Algolia HN. Searches 30M+ Hacker News stories and comments. Filter by type (story/comment/poll), author, min points, ISO8601 date range; sort by relevance or recency. Returns title, author, points, comment count, URL.",
1239
+ "method": "POST",
1240
+ "input_schema": {
1241
+ "type": "object",
1242
+ "properties": {
1243
+ "query": {
1244
+ "type": "string",
1245
+ "description": "Free-text search query (matches title, body, author, URL)."
1246
+ },
1247
+ "type": {
1248
+ "type": "string",
1249
+ "enum": [
1250
+ "story",
1251
+ "comment",
1252
+ "poll"
1253
+ ],
1254
+ "description": "Restrict to a single HN item type. Omit to include all types."
1255
+ },
1256
+ "author": {
1257
+ "type": "string",
1258
+ "description": "Filter to a specific HN username (e.g. 'pg', 'dang')."
1259
+ },
1260
+ "min_points": {
1261
+ "type": "number",
1262
+ "description": "Minimum points (upvotes) floor. Comments don't have points; using this implicitly filters to stories."
1263
+ },
1264
+ "since": {
1265
+ "type": "string",
1266
+ "description": "Lower bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
1267
+ },
1268
+ "until": {
1269
+ "type": "string",
1270
+ "description": "Upper bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
1271
+ },
1272
+ "sort": {
1273
+ "type": "string",
1274
+ "enum": [
1275
+ "relevance",
1276
+ "date"
1277
+ ],
1278
+ "description": "'relevance' (default, popularity-weighted) or 'date' (most-recent-first)."
1279
+ },
1280
+ "limit": {
1281
+ "type": "number",
1282
+ "description": "Max hits to return. 1-20. Default 10."
1283
+ }
1284
+ },
1285
+ "required": [
1286
+ "query"
1287
+ ]
1288
+ }
1289
+ },
1290
+ {
1291
+ "name": "handle-availability",
1292
+ "http_name": "handle-availability",
1293
+ "description": "(0.005 USDC/call) Handle availability checker / social username availability / brand handle pre-flight. Same read-only X API backend as x-handle-availability, exposed under a general discovery slug for brand launch workflows. Returns available=true for not-found handles and public profile metrics when claimed.",
1294
+ "method": "POST",
1295
+ "input_schema": {
1296
+ "type": "object",
1297
+ "properties": {
1298
+ "username": {
1299
+ "type": "string",
1300
+ "description": "X/Twitter handle to check, with or without @, e.g. 'launchforge'."
1301
+ }
1302
+ },
1303
+ "required": [
1304
+ "username"
1305
+ ]
1306
+ }
1307
+ },
1308
+ {
1309
+ "name": "hn-search",
1310
+ "http_name": "hn-search",
1311
+ "description": "(0.001 USDC/call) HN search / Hacker News search / yc-news / startup-news search / Algolia HN / who-is-hiring scraper / programmer-news firehose. Searches 30M+ Hacker News stories and comments via the public Algolia HN index. Filter by type (story|comment|poll), author, minimum points, ISO8601 date range (since/until), and sort by relevance or recency. Returns total hit count plus per-hit objectID, title, author, points, comment count, created_at, URL, and story/comment text. Public Algolia API — no auth, commercial-OK.",
1312
+ "method": "POST",
1313
+ "input_schema": {
1314
+ "type": "object",
1315
+ "properties": {
1316
+ "query": {
1317
+ "type": "string",
1318
+ "description": "Free-text search query (matches title, body, author, URL)."
1319
+ },
1320
+ "type": {
1321
+ "type": "string",
1322
+ "enum": [
1323
+ "story",
1324
+ "comment",
1325
+ "poll"
1326
+ ],
1327
+ "description": "Restrict to a single HN item type. Omit to include all types."
1328
+ },
1329
+ "author": {
1330
+ "type": "string",
1331
+ "description": "Filter to a specific HN username (e.g. 'pg', 'dang')."
1332
+ },
1333
+ "min_points": {
1334
+ "type": "number",
1335
+ "description": "Minimum points (upvotes) floor. Comments don't have points; using this implicitly filters to stories."
1336
+ },
1337
+ "since": {
1338
+ "type": "string",
1339
+ "description": "Lower bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
1340
+ },
1341
+ "until": {
1342
+ "type": "string",
1343
+ "description": "Upper bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
1344
+ },
1345
+ "sort": {
1346
+ "type": "string",
1347
+ "enum": [
1348
+ "relevance",
1349
+ "date"
1350
+ ],
1351
+ "description": "'relevance' (default, popularity-weighted) or 'date' (most-recent-first)."
1352
+ },
1353
+ "limit": {
1354
+ "type": "number",
1355
+ "description": "Max hits to return. 1-20. Default 10."
1356
+ }
1357
+ },
1358
+ "required": [
1359
+ "query"
1360
+ ]
1361
+ }
1362
+ },
1363
+ {
1364
+ "name": "homoglyph-check",
1365
+ "http_name": "homoglyph-check",
1366
+ "description": "(0.003 USDC/call) Homoglyph detector / Unicode lookalike scanner / IDN spoof check / phishing-domain inspector / typosquat detector / mixed-script analyzer / zero-width-char finder. Scans text (typically a domain, email, or username) for Cyrillic / Greek / fullwidth / mathematical lookalikes that impersonate ASCII Latin letters, plus zero-width and RTL-override / bidi-control characters. Returns per-character findings (codepoint, block, impersonates), block counts, mixed-script flag, ASCII-folded normalized form, and a 0-100 risk score with bucket.",
1367
+ "method": "POST",
1368
+ "input_schema": {
1369
+ "type": "object",
1370
+ "properties": {
1371
+ "text": {
1372
+ "type": "string",
1373
+ "description": "Input string to scan (domain, email, username, or arbitrary text). UTF-8, max ~10k chars."
1374
+ }
1375
+ },
1376
+ "required": [
1377
+ "text"
1378
+ ]
1379
+ }
1380
+ },
1381
+ {
1382
+ "name": "ip-asn",
1383
+ "http_name": "ip-asn",
1384
+ "description": "(0.001 USDC/call) IP to ASN / IP geolocation / IP-to-ISP lookup / WHOIS for IP / cloud-provider attribution. For any IPv4 or IPv6 address, returns ASN number, ASN org, ISP, country, region, city, postal, latitude/longitude, and timezone. Primary backend: ipapi.co (1k req/day free). Fallback: ip-api.com (45 req/min free). Both are free public APIs with no auth.",
1385
+ "method": "POST",
1386
+ "input_schema": {
1387
+ "type": "object",
1388
+ "properties": {
1389
+ "ip": {
1390
+ "type": "string",
1391
+ "description": "IPv4 or IPv6 address."
1392
+ }
1393
+ },
1394
+ "required": [
1395
+ "ip"
1396
+ ]
1397
+ }
1398
+ },
1399
+ {
1400
+ "name": "jwt-decode",
1401
+ "http_name": "jwt-decode",
1402
+ "description": "(0.003 USDC/call) JWT decoder / JWT parser / JSON Web Token inspector / Bearer token debugger / OAuth ID-token reader / Auth0 + Cognito + Firebase token inspector. Base64URL-decodes header and payload, parses standard claims (iss, aud, sub, exp, iat, nbf, jti), reports algorithm, key id (kid), token type (typ), TTL, and clock-validity (is_expired / is_not_yet_valid / is_currently_valid_by_clock). Does NOT verify signatures — for inspection only, never trust output for auth decisions.",
1403
+ "method": "POST",
1404
+ "input_schema": {
1405
+ "type": "object",
1406
+ "properties": {
1407
+ "jwt": {
1408
+ "type": "string",
1409
+ "description": "Compact-serialization JWT string (three base64url segments separated by '.'). May be prefixed with 'Bearer ' — that prefix is stripped automatically."
1410
+ }
1411
+ },
1412
+ "required": [
1413
+ "jwt"
1414
+ ]
1415
+ }
1416
+ },
1417
+ {
1418
+ "name": "keyword-suggest",
1419
+ "http_name": "keyword-suggest",
1420
+ "description": "(0.002 USDC/call) Keyword autocomplete / search suggest / SEO keyword research / query expansion / autocomplete suggestions. Aggregates suggestions from Wikipedia OpenSearch + DuckDuckGo's autocomplete (both public, no auth) into a de-duplicated ranked list. Useful for SEO content-gap analysis, LLM query expansion, agent-driven research.",
1421
+ "method": "POST",
1422
+ "input_schema": {
1423
+ "type": "object",
1424
+ "properties": {
1425
+ "query": {
1426
+ "type": "string",
1427
+ "description": "Seed query."
1428
+ },
1429
+ "limit": {
1430
+ "type": "number",
1431
+ "description": "1-50. Default 10."
1432
+ },
1433
+ "source": {
1434
+ "type": "string",
1435
+ "enum": [
1436
+ "wikipedia",
1437
+ "duckduckgo",
1438
+ "all"
1439
+ ],
1440
+ "description": "Default 'all'."
1441
+ },
1442
+ "lang": {
1443
+ "type": "string",
1444
+ "description": "Wikipedia language code, e.g. 'en', 'es'. Default 'en'."
1445
+ }
1446
+ },
1447
+ "required": [
1448
+ "query"
1449
+ ]
1450
+ }
1451
+ },
1452
+ {
1453
+ "name": "lead-enrich",
1454
+ "http_name": "lead-enrich",
1455
+ "description": "(0.01 USDC/call) Lead enrichment API / person enrichment / people enrich / email enrichment lite. Given an email, name, domain, or company, normalizes a public-data person record, infers safe display names from email, checks MX records, and optionally reads public homepage metadata for company context. No private people database, LinkedIn scraping, or social-network scraping.",
1456
+ "method": "POST",
1457
+ "input_schema": {
1458
+ "type": "object",
1459
+ "properties": {
1460
+ "email": {
1461
+ "type": "string",
1462
+ "description": "Person email address."
1463
+ },
1464
+ "name": {
1465
+ "type": "string",
1466
+ "description": "Optional known person name."
1467
+ },
1468
+ "domain": {
1469
+ "type": "string",
1470
+ "description": "Optional company domain."
1471
+ },
1472
+ "company": {
1473
+ "type": "string",
1474
+ "description": "Optional known company name."
1475
+ },
1476
+ "include_homepage": {
1477
+ "type": "boolean",
1478
+ "description": "Fetch public homepage metadata when a non-free domain is available. Default true."
1479
+ }
1480
+ }
1481
+ }
1482
+ },
1483
+ {
1484
+ "name": "link-extract",
1485
+ "http_name": "link-extract",
1486
+ "description": "(0.005 USDC/call) Link extractor / extract links from URL / list all anchor links / page outlink crawler / scrape outbound links / get hrefs from page. Fetches an HTML URL and returns every <a> link with its anchor text, rel attribute, and an is_external flag. Resolves relative URLs against the page's <base> or final URL. Lighter than full scrape / metadata endpoints — exact tool for the agent task 'walk this page, pick which links to follow.' Default 500-link cap. SSRF-guarded (no loopback / RFC1918 targets).",
1487
+ "method": "POST",
1488
+ "input_schema": {
1489
+ "type": "object",
1490
+ "properties": {
1491
+ "url": {
1492
+ "type": "string",
1493
+ "description": "Page URL to fetch and extract from. http or https only. Private/loopback targets are rejected. Redirects followed."
1494
+ },
1495
+ "include_external_only": {
1496
+ "type": "boolean",
1497
+ "description": "If true, drop same-host links. Default false (return all)."
1498
+ },
1499
+ "max_links": {
1500
+ "type": "number",
1501
+ "description": "Max links to return (1-2000). Default 500. Pagination beyond max isn't supported; tighten the URL instead."
1502
+ },
1503
+ "include_text": {
1504
+ "type": "boolean",
1505
+ "description": "If true (default), include the anchor's visible text. Set false to skip text extraction."
1506
+ },
1507
+ "timeout_ms": {
1508
+ "type": "number",
1509
+ "description": "Fetch timeout. Default 12000, max 25000."
1510
+ }
1511
+ },
1512
+ "required": [
1513
+ "url"
1514
+ ]
1515
+ }
1516
+ },
1517
+ {
1518
+ "name": "link-unshortener",
1519
+ "http_name": "link-unshortener",
1520
+ "description": "(0.02 USDC/call) Link unshortener API / short URL resolver / phishing redirect inspector. Same expand-url backend, listed for agents unmasking shortened links before fetch, enrichment, or security review.",
1521
+ "method": "POST",
1522
+ "input_schema": {
1523
+ "type": "object",
1524
+ "properties": {
1525
+ "url": {
1526
+ "type": "string",
1527
+ "description": "Starting URL (typically a shortlink). Must be http(s)."
1528
+ },
1529
+ "max_hops": {
1530
+ "type": "number",
1531
+ "description": "Maximum redirect hops to follow. 1-20. Default 10."
1532
+ },
1533
+ "user_agent": {
1534
+ "type": "string",
1535
+ "description": "Optional User-Agent header to send (some shorteners gate by UA). Default is a generic browser UA."
1536
+ }
1537
+ },
1538
+ "required": [
1539
+ "url"
1540
+ ]
1541
+ }
1542
+ },
1543
+ {
1544
+ "name": "ma-domain-diligence",
1545
+ "http_name": "ma-domain-diligence",
1546
+ "description": "(0.02 USDC/call) M&A domain diligence API / acquisition domain history / company website RDAP check. Same whois-lookup backend, listed for deal, finance, and procurement agents that need domain age, expiry, registrar, DNSSEC, nameserver, and transfer signals during diligence.",
1547
+ "method": "POST",
1548
+ "input_schema": {
1549
+ "type": "object",
1550
+ "properties": {
1551
+ "domain": {
1552
+ "type": "string",
1553
+ "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain before query."
1554
+ },
1555
+ "include_certificates": {
1556
+ "type": "boolean",
1557
+ "description": "If true, fetch a crt.sh certificate-transparency summary (issuer counts, first/last seen, total certs). Default false."
1558
+ }
1559
+ },
1560
+ "required": [
1561
+ "domain"
1562
+ ]
1563
+ }
1564
+ },
1565
+ {
1566
+ "name": "market-recap",
1567
+ "http_name": "market-recap",
1568
+ "description": "(0.005 USDC/call) Crypto market recap / market news summary / bitcoin ethereum recap / DeFi headline digest. Builds a short recap from recent GDELT crypto headlines: lead headlines, top sources, sentiment distribution, tone, and one-paragraph recap. Data-only news synthesis; no price prediction, trading advice, or order routing.",
1569
+ "method": "POST",
1570
+ "input_schema": {
1571
+ "type": "object",
1572
+ "properties": {
1573
+ "topic": {
1574
+ "type": "string",
1575
+ "enum": [
1576
+ "crypto",
1577
+ "markets",
1578
+ "defi",
1579
+ "bitcoin",
1580
+ "ethereum",
1581
+ "stablecoins"
1582
+ ],
1583
+ "description": "Preset topic. Default crypto."
1584
+ },
1585
+ "query": {
1586
+ "type": "string",
1587
+ "description": "Optional GDELT query override, max 240 chars."
1588
+ },
1589
+ "limit": {
1590
+ "type": "number",
1591
+ "description": "Headlines to summarize, 1-30. Default 12."
1592
+ },
1593
+ "hours": {
1594
+ "type": "number",
1595
+ "description": "Lookback window in hours, 1-168. Default 48."
1596
+ }
1597
+ }
1598
+ }
1599
+ },
1600
+ {
1601
+ "name": "mcp-tools-list",
1602
+ "http_name": "mcp-tools-list",
1603
+ "description": "(0.005 USDC/call) MCP tools-list / Model Context Protocol discovery / list MCP server tools / tools/list JSON-RPC / agent capability discovery / MCP catalog lookup. Pass any MCP server URL (HTTP transport) — completes the initialize handshake and returns the tool catalog (names, descriptions, JSON-schema input shapes). Optionally also lists resources and prompts. Pure agent infrastructure: an agent that discovers an unknown MCP server URL gets back its capabilities without running its own MCP client. SSRF-guarded (no loopback / RFC1918 targets).",
1604
+ "method": "POST",
1605
+ "input_schema": {
1606
+ "type": "object",
1607
+ "properties": {
1608
+ "url": {
1609
+ "type": "string",
1610
+ "description": "Full URL to the MCP server's JSON-RPC HTTP endpoint (e.g. 'https://server.example.com/mcp'). http or https only; private/loopback targets rejected."
1611
+ },
1612
+ "timeout_ms": {
1613
+ "type": "number",
1614
+ "description": "Per-call timeout. Default 12000, max 25000."
1615
+ },
1616
+ "list_resources": {
1617
+ "type": "boolean",
1618
+ "description": "Also call resources/list. Default false. Best-effort — many servers don't expose resources."
1619
+ },
1620
+ "list_prompts": {
1621
+ "type": "boolean",
1622
+ "description": "Also call prompts/list. Default false. Best-effort."
1623
+ }
1624
+ },
1625
+ "required": [
1626
+ "url"
1627
+ ]
1628
+ }
1629
+ },
1630
+ {
1631
+ "name": "mentions",
1632
+ "http_name": "mentions",
1633
+ "description": "(0.006 USDC/call) Mentions API / X mentions search / Twitter mention monitor / public social mention search. Searches recent public X posts for a brand, handle, URL, ticker, or phrase and returns matching posts with author and metric fields. Uses X API v2 recent search. Read-only; no posting, replying, liking, following, or account mutation.",
1634
+ "method": "POST",
1635
+ "input_schema": {
1636
+ "type": "object",
1637
+ "properties": {
1638
+ "query": {
1639
+ "type": "string",
1640
+ "description": "Mention query, e.g. '@bankrbot', 'agentutility.ai', or 'x402 payments'."
1641
+ },
1642
+ "max_results": {
1643
+ "type": "number",
1644
+ "description": "Number of recent posts to fetch. Clamped to 10-50. Default 10."
1645
+ },
1646
+ "language": {
1647
+ "type": "string",
1648
+ "description": "Optional two-letter language filter."
1649
+ }
1650
+ },
1651
+ "required": [
1652
+ "query"
1653
+ ]
1654
+ }
1655
+ },
1656
+ {
1657
+ "name": "mindshare",
1658
+ "http_name": "mindshare",
1659
+ "description": "(0.008 USDC/call) Mindshare API / social mindshare / X conversation share / Twitter sentiment summary. Searches recent public X posts for a topic and returns tweet-level sentiment plus aggregate positive/neutral/negative distribution and average score. Searches recent X posts with sentiment scoring. Read-only; no posting, replying, liking, following, or account mutation.",
1660
+ "method": "POST",
1661
+ "input_schema": {
1662
+ "type": "object",
1663
+ "properties": {
1664
+ "query": {
1665
+ "type": "string",
1666
+ "description": "Topic, brand, ticker, protocol, or phrase to search on X."
1667
+ },
1668
+ "max_results": {
1669
+ "type": "number",
1670
+ "description": "Recent public posts to fetch. Clamped to 10-50. Default 10."
1671
+ },
1672
+ "language": {
1673
+ "type": "string",
1674
+ "description": "Optional two-letter language filter, e.g. 'en'."
1675
+ }
1676
+ },
1677
+ "required": [
1678
+ "query"
1679
+ ]
1680
+ }
1681
+ },
1682
+ {
1683
+ "name": "npm-package-stats",
1684
+ "http_name": "npm-package-stats",
1685
+ "description": "(0.003 USDC/call) npm package stats / npm registry lookup / npm downloads / package release history / package metadata. Fetches the public npm registry record for a package and returns description, license, repository, latest version, total version count, recent versions with publish timestamps and deprecation flags, age in days, days since last release, maintainer count + list, and downloads for the last day, week, month, year. The npm registry numbers behind package-risk-npm — just the metrics, without the risk write-up. Public npm registry (registry.npmjs.org + api.npmjs.org), commercial use permitted under the npm Public Registry Open Source Terms.",
1686
+ "method": "POST",
1687
+ "input_schema": {
1688
+ "type": "object",
1689
+ "properties": {
1690
+ "package": {
1691
+ "type": "string",
1692
+ "description": "npm package name. Supports scoped names ('@types/node', '@vercel/next')."
1693
+ },
1694
+ "recent_versions": {
1695
+ "type": "number",
1696
+ "description": "How many most-recent version entries to include. 1-20. Default 5."
1697
+ }
1698
+ },
1699
+ "required": [
1700
+ "package"
1701
+ ]
1702
+ }
1703
+ },
1704
+ {
1705
+ "name": "password-strength",
1706
+ "http_name": "password-strength",
1707
+ "description": "(0.02 USDC/call) Password strength meter / password checker / password entropy calculator / zxcvbn-style score / HIBP breach lookup / pwned password check / password validator. Returns 0-100 score and weak/fair/good/strong/excellent bucket, Shannon entropy bits, charset size, character-class breakdown (lower/upper/numbers/symbols), common-pattern detection (sequences, keyboard walks, repeats, dictionary words), and crack-time estimates across throttled/unthrottled/offline-slow/offline-fast attacker models. Plus optional Have-I-Been-Pwned k-anonymity breach lookup — only the first 5 chars of the SHA-1 hash leave the worker.",
1708
+ "method": "POST",
1709
+ "input_schema": {
1710
+ "type": "object",
1711
+ "properties": {
1712
+ "password": {
1713
+ "type": "string",
1714
+ "description": "Password to score. Sent over TLS to the worker but never logged. Max 200 chars."
1715
+ },
1716
+ "check_breaches": {
1717
+ "type": "boolean",
1718
+ "description": "If true (default), also performs a HIBP k-anonymity lookup and returns breach_count + is_breached. Set false to skip the network call for fully offline scoring."
1719
+ }
1720
+ },
1721
+ "required": [
1722
+ "password"
1723
+ ]
1724
+ }
1725
+ },
1726
+ {
1727
+ "name": "people-enrich",
1728
+ "http_name": "people-enrich",
1729
+ "description": "(0.01 USDC/call) People enrichment API / person enrichment / email enrichment / lead enrichment lite / Apollo alternative for agents. Given email, name, domain, or company, normalizes the person record, infers a display name from email when safe, detects free-email domains, fetches MX records via Cloudflare DNS, and optionally reads public homepage metadata for company context. Public-data only; does not use private people databases, LinkedIn scraping, or social-network scraping.",
1730
+ "method": "POST",
1731
+ "input_schema": {
1732
+ "type": "object",
1733
+ "properties": {
1734
+ "email": {
1735
+ "type": "string",
1736
+ "description": "Person email address, e.g. jane.doe@example.com."
1737
+ },
1738
+ "name": {
1739
+ "type": "string",
1740
+ "description": "Optional known person name."
1741
+ },
1742
+ "domain": {
1743
+ "type": "string",
1744
+ "description": "Optional company domain."
1745
+ },
1746
+ "company": {
1747
+ "type": "string",
1748
+ "description": "Optional known company name."
1749
+ },
1750
+ "include_homepage": {
1751
+ "type": "boolean",
1752
+ "description": "Fetch public homepage metadata when a non-free domain is available. Default true."
1753
+ }
1754
+ }
1755
+ }
1756
+ },
1757
+ {
1758
+ "name": "people-search",
1759
+ "http_name": "people-search",
1760
+ "description": "(0.01 USDC/call) People search API / lead lookup / lightweight people enrichment. Accepts email/name/domain/company context and returns a normalized public-data person record with inferred name, domain, company, MX records, and homepage context when available. It is enrichment from caller-supplied identifiers, not a private people database.",
1761
+ "method": "POST",
1762
+ "input_schema": {
1763
+ "type": "object",
1764
+ "properties": {
1765
+ "email": {
1766
+ "type": "string",
1767
+ "description": "Person email address."
1768
+ },
1769
+ "name": {
1770
+ "type": "string",
1771
+ "description": "Optional known person name."
1772
+ },
1773
+ "domain": {
1774
+ "type": "string",
1775
+ "description": "Optional company domain."
1776
+ },
1777
+ "company": {
1778
+ "type": "string",
1779
+ "description": "Optional known company name."
1780
+ },
1781
+ "include_homepage": {
1782
+ "type": "boolean",
1783
+ "description": "Fetch public homepage metadata when available. Default true."
1784
+ }
1785
+ }
1786
+ }
1787
+ },
1788
+ {
1789
+ "name": "person-enrich",
1790
+ "http_name": "person-enrich",
1791
+ "description": "(0.01 USDC/call) Person enrichment API / people enrichment / email-to-person profile lite. Normalizes a person record from email/name/domain/company inputs using public DNS and homepage metadata. Designed for agents that need lightweight enrichment without private data brokers or social scraping.",
1792
+ "method": "POST",
1793
+ "input_schema": {
1794
+ "type": "object",
1795
+ "properties": {
1796
+ "email": {
1797
+ "type": "string",
1798
+ "description": "Person email address."
1799
+ },
1800
+ "name": {
1801
+ "type": "string",
1802
+ "description": "Optional known person name."
1803
+ },
1804
+ "domain": {
1805
+ "type": "string",
1806
+ "description": "Optional company domain."
1807
+ },
1808
+ "company": {
1809
+ "type": "string",
1810
+ "description": "Optional known company name."
1811
+ },
1812
+ "include_homepage": {
1813
+ "type": "boolean",
1814
+ "description": "Fetch public homepage metadata when available. Default true."
1815
+ }
1816
+ }
1817
+ }
1818
+ },
1819
+ {
1820
+ "name": "phishing-domain-triage",
1821
+ "http_name": "phishing-domain-triage",
1822
+ "description": "(0.02 USDC/call) Phishing domain triage API / suspicious domain age and registrar risk check. Same RDAP backend as whois-lookup, surfaced for security agents screening newly registered lookalike domains, DNSSEC status, expiration, registrar, and EPP lock flags.",
1823
+ "method": "POST",
1824
+ "input_schema": {
1825
+ "type": "object",
1826
+ "properties": {
1827
+ "domain": {
1828
+ "type": "string",
1829
+ "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain before query."
1830
+ },
1831
+ "include_certificates": {
1832
+ "type": "boolean",
1833
+ "description": "If true, fetch a crt.sh certificate-transparency summary (issuer counts, first/last seen, total certs). Default false."
1834
+ }
1835
+ },
1836
+ "required": [
1837
+ "domain"
1838
+ ]
1839
+ }
1840
+ },
1841
+ {
1842
+ "name": "product-name-score",
1843
+ "http_name": "product-name-score",
1844
+ "description": "(0.005 USDC/call) Product name score API / product naming evaluator / feature name quality check. Same backend as brand-name-score, surfaced for agents naming products, features, apps, tools, newsletters, and APIs.",
1845
+ "method": "POST",
1846
+ "input_schema": {
1847
+ "type": "object",
1848
+ "properties": {
1849
+ "name": {
1850
+ "type": "string",
1851
+ "description": "Candidate product, app, feature, tool, or project name."
1852
+ },
1853
+ "concept": {
1854
+ "type": "string",
1855
+ "description": "Optional product concept used to score semantic fit."
1856
+ },
1857
+ "audience": {
1858
+ "type": "string",
1859
+ "description": "Optional target audience context."
1860
+ },
1861
+ "tlds": {
1862
+ "type": "array",
1863
+ "description": "Optional TLD list used to emit domain candidate strings. Does not check availability."
1864
+ }
1865
+ },
1866
+ "required": [
1867
+ "name"
1868
+ ]
1869
+ }
1870
+ },
1871
+ {
1872
+ "name": "pubmed-search",
1873
+ "http_name": "pubmed-search",
1874
+ "description": "(0.01 USDC/call) PubMed search / biomedical literature search / medical journal lookup / NIH paper search / clinical-research finder / MeSH-term query / NCBI E-utilities wrapper. Searches PubMed for biomedical articles by free-text query, with optional date range and sort (relevance / pub_date / first_author). Returns total hit count plus PMID, title, authors, journal, publication date, abstract, MeSH terms, and DOI per paper. Federal public-domain data via NCBI.",
1875
+ "method": "POST",
1876
+ "input_schema": {
1877
+ "type": "object",
1878
+ "properties": {
1879
+ "query": {
1880
+ "type": "string",
1881
+ "description": "PubMed query string. Supports field tags ('cancer[Title]', 'Smith J[Author]'), boolean operators, and MeSH terms."
1882
+ },
1883
+ "limit": {
1884
+ "type": "number",
1885
+ "description": "Max papers to return. 1-50. Default 10."
1886
+ },
1887
+ "date_from": {
1888
+ "type": "string",
1889
+ "description": "Lower bound on publication date (YYYY/MM/DD or YYYY-MM-DD)."
1890
+ },
1891
+ "date_to": {
1892
+ "type": "string",
1893
+ "description": "Upper bound on publication date (YYYY/MM/DD or YYYY-MM-DD)."
1894
+ },
1895
+ "sort": {
1896
+ "type": "string",
1897
+ "enum": [
1898
+ "relevance",
1899
+ "pub_date",
1900
+ "first_author"
1901
+ ],
1902
+ "description": "Result ordering. Default 'relevance'."
1903
+ },
1904
+ "include_abstract": {
1905
+ "type": "boolean",
1906
+ "description": "If true (default), include the abstract text per paper. Set false for a smaller, faster response."
1907
+ }
1908
+ },
1909
+ "required": [
1910
+ "query"
1911
+ ]
1912
+ }
1913
+ },
1914
+ {
1915
+ "name": "pypi-package-stats",
1916
+ "http_name": "pypi-package-stats",
1917
+ "description": "(0.003 USDC/call) PyPI package stats / Python package registry lookup / pip package metadata / pypistats downloads / Python ecosystem metadata. Fetches the public PyPI JSON record for a Python package and returns summary, license, homepage, repository, documentation, issues URL, author, maintainer, classifiers, latest version, total version count, recent versions with publish timestamps and yanked flags, age in days, days_since_last_release. Also pulls last-day / last-week / last-month download counts from pypistats.org (Linehaul-derived). Lightweight companion to package-risk-pypi for cases where you just need the numbers, no risk synthesis. Public PyPI + pypistats APIs, no auth.",
1918
+ "method": "POST",
1919
+ "input_schema": {
1920
+ "type": "object",
1921
+ "properties": {
1922
+ "package": {
1923
+ "type": "string",
1924
+ "description": "PyPI package name. Case-insensitive; PEP 503 normalization applied internally."
1925
+ },
1926
+ "recent_versions": {
1927
+ "type": "number",
1928
+ "description": "How many most-recent versions to include. 1-20. Default 5."
1929
+ }
1930
+ },
1931
+ "required": [
1932
+ "package"
1933
+ ]
1934
+ }
1935
+ },
1936
+ {
1937
+ "name": "qr-code",
1938
+ "http_name": "qr-code",
1939
+ "description": "(0.002 USDC/call) QR code reader / QR code decode API / scan QR from image URL. Reads one or more QR codes from a public PNG, JPG, GIF, BMP, or SVG-rendered image and returns decoded text strings.",
1940
+ "method": "POST",
1941
+ "input_schema": {
1942
+ "type": "object",
1943
+ "properties": {
1944
+ "image_url": {
1945
+ "type": "string",
1946
+ "description": "Public http(s) URL of an image containing one or more QR codes. Must be directly fetchable."
1947
+ }
1948
+ },
1949
+ "required": [
1950
+ "image_url"
1951
+ ]
1952
+ }
1953
+ },
1954
+ {
1955
+ "name": "qr-code-api",
1956
+ "http_name": "qr-code-api",
1957
+ "description": "(0.002 USDC/call) QR code API / QR scanner API / decode QR image endpoint. Same QR decode backend as qr-code, listed for agents reading one or more QR codes from public PNG, JPG, GIF, BMP, or SVG-rendered image URLs.",
1958
+ "method": "POST",
1959
+ "input_schema": {
1960
+ "type": "object",
1961
+ "properties": {
1962
+ "image_url": {
1963
+ "type": "string",
1964
+ "description": "Public http(s) URL of an image containing one or more QR codes. Must be directly fetchable."
1965
+ }
1966
+ },
1967
+ "required": [
1968
+ "image_url"
1969
+ ]
1970
+ }
1971
+ },
1972
+ {
1973
+ "name": "qr-code-decode",
1974
+ "http_name": "qr-code-decode",
1975
+ "description": "(0.002 USDC/call) QR code decode / QR decoder / QR reader / scan QR from URL / QR code OCR / barcode reader / link extraction from QR. Reads QR codes out of any public image URL (PNG / JPG / GIF / BMP) and returns the decoded text strings. Multiple QR codes in a single image are returned as separate entries. Decodes a QR code from an image. Returns an empty `codes` array plus a descriptive `note` if the image can't be fetched or no QR is found.",
1976
+ "method": "POST",
1977
+ "input_schema": {
1978
+ "type": "object",
1979
+ "properties": {
1980
+ "image_url": {
1981
+ "type": "string",
1982
+ "description": "Public http(s) URL of an image containing one or more QR codes. Must be directly fetchable."
1983
+ }
1984
+ },
1985
+ "required": [
1986
+ "image_url"
1987
+ ]
1988
+ }
1989
+ },
1990
+ {
1991
+ "name": "qr-code-generate",
1992
+ "http_name": "qr-code-generate",
1993
+ "description": "(0.001 USDC/call) QR code generator / QR maker / vCard QR / WiFi QR / URL to QR / SVG QR / PNG QR / customizable error correction. Generates a QR code from arbitrary text — URL, vCard, WiFi join string, plain text — and returns it as a base64-encoded PNG (default) or SVG. Configurable size (64-1024 px), error correction level (L/M/Q/H), quiet-zone margin, and foreground/background hex colors.",
1994
+ "method": "POST",
1995
+ "input_schema": {
1996
+ "type": "object",
1997
+ "properties": {
1998
+ "text": {
1999
+ "type": "string",
2000
+ "description": "Text to encode. Any string up to ~4296 chars (alphanumeric)."
2001
+ },
2002
+ "format": {
2003
+ "type": "string",
2004
+ "enum": [
2005
+ "png",
2006
+ "svg"
2007
+ ],
2008
+ "description": "Output image format. Default 'png'."
2009
+ },
2010
+ "size": {
2011
+ "type": "number",
2012
+ "description": "Image side length in pixels. Range [64, 1024]. Default 256."
2013
+ },
2014
+ "error_correction": {
2015
+ "type": "string",
2016
+ "enum": [
2017
+ "L",
2018
+ "M",
2019
+ "Q",
2020
+ "H"
2021
+ ],
2022
+ "description": "Reed-Solomon error-correction level. L=7%, M=15% (default), Q=25%, H=30% redundancy."
2023
+ },
2024
+ "margin": {
2025
+ "type": "number",
2026
+ "description": "Quiet-zone margin in modules. Range [0, 20]. Default 4."
2027
+ },
2028
+ "foreground": {
2029
+ "type": "string",
2030
+ "description": "QR module color as 6 or 8-digit hex (e.g. '#000000'). Default '#000000'."
2031
+ },
2032
+ "background": {
2033
+ "type": "string",
2034
+ "description": "Background color as 6 or 8-digit hex (e.g. '#FFFFFF'). Default '#FFFFFF'."
2035
+ }
2036
+ },
2037
+ "required": [
2038
+ "text"
2039
+ ]
2040
+ }
2041
+ },
2042
+ {
2043
+ "name": "qr-generator",
2044
+ "http_name": "qr-generator",
2045
+ "description": "(0.001 USDC/call) QR generator API / create QR code / text-to-QR / link QR generator. Encodes text, URLs, vCards, WiFi strings, and plain text into PNG or SVG QR codes with configurable size, margin, colors, and error correction.",
2046
+ "method": "POST",
2047
+ "input_schema": {
2048
+ "type": "object",
2049
+ "properties": {
2050
+ "text": {
2051
+ "type": "string",
2052
+ "description": "Text to encode. Any string up to ~4296 chars."
2053
+ },
2054
+ "format": {
2055
+ "type": "string",
2056
+ "enum": [
2057
+ "png",
2058
+ "svg"
2059
+ ],
2060
+ "description": "Output image format. Default 'png'."
2061
+ },
2062
+ "size": {
2063
+ "type": "number",
2064
+ "description": "Image side length in pixels. Range [64, 1024]. Default 256."
2065
+ },
2066
+ "error_correction": {
2067
+ "type": "string",
2068
+ "enum": [
2069
+ "L",
2070
+ "M",
2071
+ "Q",
2072
+ "H"
2073
+ ],
2074
+ "description": "Reed-Solomon error-correction level."
2075
+ },
2076
+ "margin": {
2077
+ "type": "number",
2078
+ "description": "Quiet-zone margin in modules. Range [0, 20]. Default 4."
2079
+ },
2080
+ "foreground": {
2081
+ "type": "string",
2082
+ "description": "QR module color as 6 or 8-digit hex."
2083
+ },
2084
+ "background": {
2085
+ "type": "string",
2086
+ "description": "Background color as 6 or 8-digit hex."
2087
+ }
2088
+ },
2089
+ "required": [
2090
+ "text"
2091
+ ]
2092
+ }
2093
+ },
2094
+ {
2095
+ "name": "qr-maker",
2096
+ "http_name": "qr-maker",
2097
+ "description": "(0.001 USDC/call) QR maker API / QR code maker / URL to QR / text to QR. Generates a PNG or SVG QR code from text, URL, vCard, WiFi join string, or plain text.",
2098
+ "method": "POST",
2099
+ "input_schema": {
2100
+ "type": "object",
2101
+ "properties": {
2102
+ "text": {
2103
+ "type": "string",
2104
+ "description": "Text to encode. Any string up to ~4296 chars."
2105
+ },
2106
+ "format": {
2107
+ "type": "string",
2108
+ "enum": [
2109
+ "png",
2110
+ "svg"
2111
+ ],
2112
+ "description": "Output image format. Default 'png'."
2113
+ },
2114
+ "size": {
2115
+ "type": "number",
2116
+ "description": "Image side length in pixels. Range [64, 1024]. Default 256."
2117
+ },
2118
+ "error_correction": {
2119
+ "type": "string",
2120
+ "enum": [
2121
+ "L",
2122
+ "M",
2123
+ "Q",
2124
+ "H"
2125
+ ],
2126
+ "description": "Reed-Solomon error-correction level."
2127
+ },
2128
+ "margin": {
2129
+ "type": "number",
2130
+ "description": "Quiet-zone margin in modules. Range [0, 20]. Default 4."
2131
+ },
2132
+ "foreground": {
2133
+ "type": "string",
2134
+ "description": "QR module color as 6 or 8-digit hex."
2135
+ },
2136
+ "background": {
2137
+ "type": "string",
2138
+ "description": "Background color as 6 or 8-digit hex."
2139
+ }
2140
+ },
2141
+ "required": [
2142
+ "text"
2143
+ ]
2144
+ }
2145
+ },
2146
+ {
2147
+ "name": "qr-reader",
2148
+ "http_name": "qr-reader",
2149
+ "description": "(0.002 USDC/call) QR reader API / scan QR image / decode QR code from URL. Fetches a public image and returns decoded QR text values, with multiple QR codes returned as separate entries.",
2150
+ "method": "POST",
2151
+ "input_schema": {
2152
+ "type": "object",
2153
+ "properties": {
2154
+ "image_url": {
2155
+ "type": "string",
2156
+ "description": "Public http(s) URL of an image containing one or more QR codes. Must be directly fetchable."
2157
+ }
2158
+ },
2159
+ "required": [
2160
+ "image_url"
2161
+ ]
2162
+ }
2163
+ },
2164
+ {
2165
+ "name": "qr-scanner",
2166
+ "http_name": "qr-scanner",
2167
+ "description": "(0.002 USDC/call) QR scanner API / QR image decoder / scan QR code from URL. Reads QR codes from a public image URL and returns decoded text strings plus source notes.",
2168
+ "method": "POST",
2169
+ "input_schema": {
2170
+ "type": "object",
2171
+ "properties": {
2172
+ "image_url": {
2173
+ "type": "string",
2174
+ "description": "Public http(s) URL of an image containing one or more QR codes. Must be directly fetchable."
2175
+ }
2176
+ },
2177
+ "required": [
2178
+ "image_url"
2179
+ ]
2180
+ }
2181
+ },
2182
+ {
2183
+ "name": "registrar-lookup",
2184
+ "http_name": "registrar-lookup",
2185
+ "description": "(0.02 USDC/call) Registrar lookup API / domain registrar finder / RDAP registrar metadata. Same backend as whois-lookup, discoverable for agents that need registrar name, IANA id, nameservers, DNSSEC, and EPP status codes.",
2186
+ "method": "POST",
2187
+ "input_schema": {
2188
+ "type": "object",
2189
+ "properties": {
2190
+ "domain": {
2191
+ "type": "string"
2192
+ },
2193
+ "include_certificates": {
2194
+ "type": "boolean"
2195
+ }
2196
+ },
2197
+ "required": [
2198
+ "domain"
2199
+ ]
2200
+ }
2201
+ },
2202
+ {
2203
+ "name": "research-brief",
2204
+ "http_name": "research-brief",
2205
+ "description": "(0.10 USDC/call) Structured research brief / company brief / entity profile / topic brief / sales-prep dossier / due-diligence summary / competitive intel / agent-readable research. Given a company, person, product, or topic, builds a fixed-shape JSON brief: overview, key_facts, recent_news (with date hints), all with source-index citations. Combines Decodo Google SERP + parallel cheerio scrape (up to 8 sources) + Morpheus llama-3.3-70b with json_schema response_format.",
2206
+ "method": "POST",
2207
+ "input_schema": {
2208
+ "type": "object",
2209
+ "properties": {
2210
+ "entity_or_topic": {
2211
+ "type": "string",
2212
+ "description": "Entity (company, person, product) or topic. 1-200 chars."
2213
+ },
2214
+ "focus": {
2215
+ "type": "string",
2216
+ "description": "Optional focus area, e.g. 'recent funding rounds'."
2217
+ },
2218
+ "max_sources": {
2219
+ "type": "number",
2220
+ "description": "Max sources. Default 5, max 8."
2221
+ },
2222
+ "language": {
2223
+ "type": "string",
2224
+ "description": "Two-letter language code. Default 'en'."
2225
+ }
2226
+ },
2227
+ "required": [
2228
+ "entity_or_topic"
2229
+ ]
2230
+ }
2231
+ },
2232
+ {
2233
+ "name": "rss-from-anything",
2234
+ "http_name": "rss-from-anything",
2235
+ "description": "(0.04 USDC/call) RSS feed generator / HTML to RSS converter. Auto-detects article items on any HTML page, OR pass CSS selectors. RSS 2.0 output. For sites that don't publish a feed.",
2236
+ "method": "POST",
2237
+ "input_schema": {
2238
+ "type": "object",
2239
+ "properties": {
2240
+ "url": {
2241
+ "type": "string"
2242
+ },
2243
+ "feed_title": {
2244
+ "type": "string"
2245
+ },
2246
+ "item_selector": {
2247
+ "type": "string"
2248
+ },
2249
+ "title_selector": {
2250
+ "type": "string"
2251
+ },
2252
+ "link_selector": {
2253
+ "type": "string"
2254
+ },
2255
+ "date_selector": {
2256
+ "type": "string"
2257
+ },
2258
+ "description_selector": {
2259
+ "type": "string"
2260
+ },
2261
+ "max_items": {
2262
+ "type": "number"
2263
+ }
2264
+ },
2265
+ "required": [
2266
+ "url"
2267
+ ]
2268
+ }
2269
+ },
2270
+ {
2271
+ "name": "sales-lead-domain-enrich",
2272
+ "http_name": "sales-lead-domain-enrich",
2273
+ "description": "(0.02 USDC/call) Sales lead domain enrichment API / company website age / B2B account domain metadata. Same RDAP backend as whois-lookup, listed for enrichment agents that need registrar, domain age, expiry, nameservers, DNSSEC, and domain status codes before outreach.",
2274
+ "method": "POST",
2275
+ "input_schema": {
2276
+ "type": "object",
2277
+ "properties": {
2278
+ "domain": {
2279
+ "type": "string",
2280
+ "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain before query."
2281
+ },
2282
+ "include_certificates": {
2283
+ "type": "boolean",
2284
+ "description": "If true, fetch a crt.sh certificate-transparency summary (issuer counts, first/last seen, total certs). Default false."
2285
+ }
2286
+ },
2287
+ "required": [
2288
+ "domain"
2289
+ ]
2290
+ }
2291
+ },
2292
+ {
2293
+ "name": "scrape",
2294
+ "http_name": "scrape",
2295
+ "description": "(0.04 USDC/call) Scrape any webpage. Pulls title, description, canonical URL, OpenGraph + Twitter card metadata, headings, and outbound links from a single URL. Server-side rendering. Body content rendered as text / raw HTML / clean markdown. Optional link extraction. Cheerio-based, no headless browser — fast and cheap, ideal for static pages and SSR sites. Alias of scrape-website. For JS-heavy SPAs that need a real browser, see website-screenshot.",
2296
+ "method": "POST",
2297
+ "input_schema": {
2298
+ "type": "object",
2299
+ "properties": {
2300
+ "url": {
2301
+ "type": "string",
2302
+ "description": "Public URL to fetch and parse. Must include scheme (http/https). Follows redirects."
2303
+ },
2304
+ "format": {
2305
+ "type": "string",
2306
+ "enum": [
2307
+ "text",
2308
+ "html",
2309
+ "markdown"
2310
+ ],
2311
+ "description": "Body output format. 'text' (default), 'html' (raw), or 'markdown' (clean — best for LLM ingestion)."
2312
+ },
2313
+ "include_links": {
2314
+ "type": "boolean",
2315
+ "description": "If true, also returns an array of all <a href> links on the page. Default false."
2316
+ },
2317
+ "user_agent": {
2318
+ "type": "string",
2319
+ "description": "Custom User-Agent header. Defaults to a modern desktop Chrome UA."
2320
+ }
2321
+ },
2322
+ "required": [
2323
+ "url"
2324
+ ]
2325
+ }
2326
+ },
2327
+ {
2328
+ "name": "scrape-to-json",
2329
+ "http_name": "scrape-to-json",
2330
+ "description": "(0.02 USDC/call) URL to structured JSON / web scraper with schema enforcement / scrape and extract / website to JSON / page to structured data / scrape with JSON schema / Morpheus-powered extraction. Fetches a page server-side (cheerio, no headless), converts to clean markdown, then forces the output to a caller-supplied JSON schema via Morpheus mistral-31-24b. Pair with watch-page or research-brief for richer agent pipelines.",
2331
+ "method": "POST",
2332
+ "input_schema": {
2333
+ "type": "object",
2334
+ "properties": {
2335
+ "url": {
2336
+ "type": "string",
2337
+ "description": "Public URL to scrape (http or https). Follows redirects."
2338
+ },
2339
+ "schema": {
2340
+ "type": "object",
2341
+ "description": "JSON schema describing expected output. Must include a 'properties' key."
2342
+ },
2343
+ "instructions": {
2344
+ "type": "string",
2345
+ "description": "Optional extra extraction guidance."
2346
+ },
2347
+ "format": {
2348
+ "type": "string",
2349
+ "enum": [
2350
+ "text",
2351
+ "markdown"
2352
+ ],
2353
+ "description": "Pre-LLM body normalization. Default 'markdown'."
2354
+ },
2355
+ "user_agent": {
2356
+ "type": "string"
2357
+ }
2358
+ },
2359
+ "required": [
2360
+ "url",
2361
+ "schema"
2362
+ ]
2363
+ }
2364
+ },
2365
+ {
2366
+ "name": "scrape-website",
2367
+ "http_name": "scrape-website",
2368
+ "description": "(0.04 USDC/call) Scrape any webpage. Pulls title, description, canonical URL, OpenGraph + Twitter card metadata, headings, and outbound links from a single URL. Server-side rendering. Body content rendered as text / raw HTML / clean markdown. Optional link extraction. Cheerio-based, no headless browser — fast and cheap, ideal for static pages and SSR sites. For JS-heavy SPAs that need a real browser, see website-screenshot.",
2369
+ "method": "POST",
2370
+ "input_schema": {
2371
+ "type": "object",
2372
+ "properties": {
2373
+ "url": {
2374
+ "type": "string",
2375
+ "description": "Public URL to fetch and parse. Must include scheme (http/https). Follows redirects."
2376
+ },
2377
+ "format": {
2378
+ "type": "string",
2379
+ "enum": [
2380
+ "text",
2381
+ "html",
2382
+ "markdown"
2383
+ ],
2384
+ "description": "Body output format. 'text' (default, plain text), 'html' (raw HTML body), or 'markdown' (clean markdown — best for LLM ingestion)."
2385
+ },
2386
+ "include_links": {
2387
+ "type": "boolean",
2388
+ "description": "If true, also returns an array of all <a href> links found on the page. Default false."
2389
+ },
2390
+ "user_agent": {
2391
+ "type": "string",
2392
+ "description": "Custom User-Agent header. Defaults to a modern desktop Chrome UA."
2393
+ }
2394
+ },
2395
+ "required": [
2396
+ "url"
2397
+ ]
2398
+ }
2399
+ },
2400
+ {
2401
+ "name": "screenshot",
2402
+ "http_name": "screenshot",
2403
+ "description": "(0.04 USDC/call) Website screenshot / URL to PNG/JPG. Configurable viewport, retina, crop/fit, transparent BG, JPG quality, JS wait conditions.",
2404
+ "method": "POST",
2405
+ "input_schema": {
2406
+ "type": "object",
2407
+ "properties": {
2408
+ "url": {
2409
+ "type": "string"
2410
+ },
2411
+ "format": {
2412
+ "type": "string"
2413
+ },
2414
+ "screen_width": {
2415
+ "type": "number"
2416
+ },
2417
+ "screen_height": {
2418
+ "type": "number"
2419
+ },
2420
+ "device_scale_factor": {
2421
+ "type": "number"
2422
+ },
2423
+ "width": {
2424
+ "type": "number"
2425
+ },
2426
+ "height": {
2427
+ "type": "number"
2428
+ },
2429
+ "fit": {
2430
+ "type": "string"
2431
+ },
2432
+ "quality": {
2433
+ "type": "number"
2434
+ },
2435
+ "transparent_background": {
2436
+ "type": "boolean"
2437
+ }
2438
+ },
2439
+ "required": [
2440
+ "url"
2441
+ ]
2442
+ }
2443
+ },
2444
+ {
2445
+ "name": "search",
2446
+ "http_name": "search",
2447
+ "description": "(0.01 USDC/call) Search API / web search API / SERP search / agent search endpoint. Returns ranked Google results for a query with title, URL, snippet, domain, and optional recency filter. Uses Decodo Google Search. For fetched page text or cited synthesis, use scrape-to-json or answer-web.",
2448
+ "method": "POST",
2449
+ "input_schema": {
2450
+ "type": "object",
2451
+ "properties": {
2452
+ "query": {
2453
+ "type": "string",
2454
+ "description": "Search query or research question. 1-500 chars."
2455
+ },
2456
+ "num_results": {
2457
+ "type": "number",
2458
+ "description": "Number of results to return. Default 10, max 20."
2459
+ },
2460
+ "include_text": {
2461
+ "type": "boolean",
2462
+ "description": "Whether to include fetched page text when the upstream supports it."
2463
+ },
2464
+ "recency": {
2465
+ "type": "string",
2466
+ "enum": [
2467
+ "day",
2468
+ "week",
2469
+ "month",
2470
+ "year",
2471
+ "any"
2472
+ ],
2473
+ "description": "Optional freshness filter. Default 'any'."
2474
+ }
2475
+ },
2476
+ "required": [
2477
+ "query"
2478
+ ]
2479
+ }
2480
+ },
2481
+ {
2482
+ "name": "search-web",
2483
+ "http_name": "search-web",
2484
+ "description": "(0.01 USDC/call) Search web API / web-search endpoint / SERP results for agents. Returns ranked Google results with snippets and domains from Decodo Google Search. Use this low-cost endpoint for source discovery; use answer-web when you need a synthesized cited answer.",
2485
+ "method": "POST",
2486
+ "input_schema": {
2487
+ "type": "object",
2488
+ "properties": {
2489
+ "query": {
2490
+ "type": "string",
2491
+ "description": "Search query. 1-500 chars."
2492
+ },
2493
+ "num_results": {
2494
+ "type": "number",
2495
+ "description": "Number of results to return. Default 10, max 20."
2496
+ },
2497
+ "include_text": {
2498
+ "type": "boolean",
2499
+ "description": "Whether to include fetched page text when available."
2500
+ },
2501
+ "recency": {
2502
+ "type": "string",
2503
+ "enum": [
2504
+ "day",
2505
+ "week",
2506
+ "month",
2507
+ "year",
2508
+ "any"
2509
+ ],
2510
+ "description": "Optional freshness filter. Default 'any'."
2511
+ }
2512
+ },
2513
+ "required": [
2514
+ "query"
2515
+ ]
2516
+ }
2517
+ },
2518
+ {
2519
+ "name": "serp-search",
2520
+ "http_name": "serp-search",
2521
+ "description": "(0.01 USDC/call) SERP search API / Google result search / web search endpoint for agents. Returns ranked search results with title, URL, snippet, and domain from Decodo Google Search. Intended for routers that need source discovery without LLM synthesis.",
2522
+ "method": "POST",
2523
+ "input_schema": {
2524
+ "type": "object",
2525
+ "properties": {
2526
+ "query": {
2527
+ "type": "string",
2528
+ "description": "Search query. 1-500 chars."
2529
+ },
2530
+ "num_results": {
2531
+ "type": "number",
2532
+ "description": "Number of results to return. Default 10, max 20."
2533
+ },
2534
+ "include_text": {
2535
+ "type": "boolean",
2536
+ "description": "Whether to include fetched page text when available."
2537
+ },
2538
+ "recency": {
2539
+ "type": "string",
2540
+ "enum": [
2541
+ "day",
2542
+ "week",
2543
+ "month",
2544
+ "year",
2545
+ "any"
2546
+ ],
2547
+ "description": "Optional freshness filter. Default 'any'."
2548
+ }
2549
+ },
2550
+ "required": [
2551
+ "query"
2552
+ ]
2553
+ }
2554
+ },
2555
+ {
2556
+ "name": "sitemap-fetch",
2557
+ "http_name": "sitemap-fetch",
2558
+ "description": "(0.005 USDC/call) Sitemap fetcher / sitemap.xml parser / sitemap index resolver / SEO sitemap reader / robots.txt sitemap discovery / website URL inventory. Accepts a site root (will discover sitemap via robots.txt or /sitemap.xml convention) OR a direct sitemap.xml URL. Recurses through sitemap-index nesting. Returns the URL list with lastmod / changefreq / priority and aggregate stats (count, oldest/newest lastmod). Useful for SEO audits, content-freshness monitoring, RAG ingestion seeding.",
2559
+ "method": "POST",
2560
+ "input_schema": {
2561
+ "type": "object",
2562
+ "properties": {
2563
+ "url": {
2564
+ "type": "string",
2565
+ "description": "Site root (e.g. https://example.com) or direct sitemap URL."
2566
+ },
2567
+ "limit": {
2568
+ "type": "number",
2569
+ "description": "Max URL rows. 1-5000. Default 1000."
2570
+ },
2571
+ "recurse": {
2572
+ "type": "boolean",
2573
+ "description": "Recurse into sitemap-index children. Default true."
2574
+ },
2575
+ "user_agent": {
2576
+ "type": "string",
2577
+ "description": "Optional User-Agent header."
2578
+ }
2579
+ },
2580
+ "required": [
2581
+ "url"
2582
+ ]
2583
+ }
2584
+ },
2585
+ {
2586
+ "name": "social-handle-check",
2587
+ "http_name": "social-handle-check",
2588
+ "description": "(0.005 USDC/call) Social handle check / X username availability / startup brand handle lookup. Same read-only X API backend as x-handle-availability. Checks whether a proposed X/Twitter handle is claimed and returns public account metrics when it exists.",
2589
+ "method": "POST",
2590
+ "input_schema": {
2591
+ "type": "object",
2592
+ "properties": {
2593
+ "username": {
2594
+ "type": "string",
2595
+ "description": "X/Twitter handle to check, with or without @, e.g. 'launchforge'."
2596
+ }
2597
+ },
2598
+ "required": [
2599
+ "username"
2600
+ ]
2601
+ }
2602
+ },
2603
+ {
2604
+ "name": "ssl-cert",
2605
+ "http_name": "ssl-cert",
2606
+ "description": "(0.03 USDC/call) SSL certificate inspector / TLS cert checker / certificate transparency lookup / ssl expiry. Issuer, subject, SAN list, validity dates, days-until-expiry. Sourced from Certificate Transparency logs (crt.sh).",
2607
+ "method": "POST",
2608
+ "input_schema": {
2609
+ "type": "object",
2610
+ "properties": {
2611
+ "host": {
2612
+ "type": "string"
2613
+ },
2614
+ "history": {
2615
+ "type": "boolean"
2616
+ }
2617
+ },
2618
+ "required": [
2619
+ "host"
2620
+ ]
2621
+ }
2622
+ },
2623
+ {
2624
+ "name": "ssl-cert-info",
2625
+ "http_name": "ssl-cert-info",
2626
+ "description": "(0.03 USDC/call) SSL / TLS certificate inspector. Issuer, subject, SAN list, validity dates, days-until-expiry. Sourced from Certificate Transparency logs (crt.sh).",
2627
+ "method": "POST",
2628
+ "input_schema": {
2629
+ "type": "object",
2630
+ "properties": {
2631
+ "host": {
2632
+ "type": "string"
2633
+ },
2634
+ "history": {
2635
+ "type": "boolean"
2636
+ }
2637
+ },
2638
+ "required": [
2639
+ "host"
2640
+ ]
2641
+ }
2642
+ },
2643
+ {
2644
+ "name": "ssl-certificate-check",
2645
+ "http_name": "ssl-certificate-check",
2646
+ "description": "(0.03 USDC/call) SSL certificate check / TLS certificate expiry API. Inspect a host's current certificate issuer, subject, SAN list, validity dates, and days-until-expiry from Certificate Transparency logs.",
2647
+ "method": "POST",
2648
+ "input_schema": {
2649
+ "type": "object",
2650
+ "properties": {
2651
+ "host": {
2652
+ "type": "string"
2653
+ },
2654
+ "history": {
2655
+ "type": "boolean"
2656
+ }
2657
+ },
2658
+ "required": [
2659
+ "host"
2660
+ ]
2661
+ }
2662
+ },
2663
+ {
2664
+ "name": "startup-domain-diligence",
2665
+ "http_name": "startup-domain-diligence",
2666
+ "description": "(0.02 USDC/call) Startup domain diligence API / brand launch domain check / acquisition target domain age screen. Same RDAP backend as whois-lookup, listed for agents validating domain age, registrar, transfer history, DNSSEC, and expiry before launches or outreach.",
2667
+ "method": "POST",
2668
+ "input_schema": {
2669
+ "type": "object",
2670
+ "properties": {
2671
+ "domain": {
2672
+ "type": "string",
2673
+ "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain before query."
2674
+ },
2675
+ "include_certificates": {
2676
+ "type": "boolean",
2677
+ "description": "If true, fetch a crt.sh certificate-transparency summary (issuer counts, first/last seen, total certs). Default false."
2678
+ }
2679
+ },
2680
+ "required": [
2681
+ "domain"
2682
+ ]
2683
+ }
2684
+ },
2685
+ {
2686
+ "name": "startup-name-generator",
2687
+ "http_name": "startup-name-generator",
2688
+ "description": "(0.05 USDC/call) Startup name generator / product name generator / founder naming API. Same backend as domain-suggest. Generates short candidate names for a startup concept and checks matching domain availability across common startup TLDs.",
2689
+ "method": "POST",
2690
+ "input_schema": {
2691
+ "type": "object",
2692
+ "properties": {
2693
+ "concept": {
2694
+ "type": "string",
2695
+ "description": "Plain-language startup or product concept."
2696
+ },
2697
+ "count": {
2698
+ "type": "number",
2699
+ "description": "Number of candidates to brainstorm. 1-20. Default 10."
2700
+ },
2701
+ "tlds": {
2702
+ "type": "array",
2703
+ "description": "TLDs to check, without dots. Default ['com','ai','dev','io','co']; max 6."
2704
+ },
2705
+ "tone": {
2706
+ "type": "string",
2707
+ "enum": [
2708
+ "neutral",
2709
+ "playful",
2710
+ "technical",
2711
+ "luxury",
2712
+ "industrial"
2713
+ ],
2714
+ "description": "Naming tone hint. Default neutral."
2715
+ }
2716
+ },
2717
+ "required": [
2718
+ "concept"
2719
+ ]
2720
+ }
2721
+ },
2722
+ {
2723
+ "name": "subdomain-enum",
2724
+ "http_name": "subdomain-enum",
2725
+ "description": "(0.03 USDC/call) Subdomain enumeration / attack-surface mapping / DNS recon. Certificate Transparency log mining (crt.sh). All-public data. Each subdomain with first-seen, last-seen, cert count.",
2726
+ "method": "POST",
2727
+ "input_schema": {
2728
+ "type": "object",
2729
+ "properties": {
2730
+ "domain": {
2731
+ "type": "string"
2732
+ },
2733
+ "include_wildcards": {
2734
+ "type": "boolean"
2735
+ }
2736
+ },
2737
+ "required": [
2738
+ "domain"
2739
+ ]
2740
+ }
2741
+ },
2742
+ {
2743
+ "name": "tech-stack-detect",
2744
+ "http_name": "tech-stack-detect",
2745
+ "description": "(0.01 USDC/call) Tech stack detector. Fingerprints any website to identify its frameworks, CMS, analytics, hosting, CDN, and CMS in a single GET. Wappalyzer / BuiltWith alternative. Matches response headers, meta tags, script src patterns, cookie names, and HTML signatures against 50+ known products: WordPress / Shopify / Webflow / Ghost / Wix / Squarespace, Next.js / Nuxt / Astro / Gatsby / Remix, React / Vue / Svelte, Vercel / Netlify / Cloudflare / AWS, Stripe / Intercom / Segment / GA4 / Plausible. Returns each detection with category and confidence.",
2746
+ "method": "POST",
2747
+ "input_schema": {
2748
+ "type": "object",
2749
+ "properties": {
2750
+ "url": {
2751
+ "type": "string",
2752
+ "description": "Target URL (http or https). Single GET request follows redirects; final_url is reported."
2753
+ }
2754
+ },
2755
+ "required": [
2756
+ "url"
2757
+ ]
2758
+ }
2759
+ },
2760
+ {
2761
+ "name": "tld-info",
2762
+ "http_name": "tld-info",
2763
+ "description": "(0.001 USDC/call) TLD info / top-level domain registry lookup / ccTLD vs gTLD / TLD introduction year / new gTLD registry. For any top-level domain, returns the registry operator, type (gTLD / ccTLD / sTLD), country (for ccTLDs), introduction year, and notes. In-handler dictionary covers ~80 of the most common TLDs; falls back to a structural guess for unrecognized TLDs.",
2764
+ "method": "POST",
2765
+ "input_schema": {
2766
+ "type": "object",
2767
+ "properties": {
2768
+ "tld": {
2769
+ "type": "string",
2770
+ "description": "TLD without leading dot (e.g. 'ai', 'com', 'co.uk' uses just 'uk')."
2771
+ }
2772
+ },
2773
+ "required": [
2774
+ "tld"
2775
+ ]
2776
+ }
2777
+ },
2778
+ {
2779
+ "name": "tweet-lookup",
2780
+ "http_name": "tweet-lookup",
2781
+ "description": "(0.01 USDC/call) Tweet lookup API / X tweet lookup / Twitter status lookup by ID. Same read-only X API v2 backend as tweets. Accepts tweet_ids or ids and returns public text, timestamps, metrics, language, and expanded author profiles. No account mutation.",
2782
+ "method": "POST",
2783
+ "input_schema": {
2784
+ "type": "object",
2785
+ "properties": {
2786
+ "mode": {
2787
+ "type": "string",
2788
+ "enum": [
2789
+ "tweets"
2790
+ ]
2791
+ },
2792
+ "tweet_ids": {
2793
+ "type": "array",
2794
+ "items": {
2795
+ "type": "string"
2796
+ },
2797
+ "description": "Numeric tweet IDs. Up to 100."
507
2798
  },
508
- "lang": {
509
- "type": "string",
510
- "description": "Wikipedia language code, e.g. 'en', 'es'. Default 'en'."
2799
+ "ids": {
2800
+ "type": "array",
2801
+ "items": {
2802
+ "type": "string"
2803
+ },
2804
+ "description": "Alias for tweet_ids."
511
2805
  }
512
2806
  },
513
2807
  "required": [
514
- "query"
2808
+ "tweet_ids"
515
2809
  ]
516
2810
  }
517
2811
  },
518
2812
  {
519
- "name": "link-extract",
520
- "http_name": "link-extract",
521
- "description": "(0.005 USDC/call) Link extractor / extract links from URL / list all anchor links / page outlink crawler / scrape outbound links / get hrefs from page. Fetches an HTML URL and returns every <a> link with its anchor text, rel attribute, and an is_external flag. Resolves relative URLs against the page's <base> or final URL. Lighter than full scrape / metadata endpoints — exact tool for the agent task 'walk this page, pick which links to follow.' Default 500-link cap. SSRF-guarded (no loopback / RFC1918 targets).",
2813
+ "name": "tweet-search",
2814
+ "http_name": "tweet-search",
2815
+ "description": "(0.01 USDC/call) Tweet search API / Twitter recent search / X public post search. Same backend as x-search, with exact tweet-search buyer wording. Read-only X API v2 recent search with author expansion and public metrics.",
522
2816
  "method": "POST",
523
2817
  "input_schema": {
524
2818
  "type": "object",
525
2819
  "properties": {
526
- "url": {
2820
+ "query": {
527
2821
  "type": "string",
528
- "description": "Page URL to fetch and extract from. http or https only. Private/loopback rejected. Redirects followed."
2822
+ "description": "X recent-search query."
529
2823
  },
530
- "include_external_only": {
531
- "type": "boolean",
532
- "description": "If true, drop same-host links. Default false."
533
- },
534
- "max_links": {
2824
+ "max_results": {
535
2825
  "type": "number",
536
- "description": "Max links to return (1-2000). Default 500."
2826
+ "description": "Number of recent posts to fetch. Clamped to 10-50. Default 10."
537
2827
  },
538
- "include_text": {
539
- "type": "boolean",
540
- "description": "Include anchor visible text. Default true."
541
- },
542
- "timeout_ms": {
543
- "type": "number",
544
- "description": "Fetch timeout. Default 12000, max 25000."
2828
+ "language": {
2829
+ "type": "string",
2830
+ "description": "Optional two-letter language filter."
545
2831
  }
546
2832
  },
547
2833
  "required": [
548
- "url"
2834
+ "query"
549
2835
  ]
550
2836
  }
551
2837
  },
552
2838
  {
553
- "name": "mcp-tools-list",
554
- "http_name": "mcp-tools-list",
555
- "description": "(0.005 USDC/call) MCP tools-list / Model Context Protocol discovery / list MCP server tools / tools/list JSON-RPC / agent capability discovery / MCP catalog lookup. Pass any MCP server URL (HTTP transport) completes the initialize handshake and returns the tool catalog (names, descriptions, JSON-schema input shapes). Optionally also lists resources and prompts. Pure agent infrastructure: an agent that discovers an unknown MCP server URL gets back its capabilities without running its own MCP client. No API key. SSRF-guarded (no loopback / RFC1918 targets).",
2839
+ "name": "tweets",
2840
+ "http_name": "tweets",
2841
+ "description": "(0.01 USDC/call) Tweets API / bulk X tweet lookup / Twitter tweet IDs lookup. Read-only X API v2 tweet lookup endpoint using the exact buyer slug seen in market demand. Pass tweet_ids or ids and get public post text, timestamps, language, public metrics, and expanded author profile fields. Requires X_BEARER_TOKEN; no posting, replying, liking, following, or account mutation.",
556
2842
  "method": "POST",
557
2843
  "input_schema": {
558
2844
  "type": "object",
559
2845
  "properties": {
560
- "url": {
2846
+ "mode": {
561
2847
  "type": "string",
562
- "description": "Full URL to an MCP server's JSON-RPC HTTP endpoint."
563
- },
564
- "timeout_ms": {
565
- "type": "number",
566
- "description": "Per-call timeout. Default 12000, max 25000."
2848
+ "enum": [
2849
+ "tweets"
2850
+ ],
2851
+ "description": "Use 'tweets' for bulk tweet lookup. Defaults to tweets when ids are supplied."
567
2852
  },
568
- "list_resources": {
569
- "type": "boolean",
570
- "description": "Also call resources/list. Default false."
2853
+ "tweet_ids": {
2854
+ "type": "array",
2855
+ "items": {
2856
+ "type": "string"
2857
+ },
2858
+ "description": "Numeric X/Twitter tweet IDs. Up to 100."
571
2859
  },
572
- "list_prompts": {
573
- "type": "boolean",
574
- "description": "Also call prompts/list. Default false."
2860
+ "ids": {
2861
+ "type": "array",
2862
+ "items": {
2863
+ "type": "string"
2864
+ },
2865
+ "description": "Alias for tweet_ids."
575
2866
  }
576
2867
  },
577
2868
  "required": [
578
- "url"
2869
+ "tweet_ids"
579
2870
  ]
580
2871
  }
581
2872
  },
582
2873
  {
583
- "name": "npm-package-stats",
584
- "http_name": "npm-package-stats",
585
- "description": "(0.003 USDC/call) npm package stats / npm registry lookup / npm downloads / package release history / lightweight package metadata. Fetches the public npm registry record for a package and returns description, license, repository, latest version, total version count, recent versions with publish timestamps and deprecation flags, age in days, days since last release, maintainer count + list, and downloads for the last day, week, month, year. Lightweight companion to package-risk-npm — same registry, but just the numbers, no LLM risk synthesis. Public npm registry (registry.npmjs.org + api.npmjs.org), no auth, commercial use permitted under the npm Public Registry Open Source Terms.",
2874
+ "name": "tweets-by-id",
2875
+ "http_name": "tweets-by-id",
2876
+ "description": "(0.01 USDC/call) Tweets by ID API / bulk Twitter tweet lookup / X post IDs lookup. Same backend as tweets, listed for agents that already have tweet IDs and need public text, metrics, and author context.",
586
2877
  "method": "POST",
587
2878
  "input_schema": {
588
2879
  "type": "object",
589
2880
  "properties": {
590
- "package": {
2881
+ "mode": {
591
2882
  "type": "string",
592
- "description": "npm package name. Supports scoped names ('@types/node', '@vercel/next')."
2883
+ "enum": [
2884
+ "tweets"
2885
+ ]
593
2886
  },
594
- "recent_versions": {
595
- "type": "number",
596
- "description": "How many most-recent version entries to include. 1-20. Default 5."
2887
+ "ids": {
2888
+ "type": "array",
2889
+ "items": {
2890
+ "type": "string"
2891
+ },
2892
+ "description": "Numeric X/Twitter tweet IDs. Up to 100."
2893
+ },
2894
+ "tweet_ids": {
2895
+ "type": "array",
2896
+ "items": {
2897
+ "type": "string"
2898
+ },
2899
+ "description": "Alias for ids."
597
2900
  }
598
2901
  },
599
2902
  "required": [
600
- "package"
2903
+ "ids"
601
2904
  ]
602
2905
  }
603
2906
  },
604
2907
  {
605
- "name": "password-strength",
606
- "http_name": "password-strength",
607
- "description": "(0.02 USDC/call) Password strength meter + breach checker. Entropy bits, character-class diversity, common-pattern penalties, estimated crack times (online/offline/GPU). Plus Have I Been Pwned k-anonymity breach lookup full password never leaves the server.",
2908
+ "name": "tweets-search",
2909
+ "http_name": "tweets-search",
2910
+ "description": "(0.01 USDC/call) Tweets search API / X recent post search / Twitter search endpoint. Same read-only X API v2 recent-search backend as x-search, exposed under the buyer wording used by tweet-search clients. Returns public posts, timestamps, metrics, and expanded author profile data. Requires X_BEARER_TOKEN; no posting, replying, liking, following, or account mutation.",
608
2911
  "method": "POST",
609
2912
  "input_schema": {
610
2913
  "type": "object",
611
2914
  "properties": {
612
- "password": {
2915
+ "query": {
613
2916
  "type": "string",
614
- "description": "Password to score. Sent over TLS to the worker but never logged. Max 200 chars."
2917
+ "description": "X recent-search query, e.g. 'x402 payments' or '(coinbase OR bankr) x402'."
615
2918
  },
616
- "check_breaches": {
617
- "type": "boolean",
618
- "description": "Check HIBP. Default true. Sends only first 5 chars of SHA-1 (k-anonymity)."
2919
+ "max_results": {
2920
+ "type": "number",
2921
+ "description": "Number of recent posts to fetch. Clamped to 10-50. Default 10."
2922
+ },
2923
+ "language": {
2924
+ "type": "string",
2925
+ "description": "Optional two-letter language filter, e.g. 'en'."
619
2926
  }
620
2927
  },
621
2928
  "required": [
622
- "password"
2929
+ "query"
623
2930
  ]
624
2931
  }
625
2932
  },
626
2933
  {
627
- "name": "pubmed-search",
628
- "http_name": "pubmed-search",
629
- "description": "(0.01 USDC/call) PubMed biomedical literature search. NIH E-utilities. Returns PMID, title, abstract, authors, journal, MeSH terms, DOI. Federal public.",
2934
+ "name": "tweets-user",
2935
+ "http_name": "tweets-user",
2936
+ "description": "(0.01 USDC/call) Tweets user API / tweets by username / Twitter user timeline. Same read-only X API v2 user_tweets backend as user-tweets, exposed under the buyer wording used by /tweets/user-style clients.",
630
2937
  "method": "POST",
631
2938
  "input_schema": {
632
2939
  "type": "object",
633
2940
  "properties": {
634
- "query": {
2941
+ "mode": {
635
2942
  "type": "string",
636
- "description": "PubMed query string. Supports field tags ('cancer[Title]', 'Smith J[Author]'), boolean operators, and MeSH terms."
637
- },
638
- "limit": {
639
- "type": "number",
640
- "description": "Max papers to return. 1-50. Default 10."
2943
+ "enum": [
2944
+ "user_tweets"
2945
+ ]
641
2946
  },
642
- "date_from": {
2947
+ "username": {
643
2948
  "type": "string",
644
- "description": "Lower bound on publication date (YYYY/MM/DD or YYYY-MM-DD)."
2949
+ "description": "X/Twitter handle, with or without @."
645
2950
  },
646
- "date_to": {
647
- "type": "string",
648
- "description": "Upper bound on publication date (YYYY/MM/DD or YYYY-MM-DD)."
2951
+ "max_results": {
2952
+ "type": "number",
2953
+ "description": "Number of recent posts to fetch. Clamped to 5-50."
649
2954
  },
650
- "sort": {
2955
+ "pagination_token": {
651
2956
  "type": "string",
652
- "enum": [
653
- "relevance",
654
- "pub_date",
655
- "first_author"
656
- ],
657
- "description": "Result ordering. Default 'relevance'."
2957
+ "description": "Optional X pagination token."
658
2958
  },
659
- "include_abstract": {
2959
+ "include_retweets": {
660
2960
  "type": "boolean",
661
- "description": "If true (default), include the abstract text per paper. Set false for a smaller, faster response."
2961
+ "description": "Include retweets when true. Defaults false."
662
2962
  }
663
2963
  },
664
2964
  "required": [
665
- "query"
2965
+ "username"
666
2966
  ]
667
2967
  }
668
2968
  },
669
2969
  {
670
- "name": "pypi-package-stats",
671
- "http_name": "pypi-package-stats",
672
- "description": "(0.003 USDC/call) PyPI package stats / Python package registry lookup / pip package metadata / pypistats downloads / Python ecosystem metadata. Fetches the public PyPI JSON record for a Python package and returns summary, license, homepage, repository, documentation, issues URL, author, maintainer, classifiers, latest version, total version count, recent versions with publish timestamps and yanked flags, age in days, days_since_last_release. Also pulls last-day / last-week / last-month download counts from pypistats.org (Linehaul-derived). Lightweight companion to package-risk-pypi for cases where you just need the numbers, no risk synthesis. Public PyPI + pypistats APIs, no auth.",
2970
+ "name": "twitter-search",
2971
+ "http_name": "twitter-search",
2972
+ "description": "(0.01 USDC/call) Twitter search API / X search API / recent public post search. Same read-only X API v2 backend as x-search. Searches public recent posts, excludes retweets by default, and returns author profile fields and public metrics.",
673
2973
  "method": "POST",
674
2974
  "input_schema": {
675
2975
  "type": "object",
676
2976
  "properties": {
677
- "package": {
2977
+ "query": {
678
2978
  "type": "string",
679
- "description": "PyPI package name. Case-insensitive; PEP 503 normalization applied internally."
2979
+ "description": "X/Twitter recent-search query."
680
2980
  },
681
- "recent_versions": {
2981
+ "max_results": {
682
2982
  "type": "number",
683
- "description": "How many most-recent versions to include. 1-20. Default 5."
2983
+ "description": "Number of recent posts to fetch. Clamped to 10-50. Default 10."
2984
+ },
2985
+ "language": {
2986
+ "type": "string",
2987
+ "description": "Optional two-letter language filter."
684
2988
  }
685
2989
  },
686
2990
  "required": [
687
- "package"
2991
+ "query"
688
2992
  ]
689
2993
  }
690
2994
  },
691
2995
  {
692
- "name": "qr-code-decode",
693
- "http_name": "qr-code-decode",
694
- "description": "(0.002 USDC/call) QR decoder / QR reader / scan QR from URL / QR code OCR / barcode reader / link extraction from QR. Reads QR codes out of any public image URL (PNG / JPG / GIF / BMP) and returns the decoded text strings. Multiple QR codes in a single image are returned as separate entries. Wraps qrserver.com's free public read-qr-code API (true DIY decode requires canvas, which Workers don't have natively). Returns an empty `codes` array plus a descriptive `note` if the image can't be fetched or no QR is found.",
2996
+ "name": "twitter-user-lookup",
2997
+ "http_name": "twitter-user-lookup",
2998
+ "description": "(0.005 USDC/call) Twitter user lookup / X username lookup / public profile resolver. Same backend as x-username, exposed under broad buyer wording. Read-only X API v2 profile lookup; no account mutation.",
695
2999
  "method": "POST",
696
3000
  "input_schema": {
697
3001
  "type": "object",
698
3002
  "properties": {
699
- "image_url": {
3003
+ "username": {
700
3004
  "type": "string",
701
- "description": "Public http(s) URL of an image containing one or more QR codes. Must be directly fetchable."
3005
+ "description": "X/Twitter handle, with or without @."
702
3006
  }
703
3007
  },
704
3008
  "required": [
705
- "image_url"
3009
+ "username"
706
3010
  ]
707
3011
  }
708
3012
  },
709
3013
  {
710
- "name": "qr-code-generate",
711
- "http_name": "qr-code-generate",
712
- "description": "(0.001 USDC/call) QR code generator / QR maker / vCard QR / WiFi QR / URL to QR / SVG QR / PNG QR / customizable error correction. Generates a QR code from arbitrary text URL, vCard, WiFi join string, plain text — and returns it as a base64-encoded PNG (default) or SVG. Configurable size (64-1024 px), error correction level (L/M/Q/H), quiet-zone margin, and foreground/background hex colors. Pure JS encoder via the qrcode npm package — no upstream API call, deterministic output.",
3014
+ "name": "twitter-user-tweets",
3015
+ "http_name": "twitter-user-tweets",
3016
+ "description": "(0.01 USDC/call) Twitter user tweets API / public timeline lookup / latest posts by handle. Same backend as user-tweets; resolves a username then fetches recent public posts with metrics and pagination. Read-only, no account mutation.",
713
3017
  "method": "POST",
714
3018
  "input_schema": {
715
3019
  "type": "object",
716
3020
  "properties": {
717
- "text": {
718
- "type": "string",
719
- "description": "Text to encode. Any string up to ~4296 chars (alphanumeric)."
720
- },
721
- "format": {
3021
+ "mode": {
722
3022
  "type": "string",
723
3023
  "enum": [
724
- "png",
725
- "svg"
726
- ],
727
- "description": "Output image format. Default 'png'."
728
- },
729
- "size": {
730
- "type": "number",
731
- "description": "Image side length in pixels. Range [64, 1024]. Default 256."
3024
+ "user_tweets"
3025
+ ]
732
3026
  },
733
- "error_correction": {
3027
+ "username": {
734
3028
  "type": "string",
735
- "enum": [
736
- "L",
737
- "M",
738
- "Q",
739
- "H"
740
- ],
741
- "description": "Reed-Solomon error-correction level. L=7%, M=15% (default), Q=25%, H=30% redundancy."
3029
+ "description": "X/Twitter handle, with or without @."
742
3030
  },
743
- "margin": {
3031
+ "max_results": {
744
3032
  "type": "number",
745
- "description": "Quiet-zone margin in modules. Range [0, 20]. Default 4."
3033
+ "description": "Number of recent posts to fetch. Clamped to 5-50."
746
3034
  },
747
- "foreground": {
3035
+ "pagination_token": {
748
3036
  "type": "string",
749
- "description": "QR module color as 6 or 8-digit hex (e.g. '#000000'). Default '#000000'."
3037
+ "description": "Optional X pagination token."
750
3038
  },
751
- "background": {
752
- "type": "string",
753
- "description": "Background color as 6 or 8-digit hex (e.g. '#FFFFFF'). Default '#FFFFFF'."
3039
+ "include_retweets": {
3040
+ "type": "boolean",
3041
+ "description": "Include retweets when true. Defaults false."
754
3042
  }
755
3043
  },
756
3044
  "required": [
757
- "text"
3045
+ "username"
758
3046
  ]
759
3047
  }
760
3048
  },
761
3049
  {
762
- "name": "rss-from-anything",
763
- "http_name": "rss-from-anything",
764
- "description": "(0.04 USDC/call) RSS feed generator / HTML to RSS converter. Auto-detects article items on any HTML page, OR pass CSS selectors. RSS 2.0 output. For sites that don't publish a feed.",
3050
+ "name": "twitter-users",
3051
+ "http_name": "twitter-users",
3052
+ "description": "(0.01 USDC/call) Twitter users API / bulk user profile lookup / users by username or ID. Same backend as users, exposed under Twitter wording for routers and buyers searching for bulk profile enrichment.",
765
3053
  "method": "POST",
766
3054
  "input_schema": {
767
3055
  "type": "object",
768
3056
  "properties": {
769
- "url": {
3057
+ "mode": {
770
3058
  "type": "string",
771
- "description": "Page URL to fetch and convert into an RSS 2.0 feed."
3059
+ "enum": [
3060
+ "users"
3061
+ ]
772
3062
  },
773
- "feed_title": {
3063
+ "usernames": {
3064
+ "type": "array",
3065
+ "items": {
3066
+ "type": "string"
3067
+ }
3068
+ },
3069
+ "user_ids": {
3070
+ "type": "array",
3071
+ "items": {
3072
+ "type": "string"
3073
+ }
3074
+ },
3075
+ "ids": {
3076
+ "type": "array",
3077
+ "items": {
3078
+ "type": "string"
3079
+ }
3080
+ }
3081
+ }
3082
+ }
3083
+ },
3084
+ {
3085
+ "name": "twitter-x-api",
3086
+ "http_name": "twitter-x-api",
3087
+ "description": "(0.01 USDC/call) Twitter X API / X API v2 wrapper / tweet search, tweet lookup, username lookup, bulk users lookup, and user timeline fetch / social data API. Read-only endpoint with mode='search' for recent public posts, mode='tweets' for tweet IDs, mode='user' for one public profile, mode='users' for bulk profile lookup, or mode='user_tweets' for recent public posts from one username. Uses X_BEARER_TOKEN or TWITTER_BEARER_TOKEN. No posting, replying, liking, following, DM access, or account mutation.",
3088
+ "method": "POST",
3089
+ "input_schema": {
3090
+ "type": "object",
3091
+ "properties": {
3092
+ "mode": {
774
3093
  "type": "string",
775
- "description": "Override channel title. Default page title."
3094
+ "enum": [
3095
+ "search",
3096
+ "user",
3097
+ "tweets",
3098
+ "users",
3099
+ "user_tweets"
3100
+ ],
3101
+ "description": "Lookup mode. Defaults to 'search' unless username or IDs are supplied."
776
3102
  },
777
- "item_selector": {
3103
+ "query": {
778
3104
  "type": "string",
779
- "description": "Selector for each item. If omitted, auto-detection runs."
3105
+ "description": "Recent-search query for mode='search'."
780
3106
  },
781
- "title_selector": {
3107
+ "username": {
782
3108
  "type": "string",
783
- "description": "Optional CSS selector for item titles; overrides auto-detection."
3109
+ "description": "Handle for mode='user' or mode='user_tweets', with or without @."
784
3110
  },
785
- "link_selector": {
3111
+ "usernames": {
3112
+ "type": "array",
3113
+ "items": {
3114
+ "type": "string"
3115
+ },
3116
+ "description": "Handles for mode='users'. Up to 100."
3117
+ },
3118
+ "tweet_ids": {
3119
+ "type": "array",
3120
+ "items": {
3121
+ "type": "string"
3122
+ },
3123
+ "description": "Tweet IDs for mode='tweets'. Up to 100."
3124
+ },
3125
+ "user_ids": {
3126
+ "type": "array",
3127
+ "items": {
3128
+ "type": "string"
3129
+ },
3130
+ "description": "User IDs for mode='users'. Up to 100."
3131
+ },
3132
+ "ids": {
3133
+ "type": "array",
3134
+ "items": {
3135
+ "type": "string"
3136
+ },
3137
+ "description": "Alias for tweet_ids in mode='tweets' or user_ids in mode='users'."
3138
+ },
3139
+ "max_results": {
3140
+ "type": "number",
3141
+ "description": "Search or user timeline result count. Search clamps to 10-50; user_tweets clamps to 5-50."
3142
+ },
3143
+ "language": {
786
3144
  "type": "string",
787
- "description": "Optional CSS selector for item links; overrides auto-detection."
3145
+ "description": "Optional two-letter language filter for search."
788
3146
  },
789
- "date_selector": {
3147
+ "pagination_token": {
790
3148
  "type": "string",
791
- "description": "Optional CSS selector for item publish dates; overrides auto-detection."
3149
+ "description": "Optional X pagination token for mode='user_tweets'."
792
3150
  },
793
- "description_selector": {
3151
+ "include_retweets": {
3152
+ "type": "boolean",
3153
+ "description": "For mode='user_tweets', include retweets when true. Defaults false."
3154
+ }
3155
+ }
3156
+ }
3157
+ },
3158
+ {
3159
+ "name": "url-expander",
3160
+ "http_name": "url-expander",
3161
+ "description": "(0.02 USDC/call) URL expander API / shortlink resolver / redirect-chain tracer. Same expand-url backend, discoverable for agents expanding bit.ly, t.co, lnkd.in, goo.gl, tinyurl, and other redirects into final landing URLs with hop-by-hop status, Location, content-type, and timing details.",
3162
+ "method": "POST",
3163
+ "input_schema": {
3164
+ "type": "object",
3165
+ "properties": {
3166
+ "url": {
794
3167
  "type": "string",
795
- "description": "Optional CSS selector for item descriptions or summaries; overrides auto-detection."
3168
+ "description": "Starting URL (typically a shortlink). Must be http(s)."
796
3169
  },
797
- "max_items": {
3170
+ "max_hops": {
798
3171
  "type": "number",
799
- "description": "Default 50, max 200."
3172
+ "description": "Maximum redirect hops to follow. 1-20. Default 10."
3173
+ },
3174
+ "user_agent": {
3175
+ "type": "string",
3176
+ "description": "Optional User-Agent header to send (some shorteners gate by UA). Default is a generic browser UA."
800
3177
  }
801
3178
  },
802
3179
  "required": [
@@ -805,33 +3182,24 @@ export const TOOLS = [
805
3182
  }
806
3183
  },
807
3184
  {
808
- "name": "scrape",
809
- "http_name": "scrape",
810
- "description": "(0.04 USDC/call) Web scraper / HTML extractor. Title, OG/Twitter meta, body in text/HTML/markdown, optional links. Cheerio-based.",
3185
+ "name": "url-metadata-extract",
3186
+ "http_name": "url-metadata-extract",
3187
+ "description": "(0.003 USDC/call) URL metadata extractor / OG tags / Open Graph parser / Twitter Card parser / meta tag extractor / link preview / page metadata / favicon resolver / JSON-LD reader / canonical URL extractor. Fetches a webpage and parses head-level metadata: title, description, Open Graph (og:*), Twitter Card (twitter:*), canonical link, favicon, html lang, keywords, robots, author, article:published_time, JSON-LD blocks. Returns absolute URLs for image and favicon. Useful for SEO audits, link-preview generation, content cataloging, RAG ingestion.",
811
3188
  "method": "POST",
812
3189
  "input_schema": {
813
3190
  "type": "object",
814
3191
  "properties": {
815
3192
  "url": {
816
3193
  "type": "string",
817
- "description": "Public http/https URL to scrape."
3194
+ "description": "Page URL (http or https) to fetch and parse."
818
3195
  },
819
- "format": {
3196
+ "user_agent": {
820
3197
  "type": "string",
821
- "enum": [
822
- "text",
823
- "html",
824
- "markdown"
825
- ],
826
- "description": "'text' (default), 'html', or 'markdown'."
3198
+ "description": "Optional User-Agent header sent on fetch."
827
3199
  },
828
- "include_links": {
3200
+ "follow_redirects": {
829
3201
  "type": "boolean",
830
- "description": "Include array of unique links found on the page (max 500). Default false."
831
- },
832
- "user_agent": {
833
- "type": "string",
834
- "description": "Override the User-Agent header."
3202
+ "description": "Default true."
835
3203
  }
836
3204
  },
837
3205
  "required": [
@@ -840,201 +3208,189 @@ export const TOOLS = [
840
3208
  }
841
3209
  },
842
3210
  {
843
- "name": "scrape-website",
844
- "http_name": "scrape-website",
845
- "description": "(0.04 USDC/call) Web scraper / HTML to text / website content extractor. Returns title, OG/Twitter meta, body in text/HTML/markdown. Optional links. Cheerio-basedfast, no headless browser.",
3211
+ "name": "user-agent-parse",
3212
+ "http_name": "user-agent-parse",
3213
+ "description": "(0.001 USDC/call) User-Agent parser / UA classifier / browser detection / OS detection / bot detection / AI crawler identifier (GPTBot, ClaudeBot, PerplexityBot). Pure-local regex parser detects browser (Chrome, Firefox, Safari, Edge, Opera, Vivaldi, Samsung), OS (Windows, macOS, iOS, Android, Linux, ChromeOS) with version, device type (desktop / mobile / tablet / bot), and identifies 32+ specific bots/crawlers.",
846
3214
  "method": "POST",
847
3215
  "input_schema": {
848
3216
  "type": "object",
849
3217
  "properties": {
850
- "url": {
851
- "type": "string",
852
- "description": "Public http/https URL to scrape."
853
- },
854
- "format": {
855
- "type": "string",
856
- "enum": [
857
- "text",
858
- "html",
859
- "markdown"
860
- ],
861
- "description": "'text' (default), 'html', or 'markdown'."
862
- },
863
- "include_links": {
864
- "type": "boolean",
865
- "description": "Include array of unique links found on the page (max 500). Default false."
866
- },
867
3218
  "user_agent": {
868
3219
  "type": "string",
869
- "description": "Override the User-Agent header."
3220
+ "description": "Raw User-Agent header string. Up to 2000 chars."
870
3221
  }
871
3222
  },
872
3223
  "required": [
873
- "url"
3224
+ "user_agent"
874
3225
  ]
875
3226
  }
876
3227
  },
877
3228
  {
878
- "name": "screenshot",
879
- "http_name": "screenshot",
880
- "description": "(0.04 USDC/call) Website screenshot / URL to PNG/JPG. Configurable viewport, retina, crop/fit, transparent BG, JPG quality, JS wait conditions.",
3229
+ "name": "user-tweets",
3230
+ "http_name": "user-tweets",
3231
+ "description": "(0.01 USDC/call) User tweets API / latest tweets from username / X user timeline / Twitter user posts endpoint. Read-only X API v2 route: resolves a public username, fetches recent public posts from that user, excludes retweets by default, and returns text, timestamps, metrics, pagination token, and author profile. No posting, replying, liking, following, DM access, or account mutation.",
881
3232
  "method": "POST",
882
3233
  "input_schema": {
883
3234
  "type": "object",
884
3235
  "properties": {
885
- "url": {
3236
+ "mode": {
886
3237
  "type": "string",
887
- "description": "Public http/https URL."
3238
+ "enum": [
3239
+ "user_tweets"
3240
+ ],
3241
+ "description": "Use 'user_tweets' for public timeline lookup."
888
3242
  },
889
- "format": {
3243
+ "username": {
890
3244
  "type": "string",
891
- "description": "'png' (default) or 'jpg'."
892
- },
893
- "screen_width": {
894
- "type": "number",
895
- "description": "Viewport width 320-3840. Default 1440."
896
- },
897
- "screen_height": {
898
- "type": "number",
899
- "description": "Viewport height 240-4320."
900
- },
901
- "device_scale_factor": {
902
- "type": "number",
903
- "description": "1-4 (retina). Default 1."
904
- },
905
- "width": {
906
- "type": "number",
907
- "description": "Final image width 1-8000."
3245
+ "description": "X/Twitter handle, with or without @."
908
3246
  },
909
- "height": {
3247
+ "max_results": {
910
3248
  "type": "number",
911
- "description": "Final image height 1-8000."
3249
+ "description": "Number of recent posts to fetch. Clamped to 5-50. Default 10."
912
3250
  },
913
- "fit": {
3251
+ "pagination_token": {
914
3252
  "type": "string",
915
- "description": "'max' (default), 'crop', or 'scale'."
916
- },
917
- "quality": {
918
- "type": "number",
919
- "description": "JPG quality 1-100."
3253
+ "description": "Optional X pagination token for the next page."
920
3254
  },
921
- "transparent_background": {
3255
+ "include_retweets": {
922
3256
  "type": "boolean",
923
- "description": "PNG only. Default false."
3257
+ "description": "Include retweets when true. Defaults false."
924
3258
  }
925
3259
  },
926
3260
  "required": [
927
- "url"
3261
+ "username"
928
3262
  ]
929
3263
  }
930
3264
  },
931
3265
  {
932
- "name": "sitemap-fetch",
933
- "http_name": "sitemap-fetch",
934
- "description": "(0.005 USDC/call) Sitemap fetcher / sitemap.xml parser / sitemap index resolver / SEO sitemap reader / robots.txt sitemap discovery / website URL inventory. Accepts a site root (will discover sitemap via robots.txt or /sitemap.xml convention) OR a direct sitemap.xml URL. Recurses through sitemap-index nesting. Returns the URL list with lastmod / changefreq / priority and aggregate stats (count, oldest/newest lastmod). Useful for SEO audits, content-freshness monitoring, RAG ingestion seeding.",
3266
+ "name": "users",
3267
+ "http_name": "users",
3268
+ "description": "(0.01 USDC/call) Users API / bulk X user lookup / Twitter users lookup by usernames or IDs. Read-only X API v2 users lookup route matching market demand for bulk public profiles. Pass usernames or user_ids/ids and receive id, username, display name, bio, verification fields, created_at, followers, following, tweet count, and listed count. Requires X_BEARER_TOKEN; no posting, following, DM access, or account mutation.",
935
3269
  "method": "POST",
936
3270
  "input_schema": {
937
3271
  "type": "object",
938
3272
  "properties": {
939
- "url": {
3273
+ "mode": {
940
3274
  "type": "string",
941
- "description": "Site root (e.g. https://example.com) or direct sitemap URL."
3275
+ "enum": [
3276
+ "users"
3277
+ ],
3278
+ "description": "Use 'users' for bulk public profile lookup."
942
3279
  },
943
- "limit": {
944
- "type": "number",
945
- "description": "Max URL rows. 1-5000. Default 1000."
3280
+ "usernames": {
3281
+ "type": "array",
3282
+ "items": {
3283
+ "type": "string"
3284
+ },
3285
+ "description": "X/Twitter handles, with or without @. Up to 100."
946
3286
  },
947
- "recurse": {
948
- "type": "boolean",
949
- "description": "Recurse into sitemap-index children. Default true."
3287
+ "user_ids": {
3288
+ "type": "array",
3289
+ "items": {
3290
+ "type": "string"
3291
+ },
3292
+ "description": "Numeric X user IDs. Up to 100."
950
3293
  },
951
- "user_agent": {
952
- "type": "string",
953
- "description": "Optional User-Agent header."
3294
+ "ids": {
3295
+ "type": "array",
3296
+ "items": {
3297
+ "type": "string"
3298
+ },
3299
+ "description": "Alias for user_ids."
954
3300
  }
955
- },
956
- "required": [
957
- "url"
958
- ]
3301
+ }
959
3302
  }
960
3303
  },
961
3304
  {
962
- "name": "ssl-cert",
963
- "http_name": "ssl-cert",
964
- "description": "(0.03 USDC/call) SSL certificate inspector / TLS cert checker / certificate transparency lookup / ssl expiry. Issuer, subject, SAN list, validity dates, days-until-expiry. Sourced from Certificate Transparency logs (crt.sh).",
3305
+ "name": "users-by-username",
3306
+ "http_name": "users-by-username",
3307
+ "description": "(0.005 USDC/call) X users by username / Twitter user profile lookup / handle to public profile API. Same read-only X API v2 user-by-username backend as x-username. Returns id, username, display name, bio, verification fields, created_at, followers, following, tweet count, and listed count.",
965
3308
  "method": "POST",
966
3309
  "input_schema": {
967
3310
  "type": "object",
968
3311
  "properties": {
969
- "host": {
3312
+ "username": {
970
3313
  "type": "string",
971
- "description": "Hostname to inspect (e.g. example.com); the endpoint queries Certificate Transparency logs for this domain."
972
- },
973
- "history": {
974
- "type": "boolean",
975
- "description": "When true, returns prior certificates from CT logs in addition to the current active cert."
3314
+ "description": "X/Twitter handle, with or without @, e.g. 'bankrbot'."
976
3315
  }
977
3316
  },
978
3317
  "required": [
979
- "host"
3318
+ "username"
980
3319
  ]
981
3320
  }
982
3321
  },
983
3322
  {
984
- "name": "ssl-cert-info",
985
- "http_name": "ssl-cert-info",
986
- "description": "(0.03 USDC/call) SSL / TLS certificate inspector. Issuer, subject, SAN list, validity dates, days-until-expiry, expires-soon flag. Sourced from Certificate Transparency logs (crt.sh). Optional cert history.",
3323
+ "name": "vendor-domain-risk",
3324
+ "http_name": "vendor-domain-risk",
3325
+ "description": "(0.02 USDC/call) Vendor domain risk API / supplier website age check / procurement domain diligence. Same RDAP backend as whois-lookup, tuned for agents screening vendor domains for age, expiration, registrar, DNSSEC, nameservers, and suspicious newly-registered risk flags.",
987
3326
  "method": "POST",
988
3327
  "input_schema": {
989
3328
  "type": "object",
990
3329
  "properties": {
991
- "host": {
3330
+ "domain": {
992
3331
  "type": "string",
993
- "description": "Hostname to inspect (e.g. example.com); SNI used to fetch the active leaf certificate from CT logs."
3332
+ "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain before query."
994
3333
  },
995
- "history": {
3334
+ "include_certificates": {
996
3335
  "type": "boolean",
997
- "description": "Include up to 50 historical cert entries. Default false."
3336
+ "description": "If true, fetch a crt.sh certificate-transparency summary (issuer counts, first/last seen, total certs). Default false."
998
3337
  }
999
3338
  },
1000
3339
  "required": [
1001
- "host"
3340
+ "domain"
1002
3341
  ]
1003
3342
  }
1004
3343
  },
1005
3344
  {
1006
- "name": "subdomain-enum",
1007
- "http_name": "subdomain-enum",
1008
- "description": "(0.03 USDC/call) Subdomain enumeration / attack-surface mapping / DNS recon. Certificate Transparency log mining (crt.sh). All-public data. Each subdomain with first-seen, last-seen, cert count.",
3345
+ "name": "watch-page",
3346
+ "http_name": "watch-page",
3347
+ "description": "(0.01 USDC/call) Stateful webpage change monitor / page-watch with memory / URL change detector / TOS-policy diff / price-page tracker / status-page watcher / content monitor / persistent webpage diff. Caller picks a watch_id; server stores the page's hash + text in KV. On each subsequent call returns a changed flag, added/removed lines, and an LLM-summarized diff (Morpheus mistral-31-24b). Unlike webpage-diff (caller must remember prior hash), this endpoint owns the state. KV TTL: 365 days.",
1009
3348
  "method": "POST",
1010
3349
  "input_schema": {
1011
3350
  "type": "object",
1012
3351
  "properties": {
1013
- "domain": {
3352
+ "url": {
1014
3353
  "type": "string",
1015
- "description": "Root domain to enumerate subdomains for (e.g. example.com); no protocol or path."
3354
+ "description": "Page URL to watch (http or https). Follows redirects."
1016
3355
  },
1017
- "include_wildcards": {
3356
+ "watch_id": {
3357
+ "type": "string",
3358
+ "description": "Caller-chosen identifier. 1-128 chars, alphanumeric + `:_-./`."
3359
+ },
3360
+ "selector": {
3361
+ "type": "string",
3362
+ "description": "Optional CSS selector to scope the diff."
3363
+ },
3364
+ "llm_summarize": {
1018
3365
  "type": "boolean",
1019
- "description": "Include *.example.com entries. Default false."
3366
+ "description": "Default true. Set false to skip the Morpheus summary."
3367
+ },
3368
+ "user_agent": {
3369
+ "type": "string"
1020
3370
  }
1021
3371
  },
1022
3372
  "required": [
1023
- "domain"
3373
+ "url",
3374
+ "watch_id"
1024
3375
  ]
1025
3376
  }
1026
3377
  },
1027
3378
  {
1028
- "name": "tech-stack-detect",
1029
- "http_name": "tech-stack-detect",
1030
- "description": "(0.01 USDC/call) Tech stack detector / website fingerprint / Wappalyzer alternative. Detects WordPress / Shopify / Webflow / Ghost / Next.js / Nuxt / Astro / Gatsby / React / Vue / Vercel / Netlify / Cloudflare / Stripe / Intercom / 50+ more. Header + meta + script + cookie patterns.",
3379
+ "name": "wayback-lookup",
3380
+ "http_name": "wayback-lookup",
3381
+ "description": "(0.02 USDC/call) Wayback lookup / archive snapshot API / historical page capture finder. Finds the closest archived URL for a public page and optional timestamp, with cleaned archived text for citation repair.",
1031
3382
  "method": "POST",
1032
3383
  "input_schema": {
1033
3384
  "type": "object",
1034
3385
  "properties": {
1035
3386
  "url": {
1036
- "type": "string",
1037
- "description": "Target URL (http or https). Single GET request follows redirects; final_url is reported."
3387
+ "type": "string"
3388
+ },
3389
+ "timestamp": {
3390
+ "type": "string"
3391
+ },
3392
+ "fetch_text": {
3393
+ "type": "boolean"
1038
3394
  }
1039
3395
  },
1040
3396
  "required": [
@@ -1043,42 +3399,44 @@ export const TOOLS = [
1043
3399
  }
1044
3400
  },
1045
3401
  {
1046
- "name": "tld-info",
1047
- "http_name": "tld-info",
1048
- "description": "(0.001 USDC/call) TLD info / top-level domain registry lookup / ccTLD vs gTLD / TLD introduction year / new gTLD registry. For any top-level domain, returns the registry operator, type (gTLD / ccTLD / sTLD), country (for ccTLDs), introduction year, and notes. In-handler dictionary covers ~80 of the most common TLDs; falls back to a structural guess for unrecognized TLDs.",
3402
+ "name": "wayback-machine",
3403
+ "http_name": "wayback-machine",
3404
+ "description": "(0.02 USDC/call) Wayback Machine API / archive.org snapshot lookup / historical URL capture finder / archived page text fetcher. Finds archived captures by URL and timestamp and can fetch cleaned archived text.",
1049
3405
  "method": "POST",
1050
3406
  "input_schema": {
1051
3407
  "type": "object",
1052
3408
  "properties": {
1053
- "tld": {
1054
- "type": "string",
1055
- "description": "TLD without leading dot (e.g. 'ai', 'com', 'co.uk' uses just 'uk')."
3409
+ "url": {
3410
+ "type": "string"
3411
+ },
3412
+ "timestamp": {
3413
+ "type": "string"
3414
+ },
3415
+ "fetch_text": {
3416
+ "type": "boolean"
1056
3417
  }
1057
3418
  },
1058
3419
  "required": [
1059
- "tld"
3420
+ "url"
1060
3421
  ]
1061
3422
  }
1062
3423
  },
1063
3424
  {
1064
- "name": "url-metadata-extract",
1065
- "http_name": "url-metadata-extract",
1066
- "description": "(0.003 USDC/call) URL metadata extractor / OG tags / Open Graph parser / Twitter Card parser / meta tag extractor / link preview / page metadata / favicon resolver / JSON-LD reader / canonical URL extractor. Fetches a webpage and parses head-level metadata: title, description, Open Graph (og:*), Twitter Card (twitter:*), canonical link, favicon, html lang, keywords, robots, author, article:published_time, JSON-LD blocks. Returns absolute URLs for image and favicon. Useful for SEO audits, link-preview generation, content cataloging, RAG ingestion.",
3425
+ "name": "web-archive",
3426
+ "http_name": "web-archive",
3427
+ "description": "(0.02 USDC/call) Web archive lookup / archive snapshot API / Wayback Machine API / historical webpage snapshot. Returns closest archived snapshot URL and timestamp for a public page, with optional cleaned text fetch for reference rot repair and due-diligence citations.",
1067
3428
  "method": "POST",
1068
3429
  "input_schema": {
1069
3430
  "type": "object",
1070
3431
  "properties": {
1071
3432
  "url": {
1072
- "type": "string",
1073
- "description": "Page URL (http or https) to fetch and parse."
3433
+ "type": "string"
1074
3434
  },
1075
- "user_agent": {
1076
- "type": "string",
1077
- "description": "Optional User-Agent header sent on fetch."
3435
+ "timestamp": {
3436
+ "type": "string"
1078
3437
  },
1079
- "follow_redirects": {
1080
- "type": "boolean",
1081
- "description": "Default true."
3438
+ "fetch_text": {
3439
+ "type": "boolean"
1082
3440
  }
1083
3441
  },
1084
3442
  "required": [
@@ -1087,27 +3445,46 @@ export const TOOLS = [
1087
3445
  }
1088
3446
  },
1089
3447
  {
1090
- "name": "user-agent-parse",
1091
- "http_name": "user-agent-parse",
1092
- "description": "(0.001 USDC/call) User-Agent parser / UA classifier / browser detection / OS detection / bot detection / AI crawler identifier (GPTBot, ClaudeBot, PerplexityBot). Pure-local regex parser detects browser (Chrome, Firefox, Safari, Edge, Opera, Vivaldi, Samsung), OS (Windows, macOS, iOS, Android, Linux, ChromeOS) with version, device type (desktop / mobile / tablet / bot), and identifies 32+ specific bots/crawlers. No upstream call.",
3448
+ "name": "web-search",
3449
+ "http_name": "web-search",
3450
+ "description": "(0.02 USDC/call) Web search API / SERP results / agent web search / source discovery. Returns ranked Google results for a query with title, URL, snippet, domain, and recency filter. Uses Decodo Google Search. For fetched page text or cited synthesis, use answer-web or scrape-to-json.",
1093
3451
  "method": "POST",
1094
3452
  "input_schema": {
1095
3453
  "type": "object",
1096
3454
  "properties": {
1097
- "user_agent": {
3455
+ "query": {
1098
3456
  "type": "string",
1099
- "description": "Raw User-Agent header string. Up to 2000 chars."
3457
+ "description": "Search query or research question. 1-500 chars."
3458
+ },
3459
+ "num_results": {
3460
+ "type": "number",
3461
+ "description": "Number of results to return. Default 10, max 20."
3462
+ },
3463
+ "include_text": {
3464
+ "type": "boolean",
3465
+ "description": "Whether to include fetched page text when the upstream supports it."
3466
+ },
3467
+ "recency": {
3468
+ "type": "string",
3469
+ "enum": [
3470
+ "day",
3471
+ "week",
3472
+ "month",
3473
+ "year",
3474
+ "any"
3475
+ ],
3476
+ "description": "Optional freshness filter. Default 'any'."
1100
3477
  }
1101
3478
  },
1102
3479
  "required": [
1103
- "user_agent"
3480
+ "query"
1104
3481
  ]
1105
3482
  }
1106
3483
  },
1107
3484
  {
1108
3485
  "name": "webpage-diff",
1109
3486
  "http_name": "webpage-diff",
1110
- "description": "(0.04 USDC/call) Webpage change detection / website monitor / content diff. Cleans HTML to text + SHA-256 hash. Pass previous hash/text to get added/removed line lists. Price + policy + status-page monitoring.",
3487
+ "description": "(0.04 USDC/call) Webpage change detector / website change monitor / content diff / page-watch / visualping-style monitor / price-page monitor / status-page watcher / TOS-policy diff. Fetches a URL, strips HTML to plain text, computes a SHA-256 hash, and (when given a previous hash or text) returns a changed flag plus added/removed line lists. Optional CSS selector scopes the diff to one region. No login required; follows redirects.",
1111
3488
  "method": "POST",
1112
3489
  "input_schema": {
1113
3490
  "type": "object",
@@ -1118,15 +3495,15 @@ export const TOOLS = [
1118
3495
  },
1119
3496
  "previous_hash": {
1120
3497
  "type": "string",
1121
- "description": "SHA-256 hex from a previous call."
3498
+ "description": "SHA-256 of a prior fetch, hex-encoded. If provided, response.changed compares against this hash."
1122
3499
  },
1123
3500
  "previous_text": {
1124
3501
  "type": "string",
1125
- "description": "Previous cleaned text. Triggers a line diff."
3502
+ "description": "Prior plain-text content from a previous fetch. If provided, response.diff returns added/removed line arrays."
1126
3503
  },
1127
3504
  "selector": {
1128
3505
  "type": "string",
1129
- "description": "Optional CSS selector to limit content scope."
3506
+ "description": "Optional CSS selector to scope the diff (e.g. 'article', '#price'). When set, only matched element text is hashed and compared."
1130
3507
  }
1131
3508
  },
1132
3509
  "required": [
@@ -1143,48 +3520,38 @@ export const TOOLS = [
1143
3520
  "type": "object",
1144
3521
  "properties": {
1145
3522
  "url": {
1146
- "type": "string",
1147
- "description": "Public http/https URL."
3523
+ "type": "string"
1148
3524
  },
1149
3525
  "format": {
1150
3526
  "type": "string",
1151
3527
  "enum": [
1152
3528
  "png",
1153
3529
  "jpg"
1154
- ],
1155
- "description": "'png' (default) or 'jpg'."
3530
+ ]
1156
3531
  },
1157
3532
  "screen_width": {
1158
- "type": "number",
1159
- "description": "Viewport width 320-3840. Default 1440."
3533
+ "type": "number"
1160
3534
  },
1161
3535
  "screen_height": {
1162
- "type": "number",
1163
- "description": "Viewport height 240-4320."
3536
+ "type": "number"
1164
3537
  },
1165
3538
  "device_scale_factor": {
1166
- "type": "number",
1167
- "description": "1-4 (retina). Default 1."
3539
+ "type": "number"
1168
3540
  },
1169
3541
  "width": {
1170
- "type": "number",
1171
- "description": "Final image width 1-8000."
3542
+ "type": "number"
1172
3543
  },
1173
3544
  "height": {
1174
- "type": "number",
1175
- "description": "Final image height 1-8000."
3545
+ "type": "number"
1176
3546
  },
1177
3547
  "fit": {
1178
- "type": "string",
1179
- "description": "'max' (default), 'crop', or 'scale'."
3548
+ "type": "string"
1180
3549
  },
1181
3550
  "quality": {
1182
- "type": "number",
1183
- "description": "JPG quality 1-100."
3551
+ "type": "number"
1184
3552
  },
1185
3553
  "transparent_background": {
1186
- "type": "boolean",
1187
- "description": "PNG only. Default false."
3554
+ "type": "boolean"
1188
3555
  }
1189
3556
  },
1190
3557
  "required": [
@@ -1195,7 +3562,7 @@ export const TOOLS = [
1195
3562
  {
1196
3563
  "name": "whois",
1197
3564
  "http_name": "whois",
1198
- "description": "(0.02 USDC/call) Domain WHOIS / RDAP lookup. Registration, age, expiration, registrar, contacts, nameservers, DNSSEC, status flags.",
3565
+ "description": "(0.02 USDC/call) WHOIS / RDAP / domain age / domain expiry / registrar finder / nameserver lookup / DNSSEC check / TLD registration record / brand-protection triage. Short alias of whois-lookup. Queries the IANA-mandated RDAP endpoint and returns registered_date, age_days, expiration_date, days_until_expiry, last_changed, registrar (name + IANA id), contacts, nameservers, dnssec_signed, EPP statuses, and risk flags. Optionally appends a crt.sh certificate-transparency summary.",
1199
3566
  "method": "POST",
1200
3567
  "input_schema": {
1201
3568
  "type": "object",
@@ -1217,7 +3584,7 @@ export const TOOLS = [
1217
3584
  {
1218
3585
  "name": "whois-lookup",
1219
3586
  "http_name": "whois-lookup",
1220
- "description": "(0.02 USDC/call) WHOIS / RDAP domain lookup. Registration date, age, expiration, registrar, contacts, nameservers, DNSSEC, status flags, transfer history. Optional certificate-transparency summary.",
3587
+ "description": "(0.02 USDC/call) WHOIS / RDAP domain lookup / domain age check / registrar finder / expiration checker / nameserver inspector / DNSSEC verifier / domain transfer history / brand-protection + phishing triage / TLD registration record. Queries the IANA-mandated RDAP endpoint for the domain's TLD and returns registration date, age in days, expiration date, days-until-expiry, last-changed and transfer dates, registrar (name + IANA id), registrant/admin/tech contacts, nameservers, DNSSEC-signed flag, EPP status codes, and risk flags (newly-registered, expiring-soon, locked). Optionally appends a crt.sh certificate-transparency summary.",
1221
3588
  "method": "POST",
1222
3589
  "input_schema": {
1223
3590
  "type": "object",
@@ -1239,7 +3606,7 @@ export const TOOLS = [
1239
3606
  {
1240
3607
  "name": "wikipedia",
1241
3608
  "http_name": "wikipedia",
1242
- "description": "(0.005 USDC/call) Wikipedia API / encyclopedia lookup. Title, summary, image, sections, Wikidata id, optional 25k-char extract. 300+ languages.",
3609
+ "description": "(0.005 USDC/call) Wikipedia API / encyclopedia lookup / wiki article fetch / Wikidata-linked entity / disambiguation-aware search / multi-language wiki / RAG context source / fact-grounding fetch. Short alias of wikipedia-lookup. Resolves a query (title or near-title) to the canonical article and returns title, canonical URL, page id, Wikidata Q-id, language, plain-text intro summary, short description, page type, thumbnail + lead-image URLs, geo coordinates, full table-of-contents, and optional ~25k-char body extract. 300+ language editions.",
1243
3610
  "method": "POST",
1244
3611
  "input_schema": {
1245
3612
  "type": "object",
@@ -1265,7 +3632,7 @@ export const TOOLS = [
1265
3632
  {
1266
3633
  "name": "wikipedia-lookup",
1267
3634
  "http_name": "wikipedia-lookup",
1268
- "description": "(0.005 USDC/call) Wikipedia API / encyclopedia lookup / structured article fetch. Title, summary, image, sections, Wikidata id, optional 25k-char extract. 300+ languages.",
3635
+ "description": "(0.005 USDC/call) Wikipedia article fetcher / encyclopedia lookup / structured wiki extract / Wikidata-linked entity resolver / disambiguation-aware search / multi-language wiki API / RAG context source. Resolves a query (page title or near-title) to the canonical Wikipedia article and returns title, canonical URL, page id, Wikidata Q-id, language, plain-text intro summary, short description, page type, thumbnail and lead-image URLs, geo coordinates, full table-of-contents (sections with level and anchor), and an optional ~25k-char extract of the article body. Covers 300+ language editions.",
1269
3636
  "method": "POST",
1270
3637
  "input_schema": {
1271
3638
  "type": "object",
@@ -1287,5 +3654,138 @@ export const TOOLS = [
1287
3654
  "query"
1288
3655
  ]
1289
3656
  }
3657
+ },
3658
+ {
3659
+ "name": "x-handle-availability",
3660
+ "http_name": "x-handle-availability",
3661
+ "description": "(0.005 USDC/call) X handle availability checker / Twitter username availability / social handle lookup for brand launch workflows. Read-only X API v2 user-by-username check. Returns available=true when the handle is not found and available=false with public profile metrics when claimed. Requires X_BEARER_TOKEN; no posting, replying, liking, following, scraping, or account mutation.",
3662
+ "method": "POST",
3663
+ "input_schema": {
3664
+ "type": "object",
3665
+ "properties": {
3666
+ "username": {
3667
+ "type": "string",
3668
+ "description": "X/Twitter handle to check, with or without @, e.g. 'launchforge'."
3669
+ }
3670
+ },
3671
+ "required": [
3672
+ "username"
3673
+ ]
3674
+ }
3675
+ },
3676
+ {
3677
+ "name": "x-search",
3678
+ "http_name": "x-search",
3679
+ "description": "(0.01 USDC/call) X search API / Twitter search API / recent tweet search / public posts search / social search. Read-only X API v2 recent-search wrapper. Takes a query, excludes retweets by default, optional language filter, expands author profile data, and returns public post text, timestamps, metrics, and author username/profile fields. Requires X_BEARER_TOKEN; no posting, replying, liking, following, or account mutation.",
3680
+ "method": "POST",
3681
+ "input_schema": {
3682
+ "type": "object",
3683
+ "properties": {
3684
+ "query": {
3685
+ "type": "string",
3686
+ "description": "X recent-search query, e.g. 'x402 payments' or '(coinbase OR bankr) x402'."
3687
+ },
3688
+ "max_results": {
3689
+ "type": "number",
3690
+ "description": "Number of recent posts to fetch. Clamped to 10-50. Default 10."
3691
+ },
3692
+ "language": {
3693
+ "type": "string",
3694
+ "description": "Optional two-letter language filter, e.g. 'en'."
3695
+ }
3696
+ },
3697
+ "required": [
3698
+ "query"
3699
+ ]
3700
+ }
3701
+ },
3702
+ {
3703
+ "name": "x-user-timeline",
3704
+ "http_name": "x-user-timeline",
3705
+ "description": "(0.01 USDC/call) X user timeline API / latest public posts by X handle / social account feed. Same backend as user-tweets, listed for agents that need recent public posts from a known username. Read-only X API v2; excludes retweets unless include_retweets=true.",
3706
+ "method": "POST",
3707
+ "input_schema": {
3708
+ "type": "object",
3709
+ "properties": {
3710
+ "mode": {
3711
+ "type": "string",
3712
+ "enum": [
3713
+ "user_tweets"
3714
+ ]
3715
+ },
3716
+ "username": {
3717
+ "type": "string",
3718
+ "description": "X/Twitter handle, with or without @."
3719
+ },
3720
+ "max_results": {
3721
+ "type": "number",
3722
+ "description": "Number of recent posts to fetch. Clamped to 5-50."
3723
+ },
3724
+ "pagination_token": {
3725
+ "type": "string",
3726
+ "description": "Optional X pagination token."
3727
+ },
3728
+ "include_retweets": {
3729
+ "type": "boolean",
3730
+ "description": "Include retweets when true. Defaults false."
3731
+ }
3732
+ },
3733
+ "required": [
3734
+ "username"
3735
+ ]
3736
+ }
3737
+ },
3738
+ {
3739
+ "name": "x-username",
3740
+ "http_name": "x-username",
3741
+ "description": "(0.005 USDC/call) X username lookup / Twitter username lookup / handle resolver / public profile lookup / follower count API. Read-only X API v2 user-by-username wrapper. Accepts a handle with or without @ and returns id, username, display name, bio, verification fields, created_at, followers, following, tweet count, and listed count. Requires X_BEARER_TOKEN; no posting, replying, liking, following, or account mutation.",
3742
+ "method": "POST",
3743
+ "input_schema": {
3744
+ "type": "object",
3745
+ "properties": {
3746
+ "username": {
3747
+ "type": "string",
3748
+ "description": "X/Twitter handle, with or without @, e.g. 'bankrbot'."
3749
+ }
3750
+ },
3751
+ "required": [
3752
+ "username"
3753
+ ]
3754
+ }
3755
+ },
3756
+ {
3757
+ "name": "x-users",
3758
+ "http_name": "x-users",
3759
+ "description": "(0.01 USDC/call) X users API / bulk Twitter profile lookup / public social profile lookup. Same read-only X API v2 backend as users. Accepts usernames or numeric user IDs and returns public profile and metric fields.",
3760
+ "method": "POST",
3761
+ "input_schema": {
3762
+ "type": "object",
3763
+ "properties": {
3764
+ "mode": {
3765
+ "type": "string",
3766
+ "enum": [
3767
+ "users"
3768
+ ]
3769
+ },
3770
+ "usernames": {
3771
+ "type": "array",
3772
+ "items": {
3773
+ "type": "string"
3774
+ }
3775
+ },
3776
+ "user_ids": {
3777
+ "type": "array",
3778
+ "items": {
3779
+ "type": "string"
3780
+ }
3781
+ },
3782
+ "ids": {
3783
+ "type": "array",
3784
+ "items": {
3785
+ "type": "string"
3786
+ }
3787
+ }
3788
+ }
3789
+ }
1290
3790
  }
1291
3791
  ];