@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.
Files changed (52) hide show
  1. package/AGENTS.md +27 -14
  2. package/CLAUDE.md +27 -14
  3. package/Dockerfile +48 -34
  4. package/README.md +30 -35
  5. package/changelog/0.1.x/0.1.6.md +41 -0
  6. package/changelog/0.2.x/0.2.0.md +40 -0
  7. package/dist/app.d.ts +67 -26
  8. package/dist/app.d.ts.map +1 -1
  9. package/dist/app.js +7 -5
  10. package/dist/app.js.map +1 -1
  11. package/dist/mcp-server/tools/definitions/_fqdn.d.ts +9 -3
  12. package/dist/mcp-server/tools/definitions/_fqdn.d.ts.map +1 -1
  13. package/dist/mcp-server/tools/definitions/_fqdn.js +10 -14
  14. package/dist/mcp-server/tools/definitions/_fqdn.js.map +1 -1
  15. package/dist/mcp-server/tools/definitions/whois-check-availability.tool.d.ts +11 -5
  16. package/dist/mcp-server/tools/definitions/whois-check-availability.tool.d.ts.map +1 -1
  17. package/dist/mcp-server/tools/definitions/whois-check-availability.tool.js +25 -40
  18. package/dist/mcp-server/tools/definitions/whois-check-availability.tool.js.map +1 -1
  19. package/dist/mcp-server/tools/definitions/whois-get-dns.tool.d.ts +23 -4
  20. package/dist/mcp-server/tools/definitions/whois-get-dns.tool.d.ts.map +1 -1
  21. package/dist/mcp-server/tools/definitions/whois-get-dns.tool.js +44 -28
  22. package/dist/mcp-server/tools/definitions/whois-get-dns.tool.js.map +1 -1
  23. package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.d.ts +0 -5
  24. package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.d.ts.map +1 -1
  25. package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.js +58 -53
  26. package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.js.map +1 -1
  27. package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.d.ts +2 -2
  28. package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.d.ts.map +1 -1
  29. package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.js +9 -5
  30. package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.js.map +1 -1
  31. package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.d.ts +16 -9
  32. package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.d.ts.map +1 -1
  33. package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.js +60 -24
  34. package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.js.map +1 -1
  35. package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.d.ts +16 -2
  36. package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.d.ts.map +1 -1
  37. package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.js +44 -17
  38. package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.js.map +1 -1
  39. package/dist/services/doh/doh-service.d.ts +3 -3
  40. package/dist/services/doh/doh-service.d.ts.map +1 -1
  41. package/dist/services/doh/doh-service.js +71 -24
  42. package/dist/services/doh/doh-service.js.map +1 -1
  43. package/dist/services/doh/types.d.ts +16 -0
  44. package/dist/services/doh/types.d.ts.map +1 -1
  45. package/dist/services/rdap/rdap-service.d.ts +20 -8
  46. package/dist/services/rdap/rdap-service.d.ts.map +1 -1
  47. package/dist/services/rdap/rdap-service.js +200 -145
  48. package/dist/services/rdap/rdap-service.js.map +1 -1
  49. package/dist/services/rdap/types.d.ts +32 -2
  50. package/dist/services/rdap/types.d.ts.map +1 -1
  51. package/package.json +14 -12
  52. 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 { isValidFqdn } from './_fqdn.js';
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 domain does not exist in DNS.',
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
- .describe('Fully qualified domain name or hostname to query (e.g., "github.com", "mail.example.com").'),
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 the domain does not exist in DNS (NXDOMAIN / Status 3). ' +
31
- 'Records will be empty. This is a valid data signal, not an error.'),
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('The DoH resolver that provided results (cloudflare = primary used for most types, nextdns = fallback or CAA).'),
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: 'invalid_domain',
49
- code: JsonRpcErrorCode.ValidationError,
50
- when: 'Input is not a valid FQDN.',
51
- recovery: 'Provide a valid fully-qualified domain name like "example.com" or "sub.example.org".',
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
- const result = await getDohService().lookup(input.domain, input.types, ctx);
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(`**NXDOMAIN:** ${result.nxdomain === true ? 'Yes — domain does not exist in DNS' : 'No'}`);
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
- // TXT records are attacker-controlled free-text and must be fenced to prevent prompt injection
85
- const data = type === 'TXT' ? `\`${rec.data}\`` : rec.data;
86
- lines.push(`- **${data}** | name: ${rec.name} | TTL: ${rec.ttl}s`);
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":"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"}
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;AAyE3E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAiR1B,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 { isValidFqdn } from './_fqdn.js';
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.includes('cloudflare'))
22
+ if (hasDomain(ns, 'cloudflare.com'))
23
23
  return 'Cloudflare';
24
- if (ns.includes('awsdns') || ns.includes('amazonaws'))
24
+ if (/(^|\.)awsdns-\d+\.(com|net|org|co\.uk)$/.test(ns) || hasDomain(ns, 'amazonaws.com'))
25
25
  return 'AWS Route 53';
26
- if (ns.includes('google'))
26
+ if (hasDomain(ns, 'google.com', 'googledomains.com'))
27
27
  return 'Google Cloud DNS';
28
- if (ns.includes('azure-dns') || ns.includes('microsoftdns'))
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.includes('namebrightdns') || ns.includes('namebright'))
30
+ if (hasDomain(ns, 'namebrightdns.com', 'namebright.com'))
31
31
  return 'NameBright';
32
- if (ns.includes('nsone') || ns.includes('ns1.com'))
32
+ if (hasDomain(ns, 'nsone.net', 'ns1.com'))
33
33
  return 'NS1';
34
- if (ns.includes('dnsimple'))
34
+ if (hasDomain(ns, 'dnsimple.com'))
35
35
  return 'DNSimple';
36
- if (ns.includes('domaincontrol'))
36
+ if (hasDomain(ns, 'domaincontrol.com'))
37
37
  return 'GoDaddy';
38
- if (ns.includes('name.com'))
38
+ if (hasDomain(ns, 'name.com'))
39
39
  return 'Name.com';
40
- if (ns.includes('registrar-servers'))
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 ?? '').toLowerCase().replace(/\.$/, '');
53
- if (mx.includes('google') || mx.includes('googlemail') || mx.includes('aspmx'))
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.includes('outlook') ||
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.includes('mxroute'))
61
+ if (hasDomain(mx, 'mxroute.com'))
61
62
  return 'MXroute';
62
- if (mx.includes('mailchannels'))
63
+ if (hasDomain(mx, 'mailchannels.net'))
63
64
  return 'MailChannels';
64
- if (mx.includes('amazonses') || mx.includes('amazonaws'))
65
+ if (hasDomain(mx, 'amazonses.com', 'amazonaws.com'))
65
66
  return 'Amazon SES';
66
- if (mx.includes('fastmail'))
67
+ if (hasDomain(mx, 'fastmail.com', 'messagingengine.com'))
67
68
  return 'Fastmail';
68
- if (mx.includes('protonmail'))
69
+ if (hasDomain(mx, 'protonmail.com', 'protonmail.ch'))
69
70
  return 'ProtonMail';
70
- if (mx.includes('zoho'))
71
+ if (hasDomain(mx, 'zoho.com'))
71
72
  return 'Zoho Mail';
72
- if (mx.includes('sendgrid'))
73
+ if (hasDomain(mx, 'sendgrid.net'))
73
74
  return 'SendGrid';
74
- if (mx.includes('mailgun'))
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 registered). ' +
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('True when delegation-signed. Null when RDAP leg unavailable.'),
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 when registrant contact info is privacy-redacted. Null when RDAP leg unavailable.'),
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 DNS says domain does not exist (NXDOMAIN). Null when DNS leg failed.'),
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
- // domain_not_found is a valid data signal (RDAP 404 = not registered), not a leg failure
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
- // registered:
242
- // true — RDAP returned a record (domain exists)
243
- // false — RDAP returned 404 (domain_not_found = not registered)
244
- // null — RDAP leg errored for another reason, or rdap_coverage: false
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
- // rdapNotFound means RDAP server was reachable (coverage: true) but domain doesn't exist
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:** Domain does not exist in DNS.');
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
- // TXT records are attacker-controlled free-text; backtick-fence each value to prevent prompt injection
322
- const fenced = result.txt_records.slice(0, 3).map((v) => `\`${v}\``);
323
- lines.push(`**TXT:** ${fenced.join(' | ')}`);
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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,wEAAwE;AACxE,SAAS,gBAAgB,CAAC,GAAY;IACpC,OAAO,CACL,GAAG,YAAY,QAAQ;QACvB,OAAQ,GAAG,CAAC,IAAgC,EAAE,MAAM,KAAK,QAAQ;QAChE,GAAG,CAAC,IAAgC,CAAC,MAAM,KAAK,kBAAkB,CACpE,CAAC;AACJ,CAAC;AAED,8FAA8F;AAC9F,SAAS,eAAe,CAAC,SAAgC;IACvD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACnC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACvE,mBAAmB;IACnB,IAAI,SAAS,CAAC,EAAE,EAAE,gBAAgB,CAAC;QAAE,OAAO,YAAY,CAAC;IACzD,IAAI,yCAAyC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,EAAE,eAAe,CAAC;QACtF,OAAO,cAAc,CAAC;IACxB,IAAI,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,mBAAmB,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAChF,IACE,SAAS,CACP,EAAE,EACF,eAAe,EACf,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,kBAAkB,CACnB;QAED,OAAO,WAAW,CAAC;IACrB,IAAI,SAAS,CAAC,EAAE,EAAE,mBAAmB,EAAE,gBAAgB,CAAC;QAAE,OAAO,YAAY,CAAC;IAC9E,IAAI,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,SAAS,CAAC,EAAE,EAAE,cAAc,CAAC;QAAE,OAAO,UAAU,CAAC;IACrD,IAAI,SAAS,CAAC,EAAE,EAAE,mBAAmB,CAAC;QAAE,OAAO,SAAS,CAAC;IACzD,IAAI,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IACjD,IAAI,SAAS,CAAC,EAAE,EAAE,uBAAuB,CAAC;QAAE,OAAO,WAAW,CAAC;IAC/D,wDAAwD;IACxD,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtD,OAAO;AACT,CAAC;AAED,sDAAsD;AACtD,SAAS,eAAe,CAAC,SAAgC;IACvD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACnC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;SAClC,IAAI,EAAE;SACN,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,WAAW,EAAE;SACb,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtB,IAAI,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,gBAAgB,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAC7E,IAAI,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,CAAC;QAAE,OAAO,eAAe,CAAC;IAC3F,IAAI,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,IAAI,SAAS,CAAC,EAAE,EAAE,kBAAkB,CAAC;QAAE,OAAO,cAAc,CAAC;IAC7D,IAAI,SAAS,CAAC,EAAE,EAAE,eAAe,EAAE,eAAe,CAAC;QAAE,OAAO,YAAY,CAAC;IACzE,IAAI,SAAS,CAAC,EAAE,EAAE,cAAc,EAAE,qBAAqB,CAAC;QAAE,OAAO,UAAU,CAAC;IAC5E,IAAI,SAAS,CAAC,EAAE,EAAE,gBAAgB,EAAE,eAAe,CAAC;QAAE,OAAO,YAAY,CAAC;IAC1E,IAAI,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC;QAAE,OAAO,WAAW,CAAC;IAClD,IAAI,SAAS,CAAC,EAAE,EAAE,cAAc,CAAC;QAAE,OAAO,UAAU,CAAC;IACrD,IAAI,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,mCAAmC;IACnC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtD,OAAO;AACT,CAAC;AAED,2DAA2D;AAC3D,SAAS,SAAS,CAAC,QAAgB,EAAE,GAAG,OAAiB;IACvD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,2DAA2D;AAC3D,SAAS,kBAAkB,CAAC,WAA+B;IACzD,IAAI,CAAC,WAAW;QAAE,OAAO;IACzB,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE;IACvD,KAAK,EAAE,gBAAgB;IACvB,WAAW,EACT,iGAAiG;QACjG,4FAA4F;QAC5F,iGAAiG;QACjG,mGAAmG;QACnG,kGAAkG;QAClG,iGAAiG;QACjG,qEAAqE;IACvE,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAE9E,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,GAAG,CAAC,GAAG,CAAC;aACR,KAAK,CACJ,yBAAyB,EACzB,wIAAwI,CACzI;aACA,QAAQ,CACP,wFAAwF,CACzF;KACJ,CAAC;IAEF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAEtD,uBAAuB;QACvB,aAAa,EAAE,CAAC;aACb,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,gGAAgG,CACjG;QACH,UAAU,EAAE,CAAC;aACV,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,6HAA6H;YAC3H,sDAAsD,CACzD;QACH,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACrF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QACpF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QACjF,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,gFAAgF,CAAC;QAC7F,aAAa,EAAE,CAAC;aACb,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,iFAAiF,CAAC;QAC9F,gBAAgB,EAAE,CAAC;aAChB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,iGAAiG,CAClG;QACH,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QACrF,WAAW,EAAE,CAAC;aACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,CAAC,wDAAwD,CAAC;QAErE,cAAc;QACd,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,CAAC,oEAAoE,CAAC;QACjF,UAAU,EAAE,CAAC;aACV,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,CAAC,2EAA2E,CAAC;QACxF,UAAU,EAAE,CAAC;aACV,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,CAAC,iFAAiF,CAAC;QAC9F,WAAW,EAAE,CAAC;aACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,CACP,mFAAmF,CACpF;QACH,YAAY,EAAE,CAAC;aACZ,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,+EAA+E,CAAC;QAE5F,mBAAmB;QACnB,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,iHAAiH,CAClH;QACH,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,uHAAuH,CACxH;QAEH,gBAAgB;QAChB,iBAAiB,EAAE,CAAC;aACjB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,qEAAqE,CAAC;QAClF,gBAAgB,EAAE,CAAC;aAChB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,oEAAoE,CAAC;KAClF,CAAC;IAEF,MAAM,EAAE;QACN;YACE,MAAM,EAAE,kBAAkB;YAC1B,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;YACzC,IAAI,EAAE,6DAA6D;YACnE,QAAQ,EACN,mGAAmG;SACtG;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAEhE,2CAA2C;QAC3C,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACzD,cAAc,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC;YAChD,aAAa,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC;SACpE,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,KAAK,WAAW,CAAC;QAClD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,KAAK,WAAW,CAAC;QAChD,4DAA4D;QAC5D,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,KAAK,UAAU,IAAI,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE/F,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,uDAAuD,EAAE;gBAC1F,UAAU,EAAE,WAAW,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;gBACtF,SAAS,EAAE,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;aACpF,CAAC,CAAC;QACL,CAAC;QAED,mCAAmC;QACnC,IAAI,GAAiC,CAAC;QACtC,IAAI,eAAmC,CAAC;QAExC,IAAI,MAAM,EAAE,CAAC;YACX,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC;QAC1B,CAAC;aAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YACzB,eAAe;gBACb,WAAW,CAAC,MAAM,YAAY,KAAK;oBACjC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO;oBAC5B,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,UAAU,GAA0B,EAAE,CAAC;QAC3C,IAAI,WAAW,GAAmB,IAAI,CAAC;QACvC,IAAI,cAAkC,CAAC;QAEvC,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;YACtC,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,cAAc;gBACZ,UAAU,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5E,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvE;;;WAGG;QACH,MAAM,UAAU,GAAmB,YAAY;YAC7C,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,MAAM,IAAI,GAAG;gBACb,CAAC,CAAC,GAAG,CAAC,aAAa;oBACjB,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,IAAI;gBACR,CAAC,CAAC,IAAI,CAAC;QAEX,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE;YAClC,0EAA0E;YAC1E,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;YACjF,UAAU;YACV,SAAS,EAAE,GAAG,EAAE,SAAS;YACzB,YAAY,EAAE,GAAG,EAAE,YAAY;YAC/B,WAAW,EAAE,GAAG,EAAE,WAAW;YAC7B,QAAQ,EAAE,OAAO;YACjB,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;YAC3D,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,mBAAmB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;YACpE,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE;YACzB,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,EAAE;YACnC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACtC,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3D,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3D,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1C,YAAY,EAAE,WAAW;YACzB,WAAW,EAAE,UAAU;YACvB,WAAW,EAAE,UAAU;YACvB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAEjD,uBAAuB;QACvB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CACR,iCAAiC,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,CAChI,CAAC;QACF,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,IAAI,MAAM,CAAC,YAAY;gBAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YAC3E,IAAI,MAAM,CAAC,WAAW;gBAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACzE,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,QAAQ,OAAO,CAAC,CAAC;YAC7E,KAAK,CAAC,IAAI,CACR,eAAe,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAC7G,CAAC;YACF,KAAK,CAAC,IAAI,CACR,yBAAyB,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAClH,CAAC;YACF,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpF,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,2BAA2B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,MAAM,CAAC,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,+BAA+B,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,MAAM,CAAC,iBAAiB;YAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAExF,cAAc;QACd,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrF,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxF,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxF,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvB,6FAA6F;YAC7F,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvC,IAAI,UAAU,GAAG,CAAC,CAAC;gBACnB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC1F,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;gBACtD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,WAAW,IAAI,SAAS,EAAE,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,WAAW,IAAI,gBAAgB,EAAE,CAAC,CAAC;QAE3E,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
@@ -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: "Input does not match AS<number> or bare integer format.";
23
- readonly recovery: "Provide a valid ASN like \"AS15169\" or \"15169\". Numbers must be positive integers.";
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;AAGjE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;cAkFzB,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 AS-prefixed format (e.g., "AS15169") or bare integer (e.g., "15169"). Distinct from IP ' +
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
- .describe('Autonomous System Number to look up. Accepts AS-prefixed format (e.g., "AS15169") or bare ' +
18
- 'integer (e.g., "15169").'),
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: 'Input does not match AS<number> or bare integer format.',
42
- recovery: 'Provide a valid ASN like "AS15169" or "15169". Numbers must be positive integers.',
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":"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"}
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 is not registered.";
38
- readonly recovery: "The domain is not registered. Use whois_check_availability to confirm availability for registration.";
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAmJ5B,CAAC"}
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"}