From c5865d79812eec7a8ecf6af6833a6a27eff65bb5 Mon Sep 17 00:00:00 2001 From: rahulburman459 Date: Sat, 11 Apr 2026 14:51:29 +0000 Subject: [PATCH 1/2] Fix: create Claude config file and folder if missing (issue #68) --- src/main/kotlin/net/portswigger/mcp/providers/Provider.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/net/portswigger/mcp/providers/Provider.kt b/src/main/kotlin/net/portswigger/mcp/providers/Provider.kt index 20c2417..3c7280e 100644 --- a/src/main/kotlin/net/portswigger/mcp/providers/Provider.kt +++ b/src/main/kotlin/net/portswigger/mcp/providers/Provider.kt @@ -75,7 +75,9 @@ class ClaudeDesktopProvider(private val logging: Logging, private val proxyJarMa else -> return null } - if (!basePath.exists()) return null + if (!basePath.exists()) { + basePath.toFile().mkdirs() + } val configFile = basePath.resolve(claudeConfigFileName) if (!configFile.exists()) { From 3404eb2df6e9337b2a1f3366d099c56d98d72c64 Mon Sep 17 00:00:00 2001 From: rahulburman459 Date: Thu, 30 Apr 2026 12:10:14 +0530 Subject: [PATCH 2/2] Support multiple Claude config paths instead of single hardcoded path --- .../net/portswigger/mcp/providers/Provider.kt | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/main/kotlin/net/portswigger/mcp/providers/Provider.kt b/src/main/kotlin/net/portswigger/mcp/providers/Provider.kt index 3c7280e..15aba6d 100644 --- a/src/main/kotlin/net/portswigger/mcp/providers/Provider.kt +++ b/src/main/kotlin/net/portswigger/mcp/providers/Provider.kt @@ -63,21 +63,28 @@ class ClaudeDesktopProvider(private val logging: Logging, private val proxyJarMa return "Installation successful. Please restart $name if it is currently running." } +val possiblePaths = when { + os.contains("win") -> listOf( + Path.of(home, "AppData", "Roaming", "Claude"), + Path.of(home, "AppData", "Local", "Claude") + ) + os.contains("mac") || os.contains("darwin") -> listOf( + Path.of(home, "Library", "Application Support", "Claude"), + Path.of(home, ".claude") + ) + os.contains("linux") -> listOf( + Path.of(home, ".config", "Claude"), + Path.of(home, ".claude") + ) + else -> return null +} - private fun configFilePath(): Path? { - val os = System.getProperty("os.name").lowercase() - val home = System.getProperty("user.home") - - val basePath = when { - os.contains("win") -> Path.of(home, "AppData", "Roaming", "Claude") - os.contains("mac") || os.contains("darwin") -> Path.of(home, "Library", "Application Support", "Claude") - os.contains("linux") -> Path.of(home, ".config", "Claude") - else -> return null - } + //// pick first existing path +val basePath = possiblePaths.firstOrNull { it.exists() } ?: possiblePaths.first() - if (!basePath.exists()) { - basePath.toFile().mkdirs() - } +if (!basePath.exists()) { + basePath.toFile().mkdirs() +} val configFile = basePath.resolve(claudeConfigFileName) if (!configFile.exists()) {