You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Each target follows the same pattern: locate the config file, read it as JSON (preserving unknown keys), add/remove the MCP entry, write it back.
184
184
185
185
**Critical rule**: always preserve unknown keys. Use `map[string]any` or `json.RawMessage` when reading config files. Never deserialize into a strict struct that would drop fields the user set manually.
186
186
187
-
### 2.1 — Claude Code Target
187
+
### 2.1 — Claude Code Target ✅
188
188
189
189
Create `internal/target/claude.go`.
190
190
@@ -227,7 +227,7 @@ Implementation:
227
227
- `Uninstall()`: same flow, delete the key from `mcpServers`.
228
228
- `List()`: read `mcpServers` keys.
229
229
230
-
### 2.2 — Codex Target
230
+
### 2.2 — Codex Target ✅
231
231
232
232
Create `internal/target/codex.go`.
233
233
@@ -248,9 +248,9 @@ Research their config formats when adding support. Each should take roughly 50-1
248
248
249
249
---
250
250
251
-
## Phase 3: Credential Resolution
251
+
## Phase 3: Credential Resolution ✅
252
252
253
-
### 3.1 — Credential Source Interface
253
+
### 3.1 — Credential Source Interface ✅
254
254
255
255
Create `internal/credential/resolver.go`.
256
256
@@ -275,13 +275,13 @@ Resolution order:
275
275
2. File store (`~/.config/mcp-wire/credentials`)
276
276
3. Not found → trigger interactive prompt
277
277
278
-
### 3.2 — Environment Source
278
+
### 3.2 — Environment Source ✅
279
279
280
280
Create `internal/credential/env.go`.
281
281
282
282
Simple wrapper around `os.Getenv`. `Store()` returns `ErrNotSupported`.
283
283
284
-
### 3.3 — File Source
284
+
### 3.3 — File Source ✅
285
285
286
286
Create `internal/credential/file.go`.
287
287
@@ -297,7 +297,7 @@ JIRA_API_TOKEN=jira_xyz789...
297
297
On `Get()`: read the file, parse lines, return matching value.
298
298
On `Store()`: read the file, update or append the key, write back.
299
299
300
-
### 3.4 — Interactive Credential Flow
300
+
### 3.4 — Interactive Credential Flow ✅
301
301
302
302
This lives in the install command logic (not in the credential package). When a required env var is not found by the resolver:
303
303
@@ -332,13 +332,13 @@ Example output:
332
332
333
333
---
334
334
335
-
## Phase 4: CLI Commands
335
+
## Phase 4: CLI Commands ✅
336
336
337
337
Use `github.com/spf13/cobra` for command structure.
338
338
339
-
### 4A — Guided Interactive UX (high priority)
339
+
### 4A — Guided Interactive UX (high priority) ✅
340
340
341
-
#### 4A.1 — Main interactive entry (`mcp-wire`)
341
+
#### 4A.1 — Main interactive entry (`mcp-wire`) ✅
342
342
343
343
When the user runs `mcp-wire` with no subcommand, open an interactive menu:
344
344
@@ -349,7 +349,7 @@ When the user runs `mcp-wire` with no subcommand, open an interactive menu:
349
349
5. List targets
350
350
6. Exit
351
351
352
-
#### 4A.2 — Install wizard flow
352
+
#### 4A.2 — Install wizard flow ✅
353
353
354
354
1. **Service selection**
355
355
- Show a searchable/filterable list (name + description).
@@ -369,20 +369,20 @@ When the user runs `mcp-wire` with no subcommand, open an interactive menu:
369
369
- Print per-target success/failure.
370
370
- Print equivalent explicit command.
371
371
372
-
#### 4A.3 — Uninstall wizard flow
372
+
#### 4A.3 — Uninstall wizard flow ✅
373
373
374
374
1. Service selection (searchable)
375
375
2. Target selection (multi-select)
376
376
3. Confirmation
377
377
4. Optional credential cleanup prompt
378
378
379
-
#### 4A.4 — Fallback behavior for explicit commands
379
+
#### 4A.4 — Fallback behavior for explicit commands ✅
380
380
381
381
- `mcp-wire install`with no service argument should enter the service picker.
382
382
- `mcp-wire uninstall`with no service argument should enter the service picker.
383
383
- Explicit args/flags continue to work unchanged.
384
384
385
-
### 4.1 — `mcp-wire list services`
385
+
### 4.1 — `mcp-wire list services` ✅
386
386
387
387
List all available service definitions found in the services directory.
388
388
@@ -397,7 +397,7 @@ Available services:
397
397
filesystem Local filesystem access MCP
398
398
```
399
399
400
-
### 4.2 — `mcp-wire list targets`
400
+
### 4.2 — `mcp-wire list targets` ✅
401
401
402
402
List all known targets and whether they are detected on this system.
403
403
@@ -412,7 +412,7 @@ Targets:
412
412
opencode OpenCode ✗ not found
413
413
```
414
414
415
-
### 4.3 — `mcp-wire install <service>`
415
+
### 4.3 — `mcp-wire install <service>` ✅
416
416
417
417
Flags:
418
418
@@ -429,7 +429,7 @@ Flow:
429
429
6. For each target (filtered by `--target` or all installed), call `target.Install()`.
430
430
7. Print results.
431
431
432
-
### 4.4 — `mcp-wire uninstall <service>`
432
+
### 4.4 — `mcp-wire uninstall <service>` ✅
433
433
434
434
Flags:
435
435
@@ -441,7 +441,7 @@ Flow:
441
441
2. If `<service>` is omitted, enter interactive service selection.
442
442
3. Optionally ask if the user wants to remove stored credentials for this service.
443
443
444
-
### 4.5 — `mcp-wire status`
444
+
### 4.5 — `mcp-wire status` ✅
445
445
446
446
Show a matrix of services × targets.
447
447
@@ -458,7 +458,7 @@ Implementation: for each installed target, call `target.List()` and cross-refere
458
458
459
459
---
460
460
461
-
## Phase 5: Initial Service Definitions
461
+
## Phase 5: Initial Service Definitions ✅
462
462
463
463
Create YAML files in the `services/` directory for at least these services:
464
464
@@ -508,9 +508,9 @@ Before writing more service definitions, verify the current MCP configuration fo
508
508
509
509
---
510
510
511
-
## Phase 6: Build, Test, Release
511
+
## Phase 6: Build, Test, Release ✅
512
512
513
-
### 6.1 — Go Module Setup
513
+
### 6.1 — Go Module Setup ✅
514
514
515
515
```
516
516
go mod init github.com/<your-username>/mcp-wire
@@ -520,7 +520,7 @@ go get gopkg.in/yaml.v3
520
520
521
521
No other external dependencies should be needed for v0.1.
522
522
523
-
### 6.2 — Testing Strategy
523
+
### 6.2 — Testing Strategy ✅
524
524
525
525
- **Service loading**: test YAML parsing with valid and invalid files, test validation logic, test precedence when multiple paths are provided.
526
526
- **Target implementations**: test Install/Uninstall/List against temporary config files. Create a temp dir, write a sample config, run the operation, assert the result.
@@ -530,7 +530,7 @@ No other external dependencies should be needed for v0.1.
530
530
- **Sandboxed CLI integration tests**: run end-to-end install/status/uninstall flows in temporary HOME/PATH to avoid touching user config.
531
531
- **Manual QA checklist**: test on a machine with existing MCP configs and a clean machine; verify no unrelated config keys are removed.
GOOS=windows GOARCH=amd64 go build -o mcp-wire-windows-amd64.exe .
545
545
```
546
546
547
-
### 6.4 — Release
547
+
### 6.4 — Release ✅
548
548
549
549
Use GoReleaser or GitHub Actions for automated releases. Provide binaries for macOS (arm64 + amd64), Linux (amd64), and Windows (amd64). Consider a Homebrew tap for macOS users.
550
550
@@ -554,23 +554,23 @@ Use GoReleaser or GitHub Actions for automated releases. Provide binaries for ma
554
554
555
555
Implement in this exact order to have something working as early as possible:
0 commit comments