|
6 | 6 | "os/exec" |
7 | 7 | "path/filepath" |
8 | 8 |
|
9 | | - "github.com/kagent-dev/kmcp/pkg/cli/internal/manifest" |
10 | 9 | "github.com/spf13/cobra" |
| 10 | + |
| 11 | + "github.com/kagent-dev/kmcp/pkg/cli/internal/manifest" |
11 | 12 | ) |
12 | 13 |
|
13 | 14 | var runCmd = &cobra.Command{ |
@@ -82,6 +83,8 @@ func executeRun(_ *cobra.Command, _ []string) error { |
82 | 83 | return runMCPGo(projectDir, manifest) |
83 | 84 | case "typescript": |
84 | 85 | return runTypeScript(projectDir, manifest) |
| 86 | + case "java": |
| 87 | + return runJava(projectDir, manifest) |
85 | 88 | default: |
86 | 89 | return fmt.Errorf("unsupported framework: %s", manifest.Framework) |
87 | 90 | } |
@@ -279,3 +282,52 @@ func runTypeScript(projectDir string, manifest *manifest.ProjectManifest) error |
279 | 282 | // Run the inspector |
280 | 283 | return runMCPInspector(configPath, manifest.Name, projectDir) |
281 | 284 | } |
| 285 | + |
| 286 | +func runJava(projectDir string, manifest *manifest.ProjectManifest) error { |
| 287 | + // Check if mvn is available |
| 288 | + if _, err := exec.LookPath("mvn"); err != nil { |
| 289 | + mvnInstallURL := "https://maven.apache.org/install.html" |
| 290 | + return fmt.Errorf("mvn is required to run Java projects locally. Please install Maven: %s", mvnInstallURL) |
| 291 | + } |
| 292 | + |
| 293 | + // Run mvn clean install first to ensure dependencies are up to date |
| 294 | + if Verbose { |
| 295 | + fmt.Printf("Running mvn clean install in: %s\n", projectDir) |
| 296 | + } |
| 297 | + installCmd := exec.Command("mvn", "clean", "install", "-DskipTests") |
| 298 | + installCmd.Dir = projectDir |
| 299 | + installCmd.Stdout = os.Stdout |
| 300 | + installCmd.Stderr = os.Stderr |
| 301 | + if err := installCmd.Run(); err != nil { |
| 302 | + return fmt.Errorf("failed to run mvn clean install: %w", err) |
| 303 | + } |
| 304 | + |
| 305 | + if noInspector { |
| 306 | + // Run the server directly |
| 307 | + fmt.Printf("Running server directly: mvn exec:java -Dexec.mainClass=\"com.example.Main\"\n") |
| 308 | + fmt.Printf("Server is running and waiting for MCP protocol input on stdin...\n") |
| 309 | + fmt.Printf("Press Ctrl+C to stop the server\n") |
| 310 | + |
| 311 | + serverCmd := exec.Command("mvn", "exec:java", "-Dexec.mainClass=com.example.Main") |
| 312 | + serverCmd.Dir = projectDir |
| 313 | + serverCmd.Stdout = os.Stdout |
| 314 | + serverCmd.Stderr = os.Stderr |
| 315 | + serverCmd.Stdin = os.Stdin |
| 316 | + return serverCmd.Run() |
| 317 | + } |
| 318 | + |
| 319 | + // Create server configuration for inspector |
| 320 | + serverConfig := map[string]interface{}{ |
| 321 | + "command": "mvn", |
| 322 | + "args": []string{"exec:java", "-Dexec.mainClass=com.example.Main"}, |
| 323 | + } |
| 324 | + |
| 325 | + // Create MCP inspector config |
| 326 | + configPath := filepath.Join(projectDir, "mcp-server-config.json") |
| 327 | + if err := createMCPInspectorConfig(manifest.Name, serverConfig, configPath); err != nil { |
| 328 | + return err |
| 329 | + } |
| 330 | + |
| 331 | + // Run the inspector |
| 332 | + return runMCPInspector(configPath, manifest.Name, projectDir) |
| 333 | +} |
0 commit comments