Domeneshop

io.github.martinzachariassen由 GitHub 帳號 martinzachariassen 發布v2.0.7更新於 Nov 4, 2026

管理Domeneshop網域、DNS記錄、HTTP轉發、動態DNS和發票。

AI 翻譯由 AI 模型根據下方的原文描述翻譯,可能有誤。

原文描述

Manage Domeneshop domains, DNS records, HTTP forwards, dynamic DNS and invoices.

概覽

Domeneshop 的本機 MCP 服務;無需登入;STDIO;17 個工具。

暫無 AI 概覽:以下資訊來自註冊中心條目和服務本身。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Domeneshop,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[domeneshop-mcp — MCP server for Domeneshop domains, DNS, HTTP forwards, dynamic DNS and invoices]

[CI] [npm version] [npm downloads] [License]

Manage your Domeneshop domains by asking your AI assistant. DNS records, HTTP forwards, dynamic DNS and invoices, all in plain language. Works with Claude, Cursor, VS Code, Codex and any other MCP client.

"Set up email for example.no"
"Point blog.example.no at 203.0.113.10"
"Which of my domains renew this year?"

The assistant picks the right tool, shows you what it is about to change and asks before it does.

Getting started

1. Get an API token and secret from domeneshop.no/admin?view=api.

2. Add the server. With Claude Code:

sh
claude mcp add domeneshop \  --env DOMENESHOP_API_TOKEN=<your-api-token> \  --env DOMENESHOP_API_SECRET=<your-api-secret> \  -- npx -y domeneshop-mcp

Using Claude Desktop, Cursor, VS Code or something else? Pick your client below. Most have a one-click install.

3. Try it. Start a new session and ask "List my Domeneshop domains".

[!TIP] Not ready to let an assistant touch live DNS? Add --env DOMENESHOP_READ_ONLY=true and it can look at everything but change nothing.

Requires Node.js 22 or newer (download), except for the Claude Desktop bundle.

New to MCP?

MCP (Model Context Protocol) is an open standard that lets AI apps call outside tools. This package is an MCP server: a small program your AI app starts in the background. You never run it yourself and you do not need to know the tool names. You just ask.

The API token and secret let a program act on your Domeneshop account, so treat them like a password.

What you can ask for

AreaExample prompt
Domains"Which domains are on my account, and when do they renew?"
DNS"Show every DNS record for example.no"
DNS"Lower the TTL on the www record for example.no to 5 minutes"
DNS"Add the TXT record Google gave me for domain verification"
Forwarding"Forward old.example.no to https://example.no"
Dynamic DNS"Update home.example.no to my current IP"
Invoices"List my unpaid Domeneshop invoices"

Client setup

Every client needs the same two environment variables, DOMENESHOP_API_TOKEN and DOMENESHOP_API_SECRET. Most take this standard config. If the file already lists other servers, add the "domeneshop" entry inside the existing "mcpServers" object:

json
{  "mcpServers": {    "domeneshop": {      "command": "npx",      "args": ["-y", "domeneshop-mcp"],      "env": {        "DOMENESHOP_API_TOKEN": "<your-api-token>",        "DOMENESHOP_API_SECRET": "<your-api-secret>"      }    }  }}
Claude Code

Use the command from Getting started. It registers the server for you in this project only (--scope local). Add --scope user to make it available in every project, or --scope project to write <your-project>/.mcp.json and share it through version control.

You can also pass the standard config as raw JSON:

sh
claude mcp add-json domeneshop '{"command":"npx","args":["-y","domeneshop-mcp"],"env":{"DOMENESHOP_API_TOKEN":"<your-api-token>","DOMENESHOP_API_SECRET":"<your-api-secret>"}}'

Run /mcp in a session, or claude mcp list, to check that it connects.

Claude Desktop: one-click bundle, no Node.js needed
  1. Download domeneshop-mcp-<version>.mcpb from the latest release.
  2. Open it (double-click, or drag it into Claude Desktop).
  3. Paste your token and secret, optionally turn on read-only mode, and install.

Claude Desktop stores the credentials securely.

To configure it by hand instead, add the standard config to claude_desktop_config.json (Settings → Developer → Edit Config), then restart Claude Desktop:

PlatformFull path
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Linux (unofficial builds)~/.config/Claude/claude_desktop_config.json
Cursor: one-click install

[Install in Cursor]

The button installs the server with placeholder credentials. Afterwards, open Settings → MCP, edit the domeneshop entry and replace <your-api-token> and <your-api-secret> with your own.

To set it up by hand instead, add the standard config to an mcp.json file:

ScopeFull path
This project only<your-project>/.cursor/mcp.json
Every project (macOS/Linux)~/.cursor/mcp.json
Every project (Windows)%USERPROFILE%\.cursor\mcp.json
VS Code (GitHub Copilot): one-click install

[Install in VS Code] [Install in VS Code Insiders]

The buttons install the server in your user configuration. VS Code then asks for your token and secret and stores them securely, so nothing is written to a config file in plain text.

To set it up by hand instead, note that VS Code uses a servers key instead of mcpServers and wants an explicit type. For this project only, add it to <your-project>/.vscode/mcp.json:

json
{  "servers": {    "domeneshop": {      "type": "stdio",      "command": "npx",      "args": ["-y", "domeneshop-mcp"],      "env": {        "DOMENESHOP_API_TOKEN": "<your-api-token>",        "DOMENESHOP_API_SECRET": "<your-api-secret>"      }    }  }}

For every project, run MCP: Open User Configuration from the command palette and add the same block, or register it in one line:

sh
code --add-mcp '{"name":"domeneshop","command":"npx","args":["-y","domeneshop-mcp"],"env":{"DOMENESHOP_API_TOKEN":"<your-api-token>","DOMENESHOP_API_SECRET":"<your-api-secret>"}}'
Codex

Add this to ~/.codex/config.toml (%USERPROFILE%\.codex\config.toml on Windows):

toml
[mcp_servers.domeneshop]command = "npx"args = ["-y", "domeneshop-mcp"]env = { DOMENESHOP_API_TOKEN = "<your-api-token>", DOMENESHOP_API_SECRET = "<your-api-secret>" }

codex mcp add domeneshop -- npx -y domeneshop-mcp also works, but takes no env flags, so set the two variables in the block it creates.

Windsurf, Cline, Continue, LM Studio and others

Anything that runs MCP servers over stdio works. Most use the standard config above. Check your client's documentation for the config file and key name, then point it at:

  • command: npx
  • args: ["-y", "domeneshop-mcp"]
  • env: DOMENESHOP_API_TOKEN and DOMENESHOP_API_SECRET
Install with Homebrew or npm instead of npx

To avoid resolving the package on every launch, install it once and use domeneshop-mcp as the command with no args:

sh
brew install martinzachariassen/tap/domeneshop-mcp   # macOS/Linux, installs Node.js if missingnpm install -g domeneshop-mcp                        # or with npm

In Claude Code, that means -- domeneshop-mcp in place of -- npx -y domeneshop-mcp. brew upgrade domeneshop-mcp picks up new releases.

GUI apps such as Claude Desktop usually do not see Homebrew's PATH, so give them the full path. brew --prefix prints it: /opt/homebrew on Apple silicon, /usr/local on Intel Macs, /home/linuxbrew/.linuxbrew on Linux.

json
{  "mcpServers": {    "domeneshop": {      "command": "/opt/homebrew/bin/domeneshop-mcp",      "env": {        "DOMENESHOP_API_TOKEN": "<your-api-token>",        "DOMENESHOP_API_SECRET": "<your-api-secret>"      }    }  }}

Configuration

All settings are environment variables, passed with --env in Claude Code or in the env block of your client config. Only the first two are required.

VariableRequiredDescription
DOMENESHOP_API_TOKENYesAPI token from the Domeneshop control panel
DOMENESHOP_API_SECRETYesThe matching API secret
DOMENESHOP_READ_ONLYNotrue to expose only read-only tools
DOMENESHOP_TOOLSNoComma-separated allowlist of tool names to expose
DOMENESHOP_DISABLED_TOOLSNoComma-separated tool names to hide
DOMENESHOP_TIMEOUT_MSNoPer-request timeout in milliseconds (default 30000)
DOMENESHOP_DEBUGNotrue to log every API request to stderr

Tools

17 tools cover every operation the Domeneshop API offers. You don't need to know their names, because the assistant picks them for you. Arguments are validated before anything is sent (TTL range, URL scheme, IP addresses, the fields each record type requires), so a mistake comes back as an explanation, not a bare API error.

[!WARNING] update_dns_record replaces the whole record: omitted fields are dropped and an omitted ttl resets to 3600 seconds. Use patch_dns_record to change only some fields. upsert_dns_record refuses to act when a host has several records of the same type (typical for MX and TXT) and lists their IDs instead.

All tools

Access mirrors the MCP annotations each tool declares, which clients use to decide what to run without asking.

AreaToolAccessDescription
Domainslist_domainsRead-onlyList all domains on the account, optionally filtered by name
get_domainRead-onlyGet a single domain by its Domeneshop domain ID
DNSlist_dns_recordsRead-onlyList a domain's records, optionally filtered by host and type
get_dns_recordRead-onlyGet a single record by ID
create_dns_recordAddsCreate a record and return it as stored
update_dns_recordOverwritesReplace a whole record (see the warning above)
patch_dns_recordOverwritesChange only the given fields of a record
upsert_dns_recordOverwritesUpdate the single record for a host and type, or create it if there is none
delete_dns_recordDeletesDelete a record
Forwardinglist_forwardsRead-onlyList a domain's HTTP forwards
get_forwardRead-onlyGet the forward for one host
create_forwardAddsCreate a forward to an http://, https:// or ftp:// URL
update_forwardOverwritesUpdate a forward's destination or frame setting; an omitted frame keeps its stored value
delete_forwardDeletesDelete a forward
Dynamic DNSupdate_dyndnsOverwritesPoint one or more comma-separated hostnames at up to nine IPv4/IPv6 addresses, or at the caller's apparent IP; creates the record if missing
Invoiceslist_invoicesRead-onlyList invoices from the past three years, optionally filtered by status
get_invoiceRead-onlyGet a single invoice
Supported DNS record types

All eleven record types Domeneshop accepts are supported:

TypeFields beyond host, data and ttl
A, AAAA, ANAME, CNAME, NS, TXT—
MXpriority
SRVpriority, weight, port
TLSAusage, selector, dtype
DStag, alg, digest
CAAflags, tag

tag is a number for DS (the key tag, 0-65535) and a string for CAA (the property tag, such as issue). A and AAAA data must be an address of the matching family, and the numeric fields are range-checked.

Safety

[!IMPORTANT] Domeneshop has no scoped tokens: a token can do everything your account can. Limit what the assistant can do by limiting which tools the server exposes.

  • Read-only mode: DOMENESHOP_READ_ONLY=true exposes only the eight read-only tools. This is a good default for trying the server out.
  • Allowlist: DOMENESHOP_TOOLS=list_domains,list_dns_records,patch_dns_record exposes exactly those tools.
  • Denylist: DOMENESHOP_DISABLED_TOOLS=delete_dns_record,delete_forward hides specific tools.

Hidden tools are not registered at all, so the model never sees them. The settings combine, and a misspelled tool name stops the server at startup instead of being silently ignored.

Keep your client's confirmation prompt on for write tools. They change live DNS, and a wrong record can take a site or mailbox offline.

Credentials are only sent to api.domeneshop.no and are never logged. To revoke access, delete the token in the Domeneshop control panel.

Troubleshooting

ProblemFix
The tools don't show upRestart the client (most load servers only at startup), or check /mcp in Claude Code. Run npx -y domeneshop-mcp --version to confirm Node.js 22+ and npx work. If you edited a JSON config by hand, check that it is still valid.
API returned status 401The token or secret is wrong. Copy both again from domeneshop.no/admin?view=api. Surrounding whitespace is trimmed automatically.
API returned status 404The domain or record ID doesn't exist on this account. Ask the assistant to list domains or records first.
TimeoutsRequests give up after 30 seconds. Idempotent requests are retried on rate limiting and temporary errors. Raise the limit with DOMENESHOP_TIMEOUT_MS.
A DNS change doesn't show upDNS is cached for the record's TTL (3600 seconds by default), so resolvers may serve the old value for up to an hour. Ask the assistant to show the record to confirm Domeneshop stored it.

For more detail, set DOMENESHOP_DEBUG=true. The server then logs every API request (method, path, status and duration, never credentials) to stderr, which most clients show in their MCP logs.

Still stuck? Open an issue.

Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md for the development workflow, and the API notes for undocumented Domeneshop behaviour the client relies on. Everyone taking part is expected to follow the Code of Conduct.

Available on npm, Homebrew, the MCP Registry and as a Claude Desktop bundle. To report a vulnerability, see SECURITY.md. Licensed under MIT.

來源:README.md,提交 8844c2b

工具

17

list_domains

List domains

List all domains on the Domeneshop account, optionally filtered by domain name. Use this first to find the domain_id the other tools need.

輸入參數filter

get_domain

Get domain

Get details for a single domain by its Domeneshop domain ID: expiry, renewal, nameservers and active services.

輸入參數domain_id必填

list_dns_records

List DNS records

List DNS records for a domain, optionally filtered by host and/or record type.

輸入參數hosttypedomain_id必填

get_dns_record

Get DNS record

Get a single DNS record by ID.

輸入參數domain_id必填record_id必填

create_dns_record

Create DNS record

Create a new DNS record for a domain. Returns the stored record, including its new ID.

輸入參數algtagttldata必填host必填porttype必填dtypeflagsusagedigestweight另有 3 個

update_dns_record

Replace DNS record

Replace an existing DNS record. This overwrites the whole record, so send every field it should keep: any omitted field is dropped, and leaving out ttl resets it to the default 3600 seconds. To change only some fields, use patch_dns_record instead. Returns the stored record.

輸入參數algtagttldata必填host必填porttype必填dtypeflagsusagedigestweight另有 4 個

patch_dns_record

Patch DNS record

Change only some fields of an existing DNS record, e.g. just data or ttl. The current record is read first and every field you leave out keeps its stored value; when you change the type, give the new type's required fields too. Prefer this over update_dns_record. Returns the stored record.

輸入參數algtagttldatahostporttypedtypeflagsusagedigestweight另有 4 個

upsert_dns_record

Create or update DNS record

Make sure a host has exactly this record of the given type: updates the existing record for that host and type, or creates one if there is none. When updating, optional fields you leave out (e.g. ttl, priority) keep their stored value. Fails without changing anything if the host already has several records of that type (common for MX and TXT); then use patch_dns_record with a record_id, or create_dns_record to add another. Returns { action: "created" | "updated", record }.

輸入參數algtagttldata必填host必填porttype必填dtypeflagsusagedigestweight另有 3 個

delete_dns_record

Delete DNS record

Delete a DNS record. This cannot be undone.

輸入參數domain_id必填record_id必填

list_forwards

List HTTP forwards

List all HTTP forwards configured for a domain.

輸入參數domain_id必填

get_forward

Get HTTP forward

Get the HTTP forward configured for a specific host.

輸入參數host必填domain_id必填

create_forward

Create HTTP forward

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.

輸入參數url必填host必填framedomain_id必填

update_forward

Update HTTP forward

Update an existing HTTP forward for a domain. Returns the stored forward. frame keeps its stored value unless given. The host itself cannot be changed: to move a forward, delete it and create it again for the new host.

輸入參數url必填host必填framedomain_id必填

delete_forward

Delete HTTP forward

Delete an HTTP forward. This cannot be undone.

輸入參數host必填domain_id必填

update_dyndns

Update dynamic DNS

Point one or more hostnames at the given (or the caller's apparent) IP address using Domeneshop's dynamic DNS protocol. The record type (A or AAAA) follows from the address; a missing record is created, an existing one overwritten.

輸入參數myiphostname必填

list_invoices

List invoices

List invoices from the past three years on the Domeneshop account, optionally filtered by status.

輸入參數status

get_invoice

Get invoice

Get details for a single invoice, including a link to the PDF.

輸入參數invoice_id必填

版本歷史

7
  1. v2.0.7最新Nov 3, 2026
  2. v2.0.5Nov 3, 2026
  3. v2.0.1Nov 3, 2026
  4. v1.1.6Oct 29, 2026
  5. v1.1.5Oct 21, 2026
  6. v1.1.3Oct 21, 2026
  7. v1.1.1Oct 21, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分