lattice-mcp 1.2.0 → 1.3.0

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 +22 -0
  2. package/index.js +1 -1
  3. package/package.json +1 -1
package/AGENTS.md CHANGED
@@ -227,6 +227,28 @@ kind this repo's rules warn about:
227
227
  the API allocates a free port from 20000-29999 and returns 409 naming the conflict if you pin one
228
228
  that is taken.
229
229
 
230
+ **1.3.0** masks secrets in every response. No tool count change (133).
231
+
232
+ `api()` now passes every decoded response through `sanitise()` before returning it — see
233
+ *Sensitive value masking* under *How code is written here* for the rules. This closes a real leak
234
+ rather than a theoretical one: this MCP authenticates as a Lattice **admin**, and `lattice-api`
235
+ only masks global env vars server-side for *non-admin* callers
236
+ (`HandleGlobalEnvVars.router.go:39`), so `lattice_list_env_vars` was returning every `is_secret`
237
+ value in plaintext — while its own description claimed they were masked. Container and stack
238
+ `env_vars`, `compose_yaml` environment blocks, database passwords and freshly minted
239
+ deploy/worker/API tokens were all reaching the transcript verbatim too.
240
+
241
+ Masked values keep their **first two characters** and get a fixed-width tail
242
+ (`"supersecret"` → `"su**********"`), so they stay comparable without staying usable. Set
243
+ `LATTICE_ALLOW_SECRET_VALUES=1` to opt out.
244
+
245
+ Three tool descriptions changed to match reality: `lattice_list_env_vars` (which was lying),
246
+ `lattice_reveal_database_credentials`, `lattice_create_deploy_token` and
247
+ `lattice_create_worker_token` now each say the value comes back masked and where to get the real
248
+ one. `verify.mjs` gained a tripwire asserting `sanitise()` is still wired into `api()` and still
249
+ defaults to on — unwiring that single call is a silent, total regression that no other check
250
+ would notice.
251
+
230
252
  **Consolidations.** Where `lattice-api` exposes several paths served by one handler, this repo
231
253
  exposes one tool with an enum rather than N tools. `lattice_database_action` covers
232
254
  `/start`, `/stop`, `/restart` and `/remove`. Worker actions are the historical exception — they
package/index.js CHANGED
@@ -221,7 +221,7 @@ function body(obj) {
221
221
 
222
222
  const server = new McpServer({
223
223
  name: "lattice",
224
- version: "1.2.0",
224
+ version: "1.3.0",
225
225
  });
226
226
 
227
227
  // Overview
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lattice-mcp",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "MCP server for Lattice container orchestration platform",
5
5
  "type": "module",
6
6
  "main": "index.js",