@nimblebrain/mpak 0.0.1 → 0.0.2

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.
Files changed (94) hide show
  1. package/.claude/settings.local.json +3 -1
  2. package/CLAUDE.md +73 -34
  3. package/README.md +222 -57
  4. package/dist/commands/search.d.ts +12 -0
  5. package/dist/commands/search.d.ts.map +1 -0
  6. package/dist/commands/search.js +144 -0
  7. package/dist/commands/search.js.map +1 -0
  8. package/dist/commands/skills/index.d.ts +8 -0
  9. package/dist/commands/skills/index.d.ts.map +1 -0
  10. package/dist/commands/skills/index.js +8 -0
  11. package/dist/commands/skills/index.js.map +1 -0
  12. package/dist/commands/skills/install.d.ts +9 -0
  13. package/dist/commands/skills/install.d.ts.map +1 -0
  14. package/dist/commands/skills/install.js +110 -0
  15. package/dist/commands/skills/install.js.map +1 -0
  16. package/dist/commands/skills/list.d.ts +8 -0
  17. package/dist/commands/skills/list.d.ts.map +1 -0
  18. package/dist/commands/skills/list.js +89 -0
  19. package/dist/commands/skills/list.js.map +1 -0
  20. package/dist/commands/skills/pack.d.ts +22 -0
  21. package/dist/commands/skills/pack.d.ts.map +1 -0
  22. package/dist/commands/skills/pack.js +116 -0
  23. package/dist/commands/skills/pack.js.map +1 -0
  24. package/dist/commands/skills/pull.d.ts +9 -0
  25. package/dist/commands/skills/pull.d.ts.map +1 -0
  26. package/dist/commands/skills/pull.js +68 -0
  27. package/dist/commands/skills/pull.js.map +1 -0
  28. package/dist/commands/skills/search.d.ts +14 -0
  29. package/dist/commands/skills/search.d.ts.map +1 -0
  30. package/dist/commands/skills/search.js +53 -0
  31. package/dist/commands/skills/search.js.map +1 -0
  32. package/dist/commands/skills/show.d.ts +8 -0
  33. package/dist/commands/skills/show.d.ts.map +1 -0
  34. package/dist/commands/skills/show.js +64 -0
  35. package/dist/commands/skills/show.js.map +1 -0
  36. package/dist/commands/skills/validate.d.ts +25 -0
  37. package/dist/commands/skills/validate.d.ts.map +1 -0
  38. package/dist/commands/skills/validate.js +191 -0
  39. package/dist/commands/skills/validate.js.map +1 -0
  40. package/dist/lib/api/skills-client.d.ts +30 -0
  41. package/dist/lib/api/skills-client.d.ts.map +1 -0
  42. package/dist/lib/api/skills-client.js +110 -0
  43. package/dist/lib/api/skills-client.js.map +1 -0
  44. package/dist/program.d.ts +5 -1
  45. package/dist/program.d.ts.map +1 -1
  46. package/dist/program.js +98 -33
  47. package/dist/program.js.map +1 -1
  48. package/dist/schemas/generated/api-responses.d.ts +541 -0
  49. package/dist/schemas/generated/api-responses.d.ts.map +1 -0
  50. package/dist/schemas/generated/api-responses.js +313 -0
  51. package/dist/schemas/generated/api-responses.js.map +1 -0
  52. package/dist/schemas/generated/auth.d.ts +18 -0
  53. package/dist/schemas/generated/auth.d.ts.map +1 -0
  54. package/dist/schemas/generated/auth.js +18 -0
  55. package/dist/schemas/generated/auth.js.map +1 -0
  56. package/dist/schemas/generated/index.d.ts +5 -0
  57. package/dist/schemas/generated/index.d.ts.map +1 -0
  58. package/dist/schemas/generated/index.js +6 -0
  59. package/dist/schemas/generated/index.js.map +1 -0
  60. package/dist/schemas/generated/package.d.ts +43 -0
  61. package/dist/schemas/generated/package.d.ts.map +1 -0
  62. package/dist/schemas/generated/package.js +20 -0
  63. package/dist/schemas/generated/package.js.map +1 -0
  64. package/dist/schemas/generated/skill.d.ts +381 -0
  65. package/dist/schemas/generated/skill.d.ts.map +1 -0
  66. package/dist/schemas/generated/skill.js +216 -0
  67. package/dist/schemas/generated/skill.js.map +1 -0
  68. package/dist/utils/config-manager.d.ts +13 -1
  69. package/dist/utils/config-manager.d.ts.map +1 -1
  70. package/dist/utils/config-manager.js +76 -11
  71. package/dist/utils/config-manager.js.map +1 -1
  72. package/package.json +6 -2
  73. package/src/commands/search.ts +191 -0
  74. package/src/commands/skills/index.ts +7 -0
  75. package/src/commands/skills/install.ts +129 -0
  76. package/src/commands/skills/list.ts +116 -0
  77. package/src/commands/skills/pack.test.ts +260 -0
  78. package/src/commands/skills/pack.ts +145 -0
  79. package/src/commands/skills/pull.ts +88 -0
  80. package/src/commands/skills/search.ts +73 -0
  81. package/src/commands/skills/show.ts +72 -0
  82. package/src/commands/skills/validate.test.ts +466 -0
  83. package/src/commands/skills/validate.ts +227 -0
  84. package/src/lib/api/skills-client.ts +148 -0
  85. package/src/program.test.ts +1 -3
  86. package/src/program.ts +125 -35
  87. package/src/schemas/config.v1.schema.json +37 -0
  88. package/src/schemas/generated/api-responses.ts +386 -0
  89. package/src/schemas/generated/auth.ts +21 -0
  90. package/src/schemas/generated/index.ts +5 -0
  91. package/src/schemas/generated/package.ts +29 -0
  92. package/src/schemas/generated/skill.ts +271 -0
  93. package/src/utils/config-manager.test.ts +182 -2
  94. package/src/utils/config-manager.ts +126 -12
@@ -11,7 +11,9 @@
11
11
  "Bash(npm publish:*)",
12
12
  "Bash(git push)",
13
13
  "Bash(git tag:*)",
14
- "Bash(git push:*)"
14
+ "Bash(git push:*)",
15
+ "Bash(gh pr create:*)",
16
+ "Bash(ls:*)"
15
17
  ]
16
18
  }
17
19
  }
package/CLAUDE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # mpak CLI
2
2
 
3
- CLI for discovering and downloading MCPB bundles from the mpak registry.
3
+ CLI for MCP bundles and Agent Skills.
4
4
 
5
5
  ## Architecture
6
6
 
@@ -11,15 +11,24 @@ This is a standalone CLI that uses only the public v1 API. It has no dependencie
11
11
  | File | Purpose |
12
12
  |------|---------|
13
13
  | `src/program.ts` | Commander program setup with all commands |
14
- | `src/lib/api/registry-client.ts` | API client for v1 endpoints |
14
+ | `src/lib/api/registry-client.ts` | API client for bundle endpoints |
15
+ | `src/lib/api/skills-client.ts` | API client for skill endpoints |
15
16
  | `src/lib/api/schema.d.ts` | Generated types from OpenAPI spec |
16
- | `src/commands/packages/search.ts` | Search command implementation |
17
- | `src/commands/packages/show.ts` | Show/info command implementation |
18
- | `src/commands/packages/pull.ts` | Pull/install command implementation |
19
- | `src/commands/packages/run.ts` | Run command implementation (caching, extraction, execution, user_config substitution) |
17
+ | `src/commands/packages/*.ts` | Bundle commands (search, show, pull, run) |
18
+ | `src/commands/skills/*.ts` | Skill commands (validate, pack, search, show, pull, install, list) |
20
19
  | `src/commands/config.ts` | Config commands (set, get, list, clear) |
20
+ | `src/schemas/generated/skill.ts` | Skill validation schemas (Zod) |
21
21
  | `src/utils/config-manager.ts` | Config file handling (~/.mpak/config.json) |
22
22
 
23
+ ### Command Structure
24
+
25
+ ```
26
+ mpak search <query> # Unified search (bundles + skills)
27
+ mpak bundle <command> # MCP bundle operations
28
+ mpak skill <command> # Agent skill operations
29
+ mpak config <command> # Configuration management
30
+ ```
31
+
23
32
  ### Type Generation
24
33
 
25
34
  Types are generated from the server's OpenAPI spec using `openapi-typescript`:
@@ -44,7 +53,7 @@ export type Bundle = BundleSearchResponse['bundles'][number];
44
53
 
45
54
  ## v1 API Endpoints
46
55
 
47
- The CLI uses these public endpoints:
56
+ ### Bundle Endpoints
48
57
 
49
58
  | Endpoint | Description |
50
59
  |----------|-------------|
@@ -52,9 +61,18 @@ The CLI uses these public endpoints:
52
61
  | `GET /v1/bundles/@{scope}/{package}` | Get bundle details (metadata, readme) |
53
62
  | `GET /v1/bundles/@{scope}/{package}/versions` | List versions with platform availability |
54
63
  | `GET /v1/bundles/@{scope}/{package}/versions/{version}/download` | Get download URL for specific version/platform |
55
- | `GET /v1/bundles/@{scope}/{package}/versions/latest/download` | Get download URL for latest version |
56
64
 
57
- ### Platform Selection
65
+ ### Skill Endpoints
66
+
67
+ | Endpoint | Description |
68
+ |----------|-------------|
69
+ | `GET /v1/skills/search` | Search skills by query, tags, category |
70
+ | `GET /v1/skills/@{scope}/{name}` | Get skill details |
71
+ | `GET /v1/skills/@{scope}/{name}/download` | Get download URL for latest version |
72
+ | `GET /v1/skills/@{scope}/{name}/versions/{version}/download` | Get download URL for specific version |
73
+ | `POST /v1/skills/announce` | Announce skill version (OIDC auth) |
74
+
75
+ ### Platform Selection (Bundles)
58
76
 
59
77
  Download endpoints accept `os` and `arch` query parameters:
60
78
  - `os`: darwin, linux, win32, any
@@ -80,12 +98,12 @@ npm run build
80
98
  The CLI defaults to `https://api.mpak.dev`. For local development:
81
99
 
82
100
  ```bash
83
- # Start the server (from ../server)
84
- cd ../server && npm run dev
101
+ # Start the server (from ../mpak/server)
102
+ cd ../mpak/server && npm run dev
85
103
 
86
104
  # Run CLI commands with local registry
87
- MPAK_REGISTRY_URL=http://localhost:3200 npm run dev -- search echo
88
- MPAK_REGISTRY_URL=http://localhost:3200 node dist/index.js pull @nimblebraininc/echo
105
+ MPAK_REGISTRY_URL=http://localhost:3200 npm run dev -- bundle search echo
106
+ MPAK_REGISTRY_URL=http://localhost:3200 node dist/index.js skill search strategy
89
107
  ```
90
108
 
91
109
  ### Verification
@@ -114,20 +132,45 @@ npm publish --otp=<code>
114
132
  git push && git push --tags
115
133
  ```
116
134
 
117
- ## Commands (MVP)
135
+ ## Commands
136
+
137
+ ### Unified Search
118
138
 
119
139
  | Command | Description |
120
140
  |---------|-------------|
121
- | `search <query>` | Search public bundles |
122
- | `show <package>` | Show bundle details with platforms |
123
- | `info <package>` | Alias for show |
124
- | `pull <package>` | Download a bundle |
125
- | `install <package>` | Alias for pull |
126
- | `run <package>` | Run an MCP server (pulls, caches, executes) |
127
- | `config set <pkg> <k=v...>` | Store config values for a package |
128
- | `config get <pkg>` | Show stored config (values masked) |
129
- | `config list` | List packages with stored config |
130
- | `config clear <pkg> [key]` | Clear stored config |
141
+ | `mpak search <query>` | Search bundles and skills |
142
+ | `mpak search <query> --type bundle` | Search bundles only |
143
+ | `mpak search <query> --type skill` | Search skills only |
144
+
145
+ ### Bundle Commands
146
+
147
+ | Command | Description |
148
+ |---------|-------------|
149
+ | `mpak bundle search <query>` | Search public bundles |
150
+ | `mpak bundle show <package>` | Show bundle details with platforms |
151
+ | `mpak bundle pull <package>` | Download a bundle |
152
+ | `mpak bundle run <package>` | Run an MCP server (pulls, caches, executes) |
153
+
154
+ ### Skill Commands
155
+
156
+ | Command | Description |
157
+ |---------|-------------|
158
+ | `mpak skill validate <path>` | Validate skill directory against Agent Skills spec |
159
+ | `mpak skill pack <path>` | Create a .skill bundle |
160
+ | `mpak skill search <query>` | Search skills in registry |
161
+ | `mpak skill show <name>` | Show skill details |
162
+ | `mpak skill pull <name>` | Download a .skill bundle |
163
+ | `mpak skill install <name>` | Install to ~/.claude/skills/ |
164
+ | `mpak skill list` | List installed skills |
165
+
166
+ ### Config Commands
167
+
168
+ | Command | Description |
169
+ |---------|-------------|
170
+ | `mpak config set <pkg> <k=v...>` | Store config values for a package |
171
+ | `mpak config get <pkg>` | Show stored config (values masked) |
172
+ | `mpak config list` | List packages with stored config |
173
+ | `mpak config clear <pkg> [key]` | Clear stored config |
131
174
 
132
175
  ## User Config (MCPB v0.3)
133
176
 
@@ -153,7 +196,7 @@ Packages can declare `user_config` in their manifest for values like API keys:
153
196
  }
154
197
  ```
155
198
 
156
- When `mpak run` executes, it substitutes `${user_config.*}` placeholders with actual values.
199
+ When `mpak bundle run` executes, it substitutes `${user_config.*}` placeholders with actual values.
157
200
 
158
201
  ### Two Ways to Provide Config
159
202
 
@@ -166,7 +209,7 @@ Use `mpak config set` with keys matching the manifest's `user_config` field name
166
209
  mpak config set @nimblebraininc/ipinfo api_key=your_token
167
210
 
168
211
  # Run uses stored config automatically
169
- mpak run @nimblebraininc/ipinfo
212
+ mpak bundle run @nimblebraininc/ipinfo
170
213
 
171
214
  # View stored config (values masked)
172
215
  mpak config get @nimblebraininc/ipinfo
@@ -181,7 +224,7 @@ Set the actual environment variable directly in your Claude Desktop config:
181
224
  "mcpServers": {
182
225
  "ipinfo": {
183
226
  "command": "mpak",
184
- "args": ["run", "@nimblebraininc/ipinfo"],
227
+ "args": ["bundle", "run", "@nimblebraininc/ipinfo"],
185
228
  "env": {
186
229
  "IPINFO_API_TOKEN": "your_token"
187
230
  }
@@ -214,9 +257,10 @@ manifest.user_config.api_key → mpak config set ... api_key=xxx → env IPI
214
257
  ## Design Decisions
215
258
 
216
259
  1. **Standalone**: No shared dependencies with server/client. Types generated from OpenAPI.
217
- 2. **Public API only**: MVP uses only v1 API. Publishing requires separate tooling.
260
+ 2. **Public API only**: Uses v1 API. Publishing requires OIDC via GitHub Actions.
218
261
  3. **Platform detection**: Auto-detects OS/arch, allows explicit override for cross-platform downloads.
219
262
  4. **Config file**: Stores registry URL in `~/.mpak/config.json`, overridable via `MPAK_REGISTRY_URL`.
263
+ 5. **Skill schemas**: Uses Zod schemas in `src/schemas/generated/skill.ts` for validation.
220
264
 
221
265
  ## Gotchas
222
266
 
@@ -224,9 +268,4 @@ manifest.user_config.api_key → mpak config set ... api_key=xxx → env IPI
224
268
  - **Type generation**: Requires server running locally (`npm run generate:types` hits localhost:3200)
225
269
  - **Schema changes**: May introduce breaking type changes; always run full verification after regenerating
226
270
  - **Env merge order**: Use `{ ...substitutedEnv, ...process.env }` so parent env vars (Claude Desktop) take priority over manifest substitutions
227
-
228
- ## Future Considerations
229
-
230
- - The CLI will be broken out into a completely standalone repository
231
- - Authentication commands (login, publish) may be added when needed
232
- - Consider adding `npx` support for zero-install usage
271
+ - **Skill endpoints**: Currently implemented in server code but may not be deployed to production yet
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
8
8
  [![Discord](https://img.shields.io/badge/Discord-%235865F2.svg?logo=discord&logoColor=white)](https://www.nimblebrain.ai/discord?utm_source=github&utm_medium=readme&utm_campaign=mpak-cli&utm_content=discord-badge)
9
9
 
10
- CLI for discovering and downloading MCPB bundles from the mpak registry.
10
+ CLI for MCP bundles and Agent Skills.
11
11
 
12
12
  ## Installation
13
13
 
@@ -18,36 +18,66 @@ npm install -g @nimblebrain/mpak
18
18
  ## Quick Start
19
19
 
20
20
  ```bash
21
- # Search for bundles
21
+ # Search for everything (bundles + skills)
22
22
  mpak search postgres
23
23
 
24
- # Show bundle details
25
- mpak show @owner/my-server
24
+ # Search bundles only
25
+ mpak bundle search postgres
26
26
 
27
- # Download a bundle
28
- mpak pull @owner/my-server
29
- mpak pull @owner/my-server@1.0.0 # specific version
27
+ # Run an MCP server
28
+ mpak bundle run @owner/my-server
29
+
30
+ # Search skills only
31
+ mpak skill search strategy
32
+
33
+ # Install a skill
34
+ mpak skill install @owner/my-skill
30
35
  ```
31
36
 
32
37
  ## Commands
33
38
 
39
+ ### Unified Search
40
+
41
+ Search across both bundles and skills.
42
+
43
+ ```bash
44
+ # Search everything
45
+ mpak search postgres
46
+
47
+ # Filter by type
48
+ mpak search postgres --type bundle
49
+ mpak search strategy --type skill
50
+
51
+ # Sort and limit
52
+ mpak search mcp --sort downloads --limit 10
53
+ ```
54
+
55
+ Options:
56
+ - `--type <type>` - Filter by type (bundle, skill)
57
+ - `--sort <field>` - Sort by: downloads, recent, name
58
+ - `--limit <n>` - Limit results
59
+ - `--offset <n>` - Pagination offset
60
+ - `--json` - Output as JSON
61
+
62
+ ### Bundle Commands
63
+
64
+ MCP bundle operations for discovering, downloading, and running MCP servers.
65
+
34
66
  | Command | Description |
35
67
  |---------|-------------|
36
- | `search <query>` | Search public bundles |
37
- | `show <package>` | Show bundle details with platforms |
38
- | `info <package>` | Alias for show |
39
- | `pull <package>` | Download a bundle |
40
- | `install <package>` | Alias for pull |
41
- | `run <package>` | Run an MCP server from the registry |
68
+ | `mpak bundle search <query>` | Search public bundles |
69
+ | `mpak bundle show <package>` | Show bundle details with platforms |
70
+ | `mpak bundle pull <package>` | Download a bundle |
71
+ | `mpak bundle run <package>` | Run an MCP server from the registry |
42
72
 
43
- ### search
73
+ #### bundle search
44
74
 
45
75
  Search for bundles in the registry.
46
76
 
47
77
  ```bash
48
- mpak search echo
49
- mpak search --type python echo
50
- mpak search --sort downloads --limit 10 mcp
78
+ mpak bundle search echo
79
+ mpak bundle search --type python echo
80
+ mpak bundle search --sort downloads --limit 10 mcp
51
81
  ```
52
82
 
53
83
  Options:
@@ -57,13 +87,13 @@ Options:
57
87
  - `--offset <n>` - Pagination offset
58
88
  - `--json` - Output as JSON
59
89
 
60
- ### show / info
90
+ #### bundle show
61
91
 
62
92
  Display detailed information about a bundle.
63
93
 
64
94
  ```bash
65
- mpak show @nimblebraininc/echo
66
- mpak show @nimblebraininc/echo --json
95
+ mpak bundle show @nimblebraininc/echo
96
+ mpak bundle show @nimblebraininc/echo --json
67
97
  ```
68
98
 
69
99
  Shows:
@@ -76,22 +106,22 @@ Shows:
76
106
  Options:
77
107
  - `--json` - Output as JSON
78
108
 
79
- ### pull / install
109
+ #### bundle pull
80
110
 
81
111
  Download a bundle from the registry.
82
112
 
83
113
  ```bash
84
114
  # Download latest version for current platform
85
- mpak pull @nimblebraininc/echo
115
+ mpak bundle pull @nimblebraininc/echo
86
116
 
87
117
  # Download specific version
88
- mpak pull @nimblebraininc/echo@1.0.0
118
+ mpak bundle pull @nimblebraininc/echo@1.0.0
89
119
 
90
120
  # Download for different platform (cross-compile use case)
91
- mpak pull @nimblebraininc/echo --os linux --arch arm64
121
+ mpak bundle pull @nimblebraininc/echo --os linux --arch arm64
92
122
 
93
123
  # Custom output path
94
- mpak pull @nimblebraininc/echo -o ./bundles/echo.mcpb
124
+ mpak bundle pull @nimblebraininc/echo -o ./bundles/echo.mcpb
95
125
  ```
96
126
 
97
127
  Options:
@@ -100,19 +130,19 @@ Options:
100
130
  - `--arch <arch>` - Target architecture: x64, arm64
101
131
  - `--json` - Output download info as JSON (doesn't download)
102
132
 
103
- ### run
133
+ #### bundle run
104
134
 
105
135
  Run an MCP server directly from the registry. Bundles are cached locally for fast subsequent runs.
106
136
 
107
137
  ```bash
108
138
  # Run latest version
109
- mpak run @nimblebraininc/echo
139
+ mpak bundle run @nimblebraininc/echo
110
140
 
111
141
  # Run specific version
112
- mpak run @nimblebraininc/echo@1.0.0
142
+ mpak bundle run @nimblebraininc/echo@1.0.0
113
143
 
114
144
  # Force re-download (update cache)
115
- mpak run @nimblebraininc/echo --update
145
+ mpak bundle run @nimblebraininc/echo --update
116
146
  ```
117
147
 
118
148
  Options:
@@ -125,7 +155,7 @@ Options:
125
155
  "mcpServers": {
126
156
  "echo": {
127
157
  "command": "mpak",
128
- "args": ["run", "@nimblebraininc/echo"]
158
+ "args": ["bundle", "run", "@nimblebraininc/echo"]
129
159
  }
130
160
  }
131
161
  }
@@ -133,6 +163,140 @@ Options:
133
163
 
134
164
  Bundles are cached in `~/.mpak/cache/` and automatically extracted on first run.
135
165
 
166
+ ### Skill Commands
167
+
168
+ Agent skill operations for validating, packaging, and installing skills.
169
+
170
+ | Command | Description |
171
+ |---------|-------------|
172
+ | `mpak skill validate <path>` | Validate a skill directory |
173
+ | `mpak skill pack <path>` | Create a .skill bundle |
174
+ | `mpak skill search <query>` | Search skills in the registry |
175
+ | `mpak skill show <name>` | Show skill details |
176
+ | `mpak skill pull <name>` | Download a .skill bundle |
177
+ | `mpak skill install <name>` | Install to ~/.claude/skills/ |
178
+ | `mpak skill list` | List installed skills |
179
+
180
+ #### skill validate
181
+
182
+ Validate a skill directory against the [Agent Skills specification](https://agentskills.io/specification).
183
+
184
+ ```bash
185
+ mpak skill validate ./my-skill
186
+ mpak skill validate ./my-skill --json
187
+ ```
188
+
189
+ Options:
190
+ - `--json` - Output as JSON
191
+
192
+ #### skill pack
193
+
194
+ Create a `.skill` bundle from a skill directory.
195
+
196
+ ```bash
197
+ mpak skill pack ./my-skill
198
+ mpak skill pack ./my-skill -o ./dist/my-skill.skill
199
+ ```
200
+
201
+ Options:
202
+ - `-o, --output <path>` - Output file path
203
+ - `--json` - Output as JSON
204
+
205
+ #### skill search
206
+
207
+ Search for skills in the registry.
208
+
209
+ ```bash
210
+ mpak skill search strategy
211
+ mpak skill search --category development docs
212
+ mpak skill search --tags documentation,refactoring
213
+ ```
214
+
215
+ Options:
216
+ - `--tags <tags>` - Filter by tags (comma-separated)
217
+ - `--category <category>` - Filter by category
218
+ - `--surface <surface>` - Filter by surface (claude-code, claude-api, claude-ai)
219
+ - `--sort <field>` - Sort by: downloads, recent, name
220
+ - `--limit <n>` - Limit results
221
+ - `--offset <n>` - Pagination offset
222
+ - `--json` - Output as JSON
223
+
224
+ #### skill show
225
+
226
+ Display detailed information about a skill.
227
+
228
+ ```bash
229
+ mpak skill show @nimblebraininc/docs-auditor
230
+ mpak skill show @nimblebraininc/docs-auditor --json
231
+ ```
232
+
233
+ Options:
234
+ - `--json` - Output as JSON
235
+
236
+ #### skill pull
237
+
238
+ Download a skill bundle from the registry.
239
+
240
+ ```bash
241
+ mpak skill pull @nimblebraininc/docs-auditor
242
+ mpak skill pull @nimblebraininc/docs-auditor -o ./skills/
243
+ ```
244
+
245
+ Options:
246
+ - `-o, --output <path>` - Output file path
247
+ - `--json` - Output as JSON
248
+
249
+ #### skill install
250
+
251
+ Download and install a skill to `~/.claude/skills/`.
252
+
253
+ ```bash
254
+ mpak skill install @nimblebraininc/docs-auditor
255
+ mpak skill install @nimblebraininc/docs-auditor --force
256
+ ```
257
+
258
+ Options:
259
+ - `--force` - Overwrite existing installation
260
+ - `--json` - Output as JSON
261
+
262
+ #### skill list
263
+
264
+ List installed skills.
265
+
266
+ ```bash
267
+ mpak skill list
268
+ mpak skill list --json
269
+ ```
270
+
271
+ Options:
272
+ - `--json` - Output as JSON
273
+
274
+ ### Config Commands
275
+
276
+ Manage per-package configuration values (e.g., API keys).
277
+
278
+ | Command | Description |
279
+ |---------|-------------|
280
+ | `mpak config set <pkg> <k=v...>` | Set config values |
281
+ | `mpak config get <pkg>` | Show config (values masked) |
282
+ | `mpak config list` | List packages with config |
283
+ | `mpak config clear <pkg> [key]` | Clear config |
284
+
285
+ ```bash
286
+ # Set API key for a package
287
+ mpak config set @nimblebraininc/ipinfo api_key=your_token
288
+
289
+ # View stored config (values are masked)
290
+ mpak config get @nimblebraininc/ipinfo
291
+
292
+ # List all packages with stored config
293
+ mpak config list
294
+
295
+ # Clear config
296
+ mpak config clear @nimblebraininc/ipinfo
297
+ mpak config clear @nimblebraininc/ipinfo api_key # Clear specific key
298
+ ```
299
+
136
300
  ## Configuration
137
301
 
138
302
  Configuration is stored in `~/.mpak/config.json`:
@@ -161,14 +325,17 @@ The CLI uses the public v1 API:
161
325
  | `GET /v1/bundles/@{scope}/{pkg}` | Get bundle details |
162
326
  | `GET /v1/bundles/@{scope}/{pkg}/versions` | List versions with platforms |
163
327
  | `GET /v1/bundles/@{scope}/{pkg}/versions/{version}/download` | Get download URL |
328
+ | `GET /v1/skills/search` | Search skills |
329
+ | `GET /v1/skills/@{scope}/{name}` | Get skill details |
330
+ | `GET /v1/skills/@{scope}/{name}/download` | Get skill download URL |
164
331
 
165
332
  ## Development
166
333
 
167
334
  ### Setup
168
335
 
169
336
  ```bash
170
- cd apps/mpak/cli
171
337
  npm install
338
+ npm run build
172
339
  ```
173
340
 
174
341
  ### Scripts
@@ -179,7 +346,8 @@ npm install
179
346
  | `npm run dev` | Run CLI in development mode |
180
347
  | `npm run typecheck` | Type check without building |
181
348
  | `npm run generate:types` | Generate types from OpenAPI spec |
182
- | `npm test` | Run tests |
349
+ | `npm test` | Run unit tests |
350
+ | `npm run test:all` | Run all tests including integration |
183
351
  | `npm run lint` | Lint source code |
184
352
 
185
353
  ### Publishing
@@ -188,7 +356,7 @@ npm install
188
356
  # Stable release
189
357
  npm publish
190
358
 
191
- # Beta/prerelease (required for versions like 0.0.1-beta.1)
359
+ # Beta/prerelease
192
360
  npm publish --tag beta
193
361
  ```
194
362
 
@@ -196,32 +364,15 @@ npm publish --tag beta
196
364
 
197
365
  1. Start the server locally:
198
366
  ```bash
199
- cd ../server
367
+ cd ../mpak/server
200
368
  npm run dev
201
369
  ```
202
370
 
203
371
  2. Run CLI with local registry:
204
372
  ```bash
205
- MPAK_REGISTRY_URL=http://localhost:3200 npm run dev -- search echo
206
- ```
207
-
208
- 3. Or build and test:
209
- ```bash
210
- npm run build
211
- MPAK_REGISTRY_URL=http://localhost:3200 node dist/index.js search echo
373
+ MPAK_REGISTRY_URL=http://localhost:3200 npm run dev -- bundle search echo
212
374
  ```
213
375
 
214
- ### Type Generation
215
-
216
- Types are generated from the server's OpenAPI spec:
217
-
218
- ```bash
219
- # Requires server running locally
220
- npm run generate:types
221
- ```
222
-
223
- This generates `src/lib/api/schema.d.ts` from `http://localhost:3200/documentation/json`.
224
-
225
376
  ### Project Structure
226
377
 
227
378
  ```
@@ -229,14 +380,28 @@ src/
229
380
  ├── index.ts # Entry point
230
381
  ├── program.ts # Commander program setup
231
382
  ├── commands/
232
- └── packages/
233
- ├── search.ts # Search command
234
- ├── show.ts # Show/info command
235
- └── pull.ts # Pull/install command
383
+ ├── packages/ # Bundle commands
384
+ ├── search.ts
385
+ ├── show.ts
386
+ │ ├── pull.ts
387
+ │ │ └── run.ts
388
+ │ ├── skills/ # Skill commands
389
+ │ │ ├── validate.ts
390
+ │ │ ├── pack.ts
391
+ │ │ ├── search.ts
392
+ │ │ ├── show.ts
393
+ │ │ ├── pull.ts
394
+ │ │ ├── install.ts
395
+ │ │ └── list.ts
396
+ │ └── config.ts # Config commands
236
397
  ├── lib/
237
398
  │ └── api/
238
- │ ├── registry-client.ts # API client
399
+ │ ├── registry-client.ts # Bundle API client
400
+ │ ├── skills-client.ts # Skills API client
239
401
  │ └── schema.d.ts # Generated OpenAPI types
402
+ ├── schemas/
403
+ │ └── generated/
404
+ │ └── skill.ts # Skill validation schemas
240
405
  └── utils/
241
406
  ├── config-manager.ts # Config file handling
242
407
  └── version.ts # Version helper
@@ -0,0 +1,12 @@
1
+ export interface UnifiedSearchOptions {
2
+ type?: 'bundle' | 'skill';
3
+ sort?: 'downloads' | 'recent' | 'name';
4
+ limit?: number;
5
+ offset?: number;
6
+ json?: boolean;
7
+ }
8
+ /**
9
+ * Unified search across bundles and skills
10
+ */
11
+ export declare function handleUnifiedSearch(query: string, options?: UnifiedSearchOptions): Promise<void>;
12
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAiBD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CA8Jf"}