{"_id":"@archawat/mcp-cloudflare","_rev":"2-cbe87fb6d25146ea0e6d9b11286ec542","name":"@archawat/mcp-cloudflare","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@archawat/mcp-cloudflare","version":"1.0.0","keywords":["mcp","model-context-protocol","cloudflare","dns","claude"],"author":{"name":"archawat"},"license":"MIT","_id":"@archawat/mcp-cloudflare@1.0.0","maintainers":[{"name":"archawat","email":"archawat.l@gmail.com"}],"homepage":"https://github.com/archawat/mcp-cloudflare#readme","bugs":{"url":"https://github.com/archawat/mcp-cloudflare/issues"},"bin":{"mcp-cloudflare":"dist/index.js"},"dist":{"shasum":"5ef899bbc49179c9cfc40a6df83ada24f36cb1ab","tarball":"https://registry.npmjs.org/@archawat/mcp-cloudflare/-/mcp-cloudflare-1.0.0.tgz","fileCount":4,"integrity":"sha512-ijN0SgCB7Hx/mqH41HhsTl0N4zunF80q31NrUQKS4ei+9L1f74FqAvNhaD6Nh6tV0yks3l3jnjcoZF0oXPInuw==","signatures":[{"sig":"MEQCIGBeTDDM2bTe6i7Nk2Vag7N4DLcAXGI5gQgpFE+B8ODZAiAwpBIsaGl+ZQClEhAeZreEjxXqF526A+PaV2jR3VdRGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34471},"type":"module","engines":{"node":">=18"},"gitHead":"3c53b9eec5dcd852f01fee5a04385cf2faf1d69a","scripts":{"dev":"bun --watch src/index.ts","build":"tsc && chmod +x dist/index.js","clean":"rm -rf dist","start":"bun src/index.ts","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"archawat","email":"archawat.l@gmail.com"},"repository":{"url":"git+https://github.com/archawat/mcp-cloudflare.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP server for managing Cloudflare DNS records across multiple domains from one API token","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-cloudflare_1.0.0_1777010233831_0.4265569842873598","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@archawat/mcp-cloudflare","version":"1.0.1","description":"MCP server for managing Cloudflare DNS records across multiple domains from one API token","type":"module","bin":{"mcp-cloudflare":"dist/index.js"},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/archawat/mcp-cloudflare.git"},"homepage":"https://github.com/archawat/mcp-cloudflare#readme","bugs":{"url":"https://github.com/archawat/mcp-cloudflare/issues"},"author":{"name":"archawat"},"scripts":{"start":"bun src/index.ts","dev":"bun --watch src/index.ts","build":"tsc && chmod +x dist/index.js","typecheck":"tsc --noEmit","clean":"rm -rf dist","prepack":"npm run build"},"keywords":["mcp","model-context-protocol","cloudflare","dns","claude"],"license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.27.1","zod":"^4.3.6"},"devDependencies":{"@types/bun":"latest","typescript":"^5.5.0"},"gitHead":"7685c1240f3955f3f08853bc1dd9d634a452e327","_id":"@archawat/mcp-cloudflare@1.0.1","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-k/zXkw67m7cKZ3o1rvFTeTE+Vx3Kb75AIMgAQVTjLanopStQ9bQl7cI4rYPR4okwZ3mipElJti9Eo90RQ1zeww==","shasum":"c48ca33dbe9e9496049c19156f29cb1906d717db","tarball":"https://registry.npmjs.org/@archawat/mcp-cloudflare/-/mcp-cloudflare-1.0.1.tgz","fileCount":12,"unpackedSize":37621,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCzUZi85tyXhzluvgtFSlSga+3Hy3DlQz3tIN04yHbRJQIhAOEKGlNzHfjlY2Mm7VrsBUNSduIVcW5FRx01dIDzYqfd"}]},"_npmUser":{"name":"archawat","email":"archawat.l@gmail.com"},"directories":{},"maintainers":[{"name":"archawat","email":"archawat.l@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-cloudflare_1.0.1_1777103718975_0.9546965022910143"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-24T05:57:13.627Z","modified":"2026-04-25T07:55:19.231Z","1.0.0":"2026-04-24T05:57:13.968Z","1.0.1":"2026-04-25T07:55:19.118Z"},"bugs":{"url":"https://github.com/archawat/mcp-cloudflare/issues"},"author":{"name":"archawat"},"license":"MIT","homepage":"https://github.com/archawat/mcp-cloudflare#readme","keywords":["mcp","model-context-protocol","cloudflare","dns","claude"],"repository":{"type":"git","url":"git+https://github.com/archawat/mcp-cloudflare.git"},"description":"MCP server for managing Cloudflare DNS records across multiple domains from one API token","maintainers":[{"name":"archawat","email":"archawat.l@gmail.com"}],"readme":"# @archawat/mcp-cloudflare\n\nModel Context Protocol (MCP) server for managing Cloudflare DNS across multiple zones (domains) from a single API token. Built for bulk workflows — flipping proxy on/off across many records, auditing DNS across zones, and batched record updates.\n\n## Features\n\n- **Multi-zone from one token** — pass a domain name like `\"example.com\"` and the server resolves the zone for you. Zone IDs also accepted.\n- **Bulk operations** — `bulk_toggle_proxy`, `bulk_update_dns_record`, and `bulk_list_dns_records` run concurrently and share a per-invocation zone-ID cache so repeated zones don't cost extra lookups.\n- **Safe defaults** — new A/CNAME records are created with `proxied: false` (DNS-only, grey cloud). Proxy is opt-in.\n- **Auto-pagination** — `list_dns_records` fetches every page in parallel unless you ask for a specific one.\n\n## Install\n\nNo local install required — use `npx` or `bunx` to run it on demand.\n\n### Claude Code / Claude Desktop (`.mcp.json`)\n\nVia `npx` (Node):\n\n```json\n{\n  \"mcpServers\": {\n    \"cloudflare\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@archawat/mcp-cloudflare\"],\n      \"env\": { \"CLOUDFLARE_API_TOKEN\": \"cf-token-here\" }\n    }\n  }\n}\n```\n\nVia `bunx` (Bun):\n\n```json\n{\n  \"mcpServers\": {\n    \"cloudflare\": {\n      \"command\": \"bunx\",\n      \"args\": [\"-y\", \"@archawat/mcp-cloudflare\"],\n      \"env\": { \"CLOUDFLARE_API_TOKEN\": \"cf-token-here\" }\n    }\n  }\n}\n```\n\n### Claude Code CLI\n\n```bash\nclaude mcp add cloudflare -s user \\\n  -e CLOUDFLARE_API_TOKEN=\"cf-token-here\" \\\n  -- npx -y @archawat/mcp-cloudflare\n```\n\n### Global install (fastest cold-start)\n\n```bash\nnpm install -g @archawat/mcp-cloudflare\n# or: bun add -g @archawat/mcp-cloudflare\n```\n\nThe global bin is named `mcp-cloudflare` (unscoped), so:\n\n```json\n{\n  \"mcpServers\": {\n    \"cloudflare\": {\n      \"command\": \"mcp-cloudflare\",\n      \"env\": { \"CLOUDFLARE_API_TOKEN\": \"cf-token-here\" }\n    }\n  }\n}\n```\n\n## API Token\n\nCreate a Cloudflare token at <https://dash.cloudflare.com/profile/api-tokens> with:\n\n- `Zone:Read`\n- `Zone:DNS:Edit`\n\nScope the token to the zones you want to manage, or grant \"All zones\".\n\n## Tools\n\n| Tool | Purpose |\n|---|---|\n| `list_zones` | Discover which domains the token can manage. |\n| `list_dns_records` | List records in a zone; auto-paginates across all pages unless `page` is set. |\n| `bulk_list_dns_records` | List records across many zones in one call. Concurrent per-zone. |\n| `create_a_record` | Create an A record. `proxied` defaults to `false`. |\n| `create_cname_record` | Create a CNAME record. `proxied` defaults to `false`. |\n| `toggle_proxy` | Flip proxy on/off by record ID, or by name (+ optional type). |\n| `bulk_toggle_proxy` | Flip proxy for many records in one call (shared `proxied` value). |\n| `update_dns_record` | Patch `content`, `ttl`, `proxied`, or `comment` on a record. |\n| `bulk_update_dns_record` | Patch many records in one call with per-item fields. |\n| `delete_dns_record` | Delete a record by ID. Destructive. |\n\nAll tools accept either a domain name (`\"example.com\"`) or a 32-char zone ID as the `zone` argument.\n\n### Bulk result shape\n\nBulk tools return per-item results; a single failure doesn't abort the batch:\n\n```json\n{\n  \"succeeded\": 10,\n  \"failed\": 1,\n  \"results\": [\n    { \"zone\": \"example.com\", \"ok\": true,  \"record\": { \"id\": \"…\", \"proxied\": true } },\n    { \"zone\": \"other.com\",   \"ok\": false, \"error\": \"No proxyable record found for 'www.other.com'.\" }\n  ]\n}\n```\n\n`isError: true` is set on the tool response whenever any item fails, while still returning every result.\n\n## Development\n\nRequires Bun (recommended) or Node 18+.\n\n```bash\nbun install\nbun run dev         # run src/index.ts with --watch\nbun run start       # run src/index.ts once\nbun run typecheck   # tsc --noEmit\nbun run build       # emit dist/ for publishing\n```\n\nTo run the dev copy as the MCP server instead of the published package, point `.mcp.json` at your local build:\n\n```json\n{\n  \"mcpServers\": {\n    \"cloudflare\": {\n      \"command\": \"bun\",\n      \"args\": [\"/abs/path/to/mcp-cloudflare/src/index.ts\"],\n      \"env\": { \"CLOUDFLARE_API_TOKEN\": \"cf-token-here\" }\n    }\n  }\n}\n```\n\nThe server speaks stdio — your MCP client spawns the process and communicates over stdin/stdout.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}