codex-plugin-doctor 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,296 +1,316 @@
1
- # Codex Plugin Doctor
2
-
3
- [![CI](https://github.com/Esquetta/CodexPluginDoctor/actions/workflows/ci.yml/badge.svg)](https://github.com/Esquetta/CodexPluginDoctor/actions/workflows/ci.yml)
4
-
5
- Codex Plugin Doctor is a local CLI validator for Codex plugin packages, skills, and MCP server bundles.
6
-
7
- It catches packaging, metadata, security, and runtime protocol problems before a plugin reaches users, teammates, or release workflows.
8
-
9
- ## Status
10
-
11
- Codex Plugin Doctor is an early public CLI release.
12
-
13
- - Primary surface: GitHub repository and npm package
14
- - Distribution today: `npm install -g`, local source install, `npm link`, `npm pack`, GitHub Releases
15
- - Public npm package: `codex-plugin-doctor`
16
- - License: [MIT](./LICENSE)
17
-
18
- ## Why This Exists
19
-
20
- Codex plugin packages can fail in several places:
21
-
22
- - the package manifest is missing or points outside the package root
23
- - skills exist but do not expose valid `SKILL.md` metadata
24
- - `.mcp.json` is malformed or references unsafe secrets
25
- - an MCP server starts but does not complete the protocol handshake
26
- - tools, resources, or prompts list successfully but fail deeper runtime checks
27
- - verbose metadata creates noisy matching and unnecessary context cost
28
-
29
- This tool gives plugin authors a repeatable preflight check before distribution.
30
-
31
- ## What It Checks
32
-
33
- Static validation:
34
-
35
- - required `.codex-plugin/plugin.json`
36
- - manifest fields: `name`, `version`, `description`
37
- - skill directory wiring
38
- - `SKILL.md` presence and frontmatter fields
39
- - YAML single-line and block-scalar skill descriptions
40
- - `.mcp.json` structure
41
- - path traversal risks
42
- - hard-coded secret-like env values
43
- - description quality heuristics tuned against real plugin packages
44
-
45
- Runtime MCP validation with `--runtime`:
46
-
47
- - `initialize`
48
- - `notifications/initialized`
49
- - `tools/list`
50
- - `tools/call`
51
- - `resources/list`
52
- - `resources/read`
53
- - `resources/templates/list`
54
- - `prompts/list`
55
- - `prompts/get`
56
- - paginated list responses
57
- - runtime capability scorecard
58
- - redacted verbose transcript with `--verbose-runtime`
59
-
60
- Output formats:
61
-
62
- - human text output
63
- - JSON reports
64
- - Markdown reports
65
- - `--output` file writing
66
- - CI summary and artifact generation
67
-
68
- ## Quick Start
69
-
70
- Global install from npm:
71
-
72
- ```bash
73
- npm install -g codex-plugin-doctor
74
- codex-plugin-doctor --version
75
- codex-plugin-doctor check path/to/plugin-package
76
- ```
77
-
78
- Run `codex-plugin-doctor check .` from the root of a Codex plugin package that contains `.codex-plugin/plugin.json`. The Codex Plugin Doctor source repository is not itself a plugin package.
79
-
80
- If you already have Codex installed locally and do not know plugin paths, discover the installed plugin cache:
81
-
82
- ```bash
83
- codex-plugin-doctor list --installed
84
- codex-plugin-doctor check --installed
85
- codex-plugin-doctor check --installed --all-summary
86
- codex-plugin-doctor check --installed github
87
- codex-plugin-doctor explain plugin.manifest.missing
88
- ```
89
-
90
- Run from source:
91
-
92
- ```bash
93
- npm install
94
- npm run build
95
- node dist/cli.js check examples/codex-doctor-runtime --runtime
96
- ```
97
-
98
- For local global usage:
99
-
100
- ```bash
101
- npm link
102
- codex-plugin-doctor check examples/codex-doctor-runtime --runtime
103
- ```
104
-
105
- Generate validation artifacts locally:
106
-
107
- ```bash
108
- npm run generate-validation-artifacts -- --target examples/codex-doctor-runtime --runtime-target examples/codex-doctor-runtime --out-dir validation-artifacts-local
109
- ```
110
-
111
- ## Example Output
112
-
113
- Passing runtime package:
114
-
115
- ```text
116
- Codex Plugin Doctor
117
- ===================
118
- Status: PASS
119
- Target: <repo>\examples\codex-doctor-runtime
120
- Summary: 0 fail, 0 warn, 0 total
121
-
122
- Runtime Scorecard
123
- ----------------
124
- initialize: pass
125
- tools/list: pass
126
- tools/call: pass
127
- resources/list: pass
128
- resources/read: pass
129
- resources/templates/list: pass
130
- prompts/list: pass
131
- prompts/get: pass
132
-
133
- No findings.
134
- ```
135
-
136
- Risky package:
137
-
138
- ```text
139
- Codex Plugin Doctor
140
- ===================
141
- Status: FAIL
142
- Target: <repo>\examples\codex-doctor-risky
143
- Summary: 1 fail, 0 warn, 1 total
144
-
145
- Failures
146
- --------
147
- x plugin.security.hard_coded_secret
148
- Message: The MCP server `dangerServer` contains a hard-coded secret-like env value for `OPENAI_API_KEY`.
149
- Impact: Hard-coded credentials inside plugin bundles increase leakage risk and make secure rotation difficult.
150
- Suggested fix: Replace the literal value for `OPENAI_API_KEY` with an environment reference or injected secret outside the package.
151
- ```
152
-
153
- ## Useful Commands
154
-
155
- Run these from a Codex plugin package root:
156
-
157
- ```bash
158
- codex-plugin-doctor --version
159
- codex-plugin-doctor init my-plugin
160
- codex-plugin-doctor compat .
161
- codex-plugin-doctor compat . --client codex
162
- codex-plugin-doctor compat . --client generic-mcp
163
- codex-plugin-doctor compat . --client claude-desktop
164
- codex-plugin-doctor compat . --client claude-desktop --install-preview
165
- codex-plugin-doctor compat . --client cursor
166
- codex-plugin-doctor compat . --client cursor --install-preview
167
- codex-plugin-doctor compat . --scorecard
168
- codex-plugin-doctor compat . --json
169
- codex-plugin-doctor compat . --json --output compatibility.json
170
- codex-plugin-doctor check .
171
- codex-plugin-doctor check . --json
172
- codex-plugin-doctor check . --json --output report.json
173
- codex-plugin-doctor check . --markdown --output report.md
174
- codex-plugin-doctor check . --sarif --output results.sarif
175
- codex-plugin-doctor check . --ascii
176
- codex-plugin-doctor check . --no-animations
177
- codex-plugin-doctor check . --runtime
178
- codex-plugin-doctor check . --config .codex-doctor.json
179
- codex-plugin-doctor check . --json --runtime --verbose-runtime
180
- ```
181
-
182
- `compat --client claude-desktop` checks whether the MCP package can be added to the local Claude Desktop setup. On Windows it looks for `%APPDATA%\Claude\claude_desktop_config.json`; on macOS it looks for `~/Library/Application Support/Claude/claude_desktop_config.json`. A valid existing config returns `PASS`, a missing Claude Desktop install returns `WARN`, and a malformed local config returns `FAIL` so you do not add new servers into a broken config file. If the package server name already exists in Claude Desktop, the command returns `WARN` with the duplicate server name. Add `--install-preview` to print the JSON snippet that should be merged into `claude_desktop_config.json`; it does not modify files.
183
-
184
- `compat --client cursor` checks whether the MCP package can be added to Cursor. It prefers a project-level `.cursor/mcp.json` when one already exists in the target package, then falls back to the global `~/.cursor/mcp.json` path. A valid existing config returns `PASS`, a missing Cursor config returns `WARN`, malformed JSON returns `FAIL`, and duplicate MCP server names return `WARN`. Add `--install-preview` to print the JSON snippet that should be merged into Cursor's `mcp.json`; it does not modify files.
185
-
186
- `compat --scorecard` turns the compatibility matrix into a compact score summary. `PASS` maps to `100`, `WARN` maps to `70`, and `FAIL` or `SKIPPED` maps to `0`.
187
-
188
- Optional local policy file:
189
-
190
- ```json
191
- {
192
- "ignoreRules": ["plugin.heuristic.description.too_long"],
193
- "failOnWarnings": true
194
- }
195
- ```
196
-
197
- Run these when you want Codex Plugin Doctor to find plugins from the local Codex installation:
198
-
199
- ```bash
200
- codex-plugin-doctor list --installed
201
- codex-plugin-doctor check --installed
202
- codex-plugin-doctor check --installed --all-summary
203
- codex-plugin-doctor check --installed github
204
- codex-plugin-doctor check --installed github --runtime --no-animations
205
- codex-plugin-doctor explain plugin.security.hard_coded_secret
206
- ```
207
-
208
- ## GitHub Action
209
-
210
- ```yaml
211
- name: Validate Codex plugin
212
-
213
- on:
214
- pull_request:
215
-
216
- jobs:
217
- doctor:
218
- runs-on: ubuntu-latest
219
- steps:
220
- - uses: actions/checkout@v4
221
- - uses: Esquetta/CodexPluginDoctor@v0.2.0
222
- with:
223
- path: .
224
- runtime: "false"
225
- ```
226
-
227
- To self-test this repository after cloning it:
228
-
229
- ```bash
230
- codex-plugin-doctor check examples/codex-doctor-runtime --runtime --no-animations
231
- ```
232
-
233
- ## Repository Layout
234
-
235
- ```text
236
- docs/ Product, engineering, security, and release docs
237
- examples/ Manual plugin packs for local CLI testing
238
- src/ CLI, validation logic, runtime probing, reports
239
- tests/ Fixture-based regression tests
240
- validation-sessions/ Real-world validation waves and tuning notes
241
- ```
242
-
243
- ## Validation Evidence
244
-
245
- The validator is tuned against local fixtures and real marketplace-style plugin packages. See:
246
-
247
- - [Real-World Validation Workflow](./docs/engineering/real-world-validation-workflow.md)
248
- - [Validation Sessions](./validation-sessions/README.md)
249
- - [Examples](./examples/README.md)
250
- - [Rule Catalog](./docs/rules/catalog.md)
251
-
252
- Recent validation waves covered:
253
-
254
- - curated Codex plugin cache packages
255
- - marketplace-style plugin snapshots
256
- - YAML block-scalar skill metadata
257
- - media and visual workflow metadata
258
-
259
- ## Release Readiness
260
-
261
- Release preparation is reproducible from the repository:
262
-
263
- ```bash
264
- npm run prepare-release
265
- ```
266
-
267
- This runs tests, builds the TypeScript output, and performs `npm pack --dry-run`.
268
-
269
- Related docs:
270
-
271
- - [Changelog](./CHANGELOG.md)
272
- - [NPM Release Checklist](./docs/engineering/npm-release-checklist.md)
273
- - [Release Candidate Workflow](./docs/engineering/release-candidate-workflow.md)
274
- - [v0.1.0 Release Notes](./docs/engineering/v0.1.0-final-release-notes.md)
275
-
276
- ## Contributing
277
-
278
- Contributions are welcome once the repository is public. Start with:
279
-
280
- - [Contributing](./CONTRIBUTING.md)
281
- - [Security Policy](./SECURITY.md)
282
- - [Validation tuning issue template](./.github/ISSUE_TEMPLATE/validation_tuning.yml)
283
-
284
- ## Support
285
-
286
- If this tool saves you time, GitHub stars and sponsorship help signal that the project is worth continuing.
287
-
288
- - Star the repository on GitHub.
289
- - Use GitHub Sponsors through the repository funding link.
290
- - Open validation tuning issues for false positives or false negatives.
291
-
292
- ## Product Direction
293
-
294
- Codex Plugin Doctor starts as a Codex-specific validator and can grow into a broader MCP Doctor over time.
295
-
296
- The immediate goal is not a marketplace, dashboard, or hosted website. The immediate goal is a trustworthy local preflight check for Codex-compatible plugin bundles.
1
+ # Codex Plugin Doctor
2
+
3
+ [![CI](https://github.com/Esquetta/CodexPluginDoctor/actions/workflows/ci.yml/badge.svg)](https://github.com/Esquetta/CodexPluginDoctor/actions/workflows/ci.yml)
4
+ [![npm version](https://img.shields.io/npm/v/codex-plugin-doctor.svg)](https://www.npmjs.com/package/codex-plugin-doctor)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)
6
+ [![GitHub release](https://img.shields.io/github/v/release/Esquetta/CodexPluginDoctor)](https://github.com/Esquetta/CodexPluginDoctor/releases)
7
+
8
+ Codex Plugin Doctor is a local CLI validator for Codex plugin packages, skills, and MCP server bundles.
9
+
10
+ It catches packaging, metadata, security, and runtime protocol problems before a plugin reaches users, teammates, or release workflows.
11
+
12
+ ## Status
13
+
14
+ Codex Plugin Doctor is an early public CLI release.
15
+
16
+ - Primary surface: GitHub repository and npm package
17
+ - Distribution today: `npm install -g`, local source install, `npm link`, `npm pack`, GitHub Releases
18
+ - Public npm package: `codex-plugin-doctor`
19
+ - License: [MIT](./LICENSE)
20
+
21
+ ## Why This Exists
22
+
23
+ Codex plugin packages can fail in several places:
24
+
25
+ - the package manifest is missing or points outside the package root
26
+ - skills exist but do not expose valid `SKILL.md` metadata
27
+ - `.mcp.json` is malformed or references unsafe secrets
28
+ - an MCP server starts but does not complete the protocol handshake
29
+ - tools, resources, or prompts list successfully but fail deeper runtime checks
30
+ - verbose metadata creates noisy matching and unnecessary context cost
31
+
32
+ This tool gives plugin authors a repeatable preflight check before distribution.
33
+
34
+ ## What It Checks
35
+
36
+ Static validation:
37
+
38
+ - required `.codex-plugin/plugin.json`
39
+ - manifest fields: `name`, `version`, `description`
40
+ - skill directory wiring
41
+ - `SKILL.md` presence and frontmatter fields
42
+ - YAML single-line and block-scalar skill descriptions
43
+ - `.mcp.json` structure
44
+ - path traversal risks
45
+ - hard-coded secret-like env values
46
+ - description quality heuristics tuned against real plugin packages
47
+
48
+ Runtime MCP validation with `--runtime`:
49
+
50
+ - `initialize`
51
+ - `notifications/initialized`
52
+ - `tools/list`
53
+ - `tools/call`
54
+ - `resources/list`
55
+ - `resources/read`
56
+ - `resources/templates/list`
57
+ - `prompts/list`
58
+ - `prompts/get`
59
+ - paginated list responses
60
+ - runtime capability scorecard
61
+ - redacted verbose transcript with `--verbose-runtime`
62
+
63
+ Output formats:
64
+
65
+ - human text output
66
+ - JSON reports
67
+ - Markdown reports
68
+ - Shields-compatible badge JSON and static badge Markdown
69
+ - `--output` file writing
70
+ - CI summary and artifact generation
71
+
72
+ ## Quick Start
73
+
74
+ Global install from npm:
75
+
76
+ ```bash
77
+ npm install -g codex-plugin-doctor
78
+ codex-plugin-doctor --version
79
+ codex-plugin-doctor self-test
80
+ codex-plugin-doctor check path/to/plugin-package
81
+ ```
82
+
83
+ Run `codex-plugin-doctor check .` from the root of a Codex plugin package that contains `.codex-plugin/plugin.json`. The Codex Plugin Doctor source repository is not itself a plugin package.
84
+
85
+ If you already have Codex installed locally and do not know plugin paths, discover the installed plugin cache:
86
+
87
+ ```bash
88
+ codex-plugin-doctor list --installed
89
+ codex-plugin-doctor check --installed
90
+ codex-plugin-doctor check --installed --all-summary
91
+ codex-plugin-doctor check --installed github
92
+ codex-plugin-doctor explain plugin.manifest.missing
93
+ ```
94
+
95
+ Run from source:
96
+
97
+ ```bash
98
+ npm install
99
+ npm run build
100
+ node dist/cli.js check examples/codex-doctor-runtime --runtime
101
+ ```
102
+
103
+ For local global usage:
104
+
105
+ ```bash
106
+ npm link
107
+ codex-plugin-doctor check examples/codex-doctor-runtime --runtime
108
+ ```
109
+
110
+ Generate validation artifacts locally:
111
+
112
+ ```bash
113
+ npm run generate-validation-artifacts -- --target examples/codex-doctor-runtime --runtime-target examples/codex-doctor-runtime --out-dir validation-artifacts-local
114
+ ```
115
+
116
+ ## Example Output
117
+
118
+ Passing runtime package:
119
+
120
+ ```text
121
+ Codex Plugin Doctor
122
+ ===================
123
+ Status: PASS
124
+ Target: <repo>\examples\codex-doctor-runtime
125
+ Summary: 0 fail, 0 warn, 0 total
126
+
127
+ Runtime Scorecard
128
+ ----------------
129
+ initialize: pass
130
+ tools/list: pass
131
+ tools/call: pass
132
+ resources/list: pass
133
+ resources/read: pass
134
+ resources/templates/list: pass
135
+ prompts/list: pass
136
+ prompts/get: pass
137
+
138
+ No findings.
139
+ ```
140
+
141
+ Risky package:
142
+
143
+ ```text
144
+ Codex Plugin Doctor
145
+ ===================
146
+ Status: FAIL
147
+ Target: <repo>\examples\codex-doctor-risky
148
+ Summary: 1 fail, 0 warn, 1 total
149
+
150
+ Failures
151
+ --------
152
+ x plugin.security.hard_coded_secret
153
+ Message: The MCP server `dangerServer` contains a hard-coded secret-like env value for `OPENAI_API_KEY`.
154
+ Impact: Hard-coded credentials inside plugin bundles increase leakage risk and make secure rotation difficult.
155
+ Suggested fix: Replace the literal value for `OPENAI_API_KEY` with an environment reference or injected secret outside the package.
156
+ ```
157
+
158
+ ## Useful Commands
159
+
160
+ Run these from a Codex plugin package root:
161
+
162
+ ```bash
163
+ codex-plugin-doctor --version
164
+ codex-plugin-doctor self-test
165
+ codex-plugin-doctor init my-plugin
166
+ codex-plugin-doctor compat .
167
+ codex-plugin-doctor compat . --client codex
168
+ codex-plugin-doctor compat . --client generic-mcp
169
+ codex-plugin-doctor compat . --client claude-desktop
170
+ codex-plugin-doctor compat . --client claude-desktop --install-preview
171
+ codex-plugin-doctor compat . --client claude-desktop --apply --backup
172
+ codex-plugin-doctor compat . --client cursor
173
+ codex-plugin-doctor compat . --client cursor --install-preview
174
+ codex-plugin-doctor compat . --client cursor --apply --backup
175
+ codex-plugin-doctor compat . --scorecard
176
+ codex-plugin-doctor compat . --json
177
+ codex-plugin-doctor compat . --json --output compatibility.json
178
+ codex-plugin-doctor check .
179
+ codex-plugin-doctor check . --json
180
+ codex-plugin-doctor check . --json --output report.json
181
+ codex-plugin-doctor check . --markdown --output report.md
182
+ codex-plugin-doctor check . --badge-json --output doctor-badge.json
183
+ codex-plugin-doctor check . --badge-markdown
184
+ codex-plugin-doctor check . --sarif --output results.sarif
185
+ codex-plugin-doctor check . --ascii
186
+ codex-plugin-doctor check . --no-animations
187
+ codex-plugin-doctor check . --runtime
188
+ codex-plugin-doctor check . --config .codex-doctor.json
189
+ codex-plugin-doctor check . --json --runtime --verbose-runtime
190
+ ```
191
+
192
+ `self-test` runs the bundled runtime-complete sample through static validation, runtime MCP probes, and the compatibility scorecard. It is the fastest post-install check after `npm install -g codex-plugin-doctor`.
193
+
194
+ `compat --client claude-desktop` checks whether the MCP package can be added to the local Claude Desktop setup. On Windows it looks for `%APPDATA%\Claude\claude_desktop_config.json`; on macOS it looks for `~/Library/Application Support/Claude/claude_desktop_config.json`. A valid existing config returns `PASS`, a missing Claude Desktop install returns `WARN`, and a malformed local config returns `FAIL` so you do not add new servers into a broken config file. If the package server name already exists in Claude Desktop, the command returns `WARN` with the duplicate server name. Add `--install-preview` to print the JSON snippet that should be merged into `claude_desktop_config.json`; it does not modify files. Use `--apply --backup` only when you want the CLI to create a timestamped backup and merge the server config. Apply mode refuses to overwrite duplicate server names.
195
+
196
+ `compat --client cursor` checks whether the MCP package can be added to Cursor. It prefers a project-level `.cursor/mcp.json` when one already exists in the target package, then falls back to the global `~/.cursor/mcp.json` path. A valid existing config returns `PASS`, a missing Cursor config returns `WARN`, malformed JSON returns `FAIL`, and duplicate MCP server names return `WARN`. Add `--install-preview` to print the JSON snippet that should be merged into Cursor's `mcp.json`; it does not modify files. Use `--apply --backup` only when you want the CLI to create a timestamped backup and merge the server config. Apply mode refuses to overwrite duplicate server names.
197
+
198
+ `compat --scorecard` turns the compatibility matrix into a compact score summary. `PASS` maps to `100`, `WARN` maps to `70`, and `FAIL` or `SKIPPED` maps to `0`.
199
+
200
+ `check --badge-json` emits Shields endpoint-compatible JSON such as `{"schemaVersion":1,"label":"doctor","message":"PASS","color":"brightgreen"}`. `check --badge-markdown` emits a static shields.io Markdown badge for README or release notes. Badge output is intentionally limited to single package checks, not `check --installed`.
201
+
202
+ Optional local policy file:
203
+
204
+ ```json
205
+ {
206
+ "ignoreRules": ["plugin.heuristic.description.too_long"],
207
+ "failOnWarnings": true
208
+ }
209
+ ```
210
+
211
+ Run these when you want Codex Plugin Doctor to find plugins from the local Codex installation:
212
+
213
+ ```bash
214
+ codex-plugin-doctor list --installed
215
+ codex-plugin-doctor check --installed
216
+ codex-plugin-doctor check --installed --all-summary
217
+ codex-plugin-doctor check --installed github
218
+ codex-plugin-doctor check --installed github --runtime --no-animations
219
+ codex-plugin-doctor explain plugin.security.hard_coded_secret
220
+ ```
221
+
222
+ ## GitHub Action
223
+
224
+ ```yaml
225
+ name: Validate Codex plugin
226
+
227
+ on:
228
+ pull_request:
229
+
230
+ jobs:
231
+ doctor:
232
+ runs-on: ubuntu-latest
233
+ steps:
234
+ - uses: actions/checkout@v4
235
+ - uses: Esquetta/CodexPluginDoctor@v0.5.0
236
+ with:
237
+ version: "0.5.0"
238
+ path: .
239
+ runtime: "false"
240
+ ```
241
+
242
+ For runtime probing, SARIF output, installed plugin cache checks, and pinned release examples, see [GitHub Action Usage](./docs/engineering/github-action-usage.md).
243
+
244
+ To self-test this repository after cloning it:
245
+
246
+ ```bash
247
+ codex-plugin-doctor check examples/codex-doctor-runtime --runtime --no-animations
248
+ ```
249
+
250
+ ## Repository Layout
251
+
252
+ ```text
253
+ docs/ Product, engineering, security, and release docs
254
+ examples/ Manual plugin packs for local CLI testing
255
+ src/ CLI, validation logic, runtime probing, reports
256
+ tests/ Fixture-based regression tests
257
+ validation-sessions/ Real-world validation waves and tuning notes
258
+ ```
259
+
260
+ ## Validation Evidence
261
+
262
+ The validator is tuned against local fixtures and real marketplace-style plugin packages. See:
263
+
264
+ - [Real-World Validation Workflow](./docs/engineering/real-world-validation-workflow.md)
265
+ - [Validation Sessions](./validation-sessions/README.md)
266
+ - [Examples](./examples/README.md)
267
+ - [Rule Catalog](./docs/rules/catalog.md)
268
+
269
+ Recent validation waves covered:
270
+
271
+ - curated Codex plugin cache packages
272
+ - marketplace-style plugin snapshots
273
+ - YAML block-scalar skill metadata
274
+ - media and visual workflow metadata
275
+
276
+ ## Release Readiness
277
+
278
+ Release preparation is reproducible from the repository:
279
+
280
+ ```bash
281
+ npm run prepare-release
282
+ ```
283
+
284
+ This runs tests, builds the TypeScript output, and performs `npm pack --dry-run`.
285
+
286
+ Related docs:
287
+
288
+ - [Changelog](./CHANGELOG.md)
289
+ - [Contributing](./CONTRIBUTING.md)
290
+ - [Security Policy](./SECURITY.md)
291
+ - [Code of Conduct](./CODE_OF_CONDUCT.md)
292
+ - [NPM Release Checklist](./docs/engineering/npm-release-checklist.md)
293
+ - [Release Candidate Workflow](./docs/engineering/release-candidate-workflow.md)
294
+ - [v0.1.0 Release Notes](./docs/engineering/v0.1.0-final-release-notes.md)
295
+
296
+ ## Contributing
297
+
298
+ Contributions are welcome once the repository is public. Start with:
299
+
300
+ - [Contributing](./CONTRIBUTING.md)
301
+ - [Security Policy](./SECURITY.md)
302
+ - [Validation tuning issue template](./.github/ISSUE_TEMPLATE/validation_tuning.yml)
303
+
304
+ ## Support
305
+
306
+ If this tool saves you time, GitHub stars and sponsorship help signal that the project is worth continuing.
307
+
308
+ - Star the repository on GitHub.
309
+ - Use GitHub Sponsors through the repository funding link.
310
+ - Open validation tuning issues for false positives or false negatives.
311
+
312
+ ## Product Direction
313
+
314
+ Codex Plugin Doctor starts as a Codex-specific validator and can grow into a broader MCP Doctor over time.
315
+
316
+ The immediate goal is not a marketplace, dashboard, or hosted website. The immediate goal is a trustworthy local preflight check for Codex-compatible plugin bundles.
@@ -0,0 +1,15 @@
1
+ export interface McpInstallPreviewLike {
2
+ targetPath: string;
3
+ configPath: string;
4
+ snippet: {
5
+ mcpServers: Record<string, unknown>;
6
+ };
7
+ }
8
+ export interface ApplyInstallResult {
9
+ client: string;
10
+ configPath: string;
11
+ backupPath: string | null;
12
+ appliedServers: string[];
13
+ }
14
+ export declare function applyInstallPreview(client: string, preview: McpInstallPreviewLike): Promise<ApplyInstallResult>;
15
+ export declare function renderApplyInstallResult(result: ApplyInstallResult): string;