@cyanheads/whois-mcp-server 0.1.6 → 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 (50) hide show
  1. package/AGENTS.md +21 -9
  2. package/CLAUDE.md +21 -9
  3. package/Dockerfile +7 -4
  4. package/README.md +20 -11
  5. package/changelog/0.2.x/0.2.0.md +40 -0
  6. package/dist/app.d.ts +46 -22
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/app.js +7 -5
  9. package/dist/app.js.map +1 -1
  10. package/dist/mcp-server/tools/definitions/_fqdn.d.ts +9 -3
  11. package/dist/mcp-server/tools/definitions/_fqdn.d.ts.map +1 -1
  12. package/dist/mcp-server/tools/definitions/_fqdn.js +10 -14
  13. package/dist/mcp-server/tools/definitions/_fqdn.js.map +1 -1
  14. package/dist/mcp-server/tools/definitions/whois-check-availability.tool.d.ts +11 -5
  15. package/dist/mcp-server/tools/definitions/whois-check-availability.tool.d.ts.map +1 -1
  16. package/dist/mcp-server/tools/definitions/whois-check-availability.tool.js +25 -38
  17. package/dist/mcp-server/tools/definitions/whois-check-availability.tool.js.map +1 -1
  18. package/dist/mcp-server/tools/definitions/whois-get-dns.tool.d.ts +6 -4
  19. package/dist/mcp-server/tools/definitions/whois-get-dns.tool.d.ts.map +1 -1
  20. package/dist/mcp-server/tools/definitions/whois-get-dns.tool.js +25 -16
  21. package/dist/mcp-server/tools/definitions/whois-get-dns.tool.js.map +1 -1
  22. package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.d.ts +0 -5
  23. package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.d.ts.map +1 -1
  24. package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.js +20 -23
  25. package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.js.map +1 -1
  26. package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.d.ts.map +1 -1
  27. package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.js +3 -0
  28. package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.js.map +1 -1
  29. package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.d.ts +16 -9
  30. package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.d.ts.map +1 -1
  31. package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.js +60 -21
  32. package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.js.map +1 -1
  33. package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.d.ts +14 -0
  34. package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.d.ts.map +1 -1
  35. package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.js +34 -6
  36. package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.js.map +1 -1
  37. package/dist/services/doh/doh-service.d.ts +3 -3
  38. package/dist/services/doh/doh-service.d.ts.map +1 -1
  39. package/dist/services/doh/doh-service.js +61 -12
  40. package/dist/services/doh/doh-service.js.map +1 -1
  41. package/dist/services/doh/types.d.ts +12 -0
  42. package/dist/services/doh/types.d.ts.map +1 -1
  43. package/dist/services/rdap/rdap-service.d.ts +10 -5
  44. package/dist/services/rdap/rdap-service.d.ts.map +1 -1
  45. package/dist/services/rdap/rdap-service.js +133 -36
  46. package/dist/services/rdap/rdap-service.js.map +1 -1
  47. package/dist/services/rdap/types.d.ts +32 -2
  48. package/dist/services/rdap/types.d.ts.map +1 -1
  49. package/package.json +12 -11
  50. package/server.json +11 -25
@@ -1 +1 @@
1
- {"version":3,"file":"_fqdn.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/_fqdn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2FAA2F;AAC3F,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,KAAK,CAAC;QAC9C,OAAO,wDAAwD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"_fqdn.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/_fqdn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,GAAG,+CAA+C,CAAC;AACnE,uEAAuE;AACvE,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,MAAM,CACjD,IAAI,UAAU,SAAS,UAAU,gBAAgB,CAClD,CAAC;AACF,kFAAkF;AAClF,MAAM,CAAC,MAAM,gBAAgB,GAC3B,mGAAmG,CAAC;AACtG,qFAAqF;AACrF,MAAM,CAAC,MAAM,UAAU,GAAG,wCAAwC,CAAC;AACnE,kFAAkF;AAClF,MAAM,CAAC,MAAM,WAAW,GAAG,4CAA4C,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @fileoverview whois_check_availability tool — domain availability check via RDAP 404 semantics.
2
+ * @fileoverview whois_check_availability tool — registry record status without an eligibility guarantee.
3
3
  * @module mcp-server/tools/definitions/whois-check-availability.tool
4
4
  */
5
5
  import { z } from '@cyanheads/mcp-ts-core';
@@ -8,14 +8,20 @@ export declare const whoisCheckAvailability: import("@cyanheads/mcp-ts-core").To
8
8
  domain: z.ZodString;
9
9
  }, z.core.$strip>, z.ZodObject<{
10
10
  domain: z.ZodString;
11
- available: z.ZodNullable<z.ZodBoolean>;
11
+ registration_status: z.ZodEnum<{
12
+ not_found: "not_found";
13
+ registered: "registered";
14
+ unknown: "unknown";
15
+ }>;
16
+ available: z.ZodNullable<z.ZodLiteral<false>>;
12
17
  rdap_coverage: z.ZodBoolean;
13
18
  registrar: z.ZodOptional<z.ZodString>;
14
19
  expiry_date: z.ZodOptional<z.ZodString>;
15
20
  }, z.core.$strip>, readonly [{
16
- readonly reason: "invalid_domain";
21
+ readonly reason: "non_registrable_domain";
17
22
  readonly code: JsonRpcErrorCode.ValidationError;
18
- readonly when: "Input is not a valid FQDN.";
19
- readonly recovery: "Provide a valid fully-qualified domain name like \"example.com\" or \"sub.example.org\".";
23
+ readonly when: "An ICANN-recognized suffix identifies the query as a subdomain.";
24
+ readonly recovery: "Query the registrable parent named in the error instead; no eligibility is implied.";
25
+ readonly thrownBy: "service";
20
26
  }], undefined>;
21
27
  //# sourceMappingURL=whois-check-availability.tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"whois-check-availability.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-check-availability.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,sBAAsB;;;;;;;;;;;;;cAkGjC,CAAC"}
1
+ {"version":3,"file":"whois-check-availability.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-check-availability.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,sBAAsB;;;;;;;;;;;;;;;;;;;cA4FjC,CAAC"}
@@ -1,68 +1,64 @@
1
1
  /**
2
- * @fileoverview whois_check_availability tool — domain availability check via RDAP 404 semantics.
2
+ * @fileoverview whois_check_availability tool — registry record status without an eligibility guarantee.
3
3
  * @module mcp-server/tools/definitions/whois-check-availability.tool
4
4
  */
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 { isValidFqdn } from './_fqdn.js';
8
+ import { REGISTRATION_NAME_PATTERN } from './_fqdn.js';
9
9
  export const whoisCheckAvailability = tool('whois_check_availability', {
10
- title: 'Domain Availability Check',
11
- description: 'Check whether a domain name is registered or available for registration. Returns available: true when ' +
12
- 'the domain is not registered, available: false with registrar and expiry_date when it is registered, and ' +
13
- 'available: null with rdap_coverage: false when the TLD has no RDAP coverage. ' +
14
- 'Designed for "can I register X" and bulk name sweeps. For the full registration record use whois_lookup_domain.',
10
+ title: 'Domain Registration Status',
11
+ description: 'Check RDAP registry record status: registered, not_found, or unknown when coverage is absent. ' +
12
+ 'available is false for a found record and null otherwise; a registry miss never guarantees registration eligibility. ' +
13
+ 'Known ICANN subdomains are rejected with their registrable parent; private suffixes are not registration boundaries. ' +
14
+ 'For the full record use whois_lookup_domain.',
15
15
  annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
16
16
  input: z.object({
17
17
  domain: z
18
18
  .string()
19
+ .max(253)
20
+ .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.')
19
21
  .describe('Fully qualified domain name to check (e.g., "myfuturename.com"). ' +
20
22
  'Must be a valid FQDN — labels separated by dots.'),
21
23
  }),
22
24
  output: z.object({
23
25
  domain: z.string().describe('Normalized domain name checked.'),
26
+ registration_status: z
27
+ .enum(['registered', 'not_found', 'unknown'])
28
+ .describe('Registry record present, absent, or RDAP coverage unavailable; never registration eligibility.'),
24
29
  available: z
25
- .boolean()
30
+ .literal(false)
26
31
  .nullable()
27
- .describe('True = available for registration. False = registered. ' +
28
- 'Null = rdap_coverage is false — cannot determine availability for this TLD.'),
32
+ .describe('False when a registration record exists; otherwise null. A registry miss never establishes availability.'),
29
33
  rdap_coverage: z.boolean().describe('True when a RDAP server was found for this TLD.'),
30
34
  registrar: z.string().optional().describe('Registrar name when available: false.'),
31
35
  expiry_date: z.string().optional().describe('Expiry date when available: false.'),
32
36
  }),
33
37
  errors: [
34
38
  {
35
- reason: 'invalid_domain',
39
+ reason: 'non_registrable_domain',
36
40
  code: JsonRpcErrorCode.ValidationError,
37
- when: 'Input is not a valid FQDN.',
38
- recovery: 'Provide a valid fully-qualified domain name like "example.com" or "sub.example.org".',
41
+ when: 'An ICANN-recognized suffix identifies the query as a subdomain.',
42
+ recovery: 'Query the registrable parent named in the error instead; no eligibility is implied.',
43
+ thrownBy: 'service',
39
44
  },
40
45
  ],
41
46
  async handler(input, ctx) {
42
- if (!isValidFqdn(input.domain)) {
43
- throw ctx.fail('invalid_domain', `"${input.domain}" is not a valid FQDN.`);
44
- }
45
47
  ctx.log.info('RDAP availability check', { domain: input.domain });
46
48
  const result = await getRdapService().checkAvailability(input.domain, ctx);
47
- if (result.available === null) {
48
- // No RDAP coverage — surface as data, not an error
49
+ if (result.registration_status !== 'registered') {
49
50
  return {
50
51
  domain: input.domain.toLowerCase(),
51
52
  available: null,
52
- rdap_coverage: false,
53
- };
54
- }
55
- if (result.available === true) {
56
- return {
57
- domain: input.domain.toLowerCase(),
58
- available: true,
59
- rdap_coverage: true,
53
+ registration_status: result.registration_status,
54
+ rdap_coverage: result.rdap_coverage,
60
55
  };
61
56
  }
62
57
  // Registered
63
58
  return {
64
59
  domain: result.record.domain,
65
60
  available: false,
61
+ registration_status: result.registration_status,
66
62
  rdap_coverage: true,
67
63
  registrar: result.record.registrar,
68
64
  expiry_date: result.record.expiry_date,
@@ -71,18 +67,9 @@ export const whoisCheckAvailability = tool('whois_check_availability', {
71
67
  format: (result) => {
72
68
  const lines = [];
73
69
  lines.push(`# Domain: ${result.domain}`);
74
- if (result.available === null) {
75
- lines.push(`**Available:** Unknown (no RDAP coverage for this TLD)`);
76
- lines.push(`**RDAP Coverage:** No`);
77
- }
78
- else if (result.available === true) {
79
- lines.push(`**Available:** Yes — not currently registered`);
80
- lines.push(`**RDAP Coverage:** Yes`);
81
- }
82
- else {
83
- lines.push(`**Available:** No — registered`);
84
- lines.push(`**RDAP Coverage:** Yes`);
85
- }
70
+ lines.push(`**Registration Status:** ${result.registration_status}`);
71
+ lines.push(`**Available:** ${result.available === false ? 'No — registered' : 'Unknown — RDAP record absence does not establish eligibility'}`);
72
+ lines.push(`**RDAP Coverage:** ${result.rdap_coverage ? 'Yes' : 'No'}`);
86
73
  if (result.registrar)
87
74
  lines.push(`**Registrar:** ${result.registrar}`);
88
75
  if (result.expiry_date)
@@ -1 +1 @@
1
- {"version":3,"file":"whois-check-availability.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-check-availability.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;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,0BAA0B,EAAE;IACrE,KAAK,EAAE,2BAA2B;IAClC,WAAW,EACT,wGAAwG;QACxG,2GAA2G;QAC3G,+EAA+E;QAC/E,iHAAiH;IACnH,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,QAAQ,CACP,mEAAmE;YACjE,kDAAkD,CACrD;KACJ,CAAC;IAEF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAC9D,SAAS,EAAE,CAAC;aACT,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,yDAAyD;YACvD,6EAA6E,CAChF;QACH,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;QACtF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAClF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KAClF,CAAC;IAEF,MAAM,EAAE;QACN;YACE,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,4BAA4B;YAClC,QAAQ,EACN,sFAAsF;SACzF;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,KAAK,CAAC,MAAM,wBAAwB,CAAC,CAAC;QAC7E,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAElE,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAE3E,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC9B,mDAAmD;YACnD,OAAO;gBACL,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE;gBAClC,SAAS,EAAE,IAAI;gBACf,aAAa,EAAE,KAAK;aACrB,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO;gBACL,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE;gBAClC,SAAS,EAAE,IAAI;gBACf,aAAa,EAAE,IAAI;aACpB,CAAC;QACJ,CAAC;QAED,aAAa;QACb,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;YAC5B,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,IAAI;YACnB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;YAClC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;SACvC,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzC,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACrE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,MAAM,CAAC,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,WAAW;YAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAEzE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"whois-check-availability.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-check-availability.tool.ts"],"names":[],"mappings":"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"}
@@ -58,9 +58,11 @@ export declare const whoisGetDns: import("@cyanheads/mcp-ts-core").ToolDefinitio
58
58
  }>;
59
59
  }, z.core.$strip>>;
60
60
  }, z.core.$strip>, readonly [{
61
- readonly reason: "invalid_domain";
62
- readonly code: JsonRpcErrorCode.ValidationError;
63
- readonly when: "Input is not a valid FQDN.";
64
- readonly recovery: "Provide a valid fully-qualified domain name like \"example.com\" or \"sub.example.org\".";
61
+ readonly reason: "dns_response_failed";
62
+ readonly code: JsonRpcErrorCode.ServiceUnavailable;
63
+ readonly when: "Resolvers return a DNS failure status or truncated response after retry and fallback.";
64
+ readonly recovery: "Retry the DNS query later or choose another record type.";
65
+ readonly thrownBy: "service";
66
+ readonly retryable: true;
65
67
  }], undefined>;
66
68
  //# sourceMappingURL=whois-get-dns.tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"whois-get-dns.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-get-dns.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAMjE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA4HtB,CAAC"}
1
+ {"version":3,"file":"whois-get-dns.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-get-dns.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAMjE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAmItB,CAAC"}
@@ -5,18 +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 { 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.'))
22
25
  .min(1)
@@ -28,8 +31,8 @@ export const whoisGetDns = tool('whois_get_dns', {
28
31
  domain: z.string().describe('Domain queried.'),
29
32
  nxdomain: z
30
33
  .boolean()
31
- .describe('True when the domain does not exist in DNS (NXDOMAIN / Status 3). ' +
32
- '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.'),
33
36
  records: z
34
37
  .array(z
35
38
  .object({
@@ -59,25 +62,24 @@ export const whoisGetDns = tool('whois_get_dns', {
59
62
  }),
60
63
  errors: [
61
64
  {
62
- reason: 'invalid_domain',
63
- code: JsonRpcErrorCode.ValidationError,
64
- when: 'Input is not a valid FQDN.',
65
- 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,
66
71
  },
67
72
  ],
68
73
  async handler(input, ctx) {
69
- if (!isValidFqdn(input.domain)) {
70
- throw ctx.fail('invalid_domain', `"${input.domain}" is not a valid FQDN.`);
71
- }
72
74
  ctx.log.info('DNS lookup via DoH', { domain: input.domain, types: input.types });
73
- return await getDohService().lookup(input.domain, input.types, ctx);
75
+ return await getDohService().lookup(input.domain.replace(/\.$/, ''), input.types, ctx);
74
76
  },
75
77
  format: (result) => {
76
78
  const lines = [];
77
79
  lines.push(`# DNS Records: ${result.domain}`);
78
80
  lines.push(`**Source (aggregate):** ${result.source} — ${result.source === 'cloudflare' ? 'at least one query used Cloudflare' : 'all queries used NextDNS'}`);
79
81
  lines.push(`**Query sources:** ${result.query_sources.map((query) => `${query.type}: ${query.source}`).join(', ')}`);
80
- lines.push(`**NXDOMAIN:** ${result.nxdomain === true ? 'Yes — domain does not exist in DNS' : 'No'}`);
82
+ lines.push(`**NXDOMAIN:** ${result.nxdomain === true ? 'Yes — at least one query returned NXDOMAIN' : 'No'}`);
81
83
  // Group records by type and render all fields (name, ttl, data)
82
84
  const byType = new Map();
83
85
  for (const rec of result.records) {
@@ -89,8 +91,15 @@ export const whoisGetDns = tool('whois_get_dns', {
89
91
  lines.push(`\n## ${type}`);
90
92
  for (const rec of recs) {
91
93
  // Backticks distinguish TXT data visually; they are not a security boundary.
92
- const data = type === 'TXT' ? `\`${rec.data}\`` : rec.data;
93
- lines.push(`- **${data}** | name: ${rec.name} | TTL: ${rec.ttl}s`);
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`);
94
103
  }
95
104
  }
96
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;AAsF3E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAmR1B,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 &&
@@ -107,6 +107,8 @@ export const whoisGetDossier = tool('whois_get_dossier', {
107
107
  input: z.object({
108
108
  domain: z
109
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.')
110
112
  .describe('Fully qualified domain name for the triage (e.g., "github.com"). Must be a valid FQDN.'),
111
113
  }),
112
114
  output: z.object({
@@ -119,8 +121,8 @@ export const whoisGetDossier = tool('whois_get_dossier', {
119
121
  registered: z
120
122
  .boolean()
121
123
  .nullable()
122
- .describe('True when the domain has a registration record. False = RDAP 404 (not registered). ' +
123
- '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.'),
124
126
  registrar: z.string().optional().describe('Registrar name from registration record.'),
125
127
  created_date: z.string().optional().describe('ISO 8601 registration creation date.'),
126
128
  expiry_date: z.string().optional().describe('ISO 8601 registration expiry date.'),
@@ -131,11 +133,11 @@ export const whoisGetDossier = tool('whois_get_dossier', {
131
133
  dnssec_signed: z
132
134
  .boolean()
133
135
  .nullable()
134
- .describe('True when delegation-signed. Null when RDAP leg unavailable.'),
136
+ .describe('Provider delegationSigned value; null when evidence or RDAP coverage is absent.'),
135
137
  privacy_redacted: z
136
138
  .boolean()
137
139
  .nullable()
138
- .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.'),
139
141
  status: z.array(z.string()).describe('EPP status codes. Empty when RDAP leg failed.'),
140
142
  nameservers: z
141
143
  .array(z.string())
@@ -156,7 +158,7 @@ export const whoisGetDossier = tool('whois_get_dossier', {
156
158
  dns_nxdomain: z
157
159
  .boolean()
158
160
  .nullable()
159
- .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.'),
160
162
  // Inferred signals
161
163
  ns_provider: z
162
164
  .string()
@@ -177,12 +179,6 @@ export const whoisGetDossier = tool('whois_get_dossier', {
177
179
  .describe('Error message from the DNS leg when it failed. Omitted on success.'),
178
180
  }),
179
181
  errors: [
180
- {
181
- reason: 'invalid_domain',
182
- code: JsonRpcErrorCode.ValidationError,
183
- when: 'Input is not a valid FQDN.',
184
- recovery: 'Provide a valid fully-qualified domain name like "example.com" or "sub.example.org".',
185
- },
186
182
  {
187
183
  reason: 'both_legs_failed',
188
184
  code: JsonRpcErrorCode.ServiceUnavailable,
@@ -191,18 +187,16 @@ export const whoisGetDossier = tool('whois_get_dossier', {
191
187
  },
192
188
  ],
193
189
  async handler(input, ctx) {
194
- if (!isValidFqdn(input.domain)) {
195
- throw ctx.fail('invalid_domain', `"${input.domain}" is not a valid FQDN.`);
196
- }
197
190
  ctx.log.info('Domain dossier lookup', { domain: input.domain });
198
191
  // Fan out RDAP and DNS lookups in parallel
199
192
  const [rdapSettled, dnsSettled] = await Promise.allSettled([
200
193
  getRdapService().lookupDomain(input.domain, ctx),
201
194
  getDohService().lookup(input.domain, ['A', 'MX', 'NS', 'TXT'], ctx),
202
195
  ]);
196
+ ctx.signal.throwIfAborted();
203
197
  const rdapOk = rdapSettled.status === 'fulfilled';
204
198
  const dnsOk = dnsSettled.status === 'fulfilled';
205
- // 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.
206
200
  const rdapNotFound = rdapSettled.status === 'rejected' && isDomainNotFound(rdapSettled.reason);
207
201
  if (!rdapOk && !rdapNotFound && !dnsOk) {
208
202
  throw ctx.fail('both_legs_failed', 'Both RDAP and DNS lookups failed — no data available.', {
@@ -240,10 +234,10 @@ export const whoisGetDossier = tool('whois_get_dossier', {
240
234
  const ageDays = reg ? (ageDaysFromCreated(reg.created_date) ?? null) : null;
241
235
  const nsProvider = dnsOk ? (inferNsProvider(nsRecords) ?? null) : null;
242
236
  const mxProvider = dnsOk ? (inferMxProvider(mxRecords) ?? null) : null;
243
- // registered:
244
- // true — RDAP returned a record (domain exists)
245
- // false — RDAP returned 404 (domain_not_found = not registered)
246
- // 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
+ */
247
241
  const registered = rdapNotFound
248
242
  ? false
249
243
  : rdapOk && reg
@@ -253,7 +247,7 @@ export const whoisGetDossier = tool('whois_get_dossier', {
253
247
  : null;
254
248
  return {
255
249
  domain: input.domain.toLowerCase(),
256
- // rdapNotFound means RDAP server was reachable (coverage: true) but domain doesn't exist
250
+ // RDAP 404 proves coverage, but only establishes registry-record absence.
257
251
  rdap_coverage: rdapNotFound ? true : rdapOk ? (reg?.rdap_coverage ?? null) : null,
258
252
  registered,
259
253
  registrar: reg?.registrar,
@@ -280,6 +274,7 @@ export const whoisGetDossier = tool('whois_get_dossier', {
280
274
  lines.push(`# Domain Dossier: ${result.domain}`);
281
275
  // Registration section
282
276
  lines.push('\n## Registration');
277
+ lines.push(`**Registered (RDAP record):** ${result.registered === true ? 'Found' : result.registered === false ? 'Not found' : 'Unknown'}`);
283
278
  if (result.rdap_coverage === null) {
284
279
  lines.push(`**RDAP:** Failed`);
285
280
  }
@@ -287,7 +282,6 @@ export const whoisGetDossier = tool('whois_get_dossier', {
287
282
  lines.push('**RDAP Coverage:** None — TLD has no RDAP server');
288
283
  }
289
284
  else {
290
- lines.push(`**Registered:** ${result.registered ? 'Yes' : result.registered === false ? 'No' : 'Unknown'}`);
291
285
  if (result.created_date)
292
286
  lines.push(`**Created:** ${result.created_date}`);
293
287
  if (result.expiry_date)
@@ -303,6 +297,9 @@ export const whoisGetDossier = tool('whois_get_dossier', {
303
297
  }
304
298
  if (result.registrar)
305
299
  lines.push(`**Registrar:** ${result.registrar}`);
300
+ if (result.rdap_coverage !== true) {
301
+ lines.push('**DNSSEC:** Unknown', '**Privacy Redacted:** Unknown');
302
+ }
306
303
  if (result.rdap_source_error)
307
304
  lines.push(`**RDAP Error:** ${result.rdap_source_error}`);
308
305
  // DNS section
@@ -311,7 +308,7 @@ export const whoisGetDossier = tool('whois_get_dossier', {
311
308
  lines.push(`**DNS:** Failed — ${result.dns_source_error}`);
312
309
  }
313
310
  else if (result.dns_nxdomain) {
314
- lines.push('**NXDOMAIN:** Domain does not exist in DNS.');
311
+ lines.push('**NXDOMAIN:** At least one DNS query returned NXDOMAIN.');
315
312
  }
316
313
  if (result.a_records.length > 0)
317
314
  lines.push(`**A:** ${result.a_records.join(', ')}`);
@@ -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":"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,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,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,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,qFAAqF;YACnF,4BAA4B,CAC/B;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,8DAA8D,CAAC;QAC3E,gBAAgB,EAAE,CAAC;aAChB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,wFAAwF,CACzF;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,gFAAgF,CAAC;QAE7F,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,gBAAgB;YACxB,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,4BAA4B;YAClC,QAAQ,EACN,sFAAsF;SACzF;QACD;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,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,KAAK,CAAC,MAAM,wBAAwB,CAAC,CAAC;QAC7E,CAAC;QAED,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;QAEH,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,KAAK,WAAW,CAAC;QAClD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,KAAK,WAAW,CAAC;QAChD,yFAAyF;QACzF,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,cAAc;QACd,mDAAmD;QACnD,kEAAkE;QAClE,yEAAyE;QACzE,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,yFAAyF;YACzF,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,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,KAAK,CAAC,IAAI,CACR,mBAAmB,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAChG,CAAC;YACF,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,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,6CAA6C,CAAC,CAAC;QAC5D,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"}
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 +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;;;;;;;;;;;;;;;;;;;;;;;;cAoFzB,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,6 +5,7 @@
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. ' +
@@ -14,6 +15,8 @@ export const whoisLookupAsn = tool('whois_lookup_asn', {
14
15
  input: z.object({
15
16
  asn: z
16
17
  .string()
18
+ .min(1)
19
+ .regex(ASN_PATTERN, 'Provide decimal ASN digits with optional AS prefix, adjacent + and outer whitespace, such as AS15169.')
17
20
  .describe('Decimal ASN from 1 to 4294967295. Optional case-insensitive AS prefix and leading + ' +
18
21
  '(e.g., "AS15169", "AS 15169", "+15169"). Outer whitespace and whitespace after AS are accepted; ' +
19
22
  'whitespace inside digits or after + is invalid.'),
@@ -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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"}