Skip to content

Commit 2424eb4

Browse files
author
colinmcneil
committed
Fix broken state when user has empty claude config
Resolves #52
1 parent bffecd0 commit 2424eb4

File tree

2 files changed

+24
-28
lines changed

2 files changed

+24
-28
lines changed

src/extension/ui/src/Usage.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,15 @@ const processEventsQueue = () => {
5858
};
5959

6060
const sendRecords = (records: Record[]) => {
61-
const url = 'https://nd14xwptgj.execute-api.us-east-1.amazonaws.com/stage/v1/track';
62-
const apiKey = '1234567890';
61+
const url = 'https://api-stage.docker.com/events/v1/track';
62+
const apiKey = 'wl9kXcw19A9pyY2xj5TcKa2jlCG1ZbIYabdnuFve';
6363

6464
fetch(url, {
6565
method: 'POST',
6666
headers: {
6767
'Content-Type': 'application/json',
68-
'x-api-key': apiKey
68+
'x-api-key': apiKey,
69+
'x-test-key': 'test'
6970
},
7071
body: JSON.stringify({ records })
7172
});

src/extension/ui/src/components/ClaudeConfigSyncStatus.tsx

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import { ExecResult } from "@docker/extension-api-client-types/dist/v1";
88
const DOCKER_MCP_CONFIG = {
99
"command": "docker",
1010
"args": [
11-
"run",
12-
"-i",
13-
"--rm",
14-
"alpine/socat",
15-
"STDIO",
16-
"TCP:host.docker.internal:8811"
11+
"run",
12+
"-i",
13+
"--rm",
14+
"alpine/socat",
15+
"STDIO",
16+
"TCP:host.docker.internal:8811"
1717
]
1818
}
1919

@@ -99,21 +99,20 @@ export const ClaudeConfigSyncStatus = ({ client, setHasConfig }: { client: v1.Do
9999
if (claudeConfig === undefined) {
100100
return setStatus({ state: 'missing claude config', message: 'No claude desktop config found', color: 'error' })
101101
}
102-
if (claudeConfig) {
102+
else if (claudeConfig === null || claudeConfig.mcpServers === null) {
103+
return setStatus({ state: 'empty claude config', message: 'No claude desktop config found', color: 'error' })
104+
}
105+
else {
103106
const servers = claudeConfig.mcpServers
104-
if (!servers) {
105-
setStatus({ state: 'invalid', message: 'No servers found in Claude Desktop Config', color: 'error' })
106-
}
107-
else {
108-
const hasDocker = Object.keys(servers).some(key => key === 'mcp_docker')
109-
if (hasDocker) {
110-
setStatus({ state: 'has docker_mcp', message: 'Claude Desktop Config is valid', color: 'success' })
111-
setHasConfig(true)
112-
} else {
113-
setStatus({ state: 'missing docker_mcp', message: 'No Docker servers found in Claude Desktop Config', color: 'error' })
114-
setHasConfig(false)
115-
}
107+
const hasDocker = Object.keys(servers).some(key => key === 'mcp_docker')
108+
if (hasDocker) {
109+
setStatus({ state: 'has docker_mcp', message: 'Claude Desktop Config is valid', color: 'success' })
110+
setHasConfig(true)
111+
} else {
112+
setStatus({ state: 'missing docker_mcp', message: 'No Docker servers found in Claude Desktop Config', color: 'error' })
113+
setHasConfig(false)
116114
}
115+
117116
}
118117
}, [claudeConfig])
119118

@@ -148,7 +147,7 @@ export const ClaudeConfigSyncStatus = ({ client, setHasConfig }: { client: v1.Do
148147
}}>Add Docker MCP</Button>
149148
}
150149
{
151-
status.state === 'missing claude config' && <Button onClick={async () => {
150+
status.state === 'missing claude config' || status.state === 'empty claude config' && <Button onClick={async () => {
152151
trackEvent('claude-config-changed', { action: 'write' })
153152
await writeFilesToHost(client, [{
154153
path: 'claude_desktop_config.json', content: JSON.stringify({
@@ -167,7 +166,7 @@ export const ClaudeConfigSyncStatus = ({ client, setHasConfig }: { client: v1.Do
167166
setDeleteReady(true)
168167
setTimeout(() => {
169168
setDeleteReady(false)
170-
}, 10000)
169+
}, 3000)
171170
}
172171
else {
173172
trackEvent('claude-config-changed', { action: 'delete' })
@@ -176,18 +175,14 @@ export const ClaudeConfigSyncStatus = ({ client, setHasConfig }: { client: v1.Do
176175
refreshConfig()
177176
setDeleteReady(false)
178177
} catch (error) {
179-
180178
if ((error as ExecResult).stderr) {
181179
client.desktopUI.toast.error('Error deleting config' + (error as ExecResult).stderr)
182180
console.error('Error deleting config', error)
183181
}
184-
185-
186182
}
187183
}
188184
}
189185
}>{deleteReady ? 'Click again to confirm deletion' : 'Delete Claude Desktop Config'}</Button>}
190-
191186
</Stack>
192187
<DialogContent>
193188
<DialogContentText component='pre'>

0 commit comments

Comments
 (0)