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
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 概覽:以下資訊來自註冊中心條目和服務本身。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
參照 儲存庫 中的啟動說明。
[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.
1. Get an API token and secret from domeneshop.no/admin?view=api.
2. Add the server. With Claude Code:
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=trueand it can look at everything but change nothing.
Requires Node.js 22 or newer (download), except for the Claude Desktop bundle.
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.
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:
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:
Run /mcp in a session, or claude mcp list, to check that it connects.
domeneshop-mcp-<version>.mcpb from the
latest release.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:
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:
[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:
For every project, run MCP: Open User Configuration from the command palette and add the same block, or register it in one line:
Add this to ~/.codex/config.toml (%USERPROFILE%\.codex\config.toml on
Windows):
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.
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:
npx["-y", "domeneshop-mcp"]DOMENESHOP_API_TOKEN and DOMENESHOP_API_SECRETTo avoid resolving the package on every launch, install it once and use
domeneshop-mcp as the command with no args:
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.
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.
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_recordreplaces the whole record: omitted fields are dropped and an omittedttlresets to 3600 seconds. Usepatch_dns_recordto change only some fields.upsert_dns_recordrefuses to act when a host has several records of the same type (typical forMXandTXT) and lists their IDs instead.
Access mirrors the MCP annotations each tool declares, which clients use to decide what to run without asking.
All eleven record types Domeneshop accepts are supported:
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.
[!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.
DOMENESHOP_READ_ONLY=true exposes only the eight
read-only tools. This is a good default for trying the server out.DOMENESHOP_TOOLS=list_domains,list_dns_records,patch_dns_record
exposes exactly those tools.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.
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.
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
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.
filterGet 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 for a domain, optionally filtered by host and/or record type.
hosttypedomain_id必填Get DNS record
Get a single DNS record by ID.
domain_id必填record_id必填Create DNS record
Create a new DNS record for a domain. Returns the stored record, including its new ID.
algtagttldata必填host必填porttype必填dtypeflagsusagedigestweight另有 3 個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
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 個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 a DNS record. This cannot be undone.
domain_id必填record_id必填List HTTP forwards
List all HTTP forwards configured for a domain.
domain_id必填Get HTTP forward
Get the HTTP forward configured for a specific host.
host必填domain_id必填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 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 HTTP forward
Delete an HTTP forward. This cannot be undone.
host必填domain_id必填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 from the past three years on the Domeneshop account, optionally filtered by status.
statusGet invoice
Get details for a single invoice, including a link to the PDF.
invoice_id必填已滿足適用檢查項的 90%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
claude mcp add domeneshop \ --env DOMENESHOP_API_TOKEN=<your-api-token> \ --env DOMENESHOP_API_SECRET=<your-api-secret> \ -- npx -y domeneshop-mcp{ "mcpServers": { "domeneshop": { "command": "npx", "args": ["-y", "domeneshop-mcp"], "env": { "DOMENESHOP_API_TOKEN": "<your-api-token>", "DOMENESHOP_API_SECRET": "<your-api-secret>" } } }}claude mcp add-json domeneshop '{"command":"npx","args":["-y","domeneshop-mcp"],"env":{"DOMENESHOP_API_TOKEN":"<your-api-token>","DOMENESHOP_API_SECRET":"<your-api-secret>"}}'{ "servers": { "domeneshop": { "type": "stdio", "command": "npx", "args": ["-y", "domeneshop-mcp"], "env": { "DOMENESHOP_API_TOKEN": "<your-api-token>", "DOMENESHOP_API_SECRET": "<your-api-secret>" } } }}code --add-mcp '{"name":"domeneshop","command":"npx","args":["-y","domeneshop-mcp"],"env":{"DOMENESHOP_API_TOKEN":"<your-api-token>","DOMENESHOP_API_SECRET":"<your-api-secret>"}}'[mcp_servers.domeneshop]command = "npx"args = ["-y", "domeneshop-mcp"]env = { DOMENESHOP_API_TOKEN = "<your-api-token>", DOMENESHOP_API_SECRET = "<your-api-secret>" }brew install martinzachariassen/tap/domeneshop-mcp # macOS/Linux, installs Node.js if missingnpm install -g domeneshop-mcp # or with npm{ "mcpServers": { "domeneshop": { "command": "/opt/homebrew/bin/domeneshop-mcp", "env": { "DOMENESHOP_API_TOKEN": "<your-api-token>", "DOMENESHOP_API_SECRET": "<your-api-secret>" } } }}