create the working dir if it doesn't exist (#147)

diff --git a/pkgs/dart_mcp_server/lib/src/utils/cli_utils.dart b/pkgs/dart_mcp_server/lib/src/utils/cli_utils.dart
index 44e2389..bfacc6c 100644
--- a/pkgs/dart_mcp_server/lib/src/utils/cli_utils.dart
+++ b/pkgs/dart_mcp_server/lib/src/utils/cli_utils.dart
@@ -214,9 +214,12 @@
   }
   commandWithPaths.addAll(paths);
 
+  final workingDir = fileSystem.directory(projectRoot.path);
+  await workingDir.create(recursive: true);
+
   final result = await processManager.run(
     commandWithPaths,
-    workingDirectory: projectRoot.path,
+    workingDirectory: workingDir.path,
     runInShell: true,
   );
 
diff --git a/pkgs/dart_mcp_server/test/utils/cli_utils_test.dart b/pkgs/dart_mcp_server/test/utils/cli_utils_test.dart
index 2392d30..ab93e26 100644
--- a/pkgs/dart_mcp_server/test/utils/cli_utils_test.dart
+++ b/pkgs/dart_mcp_server/test/utils/cli_utils_test.dart
@@ -56,6 +56,7 @@
     test(
       'can run commands with roots that are subdirectories of known roots',
       () async {
+        expect(fileSystem.directory('/bar/baz').existsSync(), false);
         final result = await runCommandInRoots(
           CallToolRequest(
             name: 'foo',
@@ -79,6 +80,7 @@
             workingDirectory: '/bar/baz/',
           )),
         ]);
+        expect(fileSystem.directory('/bar/baz').existsSync(), true);
       },
     );
   });