netintel-mcp 1.1.51 → 1.1.53

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.
Files changed (3) hide show
  1. package/README.md +8 -8
  2. package/dist/index.js +15 -15
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -35,7 +35,7 @@ Or add manually to your Claude Desktop config:
35
35
 
36
36
  | Tool | Description | Price |
37
37
  |------|-------------|-------|
38
- | netintel_dns_lookup | DNS lookup / nslookup / dig API — resolve the common DNS record types… | $0.002 |
38
+ | netintel_dns_lookup | DNS lookup for any domain — resolve A, AAAA, MX, TXT, NS, CNAME, SOA… | $0.002 |
39
39
  | netintel_ssl_analyze | Performs a TLS handshake to inspect the certificate chain, probes… | $0.007 |
40
40
  | netintel_redirect_trace | Follows a URL through its full redirect chain (up to 20 hops)… | $0.01 |
41
41
  | netintel_security_headers | Fetches a URL and evaluates 10 security-critical response headers (CSP… | $0.01 |
@@ -43,7 +43,7 @@ Or add manually to your Claude Desktop config:
43
43
  | netintel_cloud_fingerprint | Fingerprints a domain's cloud infrastructure — DNS records, HTTP… | $0.01 |
44
44
  | netintel_schema_parse | Extract structured data from any unstructured text into your own JSON… | $0.01 |
45
45
  | netintel_asn_lookup | Resolves an IP address or domain to its Autonomous System Number (ASN)… | $0.03 |
46
- | netintel_whois_lookup | WHOIS domain lookup via RDAP — registrar, creation/expiry/updated… | $0.003 |
46
+ | netintel_whois_lookup | Domain registration lookup, WHOIS via RDAP — registrar, registration… | $0.003 |
47
47
  | netintel_cert_transparency | Query the crt.sh certificate transparency log database to enumerate all… | $0.01 |
48
48
  | netintel_subnet_calc | Calculates IPv4/IPv6 subnet details from CIDR notation —… | $0.005 |
49
49
  | netintel_dns_propagation | Query a domain's DNS record across 10 geographically distributed public… | $0.03 |
@@ -60,7 +60,7 @@ Or add manually to your Claude Desktop config:
60
60
  | netintel_rss_parser | Fetch and parse any RSS 2.0 or Atom feed URL and return structured… | $0.01 |
61
61
  | netintel_username_check | Check username availability across 20+ social platforms and developer… | $0.03 |
62
62
  | netintel_wayback_lookup | Query the Internet Archive Wayback Machine to check if a URL has ever… | $0.01 |
63
- | netintel_ip_reputation | Check an IP address against AbuseIPDB and AlienVault OTX threat feeds… | $0.05 |
63
+ | netintel_ip_reputation | IP reputation and malicious-IP check — screens an address against… | $0.05 |
64
64
  | netintel_cron_parser | Parse any cron expression into a human-readable explanation, validate… | $0.03 |
65
65
  | netintel_currency_exchange | Convert any amount between 32 fiat currencies (live European Central… | $0.01 |
66
66
  | netintel_github_intel | Fetch public metadata for any GitHub repository — stars, forks, open… | $0.03 |
@@ -79,7 +79,7 @@ Or add manually to your Claude Desktop config:
79
79
  | netintel_name_gen | Generate brandable startup/product names from a keyword using prefixes… | $0.05 |
80
80
  | netintel_tld_price | Reference registration/renewal/transfer pricing from a curated table of… | $0.01 |
81
81
  | netintel_typosquat | Generate common typo and look-alike variations of a domain and check… | $0.05 |
82
- | netintel_classify | Text classification API — zero-shot text classifier / categorization:… | $0.005 |
82
+ | netintel_classify | Classify text into your own categories — zero-shot: supply 2–20 labels… | $0.005 |
83
83
  | netintel_content_moderate | Moderate text content using Claude Haiku — flags categories like… | $0.005 |
84
84
  | netintel_entity_extract | Extract named entities from text using Claude Haiku — people… | $0.05 |
85
85
  | netintel_sentiment | Sentiment analysis API — analyze sentiment of text and get a text… | $0.002 |
@@ -99,7 +99,7 @@ Or add manually to your Claude Desktop config:
99
99
  | netintel_markdown | Convert messy HTML or text into clean, well-structured Markdown using… | $0.03 |
100
100
  | netintel_normalize | Conform messy or inconsistent JSON to a target schema using Claude… | $0.05 |
101
101
  | netintel_text_to_json | Turn unstructured text into structured JSON matching a caller-supplied… | $0.05 |
102
- | netintel_web | Extract article / main content from any URL or PDF to clean, LLM-ready… | $0.003 |
102
+ | netintel_web | Extract text from a web page or PDF as clean Markdown — HTML to… | $0.003 |
103
103
  | netintel_money | Normalize any messy money string into a typed decimal amount plus ISO… | $0.01 |
104
104
  | netintel_calendar | Turn event fields into a valid RFC 5545 .ics calendar file — handles… | $0.005 |
105
105
  | netintel_event_classify | Cheap, fast "is this a dateable event?" filter for social and web text… | $0.02 |
@@ -134,7 +134,7 @@ Or add manually to your Claude Desktop config:
134
134
  | netintel_v1_chat_completions | OpenAI-compatible chat completions gateway — standard… | $0.005 |
135
135
  | netintel_crypto_market | Structured live crypto market data for ~50 top assets in one JSON call:… | $0.005 |
136
136
  | netintel_gas_price | Live gas prices across Base, Ethereum, Arbitrum, Optimism, and Polygon… | $0.002 |
137
- | netintel_crypto_price | Spot prices for up to 25 crypto assets in one call — USD, EUR, or GBP —… | $0.005 |
137
+ | netintel_crypto_price | Crypto prices for up to 25 coins in one call — live cryptocurrency spot… | $0.005 |
138
138
  | netintel_crypto_ohlc | Historical OHLC candles for any major crypto asset — hourly or daily… | $0.02 |
139
139
  | netintel_currency_exchange_batch | Convert one base currency to up to 30 targets in a single call — fiat… | $0.02 |
140
140
  | netintel_currency_exchange_history | Daily historical exchange-rate series for any currency pair — fiat via… | $0.02 |
@@ -148,11 +148,11 @@ Or add manually to your Claude Desktop config:
148
148
  | netintel_weather_forecast | Multi-day weather forecast for any city or lat/lon worldwide — up to 16… | $0.003 |
149
149
  | netintel_prediction_markets | Live prediction-market odds from Polymarket — list the top active… | $0.005 |
150
150
  | netintel_prediction_market | Full detail for ONE Polymarket prediction market by id or slug —… | $0.003 |
151
- | netintel_ssl_cert | Fast SSL/TLS certificate facts for any domain — issuer, subject, SANs… | $0.003 |
151
+ | netintel_ssl_cert | SSL certificate check for any domain — issuer, subject, SANs, valid… | $0.003 |
152
152
  | netintel_text_chunk | Split text into overlapping chunks for RAG ingestion — by characters or… | $0.001 |
153
153
  | netintel_text_stats | Instant text statistics — characters (with/without spaces), words… | $0.001 |
154
154
  | netintel_embeddings | Multilingual text embeddings (384-dim) served in-house, no OpenAI… | $0.001 |
155
- | netintel_email_verify | Verify an email address before you send: syntax + MX +… | $0.001 |
155
+ | netintel_email_verify | Validate an email address — email verification before you send: syntax… | $0.001 |
156
156
  | netintel_exa_search | Exa neural web search for AI agents — POST or GET a query, get ranked… | $0.01 |
157
157
  | netintel_web_search | Web search for AI agents — one query in, ranked live results out… | $0.01 |
158
158
  | netintel_exa_contents | Clean page text for up to 3 URLs in one call via Exa's index + live… | $0.005 |
package/dist/index.js CHANGED
@@ -25,7 +25,7 @@ function params(obj) {
25
25
  }
26
26
  function registerTools(server, api) {
27
27
  // 1. DNS Lookup
28
- server.tool("netintel_dns_lookup", "Resolve all DNS records for a domain including A, MX, TXT, SPF, DKIM, DMARC. Returns propagation consistency across Google, Cloudflare and Quad9 resolvers.", { domain: z.string() }, async ({ domain }) => {
28
+ server.tool("netintel_dns_lookup", "DNS lookup for any domain — resolve A, AAAA, MX, TXT, NS, CNAME, SOA and PTR records in one call. Parses SPF/DMARC from TXT plus DKIM, and cross-checks A records across Google, Cloudflare and Quad9 resolvers for propagation consistency.", { domain: z.string() }, async ({ domain }) => {
29
29
  try {
30
30
  const res = await api.get("/dns/lookup", { params: { domain } });
31
31
  return ok(res.data);
@@ -105,7 +105,7 @@ function registerTools(server, api) {
105
105
  }
106
106
  });
107
107
  // 9. WHOIS Lookup
108
- server.tool("netintel_whois_lookup", "Look up domain registration via RDAP — registrar, creation date, expiry date, nameservers, and domain trustworthiness score.", { domain: z.string() }, async ({ domain }) => {
108
+ server.tool("netintel_whois_lookup", "Domain registration lookup, WHOIS via RDAP — registrar, registration and expiry dates, last-updated date, nameservers, and status flags from the authoritative registry, plus an actionability score for domain trustworthiness, ownership, or availability risk.", { domain: z.string() }, async ({ domain }) => {
109
109
  try {
110
110
  const res = await api.get("/whois-rdap/lookup", { params: { domain } });
111
111
  return ok(res.data);
@@ -223,7 +223,7 @@ function registerTools(server, api) {
223
223
  }
224
224
  });
225
225
  // 20. Page Extract
226
- server.tool("netintel_page_extract", "Fetch any article or web page and extract clean readable text stripped of ads and boilerplate. Returns content, word count, reading time, and language.", { url: z.string() }, async ({ url }) => {
226
+ server.tool("netintel_page_extract", "Fetch any article or web page and extract clean readable text stripped of ads and boilerplate. Returns content, word count, reading time, and language. For JavaScript-rendered or bot-walled pages a plain fetch can't read, use netintel_exa_contents instead.", { url: z.string() }, async ({ url }) => {
227
227
  try {
228
228
  const res = await api.get("/page-extract/read", { params: { url } });
229
229
  return ok(res.data);
@@ -287,7 +287,7 @@ function registerTools(server, api) {
287
287
  }
288
288
  });
289
289
  // 26. IP Reputation
290
- server.tool("netintel_ip_reputation", "Check IP against AbuseIPDB and AlienVault OTX. Returns composite risk score, threat categories, and malware families.", { ip: z.string() }, async ({ ip }) => {
290
+ server.tool("netintel_ip_reputation", "IP reputation and malicious-IP check — screens an address against AbuseIPDB and AlienVault OTX threat feeds and returns a composite risk score, threat categories, malware families, and full source data.", { ip: z.string() }, async ({ ip }) => {
291
291
  try {
292
292
  const res = await api.get("/ip-reputation/analyze", { params: { ip } });
293
293
  return ok(res.data);
@@ -481,7 +481,7 @@ function registerTools(server, api) {
481
481
  }
482
482
  });
483
483
  // 45. Classify (POST)
484
- server.tool("netintel_classify", "Classify text into caller-supplied categories using Claude Haiku — zero-shot classification where the agent provides the label set and gets back the best-matching category with confidence and per-label scores, so agents can route, tag, and…", { text: z.string(), labels: z.array(z.string()), multi_label: z.boolean().optional() }, async ({ text, labels, multi_label }) => {
484
+ server.tool("netintel_classify", "Classify text into your own categories — zero-shot: supply 2–20 labels and Claude Haiku returns the best-matching category with confidence and per-label scores. Route, tag, triage, and detect intent or topic with your own taxonomy in one call.", { text: z.string(), labels: z.array(z.string()), multi_label: z.boolean().optional() }, async ({ text, labels, multi_label }) => {
485
485
  try {
486
486
  const res = await api.post("/classify", { text, labels, multi_label });
487
487
  return ok(res.data);
@@ -681,7 +681,7 @@ function registerTools(server, api) {
681
681
  }
682
682
  });
683
683
  // 65. Web
684
- server.tool("netintel_web", "Fetch any web page or PDF and convert it to clean, structured Markdown — strips scripts, nav, ads, and boilerplate while preserving headings, links, lists, tables, code blocks, and blockquotes; extracts the text layer from PDFs. Returns…", { url: z.string() }, async ({ url }) => {
684
+ server.tool("netintel_web", "Extract text from a web page or PDF as clean Markdown — HTML to Markdown for any URL: strips scripts, nav, ads, and boilerplate while preserving headings, links, lists, tables, code blocks, and blockquotes; extracts the text layer from PDFs. Returns the Markdown body, title, word count, and a quality grade. For JavaScript-rendered or bot-walled pages a plain fetch can't read, use netintel_exa_contents instead.", { url: z.string() }, async ({ url }) => {
685
685
  try {
686
686
  const res = await api.get("/web/extract", { params: { url } });
687
687
  return ok(res.data);
@@ -851,7 +851,7 @@ function registerTools(server, api) {
851
851
  }
852
852
  });
853
853
  // 82. Openai (POST)
854
- server.tool("netintel_openai_gpt_4_1_mini", "Call OpenAI's gpt-4.1-mini via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.02 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output. Search terms:…", { messages: z.array(z.any()), max_tokens: z.number().optional(), temperature: z.number().optional(), top_p: z.number().optional() }, async ({ messages, max_tokens, temperature, top_p }) => {
854
+ server.tool("netintel_openai_gpt_4_1_mini", "Call OpenAI's gpt-4.1-mini via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.005 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output. Search terms:…", { messages: z.array(z.any()), max_tokens: z.number().optional(), temperature: z.number().optional(), top_p: z.number().optional() }, async ({ messages, max_tokens, temperature, top_p }) => {
855
855
  try {
856
856
  const res = await api.post("/openai/gpt-4-1-mini", { messages, max_tokens, temperature, top_p });
857
857
  return ok(res.data);
@@ -861,7 +861,7 @@ function registerTools(server, api) {
861
861
  }
862
862
  });
863
863
  // 83. Openai (POST)
864
- server.tool("netintel_openai_gpt_4o_mini", "Call OpenAI's gpt-4o-mini via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.01 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output. Search terms: OpenAI…", { messages: z.array(z.any()), max_tokens: z.number().optional(), temperature: z.number().optional(), top_p: z.number().optional() }, async ({ messages, max_tokens, temperature, top_p }) => {
864
+ server.tool("netintel_openai_gpt_4o_mini", "Call OpenAI's gpt-4o-mini via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.005 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output. Search terms: OpenAI…", { messages: z.array(z.any()), max_tokens: z.number().optional(), temperature: z.number().optional(), top_p: z.number().optional() }, async ({ messages, max_tokens, temperature, top_p }) => {
865
865
  try {
866
866
  const res = await api.post("/openai/gpt-4o-mini", { messages, max_tokens, temperature, top_p });
867
867
  return ok(res.data);
@@ -871,7 +871,7 @@ function registerTools(server, api) {
871
871
  }
872
872
  });
873
873
  // 84. Openai (POST)
874
- server.tool("netintel_openai_gpt_4_1_nano", "Call OpenAI's gpt-4.1-nano via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.01 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output. Search terms:…", { messages: z.array(z.any()), max_tokens: z.number().optional(), temperature: z.number().optional(), top_p: z.number().optional() }, async ({ messages, max_tokens, temperature, top_p }) => {
874
+ server.tool("netintel_openai_gpt_4_1_nano", "Call OpenAI's gpt-4.1-nano via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.005 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output. Search terms:…", { messages: z.array(z.any()), max_tokens: z.number().optional(), temperature: z.number().optional(), top_p: z.number().optional() }, async ({ messages, max_tokens, temperature, top_p }) => {
875
875
  try {
876
876
  const res = await api.post("/openai/gpt-4-1-nano", { messages, max_tokens, temperature, top_p });
877
877
  return ok(res.data);
@@ -911,7 +911,7 @@ function registerTools(server, api) {
911
911
  }
912
912
  });
913
913
  // 88. Openai (POST)
914
- server.tool("netintel_openai_gpt_5_4_nano", "Call OpenAI's gpt-5.4-nano via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.01 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output. Search terms:…", { messages: z.array(z.any()), max_completion_tokens: z.number().optional() }, async ({ messages, max_completion_tokens }) => {
914
+ server.tool("netintel_openai_gpt_5_4_nano", "Call OpenAI's gpt-5.4-nano via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.005 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output. Search terms:…", { messages: z.array(z.any()), max_completion_tokens: z.number().optional() }, async ({ messages, max_completion_tokens }) => {
915
915
  try {
916
916
  const res = await api.post("/openai/gpt-5-4-nano", { messages, max_completion_tokens });
917
917
  return ok(res.data);
@@ -931,7 +931,7 @@ function registerTools(server, api) {
931
931
  }
932
932
  });
933
933
  // 90. Openai (POST)
934
- server.tool("netintel_openai_gpt_5_nano", "Call OpenAI's gpt-5-nano via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.01 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output. Search terms: OpenAI…", { messages: z.array(z.any()), max_completion_tokens: z.number().optional() }, async ({ messages, max_completion_tokens }) => {
934
+ server.tool("netintel_openai_gpt_5_nano", "Call OpenAI's gpt-5-nano via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.005 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output. Search terms: OpenAI…", { messages: z.array(z.any()), max_completion_tokens: z.number().optional() }, async ({ messages, max_completion_tokens }) => {
935
935
  try {
936
936
  const res = await api.post("/openai/gpt-5-nano", { messages, max_completion_tokens });
937
937
  return ok(res.data);
@@ -1001,7 +1001,7 @@ function registerTools(server, api) {
1001
1001
  }
1002
1002
  });
1003
1003
  // 97. V1 (POST)
1004
- server.tool("netintel_v1_chat_completions", "OpenAI-compatible chat completions gateway (POST /v1/chat/completions request/response shape). Models: gpt-4.1-mini, gpt-5.4-nano, gpt-4o-mini, gpt-4.1-nano, gpt-5-nano. Flat $0.005 per call in USDC via x402, no OpenAI account or API key. Supports response_format {type:\"json_object\"} (JSON mode).", { model: z.string(), messages: z.array(z.any()), max_tokens: z.number().optional(), response_format: z.object({ type: z.enum(["json_object", "text"]) }).optional() }, async ({ model, messages, max_tokens, response_format }) => {
1004
+ server.tool("netintel_v1_chat_completions", "OpenAI-compatible chat completions gateway (POST /v1/chat/completions shape). The model in the body sets the price: POST unpaid and the 402 quotes that model's exact price in USDC via x402 — no OpenAI account or API key. A model the gateway does not serve returns a 400 naming its dedicated endpoint; where per-model pricing is on it serves those too, each at its configured price. This client pays accepted challenges automatically — this text is not a spending cap. GET /v1/models (free) is the live catalogue. Supports response_format {type:\"json_object\"}.", { model: z.string(), messages: z.array(z.any()), max_tokens: z.number().optional(), response_format: z.object({ type: z.enum(["json_object", "text"]) }).optional() }, async ({ model, messages, max_tokens, response_format }) => {
1005
1005
  try {
1006
1006
  const res = await api.post("/v1/chat/completions", { model, messages, max_tokens, response_format });
1007
1007
  return ok(res.data);
@@ -1031,7 +1031,7 @@ function registerTools(server, api) {
1031
1031
  }
1032
1032
  });
1033
1033
  // 100. Crypto
1034
- server.tool("netintel_crypto_price", "Spot prices for up to 25 crypto assets in one call — USD, EUR, or GBP — from Coinbase with Kraken and CoinGecko fallback; no API key, one flat price. Per asset: price, 24h change when the answering source provides it, source, cache age…", { symbols: z.string().optional(), vs: z.string().optional() }, async ({ symbols, vs }) => {
1034
+ server.tool("netintel_crypto_price", "Crypto prices for up to 25 coins in one call — live cryptocurrency spot prices for BTC, ETH, SOL and more in USD, EUR, or GBP from Coinbase with Kraken and CoinGecko fallback; no API key, one flat price. Per asset: price, 24h change when the source provides it, source, cache age.", { symbols: z.string().optional(), vs: z.string().optional() }, async ({ symbols, vs }) => {
1035
1035
  try {
1036
1036
  const res = await api.get("/crypto/price", { params: params({ symbols, vs }) });
1037
1037
  return ok(res.data);
@@ -1172,7 +1172,7 @@ function registerTools(server, api) {
1172
1172
  }
1173
1173
  });
1174
1174
  // 115. Ssl (POST)
1175
- server.tool("netintel_ssl_cert", "Fast SSL/TLS certificate facts for any domain — issuer, subject, SANs, valid from/to, days until expiry, expired/self-signed flags, TLS version, chain length. One TLS handshake, sub-2-second answer. The light, cheap tier under /ssl/analyze…", { domain: z.string(), port: z.number().optional() }, async ({ domain, port }) => {
1175
+ server.tool("netintel_ssl_cert", "SSL certificate check for any domain — issuer, subject, SANs, valid from/to, days until expiry, expired/self-signed flags, TLS version, chain length. One TLS handshake, sub-2-second answer. The light, cheap tier under netintel_ssl_analyze (full analysis, grading).", { domain: z.string(), port: z.number().optional() }, async ({ domain, port }) => {
1176
1176
  try {
1177
1177
  const res = await api.post("/ssl/cert", { domain, port });
1178
1178
  return ok(res.data);
@@ -1212,7 +1212,7 @@ function registerTools(server, api) {
1212
1212
  }
1213
1213
  });
1214
1214
  // 119. Email (POST)
1215
- server.tool("netintel_email_verify", "Verify an email address before you send: syntax + MX + disposable/role/free-provider detection in one call, boolean-first (deliverable, safe_to_send) with a machine-readable reason. DNS-level check only — does not confirm the individual…", { email: z.string() }, async ({ email }) => {
1215
+ server.tool("netintel_email_verify", "Validate an email address — email verification before you send: syntax + MX + disposable/role/free-provider detection in one call, boolean-first (deliverable, safe_to_send) with a machine-readable reason. DNS-level check only, no SMTP mailbox probe. For a scored trust report instead of a yes/no gate, see netintel_email_intel.", { email: z.string() }, async ({ email }) => {
1216
1216
  try {
1217
1217
  const res = await api.post("/email/verify", { email });
1218
1218
  return ok(res.data);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "netintel-mcp",
3
- "version": "1.1.51",
3
+ "version": "1.1.53",
4
4
  "mcpName": "io.github.kjgueye/netintel-mcp",
5
5
  "repository": {
6
6
  "type": "git",