{"_id":"@alpha018/nextdns-mcp","_rev":"3-ba4e079e7890a6e0ed28405a282d44b8","name":"@alpha018/nextdns-mcp","dist-tags":{"latest":"1.0.2"},"versions":{"0.1.0":{"name":"@alpha018/nextdns-mcp","version":"0.1.0","author":{"name":"github.com/alpha018"},"license":"MIT","_id":"@alpha018/nextdns-mcp@0.1.0","maintainers":[{"name":"alpha018","email":"gentle.koala1662@alphacode.cl"}],"homepage":"https://github.com/alpha018/alpha-skills#readme","bugs":{"url":"https://github.com/alpha018/alpha-skills/issues"},"bin":{"nextdns-mcp":"dist/index.js"},"dist":{"shasum":"13c46f67658587baa5398050373ebae3184e2282","tarball":"https://registry.npmjs.org/@alpha018/nextdns-mcp/-/nextdns-mcp-0.1.0.tgz","fileCount":26,"integrity":"sha512-QSTaBGcGCkUB098l38EfO587bvtile/AWx0TAMEi5Bp6qCQX6aWQS7A52zpOJMBeYVlEbhFVTOcDXkQ5iC2dQw==","signatures":[{"sig":"MEYCIQDyUpYCvw6vYNB87P7T8XBYncbTcj8iu94M2Llg3BcD3AIhAI2QOkoBMVkCRR6+xtRsxANTw6dglX2gmOSvvdUl/Oe5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58453},"type":"module","engines":{"node":">=22"},"gitHead":"48ff45676f3aa2b7e3a76b109f678d1d2ddd92f6","scripts":{"dev":"tsx src/index.ts","lint":"eslint .","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"tsc -p tsconfig.json","start":"node dist/index.js","format":"prettier --write .","lint:fix":"eslint . --fix","typecheck":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","test:coverage":"NODE_OPTIONS=--experimental-vm-modules jest --coverage"},"_npmUser":{"name":"alpha018","email":"gentle.koala1662@alphacode.cl"},"repository":{"url":"git+https://github.com/alpha018/alpha-skills.git","type":"git","directory":"mcp-servers/nextdns"},"_npmVersion":"11.9.0","description":"Local stdio MCP server exposing the NextDNS REST API as tools.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","jest":"^30.4.2","eslint":"^10.8.1","ts-jest":"^29.4.12","prettier":"^3.9.6","typescript":"^5.7.0","@types/jest":"^30.0.0","@types/node":"^22.10.0","semantic-release":"^24.2.3","typescript-eslint":"^8.67.0","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.1","eslint-plugin-sonarjs":"^4.2.0","eslint-config-prettier":"^10.1.8","eslint-plugin-security":"^4.0.1","@semantic-release/github":"^11.0.1","@stylistic/eslint-plugin":"^5.10.0","semantic-release-monorepo":"^8.0.2","@semantic-release/changelog":"^6.0.3","eslint-plugin-perfectionist":"^5.10.1"},"_npmOperationalInternal":{"tmp":"tmp/nextdns-mcp_0.1.0_1786931162038_0.2681827092332445","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@alpha018/nextdns-mcp","version":"1.0.1","author":{"name":"github.com/alpha018"},"license":"MIT","_id":"@alpha018/nextdns-mcp@1.0.1","maintainers":[{"name":"alpha018","email":"gentle.koala1662@alphacode.cl"}],"homepage":"https://github.com/Alpha018/alpha-skills#readme","bugs":{"url":"https://github.com/Alpha018/alpha-skills/issues"},"bin":{"nextdns-mcp":"dist/index.js"},"dist":{"shasum":"a5cfe075aedda5431d6cc8e33d8793988faa6a9f","tarball":"https://registry.npmjs.org/@alpha018/nextdns-mcp/-/nextdns-mcp-1.0.1.tgz","fileCount":26,"integrity":"sha512-bD3ndzryu2pfQDaj4VBLElCUTjvRUgvViZlhYijGCJh5wZywyi2PKAuUkP2xB2tsnSbd+qHt5dczUeqv3ZjSog==","signatures":[{"sig":"MEYCIQDGYJ8jDPkcukXZceCPkQtkbbDbjrT8ydlDh5TTUFAU8wIhAO70bVimJbMMCvRvmXQWQ5k3X+SZm6Sz9VYa++a3BvYx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alpha018%2fnextdns-mcp@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":58719},"type":"module","engines":{"node":">=22"},"gitHead":"abf80ea42a89903673c70330d7c1529e6fb35e83","scripts":{"dev":"tsx src/index.ts","lint":"eslint .","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"tsc -p tsconfig.json","start":"node dist/index.js","format":"prettier --write .","lint:fix":"eslint . --fix","typecheck":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","test:coverage":"NODE_OPTIONS=--experimental-vm-modules jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4f2b8296-b04e-4209-9aa7-3d488db9f151"}},"repository":{"url":"git+https://github.com/Alpha018/alpha-skills.git","type":"git","directory":"mcp-servers/nextdns"},"_npmVersion":"12.0.2","description":"Local stdio MCP server exposing the NextDNS REST API as tools.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","jest":"^30.4.2","eslint":"^10.8.1","ts-jest":"^29.4.12","prettier":"^3.9.6","typescript":"^5.7.0","@types/jest":"^30.0.0","@types/node":"^22.10.0","semantic-release":"^24.2.3","typescript-eslint":"^8.67.0","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.1","eslint-plugin-sonarjs":"^4.2.0","eslint-config-prettier":"^10.1.8","eslint-plugin-security":"^4.0.1","@semantic-release/github":"^11.0.1","@stylistic/eslint-plugin":"^5.10.0","semantic-release-monorepo":"^8.0.2","@semantic-release/changelog":"^6.0.3","eslint-plugin-perfectionist":"^5.10.1"},"_npmOperationalInternal":{"tmp":"tmp/nextdns-mcp_1.0.1_1786931963574_0.4515072812625114","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@alpha018/nextdns-mcp","version":"1.0.2","description":"Local stdio MCP server exposing the NextDNS REST API as tools.","type":"module","author":{"name":"github.com/alpha018"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Alpha018/alpha-skills.git","directory":"mcp-servers/nextdns"},"bin":{"nextdns-mcp":"dist/index.js"},"publishConfig":{"access":"public","provenance":true},"scripts":{"build":"tsc -p tsconfig.json","dev":"tsx src/index.ts","format":"prettier --write .","format:check":"prettier --check .","lint":"eslint .","lint:fix":"eslint . --fix","start":"node dist/index.js","test":"NODE_OPTIONS=--experimental-vm-modules jest","test:coverage":"NODE_OPTIONS=--experimental-vm-modules jest --coverage","typecheck":"tsc -p tsconfig.json --noEmit"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.0","zod":"^3.23.8"},"devDependencies":{"@semantic-release/changelog":"^6.0.3","@semantic-release/git":"^10.0.1","@semantic-release/github":"^11.0.1","@semantic-release/npm":"^12.0.1","@stylistic/eslint-plugin":"^5.10.0","@types/jest":"^30.0.0","@types/node":"^22.10.0","eslint":"^10.8.1","eslint-config-prettier":"^10.1.8","eslint-plugin-perfectionist":"^5.10.1","eslint-plugin-security":"^4.0.1","eslint-plugin-sonarjs":"^4.2.0","jest":"^30.4.2","prettier":"^3.9.6","semantic-release":"^24.2.3","semantic-release-monorepo":"^8.0.2","ts-jest":"^29.4.12","tsx":"^4.19.0","typescript":"^5.7.0","typescript-eslint":"^8.67.0"},"engines":{"node":">=22"},"gitHead":"fffff484d5350cd9ab4677d49324e4eba383faa6","_id":"@alpha018/nextdns-mcp@1.0.2","bugs":{"url":"https://github.com/Alpha018/alpha-skills/issues"},"homepage":"https://github.com/Alpha018/alpha-skills#readme","_nodeVersion":"24.19.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-tdrDdlvhmKzmdP4Z1FjA6K9Ch4B+WKhmZIFndbZneN0BYzKLvmwx+38rT5cArwSibVGhbqwWsOln1T5erdU9bA==","shasum":"7aac3b72e0b69f4aa9d43e5e34db634fa69cc75c","tarball":"https://registry.npmjs.org/@alpha018/nextdns-mcp/-/nextdns-mcp-1.0.2.tgz","fileCount":26,"unpackedSize":58702,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alpha018%2fnextdns-mcp@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAGYj/qR/7Nq8eMFg66UOuWHjocwt8cCZHSqzOfF9IopAiEAi0aOUqGdw/S56AXKArdLZNrhiEdVS35NjaETRFTTGCw="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:84a5e1a4-8e62-4962-8bae-bc57a260530e"}},"directories":{},"maintainers":[{"name":"alpha018","email":"gentle.koala1662@alphacode.cl"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nextdns-mcp_1.0.2_1786949343429_0.2900620556970728"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-17T01:46:01.861Z","modified":"2026-08-17T06:49:03.950Z","0.1.0":"2026-08-17T01:46:02.197Z","1.0.1":"2026-08-17T01:59:23.726Z","1.0.2":"2026-08-17T06:49:03.567Z"},"bugs":{"url":"https://github.com/Alpha018/alpha-skills/issues"},"author":{"name":"github.com/alpha018"},"license":"MIT","homepage":"https://github.com/Alpha018/alpha-skills#readme","repository":{"type":"git","url":"git+https://github.com/Alpha018/alpha-skills.git","directory":"mcp-servers/nextdns"},"description":"Local stdio MCP server exposing the NextDNS REST API as tools.","maintainers":[{"name":"alpha018","email":"gentle.koala1662@alphacode.cl"}],"readme":"# nextdns-mcp\n\n### Local MCP server for the NextDNS API\n\nLocal stdio MCP server exposing the NextDNS REST API as tools. Claude Code (or any MCP-compatible client) launches this as a subprocess. There's no hosting, no deployment, no persistent service; it runs only while your session is open.\n\n---\n\n## Quick facts\n\n| | |\n|---|---|\n| Package | [`@alpha018/nextdns-mcp`](https://www.npmjs.com/package/@alpha018/nextdns-mcp) on npm, run via `npx` |\n| Transport | stdio, launched as a subprocess |\n| Language | TypeScript |\n| Auth | `NEXTDNS_API_KEY` environment variable |\n| Versioning | [Semantic Versioning](https://semver.org) via [semantic-release](https://semantic-release.gitbook.io), driven by Conventional Commits |\n| Source of truth | [`skills/external/nextdns-api/references/api-reference.md`](../../skills/external/nextdns-api/references/api-reference.md) |\n\nShapes are kept in sync with that reference doc in this repo. Check it if a tool call fails validation after NextDNS changes their API.\n\n## Tools\n\n| Tool | Covers |\n|---|---|\n| `get_profile` / `update_profile` | `/profiles/:profile` |\n| `get_security` / `update_security` | `/profiles/:profile/security` |\n| `get_privacy` / `update_privacy` | `/profiles/:profile/privacy` |\n| `get_parental_control` / `update_parental_control` | `/profiles/:profile/parentalControl` |\n| `get_settings` / `update_settings` | `/profiles/:profile/settings` |\n| `manage_list_entries` | denylist, allowlist, security.tlds, privacy.blocklists, privacy.natives, parentalControl.services, parentalControl.categories |\n| `get_analytics` | all 11 analytics dimensions, with optional time series |\n| `list_logs` / `clear_logs` | `/profiles/:profile/logs` |\n\nNot included (v1): `logs/stream` (Server-Sent Events, doesn't fit a request/response tool call) and `logs/download` (redirects to a signed file URL, better handled outside an MCP tool for now).\n\n## Setup\n\n1. Get your NextDNS API key from https://my.nextdns.io/account.\n2. Register with Claude Code (runs the published package via `npx`, no clone or build needed):\n\n   ```bash\n   claude mcp add nextdns \\\n     --env NEXTDNS_API_KEY=your-api-key-here \\\n     -- npx -y @alpha018/nextdns-mcp\n   ```\n\n   Or add directly to `.mcp.json`:\n\n   ```json\n   {\n     \"mcpServers\": {\n       \"nextdns\": {\n         \"command\": \"npx\",\n         \"args\": [\"-y\", \"@alpha018/nextdns-mcp\"],\n         \"env\": { \"NEXTDNS_API_KEY\": \"your-api-key-here\" }\n       }\n     }\n   }\n   ```\n\n   Environment variables for local MCP servers are stored unencrypted in Claude's local config, readable only by your user account. Fine for a personal homelab key, but don't reuse a high-value secret here.\n\n3. Verify: run `/mcp` in Claude Code and confirm `nextdns` is listed, then try asking it to fetch a profile.\n\n## Development\n\nWorking against a local checkout instead of the published package:\n\n```bash\ncd mcp-servers/nextdns\nnpm install\nnpm run dev          # run directly with tsx, no build step\nnpm run typecheck    # tsc --noEmit\nnpm run build        # compile to dist/\n```\n\n## Releasing\n\nTwo shared workflows at the repo root cover every package under `mcp-servers/`, not just this one:\n\n- [`.github/workflows/pr-test-mcp-servers.yml`](../../.github/workflows/pr-test-mcp-servers.yml) runs on every pull request. It detects which `mcp-servers/<package>` directories changed and runs lint, typecheck, build, and test for each, across Node 22 and 24.\n- [`.github/workflows/build-publish-mcp-servers.yml`](../../.github/workflows/build-publish-mcp-servers.yml) runs on push to `main`. For each changed package it builds, tests, then runs [semantic-release](https://semantic-release.gitbook.io) (scoped to that package via `semantic-release-monorepo` and this package's `.releaserc.json`, with `npmPublish` disabled since `@semantic-release/npm` only knows how to authenticate with a classic `NPM_TOKEN`, not npm's OIDC trusted publishing). It bumps `package.json`, writes `CHANGELOG.md`, and cuts a GitHub release and matching `nextdns-mcp-v*` tag from the Conventional Commit types on the merged commits (`fix` → patch, `feat` → minor, `BREAKING CHANGE` → major). In the same job, once semantic-release has bumped the version, it compares against what's live on npm and runs `npm publish` directly if they differ. No `NPM_TOKEN` secret: the npm CLI (≥ 11.5.1, hence the explicit upgrade step) detects the GitHub Actions OIDC context from `id-token: write` and exchanges it for a short-lived publish token.\n\nFor publishing to work, `@alpha018/nextdns-mcp` needs a one-time [Trusted Publisher](https://docs.npmjs.com/trusted-publishers) link on npmjs.com (package Settings page) pointing at this repo and the `build-publish-mcp-servers.yml` workflow.\n","readmeFilename":"README.md"}