@procedures/mcp-dev-tools 0.6.0 → 0.8.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,44 @@
1
1
  # @procedures/mcp-dev-tools
2
2
 
3
+ ## 0.8.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 3f376af: The root of the files confines each procedure, not only `fs.*` (roadmap R33). `mark --fs-root`, `procedure-server --fs-root` and `MCP_FS_ROOT` start `confineToRoot()` of `@procedures/fs`. Each procedure keeps its paths in the root, or the host refuses it with `FORBIDDEN` and the reason `outside-root`.
8
+
9
+ This change is breaking under a root. The hosts refuse procedures that they ran before: `git.*`, `pnpm.*`, `docker.run`, `docker.build`, `docker.compose.*`, a call of `shell.run`, and each procedure that reaches files without `metadata.fsRoot`. `lib.scan` of a workspace outside the root gives `FORBIDDEN`, not a warning. Without a root, nothing changes. The list of the MCP tools does not change.
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [4b09a03]
14
+ - Updated dependencies [4b09a03]
15
+ - Updated dependencies [aa6e3aa]
16
+ - Updated dependencies [698e24d]
17
+ - Updated dependencies [4b09a03]
18
+ - Updated dependencies [600c497]
19
+ - Updated dependencies [7c2e7f7]
20
+ - Updated dependencies [90ea741]
21
+ - Updated dependencies [90ea741]
22
+ - Updated dependencies [c4cfa34]
23
+ - Updated dependencies [d25805a]
24
+ - @procedures/client@0.8.0
25
+ - @procedures/fs@0.8.0
26
+ - @procedures/bundle-mcp@0.8.0
27
+ - @procedures/mcp-server@0.8.0
28
+ - @procedures/compiler@0.8.0
29
+
30
+ ## 0.7.0
31
+
32
+ ### Patch Changes
33
+
34
+ - Updated dependencies [841d083]
35
+ - Updated dependencies [389b054]
36
+ - @procedures/client@0.7.0
37
+ - @procedures/bundle-mcp@0.7.0
38
+ - @procedures/fs@0.7.0
39
+ - @procedures/mcp-server@0.7.0
40
+ - @procedures/compiler@0.7.0
41
+
3
42
  ## 0.6.0
4
43
 
5
44
  ### Patch Changes
package/README.md CHANGED
@@ -45,30 +45,37 @@ Claude Code starts the server once for each session. After a rebuild, restart th
45
45
  | `MCP_READ_ONLY` | `false` | With `true`, the tools are only the procedures that change nothing |
46
46
  | `MCP_HTTP_PORT`, `MCP_HTTP_HOST`, `MCP_HTTP_TOKEN` | not set | The server uses Streamable HTTP on this port, not stdio. The host is `127.0.0.1` by default. |
47
47
  | `MCP_PROGRAM_CHECK` | `true` | With `false`, a program starts without the check before the run |
48
- | `MCP_FS_ROOT` | not set | The folder that confines each path of the `fs.*` procedures. Refer to "The root of the file procedures". |
48
+ | `MCP_FS_ROOT` | not set | The root of the files: each tool keeps its paths in this folder, or the host refuses it. Refer to "The root of the files". |
49
49
 
50
50
  `mark mcp` starts the same server. Its flags replace the variables: `--bundles`, `--tool-timeout`, `--read-only`, `--http`, `--host`, `--token` and `--fs-root`.
51
51
 
52
52
  The server serves no remote events (`documentation/EVENTS.md`). Its transport carries only MCP, and `events.subscribe` is not a tool. Thus the host has no variable for the topics.
53
53
 
54
- ## The root of the file procedures
54
+ ## The root of the files
55
55
 
56
- With `MCP_FS_ROOT` (or `mark mcp --fs-root <folder>`), the host confines each path of the `fs.*` procedures to the folder (roadmap R33):
56
+ With `MCP_FS_ROOT` (or `mark mcp --fs-root <folder>`), the host confines each tool to the folder (roadmap R33):
57
57
 
58
- - The host starts `confineFsProcedures()` of `@procedures/fs` after it builds its registry. The function replaces the handlers of the `fs.*` procedures, and it adds no procedure.
59
- - `fs` is not a tool namespace, so the tools and `tools.snapshot.txt` do not change. Only the behavior of the tools changes.
60
- - A tool reads files through nested `fs.*` calls, so the root confines these calls too. For example, `lib.scan` of a workspace outside the root gives a warning and no packages.
61
- - A path outside the root gives `FORBIDDEN` with the reason `outside-root`. A relative path starts at the root.
58
+ - The host starts `confineToRoot()` of `@procedures/fs` after it builds its registry. The function replaces handlers, and it adds no procedure.
59
+ - The list of the tools and `tools.snapshot.txt` do not change. The host refuses some tools under a root.
60
+ - A tool keeps its paths in the root. The host examines the path inputs of its rules (`metadata.fsRoot`) before it starts. The nested `fs.*` calls are confined too.
61
+ - A path outside the root gives `FORBIDDEN` with the reason `outside-root`. A relative path starts at the root. A working folder without a value is the root.
62
+ - The host refuses each tool that the root cannot confine, with the same error. At the start, it writes the refused procedures to stderr.
62
63
  - The host does not start when the folder does not exist.
63
64
 
64
- The root does not confine a procedure that reads files with `node:fs`, or that starts a program. In the tools of `bundle-mcp`, these are:
65
+ The tools of `bundle-mcp` under a root:
65
66
 
66
- - `lib.*`: `existsSync` of `pnpm-workspace.yaml`, and the TypeScript files of `lib.rename` (`ts-morph`). The `cue-config` program of `lib.new` writes files too.
67
- - `cue.generate` and `cue.validate`: the `cue` program, and the read of `dependencies.json`.
68
- - `git.*`, `docker.*`, `pnpm.*` and `vitest.*`: their programs. `git.init` also uses `realpath` and `access`, and `vitest.run` reads its JSON report.
69
- - `sqlite.*` and `logs.*`: the database file.
67
+ | Tools | Under a root |
68
+ |---|---|
69
+ | `cue.*` | Confined: `cwd` |
70
+ | `lib.scan`, `lib.graph`, `lib.audit`, `lib.rename` | Confined: `rootPath`. Their nested git calls are refused, and `lib.scan` gives a warning. |
71
+ | `procedure.new` | Confined: `path` |
72
+ | `sqlite.*`, `logs.*` | Confined: `dbPath`, which a call must give, or `:memory:` |
73
+ | `docker.ps`, `docker.logs`, `docker.stop`, `docker.rm`, `docker.images`, `docker.inspect`, `docker.pull`, `docker.tag`, `docker.volume.*`, `docker.network.*` | Confined: `cwd`. Docker runs in a folder of the root. |
74
+ | `docker.run`, `docker.exec`, `docker.build`, `docker.compose.*` | Refused: a volume, a compose file or a Dockerfile reaches host folders, or runs a program |
75
+ | `lib.new`, `vitest.run`, `vitest.coverage` | Refused: they start code of the project |
76
+ | `client.*`, `json.*`, `yaml.*`, `mongo.*`, `program.*`, the other `procedure.*` tools | Unchanged: they reach no file |
70
77
 
71
- `cue.init`, `cue.add`, `cue.remove` and `procedure.new` use only `fs.*`, so the root confines them completely. Each `cue.*` procedure except `cue.remove` reads `features.json` of the installed `@mark1russell7/cue` through `fs.read`. Thus they fail when that package is outside the root.
78
+ The rules and the table of all the procedures are in [CAPABILITIES-2026-10.md](../documentation/CAPABILITIES-2026-10.md#the-root-of-the-files-roadmap-r33).
72
79
 
73
80
  ## How it selects the tools
74
81