@agentutility/mcp-web-probe 0.2.2

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.
@@ -0,0 +1,1291 @@
1
+ /** Auto-generated by scripts/generate-mcp-clusters.mjs. Do not edit by hand. */
2
+ export const CLUSTER_SLUG = "web-probe";
3
+ export const VERSION = "0.2.2";
4
+ export const TOOLS = [
5
+ {
6
+ "name": "archive-snapshot",
7
+ "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.",
9
+ "method": "POST",
10
+ "input_schema": {
11
+ "type": "object",
12
+ "properties": {
13
+ "url": {
14
+ "type": "string",
15
+ "description": "Original URL to look up in the Wayback Machine archive."
16
+ },
17
+ "timestamp": {
18
+ "type": "string",
19
+ "description": "ISO 8601, YYYY-MM-DD, YYYYMMDD, or YYYYMMDDhhmmss."
20
+ },
21
+ "fetch_text": {
22
+ "type": "boolean",
23
+ "description": "Also fetch + clean the archived page. Default false."
24
+ }
25
+ },
26
+ "required": [
27
+ "url"
28
+ ]
29
+ }
30
+ },
31
+ {
32
+ "name": "arxiv-bibtex",
33
+ "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.",
35
+ "method": "POST",
36
+ "input_schema": {
37
+ "type": "object",
38
+ "properties": {
39
+ "arxiv_id": {
40
+ "type": "string",
41
+ "description": "arXiv ID. New-style (e.g. '1706.03762', '1706.03762v3') or old-style ('cs.AI/0602099'). 'arXiv:' prefix is stripped."
42
+ },
43
+ "cite_key": {
44
+ "type": "string",
45
+ "description": "Override the cite key. Default is auto-derived from first author surname + year + arxiv id."
46
+ }
47
+ },
48
+ "required": [
49
+ "arxiv_id"
50
+ ]
51
+ }
52
+ },
53
+ {
54
+ "name": "arxiv-search",
55
+ "http_name": "arxiv-search",
56
+ "description": "(0.03 USDC/call) arXiv full-text search. Search by query / author / category / id-list. Returns title, authors, abstract, primary category, dates, PDF URL, DOI. Public arXiv API.",
57
+ "method": "POST",
58
+ "input_schema": {
59
+ "type": "object",
60
+ "properties": {
61
+ "query": {
62
+ "type": "string",
63
+ "description": "Free-text search terms matched against arXiv paper titles, abstracts, and full text."
64
+ },
65
+ "author": {
66
+ "type": "string",
67
+ "description": "Author name to filter results by (matches arXiv author field)."
68
+ },
69
+ "category": {
70
+ "type": "string",
71
+ "description": "arXiv subject category code to filter by (e.g. cs.AI, math.NT, hep-th)."
72
+ },
73
+ "id_list": {
74
+ "type": "array",
75
+ "items": {
76
+ "type": "string"
77
+ },
78
+ "description": "Specific arXiv IDs to fetch directly instead of running a search query."
79
+ },
80
+ "limit": {
81
+ "type": "number",
82
+ "description": "Maximum number of papers to return in the response."
83
+ },
84
+ "sort_by": {
85
+ "type": "string",
86
+ "enum": [
87
+ "relevance",
88
+ "lastUpdatedDate",
89
+ "submittedDate"
90
+ ],
91
+ "description": "Field to sort results by, such as relevance, lastUpdatedDate, or submittedDate."
92
+ },
93
+ "sort_order": {
94
+ "type": "string",
95
+ "enum": [
96
+ "ascending",
97
+ "descending"
98
+ ],
99
+ "description": "Sort direction, either ascending or descending."
100
+ },
101
+ "include_abstract": {
102
+ "type": "boolean",
103
+ "description": "Whether to include the full paper abstract in each returned result."
104
+ }
105
+ }
106
+ }
107
+ },
108
+ {
109
+ "name": "arxiv-summarize",
110
+ "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.",
112
+ "method": "POST",
113
+ "input_schema": {
114
+ "type": "object",
115
+ "properties": {
116
+ "arxiv_id_or_url": {
117
+ "type": "string",
118
+ "description": "arXiv paper identifier (e.g. 2301.12345) or full arXiv abs/pdf URL to summarize."
119
+ },
120
+ "include_abstract": {
121
+ "type": "boolean",
122
+ "description": "Include the raw abstract in response. Default true."
123
+ }
124
+ },
125
+ "required": [
126
+ "arxiv_id_or_url"
127
+ ]
128
+ }
129
+ },
130
+ {
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.",
134
+ "method": "POST",
135
+ "input_schema": {
136
+ "type": "object",
137
+ "properties": {
138
+ "email": {
139
+ "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": {
157
+ "type": "string",
158
+ "description": "Apex domain to audit (e.g. 'google.com'). Resolves SPF/DMARC TXT at the domain and at _dmarc.<domain>."
159
+ },
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
+ "domain": {
182
+ "type": "string",
183
+ "description": "Domain or hostname to resolve (e.g. 'example.com', 'mail.example.com'). Sent as-is, not stripped to apex."
184
+ },
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."
191
+ }
192
+ },
193
+ "required": [
194
+ "domain"
195
+ ]
196
+ }
197
+ },
198
+ {
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.",
202
+ "method": "POST",
203
+ "input_schema": {
204
+ "type": "object",
205
+ "properties": {
206
+ "domain": {
207
+ "type": "string",
208
+ "description": "Domain to check (e.g. 'example.com'). Strip protocol/path automatically."
209
+ }
210
+ },
211
+ "required": [
212
+ "domain"
213
+ ]
214
+ }
215
+ },
216
+ {
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.",
220
+ "method": "POST",
221
+ "input_schema": {
222
+ "type": "object",
223
+ "properties": {
224
+ "concept": {
225
+ "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'."
227
+ },
228
+ "count": {
229
+ "type": "number",
230
+ "description": "Number of candidates to brainstorm. 1-20. Default 10. Multiplied by tlds.length must stay <= 80 lookups."
231
+ },
232
+ "tlds": {
233
+ "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."
235
+ },
236
+ "tone": {
237
+ "type": "string",
238
+ "enum": [
239
+ "neutral",
240
+ "playful",
241
+ "technical",
242
+ "luxury",
243
+ "industrial"
244
+ ],
245
+ "description": "Naming tone hint passed to the brainstorm LLM. Default 'neutral'."
246
+ }
247
+ },
248
+ "required": [
249
+ "concept"
250
+ ]
251
+ }
252
+ },
253
+ {
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.",
257
+ "method": "POST",
258
+ "input_schema": {
259
+ "type": "object",
260
+ "properties": {
261
+ "url": {
262
+ "type": "string",
263
+ "description": "Starting URL (typically a shortlink). Must be http(s)."
264
+ },
265
+ "max_hops": {
266
+ "type": "number",
267
+ "description": "1-50. Default 15."
268
+ },
269
+ "user_agent": {
270
+ "type": "string",
271
+ "description": "Optional User-Agent header to send (some shorteners gate by UA). Default is a generic browser UA."
272
+ }
273
+ },
274
+ "required": [
275
+ "url"
276
+ ]
277
+ }
278
+ },
279
+ {
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.",
283
+ "method": "POST",
284
+ "input_schema": {
285
+ "type": "object",
286
+ "properties": {
287
+ "repo": {
288
+ "type": "string",
289
+ "description": "Repository in 'owner/name' form (e.g. 'vercel/next.js')."
290
+ }
291
+ },
292
+ "required": [
293
+ "repo"
294
+ ]
295
+ }
296
+ },
297
+ {
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).",
301
+ "method": "POST",
302
+ "input_schema": {
303
+ "type": "object",
304
+ "properties": {
305
+ "repo": {
306
+ "type": "string",
307
+ "description": "Repository in 'owner/name' form."
308
+ },
309
+ "pages": {
310
+ "type": "number",
311
+ "description": "How many sample pages to walk. Range [1, 10]. Default 5."
312
+ }
313
+ },
314
+ "required": [
315
+ "repo"
316
+ ]
317
+ }
318
+ },
319
+ {
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.",
323
+ "method": "POST",
324
+ "input_schema": {
325
+ "type": "object",
326
+ "properties": {
327
+ "query": {
328
+ "type": "string",
329
+ "description": "Free-text search query (matches title, body, author, URL)."
330
+ },
331
+ "type": {
332
+ "type": "string",
333
+ "enum": [
334
+ "story",
335
+ "comment",
336
+ "poll"
337
+ ],
338
+ "description": "Restrict to a single HN item type. Omit to include all types."
339
+ },
340
+ "author": {
341
+ "type": "string",
342
+ "description": "Filter to a specific HN username (e.g. 'pg', 'dang')."
343
+ },
344
+ "min_points": {
345
+ "type": "number",
346
+ "description": "Minimum points (upvotes) floor. Comments don't have points; using this implicitly filters to stories."
347
+ },
348
+ "since": {
349
+ "type": "string",
350
+ "description": "Lower bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
351
+ },
352
+ "until": {
353
+ "type": "string",
354
+ "description": "Upper bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
355
+ },
356
+ "sort": {
357
+ "type": "string",
358
+ "enum": [
359
+ "relevance",
360
+ "date"
361
+ ],
362
+ "description": "'relevance' (default, popularity-weighted) or 'date' (most-recent-first)."
363
+ },
364
+ "limit": {
365
+ "type": "number",
366
+ "description": "Max hits to return. 1-20. Default 10."
367
+ }
368
+ },
369
+ "required": [
370
+ "query"
371
+ ]
372
+ }
373
+ },
374
+ {
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.",
378
+ "method": "POST",
379
+ "input_schema": {
380
+ "type": "object",
381
+ "properties": {
382
+ "query": {
383
+ "type": "string",
384
+ "description": "Free-text search query (matches title, body, author, URL)."
385
+ },
386
+ "type": {
387
+ "type": "string",
388
+ "enum": [
389
+ "story",
390
+ "comment",
391
+ "poll"
392
+ ],
393
+ "description": "Restrict to a single HN item type. Omit to include all types."
394
+ },
395
+ "author": {
396
+ "type": "string",
397
+ "description": "Filter to a specific HN username (e.g. 'pg', 'dang')."
398
+ },
399
+ "min_points": {
400
+ "type": "number",
401
+ "description": "Minimum points (upvotes) floor. Comments don't have points; using this implicitly filters to stories."
402
+ },
403
+ "since": {
404
+ "type": "string",
405
+ "description": "Lower bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
406
+ },
407
+ "until": {
408
+ "type": "string",
409
+ "description": "Upper bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
410
+ },
411
+ "sort": {
412
+ "type": "string",
413
+ "enum": [
414
+ "relevance",
415
+ "date"
416
+ ],
417
+ "description": "'relevance' (default, popularity-weighted) or 'date' (most-recent-first)."
418
+ },
419
+ "limit": {
420
+ "type": "number",
421
+ "description": "Max hits to return. 1-20. Default 10."
422
+ }
423
+ },
424
+ "required": [
425
+ "query"
426
+ ]
427
+ }
428
+ },
429
+ {
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.",
433
+ "method": "POST",
434
+ "input_schema": {
435
+ "type": "object",
436
+ "properties": {
437
+ "text": {
438
+ "type": "string",
439
+ "description": "Max 10000 chars."
440
+ }
441
+ },
442
+ "required": [
443
+ "text"
444
+ ]
445
+ }
446
+ },
447
+ {
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.",
451
+ "method": "POST",
452
+ "input_schema": {
453
+ "type": "object",
454
+ "properties": {
455
+ "ip": {
456
+ "type": "string",
457
+ "description": "IPv4 or IPv6 address."
458
+ }
459
+ },
460
+ "required": [
461
+ "ip"
462
+ ]
463
+ }
464
+ },
465
+ {
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.",
469
+ "method": "POST",
470
+ "input_schema": {
471
+ "type": "object",
472
+ "properties": {
473
+ "jwt": {
474
+ "type": "string",
475
+ "description": "JWT (with or without 'Bearer ' prefix)."
476
+ }
477
+ },
478
+ "required": [
479
+ "jwt"
480
+ ]
481
+ }
482
+ },
483
+ {
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.",
487
+ "method": "POST",
488
+ "input_schema": {
489
+ "type": "object",
490
+ "properties": {
491
+ "query": {
492
+ "type": "string",
493
+ "description": "Seed query."
494
+ },
495
+ "limit": {
496
+ "type": "number",
497
+ "description": "1-50. Default 10."
498
+ },
499
+ "source": {
500
+ "type": "string",
501
+ "enum": [
502
+ "wikipedia",
503
+ "duckduckgo",
504
+ "all"
505
+ ],
506
+ "description": "Default 'all'."
507
+ },
508
+ "lang": {
509
+ "type": "string",
510
+ "description": "Wikipedia language code, e.g. 'en', 'es'. Default 'en'."
511
+ }
512
+ },
513
+ "required": [
514
+ "query"
515
+ ]
516
+ }
517
+ },
518
+ {
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).",
522
+ "method": "POST",
523
+ "input_schema": {
524
+ "type": "object",
525
+ "properties": {
526
+ "url": {
527
+ "type": "string",
528
+ "description": "Page URL to fetch and extract from. http or https only. Private/loopback rejected. Redirects followed."
529
+ },
530
+ "include_external_only": {
531
+ "type": "boolean",
532
+ "description": "If true, drop same-host links. Default false."
533
+ },
534
+ "max_links": {
535
+ "type": "number",
536
+ "description": "Max links to return (1-2000). Default 500."
537
+ },
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."
545
+ }
546
+ },
547
+ "required": [
548
+ "url"
549
+ ]
550
+ }
551
+ },
552
+ {
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).",
556
+ "method": "POST",
557
+ "input_schema": {
558
+ "type": "object",
559
+ "properties": {
560
+ "url": {
561
+ "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."
567
+ },
568
+ "list_resources": {
569
+ "type": "boolean",
570
+ "description": "Also call resources/list. Default false."
571
+ },
572
+ "list_prompts": {
573
+ "type": "boolean",
574
+ "description": "Also call prompts/list. Default false."
575
+ }
576
+ },
577
+ "required": [
578
+ "url"
579
+ ]
580
+ }
581
+ },
582
+ {
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.",
586
+ "method": "POST",
587
+ "input_schema": {
588
+ "type": "object",
589
+ "properties": {
590
+ "package": {
591
+ "type": "string",
592
+ "description": "npm package name. Supports scoped names ('@types/node', '@vercel/next')."
593
+ },
594
+ "recent_versions": {
595
+ "type": "number",
596
+ "description": "How many most-recent version entries to include. 1-20. Default 5."
597
+ }
598
+ },
599
+ "required": [
600
+ "package"
601
+ ]
602
+ }
603
+ },
604
+ {
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.",
608
+ "method": "POST",
609
+ "input_schema": {
610
+ "type": "object",
611
+ "properties": {
612
+ "password": {
613
+ "type": "string",
614
+ "description": "Password to score. Sent over TLS to the worker but never logged. Max 200 chars."
615
+ },
616
+ "check_breaches": {
617
+ "type": "boolean",
618
+ "description": "Check HIBP. Default true. Sends only first 5 chars of SHA-1 (k-anonymity)."
619
+ }
620
+ },
621
+ "required": [
622
+ "password"
623
+ ]
624
+ }
625
+ },
626
+ {
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.",
630
+ "method": "POST",
631
+ "input_schema": {
632
+ "type": "object",
633
+ "properties": {
634
+ "query": {
635
+ "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."
641
+ },
642
+ "date_from": {
643
+ "type": "string",
644
+ "description": "Lower bound on publication date (YYYY/MM/DD or YYYY-MM-DD)."
645
+ },
646
+ "date_to": {
647
+ "type": "string",
648
+ "description": "Upper bound on publication date (YYYY/MM/DD or YYYY-MM-DD)."
649
+ },
650
+ "sort": {
651
+ "type": "string",
652
+ "enum": [
653
+ "relevance",
654
+ "pub_date",
655
+ "first_author"
656
+ ],
657
+ "description": "Result ordering. Default 'relevance'."
658
+ },
659
+ "include_abstract": {
660
+ "type": "boolean",
661
+ "description": "If true (default), include the abstract text per paper. Set false for a smaller, faster response."
662
+ }
663
+ },
664
+ "required": [
665
+ "query"
666
+ ]
667
+ }
668
+ },
669
+ {
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.",
673
+ "method": "POST",
674
+ "input_schema": {
675
+ "type": "object",
676
+ "properties": {
677
+ "package": {
678
+ "type": "string",
679
+ "description": "PyPI package name. Case-insensitive; PEP 503 normalization applied internally."
680
+ },
681
+ "recent_versions": {
682
+ "type": "number",
683
+ "description": "How many most-recent versions to include. 1-20. Default 5."
684
+ }
685
+ },
686
+ "required": [
687
+ "package"
688
+ ]
689
+ }
690
+ },
691
+ {
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.",
695
+ "method": "POST",
696
+ "input_schema": {
697
+ "type": "object",
698
+ "properties": {
699
+ "image_url": {
700
+ "type": "string",
701
+ "description": "Public http(s) URL of an image containing one or more QR codes. Must be directly fetchable."
702
+ }
703
+ },
704
+ "required": [
705
+ "image_url"
706
+ ]
707
+ }
708
+ },
709
+ {
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.",
713
+ "method": "POST",
714
+ "input_schema": {
715
+ "type": "object",
716
+ "properties": {
717
+ "text": {
718
+ "type": "string",
719
+ "description": "Text to encode. Any string up to ~4296 chars (alphanumeric)."
720
+ },
721
+ "format": {
722
+ "type": "string",
723
+ "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."
732
+ },
733
+ "error_correction": {
734
+ "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."
742
+ },
743
+ "margin": {
744
+ "type": "number",
745
+ "description": "Quiet-zone margin in modules. Range [0, 20]. Default 4."
746
+ },
747
+ "foreground": {
748
+ "type": "string",
749
+ "description": "QR module color as 6 or 8-digit hex (e.g. '#000000'). Default '#000000'."
750
+ },
751
+ "background": {
752
+ "type": "string",
753
+ "description": "Background color as 6 or 8-digit hex (e.g. '#FFFFFF'). Default '#FFFFFF'."
754
+ }
755
+ },
756
+ "required": [
757
+ "text"
758
+ ]
759
+ }
760
+ },
761
+ {
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.",
765
+ "method": "POST",
766
+ "input_schema": {
767
+ "type": "object",
768
+ "properties": {
769
+ "url": {
770
+ "type": "string",
771
+ "description": "Page URL to fetch and convert into an RSS 2.0 feed."
772
+ },
773
+ "feed_title": {
774
+ "type": "string",
775
+ "description": "Override channel title. Default page title."
776
+ },
777
+ "item_selector": {
778
+ "type": "string",
779
+ "description": "Selector for each item. If omitted, auto-detection runs."
780
+ },
781
+ "title_selector": {
782
+ "type": "string",
783
+ "description": "Optional CSS selector for item titles; overrides auto-detection."
784
+ },
785
+ "link_selector": {
786
+ "type": "string",
787
+ "description": "Optional CSS selector for item links; overrides auto-detection."
788
+ },
789
+ "date_selector": {
790
+ "type": "string",
791
+ "description": "Optional CSS selector for item publish dates; overrides auto-detection."
792
+ },
793
+ "description_selector": {
794
+ "type": "string",
795
+ "description": "Optional CSS selector for item descriptions or summaries; overrides auto-detection."
796
+ },
797
+ "max_items": {
798
+ "type": "number",
799
+ "description": "Default 50, max 200."
800
+ }
801
+ },
802
+ "required": [
803
+ "url"
804
+ ]
805
+ }
806
+ },
807
+ {
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.",
811
+ "method": "POST",
812
+ "input_schema": {
813
+ "type": "object",
814
+ "properties": {
815
+ "url": {
816
+ "type": "string",
817
+ "description": "Public http/https URL to scrape."
818
+ },
819
+ "format": {
820
+ "type": "string",
821
+ "enum": [
822
+ "text",
823
+ "html",
824
+ "markdown"
825
+ ],
826
+ "description": "'text' (default), 'html', or 'markdown'."
827
+ },
828
+ "include_links": {
829
+ "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."
835
+ }
836
+ },
837
+ "required": [
838
+ "url"
839
+ ]
840
+ }
841
+ },
842
+ {
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-based — fast, no headless browser.",
846
+ "method": "POST",
847
+ "input_schema": {
848
+ "type": "object",
849
+ "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
+ "user_agent": {
868
+ "type": "string",
869
+ "description": "Override the User-Agent header."
870
+ }
871
+ },
872
+ "required": [
873
+ "url"
874
+ ]
875
+ }
876
+ },
877
+ {
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.",
881
+ "method": "POST",
882
+ "input_schema": {
883
+ "type": "object",
884
+ "properties": {
885
+ "url": {
886
+ "type": "string",
887
+ "description": "Public http/https URL."
888
+ },
889
+ "format": {
890
+ "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."
908
+ },
909
+ "height": {
910
+ "type": "number",
911
+ "description": "Final image height 1-8000."
912
+ },
913
+ "fit": {
914
+ "type": "string",
915
+ "description": "'max' (default), 'crop', or 'scale'."
916
+ },
917
+ "quality": {
918
+ "type": "number",
919
+ "description": "JPG quality 1-100."
920
+ },
921
+ "transparent_background": {
922
+ "type": "boolean",
923
+ "description": "PNG only. Default false."
924
+ }
925
+ },
926
+ "required": [
927
+ "url"
928
+ ]
929
+ }
930
+ },
931
+ {
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.",
935
+ "method": "POST",
936
+ "input_schema": {
937
+ "type": "object",
938
+ "properties": {
939
+ "url": {
940
+ "type": "string",
941
+ "description": "Site root (e.g. https://example.com) or direct sitemap URL."
942
+ },
943
+ "limit": {
944
+ "type": "number",
945
+ "description": "Max URL rows. 1-5000. Default 1000."
946
+ },
947
+ "recurse": {
948
+ "type": "boolean",
949
+ "description": "Recurse into sitemap-index children. Default true."
950
+ },
951
+ "user_agent": {
952
+ "type": "string",
953
+ "description": "Optional User-Agent header."
954
+ }
955
+ },
956
+ "required": [
957
+ "url"
958
+ ]
959
+ }
960
+ },
961
+ {
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).",
965
+ "method": "POST",
966
+ "input_schema": {
967
+ "type": "object",
968
+ "properties": {
969
+ "host": {
970
+ "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."
976
+ }
977
+ },
978
+ "required": [
979
+ "host"
980
+ ]
981
+ }
982
+ },
983
+ {
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.",
987
+ "method": "POST",
988
+ "input_schema": {
989
+ "type": "object",
990
+ "properties": {
991
+ "host": {
992
+ "type": "string",
993
+ "description": "Hostname to inspect (e.g. example.com); SNI used to fetch the active leaf certificate from CT logs."
994
+ },
995
+ "history": {
996
+ "type": "boolean",
997
+ "description": "Include up to 50 historical cert entries. Default false."
998
+ }
999
+ },
1000
+ "required": [
1001
+ "host"
1002
+ ]
1003
+ }
1004
+ },
1005
+ {
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.",
1009
+ "method": "POST",
1010
+ "input_schema": {
1011
+ "type": "object",
1012
+ "properties": {
1013
+ "domain": {
1014
+ "type": "string",
1015
+ "description": "Root domain to enumerate subdomains for (e.g. example.com); no protocol or path."
1016
+ },
1017
+ "include_wildcards": {
1018
+ "type": "boolean",
1019
+ "description": "Include *.example.com entries. Default false."
1020
+ }
1021
+ },
1022
+ "required": [
1023
+ "domain"
1024
+ ]
1025
+ }
1026
+ },
1027
+ {
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.",
1031
+ "method": "POST",
1032
+ "input_schema": {
1033
+ "type": "object",
1034
+ "properties": {
1035
+ "url": {
1036
+ "type": "string",
1037
+ "description": "Target URL (http or https). Single GET request follows redirects; final_url is reported."
1038
+ }
1039
+ },
1040
+ "required": [
1041
+ "url"
1042
+ ]
1043
+ }
1044
+ },
1045
+ {
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.",
1049
+ "method": "POST",
1050
+ "input_schema": {
1051
+ "type": "object",
1052
+ "properties": {
1053
+ "tld": {
1054
+ "type": "string",
1055
+ "description": "TLD without leading dot (e.g. 'ai', 'com', 'co.uk' uses just 'uk')."
1056
+ }
1057
+ },
1058
+ "required": [
1059
+ "tld"
1060
+ ]
1061
+ }
1062
+ },
1063
+ {
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.",
1067
+ "method": "POST",
1068
+ "input_schema": {
1069
+ "type": "object",
1070
+ "properties": {
1071
+ "url": {
1072
+ "type": "string",
1073
+ "description": "Page URL (http or https) to fetch and parse."
1074
+ },
1075
+ "user_agent": {
1076
+ "type": "string",
1077
+ "description": "Optional User-Agent header sent on fetch."
1078
+ },
1079
+ "follow_redirects": {
1080
+ "type": "boolean",
1081
+ "description": "Default true."
1082
+ }
1083
+ },
1084
+ "required": [
1085
+ "url"
1086
+ ]
1087
+ }
1088
+ },
1089
+ {
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.",
1093
+ "method": "POST",
1094
+ "input_schema": {
1095
+ "type": "object",
1096
+ "properties": {
1097
+ "user_agent": {
1098
+ "type": "string",
1099
+ "description": "Raw User-Agent header string. Up to 2000 chars."
1100
+ }
1101
+ },
1102
+ "required": [
1103
+ "user_agent"
1104
+ ]
1105
+ }
1106
+ },
1107
+ {
1108
+ "name": "webpage-diff",
1109
+ "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.",
1111
+ "method": "POST",
1112
+ "input_schema": {
1113
+ "type": "object",
1114
+ "properties": {
1115
+ "url": {
1116
+ "type": "string",
1117
+ "description": "Page URL to fetch (http or https). Server follows redirects and reports the final_url."
1118
+ },
1119
+ "previous_hash": {
1120
+ "type": "string",
1121
+ "description": "SHA-256 hex from a previous call."
1122
+ },
1123
+ "previous_text": {
1124
+ "type": "string",
1125
+ "description": "Previous cleaned text. Triggers a line diff."
1126
+ },
1127
+ "selector": {
1128
+ "type": "string",
1129
+ "description": "Optional CSS selector to limit content scope."
1130
+ }
1131
+ },
1132
+ "required": [
1133
+ "url"
1134
+ ]
1135
+ }
1136
+ },
1137
+ {
1138
+ "name": "website-screenshot",
1139
+ "http_name": "website-screenshot",
1140
+ "description": "(0.04 USDC/call) URL to PNG / JPG / website screenshot tool. Configurable viewport, retina, crop/fit, transparent BG, JPG quality, JS wait conditions. CloudConvert capture.",
1141
+ "method": "POST",
1142
+ "input_schema": {
1143
+ "type": "object",
1144
+ "properties": {
1145
+ "url": {
1146
+ "type": "string",
1147
+ "description": "Public http/https URL."
1148
+ },
1149
+ "format": {
1150
+ "type": "string",
1151
+ "enum": [
1152
+ "png",
1153
+ "jpg"
1154
+ ],
1155
+ "description": "'png' (default) or 'jpg'."
1156
+ },
1157
+ "screen_width": {
1158
+ "type": "number",
1159
+ "description": "Viewport width 320-3840. Default 1440."
1160
+ },
1161
+ "screen_height": {
1162
+ "type": "number",
1163
+ "description": "Viewport height 240-4320."
1164
+ },
1165
+ "device_scale_factor": {
1166
+ "type": "number",
1167
+ "description": "1-4 (retina). Default 1."
1168
+ },
1169
+ "width": {
1170
+ "type": "number",
1171
+ "description": "Final image width 1-8000."
1172
+ },
1173
+ "height": {
1174
+ "type": "number",
1175
+ "description": "Final image height 1-8000."
1176
+ },
1177
+ "fit": {
1178
+ "type": "string",
1179
+ "description": "'max' (default), 'crop', or 'scale'."
1180
+ },
1181
+ "quality": {
1182
+ "type": "number",
1183
+ "description": "JPG quality 1-100."
1184
+ },
1185
+ "transparent_background": {
1186
+ "type": "boolean",
1187
+ "description": "PNG only. Default false."
1188
+ }
1189
+ },
1190
+ "required": [
1191
+ "url"
1192
+ ]
1193
+ }
1194
+ },
1195
+ {
1196
+ "name": "whois",
1197
+ "http_name": "whois",
1198
+ "description": "(0.02 USDC/call) Domain WHOIS / RDAP lookup. Registration, age, expiration, registrar, contacts, nameservers, DNSSEC, status flags.",
1199
+ "method": "POST",
1200
+ "input_schema": {
1201
+ "type": "object",
1202
+ "properties": {
1203
+ "domain": {
1204
+ "type": "string",
1205
+ "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain."
1206
+ },
1207
+ "include_certificates": {
1208
+ "type": "boolean",
1209
+ "description": "If true, attaches a crt.sh certificate-transparency summary. Default false."
1210
+ }
1211
+ },
1212
+ "required": [
1213
+ "domain"
1214
+ ]
1215
+ }
1216
+ },
1217
+ {
1218
+ "name": "whois-lookup",
1219
+ "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.",
1221
+ "method": "POST",
1222
+ "input_schema": {
1223
+ "type": "object",
1224
+ "properties": {
1225
+ "domain": {
1226
+ "type": "string",
1227
+ "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain before query."
1228
+ },
1229
+ "include_certificates": {
1230
+ "type": "boolean",
1231
+ "description": "If true, fetch a crt.sh certificate-transparency summary (issuer counts, first/last seen, total certs). Default false."
1232
+ }
1233
+ },
1234
+ "required": [
1235
+ "domain"
1236
+ ]
1237
+ }
1238
+ },
1239
+ {
1240
+ "name": "wikipedia",
1241
+ "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.",
1243
+ "method": "POST",
1244
+ "input_schema": {
1245
+ "type": "object",
1246
+ "properties": {
1247
+ "query": {
1248
+ "type": "string",
1249
+ "description": "Search term or article title (e.g. 'Albert Einstein', 'mitochondria'). Resolved via MediaWiki search to the best-matching page."
1250
+ },
1251
+ "language": {
1252
+ "type": "string",
1253
+ "description": "Wiki language code (e.g. 'en', 'de', 'ja', 'es'). Default 'en'."
1254
+ },
1255
+ "full_text": {
1256
+ "type": "boolean",
1257
+ "description": "If true, include a plain-text extract of the full article body (truncated to ~25k chars). Default false."
1258
+ }
1259
+ },
1260
+ "required": [
1261
+ "query"
1262
+ ]
1263
+ }
1264
+ },
1265
+ {
1266
+ "name": "wikipedia-lookup",
1267
+ "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.",
1269
+ "method": "POST",
1270
+ "input_schema": {
1271
+ "type": "object",
1272
+ "properties": {
1273
+ "query": {
1274
+ "type": "string",
1275
+ "description": "Search term or page title (e.g. 'Albert Einstein', 'mitochondria'). Resolved via MediaWiki search to the best-matching article."
1276
+ },
1277
+ "language": {
1278
+ "type": "string",
1279
+ "description": "Wiki language code (e.g. 'en', 'de', 'ja', 'es'). Default 'en'. Routes to <lang>.wikipedia.org."
1280
+ },
1281
+ "full_text": {
1282
+ "type": "boolean",
1283
+ "description": "If true, include a plain-text extract of the full article body (truncated to ~25k chars). Default false (summary only)."
1284
+ }
1285
+ },
1286
+ "required": [
1287
+ "query"
1288
+ ]
1289
+ }
1290
+ }
1291
+ ];