domeneshop-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/LICENSE +21 -0
  3. package/README.md +223 -0
  4. package/dist/domeneshop/assert.d.ts +9 -0
  5. package/dist/domeneshop/assert.d.ts.map +1 -0
  6. package/dist/domeneshop/assert.js +14 -0
  7. package/dist/domeneshop/assert.js.map +1 -0
  8. package/dist/domeneshop/client.d.ts +23 -0
  9. package/dist/domeneshop/client.d.ts.map +1 -0
  10. package/dist/domeneshop/client.js +27 -0
  11. package/dist/domeneshop/client.js.map +1 -0
  12. package/dist/domeneshop/http.d.ts +44 -0
  13. package/dist/domeneshop/http.d.ts.map +1 -0
  14. package/dist/domeneshop/http.js +58 -0
  15. package/dist/domeneshop/http.js.map +1 -0
  16. package/dist/domeneshop/index.d.ts +14 -0
  17. package/dist/domeneshop/index.d.ts.map +1 -0
  18. package/dist/domeneshop/index.js +8 -0
  19. package/dist/domeneshop/index.js.map +1 -0
  20. package/dist/domeneshop/resources/dns.d.ts +68 -0
  21. package/dist/domeneshop/resources/dns.d.ts.map +1 -0
  22. package/dist/domeneshop/resources/dns.js +60 -0
  23. package/dist/domeneshop/resources/dns.js.map +1 -0
  24. package/dist/domeneshop/resources/domains.d.ts +27 -0
  25. package/dist/domeneshop/resources/domains.d.ts.map +1 -0
  26. package/dist/domeneshop/resources/domains.js +20 -0
  27. package/dist/domeneshop/resources/domains.js.map +1 -0
  28. package/dist/domeneshop/resources/dyndns.d.ts +12 -0
  29. package/dist/domeneshop/resources/dyndns.d.ts.map +1 -0
  30. package/dist/domeneshop/resources/dyndns.js +18 -0
  31. package/dist/domeneshop/resources/dyndns.js.map +1 -0
  32. package/dist/domeneshop/resources/forwards.d.ts +28 -0
  33. package/dist/domeneshop/resources/forwards.d.ts.map +1 -0
  34. package/dist/domeneshop/resources/forwards.js +58 -0
  35. package/dist/domeneshop/resources/forwards.js.map +1 -0
  36. package/dist/domeneshop/resources/invoices.d.ts +30 -0
  37. package/dist/domeneshop/resources/invoices.d.ts.map +1 -0
  38. package/dist/domeneshop/resources/invoices.js +28 -0
  39. package/dist/domeneshop/resources/invoices.js.map +1 -0
  40. package/dist/index.d.ts +3 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +29 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/mcp/annotations.d.ts +13 -0
  45. package/dist/mcp/annotations.d.ts.map +1 -0
  46. package/dist/mcp/annotations.js +18 -0
  47. package/dist/mcp/annotations.js.map +1 -0
  48. package/dist/mcp/index.d.ts +2 -0
  49. package/dist/mcp/index.d.ts.map +1 -0
  50. package/dist/mcp/index.js +2 -0
  51. package/dist/mcp/index.js.map +1 -0
  52. package/dist/mcp/result.d.ts +8 -0
  53. package/dist/mcp/result.d.ts.map +1 -0
  54. package/dist/mcp/result.js +16 -0
  55. package/dist/mcp/result.js.map +1 -0
  56. package/dist/mcp/schema.d.ts +4 -0
  57. package/dist/mcp/schema.d.ts.map +1 -0
  58. package/dist/mcp/schema.js +2 -0
  59. package/dist/mcp/schema.js.map +1 -0
  60. package/dist/mcp/server.d.ts +5 -0
  61. package/dist/mcp/server.d.ts.map +1 -0
  62. package/dist/mcp/server.js +18 -0
  63. package/dist/mcp/server.js.map +1 -0
  64. package/dist/mcp/tool.d.ts +7 -0
  65. package/dist/mcp/tool.d.ts.map +1 -0
  66. package/dist/mcp/tool.js +16 -0
  67. package/dist/mcp/tool.js.map +1 -0
  68. package/dist/mcp/tools/dns.d.ts +4 -0
  69. package/dist/mcp/tools/dns.d.ts.map +1 -0
  70. package/dist/mcp/tools/dns.js +147 -0
  71. package/dist/mcp/tools/dns.js.map +1 -0
  72. package/dist/mcp/tools/domains.d.ts +4 -0
  73. package/dist/mcp/tools/domains.d.ts.map +1 -0
  74. package/dist/mcp/tools/domains.js +29 -0
  75. package/dist/mcp/tools/domains.js.map +1 -0
  76. package/dist/mcp/tools/dyndns.d.ts +4 -0
  77. package/dist/mcp/tools/dyndns.d.ts.map +1 -0
  78. package/dist/mcp/tools/dyndns.js +22 -0
  79. package/dist/mcp/tools/dyndns.js.map +1 -0
  80. package/dist/mcp/tools/forwards.d.ts +4 -0
  81. package/dist/mcp/tools/forwards.d.ts.map +1 -0
  82. package/dist/mcp/tools/forwards.js +73 -0
  83. package/dist/mcp/tools/forwards.js.map +1 -0
  84. package/dist/mcp/tools/invoices.d.ts +4 -0
  85. package/dist/mcp/tools/invoices.d.ts.map +1 -0
  86. package/dist/mcp/tools/invoices.js +32 -0
  87. package/dist/mcp/tools/invoices.js.map +1 -0
  88. package/dist/version.d.ts +3 -0
  89. package/dist/version.d.ts.map +1 -0
  90. package/dist/version.js +6 -0
  91. package/dist/version.js.map +1 -0
  92. package/package.json +76 -0
@@ -0,0 +1,147 @@
1
+ import { z } from "zod";
2
+ import { RECORD_TYPES } from "../../domeneshop/index.js";
3
+ import { additive, destructive, readOnly } from "../annotations.js";
4
+ import { jsonResult, textResult } from "../result.js";
5
+ import { toolHandler } from "../tool.js";
6
+ const listDNSRecordsShape = {
7
+ domain_id: z.number().int().describe("the Domeneshop domain ID, from list_domains"),
8
+ host: z.string().optional().describe("only return records for this host/subdomain"),
9
+ type: z
10
+ .string()
11
+ .optional()
12
+ .describe("only return records of this type: A, AAAA, ANAME, CAA, CNAME, DS, MX, NS, SRV, TLSA or TXT"),
13
+ };
14
+ const getDNSRecordShape = {
15
+ domain_id: z.number().int().describe("the Domeneshop domain ID, from list_domains"),
16
+ record_id: z.number().int().describe("the DNS record ID, from list_dns_records"),
17
+ };
18
+ // Every record type takes host, type and data; the rest are type-specific
19
+ // and must be supplied for exactly the types named in their descriptions.
20
+ const dnsRecordShape = {
21
+ domain_id: z.number().int().describe("the Domeneshop domain ID, from list_domains"),
22
+ host: z
23
+ .string()
24
+ .describe("the host/subdomain the record applies to, e.g. 'www' or '@' for the root"),
25
+ type: z.enum(RECORD_TYPES).describe("the record type"),
26
+ data: z
27
+ .string()
28
+ .describe("the record's main value: an IP address for A/AAAA, a hostname for ANAME/CNAME/MX/NS/SRV, free text for TXT, the CAA property value, or the hex hash for DS/TLSA"),
29
+ ttl: z
30
+ .number()
31
+ .int()
32
+ .optional()
33
+ .describe("time-to-live in seconds, 60-604800, must be a multiple of 60, defaults to 3600"),
34
+ priority: z
35
+ .number()
36
+ .int()
37
+ .optional()
38
+ .describe("required for MX and SRV: preference value, lower is tried first"),
39
+ weight: z
40
+ .number()
41
+ .int()
42
+ .optional()
43
+ .describe("required for SRV: relative weight among records with the same priority"),
44
+ port: z.number().int().optional().describe("required for SRV: the port the service is found on"),
45
+ usage: z
46
+ .number()
47
+ .int()
48
+ .optional()
49
+ .describe("required for TLSA: certificate usage (0 PKIX-TA, 1 PKIX-EE, 2 DANE-TA, 3 DANE-EE)"),
50
+ selector: z
51
+ .number()
52
+ .int()
53
+ .optional()
54
+ .describe("required for TLSA: what the hash is taken from (0 full certificate, 1 subject public key)"),
55
+ dtype: z
56
+ .number()
57
+ .int()
58
+ .optional()
59
+ .describe("required for TLSA: matching type of the hash in data (0 exact match, 1 SHA-256, 2 SHA-512)"),
60
+ alg: z.number().int().optional().describe("required for DS: the DNSSEC signing algorithm number"),
61
+ digest: z
62
+ .number()
63
+ .int()
64
+ .optional()
65
+ .describe("required for DS: digest type of the hash in data (1 SHA-1, 2 SHA-256, 4 SHA-384)"),
66
+ flags: z
67
+ .number()
68
+ .int()
69
+ .optional()
70
+ .describe("required for CAA: 128 to mark the property critical, otherwise 0"),
71
+ tag: z
72
+ .union([z.number(), z.string()])
73
+ .optional()
74
+ .describe("required for DS (the key tag of the referenced DNSKEY) and for CAA (the property tag, e.g. issue, issuewild or iodef)"),
75
+ };
76
+ const updateDNSRecordShape = {
77
+ ...dnsRecordShape,
78
+ record_id: z.number().int().describe("the DNS record ID to update, from list_dns_records"),
79
+ };
80
+ const deleteDNSRecordShape = {
81
+ domain_id: z.number().int().describe("the Domeneshop domain ID, from list_domains"),
82
+ record_id: z.number().int().describe("the DNS record ID to delete, from list_dns_records"),
83
+ };
84
+ function toDNSRecord(args) {
85
+ return {
86
+ host: args.host,
87
+ type: args.type,
88
+ data: args.data,
89
+ ttl: args.ttl,
90
+ priority: args.priority,
91
+ weight: args.weight,
92
+ port: args.port,
93
+ usage: args.usage,
94
+ selector: args.selector,
95
+ dtype: args.dtype,
96
+ alg: args.alg,
97
+ digest: args.digest,
98
+ flags: args.flags,
99
+ tag: args.tag,
100
+ };
101
+ }
102
+ export function registerDNSTools(server, client) {
103
+ server.registerTool("list_dns_records", {
104
+ description: "List DNS records for a domain, optionally filtered by host and/or record type.",
105
+ inputSchema: listDNSRecordsShape,
106
+ annotations: readOnly(),
107
+ }, toolHandler(async ({ domain_id, host, type }) => {
108
+ const records = await client.dns.list(domain_id, { host, type });
109
+ return jsonResult(records);
110
+ }));
111
+ server.registerTool("get_dns_record", {
112
+ description: "Get a single DNS record by ID.",
113
+ inputSchema: getDNSRecordShape,
114
+ annotations: readOnly(),
115
+ }, toolHandler(async ({ domain_id, record_id }) => {
116
+ const record = await client.dns.get(domain_id, record_id);
117
+ return jsonResult(record);
118
+ }));
119
+ server.registerTool("create_dns_record", {
120
+ description: "Create a new DNS record for a domain. Returns the new record's ID.",
121
+ inputSchema: dnsRecordShape,
122
+ annotations: additive(),
123
+ }, toolHandler(async (args) => {
124
+ const id = await client.dns.create(args.domain_id, toDNSRecord(args));
125
+ return jsonResult({ id });
126
+ }));
127
+ server.registerTool("update_dns_record", {
128
+ description: "Replace an existing DNS record. This overwrites the whole record, " +
129
+ "so send every field it should keep: any omitted field is dropped, and " +
130
+ "leaving out ttl resets it to the default 3600 seconds. " +
131
+ "Read the record with get_dns_record first if you are changing only part of it.",
132
+ inputSchema: updateDNSRecordShape,
133
+ annotations: destructive(),
134
+ }, toolHandler(async (args) => {
135
+ await client.dns.update(args.domain_id, args.record_id, toDNSRecord(args));
136
+ return textResult("DNS record updated.");
137
+ }));
138
+ server.registerTool("delete_dns_record", {
139
+ description: "Delete a DNS record.",
140
+ inputSchema: deleteDNSRecordShape,
141
+ annotations: destructive(),
142
+ }, toolHandler(async ({ domain_id, record_id }) => {
143
+ await client.dns.delete(domain_id, record_id);
144
+ return textResult("DNS record deleted.");
145
+ }));
146
+ }
147
+ //# sourceMappingURL=dns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns.js","sourceRoot":"","sources":["../../../src/mcp/tools/dns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { DomeneshopClient } from "../../domeneshop/index.js";
3
+ export declare function registerDomainTools(server: McpServer, client: DomeneshopClient): void;
4
+ //# sourceMappingURL=domains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/domains.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAgBlE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CA2BrF"}
@@ -0,0 +1,29 @@
1
+ import { z } from "zod";
2
+ import { readOnly } from "../annotations.js";
3
+ import { jsonResult } from "../result.js";
4
+ import { toolHandler } from "../tool.js";
5
+ const listDomainsShape = {
6
+ filter: z.string().optional().describe("only return domains matching this name"),
7
+ };
8
+ const getDomainShape = {
9
+ domain_id: z.number().int().describe("the Domeneshop domain ID, from list_domains"),
10
+ };
11
+ export function registerDomainTools(server, client) {
12
+ server.registerTool("list_domains", {
13
+ description: "List all domains on the Domeneshop account, optionally filtered by domain name.",
14
+ inputSchema: listDomainsShape,
15
+ annotations: readOnly(),
16
+ }, toolHandler(async ({ filter }) => {
17
+ const domains = await client.domains.list(filter);
18
+ return jsonResult(domains);
19
+ }));
20
+ server.registerTool("get_domain", {
21
+ description: "Get details for a single domain by its Domeneshop domain ID.",
22
+ inputSchema: getDomainShape,
23
+ annotations: readOnly(),
24
+ }, toolHandler(async ({ domain_id }) => {
25
+ const domain = await client.domains.get(domain_id);
26
+ return jsonResult(domain);
27
+ }));
28
+ }
29
+ //# sourceMappingURL=domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../../src/mcp/tools/domains.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,gBAAgB,GAAG;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CACjF,CAAC;AAGF,MAAM,cAAc,GAAG;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CACpF,CAAC;AAGF,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAwB;IAC7E,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EACT,iFAAiF;QACnF,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,WAAW,CAAkB,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAChD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,WAAW,EAAE,8DAA8D;QAC3E,WAAW,EAAE,cAAc;QAC3B,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,WAAW,CAAgB,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { DomeneshopClient } from "../../domeneshop/index.js";
3
+ export declare function registerDynDNSTools(server: McpServer, client: DomeneshopClient): void;
4
+ //# sourceMappingURL=dyndns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dyndns.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/dyndns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAelE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAcrF"}
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ import { destructive } from "../annotations.js";
3
+ import { textResult } from "../result.js";
4
+ import { toolHandler } from "../tool.js";
5
+ const updateDynDNSShape = {
6
+ hostname: z.string().describe("the hostname to update, must have an existing A or AAAA record"),
7
+ myip: z
8
+ .string()
9
+ .optional()
10
+ .describe("the IP address to set; if omitted, Domeneshop uses the caller's apparent IP"),
11
+ };
12
+ export function registerDynDNSTools(server, client) {
13
+ server.registerTool("update_dyndns", {
14
+ description: "Update a hostname's DNS record to point at the given (or caller's apparent) IP address, using Domeneshop's dynamic DNS protocol.",
15
+ inputSchema: updateDynDNSShape,
16
+ annotations: destructive(),
17
+ }, toolHandler(async ({ hostname, myip }) => {
18
+ await client.dynDns.update(hostname, myip);
19
+ return textResult("Dynamic DNS record updated.");
20
+ }));
21
+ }
22
+ //# sourceMappingURL=dyndns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dyndns.js","sourceRoot":"","sources":["../../../src/mcp/tools/dyndns.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,iBAAiB,GAAG;IACxB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;IAC/F,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6EAA6E,CAAC;CAC3F,CAAC;AAGF,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAwB;IAC7E,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,kIAAkI;QACpI,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,WAAW,EAAE;KAC3B,EACD,WAAW,CAAmB,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;QACzD,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3C,OAAO,UAAU,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { DomeneshopClient } from "../../domeneshop/index.js";
3
+ export declare function registerForwardTools(server: McpServer, client: DomeneshopClient): void;
4
+ //# sourceMappingURL=forwards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forwards.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/forwards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAoClE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAsEtF"}
@@ -0,0 +1,73 @@
1
+ import { z } from "zod";
2
+ import { additive, destructive, readOnly } from "../annotations.js";
3
+ import { jsonResult, textResult } from "../result.js";
4
+ import { toolHandler } from "../tool.js";
5
+ const listForwardsShape = {
6
+ domain_id: z.number().int().describe("the Domeneshop domain ID, from list_domains"),
7
+ };
8
+ const getForwardShape = {
9
+ domain_id: z.number().int().describe("the Domeneshop domain ID, from list_domains"),
10
+ host: z
11
+ .string()
12
+ .describe("the host/subdomain the forward applies to, e.g. 'www' or '@' for the root"),
13
+ };
14
+ const forwardShape = {
15
+ domain_id: z.number().int().describe("the Domeneshop domain ID, from list_domains"),
16
+ host: z.string().describe("the host/subdomain to forward, e.g. 'www' or '@' for the root"),
17
+ url: z.string().describe("the destination URL to forward requests to"),
18
+ frame: z
19
+ .boolean()
20
+ .optional()
21
+ .describe("if true, show the destination in a frame instead of redirecting"),
22
+ };
23
+ const deleteForwardShape = {
24
+ domain_id: z.number().int().describe("the Domeneshop domain ID, from list_domains"),
25
+ host: z.string().describe("the host/subdomain whose forward should be deleted"),
26
+ };
27
+ export function registerForwardTools(server, client) {
28
+ server.registerTool("list_forwards", {
29
+ description: "List all HTTP forwards configured for a domain.",
30
+ inputSchema: listForwardsShape,
31
+ annotations: readOnly(),
32
+ }, toolHandler(async ({ domain_id }) => {
33
+ const forwards = await client.forwards.list(domain_id);
34
+ return jsonResult(forwards);
35
+ }));
36
+ server.registerTool("get_forward", {
37
+ description: "Get the HTTP forward configured for a specific host.",
38
+ inputSchema: getForwardShape,
39
+ annotations: readOnly(),
40
+ }, toolHandler(async ({ domain_id, host }) => {
41
+ const forward = await client.forwards.get(domain_id, host);
42
+ return jsonResult(forward);
43
+ }));
44
+ server.registerTool("create_forward", {
45
+ description: "Create a new HTTP forward for a domain. Fails if the host already has a forward or a conflicting A, AAAA, ANAME or CNAME record.",
46
+ inputSchema: forwardShape,
47
+ annotations: additive(),
48
+ }, toolHandler(async ({ domain_id, host, url, frame }) => {
49
+ const created = await client.forwards.create(domain_id, { host, url, frame: frame ?? false });
50
+ return jsonResult(created);
51
+ }));
52
+ server.registerTool("update_forward", {
53
+ description: "Update an existing HTTP forward for a domain.",
54
+ inputSchema: forwardShape,
55
+ annotations: destructive(),
56
+ }, toolHandler(async ({ domain_id, host, url, frame }) => {
57
+ const updated = await client.forwards.update(domain_id, host, {
58
+ host,
59
+ url,
60
+ frame: frame ?? false,
61
+ });
62
+ return jsonResult(updated);
63
+ }));
64
+ server.registerTool("delete_forward", {
65
+ description: "Delete an HTTP forward.",
66
+ inputSchema: deleteForwardShape,
67
+ annotations: destructive(),
68
+ }, toolHandler(async ({ domain_id, host }) => {
69
+ await client.forwards.delete(domain_id, host);
70
+ return textResult("Forward deleted.");
71
+ }));
72
+ }
73
+ //# sourceMappingURL=forwards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forwards.js","sourceRoot":"","sources":["../../../src/mcp/tools/forwards.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,iBAAiB,GAAG;IACxB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CACpF,CAAC;AAGF,MAAM,eAAe,GAAG;IACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACnF,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,CAAC,2EAA2E,CAAC;CACzF,CAAC;AAGF,MAAM,YAAY,GAAG;IACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACnF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;IAC1F,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACtE,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,iEAAiE,CAAC;CAC/E,CAAC;AAGF,MAAM,kBAAkB,GAAG;IACzB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACnF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;CAChF,CAAC;AAGF,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,MAAwB;IAC9E,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,WAAW,CAAmB,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EAAE,sDAAsD;QACnE,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,WAAW,CAAiB,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE;QACxD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3D,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,kIAAkI;QACpI,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,WAAW,CAAc,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;QACjE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;QAC9F,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE,+CAA+C;QAC5D,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,WAAW,EAAE;KAC3B,EACD,WAAW,CAAc,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;QACjE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE;YAC5D,IAAI;YACJ,GAAG;YACH,KAAK,EAAE,KAAK,IAAI,KAAK;SACtB,CAAC,CAAC;QACH,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE,yBAAyB;QACtC,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,WAAW,EAAE;KAC3B,EACD,WAAW,CAAoB,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE;QAC3D,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { DomeneshopClient } from "../../domeneshop/index.js";
3
+ export declare function registerInvoiceTools(server: McpServer, client: DomeneshopClient): void;
4
+ //# sourceMappingURL=invoices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/invoices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAmBlE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CA2BtF"}
@@ -0,0 +1,32 @@
1
+ import { z } from "zod";
2
+ import { readOnly } from "../annotations.js";
3
+ import { jsonResult } from "../result.js";
4
+ import { toolHandler } from "../tool.js";
5
+ const listInvoicesShape = {
6
+ status: z
7
+ .string()
8
+ .optional()
9
+ .describe("only return invoices with this status: unpaid, paid or settled"),
10
+ };
11
+ const getInvoiceShape = {
12
+ invoice_id: z.number().int().describe("the invoice ID, from list_invoices"),
13
+ };
14
+ export function registerInvoiceTools(server, client) {
15
+ server.registerTool("list_invoices", {
16
+ description: "List invoices from the past three years on the Domeneshop account, optionally filtered by status.",
17
+ inputSchema: listInvoicesShape,
18
+ annotations: readOnly(),
19
+ }, toolHandler(async ({ status }) => {
20
+ const invoices = await client.invoices.list(status);
21
+ return jsonResult(invoices);
22
+ }));
23
+ server.registerTool("get_invoice", {
24
+ description: "Get details for a single invoice.",
25
+ inputSchema: getInvoiceShape,
26
+ annotations: readOnly(),
27
+ }, toolHandler(async ({ invoice_id }) => {
28
+ const invoice = await client.invoices.get(invoice_id);
29
+ return jsonResult(invoice);
30
+ }));
31
+ }
32
+ //# sourceMappingURL=invoices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices.js","sourceRoot":"","sources":["../../../src/mcp/tools/invoices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,iBAAiB,GAAG;IACxB,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gEAAgE,CAAC;CAC9E,CAAC;AAGF,MAAM,eAAe,GAAG;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAC5E,CAAC;AAGF,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,MAAwB;IAC9E,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,mGAAmG;QACrG,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,WAAW,CAAmB,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EAAE,mCAAmC;QAChD,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,QAAQ,EAAE;KACxB,EACD,WAAW,CAAiB,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACnD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACtD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** The published package version, read from package.json at runtime. */
2
+ export declare const VERSION: string;
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAKA,wEAAwE;AACxE,eAAO,MAAM,OAAO,EAAE,MAA4B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { createRequire } from "node:module";
2
+ const require = createRequire(import.meta.url);
3
+ const packageJson = require("../package.json");
4
+ /** The published package version, read from package.json at runtime. */
5
+ export const VERSION = packageJson.version;
6
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,wEAAwE;AACxE,MAAM,CAAC,MAAM,OAAO,GAAW,WAAW,CAAC,OAAO,CAAC"}
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "domeneshop-mcp",
3
+ "version": "1.0.0",
4
+ "description": "MCP server exposing the Domeneshop API — manage domains, DNS records, HTTP forwards, dynamic DNS and invoices from an AI assistant.",
5
+ "type": "module",
6
+ "bin": {
7
+ "domeneshop-mcp": "dist/index.js"
8
+ },
9
+ "main": "dist/index.js",
10
+ "types": "dist/index.d.ts",
11
+ "files": [
12
+ "dist",
13
+ "README.md",
14
+ "LICENSE",
15
+ "CHANGELOG.md"
16
+ ],
17
+ "engines": {
18
+ "node": ">=20"
19
+ },
20
+ "imports": {
21
+ "#domeneshop/*": "./src/domeneshop/*",
22
+ "#mcp/*": "./src/mcp/*",
23
+ "#testing/*": "./test/support/*"
24
+ },
25
+ "scripts": {
26
+ "build": "tsc -p tsconfig.build.json && chmod +x dist/index.js",
27
+ "dev": "tsx src/index.ts",
28
+ "lint": "biome lint .",
29
+ "lint:fix": "biome lint --write .",
30
+ "format": "biome format --write .",
31
+ "format:check": "biome format .",
32
+ "check": "biome check --write .",
33
+ "typecheck": "tsc --noEmit",
34
+ "test": "vitest run",
35
+ "test:watch": "vitest",
36
+ "changeset": "changeset",
37
+ "prepare": "husky",
38
+ "prepublishOnly": "npm run build"
39
+ },
40
+ "lint-staged": {
41
+ "*": "biome check --write --no-errors-on-unmatched"
42
+ },
43
+ "keywords": [
44
+ "mcp",
45
+ "model-context-protocol",
46
+ "domeneshop",
47
+ "dns",
48
+ "domains",
49
+ "claude"
50
+ ],
51
+ "author": "Martin Zachariassen",
52
+ "license": "MIT",
53
+ "repository": {
54
+ "type": "git",
55
+ "url": "git+https://github.com/martinzachariassen/domeneshop-mcp.git"
56
+ },
57
+ "homepage": "https://github.com/martinzachariassen/domeneshop-mcp#readme",
58
+ "bugs": {
59
+ "url": "https://github.com/martinzachariassen/domeneshop-mcp/issues"
60
+ },
61
+ "dependencies": {
62
+ "@modelcontextprotocol/sdk": "^1.30.0",
63
+ "zod": "^4.5.4"
64
+ },
65
+ "devDependencies": {
66
+ "@biomejs/biome": "^2.5.12",
67
+ "@changesets/changelog-github": "^1.0.1",
68
+ "@changesets/cli": "^3.0.2",
69
+ "@types/node": "^26.5.0",
70
+ "husky": "^9.1.7",
71
+ "lint-staged": "^17.5.0",
72
+ "tsx": "^4.23.13",
73
+ "typescript": "^6.0.3",
74
+ "vitest": "^5.0.0"
75
+ }
76
+ }