Skip to content

Commit b3cdddb

Browse files
committed
Mark completed steps in implementation plan
1 parent 227bfa5 commit b3cdddb

File tree

1 file changed

+53
-53
lines changed

1 file changed

+53
-53
lines changed

mcp-wire-plan.md

Lines changed: 53 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ mcp-wire/
6060

6161
---
6262

63-
## Phase 1: Core Data Model
63+
## Phase 1: Core Data Model
6464

65-
### 1.1 — Service Definition (YAML schema)
65+
### 1.1 — Service Definition (YAML schema)
6666

6767
Create `internal/service/service.go` with the struct that maps to service YAML files.
6868

@@ -118,7 +118,7 @@ args: ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/projects"]
118118
env: []
119119
```
120120
121-
### 1.2 — Service Registry
121+
### 1.2 — Service Registry
122122
123123
Create `internal/service/registry.go`.
124124

@@ -137,7 +137,7 @@ func LoadServices(paths ...string) (map[string]Service, error)
137137
func ValidateService(s Service) error
138138
```
139139

140-
### 1.3 — Target Interface
140+
### 1.3 — Target Interface
141141

142142
Create `internal/target/target.go`.
143143

@@ -164,7 +164,7 @@ type Target interface {
164164
}
165165
```
166166

167-
### 1.4 — Target Registry
167+
### 1.4 — Target Registry
168168

169169
Create `internal/target/registry.go`.
170170

@@ -178,13 +178,13 @@ func FindTarget(slug string) (Target, bool)
178178

179179
---
180180

181-
## Phase 2: Target Implementations
181+
## Phase 2: Target Implementations
182182

183183
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.
184184

185185
**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.
186186

187-
### 2.1 — Claude Code Target
187+
### 2.1 — Claude Code Target
188188

189189
Create `internal/target/claude.go`.
190190

@@ -227,7 +227,7 @@ Implementation:
227227
- `Uninstall()`: same flow, delete the key from `mcpServers`.
228228
- `List()`: read `mcpServers` keys.
229229

230-
### 2.2 — Codex Target
230+
### 2.2 — Codex Target
231231

232232
Create `internal/target/codex.go`.
233233

@@ -248,9 +248,9 @@ Research their config formats when adding support. Each should take roughly 50-1
248248

249249
---
250250

251-
## Phase 3: Credential Resolution
251+
## Phase 3: Credential Resolution
252252

253-
### 3.1 — Credential Source Interface
253+
### 3.1 — Credential Source Interface
254254

255255
Create `internal/credential/resolver.go`.
256256

@@ -275,13 +275,13 @@ Resolution order:
275275
2. File store (`~/.config/mcp-wire/credentials`)
276276
3. Not found → trigger interactive prompt
277277

278-
### 3.2 — Environment Source
278+
### 3.2 — Environment Source
279279

280280
Create `internal/credential/env.go`.
281281

282282
Simple wrapper around `os.Getenv`. `Store()` returns `ErrNotSupported`.
283283

284-
### 3.3 — File Source
284+
### 3.3 — File Source
285285

286286
Create `internal/credential/file.go`.
287287

@@ -297,7 +297,7 @@ JIRA_API_TOKEN=jira_xyz789...
297297
On `Get()`: read the file, parse lines, return matching value.
298298
On `Store()`: read the file, update or append the key, write back.
299299

300-
### 3.4 — Interactive Credential Flow
300+
### 3.4 — Interactive Credential Flow
301301

302302
This lives in the install command logic (not in the credential package). When a required env var is not found by the resolver:
303303

@@ -332,13 +332,13 @@ Example output:
332332

333333
---
334334

335-
## Phase 4: CLI Commands
335+
## Phase 4: CLI Commands
336336

337337
Use `github.com/spf13/cobra` for command structure.
338338

339-
### 4A — Guided Interactive UX (high priority)
339+
### 4A — Guided Interactive UX (high priority)
340340

341-
#### 4A.1 — Main interactive entry (`mcp-wire`)
341+
#### 4A.1 — Main interactive entry (`mcp-wire`)
342342

343343
When the user runs `mcp-wire` with no subcommand, open an interactive menu:
344344

@@ -349,7 +349,7 @@ When the user runs `mcp-wire` with no subcommand, open an interactive menu:
349349
5. List targets
350350
6. Exit
351351

352-
#### 4A.2 — Install wizard flow
352+
#### 4A.2 — Install wizard flow
353353

354354
1. **Service selection**
355355
- Show a searchable/filterable list (name + description).
@@ -369,20 +369,20 @@ When the user runs `mcp-wire` with no subcommand, open an interactive menu:
369369
- Print per-target success/failure.
370370
- Print equivalent explicit command.
371371

372-
#### 4A.3 — Uninstall wizard flow
372+
#### 4A.3 — Uninstall wizard flow
373373

374374
1. Service selection (searchable)
375375
2. Target selection (multi-select)
376376
3. Confirmation
377377
4. Optional credential cleanup prompt
378378

379-
#### 4A.4 — Fallback behavior for explicit commands
379+
#### 4A.4 — Fallback behavior for explicit commands
380380

381381
- `mcp-wire install` with no service argument should enter the service picker.
382382
- `mcp-wire uninstall` with no service argument should enter the service picker.
383383
- Explicit args/flags continue to work unchanged.
384384

385-
### 4.1 — `mcp-wire list services`
385+
### 4.1 — `mcp-wire list services`
386386

387387
List all available service definitions found in the services directory.
388388

@@ -397,7 +397,7 @@ Available services:
397397
filesystem Local filesystem access MCP
398398
```
399399

400-
### 4.2 — `mcp-wire list targets`
400+
### 4.2 — `mcp-wire list targets`
401401

402402
List all known targets and whether they are detected on this system.
403403

@@ -412,7 +412,7 @@ Targets:
412412
opencode OpenCode ✗ not found
413413
```
414414

415-
### 4.3 — `mcp-wire install <service>`
415+
### 4.3 — `mcp-wire install <service>`
416416

417417
Flags:
418418

@@ -429,7 +429,7 @@ Flow:
429429
6. For each target (filtered by `--target` or all installed), call `target.Install()`.
430430
7. Print results.
431431

432-
### 4.4 — `mcp-wire uninstall <service>`
432+
### 4.4 — `mcp-wire uninstall <service>`
433433

434434
Flags:
435435

@@ -441,7 +441,7 @@ Flow:
441441
2. If `<service>` is omitted, enter interactive service selection.
442442
3. Optionally ask if the user wants to remove stored credentials for this service.
443443

444-
### 4.5 — `mcp-wire status`
444+
### 4.5 — `mcp-wire status`
445445

446446
Show a matrix of services × targets.
447447

@@ -458,7 +458,7 @@ Implementation: for each installed target, call `target.List()` and cross-refere
458458

459459
---
460460

461-
## Phase 5: Initial Service Definitions
461+
## Phase 5: Initial Service Definitions
462462

463463
Create YAML files in the `services/` directory for at least these services:
464464

@@ -508,9 +508,9 @@ Before writing more service definitions, verify the current MCP configuration fo
508508

509509
---
510510

511-
## Phase 6: Build, Test, Release
511+
## Phase 6: Build, Test, Release
512512

513-
### 6.1 — Go Module Setup
513+
### 6.1 — Go Module Setup
514514

515515
```
516516
go mod init github.com/<your-username>/mcp-wire
@@ -520,7 +520,7 @@ go get gopkg.in/yaml.v3
520520
521521
No other external dependencies should be needed for v0.1.
522522
523-
### 6.2 — Testing Strategy
523+
### 6.2 — Testing Strategy
524524
525525
- **Service loading**: test YAML parsing with valid and invalid files, test validation logic, test precedence when multiple paths are provided.
526526
- **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.
530530
- **Sandboxed CLI integration tests**: run end-to-end install/status/uninstall flows in temporary HOME/PATH to avoid touching user config.
531531
- **Manual QA checklist**: test on a machine with existing MCP configs and a clean machine; verify no unrelated config keys are removed.
532532
533-
### 6.3 — Build
533+
### 6.3 — Build
534534
535535
Standard Go cross-compilation:
536536
@@ -544,7 +544,7 @@ GOOS=linux GOARCH=amd64 go build -o mcp-wire-linux-amd64 .
544544
GOOS=windows GOARCH=amd64 go build -o mcp-wire-windows-amd64.exe .
545545
```
546546

547-
### 6.4 — Release
547+
### 6.4 — Release
548548

549549
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.
550550

@@ -554,23 +554,23 @@ Use GoReleaser or GitHub Actions for automated releases. Provide binaries for ma
554554

555555
Implement in this exact order to have something working as early as possible:
556556

557-
1. **Go module + main.go + Cobra skeleton** — just `mcp-wire --help` works.
558-
2. **Service struct + YAML loader + validation** — can parse service files.
559-
3. **`list services` command** — first working command, proves the YAML loading.
560-
4. **Target interface + Claude Code implementation** — can read/write Claude Code config.
561-
5. **`list targets` command** — detects installed tools.
562-
6. **Credential resolver (env + file sources)** — can resolve and store tokens.
563-
7. **`install` command with interactive prompt** — the core feature, end-to-end flow.
564-
8. **`uninstall` command** — straightforward once install works.
565-
9. **`status` command** — reads from all targets, displays matrix.
566-
10. **Codex target implementation** — second target, validates the abstraction.
567-
11. **Initial service YAML files** — ship with 3-5 verified services.
568-
12. **README, contributing guide** — explain how to add services and targets.
569-
13. **Guided main menu**`mcp-wire` with no args opens interactive navigation.
570-
14. **Install wizard UX** — searchable service picker, target selection, credential guidance.
571-
15. **Uninstall wizard parity** — same guided UX model as install.
572-
16. **Interactive UX tests + sandbox integration tests** — prevent regressions in guided flows.
573-
17. **Equivalent-command summary in guided mode** — print scriptable command at the end of each workflow.
557+
1. **Go module + main.go + Cobra skeleton** — just `mcp-wire --help` works.
558+
2. **Service struct + YAML loader + validation** — can parse service files.
559+
3. **`list services` command** — first working command, proves the YAML loading.
560+
4. **Target interface + Claude Code implementation** — can read/write Claude Code config.
561+
5. **`list targets` command** — detects installed tools.
562+
6. **Credential resolver (env + file sources)** — can resolve and store tokens.
563+
7. **`install` command with interactive prompt** — the core feature, end-to-end flow.
564+
8. **`uninstall` command** — straightforward once install works.
565+
9. **`status` command** — reads from all targets, displays matrix.
566+
10. **Codex target implementation** — second target, validates the abstraction.
567+
11. **Initial service YAML files** — ship with 3-5 verified services.
568+
12. **README, contributing guide** — explain how to add services and targets.
569+
13. **Guided main menu**`mcp-wire` with no args opens interactive navigation.
570+
14. **Install wizard UX** — searchable service picker, target selection, credential guidance.
571+
15. **Uninstall wizard parity** — same guided UX model as install.
572+
16. **Interactive UX tests + sandbox integration tests** — prevent regressions in guided flows.
573+
17. **Equivalent-command summary in guided mode** — print scriptable command at the end of each workflow.
574574

575575
---
576576

@@ -610,7 +610,7 @@ This phase adds optional integration with the Official MCP Registry (`https://re
610610
- **Latest-only selection**: when a user selects a registry MCP, resolve details from the `latest` version only.
611611
- **Runtime checks are warnings by default**: missing package managers should warn, not block installation.
612612

613-
### 7.1 — Feature gate and local settings
613+
### 7.1 — Feature gate and local settings
614614

615615
Add mcp-wire local settings file (for example `~/.config/mcp-wire/config.json`) with:
616616

@@ -633,7 +633,7 @@ Acceptance criteria:
633633
- Fresh install behavior is unchanged.
634634
- With `registry=false`, all commands and guided flows behave exactly as today.
635635

636-
### 7.2 — Official registry API client (read-only)
636+
### 7.2 — Official registry API client (read-only)
637637

638638
Create `internal/registry/` for typed API client logic.
639639

@@ -649,7 +649,7 @@ Important details:
649649
- Parse `application/problem+json` errors and return friendly messages.
650650
- Do not expose historical version selection in this phase.
651651

652-
### 7.3 — Caching and indexing for responsive UX
652+
### 7.3 — Caching and indexing for responsive UX
653653

654654
Add a local cache/index (for example under `~/.cache/mcp-wire/`) to avoid network-per-keystroke UI.
655655

@@ -759,9 +759,9 @@ Requirements:
759759

760760
Suggested order for shipping gradually:
761761

762-
1. Feature gate + settings file + no-registry-references enforcement.
763-
2. Registry read client + latest-only detail lookup + basic tests.
764-
3. Cache/index + local search.
762+
1. Feature gate + settings file + no-registry-references enforcement.
763+
2. Registry read client + latest-only detail lookup + basic tests.
764+
3. Cache/index + local search.
765765
4. `list services` source filter (`curated` default).
766766
5. Guided UI source step and merged list markers.
767767
6. Registry remote-install support.

0 commit comments

Comments
 (0)