domeneshop-mcp 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +127 -63
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# domeneshop-mcp
|
|
2
2
|
|
|
3
|
+
## 1.1.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#44](https://github.com/martinzachariassen/domeneshop-mcp/pull/44) [`a369442`](https://github.com/martinzachariassen/domeneshop-mcp/commit/a369442f0a0e50de5dee77c9ec220fc35a7818f6) Thanks [@martinzachariassen](https://github.com/martinzachariassen)! - README: add a short "New to MCP?" primer, expand the Claude Code quick start (read-only and scope flags, `/mcp` check), document the Claude Desktop bundle step by step, and add a configuration table and more troubleshooting.
|
|
8
|
+
|
|
9
|
+
## 1.1.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#42](https://github.com/martinzachariassen/domeneshop-mcp/pull/42) [`b4145b9`](https://github.com/martinzachariassen/domeneshop-mcp/commit/b4145b910774e8f7e1c1ad66c9e2a226d036b0cc) Thanks [@martinzachariassen](https://github.com/martinzachariassen)! - Update dependencies, including zod 4.6.7, and add a banner to the README.
|
|
14
|
+
|
|
3
15
|
## 1.1.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
<h1 align="center">domeneshop-mcp</h1>
|
|
2
|
-
|
|
3
1
|
<p align="center">
|
|
4
|
-
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset=".github/assets/banner-dark.png">
|
|
4
|
+
<img src=".github/assets/banner-light.png" alt="domeneshop-mcp — MCP server for Domeneshop domains, DNS, HTTP forwards, dynamic DNS and invoices" width="100%">
|
|
5
|
+
</picture>
|
|
5
6
|
</p>
|
|
6
7
|
|
|
7
8
|
<p align="center">
|
|
@@ -15,15 +16,17 @@
|
|
|
15
16
|
</p>
|
|
16
17
|
|
|
17
18
|
<p align="center">
|
|
18
|
-
<a href="
|
|
19
|
+
<a href="#quick-start"><b>Quick start</b></a>
|
|
19
20
|
·
|
|
20
|
-
<a href="
|
|
21
|
+
<a href="#client-setup"><b>Client setup</b></a>
|
|
21
22
|
·
|
|
22
|
-
<a href="
|
|
23
|
+
<a href="#tools"><b>Tools</b></a>
|
|
23
24
|
·
|
|
24
|
-
<a href="
|
|
25
|
+
<a href="#access-control"><b>Access control</b></a>
|
|
25
26
|
·
|
|
26
|
-
<a href="
|
|
27
|
+
<a href="#troubleshooting"><b>Troubleshooting</b></a>
|
|
28
|
+
·
|
|
29
|
+
<a href="https://www.domeneshop.no/admin?view=api"><b>Get API credentials</b></a>
|
|
27
30
|
</p>
|
|
28
31
|
|
|
29
32
|
An [MCP](https://modelcontextprotocol.io) server that turns the
|
|
@@ -34,6 +37,31 @@ forwarding, dynamic DNS and invoices.
|
|
|
34
37
|
It talks MCP over stdio, so it works with **any MCP-compatible client**: Claude
|
|
35
38
|
Code, Claude Desktop, Cursor, VS Code, Codex, Windsurf, Cline and others.
|
|
36
39
|
|
|
40
|
+
<details>
|
|
41
|
+
<summary><strong>New to MCP? Start here</strong></summary>
|
|
42
|
+
|
|
43
|
+
[MCP](https://modelcontextprotocol.io) (Model Context Protocol) is an open
|
|
44
|
+
standard that lets AI apps call outside tools. This package is an *MCP server*:
|
|
45
|
+
a small program your AI app starts in the background and talks to. Once it is
|
|
46
|
+
registered, you just ask in plain language — "point blog.example.no at
|
|
47
|
+
203.0.113.10" — and the assistant picks the right tool, shows you what it is
|
|
48
|
+
about to do and asks before changing anything.
|
|
49
|
+
|
|
50
|
+
You never run the server yourself, and you do not need to know the tool names.
|
|
51
|
+
What you need:
|
|
52
|
+
|
|
53
|
+
- A **Domeneshop API token and secret**, a key pair that lets a program act on
|
|
54
|
+
your account. Treat them like a password.
|
|
55
|
+
- An **MCP client**, the app you chat with. Claude Code is used below; any
|
|
56
|
+
other works too (see [Client setup](#client-setup)).
|
|
57
|
+
- **Node.js 20.3+** ([download the LTS](https://nodejs.org)) or Homebrew. Not
|
|
58
|
+
needed for the Claude Desktop bundle.
|
|
59
|
+
|
|
60
|
+
If you are unsure about letting an assistant change live DNS, start in
|
|
61
|
+
[read-only mode](#access-control): it can look at everything but change nothing.
|
|
62
|
+
|
|
63
|
+
</details>
|
|
64
|
+
|
|
37
65
|
## Quick start
|
|
38
66
|
|
|
39
67
|
You need a Domeneshop account, plus either Node.js 20.3 or newer (for `npx`) or
|
|
@@ -42,16 +70,23 @@ You need a Domeneshop account, plus either Node.js 20.3 or newer (for `npx`) or
|
|
|
42
70
|
**1. Create an API token and secret** at
|
|
43
71
|
[domeneshop.no/admin?view=api](https://www.domeneshop.no/admin?view=api).
|
|
44
72
|
|
|
45
|
-
**2. Register the server
|
|
73
|
+
**2. Register the server** in [Claude Code](https://claude.com/claude-code),
|
|
74
|
+
replacing the placeholders with your token and secret:
|
|
46
75
|
|
|
47
76
|
```sh
|
|
48
77
|
claude mcp add domeneshop \
|
|
49
|
-
--env DOMENESHOP_API_TOKEN
|
|
50
|
-
--env DOMENESHOP_API_SECRET
|
|
78
|
+
--env DOMENESHOP_API_TOKEN=<your-api-token> \
|
|
79
|
+
--env DOMENESHOP_API_SECRET=<your-api-secret> \
|
|
51
80
|
-- npx -y domeneshop-mcp
|
|
52
81
|
```
|
|
53
82
|
|
|
54
|
-
|
|
83
|
+
Add `--env DOMENESHOP_READ_ONLY=true` to start with read-only tools only, and
|
|
84
|
+
`--scope user` to make it available in every project (the default is the
|
|
85
|
+
current project only).
|
|
86
|
+
|
|
87
|
+
**3. Ask for something.** Start a new `claude` session and try "List my
|
|
88
|
+
Domeneshop domains". Running `/mcp` inside Claude Code shows whether the server
|
|
89
|
+
connected.
|
|
55
90
|
|
|
56
91
|
**Using Homebrew instead of npx?** Install once, then register the binary in
|
|
57
92
|
step 2 with `-- domeneshop-mcp` in place of `-- npx -y domeneshop-mcp`:
|
|
@@ -60,31 +95,33 @@ step 2 with `-- domeneshop-mcp` in place of `-- npx -y domeneshop-mcp`:
|
|
|
60
95
|
brew install martinzachariassen/tap/domeneshop-mcp
|
|
61
96
|
```
|
|
62
97
|
|
|
63
|
-
Using a different client
|
|
98
|
+
**Using a different client?** Claude Desktop has a one-click bundle that needs
|
|
99
|
+
no Node.js; Cursor, VS Code, Codex and others take a short config block. See
|
|
100
|
+
[Client setup](#client-setup).
|
|
64
101
|
|
|
65
|
-
##
|
|
66
|
-
|
|
67
|
-
The server is launched by your client rather than run by hand, and reads its
|
|
68
|
-
credentials from two environment variables:
|
|
102
|
+
## What you can ask for
|
|
69
103
|
|
|
70
|
-
|
|
|
104
|
+
| Area | Example prompt |
|
|
71
105
|
| --- | --- |
|
|
72
|
-
|
|
|
73
|
-
|
|
|
106
|
+
| Domains | "Which domains are on my account, and when do they renew?" |
|
|
107
|
+
| DNS | "Show every DNS record for example.no" |
|
|
108
|
+
| DNS | "Point blog.example.no at 203.0.113.10" |
|
|
109
|
+
| DNS | "Lower the TTL on the www record for example.no to 5 minutes" |
|
|
110
|
+
| DNS | "Add the TXT record Google gave me for domain verification" |
|
|
111
|
+
| DNS | "Set up Fastmail's MX records on example.no" |
|
|
112
|
+
| Forwarding | "Forward old.example.no to https://example.no" |
|
|
113
|
+
| Dynamic DNS | "Update home.example.no to my current IP" |
|
|
114
|
+
| Invoices | "List my unpaid Domeneshop invoices" |
|
|
74
115
|
|
|
75
|
-
|
|
76
|
-
[Troubleshooting](#troubleshooting)):
|
|
116
|
+
## Client setup
|
|
77
117
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
| `DOMENESHOP_TOOLS` | Comma-separated allowlist of tool names to expose |
|
|
82
|
-
| `DOMENESHOP_DISABLED_TOOLS` | Comma-separated tool names to hide |
|
|
83
|
-
| `DOMENESHOP_TIMEOUT_MS` | Per-request timeout in milliseconds (default `30000`) |
|
|
84
|
-
| `DOMENESHOP_DEBUG` | `true` to log every API request to stderr |
|
|
118
|
+
The server is launched by your client rather than run by hand. It needs two
|
|
119
|
+
environment variables, `DOMENESHOP_API_TOKEN` and `DOMENESHOP_API_SECRET`; the
|
|
120
|
+
optional ones are listed under [Configuration](#configuration).
|
|
85
121
|
|
|
86
|
-
Most clients take the same **standard config**.
|
|
87
|
-
secret
|
|
122
|
+
Most clients take the same **standard config**. Replace the placeholders with
|
|
123
|
+
your token and secret, and if the file already lists other servers, add the
|
|
124
|
+
`"domeneshop"` entry inside the existing `"mcpServers"` object:
|
|
88
125
|
|
|
89
126
|
```json
|
|
90
127
|
{
|
|
@@ -93,8 +130,8 @@ secret wherever you see the placeholders.
|
|
|
93
130
|
"command": "npx",
|
|
94
131
|
"args": ["-y", "domeneshop-mcp"],
|
|
95
132
|
"env": {
|
|
96
|
-
"DOMENESHOP_API_TOKEN": "your-token",
|
|
97
|
-
"DOMENESHOP_API_SECRET": "your-secret"
|
|
133
|
+
"DOMENESHOP_API_TOKEN": "<your-api-token>",
|
|
134
|
+
"DOMENESHOP_API_SECRET": "<your-api-secret>"
|
|
98
135
|
}
|
|
99
136
|
}
|
|
100
137
|
}
|
|
@@ -116,23 +153,29 @@ write `<your-project>/.mcp.json` instead, shared via version control, or
|
|
|
116
153
|
You can also pass the standard config as raw JSON:
|
|
117
154
|
|
|
118
155
|
```sh
|
|
119
|
-
claude mcp add-json domeneshop '{"command":"npx","args":["-y","domeneshop-mcp"],"env":{"DOMENESHOP_API_TOKEN":"your-token","DOMENESHOP_API_SECRET":"your-secret"}}'
|
|
156
|
+
claude mcp add-json domeneshop '{"command":"npx","args":["-y","domeneshop-mcp"],"env":{"DOMENESHOP_API_TOKEN":"<your-api-token>","DOMENESHOP_API_SECRET":"<your-api-secret>"}}'
|
|
120
157
|
```
|
|
121
158
|
|
|
122
159
|
Or write the standard config straight into `<your-project>/.mcp.json`.
|
|
160
|
+
`claude mcp list` shows registered servers and whether they connect.
|
|
123
161
|
|
|
124
162
|
</details>
|
|
125
163
|
|
|
126
164
|
<details>
|
|
127
165
|
<summary><strong>Claude Desktop</strong></summary>
|
|
128
166
|
|
|
129
|
-
The easiest route is the one-click bundle
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
167
|
+
The easiest route is the one-click bundle, which needs no Node.js:
|
|
168
|
+
|
|
169
|
+
1. Download `domeneshop-mcp-<version>.mcpb` from the
|
|
170
|
+
[latest release](https://github.com/martinzachariassen/domeneshop-mcp/releases/latest).
|
|
171
|
+
2. Open it (double-click, or drag it into Claude Desktop).
|
|
172
|
+
3. Paste your token and secret, optionally turn on read-only mode, and install.
|
|
173
|
+
|
|
174
|
+
Claude Desktop stores the credentials securely.
|
|
133
175
|
|
|
134
|
-
To configure it by hand instead, add the standard config to
|
|
135
|
-
Settings → Developer → Edit Config
|
|
176
|
+
To configure it by hand instead, add the standard config to
|
|
177
|
+
`claude_desktop_config.json`, reachable from Settings → Developer → Edit Config,
|
|
178
|
+
then restart Claude Desktop:
|
|
136
179
|
|
|
137
180
|
| Platform | Full path |
|
|
138
181
|
| --- | --- |
|
|
@@ -169,8 +212,8 @@ VS Code uses a `servers` key instead of `mcpServers`, and wants an explicit
|
|
|
169
212
|
"command": "npx",
|
|
170
213
|
"args": ["-y", "domeneshop-mcp"],
|
|
171
214
|
"env": {
|
|
172
|
-
"DOMENESHOP_API_TOKEN": "your-token",
|
|
173
|
-
"DOMENESHOP_API_SECRET": "your-secret"
|
|
215
|
+
"DOMENESHOP_API_TOKEN": "<your-api-token>",
|
|
216
|
+
"DOMENESHOP_API_SECRET": "<your-api-secret>"
|
|
174
217
|
}
|
|
175
218
|
}
|
|
176
219
|
}
|
|
@@ -181,7 +224,7 @@ For every project, run the command palette action **MCP: Open User
|
|
|
181
224
|
Configuration** and add the same block there, or register it in one line:
|
|
182
225
|
|
|
183
226
|
```sh
|
|
184
|
-
code --add-mcp '{"name":"domeneshop","command":"npx","args":["-y","domeneshop-mcp"],"env":{"DOMENESHOP_API_TOKEN":"your-token","DOMENESHOP_API_SECRET":"your-secret"}}'
|
|
227
|
+
code --add-mcp '{"name":"domeneshop","command":"npx","args":["-y","domeneshop-mcp"],"env":{"DOMENESHOP_API_TOKEN":"<your-api-token>","DOMENESHOP_API_SECRET":"<your-api-secret>"}}'
|
|
185
228
|
```
|
|
186
229
|
|
|
187
230
|
</details>
|
|
@@ -200,7 +243,7 @@ Codex CLI reads MCP servers from `mcp_servers` in its config file:
|
|
|
200
243
|
[mcp_servers.domeneshop]
|
|
201
244
|
command = "npx"
|
|
202
245
|
args = ["-y", "domeneshop-mcp"]
|
|
203
|
-
env = { DOMENESHOP_API_TOKEN = "your-token", DOMENESHOP_API_SECRET = "your-secret" }
|
|
246
|
+
env = { DOMENESHOP_API_TOKEN = "<your-api-token>", DOMENESHOP_API_SECRET = "<your-api-secret>" }
|
|
204
247
|
```
|
|
205
248
|
|
|
206
249
|
`codex mcp add domeneshop -- npx -y domeneshop-mcp` registers it from the
|
|
@@ -251,8 +294,8 @@ Desktop usually do not see Homebrew's `PATH`, so give them the full path
|
|
|
251
294
|
"domeneshop": {
|
|
252
295
|
"command": "/opt/homebrew/bin/domeneshop-mcp",
|
|
253
296
|
"env": {
|
|
254
|
-
"DOMENESHOP_API_TOKEN": "your-token",
|
|
255
|
-
"DOMENESHOP_API_SECRET": "your-secret"
|
|
297
|
+
"DOMENESHOP_API_TOKEN": "<your-api-token>",
|
|
298
|
+
"DOMENESHOP_API_SECRET": "<your-api-secret>"
|
|
256
299
|
}
|
|
257
300
|
}
|
|
258
301
|
}
|
|
@@ -261,19 +304,20 @@ Desktop usually do not see Homebrew's `PATH`, so give them the full path
|
|
|
261
304
|
|
|
262
305
|
</details>
|
|
263
306
|
|
|
264
|
-
##
|
|
307
|
+
## Configuration
|
|
265
308
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
|
270
|
-
|
|
|
271
|
-
|
|
|
272
|
-
|
|
|
273
|
-
|
|
|
274
|
-
|
|
|
275
|
-
|
|
|
276
|
-
|
|
|
309
|
+
All settings are environment variables, passed with `--env` in Claude Code or
|
|
310
|
+
in the `env` block of the config above. Only the first two are required.
|
|
311
|
+
|
|
312
|
+
| Variable | Required | Description |
|
|
313
|
+
| --- | --- | --- |
|
|
314
|
+
| `DOMENESHOP_API_TOKEN` | Yes | API token from the Domeneshop control panel |
|
|
315
|
+
| `DOMENESHOP_API_SECRET` | Yes | The matching API secret |
|
|
316
|
+
| `DOMENESHOP_READ_ONLY` | No | `true` to expose only read-only tools |
|
|
317
|
+
| `DOMENESHOP_TOOLS` | No | Comma-separated allowlist of tool names to expose |
|
|
318
|
+
| `DOMENESHOP_DISABLED_TOOLS` | No | Comma-separated tool names to hide |
|
|
319
|
+
| `DOMENESHOP_TIMEOUT_MS` | No | Per-request timeout in milliseconds (default `30000`) |
|
|
320
|
+
| `DOMENESHOP_DEBUG` | No | `true` to log every API request to stderr |
|
|
277
321
|
|
|
278
322
|
## Tools
|
|
279
323
|
|
|
@@ -339,7 +383,7 @@ Hidden tools are not registered at all, so the model never sees them.
|
|
|
339
383
|
|
|
340
384
|
- **Read-only mode.** Set `DOMENESHOP_READ_ONLY=true` to expose only the eight
|
|
341
385
|
read-only tools. This is a good default if you mainly ask questions about your
|
|
342
|
-
domains, DNS and invoices.
|
|
386
|
+
domains, DNS and invoices, or are trying the server out for the first time.
|
|
343
387
|
- **Allowlist.** Set `DOMENESHOP_TOOLS=list_domains,list_dns_records,patch_dns_record`
|
|
344
388
|
to expose exactly those tools.
|
|
345
389
|
- **Denylist.** Set `DOMENESHOP_DISABLED_TOOLS=delete_dns_record,delete_forward`
|
|
@@ -352,8 +396,17 @@ Most clients ask before running a tool not annotated read-only. Keep that
|
|
|
352
396
|
confirmation on for this server: write tools change live DNS, and a wrong
|
|
353
397
|
record can take a site or mailbox offline.
|
|
354
398
|
|
|
399
|
+
Credentials are only ever sent to `api.domeneshop.no` and are never logged. To
|
|
400
|
+
revoke access, delete the token in the Domeneshop control panel.
|
|
401
|
+
|
|
355
402
|
## Troubleshooting
|
|
356
403
|
|
|
404
|
+
- **The tools do not show up**: restart the client (most only load servers at
|
|
405
|
+
startup) or, in Claude Code, check `/mcp`. Run `npx -y domeneshop-mcp --version`
|
|
406
|
+
to check that Node.js 20.3+ and npx work. If you edited a JSON config by hand,
|
|
407
|
+
make sure it is still valid JSON. With `DOMENESHOP_DEBUG=true` the server logs
|
|
408
|
+
every API request (method, path, status and duration, never credentials) to
|
|
409
|
+
stderr, which most clients capture in their MCP logs.
|
|
357
410
|
- **`API returned status 401`**: the token or secret is wrong. Copy both again
|
|
358
411
|
from [domeneshop.no/admin?view=api](https://www.domeneshop.no/admin?view=api).
|
|
359
412
|
Surrounding whitespace is trimmed automatically.
|
|
@@ -362,10 +415,11 @@ record can take a site or mailbox offline.
|
|
|
362
415
|
- **Timeouts**: requests give up after 30 seconds. Idempotent requests are
|
|
363
416
|
retried on rate limiting and temporary errors. Raise the limit with
|
|
364
417
|
`DOMENESHOP_TIMEOUT_MS` if needed.
|
|
365
|
-
- **
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
418
|
+
- **A DNS change does not show up**: DNS is cached for the record's TTL (3600
|
|
419
|
+
seconds by default), so other resolvers may serve the old value for up to an
|
|
420
|
+
hour. Ask the assistant to show the record to confirm Domeneshop stored it.
|
|
421
|
+
|
|
422
|
+
Still stuck? [Open an issue](https://github.com/martinzachariassen/domeneshop-mcp/issues/new/choose).
|
|
369
423
|
|
|
370
424
|
## Reference
|
|
371
425
|
|
|
@@ -407,6 +461,16 @@ spec, but are supported and used by their own client libraries:
|
|
|
407
461
|
|
|
408
462
|
</details>
|
|
409
463
|
|
|
464
|
+
<details>
|
|
465
|
+
<summary><strong>Distribution</strong></summary>
|
|
466
|
+
|
|
467
|
+
- [npm package](https://www.npmjs.com/package/domeneshop-mcp)
|
|
468
|
+
- [Homebrew tap](https://github.com/martinzachariassen/homebrew-tap)
|
|
469
|
+
- [MCP Registry](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.martinzachariassen/domeneshop-mcp)
|
|
470
|
+
- [Claude Desktop bundle](https://github.com/martinzachariassen/domeneshop-mcp/releases/latest) (`.mcpb` on each release)
|
|
471
|
+
|
|
472
|
+
</details>
|
|
473
|
+
|
|
410
474
|
## Development
|
|
411
475
|
|
|
412
476
|
```sh
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "domeneshop-mcp",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"description": "MCP server exposing the Domeneshop API — manage domains, DNS records, HTTP forwards, dynamic DNS and invoices from an AI assistant.",
|
|
5
5
|
"mcpName": "io.github.martinzachariassen/domeneshop-mcp",
|
|
6
6
|
"type": "module",
|