diff --git a/app/src/main/java/io/xpipe/app/beacon/mcp/McpToolHandler.java b/app/src/main/java/io/xpipe/app/beacon/mcp/McpToolHandler.java index e20df17cc..1b213026c 100644 --- a/app/src/main/java/io/xpipe/app/beacon/mcp/McpToolHandler.java +++ b/app/src/main/java/io/xpipe/app/beacon/mcp/McpToolHandler.java @@ -123,6 +123,14 @@ public interface McpToolHandler return b; } + public Optional getOptionalFilePath(ShellControl sc, String key) throws Exception { + if (getOptionalStringArgument(key).isEmpty()) { + return Optional.empty(); + } + + return Optional.of(getFilePath(sc, key)); + } + public FilePath getFilePath(ShellControl sc, String key) throws Exception { var s = getStringArgument(key); var path = FilePath.parse(s); diff --git a/app/src/main/java/io/xpipe/app/beacon/mcp/McpTools.java b/app/src/main/java/io/xpipe/app/beacon/mcp/McpTools.java index 4e1b3b213..38fcd2d5f 100644 --- a/app/src/main/java/io/xpipe/app/beacon/mcp/McpTools.java +++ b/app/src/main/java/io/xpipe/app/beacon/mcp/McpTools.java @@ -434,12 +434,13 @@ public final class McpTools { .tool(tool) .callHandler(McpToolHandler.of((req) -> { var system = req.getStringArgument("system"); - var script = req.getDataStoreRef("script"); - var arguments = req.getStringArgument("arguments"); + var script = req.getDataStoreRef(req.getStringArgument("script")); + var arguments = req.getOptionalStringArgument("arguments").orElse(null); var shellStore = req.getShellStoreRef(system, true); var shellSession = AppBeaconServer.get().getCache().getOrStart(shellStore); - var directory = req.getFilePath(shellSession.getControl(), "directory"); + var directory = req.getOptionalFilePath(shellSession.getControl(), "directory") + .orElse(null); var clazz = Class.forName( AppExtensionManager.getInstance()