netintel-mcp 1.1.47 → 1.1.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -3
- package/dist/index.js +53 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# netintel-mcp
|
|
2
2
|
|
|
3
|
-
MCP server for NetIntel —
|
|
3
|
+
MCP server for NetIntel — 122 network intelligence tools for AI agents.
|
|
4
4
|
DNS, SSL, WHOIS, email security, cloud fingerprinting, OSINT and more.
|
|
5
5
|
Pay-per-call via x402 — the NetIntel API accepts USDC on Base or Solana; this MCP server pays on Base. No API keys needed — just a wallet with USDC.
|
|
6
6
|
|
|
@@ -31,7 +31,7 @@ Or add manually to your Claude Desktop config:
|
|
|
31
31
|
|
|
32
32
|
## Tools
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
122 pay-per-call tools across DNS, SSL/TLS, WHOIS & domains, email security, IP intelligence, web & content, OSINT, AI text processing, and bundled reports.
|
|
35
35
|
|
|
36
36
|
| Tool | Description | Price |
|
|
37
37
|
|------|-------------|-------|
|
|
@@ -40,7 +40,7 @@ Or add manually to your Claude Desktop config:
|
|
|
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 |
|
|
42
42
|
| netintel_email_auth | Email deliverability & domain security check — validates SPF, DKIM… | $0.002 |
|
|
43
|
-
| netintel_cloud_fingerprint | Fingerprints a domain's cloud infrastructure
|
|
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
46
|
| netintel_whois_lookup | WHOIS domain lookup via RDAP — registrar, creation/expiry/updated… | $0.003 |
|
|
@@ -152,6 +152,11 @@ Or add manually to your Claude Desktop config:
|
|
|
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 |
|
|
156
|
+
| netintel_exa_search | Exa neural web search for AI agents — POST or GET a query, get ranked… | $0.01 |
|
|
157
|
+
| netintel_web_search | Web search for AI agents — one query in, ranked live results out… | $0.01 |
|
|
158
|
+
| netintel_exa_contents | Clean page text for up to 3 URLs in one call via Exa's index + live… | $0.005 |
|
|
159
|
+
| netintel_exa_answer | Ask a question, get a direct answer grounded in a live web search, with… | $0.01 |
|
|
155
160
|
|
|
156
161
|
## Payment
|
|
157
162
|
All tools pay automatically via x402 in USDC on Base mainnet.
|
package/dist/index.js
CHANGED
|
@@ -75,7 +75,7 @@ function registerTools(server, api) {
|
|
|
75
75
|
}
|
|
76
76
|
});
|
|
77
77
|
// 6. Cloud Fingerprint
|
|
78
|
-
server.tool("netintel_cloud_fingerprint", "Detect CDN, WAF, hosting
|
|
78
|
+
server.tool("netintel_cloud_fingerprint", "Detect CDN, WAF, hosting, DNS and email provider for a domain, plus TLS certificate issuer, wildcard coverage and SAN count, with confidence scores and an infrastructure security grade. Hosts that resolve but serve nothing on 80/443 return http_reachable:false and grade insufficient_data rather than a low grade.", { domain: z.string() }, async ({ domain }) => {
|
|
79
79
|
try {
|
|
80
80
|
const res = await api.get("/cloud-fingerprint/analyze", { params: { domain } });
|
|
81
81
|
return ok(res.data);
|
|
@@ -1001,9 +1001,9 @@ 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
|
|
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 }) => {
|
|
1005
1005
|
try {
|
|
1006
|
-
const res = await api.post("/v1/chat/completions", { model, messages, max_tokens });
|
|
1006
|
+
const res = await api.post("/v1/chat/completions", { model, messages, max_tokens, response_format });
|
|
1007
1007
|
return ok(res.data);
|
|
1008
1008
|
}
|
|
1009
1009
|
catch (e) {
|
|
@@ -1211,6 +1211,56 @@ function registerTools(server, api) {
|
|
|
1211
1211
|
return err(e);
|
|
1212
1212
|
}
|
|
1213
1213
|
});
|
|
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 }) => {
|
|
1216
|
+
try {
|
|
1217
|
+
const res = await api.post("/email/verify", { email });
|
|
1218
|
+
return ok(res.data);
|
|
1219
|
+
}
|
|
1220
|
+
catch (e) {
|
|
1221
|
+
return err(e);
|
|
1222
|
+
}
|
|
1223
|
+
});
|
|
1224
|
+
// 120. Exa (POST)
|
|
1225
|
+
server.tool("netintel_exa_search", "Exa neural web search for AI agents — POST or GET a query, get ranked live results (title, url, published_date, author, score) with optional highlight snippets. Filter by category (news, research paper, github, company, pdf…), domain…", { query: z.string(), num_results: z.number().optional(), type: z.string().optional(), category: z.string().optional(), include_domains: z.array(z.string()).optional(), start_published_date: z.string().optional(), end_published_date: z.string().optional(), snippets: z.string().optional() }, async ({ query, num_results, type, category, include_domains, start_published_date, end_published_date, snippets }) => {
|
|
1226
|
+
try {
|
|
1227
|
+
const res = await api.post("/exa/search", { query, num_results, type, category, include_domains, start_published_date, end_published_date, snippets });
|
|
1228
|
+
return ok(res.data);
|
|
1229
|
+
}
|
|
1230
|
+
catch (e) {
|
|
1231
|
+
return err(e);
|
|
1232
|
+
}
|
|
1233
|
+
});
|
|
1234
|
+
// 121. Web (POST)
|
|
1235
|
+
server.tool("netintel_web_search", "Web search for AI agents — one query in, ranked live results out (title, url, published_date, author, score, optional snippets). Neural + keyword modes, category/domain/date filters. For a direct answer use /exa/answer. Keyless x402, pay…", { query: z.string(), num_results: z.number().optional(), type: z.string().optional(), category: z.string().optional(), include_domains: z.array(z.string()).optional(), start_published_date: z.string().optional(), end_published_date: z.string().optional(), snippets: z.string().optional() }, async ({ query, num_results, type, category, include_domains, start_published_date, end_published_date, snippets }) => {
|
|
1236
|
+
try {
|
|
1237
|
+
const res = await api.post("/web/search", { query, num_results, type, category, include_domains, start_published_date, end_published_date, snippets });
|
|
1238
|
+
return ok(res.data);
|
|
1239
|
+
}
|
|
1240
|
+
catch (e) {
|
|
1241
|
+
return err(e);
|
|
1242
|
+
}
|
|
1243
|
+
});
|
|
1244
|
+
// 122. Exa (POST)
|
|
1245
|
+
server.tool("netintel_exa_contents", "Clean page text for up to 3 URLs in one call via Exa's index + live crawl — works on JS-rendered and bot-walled pages that direct fetch can't read. Returns title, author, published_date and text per URL, with per-URL status. Pairs with…", { urls: z.array(z.string()), max_characters: z.number().optional(), livecrawl: z.string().optional() }, async ({ urls, max_characters, livecrawl }) => {
|
|
1246
|
+
try {
|
|
1247
|
+
const res = await api.post("/exa/contents", { urls, max_characters, livecrawl });
|
|
1248
|
+
return ok(res.data);
|
|
1249
|
+
}
|
|
1250
|
+
catch (e) {
|
|
1251
|
+
return err(e);
|
|
1252
|
+
}
|
|
1253
|
+
});
|
|
1254
|
+
// 123. Exa (POST)
|
|
1255
|
+
server.tool("netintel_exa_answer", "Ask a question, get a direct answer grounded in a live web search, with numbered citations (title, url, published_date). One call replaces search + read + summarize. For ranked results instead of a synthesized answer use /exa/search…", { query: z.string(), include_citation_text: z.boolean().optional() }, async ({ query, include_citation_text }) => {
|
|
1256
|
+
try {
|
|
1257
|
+
const res = await api.post("/exa/answer", { query, include_citation_text });
|
|
1258
|
+
return ok(res.data);
|
|
1259
|
+
}
|
|
1260
|
+
catch (e) {
|
|
1261
|
+
return err(e);
|
|
1262
|
+
}
|
|
1263
|
+
});
|
|
1214
1264
|
}
|
|
1215
1265
|
async function main() {
|
|
1216
1266
|
const api = await createClient();
|