netintel-mcp 1.0.0
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 +68 -0
- package/dist/client.js +16 -0
- package/dist/index.js +303 -0
- package/package.json +41 -0
package/README.md
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# netintel-mcp
|
|
2
|
+
|
|
3
|
+
MCP server for NetIntel — 25 network intelligence tools for AI agents.
|
|
4
|
+
DNS, SSL, WHOIS, email security, cloud fingerprinting, OSINT and more.
|
|
5
|
+
Pay-per-call via x402 on Base mainnet. No API keys needed — just a wallet with USDC.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
claude mcp add netintel-mcp -- --env EVM_PRIVATE_KEY=0xYOUR_PRIVATE_KEY
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Or add manually to your Claude Desktop config:
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"mcpServers": {
|
|
17
|
+
"netintel": {
|
|
18
|
+
"command": "npx",
|
|
19
|
+
"args": ["netintel-mcp"],
|
|
20
|
+
"env": {
|
|
21
|
+
"EVM_PRIVATE_KEY": "0xYOUR_PRIVATE_KEY"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Requirements
|
|
29
|
+
- A wallet private key with USDC on Base mainnet
|
|
30
|
+
- EVM_PRIVATE_KEY environment variable set
|
|
31
|
+
|
|
32
|
+
## Tools
|
|
33
|
+
|
|
34
|
+
| Tool | Description | Price |
|
|
35
|
+
|------|-------------|-------|
|
|
36
|
+
| netintel_dns_lookup | Resolve all DNS records | $0.001 |
|
|
37
|
+
| netintel_ssl_analyze | TLS certificate analysis | $0.001 |
|
|
38
|
+
| netintel_redirect_trace | Follow redirect chains | $0.001 |
|
|
39
|
+
| netintel_security_headers | Audit security headers | $0.001 |
|
|
40
|
+
| netintel_email_auth | Validate SPF/DKIM/DMARC | $0.004 |
|
|
41
|
+
| netintel_cloud_fingerprint | Detect CDN/WAF/hosting | $0.002 |
|
|
42
|
+
| netintel_schema_parse | Extract structured data from text | $0.005 |
|
|
43
|
+
| netintel_asn_lookup | IP/domain to ASN lookup | $0.001 |
|
|
44
|
+
| netintel_whois_lookup | Domain registration via RDAP | $0.001 |
|
|
45
|
+
| netintel_cert_transparency | Certificate transparency logs | $0.002 |
|
|
46
|
+
| netintel_subnet_calc | CIDR subnet calculator | $0.001 |
|
|
47
|
+
| netintel_dns_propagation | Global DNS propagation check | $0.003 |
|
|
48
|
+
| netintel_dnssec_validate | DNSSEC chain of trust | $0.002 |
|
|
49
|
+
| netintel_ip_blacklist | IP blacklist check (15 lists) | $0.003 |
|
|
50
|
+
| netintel_tech_fingerprint | Website tech stack detection | $0.002 |
|
|
51
|
+
| netintel_breach_check | HaveIBeenPwned password check | $0.001 |
|
|
52
|
+
| netintel_domain_availability | Domain availability across TLDs | $0.002 |
|
|
53
|
+
| netintel_email_intel | Email address validation | $0.002 |
|
|
54
|
+
| netintel_og_scraper | Open Graph metadata extraction | $0.001 |
|
|
55
|
+
| netintel_page_extract | Clean text extraction from URLs | $0.002 |
|
|
56
|
+
| netintel_phone_intel | Phone number parsing/validation | $0.001 |
|
|
57
|
+
| netintel_robots_txt | Robots.txt parser | $0.001 |
|
|
58
|
+
| netintel_rss_parser | RSS/Atom feed parser | $0.001 |
|
|
59
|
+
| netintel_username_check | Username availability (20+ platforms) | $0.003 |
|
|
60
|
+
| netintel_wayback_lookup | Wayback Machine snapshots | $0.001 |
|
|
61
|
+
|
|
62
|
+
## Payment
|
|
63
|
+
All tools pay automatically via x402 on Base mainnet (USDC).
|
|
64
|
+
Your wallet is charged per call. No subscriptions, no API keys.
|
|
65
|
+
|
|
66
|
+
## Links
|
|
67
|
+
- API manifest: https://netintel-production-440c.up.railway.app/.well-known/x402
|
|
68
|
+
- Docs: https://github.com/kjgueye/netintel-api
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { x402Client, wrapAxiosWithPayment } from "@x402/axios";
|
|
2
|
+
import { registerExactEvmScheme } from "@x402/evm/exact/client";
|
|
3
|
+
import { privateKeyToAccount } from "viem/accounts";
|
|
4
|
+
import axios from "axios";
|
|
5
|
+
const BASE_URL = "https://netintel-production-440c.up.railway.app";
|
|
6
|
+
export async function createClient() {
|
|
7
|
+
const key = process.env.EVM_PRIVATE_KEY;
|
|
8
|
+
if (!key) {
|
|
9
|
+
throw new Error("EVM_PRIVATE_KEY environment variable is required. " +
|
|
10
|
+
"Set it to your wallet private key (with USDC on Base mainnet).");
|
|
11
|
+
}
|
|
12
|
+
const client = new x402Client();
|
|
13
|
+
const signer = privateKeyToAccount(key);
|
|
14
|
+
registerExactEvmScheme(client, { signer });
|
|
15
|
+
return wrapAxiosWithPayment(axios.create({ baseURL: BASE_URL }), client);
|
|
16
|
+
}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { createClient } from "./client.js";
|
|
6
|
+
function ok(data) {
|
|
7
|
+
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
8
|
+
}
|
|
9
|
+
function err(e) {
|
|
10
|
+
const ax = e;
|
|
11
|
+
const status = ax.response?.status ?? "unknown";
|
|
12
|
+
const msg = ax.message ?? String(e);
|
|
13
|
+
return {
|
|
14
|
+
content: [{ type: "text", text: `Error (${status}): ${msg}` }],
|
|
15
|
+
isError: true,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function params(obj) {
|
|
19
|
+
const clean = {};
|
|
20
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
21
|
+
if (v !== undefined)
|
|
22
|
+
clean[k] = v;
|
|
23
|
+
}
|
|
24
|
+
return clean;
|
|
25
|
+
}
|
|
26
|
+
function registerTools(server, api) {
|
|
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 }) => {
|
|
29
|
+
try {
|
|
30
|
+
const res = await api.get("/dns/lookup", { params: { domain } });
|
|
31
|
+
return ok(res.data);
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
return err(e);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
// 2. SSL Analyze
|
|
38
|
+
server.tool("netintel_ssl_analyze", "Analyze TLS certificate chain, supported protocols (TLS 1.0-1.3), key strength, and return an overall security grade A-F.", { domain: z.string(), port: z.number().optional() }, async ({ domain, port }) => {
|
|
39
|
+
try {
|
|
40
|
+
const res = await api.get("/ssl/analyze", { params: params({ domain, port }) });
|
|
41
|
+
return ok(res.data);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
return err(e);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
// 3. Redirect Trace
|
|
48
|
+
server.tool("netintel_redirect_trace", "Follow a URL through its full redirect chain recording status codes, timing, TLS status per hop. Returns a redirect health grade A-F and detects protocol downgrades.", { url: z.string(), max_hops: z.number().optional() }, async ({ url, max_hops }) => {
|
|
49
|
+
try {
|
|
50
|
+
const res = await api.get("/redirect/trace", { params: params({ url, max_hops }) });
|
|
51
|
+
return ok(res.data);
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
return err(e);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
// 4. Security Headers
|
|
58
|
+
server.tool("netintel_security_headers", "Audit 10 security-critical HTTP response headers (CSP, HSTS, X-Frame-Options, etc). Detects anti-patterns and returns a security grade A-F.", { target: z.string() }, async ({ target }) => {
|
|
59
|
+
try {
|
|
60
|
+
const res = await api.get("/security-headers/analyze", { params: { target } });
|
|
61
|
+
return ok(res.data);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
return err(e);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
// 5. Email Auth (POST)
|
|
68
|
+
server.tool("netintel_email_auth", "Validate SPF, DKIM, and DMARC records for a domain. Probes multiple DKIM selectors and returns an email security grade A-F.", { domain: z.string() }, async ({ domain }) => {
|
|
69
|
+
try {
|
|
70
|
+
const res = await api.post("/email-auth", { domain });
|
|
71
|
+
return ok(res.data);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
return err(e);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
// 6. Cloud Fingerprint
|
|
78
|
+
server.tool("netintel_cloud_fingerprint", "Detect CDN, WAF, hosting provider, DNS provider, and email provider for a domain with confidence scores and an infrastructure security grade.", { domain: z.string() }, async ({ domain }) => {
|
|
79
|
+
try {
|
|
80
|
+
const res = await api.get("/cloud-fingerprint/analyze", { params: { domain } });
|
|
81
|
+
return ok(res.data);
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
return err(e);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
// 7. Schema Parse (POST)
|
|
88
|
+
server.tool("netintel_schema_parse", "Extract structured data from any unstructured text using LLM. Pass any JSON Schema and get back a typed object. Works on emails, invoices, resumes, contracts, anything.", { raw_text: z.string(), target_schema: z.record(z.any()) }, async ({ raw_text, target_schema }) => {
|
|
89
|
+
try {
|
|
90
|
+
const res = await api.post("/schema-parse/extract", { raw_text, target_schema });
|
|
91
|
+
return ok(res.data);
|
|
92
|
+
}
|
|
93
|
+
catch (e) {
|
|
94
|
+
return err(e);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
// 8. ASN Lookup
|
|
98
|
+
server.tool("netintel_asn_lookup", "Resolve an IP or domain to its ASN, network owner, country, and hosting/cloud classification with a trust score.", { target: z.string() }, async ({ target }) => {
|
|
99
|
+
try {
|
|
100
|
+
const res = await api.get("/asn-lookup/analyze", { params: { target } });
|
|
101
|
+
return ok(res.data);
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
return err(e);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
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 }) => {
|
|
109
|
+
try {
|
|
110
|
+
const res = await api.get("/whois-rdap/lookup", { params: { domain } });
|
|
111
|
+
return ok(res.data);
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
return err(e);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
// 10. Cert Transparency
|
|
118
|
+
server.tool("netintel_cert_transparency", "Query crt.sh certificate transparency logs to enumerate all SSL certs ever issued for a domain. Returns discovered subdomains, issuers, and flags wildcard or suspicious certs.", {
|
|
119
|
+
domain: z.string(),
|
|
120
|
+
include_subdomains: z.boolean().optional(),
|
|
121
|
+
limit: z.number().optional(),
|
|
122
|
+
}, async ({ domain, include_subdomains, limit }) => {
|
|
123
|
+
try {
|
|
124
|
+
const res = await api.get("/cert-transparency/lookup", {
|
|
125
|
+
params: params({ domain, include_subdomains, limit }),
|
|
126
|
+
});
|
|
127
|
+
return ok(res.data);
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
return err(e);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
// 11. Subnet Calc
|
|
134
|
+
server.tool("netintel_subnet_calc", "Calculate IPv4/IPv6 subnet details from CIDR notation — network address, broadcast, netmask, usable host range, supernet. Pass multiple CIDRs comma-separated to detect overlaps.", { cidr: z.string() }, async ({ cidr }) => {
|
|
135
|
+
try {
|
|
136
|
+
const res = await api.get("/subnet/calc", { params: { cidr } });
|
|
137
|
+
return ok(res.data);
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
return err(e);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
// 12. DNS Propagation
|
|
144
|
+
server.tool("netintel_dns_propagation", "Check DNS propagation across 10 global resolvers simultaneously. Returns what each resolver sees, propagation percentage, and flags divergent resolvers.", { domain: z.string(), record_type: z.string().optional() }, async ({ domain, record_type }) => {
|
|
145
|
+
try {
|
|
146
|
+
const res = await api.get("/dns-propagation/check", {
|
|
147
|
+
params: params({ domain, record_type }),
|
|
148
|
+
});
|
|
149
|
+
return ok(res.data);
|
|
150
|
+
}
|
|
151
|
+
catch (e) {
|
|
152
|
+
return err(e);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
// 13. DNSSEC Validate
|
|
156
|
+
server.tool("netintel_dnssec_validate", "Validate DNSSEC configuration — checks DS records, DNSKEY, RRSIG signatures, and NSEC/NSEC3. Returns full chain-of-trust assessment.", { domain: z.string() }, async ({ domain }) => {
|
|
157
|
+
try {
|
|
158
|
+
const res = await api.get("/dnssec/validate", { params: { domain } });
|
|
159
|
+
return ok(res.data);
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
return err(e);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
// 14. IP Blacklist
|
|
166
|
+
server.tool("netintel_ip_blacklist", "Check an IP address against 15 major DNS blacklists (Spamhaus, Barracuda, SORBS, etc). Returns threat level and which lists it appears on.", { ip: z.string() }, async ({ ip }) => {
|
|
167
|
+
try {
|
|
168
|
+
const res = await api.get("/ip-blacklist/check", { params: { ip } });
|
|
169
|
+
return ok(res.data);
|
|
170
|
+
}
|
|
171
|
+
catch (e) {
|
|
172
|
+
return err(e);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
// 15. Tech Fingerprint
|
|
176
|
+
server.tool("netintel_tech_fingerprint", "Detect the full technology stack of a website — CMS, framework, CDN, analytics, security tools — from HTTP headers and HTML.", { url: z.string() }, async ({ url }) => {
|
|
177
|
+
try {
|
|
178
|
+
const res = await api.get("/tech-fingerprint/analyze", { params: { url } });
|
|
179
|
+
return ok(res.data);
|
|
180
|
+
}
|
|
181
|
+
catch (e) {
|
|
182
|
+
return err(e);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
// 16. Breach Check
|
|
186
|
+
server.tool("netintel_breach_check", "Check if a password has appeared in known data breaches using HaveIBeenPwned k-anonymity API. The full password is never transmitted — only a 5-char SHA-1 prefix.", { password: z.string() }, async ({ password }) => {
|
|
187
|
+
try {
|
|
188
|
+
const res = await api.get("/breach-check/password", { params: { password } });
|
|
189
|
+
return ok(res.data);
|
|
190
|
+
}
|
|
191
|
+
catch (e) {
|
|
192
|
+
return err(e);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
// 17. Domain Availability
|
|
196
|
+
server.tool("netintel_domain_availability", "Check if a domain is available for registration across 10 TLDs simultaneously using RDAP and DNS. Returns availability status, registrar, and expiry for each TLD.", { domain: z.string() }, async ({ domain }) => {
|
|
197
|
+
try {
|
|
198
|
+
const res = await api.get("/domain-availability/check", { params: { domain } });
|
|
199
|
+
return ok(res.data);
|
|
200
|
+
}
|
|
201
|
+
catch (e) {
|
|
202
|
+
return err(e);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
// 18. Email Intel
|
|
206
|
+
server.tool("netintel_email_intel", "Validate an email address — check deliverability, detect disposable domains, identify role-based addresses, verify MX records.", { email: z.string() }, async ({ email }) => {
|
|
207
|
+
try {
|
|
208
|
+
const res = await api.get("/email-intel/analyze", { params: { email } });
|
|
209
|
+
return ok(res.data);
|
|
210
|
+
}
|
|
211
|
+
catch (e) {
|
|
212
|
+
return err(e);
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
// 19. OG Scraper
|
|
216
|
+
server.tool("netintel_og_scraper", "Extract Open Graph tags, Twitter Card tags, canonical URL, title, description, favicon, JSON-LD structured data, and article metadata from any public URL.", { url: z.string() }, async ({ url }) => {
|
|
217
|
+
try {
|
|
218
|
+
const res = await api.get("/og-scraper/extract", { params: { url } });
|
|
219
|
+
return ok(res.data);
|
|
220
|
+
}
|
|
221
|
+
catch (e) {
|
|
222
|
+
return err(e);
|
|
223
|
+
}
|
|
224
|
+
});
|
|
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 }) => {
|
|
227
|
+
try {
|
|
228
|
+
const res = await api.get("/page-extract/read", { params: { url } });
|
|
229
|
+
return ok(res.data);
|
|
230
|
+
}
|
|
231
|
+
catch (e) {
|
|
232
|
+
return err(e);
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
// 21. Phone Intel
|
|
236
|
+
server.tool("netintel_phone_intel", "Parse and validate any phone number in any format. Returns country, line type (mobile/landline/VOIP/toll-free), carrier region, and all standard format variants.", { phone: z.string(), country_hint: z.string().optional() }, async ({ phone, country_hint }) => {
|
|
237
|
+
try {
|
|
238
|
+
const res = await api.get("/phone-intel/analyze", {
|
|
239
|
+
params: params({ phone, country_hint }),
|
|
240
|
+
});
|
|
241
|
+
return ok(res.data);
|
|
242
|
+
}
|
|
243
|
+
catch (e) {
|
|
244
|
+
return err(e);
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
// 22. Robots.txt
|
|
248
|
+
server.tool("netintel_robots_txt", "Fetch and parse a domain's robots.txt. Returns all crawl rules, sitemap URLs, crawl delay settings, and checks if a specific path is allowed for a given bot.", { domain: z.string(), path: z.string().optional(), user_agent: z.string().optional() }, async ({ domain, path, user_agent }) => {
|
|
249
|
+
try {
|
|
250
|
+
const res = await api.get("/robots-txt/analyze", {
|
|
251
|
+
params: params({ domain, path, user_agent }),
|
|
252
|
+
});
|
|
253
|
+
return ok(res.data);
|
|
254
|
+
}
|
|
255
|
+
catch (e) {
|
|
256
|
+
return err(e);
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
// 23. RSS Parser
|
|
260
|
+
server.tool("netintel_rss_parser", "Fetch and parse any RSS 2.0 or Atom feed. Returns structured articles with title, link, description, author, publish date, and categories.", { url: z.string(), limit: z.number().optional() }, async ({ url, limit }) => {
|
|
261
|
+
try {
|
|
262
|
+
const res = await api.get("/rss-parser/fetch", { params: params({ url, limit }) });
|
|
263
|
+
return ok(res.data);
|
|
264
|
+
}
|
|
265
|
+
catch (e) {
|
|
266
|
+
return err(e);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
// 24. Username Check
|
|
270
|
+
server.tool("netintel_username_check", "Check username availability across 20+ platforms simultaneously — GitHub, Twitter, Instagram, npm, and more. Returns taken/available/unknown status per platform.", { username: z.string() }, async ({ username }) => {
|
|
271
|
+
try {
|
|
272
|
+
const res = await api.get("/username-check/lookup", { params: { username } });
|
|
273
|
+
return ok(res.data);
|
|
274
|
+
}
|
|
275
|
+
catch (e) {
|
|
276
|
+
return err(e);
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
// 25. Wayback Lookup
|
|
280
|
+
server.tool("netintel_wayback_lookup", "Query the Wayback Machine for archived snapshots of a URL. Returns first/last capture dates, total snapshot count, and the closest snapshot to an optional target date.", { url: z.string(), timestamp: z.string().optional() }, async ({ url, timestamp }) => {
|
|
281
|
+
try {
|
|
282
|
+
const res = await api.get("/wayback/lookup", { params: params({ url, timestamp }) });
|
|
283
|
+
return ok(res.data);
|
|
284
|
+
}
|
|
285
|
+
catch (e) {
|
|
286
|
+
return err(e);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
async function main() {
|
|
291
|
+
const api = await createClient();
|
|
292
|
+
const server = new McpServer({
|
|
293
|
+
name: "netintel-mcp",
|
|
294
|
+
version: "1.0.0",
|
|
295
|
+
});
|
|
296
|
+
registerTools(server, api);
|
|
297
|
+
const transport = new StdioServerTransport();
|
|
298
|
+
await server.connect(transport);
|
|
299
|
+
}
|
|
300
|
+
main().catch((error) => {
|
|
301
|
+
console.error("Fatal:", error);
|
|
302
|
+
process.exit(1);
|
|
303
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "netintel-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for NetIntel — DNS, SSL, WHOIS, email security, OSINT via x402 micropayments",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"netintel-mcp": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"dev": "ts-node src/index.ts",
|
|
16
|
+
"prepublishOnly": "npm run build"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"mcp",
|
|
20
|
+
"x402",
|
|
21
|
+
"dns",
|
|
22
|
+
"ssl",
|
|
23
|
+
"security",
|
|
24
|
+
"osint",
|
|
25
|
+
"netintel",
|
|
26
|
+
"network-intelligence"
|
|
27
|
+
],
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
31
|
+
"@x402/axios": "^2.9.0",
|
|
32
|
+
"@x402/core": "^2.9.0",
|
|
33
|
+
"@x402/evm": "^2.9.0",
|
|
34
|
+
"viem": "^2.31.3",
|
|
35
|
+
"zod": "^3.25.67"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/node": "^25.5.2",
|
|
39
|
+
"typescript": "^5.8.3"
|
|
40
|
+
}
|
|
41
|
+
}
|