This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 8d67464989a75b2c2d5433f43c9bc8d358eed309
Author: Andrus Adamchik <[email protected]>
AuthorDate: Tue May 19 12:09:45 2026 -0400

    CAY-2943
    
    cleanup, refactoring
---
 .../cayenne/mcp/tools/openproject/OpenProjectTool.java | 18 ++++++++++++------
 .../mcp/tools/openproject/HandshakeWatcherTest.java    |  3 ++-
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git 
a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/openproject/OpenProjectTool.java
 
b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/openproject/OpenProjectTool.java
index b29e6d270..c67a179be 100644
--- 
a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/openproject/OpenProjectTool.java
+++ 
b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/openproject/OpenProjectTool.java
@@ -134,14 +134,20 @@ public class OpenProjectTool {
         // Step 3 — discover a Modeler installation.
         OsKind osKind = OsKind.detect();
         DiscoveryResult discovery = ModelerDiscovery.discover(mcpDir.get(), 
osKind);
-        if (discovery instanceof NotFound nf) {
-            String notes = String.join("; ", nf.probeNotes());
-            return validationFailed(OpenProjectErrorCode.modeler_not_found,
+        return switch (discovery) {
+            case Found f -> launchAndAwait(f, projectFile);
+            case NotFound nf -> 
validationFailed(OpenProjectErrorCode.modeler_not_found,
                     "No CayenneModeler installation found relative to MCP jar 
at %s. Probes: %s"
-                            .formatted(mcpDir.get(), notes),
+                            .formatted(mcpDir.get(), String.join("; ", 
nf.probeNotes())),
                     new OpenProjectValidation(true, true, false));
-        }
-        Found found = (Found) discovery;
+        };
+    }
+
+    /**
+     * Steps 4-5 of the open-project flow: spawn the Modeler with the 
handshake nonce
+     * and wait for it to confirm a successful project load.
+     */
+    private OpenProjectResult launchAndAwait(Found found, Path projectFile) {
         OpenProjectValidation allPassed = new OpenProjectValidation(true, 
true, true);
 
         // Step 4 — launch.
diff --git 
a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/openproject/HandshakeWatcherTest.java
 
b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/openproject/HandshakeWatcherTest.java
index 79af1435a..a429405a6 100644
--- 
a/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/openproject/HandshakeWatcherTest.java
+++ 
b/cayenne-mcp-server/src/test/java/org/apache/cayenne/mcp/tools/openproject/HandshakeWatcherTest.java
@@ -52,7 +52,8 @@ public class HandshakeWatcherTest {
 
     @Test
     public void handshakeReceivedReadsPidAndPath() throws 
BackingStoreException {
-        Preferences node = Preferences.userRoot()
+        Preferences node = Preferences
+                .userRoot()
                 .node(HandshakeWatcher.NODE_PREFIX + "/" + nonce);
         node.putLong("pid", 4242L);
         node.put("startedAt", "2026-05-17T10:00:00Z");

Reply via email to