diff --git a/crates/mcp-client/src/transport/stdio.rs b/crates/mcp-client/src/transport/stdio.rs index 0b3a44caf0fd..0986371388e3 100644 --- a/crates/mcp-client/src/transport/stdio.rs +++ b/crates/mcp-client/src/transport/stdio.rs @@ -228,9 +228,22 @@ impl StdioTransport { #[cfg(windows)] command.creation_flags(0x08000000); // CREATE_NO_WINDOW flag - let mut process = command - .spawn() - .map_err(|e| Error::StdioProcessError(e.to_string()))?; + let mut process = command.spawn().map_err(|e| { + let command = command.into_std(); + Error::StdioProcessError(format!( + "Could not run extension command (`{} {}`): {}", + command + .get_program() + .to_str() + .unwrap_or("[invalid command]"), + command + .get_args() + .map(|arg| arg.to_str().unwrap_or("[invalid arg]")) + .collect::>() + .join(" "), + e + )) + })?; let stdin = process .stdin diff --git a/documentation/docs/troubleshooting.md b/documentation/docs/troubleshooting.md index fcd582a4c7b5..d2d66469bb88 100644 --- a/documentation/docs/troubleshooting.md +++ b/documentation/docs/troubleshooting.md @@ -172,7 +172,7 @@ When the keyring is disabled, secrets are stored here: Many of the external extensions require a package runner. For example, if you run into an error like this one: ``` -Failed to start extension: {extension name}, "No such file or directory (os error 2)" +Failed to start extension `{extension name}`: Could not run extension command (`{extension command}`): No such file or directory (os error 2) Please check extension configuration for {extension name}. ```