@cyanheads/whois-mcp-server 0.1.1

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 (61) hide show
  1. package/AGENTS.md +349 -0
  2. package/CLAUDE.md +349 -0
  3. package/Dockerfile +99 -0
  4. package/LICENSE +201 -0
  5. package/README.md +316 -0
  6. package/changelog/0.1.x/0.1.1.md +32 -0
  7. package/changelog/template.md +127 -0
  8. package/dist/config/server-config.d.ts +16 -0
  9. package/dist/config/server-config.d.ts.map +1 -0
  10. package/dist/config/server-config.js +30 -0
  11. package/dist/config/server-config.js.map +1 -0
  12. package/dist/index.d.ts +7 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +38 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/mcp-server/tools/definitions/_fqdn.d.ts +7 -0
  17. package/dist/mcp-server/tools/definitions/_fqdn.d.ts.map +1 -0
  18. package/dist/mcp-server/tools/definitions/_fqdn.js +18 -0
  19. package/dist/mcp-server/tools/definitions/_fqdn.js.map +1 -0
  20. package/dist/mcp-server/tools/definitions/whois-check-availability.tool.d.ts +26 -0
  21. package/dist/mcp-server/tools/definitions/whois-check-availability.tool.d.ts.map +1 -0
  22. package/dist/mcp-server/tools/definitions/whois-check-availability.tool.js +102 -0
  23. package/dist/mcp-server/tools/definitions/whois-check-availability.tool.js.map +1 -0
  24. package/dist/mcp-server/tools/definitions/whois-get-dns.tool.d.ts +49 -0
  25. package/dist/mcp-server/tools/definitions/whois-get-dns.tool.d.ts.map +1 -0
  26. package/dist/mcp-server/tools/definitions/whois-get-dns.tool.js +97 -0
  27. package/dist/mcp-server/tools/definitions/whois-get-dns.tool.js.map +1 -0
  28. package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.d.ts +41 -0
  29. package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.d.ts.map +1 -0
  30. package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.js +332 -0
  31. package/dist/mcp-server/tools/definitions/whois-get-dossier.tool.js.map +1 -0
  32. package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.d.ts +30 -0
  33. package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.d.ts.map +1 -0
  34. package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.js +83 -0
  35. package/dist/mcp-server/tools/definitions/whois-lookup-asn.tool.js.map +1 -0
  36. package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.d.ts +40 -0
  37. package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.d.ts.map +1 -0
  38. package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.js +124 -0
  39. package/dist/mcp-server/tools/definitions/whois-lookup-domain.tool.js.map +1 -0
  40. package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.d.ts +39 -0
  41. package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.d.ts.map +1 -0
  42. package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.js +111 -0
  43. package/dist/mcp-server/tools/definitions/whois-lookup-ip.tool.js.map +1 -0
  44. package/dist/services/doh/doh-service.d.ts +30 -0
  45. package/dist/services/doh/doh-service.d.ts.map +1 -0
  46. package/dist/services/doh/doh-service.js +114 -0
  47. package/dist/services/doh/doh-service.js.map +1 -0
  48. package/dist/services/doh/types.d.ts +45 -0
  49. package/dist/services/doh/types.d.ts.map +1 -0
  50. package/dist/services/doh/types.js +17 -0
  51. package/dist/services/doh/types.js.map +1 -0
  52. package/dist/services/rdap/rdap-service.d.ts +54 -0
  53. package/dist/services/rdap/rdap-service.d.ts.map +1 -0
  54. package/dist/services/rdap/rdap-service.js +609 -0
  55. package/dist/services/rdap/rdap-service.js.map +1 -0
  56. package/dist/services/rdap/types.d.ts +140 -0
  57. package/dist/services/rdap/types.d.ts.map +1 -0
  58. package/dist/services/rdap/types.js +6 -0
  59. package/dist/services/rdap/types.js.map +1 -0
  60. package/package.json +103 -0
  61. package/server.json +161 -0
@@ -0,0 +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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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @fileoverview whois_lookup_asn tool — ASN to org/RIR resolution via RIR RDAP.
3
+ * @module mcp-server/tools/definitions/whois-lookup-asn.tool
4
+ */
5
+ import { z } from '@cyanheads/mcp-ts-core';
6
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
7
+ export declare const whoisLookupAsn: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
8
+ asn: z.ZodString;
9
+ }, z.core.$strip>, z.ZodObject<{
10
+ asn: z.ZodString;
11
+ handle: z.ZodOptional<z.ZodString>;
12
+ start_autnum: z.ZodOptional<z.ZodNumber>;
13
+ end_autnum: z.ZodOptional<z.ZodNumber>;
14
+ name: z.ZodOptional<z.ZodString>;
15
+ type: z.ZodOptional<z.ZodString>;
16
+ country: z.ZodOptional<z.ZodString>;
17
+ org_name: z.ZodOptional<z.ZodString>;
18
+ rir: z.ZodOptional<z.ZodString>;
19
+ }, z.core.$strip>, readonly [{
20
+ readonly reason: "invalid_asn";
21
+ readonly code: JsonRpcErrorCode.InvalidParams;
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.";
24
+ }, {
25
+ readonly reason: "asn_not_found";
26
+ readonly code: JsonRpcErrorCode.NotFound;
27
+ readonly when: "RDAP returned 404 — ASN not found in any RIR.";
28
+ readonly recovery: "The ASN is not found in any RIR RDAP database. Verify the ASN number is correct and assigned.";
29
+ }], undefined>;
30
+ //# sourceMappingURL=whois-lookup-asn.tool.d.ts.map
@@ -0,0 +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;;;;;;;;;;;;;;;;;;;;;;cAgFzB,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * @fileoverview whois_lookup_asn tool — ASN to org/RIR resolution via RIR RDAP.
3
+ * @module mcp-server/tools/definitions/whois-lookup-asn.tool
4
+ */
5
+ import { tool, z } from '@cyanheads/mcp-ts-core';
6
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
7
+ import { getRdapService } from '../../../services/rdap/rdap-service.js';
8
+ export const whoisLookupAsn = tool('whois_lookup_asn', {
9
+ title: 'ASN Lookup',
10
+ 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
+ 'lookup — the entry point is the ASN itself, not an IP within its block.',
13
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
14
+ input: z.object({
15
+ asn: z
16
+ .string()
17
+ .describe('Autonomous System Number to look up. Accepts AS-prefixed format (e.g., "AS15169") or bare ' +
18
+ 'integer (e.g., "15169").'),
19
+ }),
20
+ output: z.object({
21
+ asn: z.string().describe('Normalized ASN identifier (AS-prefixed, e.g., "AS15169").'),
22
+ handle: z.string().optional().describe('RIR handle / object identifier.'),
23
+ start_autnum: z.number().optional().describe('Start ASN of the registered range.'),
24
+ end_autnum: z.number().optional().describe('End ASN of the registered range.'),
25
+ name: z.string().optional().describe('ASN network name.'),
26
+ type: z.string().optional().describe('ASN type (e.g., "DIRECT ALLOCATION").'),
27
+ country: z
28
+ .string()
29
+ .optional()
30
+ .describe('Country code (ISO 3166-1 alpha-2). Omitted when not in RDAP data.'),
31
+ org_name: z.string().optional().describe('Organization name registered for this ASN.'),
32
+ rir: z
33
+ .string()
34
+ .optional()
35
+ .describe('Regional Internet Registry that manages this ASN (ARIN, RIPE, APNIC, LACNIC, AFRINIC).'),
36
+ }),
37
+ errors: [
38
+ {
39
+ reason: 'invalid_asn',
40
+ code: JsonRpcErrorCode.InvalidParams,
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.',
43
+ },
44
+ {
45
+ reason: 'asn_not_found',
46
+ code: JsonRpcErrorCode.NotFound,
47
+ when: 'RDAP returned 404 — ASN not found in any RIR.',
48
+ recovery: 'The ASN is not found in any RIR RDAP database. Verify the ASN number is correct and assigned.',
49
+ },
50
+ ],
51
+ async handler(input, ctx) {
52
+ ctx.log.info('RDAP ASN lookup', { asn: input.asn });
53
+ // Service throws invalid_asn / asn_not_found via factories with data.reason
54
+ const record = await getRdapService().lookupAsn(input.asn, ctx);
55
+ return record;
56
+ },
57
+ format: (result) => {
58
+ const lines = [];
59
+ lines.push(`# ASN: ${result.asn}`);
60
+ if (result.org_name)
61
+ lines.push(`**Organization:** ${result.org_name}`);
62
+ if (result.rir)
63
+ lines.push(`**RIR:** ${result.rir}`);
64
+ if (result.name)
65
+ lines.push(`**Network Name:** ${result.name}`);
66
+ if (result.type)
67
+ lines.push(`**Type:** ${result.type}`);
68
+ if (result.country)
69
+ lines.push(`**Country:** ${result.country}`);
70
+ if (result.handle)
71
+ lines.push(`**Handle:** ${result.handle}`);
72
+ if (result.start_autnum !== undefined && result.end_autnum !== undefined) {
73
+ if (result.start_autnum === result.end_autnum) {
74
+ lines.push(`**ASN Range:** ${result.start_autnum}`);
75
+ }
76
+ else {
77
+ lines.push(`**ASN Range:** ${result.start_autnum} — ${result.end_autnum}`);
78
+ }
79
+ }
80
+ return [{ type: 'text', text: lines.join('\n') }];
81
+ },
82
+ });
83
+ //# sourceMappingURL=whois-lookup-asn.tool.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @fileoverview whois_lookup_domain tool — domain registration lookup via RDAP with IANA bootstrap.
3
+ * @module mcp-server/tools/definitions/whois-lookup-domain.tool
4
+ */
5
+ import { z } from '@cyanheads/mcp-ts-core';
6
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
7
+ export declare const whoisLookupDomain: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
8
+ domain: z.ZodString;
9
+ }, z.core.$strip>, z.ZodObject<{
10
+ domain: z.ZodString;
11
+ rdap_coverage: z.ZodBoolean;
12
+ handle: z.ZodOptional<z.ZodString>;
13
+ registrar: z.ZodOptional<z.ZodString>;
14
+ registrar_iana_id: z.ZodOptional<z.ZodString>;
15
+ created_date: z.ZodOptional<z.ZodString>;
16
+ updated_date: z.ZodOptional<z.ZodString>;
17
+ expiry_date: z.ZodOptional<z.ZodString>;
18
+ rdap_last_updated: z.ZodOptional<z.ZodString>;
19
+ status: z.ZodArray<z.ZodString>;
20
+ nameservers: z.ZodArray<z.ZodString>;
21
+ dnssec_signed: z.ZodBoolean;
22
+ registrant_org: z.ZodOptional<z.ZodString>;
23
+ registrant_redacted: z.ZodBoolean;
24
+ }, z.core.$strip>, readonly [{
25
+ readonly reason: "invalid_domain";
26
+ readonly code: JsonRpcErrorCode.InvalidParams;
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
+ readonly reason: "rdap_no_coverage";
31
+ readonly code: JsonRpcErrorCode.NotFound;
32
+ readonly when: "TLD has no RDAP server in the IANA bootstrap — cannot perform lookup.";
33
+ readonly recovery: "This TLD has no RDAP coverage. Use whois_check_availability to test registration status when possible.";
34
+ }, {
35
+ readonly reason: "domain_not_found";
36
+ 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.";
39
+ }], undefined>;
40
+ //# sourceMappingURL=whois-lookup-domain.tool.d.ts.map
@@ -0,0 +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,EAAE,MAAM,+BAA+B,CAAC;AAIjE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoI5B,CAAC"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * @fileoverview whois_lookup_domain tool — domain registration lookup via RDAP with IANA bootstrap.
3
+ * @module mcp-server/tools/definitions/whois-lookup-domain.tool
4
+ */
5
+ import { tool, z } from '@cyanheads/mcp-ts-core';
6
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
7
+ import { getRdapService } from '../../../services/rdap/rdap-service.js';
8
+ import { isValidFqdn } from './_fqdn.js';
9
+ export const whoisLookupDomain = tool('whois_lookup_domain', {
10
+ title: 'Domain Registration Lookup',
11
+ description: "Look up a domain's registration record — registrar, created/expiry dates, nameservers, EPP status codes, " +
12
+ 'DNSSEC flag, and registrant org (where not privacy-redacted). Uses RDAP via IANA bootstrap to auto-select ' +
13
+ 'the correct per-TLD RDAP server, returning one normalized shape regardless of TLD. When the TLD has no RDAP ' +
14
+ 'coverage, returns rdap_coverage: false. RDAP 404 (domain not registered) throws domain_not_found — use ' +
15
+ 'whois_check_availability instead if you want to test registration status without an error.',
16
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
17
+ input: z.object({
18
+ domain: z
19
+ .string()
20
+ .describe('Fully qualified domain name to look up (e.g., "example.com", "github.com"). ' +
21
+ 'Must be a valid FQDN — labels separated by dots, each label up to 63 chars.'),
22
+ }),
23
+ output: z.object({
24
+ domain: z.string().describe('Normalized domain name (lowercased).'),
25
+ rdap_coverage: z
26
+ .boolean()
27
+ .describe('True when a RDAP server was found for this TLD; false when RDAP coverage is absent.'),
28
+ handle: z
29
+ .string()
30
+ .optional()
31
+ .describe('Registry handle / object identifier assigned by the registry.'),
32
+ registrar: z.string().optional().describe('Name of the sponsoring registrar.'),
33
+ registrar_iana_id: z.string().optional().describe('IANA registrar ID number.'),
34
+ created_date: z.string().optional().describe('ISO 8601 domain registration date.'),
35
+ updated_date: z
36
+ .string()
37
+ .optional()
38
+ .describe('ISO 8601 date of last registration record change.'),
39
+ expiry_date: z.string().optional().describe('ISO 8601 registration expiry date.'),
40
+ rdap_last_updated: z
41
+ .string()
42
+ .optional()
43
+ .describe('ISO 8601 timestamp of last RDAP database update.'),
44
+ status: z
45
+ .array(z.string())
46
+ .describe('EPP status codes (e.g., clientTransferProhibited, serverDeleteProhibited).'),
47
+ nameservers: z.array(z.string()).describe('Authoritative nameservers for this domain.'),
48
+ dnssec_signed: z.boolean().describe('True when the domain has DNSSEC delegation signed.'),
49
+ registrant_org: z
50
+ .string()
51
+ .optional()
52
+ .describe('Registrant organization name. Omitted when privacy-redacted.'),
53
+ registrant_redacted: z
54
+ .boolean()
55
+ .describe('True when registrant contact data is privacy-redacted (common post-GDPR).'),
56
+ }),
57
+ errors: [
58
+ {
59
+ reason: 'invalid_domain',
60
+ code: JsonRpcErrorCode.InvalidParams,
61
+ when: 'Input is not a valid FQDN.',
62
+ recovery: 'Provide a valid fully-qualified domain name like "example.com" or "sub.example.org".',
63
+ },
64
+ {
65
+ reason: 'rdap_no_coverage',
66
+ code: JsonRpcErrorCode.NotFound,
67
+ when: 'TLD has no RDAP server in the IANA bootstrap — cannot perform lookup.',
68
+ recovery: 'This TLD has no RDAP coverage. Use whois_check_availability to test registration status when possible.',
69
+ },
70
+ {
71
+ reason: 'domain_not_found',
72
+ code: JsonRpcErrorCode.NotFound,
73
+ when: 'RDAP server returned 404 — domain is not registered.',
74
+ recovery: 'The domain is not registered. Use whois_check_availability to confirm availability for registration.',
75
+ },
76
+ ],
77
+ async handler(input, ctx) {
78
+ if (!isValidFqdn(input.domain)) {
79
+ throw ctx.fail('invalid_domain', `"${input.domain}" is not a valid FQDN.`, {
80
+ ...ctx.recoveryFor('invalid_domain'),
81
+ });
82
+ }
83
+ ctx.log.info('RDAP domain lookup', { domain: input.domain });
84
+ const record = await getRdapService().lookupDomain(input.domain, ctx);
85
+ if (!record.rdap_coverage) {
86
+ throw ctx.fail('rdap_no_coverage', `No RDAP server found for the TLD of "${input.domain}".`, {
87
+ domain: input.domain,
88
+ ...ctx.recoveryFor('rdap_no_coverage'),
89
+ });
90
+ }
91
+ return record;
92
+ },
93
+ format: (result) => {
94
+ const lines = [];
95
+ lines.push(`# Domain: ${result.domain}`);
96
+ if (!result.rdap_coverage) {
97
+ lines.push('**RDAP Coverage:** No — TLD has no RDAP server.');
98
+ return [{ type: 'text', text: lines.join('\n') }];
99
+ }
100
+ lines.push(`**RDAP Coverage:** Yes`);
101
+ if (result.registrar)
102
+ lines.push(`**Registrar:** ${result.registrar}${result.registrar_iana_id ? ` (IANA #${result.registrar_iana_id})` : ''}`);
103
+ if (result.created_date)
104
+ lines.push(`**Created:** ${result.created_date}`);
105
+ if (result.expiry_date)
106
+ lines.push(`**Expires:** ${result.expiry_date}`);
107
+ if (result.updated_date)
108
+ lines.push(`**Last Updated:** ${result.updated_date}`);
109
+ if (result.rdap_last_updated)
110
+ lines.push(`**RDAP DB Updated:** ${result.rdap_last_updated}`);
111
+ if (result.handle)
112
+ lines.push(`**Handle:** ${result.handle}`);
113
+ lines.push(`**DNSSEC:** ${result.dnssec_signed ? 'Signed' : 'Not signed'}`);
114
+ lines.push(`**Registrant Redacted:** ${result.registrant_redacted ? 'Yes (GDPR/privacy)' : 'No'}`);
115
+ if (result.registrant_org)
116
+ lines.push(`**Registrant Org:** ${result.registrant_org}`);
117
+ if (result.status.length > 0)
118
+ lines.push(`**Status:** ${result.status.join(', ')}`);
119
+ if (result.nameservers.length > 0)
120
+ lines.push(`**Nameservers:** ${result.nameservers.join(', ')}`);
121
+ return [{ type: 'text', text: lines.join('\n') }];
122
+ },
123
+ });
124
+ //# sourceMappingURL=whois-lookup-domain.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whois-lookup-domain.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-lookup-domain.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @fileoverview whois_lookup_ip tool — IP address / CIDR lookup via RIR RDAP with PTR reverse DNS.
3
+ * @module mcp-server/tools/definitions/whois-lookup-ip.tool
4
+ */
5
+ import { z } from '@cyanheads/mcp-ts-core';
6
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
7
+ export declare const whoisLookupIp: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
8
+ ip: z.ZodString;
9
+ }, z.core.$strip>, z.ZodObject<{
10
+ ip: z.ZodString;
11
+ handle: z.ZodOptional<z.ZodString>;
12
+ start_address: z.ZodOptional<z.ZodString>;
13
+ end_address: z.ZodOptional<z.ZodString>;
14
+ cidr: z.ZodOptional<z.ZodString>;
15
+ ip_version: z.ZodOptional<z.ZodString>;
16
+ name: z.ZodOptional<z.ZodString>;
17
+ type: z.ZodOptional<z.ZodString>;
18
+ country: z.ZodOptional<z.ZodString>;
19
+ org_name: z.ZodOptional<z.ZodString>;
20
+ abuse_email: z.ZodOptional<z.ZodString>;
21
+ ptr: z.ZodNullable<z.ZodString>;
22
+ rdap_source: z.ZodOptional<z.ZodString>;
23
+ }, z.core.$strip>, readonly [{
24
+ readonly reason: "invalid_ip";
25
+ readonly code: JsonRpcErrorCode.InvalidParams;
26
+ readonly when: "Input is not a valid IPv4, IPv6, or CIDR address.";
27
+ readonly recovery: "Provide a valid IPv4 (e.g., \"8.8.8.8\"), IPv6 (e.g., \"2001:db8::1\"), or CIDR (e.g., \"192.0.2.0/24\").";
28
+ }, {
29
+ readonly reason: "private_range";
30
+ readonly code: JsonRpcErrorCode.InvalidParams;
31
+ readonly when: "Input is a private or reserved range — no RIR RDAP record exists for it.";
32
+ readonly recovery: "Use a public, globally-routable IP address. RFC 1918, loopback, and link-local addresses have no RIR records.";
33
+ }, {
34
+ readonly reason: "ip_not_found";
35
+ readonly code: JsonRpcErrorCode.NotFound;
36
+ readonly when: "RIR RDAP returned 404 — no netblock record for this address.";
37
+ readonly recovery: "The IP address is not found in any RIR RDAP database. Try a different IP or verify it is globally routable.";
38
+ }], undefined>;
39
+ //# sourceMappingURL=whois-lookup-ip.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whois-lookup-ip.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-lookup-ip.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,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA8GxB,CAAC"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * @fileoverview whois_lookup_ip tool — IP address / CIDR lookup via RIR RDAP with PTR reverse DNS.
3
+ * @module mcp-server/tools/definitions/whois-lookup-ip.tool
4
+ */
5
+ import { tool, z } from '@cyanheads/mcp-ts-core';
6
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
7
+ import { getDohService } from '../../../services/doh/doh-service.js';
8
+ import { getRdapService, ipv4ToPtr, ipv6ToPtr, validateIp } from '../../../services/rdap/rdap-service.js';
9
+ export const whoisLookupIp = tool('whois_lookup_ip', {
10
+ title: 'IP Address / Network Lookup',
11
+ description: 'Look up an IP address or CIDR block via RIR RDAP (ARIN, RIPE, APNIC, LACNIC, AFRINIC — auto-routed ' +
12
+ 'via IANA bootstrap). Returns netblock, org, country, CIDR, abuse contact email, and reverse DNS (PTR) ' +
13
+ 'via DoH. PTR is best-effort — failure returns ptr: null. Private/reserved ranges (RFC 1918, loopback, ' +
14
+ 'link-local) return a validation error — no RIR RDAP record exists for them.',
15
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
16
+ input: z.object({
17
+ ip: z
18
+ .string()
19
+ .describe('IPv4 address (e.g., "8.8.8.8"), IPv6 address (e.g., "2001:4860:4860::8888"), or CIDR notation ' +
20
+ '(e.g., "192.0.2.0/24"). Private/reserved ranges will return a validation error.'),
21
+ }),
22
+ output: z.object({
23
+ ip: z.string().describe('The IP or CIDR queried.'),
24
+ handle: z.string().optional().describe('RIR handle / object identifier.'),
25
+ start_address: z.string().optional().describe('Start address of the IP netblock.'),
26
+ end_address: z.string().optional().describe('End address of the IP netblock.'),
27
+ cidr: z.string().optional().describe('CIDR notation of the netblock (e.g., "8.8.8.0/24").'),
28
+ ip_version: z.string().optional().describe('IP version: "v4" or "v6".'),
29
+ name: z.string().optional().describe('Network name assigned by the RIR.'),
30
+ type: z.string().optional().describe('Network type (e.g., "DIRECT ALLOCATION").'),
31
+ country: z
32
+ .string()
33
+ .optional()
34
+ .describe('Country code (ISO 3166-1 alpha-2). Omitted when not in RDAP data.'),
35
+ org_name: z.string().optional().describe('Organization name holding the netblock.'),
36
+ abuse_email: z.string().optional().describe('Abuse contact email address.'),
37
+ ptr: z
38
+ .string()
39
+ .nullable()
40
+ .describe('Reverse DNS hostname (PTR record). Null when PTR lookup fails, returns no answer, or domain is NXDOMAIN.'),
41
+ rdap_source: z
42
+ .string()
43
+ .optional()
44
+ .describe('RIR that provided the RDAP data (ARIN, RIPE, APNIC, LACNIC, AFRINIC).'),
45
+ }),
46
+ errors: [
47
+ {
48
+ reason: 'invalid_ip',
49
+ code: JsonRpcErrorCode.InvalidParams,
50
+ when: 'Input is not a valid IPv4, IPv6, or CIDR address.',
51
+ recovery: 'Provide a valid IPv4 (e.g., "8.8.8.8"), IPv6 (e.g., "2001:db8::1"), or CIDR (e.g., "192.0.2.0/24").',
52
+ },
53
+ {
54
+ reason: 'private_range',
55
+ code: JsonRpcErrorCode.InvalidParams,
56
+ when: 'Input is a private or reserved range — no RIR RDAP record exists for it.',
57
+ recovery: 'Use a public, globally-routable IP address. RFC 1918, loopback, and link-local addresses have no RIR records.',
58
+ },
59
+ {
60
+ reason: 'ip_not_found',
61
+ code: JsonRpcErrorCode.NotFound,
62
+ when: 'RIR RDAP returned 404 — no netblock record for this address.',
63
+ recovery: 'The IP address is not found in any RIR RDAP database. Try a different IP or verify it is globally routable.',
64
+ },
65
+ ],
66
+ async handler(input, ctx) {
67
+ const { valid } = validateIp(input.ip);
68
+ if (!valid) {
69
+ throw ctx.fail('invalid_ip', `"${input.ip}" is not a valid IPv4, IPv6, or CIDR address.`, {
70
+ ...ctx.recoveryFor('invalid_ip'),
71
+ });
72
+ }
73
+ ctx.log.info('RDAP IP lookup', { ip: input.ip });
74
+ // getRdapService().lookupIp already throws invalid_ip / private_range via factories with data.reason
75
+ const network = await getRdapService().lookupIp(input.ip, ctx);
76
+ // PTR lookup — best-effort, failure = null
77
+ const base = input.ip.split('/')[0] ?? '';
78
+ const isIpv6 = base.includes(':');
79
+ const ptrName = isIpv6 ? ipv6ToPtr(base) : ipv4ToPtr(base);
80
+ const ptr = await getDohService().ptrLookup(ptrName, ctx);
81
+ return { ...network, ptr };
82
+ },
83
+ format: (result) => {
84
+ const lines = [];
85
+ lines.push(`# IP: ${result.ip}`);
86
+ if (result.rdap_source)
87
+ lines.push(`**RIR Source:** ${result.rdap_source}`);
88
+ if (result.org_name)
89
+ lines.push(`**Organization:** ${result.org_name}`);
90
+ if (result.cidr)
91
+ lines.push(`**CIDR:** ${result.cidr}`);
92
+ if (result.start_address && result.end_address) {
93
+ lines.push(`**Range:** ${result.start_address} — ${result.end_address}`);
94
+ }
95
+ if (result.name)
96
+ lines.push(`**Network Name:** ${result.name}`);
97
+ if (result.type)
98
+ lines.push(`**Type:** ${result.type}`);
99
+ if (result.ip_version)
100
+ lines.push(`**IP Version:** ${result.ip_version}`);
101
+ if (result.country)
102
+ lines.push(`**Country:** ${result.country}`);
103
+ if (result.handle)
104
+ lines.push(`**Handle:** ${result.handle}`);
105
+ if (result.abuse_email)
106
+ lines.push(`**Abuse Email:** ${result.abuse_email}`);
107
+ lines.push(`**Reverse DNS (PTR):** ${result.ptr ?? 'Not available'}`);
108
+ return [{ type: 'text', text: lines.join('\n') }];
109
+ },
110
+ });
111
+ //# sourceMappingURL=whois-lookup-ip.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whois-lookup-ip.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/whois-lookup-ip.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @fileoverview DNS-over-HTTPS service — Cloudflare primary (1.1.1.1), Google fallback (8.8.8.8).
3
+ * CAA records always use Google DoH because Cloudflare returns raw hex wire format for them.
4
+ * @module services/doh/doh-service
5
+ */
6
+ import type { Context } from '@cyanheads/mcp-ts-core';
7
+ import type { AppConfig } from '@cyanheads/mcp-ts-core/config';
8
+ import type { StorageService } from '@cyanheads/mcp-ts-core/storage';
9
+ import type { DnsLookupResult, DnsRecordType } from './types.js';
10
+ export declare class DohService {
11
+ /** Fetch DNS records for one type from a single DoH endpoint */
12
+ private fetchSingleType;
13
+ /**
14
+ * Look up one or more DNS record types for a domain.
15
+ * CAA always uses Google DoH (Cloudflare returns raw hex).
16
+ * Falls back to Google if Cloudflare fails for any type.
17
+ * Returns `nxdomain: true` when NXDOMAIN (Status 3) is returned.
18
+ */
19
+ lookup(domain: string, types: DnsRecordType[], ctx: Context): Promise<DnsLookupResult>;
20
+ /**
21
+ * Perform a reverse DNS (PTR) lookup for an IP address.
22
+ * IPv4: reverses octets + .in-addr.arpa
23
+ * IPv6: reverses nibbles + .ip6.arpa
24
+ * Returns null if the PTR lookup fails or returns no answer.
25
+ */
26
+ ptrLookup(ptrName: string, ctx: Context): Promise<string | null>;
27
+ }
28
+ export declare function initDohService(_config: AppConfig, _storage: StorageService): void;
29
+ export declare function getDohService(): DohService;
30
+ //# sourceMappingURL=doh-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doh-service.d.ts","sourceRoot":"","sources":["../../../src/services/doh/doh-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAoC,MAAM,YAAY,CAAC;AAWnG,qBAAa,UAAU;IACrB,gEAAgE;IAChE,OAAO,CAAC,eAAe;IA+BvB;;;;;OAKG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IA6D5F;;;;;OAKG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAWvE;AAMD,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAEjF;AAED,wBAAgB,aAAa,IAAI,UAAU,CAK1C"}