@@ -148,6 +148,11 @@ pub struct SecurityScanTool {
148148impl SecurityScanTool {
149149 pub fn call_tool ( & self ) -> Result < CallToolResult , CallToolError > {
150150 let project_path_str = self . path . as_deref ( ) . unwrap_or ( "." ) ;
151+
152+ // Log to stderr so we don't interfere with MCP stdout JSON messages
153+ eprintln ! ( "🔒 Scanning project for security: {}" , project_path_str) ;
154+ eprintln ! ( "➡️ Calling syncable_cli::handle_security..." ) ;
155+
151156 let security_results = syncable_cli:: handle_security (
152157 Path :: new ( project_path_str) . to_path_buf ( ) ,
153158 syncable_cli:: cli:: SecurityScanMode :: Balanced ,
@@ -157,7 +162,7 @@ impl SecurityScanTool {
157162 false ,
158163 false ,
159164 vec ! [ ] ,
160- syncable_cli:: cli:: OutputFormat :: Table ,
165+ syncable_cli:: cli:: OutputFormat :: Json ,
161166 None ,
162167 false ,
163168 ) ;
@@ -169,10 +174,26 @@ impl SecurityScanTool {
169174 e
170175 )
171176 } ) ;
172- Ok ( CallToolResult :: text_content ( vec ! [ TextContent :: new( json_output, None , None ) ] ) )
177+
178+ eprintln ! ( "✅ handle_security returned ({} bytes)" , json_output. len( ) ) ;
179+
180+ // Validate JSON to ensure it's well-formed
181+ match serde_json:: from_str :: < serde_json:: Value > ( & json_output) {
182+ Ok ( _) => {
183+ eprintln ! ( "✅ JSON validation passed" ) ;
184+ eprintln ! ( "📤 Sending full response ({} bytes)" , json_output. len( ) ) ;
185+ Ok ( CallToolResult :: text_content ( vec ! [ TextContent :: new( json_output, None , None ) ] ) )
186+ }
187+ Err ( e) => {
188+ eprintln ! ( "⚠️ JSON validation failed: {}" , e) ;
189+ eprintln ! ( "First 500 chars: {}" , & json_output[ ..std:: cmp:: min( 500 , json_output. len( ) ) ] ) ;
190+ return Err ( CallToolError :: new ( AnalyzeToolError ( format ! ( "Invalid JSON response: {}" , e) ) ) ) ;
191+ }
192+ }
173193 }
174194 Err ( e) => {
175195 let error_message = format ! ( "Failed to analyze project for security: {}" , e) ;
196+ eprintln ! ( "❌ handle_security error: {}" , & error_message) ;
176197 Err ( CallToolError :: new ( AnalyzeToolError ( error_message) ) )
177198 }
178199 }
@@ -191,13 +212,18 @@ pub struct DependencyScanTool {
191212impl DependencyScanTool {
192213 pub async fn call_tool ( & self ) -> Result < CallToolResult , CallToolError > {
193214 let project_path_str = self . path . as_deref ( ) . unwrap_or ( "." ) ;
215+
216+ // Log to stderr so we don't interfere with MCP stdout JSON messages
217+ eprintln ! ( "📦 Scanning project for dependencies: {}" , project_path_str) ;
218+ eprintln ! ( "➡️ Calling syncable_cli::handle_dependencies..." ) ;
219+
194220 let dependency_results = syncable_cli:: handle_dependencies (
195221 Path :: new ( project_path_str) . to_path_buf ( ) ,
196222 false ,
197223 false ,
198224 false ,
199225 false ,
200- syncable_cli:: cli:: OutputFormat :: Table ,
226+ syncable_cli:: cli:: OutputFormat :: Json ,
201227 )
202228 . await ;
203229 match dependency_results {
@@ -208,10 +234,26 @@ impl DependencyScanTool {
208234 e
209235 )
210236 } ) ;
211- Ok ( CallToolResult :: text_content ( vec ! [ TextContent :: new( json_output, None , None ) ] ) )
237+
238+ eprintln ! ( "✅ handle_dependencies returned ({} bytes)" , json_output. len( ) ) ;
239+
240+ // Validate JSON to ensure it's well-formed
241+ match serde_json:: from_str :: < serde_json:: Value > ( & json_output) {
242+ Ok ( _) => {
243+ eprintln ! ( "✅ JSON validation passed" ) ;
244+ eprintln ! ( "📤 Sending full response ({} bytes)" , json_output. len( ) ) ;
245+ Ok ( CallToolResult :: text_content ( vec ! [ TextContent :: new( json_output, None , None ) ] ) )
246+ }
247+ Err ( e) => {
248+ eprintln ! ( "⚠️ JSON validation failed: {}" , e) ;
249+ eprintln ! ( "First 500 chars: {}" , & json_output[ ..std:: cmp:: min( 500 , json_output. len( ) ) ] ) ;
250+ return Err ( CallToolError :: new ( AnalyzeToolError ( format ! ( "Invalid JSON response: {}" , e) ) ) ) ;
251+ }
252+ }
212253 }
213254 Err ( e) => {
214255 let error_message = format ! ( "Failed to analyze project for dependencies: {}" , e) ;
256+ eprintln ! ( "❌ handle_dependencies error: {}" , & error_message) ;
215257 Err ( CallToolError :: new ( AnalyzeToolError ( error_message) ) )
216258 }
217259 }
0 commit comments