jevsnes.git / tools / mcp / CLAUDE.md
1@README.md
2
3- **`launch.sh` must never build, wait, or enter `nix develop`.** Its whole
4  job is to answer inside the client's 30 s startup timeout on an empty
5  `buck-out`. Anything slow goes in `install.sh`.
6- **Nothing but JSON-RPC on `launch.sh`'s stdout.** Diagnostics go to stderr;
7  the one stdout line it may write itself is the error reply to
8  `initialize`. Same rule as the proxy's (`../../apps/native/CLAUDE.md`).
9- `run/bin/native` is a copy, not a symlink into `buck-out`, on purpose - see
10  the comment in `install.sh`. Do not "simplify" it into a symlink.
11- Test a change with `tools/mcp/test.sh`: scripted stdio, timed, in a bare
12  environment (`env -i PATH=/usr/bin:/bin`, all a profile-less NixOS process
13  gets), with and without a binary, against a scratch copy of the layout so
14  the real `run/bin` is never moved.
15- **`launch.sh` uses bash builtins only.** In that bare environment
16  `dirname`, `sed` and `jq` do not exist; a `dirname` there made the repo
17  root "" and the launcher looked for `//run/bin/native` (2026-09-21).
18- Keep both scripts shellcheck-clean: `nix develop -c shellcheck tools/mcp/*.sh`.