@yawlabs/caddy-mcp 2.5.6 → 2.5.8

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/README.md CHANGED
@@ -306,7 +306,7 @@ npm install
306
306
  npm run lint # Biome check
307
307
  npm run lint:fix # Auto-fix
308
308
  npm run build # tsup bundle
309
- npm test # Vitest (781 unit tests, +39 POSIX-only unix-socket and launcher tests; +39 live-Caddy integration tests gated by CADDY_MCP_INTEGRATION=1)
309
+ npm test # Vitest (782 unit tests, +39 POSIX-only unix-socket and launcher tests; +39 live-Caddy integration tests gated by CADDY_MCP_INTEGRATION=1)
310
310
  npm run typecheck # tsc --noEmit
311
311
  ```
312
312
 
package/dist/index.js CHANGED
@@ -1633,7 +1633,14 @@ function registerRouteTools(server) {
1633
1633
  "Optional stable @id for the route. When set, repeat calls REPLACE the route in place (idempotent). When omitted, the route is APPENDED \u2014 calling twice with identical args creates a duplicate route. @ids are config-global in Caddy: if this id is already used by a non-route object the call refuses rather than clobbering it."
1634
1634
  )
1635
1635
  },
1636
- { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
1636
+ // destructiveHint is TRUE because the hint covers the whole tool and a host
1637
+ // gates on it before it can see whether the call carries an `id`: with one,
1638
+ // an existing route under that @id is REPLACED wholesale by a PATCH -- its
1639
+ // matchers, its handlers, a subroute holding a whole site's nested routes,
1640
+ // all of it -- which is not the "only additive updates" MCP reserves
1641
+ // destructiveHint:false for. Without an `id` the call only appends. Same
1642
+ // worst-case rule as caddy_config_set and caddy_config_by_id.
1643
+ { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
1637
1644
  async ({ from, to, server: srv, id }) => {
1638
1645
  const match = parseFrom(from.trim());
1639
1646
  if (match.host?.[0]?.trim() === "" || match.host === void 0 && match.path === void 0) {
package/dist/server.js CHANGED
@@ -1631,7 +1631,14 @@ function registerRouteTools(server) {
1631
1631
  "Optional stable @id for the route. When set, repeat calls REPLACE the route in place (idempotent). When omitted, the route is APPENDED \u2014 calling twice with identical args creates a duplicate route. @ids are config-global in Caddy: if this id is already used by a non-route object the call refuses rather than clobbering it."
1632
1632
  )
1633
1633
  },
1634
- { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
1634
+ // destructiveHint is TRUE because the hint covers the whole tool and a host
1635
+ // gates on it before it can see whether the call carries an `id`: with one,
1636
+ // an existing route under that @id is REPLACED wholesale by a PATCH -- its
1637
+ // matchers, its handlers, a subroute holding a whole site's nested routes,
1638
+ // all of it -- which is not the "only additive updates" MCP reserves
1639
+ // destructiveHint:false for. Without an `id` the call only appends. Same
1640
+ // worst-case rule as caddy_config_set and caddy_config_by_id.
1641
+ { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
1635
1642
  async ({ from, to, server: srv, id }) => {
1636
1643
  const match = parseFrom(from.trim());
1637
1644
  if (match.host?.[0]?.trim() === "" || match.host === void 0 && match.path === void 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yawlabs/caddy-mcp",
3
- "version": "2.5.6",
3
+ "version": "2.5.8",
4
4
  "mcpName": "io.github.YawLabs/caddy-mcp",
5
5
  "description": "Caddy MCP server for Claude Code, Cursor, and any MCP client: admin API, config, routes, reverse proxy, TLS, PKI, metrics",
6
6
  "license": "MIT",