Fix gateway bot Claude Code cwd so MCP tools are discovered

In gateway mode the bot's Claude Code CLI was spawned with cwd set to
a nonexistent project subdirectory (gateway_config_dir/project_name).
This meant it couldn't find .mcp.json and had no MCP tools available.

Now the bot uses the gateway config directory as cwd in gateway mode,
where the auto-generated .mcp.json points to the gateway's MCP proxy.

Also fixes cargo fmt formatting.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Timmy
2026-04-21 12:15:04 +01:00
parent e7deb65e45
commit 09151e37ef
2 changed files with 20 additions and 9 deletions
@@ -207,8 +207,10 @@ pub(super) async fn on_room_message(
&& (crate::chat::commands::commands()
.iter()
.any(|c| c.name == cmd)
|| ["assign", "start", "delete", "rebuild", "rmtree", "htop", "timer"]
.contains(&cmd.as_str()));
|| [
"assign", "start", "delete", "rebuild", "rmtree", "htop", "timer",
]
.contains(&cmd.as_str()));
if is_known_command {
// Proxy to the active project server.
@@ -643,12 +645,18 @@ pub(super) async fn handle_message(
let sent_any_chunk = Arc::new(AtomicBool::new(false));
let sent_any_chunk_for_callback = Arc::clone(&sent_any_chunk);
// In gateway mode, run Claude Code in the active project's directory.
let project_root_str = ctx
.effective_project_root()
.await
.to_string_lossy()
.to_string();
// In gateway mode, run Claude Code in the gateway config directory so it
// picks up the `.mcp.json` that points to the gateway's MCP proxy endpoint.
// The gateway proxies tool calls to the active project automatically.
// In standalone mode, use the project root directly.
let project_root_str = if ctx.is_gateway() {
ctx.project_root.to_string_lossy().to_string()
} else {
ctx.effective_project_root()
.await
.to_string_lossy()
.to_string()
};
let chat_fut = provider.chat_stream(
&prompt,
&project_root_str,