@cyanheads/whois-mcp-server 0.1.5 → 0.2.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/AGENTS.md +27 -14
- package/CLAUDE.md +27 -14
- package/Dockerfile +48 -34
- package/README.md +30 -35
- package/changelog/0.1.x/0.1.6.md +41 -0
- package/changelog/0.2.x/0.2.0.md +40 -0
- package/dist/app.d.ts +67 -26
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +7 -5
- package/dist/app.js.map +1 -1
- package/dist/mcp-server/tools/definitions/_fqdn.d.ts +9 -3
- package/dist/mcp-server/tools/definitions/_fqdn.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/_fqdn.js +10 -14
- package/dist/mcp-server/tools/definitions/_fqdn.js.map +1 -1
- package/dist/mcp-server/tools/definitions/whois-check-availability.tool.d.ts +11 -5
- package/dist/mcp-server/tools/definitions/whois-check-availability.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/whois-check-availability.tool.js +25 -40
- package/dist/mcp-server/tools/definitions/whois-check-availability.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/whois-get-dns.tool.d.ts +23 -4
- package/dist/mcp-server/tools/definitions/whois-get-dns.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/whois-get-dns.tool.js +44 -28
- package/dist/mcp-server/tools/definitions/whois-get-dns.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.d.ts +0 -5
- package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.js +58 -53
- package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.js +9 -5
- package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.d.ts +16 -9
- package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.js +60 -24
- package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.d.ts +16 -2
- package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.js +44 -17
- package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.js.map +1 -1
- package/dist/services/doh/doh-service.d.ts +3 -3
- package/dist/services/doh/doh-service.d.ts.map +1 -1
- package/dist/services/doh/doh-service.js +71 -24
- package/dist/services/doh/doh-service.js.map +1 -1
- package/dist/services/doh/types.d.ts +16 -0
- package/dist/services/doh/types.d.ts.map +1 -1
- package/dist/services/rdap/rdap-service.d.ts +20 -8
- package/dist/services/rdap/rdap-service.d.ts.map +1 -1
- package/dist/services/rdap/rdap-service.js +200 -145
- package/dist/services/rdap/rdap-service.js.map +1 -1
- package/dist/services/rdap/types.d.ts +32 -2
- package/dist/services/rdap/types.d.ts.map +1 -1
- package/package.json +14 -12
- package/server.json +11 -25
|
@@ -5,30 +5,34 @@
|
|
|
5
5
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
7
|
import { getDohService } from '../../../services/doh/doh-service.js';
|
|
8
|
-
import {
|
|
8
|
+
import { DNS_NAME_PATTERN } from './_fqdn.js';
|
|
9
9
|
const DNS_RECORD_TYPES = ['A', 'AAAA', 'MX', 'TXT', 'NS', 'CNAME', 'SOA', 'CAA', 'PTR'];
|
|
10
10
|
export const whoisGetDns = tool('whois_get_dns', {
|
|
11
11
|
title: 'DNS Record Lookup',
|
|
12
12
|
description: 'Fetch DNS records for a domain via DNS-over-HTTPS. Supports A, AAAA, MX, TXT, NS, CNAME, SOA, CAA, PTR. ' +
|
|
13
13
|
'Multiple types are fetched in parallel. NXDOMAIN is returned as nxdomain: true in the result, not as an ' +
|
|
14
|
-
'error — it means the
|
|
14
|
+
'error — it means the name does not exist in DNS. NOERROR with no answers is empty data; DNS failure codes ' +
|
|
15
|
+
'and truncated responses are errors after retries and fallback. TXT values are returned completely and rendered literally.',
|
|
15
16
|
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
16
17
|
input: z.object({
|
|
17
18
|
domain: z
|
|
18
19
|
.string()
|
|
19
|
-
.
|
|
20
|
+
.max(254)
|
|
21
|
+
.regex(DNS_NAME_PATTERN, 'Provide an ASCII DNS owner such as _dmarc.example.com; labels are 1–63 characters and one terminal root dot is allowed.')
|
|
22
|
+
.describe('ASCII DNS owner name, including underscore labels (e.g., "_dmarc.github.com"). One terminal root dot is normalized; labels are 1–63 characters and the normalized name is at most 253.'),
|
|
20
23
|
types: z
|
|
21
24
|
.array(z.enum(DNS_RECORD_TYPES).describe('A DNS record type to fetch.'))
|
|
25
|
+
.min(1)
|
|
22
26
|
.default(['A', 'AAAA', 'MX', 'TXT', 'NS'])
|
|
23
|
-
.describe('DNS record types to fetch. Defaults to [A, AAAA, MX, TXT, NS]. ' +
|
|
27
|
+
.describe('Nonempty list of DNS record types to fetch; duplicates are queried once. Defaults to [A, AAAA, MX, TXT, NS]. ' +
|
|
24
28
|
'Specify more types to expand coverage (e.g., add CAA to check certificate authority authorization).'),
|
|
25
29
|
}),
|
|
26
30
|
output: z.object({
|
|
27
31
|
domain: z.string().describe('Domain queried.'),
|
|
28
32
|
nxdomain: z
|
|
29
33
|
.boolean()
|
|
30
|
-
.describe('True when
|
|
31
|
-
'
|
|
34
|
+
.describe('True when at least one requested type returned NXDOMAIN / Status 3. ' +
|
|
35
|
+
'Successful answers from other type queries remain in records. This is data, not an error.'),
|
|
32
36
|
records: z
|
|
33
37
|
.array(z
|
|
34
38
|
.object({
|
|
@@ -41,36 +45,41 @@ export const whoisGetDns = tool('whois_get_dns', {
|
|
|
41
45
|
.describe('DNS records returned for the requested types.'),
|
|
42
46
|
source: z
|
|
43
47
|
.enum(['cloudflare', 'nextdns'])
|
|
44
|
-
.describe('
|
|
48
|
+
.describe('Aggregate resolver indicator: cloudflare when any query consumed a successful Cloudflare response; ' +
|
|
49
|
+
'otherwise nextdns. See query_sources for each requested type.'),
|
|
50
|
+
query_sources: z
|
|
51
|
+
.array(z
|
|
52
|
+
.object({
|
|
53
|
+
type: z
|
|
54
|
+
.enum(DNS_RECORD_TYPES)
|
|
55
|
+
.describe('Requested DNS record type, which may differ from an answer type.'),
|
|
56
|
+
source: z
|
|
57
|
+
.enum(['cloudflare', 'nextdns'])
|
|
58
|
+
.describe('Resolver whose successful response was consumed, including empty answers and NXDOMAIN.'),
|
|
59
|
+
})
|
|
60
|
+
.describe('Resolver attribution for one requested type.'))
|
|
61
|
+
.describe('One entry per unique requested type, in first-requested order.'),
|
|
45
62
|
}),
|
|
46
63
|
errors: [
|
|
47
64
|
{
|
|
48
|
-
reason: '
|
|
49
|
-
code: JsonRpcErrorCode.
|
|
50
|
-
when: '
|
|
51
|
-
recovery: '
|
|
65
|
+
reason: 'dns_response_failed',
|
|
66
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
67
|
+
when: 'Resolvers return a DNS failure status or truncated response after retry and fallback.',
|
|
68
|
+
recovery: 'Retry the DNS query later or choose another record type.',
|
|
69
|
+
thrownBy: 'service',
|
|
70
|
+
retryable: true,
|
|
52
71
|
},
|
|
53
72
|
],
|
|
54
73
|
async handler(input, ctx) {
|
|
55
|
-
if (!isValidFqdn(input.domain)) {
|
|
56
|
-
throw ctx.fail('invalid_domain', `"${input.domain}" is not a valid FQDN.`, {
|
|
57
|
-
...ctx.recoveryFor('invalid_domain'),
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
74
|
ctx.log.info('DNS lookup via DoH', { domain: input.domain, types: input.types });
|
|
61
|
-
|
|
62
|
-
return {
|
|
63
|
-
domain: result.domain,
|
|
64
|
-
nxdomain: result.nxdomain,
|
|
65
|
-
records: result.records,
|
|
66
|
-
source: result.source,
|
|
67
|
-
};
|
|
75
|
+
return await getDohService().lookup(input.domain.replace(/\.$/, ''), input.types, ctx);
|
|
68
76
|
},
|
|
69
77
|
format: (result) => {
|
|
70
78
|
const lines = [];
|
|
71
79
|
lines.push(`# DNS Records: ${result.domain}`);
|
|
72
|
-
lines.push(`**Source:** ${result.source}`);
|
|
73
|
-
lines.push(`**
|
|
80
|
+
lines.push(`**Source (aggregate):** ${result.source} — ${result.source === 'cloudflare' ? 'at least one query used Cloudflare' : 'all queries used NextDNS'}`);
|
|
81
|
+
lines.push(`**Query sources:** ${result.query_sources.map((query) => `${query.type}: ${query.source}`).join(', ')}`);
|
|
82
|
+
lines.push(`**NXDOMAIN:** ${result.nxdomain === true ? 'Yes — at least one query returned NXDOMAIN' : 'No'}`);
|
|
74
83
|
// Group records by type and render all fields (name, ttl, data)
|
|
75
84
|
const byType = new Map();
|
|
76
85
|
for (const rec of result.records) {
|
|
@@ -81,9 +90,16 @@ export const whoisGetDns = tool('whois_get_dns', {
|
|
|
81
90
|
for (const [type, recs] of byType) {
|
|
82
91
|
lines.push(`\n## ${type}`);
|
|
83
92
|
for (const rec of recs) {
|
|
84
|
-
//
|
|
85
|
-
|
|
86
|
-
|
|
93
|
+
// Backticks distinguish TXT data visually; they are not a security boundary.
|
|
94
|
+
if (type === 'TXT') {
|
|
95
|
+
let longestRun = 0;
|
|
96
|
+
for (const run of rec.data.matchAll(/`+/g))
|
|
97
|
+
longestRun = Math.max(longestRun, run[0].length);
|
|
98
|
+
const fence = '`'.repeat(Math.max(3, longestRun + 1));
|
|
99
|
+
lines.push(`- name: ${rec.name} | TTL: ${rec.ttl}s`, `${fence}\n${rec.data}\n${fence}`);
|
|
100
|
+
}
|
|
101
|
+
else
|
|
102
|
+
lines.push(`- **${rec.data}** | name: ${rec.name} | TTL: ${rec.ttl}s`);
|
|
87
103
|
}
|
|
88
104
|
}
|
|
89
105
|
if (result.records.length === 0 && result.nxdomain !== true) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whois-get-dns.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-get-dns.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"whois-get-dns.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-get-dns.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,11 +28,6 @@ export declare const whoisGetDossier: import("@cyanheads/mcp-ts-core").ToolDefin
|
|
|
28
28
|
rdap_source_error: z.ZodOptional<z.ZodString>;
|
|
29
29
|
dns_source_error: z.ZodOptional<z.ZodString>;
|
|
30
30
|
}, z.core.$strip>, readonly [{
|
|
31
|
-
readonly reason: "invalid_domain";
|
|
32
|
-
readonly code: JsonRpcErrorCode.ValidationError;
|
|
33
|
-
readonly when: "Input is not a valid FQDN.";
|
|
34
|
-
readonly recovery: "Provide a valid fully-qualified domain name like \"example.com\" or \"sub.example.org\".";
|
|
35
|
-
}, {
|
|
36
31
|
readonly reason: "both_legs_failed";
|
|
37
32
|
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
38
33
|
readonly when: "Both RDAP and DoH legs failed — no data could be retrieved.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whois-get-dossier.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-get-dossier.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"whois-get-dossier.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-get-dossier.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAsF3E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAiR1B,CAAC"}
|
|
@@ -6,7 +6,7 @@ import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
|
6
6
|
import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
7
7
|
import { getDohService } from '../../../services/doh/doh-service.js';
|
|
8
8
|
import { getRdapService } from '../../../services/rdap/rdap-service.js';
|
|
9
|
-
import {
|
|
9
|
+
import { REGISTRATION_NAME_PATTERN } from './_fqdn.js';
|
|
10
10
|
/** True when the error is a typed domain_not_found from rdap-service */
|
|
11
11
|
function isDomainNotFound(err) {
|
|
12
12
|
return (err instanceof McpError &&
|
|
@@ -19,25 +19,25 @@ function inferNsProvider(nsRecords) {
|
|
|
19
19
|
return;
|
|
20
20
|
const ns = (nsRecords[0]?.data ?? '').toLowerCase().replace(/\.$/, '');
|
|
21
21
|
// Common providers
|
|
22
|
-
if (ns
|
|
22
|
+
if (hasDomain(ns, 'cloudflare.com'))
|
|
23
23
|
return 'Cloudflare';
|
|
24
|
-
if (
|
|
24
|
+
if (/(^|\.)awsdns-\d+\.(com|net|org|co\.uk)$/.test(ns) || hasDomain(ns, 'amazonaws.com'))
|
|
25
25
|
return 'AWS Route 53';
|
|
26
|
-
if (ns
|
|
26
|
+
if (hasDomain(ns, 'google.com', 'googledomains.com'))
|
|
27
27
|
return 'Google Cloud DNS';
|
|
28
|
-
if (ns.
|
|
28
|
+
if (hasDomain(ns, 'azure-dns.com', 'azure-dns.net', 'azure-dns.org', 'azure-dns.info', 'microsoftdns.com'))
|
|
29
29
|
return 'Azure DNS';
|
|
30
|
-
if (ns
|
|
30
|
+
if (hasDomain(ns, 'namebrightdns.com', 'namebright.com'))
|
|
31
31
|
return 'NameBright';
|
|
32
|
-
if (ns
|
|
32
|
+
if (hasDomain(ns, 'nsone.net', 'ns1.com'))
|
|
33
33
|
return 'NS1';
|
|
34
|
-
if (ns
|
|
34
|
+
if (hasDomain(ns, 'dnsimple.com'))
|
|
35
35
|
return 'DNSimple';
|
|
36
|
-
if (ns
|
|
36
|
+
if (hasDomain(ns, 'domaincontrol.com'))
|
|
37
37
|
return 'GoDaddy';
|
|
38
|
-
if (ns
|
|
38
|
+
if (hasDomain(ns, 'name.com'))
|
|
39
39
|
return 'Name.com';
|
|
40
|
-
if (ns
|
|
40
|
+
if (hasDomain(ns, 'registrar-servers.com'))
|
|
41
41
|
return 'Namecheap';
|
|
42
42
|
// Fall back to the second-level domain of the NS server
|
|
43
43
|
const parts = ns.split('.');
|
|
@@ -49,29 +49,30 @@ function inferNsProvider(nsRecords) {
|
|
|
49
49
|
function inferMxProvider(mxRecords) {
|
|
50
50
|
if (mxRecords.length === 0)
|
|
51
51
|
return;
|
|
52
|
-
const mx = (mxRecords[0]?.data ?? '')
|
|
53
|
-
|
|
52
|
+
const mx = (mxRecords[0]?.data ?? '')
|
|
53
|
+
.trim()
|
|
54
|
+
.replace(/^\d+\s+/, '')
|
|
55
|
+
.toLowerCase()
|
|
56
|
+
.replace(/\.$/, '');
|
|
57
|
+
if (hasDomain(mx, 'google.com', 'googlemail.com'))
|
|
54
58
|
return 'Google Workspace';
|
|
55
|
-
if (mx
|
|
56
|
-
mx.includes('microsoft') ||
|
|
57
|
-
mx.includes('office365') ||
|
|
58
|
-
mx.includes('protection.outlook'))
|
|
59
|
+
if (hasDomain(mx, 'outlook.com', 'microsoft.com', 'office365.com'))
|
|
59
60
|
return 'Microsoft 365';
|
|
60
|
-
if (mx
|
|
61
|
+
if (hasDomain(mx, 'mxroute.com'))
|
|
61
62
|
return 'MXroute';
|
|
62
|
-
if (mx
|
|
63
|
+
if (hasDomain(mx, 'mailchannels.net'))
|
|
63
64
|
return 'MailChannels';
|
|
64
|
-
if (mx
|
|
65
|
+
if (hasDomain(mx, 'amazonses.com', 'amazonaws.com'))
|
|
65
66
|
return 'Amazon SES';
|
|
66
|
-
if (mx
|
|
67
|
+
if (hasDomain(mx, 'fastmail.com', 'messagingengine.com'))
|
|
67
68
|
return 'Fastmail';
|
|
68
|
-
if (mx.
|
|
69
|
+
if (hasDomain(mx, 'protonmail.com', 'protonmail.ch'))
|
|
69
70
|
return 'ProtonMail';
|
|
70
|
-
if (mx
|
|
71
|
+
if (hasDomain(mx, 'zoho.com'))
|
|
71
72
|
return 'Zoho Mail';
|
|
72
|
-
if (mx
|
|
73
|
+
if (hasDomain(mx, 'sendgrid.net'))
|
|
73
74
|
return 'SendGrid';
|
|
74
|
-
if (mx
|
|
75
|
+
if (hasDomain(mx, 'mailgun.org'))
|
|
75
76
|
return 'Mailgun';
|
|
76
77
|
// Fall back to second-level domain
|
|
77
78
|
const parts = mx.split('.');
|
|
@@ -79,6 +80,10 @@ function inferMxProvider(mxRecords) {
|
|
|
79
80
|
return parts[parts.length - 2];
|
|
80
81
|
return;
|
|
81
82
|
}
|
|
83
|
+
/** Match whole DNS domains, including their subdomains. */
|
|
84
|
+
function hasDomain(hostname, ...domains) {
|
|
85
|
+
return domains.some((domain) => hostname === domain || hostname.endsWith(`.${domain}`));
|
|
86
|
+
}
|
|
82
87
|
/** Compute domain age in days from creation date string */
|
|
83
88
|
function ageDaysFromCreated(createdDate) {
|
|
84
89
|
if (!createdDate)
|
|
@@ -102,6 +107,8 @@ export const whoisGetDossier = tool('whois_get_dossier', {
|
|
|
102
107
|
input: z.object({
|
|
103
108
|
domain: z
|
|
104
109
|
.string()
|
|
110
|
+
.max(253)
|
|
111
|
+
.regex(REGISTRATION_NAME_PATTERN, 'Provide a dot-separated ASCII hostname such as example.com; labels are 1–63 characters, without underscores, whitespace or a root dot.')
|
|
105
112
|
.describe('Fully qualified domain name for the triage (e.g., "github.com"). Must be a valid FQDN.'),
|
|
106
113
|
}),
|
|
107
114
|
output: z.object({
|
|
@@ -114,8 +121,8 @@ export const whoisGetDossier = tool('whois_get_dossier', {
|
|
|
114
121
|
registered: z
|
|
115
122
|
.boolean()
|
|
116
123
|
.nullable()
|
|
117
|
-
.describe('True when the domain has a registration record. False = RDAP 404 (not
|
|
118
|
-
'Null when RDAP leg failed.'),
|
|
124
|
+
.describe('True when the domain has a registration record. False = RDAP 404 (no registry object found; not registration eligibility). ' +
|
|
125
|
+
'Null when RDAP coverage is absent or the leg failed.'),
|
|
119
126
|
registrar: z.string().optional().describe('Registrar name from registration record.'),
|
|
120
127
|
created_date: z.string().optional().describe('ISO 8601 registration creation date.'),
|
|
121
128
|
expiry_date: z.string().optional().describe('ISO 8601 registration expiry date.'),
|
|
@@ -126,11 +133,11 @@ export const whoisGetDossier = tool('whois_get_dossier', {
|
|
|
126
133
|
dnssec_signed: z
|
|
127
134
|
.boolean()
|
|
128
135
|
.nullable()
|
|
129
|
-
.describe('
|
|
136
|
+
.describe('Provider delegationSigned value; null when evidence or RDAP coverage is absent.'),
|
|
130
137
|
privacy_redacted: z
|
|
131
138
|
.boolean()
|
|
132
139
|
.nullable()
|
|
133
|
-
.describe('True
|
|
140
|
+
.describe('True for explicit registrant redaction evidence; null when evidence or RDAP coverage is absent.'),
|
|
134
141
|
status: z.array(z.string()).describe('EPP status codes. Empty when RDAP leg failed.'),
|
|
135
142
|
nameservers: z
|
|
136
143
|
.array(z.string())
|
|
@@ -151,7 +158,7 @@ export const whoisGetDossier = tool('whois_get_dossier', {
|
|
|
151
158
|
dns_nxdomain: z
|
|
152
159
|
.boolean()
|
|
153
160
|
.nullable()
|
|
154
|
-
.describe('True when
|
|
161
|
+
.describe('True when at least one DNS query returned NXDOMAIN. Null when DNS leg failed.'),
|
|
155
162
|
// Inferred signals
|
|
156
163
|
ns_provider: z
|
|
157
164
|
.string()
|
|
@@ -172,12 +179,6 @@ export const whoisGetDossier = tool('whois_get_dossier', {
|
|
|
172
179
|
.describe('Error message from the DNS leg when it failed. Omitted on success.'),
|
|
173
180
|
}),
|
|
174
181
|
errors: [
|
|
175
|
-
{
|
|
176
|
-
reason: 'invalid_domain',
|
|
177
|
-
code: JsonRpcErrorCode.ValidationError,
|
|
178
|
-
when: 'Input is not a valid FQDN.',
|
|
179
|
-
recovery: 'Provide a valid fully-qualified domain name like "example.com" or "sub.example.org".',
|
|
180
|
-
},
|
|
181
182
|
{
|
|
182
183
|
reason: 'both_legs_failed',
|
|
183
184
|
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
@@ -186,26 +187,21 @@ export const whoisGetDossier = tool('whois_get_dossier', {
|
|
|
186
187
|
},
|
|
187
188
|
],
|
|
188
189
|
async handler(input, ctx) {
|
|
189
|
-
if (!isValidFqdn(input.domain)) {
|
|
190
|
-
throw ctx.fail('invalid_domain', `"${input.domain}" is not a valid FQDN.`, {
|
|
191
|
-
...ctx.recoveryFor('invalid_domain'),
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
190
|
ctx.log.info('Domain dossier lookup', { domain: input.domain });
|
|
195
191
|
// Fan out RDAP and DNS lookups in parallel
|
|
196
192
|
const [rdapSettled, dnsSettled] = await Promise.allSettled([
|
|
197
193
|
getRdapService().lookupDomain(input.domain, ctx),
|
|
198
194
|
getDohService().lookup(input.domain, ['A', 'MX', 'NS', 'TXT'], ctx),
|
|
199
195
|
]);
|
|
196
|
+
ctx.signal.throwIfAborted();
|
|
200
197
|
const rdapOk = rdapSettled.status === 'fulfilled';
|
|
201
198
|
const dnsOk = dnsSettled.status === 'fulfilled';
|
|
202
|
-
//
|
|
199
|
+
// A missing registry object is data, not a failed RDAP leg.
|
|
203
200
|
const rdapNotFound = rdapSettled.status === 'rejected' && isDomainNotFound(rdapSettled.reason);
|
|
204
201
|
if (!rdapOk && !rdapNotFound && !dnsOk) {
|
|
205
202
|
throw ctx.fail('both_legs_failed', 'Both RDAP and DNS lookups failed — no data available.', {
|
|
206
203
|
rdap_error: rdapSettled.status === 'rejected' ? String(rdapSettled.reason) : undefined,
|
|
207
204
|
dns_error: dnsSettled.status === 'rejected' ? String(dnsSettled.reason) : undefined,
|
|
208
|
-
...ctx.recoveryFor('both_legs_failed'),
|
|
209
205
|
});
|
|
210
206
|
}
|
|
211
207
|
// Build result from available legs
|
|
@@ -238,10 +234,10 @@ export const whoisGetDossier = tool('whois_get_dossier', {
|
|
|
238
234
|
const ageDays = reg ? (ageDaysFromCreated(reg.created_date) ?? null) : null;
|
|
239
235
|
const nsProvider = dnsOk ? (inferNsProvider(nsRecords) ?? null) : null;
|
|
240
236
|
const mxProvider = dnsOk ? (inferMxProvider(mxRecords) ?? null) : null;
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
237
|
+
/**
|
|
238
|
+
* Preserve the registered field as registry-record presence:
|
|
239
|
+
* true for a record, false for RDAP 404, null for absent coverage or failure.
|
|
240
|
+
*/
|
|
245
241
|
const registered = rdapNotFound
|
|
246
242
|
? false
|
|
247
243
|
: rdapOk && reg
|
|
@@ -251,7 +247,7 @@ export const whoisGetDossier = tool('whois_get_dossier', {
|
|
|
251
247
|
: null;
|
|
252
248
|
return {
|
|
253
249
|
domain: input.domain.toLowerCase(),
|
|
254
|
-
//
|
|
250
|
+
// RDAP 404 proves coverage, but only establishes registry-record absence.
|
|
255
251
|
rdap_coverage: rdapNotFound ? true : rdapOk ? (reg?.rdap_coverage ?? null) : null,
|
|
256
252
|
registered,
|
|
257
253
|
registrar: reg?.registrar,
|
|
@@ -278,6 +274,7 @@ export const whoisGetDossier = tool('whois_get_dossier', {
|
|
|
278
274
|
lines.push(`# Domain Dossier: ${result.domain}`);
|
|
279
275
|
// Registration section
|
|
280
276
|
lines.push('\n## Registration');
|
|
277
|
+
lines.push(`**Registered (RDAP record):** ${result.registered === true ? 'Found' : result.registered === false ? 'Not found' : 'Unknown'}`);
|
|
281
278
|
if (result.rdap_coverage === null) {
|
|
282
279
|
lines.push(`**RDAP:** Failed`);
|
|
283
280
|
}
|
|
@@ -285,7 +282,6 @@ export const whoisGetDossier = tool('whois_get_dossier', {
|
|
|
285
282
|
lines.push('**RDAP Coverage:** None — TLD has no RDAP server');
|
|
286
283
|
}
|
|
287
284
|
else {
|
|
288
|
-
lines.push(`**Registered:** ${result.registered ? 'Yes' : result.registered === false ? 'No' : 'Unknown'}`);
|
|
289
285
|
if (result.created_date)
|
|
290
286
|
lines.push(`**Created:** ${result.created_date}`);
|
|
291
287
|
if (result.expiry_date)
|
|
@@ -301,6 +297,9 @@ export const whoisGetDossier = tool('whois_get_dossier', {
|
|
|
301
297
|
}
|
|
302
298
|
if (result.registrar)
|
|
303
299
|
lines.push(`**Registrar:** ${result.registrar}`);
|
|
300
|
+
if (result.rdap_coverage !== true) {
|
|
301
|
+
lines.push('**DNSSEC:** Unknown', '**Privacy Redacted:** Unknown');
|
|
302
|
+
}
|
|
304
303
|
if (result.rdap_source_error)
|
|
305
304
|
lines.push(`**RDAP Error:** ${result.rdap_source_error}`);
|
|
306
305
|
// DNS section
|
|
@@ -309,7 +308,7 @@ export const whoisGetDossier = tool('whois_get_dossier', {
|
|
|
309
308
|
lines.push(`**DNS:** Failed — ${result.dns_source_error}`);
|
|
310
309
|
}
|
|
311
310
|
else if (result.dns_nxdomain) {
|
|
312
|
-
lines.push('**NXDOMAIN:**
|
|
311
|
+
lines.push('**NXDOMAIN:** At least one DNS query returned NXDOMAIN.');
|
|
313
312
|
}
|
|
314
313
|
if (result.a_records.length > 0)
|
|
315
314
|
lines.push(`**A:** ${result.a_records.join(', ')}`);
|
|
@@ -318,9 +317,15 @@ export const whoisGetDossier = tool('whois_get_dossier', {
|
|
|
318
317
|
if (result.mx_records.length > 0)
|
|
319
318
|
lines.push(`**MX:** ${result.mx_records.join(', ')}`);
|
|
320
319
|
if (result.txt_records.length > 0) {
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
320
|
+
lines.push('**TXT:**');
|
|
321
|
+
// Longer fences preserve literal data; delimiters are presentation, not a security boundary.
|
|
322
|
+
for (const value of result.txt_records) {
|
|
323
|
+
let longestRun = 0;
|
|
324
|
+
for (const run of value.matchAll(/`+/g))
|
|
325
|
+
longestRun = Math.max(longestRun, run[0].length);
|
|
326
|
+
const fence = '`'.repeat(Math.max(3, longestRun + 1));
|
|
327
|
+
lines.push(`${fence}\n${value}\n${fence}`);
|
|
328
|
+
}
|
|
324
329
|
}
|
|
325
330
|
// Inferred signals
|
|
326
331
|
lines.push('\n## Signals');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whois-get-dossier.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-get-dossier.tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"whois-get-dossier.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-get-dossier.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,8 +19,8 @@ export declare const whoisLookupAsn: import("@cyanheads/mcp-ts-core").ToolDefini
|
|
|
19
19
|
}, z.core.$strip>, readonly [{
|
|
20
20
|
readonly reason: "invalid_asn";
|
|
21
21
|
readonly code: JsonRpcErrorCode.ValidationError;
|
|
22
|
-
readonly when: "
|
|
23
|
-
readonly recovery: "Provide a
|
|
22
|
+
readonly when: "The complete token is not a decimal ASN from 1 to 4294967295.";
|
|
23
|
+
readonly recovery: "Provide a decimal integer from 1 to 4294967295, optionally prefixed with AS and +, such as \"AS15169\" or \"+15169\".";
|
|
24
24
|
readonly thrownBy: "service";
|
|
25
25
|
}, {
|
|
26
26
|
readonly reason: "asn_not_found";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whois-lookup-asn.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-lookup-asn.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"whois-lookup-asn.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-lookup-asn.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAIjE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;cAyFzB,CAAC"}
|
|
@@ -5,17 +5,21 @@
|
|
|
5
5
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
7
|
import { getRdapService } from '../../../services/rdap/rdap-service.js';
|
|
8
|
+
import { ASN_PATTERN } from './_fqdn.js';
|
|
8
9
|
export const whoisLookupAsn = tool('whois_lookup_asn', {
|
|
9
10
|
title: 'ASN Lookup',
|
|
10
11
|
description: 'Resolve an Autonomous System Number (ASN) to its org name, country, and RIR source via RIR RDAP. ' +
|
|
11
|
-
'Accepts
|
|
12
|
+
'Accepts a decimal ASN from 1 to 4294967295 (e.g., "AS15169" or "15169"). Distinct from IP ' +
|
|
12
13
|
'lookup — the entry point is the ASN itself, not an IP within its block.',
|
|
13
14
|
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
14
15
|
input: z.object({
|
|
15
16
|
asn: z
|
|
16
17
|
.string()
|
|
17
|
-
.
|
|
18
|
-
'
|
|
18
|
+
.min(1)
|
|
19
|
+
.regex(ASN_PATTERN, 'Provide decimal ASN digits with optional AS prefix, adjacent + and outer whitespace, such as AS15169.')
|
|
20
|
+
.describe('Decimal ASN from 1 to 4294967295. Optional case-insensitive AS prefix and leading + ' +
|
|
21
|
+
'(e.g., "AS15169", "AS 15169", "+15169"). Outer whitespace and whitespace after AS are accepted; ' +
|
|
22
|
+
'whitespace inside digits or after + is invalid.'),
|
|
19
23
|
}),
|
|
20
24
|
output: z.object({
|
|
21
25
|
asn: z.string().describe('Normalized ASN identifier (AS-prefixed, e.g., "AS15169").'),
|
|
@@ -38,8 +42,8 @@ export const whoisLookupAsn = tool('whois_lookup_asn', {
|
|
|
38
42
|
{
|
|
39
43
|
reason: 'invalid_asn',
|
|
40
44
|
code: JsonRpcErrorCode.ValidationError,
|
|
41
|
-
when: '
|
|
42
|
-
recovery: 'Provide a
|
|
45
|
+
when: 'The complete token is not a decimal ASN from 1 to 4294967295.',
|
|
46
|
+
recovery: 'Provide a decimal integer from 1 to 4294967295, optionally prefixed with AS and +, such as "AS15169" or "+15169".',
|
|
43
47
|
thrownBy: 'service',
|
|
44
48
|
},
|
|
45
49
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whois-lookup-asn.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-lookup-asn.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"whois-lookup-asn.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-lookup-asn.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,20 @@
|
|
|
5
5
|
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
7
|
export declare const whoisLookupDomain: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
include_registrar: z.ZodDefault<z.ZodBoolean>;
|
|
8
9
|
domain: z.ZodString;
|
|
9
10
|
}, z.core.$strip>, z.ZodObject<{
|
|
11
|
+
registrar_detail: z.ZodOptional<z.ZodObject<{
|
|
12
|
+
status: z.ZodEnum<{
|
|
13
|
+
failed: "failed";
|
|
14
|
+
found: "found";
|
|
15
|
+
no_referral: "no_referral";
|
|
16
|
+
}>;
|
|
17
|
+
source: z.ZodOptional<z.ZodString>;
|
|
18
|
+
registrant_org: z.ZodOptional<z.ZodString>;
|
|
19
|
+
registrant_redacted: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
20
|
+
source_error: z.ZodOptional<z.ZodString>;
|
|
21
|
+
}, z.core.$strip>>;
|
|
10
22
|
domain: z.ZodString;
|
|
11
23
|
rdap_coverage: z.ZodBoolean;
|
|
12
24
|
handle: z.ZodOptional<z.ZodString>;
|
|
@@ -18,15 +30,10 @@ export declare const whoisLookupDomain: import("@cyanheads/mcp-ts-core").ToolDef
|
|
|
18
30
|
rdap_last_updated: z.ZodOptional<z.ZodString>;
|
|
19
31
|
status: z.ZodArray<z.ZodString>;
|
|
20
32
|
nameservers: z.ZodArray<z.ZodString>;
|
|
21
|
-
dnssec_signed: z.ZodBoolean
|
|
33
|
+
dnssec_signed: z.ZodNullable<z.ZodBoolean>;
|
|
22
34
|
registrant_org: z.ZodOptional<z.ZodString>;
|
|
23
|
-
registrant_redacted: z.ZodBoolean
|
|
35
|
+
registrant_redacted: z.ZodNullable<z.ZodBoolean>;
|
|
24
36
|
}, z.core.$strip>, readonly [{
|
|
25
|
-
readonly reason: "invalid_domain";
|
|
26
|
-
readonly code: JsonRpcErrorCode.ValidationError;
|
|
27
|
-
readonly when: "Input is not a valid FQDN.";
|
|
28
|
-
readonly recovery: "Provide a valid fully-qualified domain name like \"example.com\" or \"sub.example.org\".";
|
|
29
|
-
}, {
|
|
30
37
|
readonly reason: "rdap_no_coverage";
|
|
31
38
|
readonly code: JsonRpcErrorCode.NotFound;
|
|
32
39
|
readonly when: "TLD has no RDAP server in the IANA bootstrap — cannot perform lookup.";
|
|
@@ -34,7 +41,7 @@ export declare const whoisLookupDomain: import("@cyanheads/mcp-ts-core").ToolDef
|
|
|
34
41
|
}, {
|
|
35
42
|
readonly reason: "domain_not_found";
|
|
36
43
|
readonly code: JsonRpcErrorCode.NotFound;
|
|
37
|
-
readonly when: "RDAP server returned 404 — domain
|
|
38
|
-
readonly recovery: "
|
|
44
|
+
readonly when: "RDAP server returned 404 — no domain record found.";
|
|
45
|
+
readonly recovery: "Use whois_check_availability for record status; a missing record does not establish registration eligibility.";
|
|
39
46
|
}], undefined>;
|
|
40
47
|
//# sourceMappingURL=whois-lookup-domain.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whois-lookup-domain.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-lookup-domain.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAK3E,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"whois-lookup-domain.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-lookup-domain.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAK3E,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAgM5B,CAAC"}
|