appleby-proxy-mcp 1.0.0 → 1.0.1

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.
Files changed (3) hide show
  1. package/AGENTS.md +3 -0
  2. package/index.js +8 -6
  3. package/package.json +1 -1
package/AGENTS.md CHANGED
@@ -102,6 +102,9 @@ npm test
102
102
 
103
103
  ## Releases
104
104
 
105
+ - **1.0.1** — `proxy_create_proxy_host` says public hosts need the shared Cloudflare real-IP
106
+ include; access-list tools drop `expand: proxy_hosts` (NPM 2.16 answers 500 — use
107
+ `proxy_host_count`).
105
108
  - **1.0.0** — first release: 43 tools for NPM 2.16 (proxy, redirection and 404 hosts, streams,
106
109
  certificates, access lists, default site, log viewer, audit log).
107
110
 
package/index.js CHANGED
@@ -7,7 +7,7 @@ import { readFileSync, writeFileSync, existsSync } from "fs";
7
7
  import { join } from "path";
8
8
  import { homedir } from "os";
9
9
 
10
- const VERSION = "1.0.0";
10
+ const VERSION = "1.0.1";
11
11
 
12
12
  // --- Interactive setup ---
13
13
 
@@ -224,7 +224,7 @@ server.tool("proxy_get_proxy_host", "Get one proxy host, including its advanced_
224
224
  return { content: text(res) };
225
225
  });
226
226
 
227
- server.tool("proxy_create_proxy_host", "Create a proxy host. NPM writes and reloads nginx immediately; a config nginx rejects is saved as <id>.conf.err and the host goes offline (meta.nginx_online=false) — check the response's meta. For a Forta-gated host on *.appleby.cloud, put `set $forta_client_id \"<client_id>\"; include /data/nginx/custom/forta-gate.conf;` in advanced_config and use a DNS-01 certificate", {
227
+ server.tool("proxy_create_proxy_host", "Create a proxy host. NPM writes and reloads nginx immediately; a config nginx rejects is saved as <id>.conf.err and the host goes offline (meta.nginx_online=false) — check the response's meta. A public host behind Cloudflare needs `include /data/nginx/custom/cloudflare-real-ip.conf;` in advanced_config, or its logs show Cloudflare's edge instead of the client (never add it to a LAN-only host that authorises by IP). For a Forta-gated host on *.appleby.cloud, put `set $forta_client_id \"<client_id>\"; include /data/nginx/custom/forta-gate.conf;` in advanced_config and use a DNS-01 certificate", {
228
228
  domain_names: domainNames,
229
229
  ...proxyHostFields,
230
230
  }, async (args) => {
@@ -455,8 +455,10 @@ const accessListFields = {
455
455
  .describe("IP rules, in order. Replaces the list"),
456
456
  };
457
457
 
458
- server.tool("proxy_list_access_lists", "List NPM access lists (IP allow/deny + basic auth). Passwords are redacted. For appleby.cloud SSO, prefer the Forta gate (see proxy_create_proxy_host) over basic auth", {
459
- expand: expand(["owner", "items", "clients", "proxy_hosts"]),
458
+ // NPM 2.16 answers 500 to expand=proxy_hosts on access lists; proxy_host_count
459
+ // in the plain response says the same thing.
460
+ server.tool("proxy_list_access_lists", "List NPM access lists (IP allow/deny + basic auth) with proxy_host_count. Passwords are redacted. For appleby.cloud SSO, prefer the Forta gate (see proxy_create_proxy_host) over basic auth", {
461
+ expand: expand(["owner", "items", "clients"]),
460
462
  }, async ({ expand: e }) => {
461
463
  const res = await npm("GET", "nginx/access-lists", expandParam(e));
462
464
  return { content: text(res) };
@@ -464,7 +466,7 @@ server.tool("proxy_list_access_lists", "List NPM access lists (IP allow/deny + b
464
466
 
465
467
  server.tool("proxy_get_access_list", "Get one access list", {
466
468
  id,
467
- expand: expand(["owner", "items", "clients", "proxy_hosts"]),
469
+ expand: expand(["owner", "items", "clients"]),
468
470
  }, async ({ id: listId, expand: e }) => {
469
471
  const res = await npm("GET", `nginx/access-lists/${listId}`, expandParam(e));
470
472
  return { content: text(res) };
@@ -483,7 +485,7 @@ server.tool("proxy_update_access_list", "Update an access list. Only the fields
483
485
  return { content: text(res) };
484
486
  });
485
487
 
486
- server.tool("proxy_delete_access_list", "Delete an access list. Hosts using it become public. Check proxy_get_access_list with expand proxy_hosts first", { id }, async ({ id: listId }) => {
488
+ server.tool("proxy_delete_access_list", "Delete an access list. Hosts using it become public. Check its proxy_host_count (proxy_list_access_lists) first", { id }, async ({ id: listId }) => {
487
489
  const res = await npm("DELETE", `nginx/access-lists/${listId}`);
488
490
  return { content: text(res) };
489
491
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appleby-proxy-mcp",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "MCP server for the appleby.cloud Nginx Proxy Manager, through proxy-api (repo: proxy-mcp)",
5
5
  "type": "module",
6
6
  "main": "index.js",