0ee70178ef
v0.8.26 surfaced the spawn-error tail (`Stdio transport closed` → the underlying EACCES/sandbox-deny line). v0.8.27 closes the second half of the report: users no longer need to manually `/mcp reload` after editing `~/.deepseek/mcp.json`. `McpPool` gained three fields: a `config_source` path (set when the pool is built via `from_config_path`), a 64-bit content hash of the active config, and the most recently observed mtime of the source file. `reload_if_config_changed` does a cheap `stat` first; on mtime-equal it returns immediately. Only when the mtime has moved does the pool re-read the file, hash it, and compare to the stored hash — content-unchanged reloads (e.g. `touch` on a networked FS) are skipped. On a real content change the connections map is cleared so the next `get_or_connect` reattaches under the new config (sandbox flags, env, args, server set). `get_or_connect` now invokes `reload_if_config_changed` at entry and swallows its errors (a transient stat/parse failure can't take down the existing pool). Pools built via `McpPool::new` (tests, ad-hoc snapshots) are unaffected — they have no source path and short-circuit out. No file watcher, no long-lived task, no signature changes for the existing callers. Closes the part-2 follow-up on #1267. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>