unslop-mcp 1.2.0 → 1.2.1

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
@@ -2,8 +2,9 @@
2
2
 
3
3
  **Your agent can write the code. Stop letting it ship the same AI interface.**
4
4
 
5
+ [![npm version](https://img.shields.io/npm/v/unslop-mcp.svg)](https://www.npmjs.com/package/unslop-mcp)
6
+ [![npm downloads](https://img.shields.io/npm/dm/unslop-mcp.svg)](https://www.npmjs.com/package/unslop-mcp)
5
7
  [![CI](https://github.com/avivgerz-hue/unslop/actions/workflows/ci.yml/badge.svg)](https://github.com/avivgerz-hue/unslop/actions/workflows/ci.yml)
6
- [![npm version](https://img.shields.io/npm/v/unslop.svg)](https://www.npmjs.com/package/unslop)
7
8
  [![Node.js 20.19+](https://img.shields.io/badge/node-%3E%3D20.19-3c873a)](https://nodejs.org/)
8
9
  [![MIT license](https://img.shields.io/badge/license-MIT-111111)](LICENSE)
9
10
 
@@ -16,7 +17,7 @@ Works with **Claude Code, OpenAI Codex, Cursor, Windsurf, Cline**, and any agent
16
17
  ![Before and after unslop: a generic purple-gradient AI landing page transformed into a precise, token-driven Linear Dark dashboard](https://raw.githubusercontent.com/avivgerz-hue/unslop/main/docs/assets/before-after-unslop.png)
17
18
 
18
19
  ```bash
19
- npx github:avivgerz-hue/unslop init
20
+ npx -y unslop-mcp init
20
21
  ```
21
22
 
22
23
  That one command installs the `linear-dark` design contract into `.claude/skills/unslop/SKILL.md`, `CLAUDE.md`, `AGENTS.md`, `.cursorrules`, `.windsurfrules`, and `.clinerules`, then merges the native server into `.mcp.json`. Existing instructions and unrelated MCP servers are preserved.
@@ -56,7 +57,7 @@ BEFORE: probabilistic taste AFTER: enforceable design physics
56
57
  ### 1. Choose a design system
57
58
 
58
59
  ```bash
59
- npx github:avivgerz-hue/unslop init --preset linear-dark
60
+ npx -y unslop-mcp init --preset linear-dark
60
61
  ```
61
62
 
62
63
  ```text
@@ -69,7 +70,7 @@ Installed the linear-dark design system:
69
70
  created .clinerules
70
71
  created .mcp.json
71
72
 
72
- Next: run npx github:avivgerz-hue/unslop audit . before your agent writes more UI.
73
+ Next: run npx -y unslop-mcp audit . before your agent writes more UI.
73
74
  ```
74
75
 
75
76
  Then ask your agent:
@@ -79,7 +80,7 @@ Then ask your agent:
79
80
  ### 2. Audit the interface
80
81
 
81
82
  ```bash
82
- npx github:avivgerz-hue/unslop audit src
83
+ npx -y unslop-mcp audit src
83
84
  ```
84
85
 
85
86
  ```text
@@ -96,10 +97,10 @@ Design Integrity Score: 86/100 (B)
96
97
  The full output also contains a copy-ready refactoring prompt. Machine-readable output is one flag away:
97
98
 
98
99
  ```bash
99
- npx github:avivgerz-hue/unslop audit . --json
100
- npx github:avivgerz-hue/unslop audit . --prompt
101
- npx github:avivgerz-hue/unslop audit . --fail-under 90
102
- npx github:avivgerz-hue/unslop audit . --no-fail
100
+ npx -y unslop-mcp audit . --json
101
+ npx -y unslop-mcp audit . --prompt
102
+ npx -y unslop-mcp audit . --fail-under 90
103
+ npx -y unslop-mcp audit . --no-fail
103
104
  ```
104
105
 
105
106
  By default, an audit exits `1` when it finds violations and `0` when clean. Invalid usage exits `2`. Unsupported or empty directories still produce a valid report with zero scanned files.
@@ -109,13 +110,13 @@ By default, an audit exits `1` when it finds violations and `0` when clean. Inva
109
110
  From a local stylesheet:
110
111
 
111
112
  ```bash
112
- npx github:avivgerz-hue/unslop extract ./tokens.css --name acme -o .claude/skills/unslop/SKILL.md
113
+ npx -y unslop-mcp extract ./tokens.css --name acme -o .claude/skills/unslop/SKILL.md
113
114
  ```
114
115
 
115
116
  From a live URL:
116
117
 
117
118
  ```bash
118
- npx github:avivgerz-hue/unslop extract https://example.com --name example --json -o design-dna.json
119
+ npx -y unslop-mcp extract https://example.com --name example --json -o design-dna.json
119
120
  ```
120
121
 
121
122
  The extractor inventories:
@@ -132,7 +133,7 @@ Markdown output is a complete Claude-compatible `SKILL.md`. `--json` emits both
132
133
  ### 4. Export Tailwind v4 and framework-agnostic tokens
133
134
 
134
135
  ```bash
135
- npx github:avivgerz-hue/unslop export-tokens --preset linear-dark --out tokens.css
136
+ npx -y unslop-mcp export-tokens --preset linear-dark --out tokens.css
136
137
  ```
137
138
 
138
139
  The generated stylesheet contains three complementary contracts:
@@ -163,8 +164,8 @@ Or without Tailwind:
163
164
  Compile tokens directly from extracted DNA instead of a built-in preset:
164
165
 
165
166
  ```bash
166
- npx github:avivgerz-hue/unslop export-tokens --source https://example.com --name example --out example-tokens.css
167
- npx github:avivgerz-hue/unslop export-tokens --source ./tokens.css --name acme
167
+ npx -y unslop-mcp export-tokens --source https://example.com --name example --out example-tokens.css
168
+ npx -y unslop-mcp export-tokens --source ./tokens.css --name acme
168
169
  ```
169
170
 
170
171
  `--preset` and `--source` are mutually exclusive. Without `--out`, CSS is written to stdout.
@@ -174,9 +175,11 @@ npx github:avivgerz-hue/unslop export-tokens --source ./tokens.css --name acme
174
175
  Start the zero-dependency Model Context Protocol server over stdio:
175
176
 
176
177
  ```bash
177
- npx github:avivgerz-hue/unslop mcp
178
+ npx -y unslop-mcp --mcp
178
179
  ```
179
180
 
181
+ **Published 1.2.0 compatibility:** this source update adds `--mcp`; that alias and the `unslop-mcp` executable name require a subsequent npm publish. Until then, the published tarball accepts the equivalent positional form `npx -y unslop-mcp@1.2.0 mcp`.
182
+
180
183
  `init` creates or updates this project configuration automatically:
181
184
 
182
185
  ```json
@@ -184,7 +187,7 @@ npx github:avivgerz-hue/unslop mcp
184
187
  "mcpServers": {
185
188
  "unslop": {
186
189
  "command": "npx",
187
- "args": ["github:avivgerz-hue/unslop", "mcp"]
190
+ "args": ["-y", "unslop-mcp", "--mcp"]
188
191
  }
189
192
  }
190
193
  }
@@ -193,7 +196,7 @@ npx github:avivgerz-hue/unslop mcp
193
196
  The merge preserves unrelated entries in `mcpServers`, other top-level settings, and custom fields on the unslop entry. Invalid JSON is rejected rather than overwritten. Claude Code can also register the server explicitly:
194
197
 
195
198
  ```bash
196
- claude mcp add --scope project unslop -- npx github:avivgerz-hue/unslop mcp
199
+ claude mcp add --scope project unslop -- npx -y unslop-mcp --mcp
197
200
  ```
198
201
 
199
202
  For Claude Desktop, add the same `mcpServers.unslop` entry to the application's MCP configuration. Cursor reads project `.mcp.json`; Codex and other MCP-compatible clients can launch the same stdio command.
@@ -217,14 +220,14 @@ docker run --rm -i unslop:mcp
217
220
 
218
221
  The image entrypoint is `node dist/bin/unslop.js mcp`. CI builds this image and verifies the `initialize` response, silent handling of `notifications/initialized`, and the three-tool `tools/list` response over stdio with networking disabled.
219
222
 
220
- ### Zero-build GitHub execution
223
+ ### Alternative: zero-build GitHub execution
221
224
 
222
- Run the committed distribution directly from GitHub without installing TypeScript or any other development dependency:
225
+ The npm package is the primary installation path. As an alternative, run the committed distribution directly from GitHub without installing TypeScript or any other development dependency:
223
226
 
224
227
  ```bash
225
- npx github:avivgerz-hue/unslop --version
226
- npx github:avivgerz-hue/unslop init
227
- npx github:avivgerz-hue/unslop mcp
228
+ npx -y github:avivgerz-hue/unslop --version
229
+ npx -y github:avivgerz-hue/unslop init
230
+ npx -y github:avivgerz-hue/unslop --mcp
228
231
  ```
229
232
 
230
233
  The repository includes `dist/`. During a GitHub install, `prepare` uses the local TypeScript compiler for development when it is available and otherwise validates and reuses the committed runtime and all five preset JSON files. A cold `npx` invocation still needs to download the package; no local compilation step is required.
@@ -233,12 +236,12 @@ The repository includes `dist/`. During a GitHub install, `prepare` uses the loc
233
236
 
234
237
  Machine-readable discovery documents live at the repository root:
235
238
 
236
- - [`server.json`](server.json) follows the official MCP Registry schema, declares the GitHub npm specifier with the `npx` runtime and fixed `mcp` argument, and carries the three tool summaries in the registry-approved publisher metadata extension. `package.json` includes the matching `mcpName` ownership declaration.
237
- - [`smithery.yaml`](smithery.yaml) starts `npx github:avivgerz-hue/unslop mcp` over stdio without requiring configuration.
239
+ - [`server.json`](server.json) follows the official MCP Registry schema, declares the published `unslop-mcp` npm package with the `npx` runtime and fixed `--mcp` argument, and carries the three tool summaries in the registry-approved publisher metadata extension. `package.json` includes the matching `mcpName` ownership declaration.
240
+ - [`smithery.yaml`](smithery.yaml) starts `npx -y unslop-mcp --mcp` over stdio without requiring configuration.
238
241
  - [`glama.json`](glama.json) uses Glama's schema and mirrors the exact runtime tool names, descriptions, and input schemas.
239
242
  - [`CITATION.cff`](CITATION.cff) provides CFF 1.2.0 software citation metadata for VibeFoundry and powers GitHub's citation widget.
240
243
 
241
- These files describe the project for registry indexing; their presence does not claim that a registry listing or npm publication has occurred.
244
+ The npm package is published as [`unslop-mcp`](https://www.npmjs.com/package/unslop-mcp). These files support registry indexing but do not claim that a registry listing has occurred.
242
245
 
243
246
  ## Preset gallery
244
247
 
@@ -253,9 +256,9 @@ These files describe the project for registry indexing; their presence does not
253
256
  Inspect every token and law before choosing:
254
257
 
255
258
  ```bash
256
- npx github:avivgerz-hue/unslop presets
257
- npx github:avivgerz-hue/unslop presets swiss-grid
258
- npx github:avivgerz-hue/unslop presets apple-glass --json
259
+ npx -y unslop-mcp presets
260
+ npx -y unslop-mcp presets swiss-grid
261
+ npx -y unslop-mcp presets apple-glass --json
259
262
  ```
260
263
 
261
264
  ## What the audit detects
@@ -307,7 +310,7 @@ Each generated agent-rule file contains an `unslop` managed block. Running `init
307
310
 
308
311
  ### OpenAI Codex
309
312
 
310
- Codex reads `AGENTS.md`. Keep the generated file at the repository root and ask Codex to run `npx github:avivgerz-hue/unslop audit .` after implementing UI.
313
+ Codex reads `AGENTS.md`. Keep the generated file at the repository root and ask Codex to run `npx -y unslop-mcp audit .` after implementing UI.
311
314
 
312
315
  ### Cursor, Windsurf, and Cline
313
316
 
package/SKILL.md CHANGED
@@ -10,9 +10,9 @@ You are not asked to make an interface merely “modern.” You are asked to mak
10
10
  ## Activate the design system
11
11
 
12
12
  1. If the project contains an unslop managed rule block, its preset tokens are the source of truth.
13
- 2. If no preset is installed, run `npx github:avivgerz-hue/unslop init` or ask which built-in preset fits the product. Do not improvise a second token system.
13
+ 2. If no preset is installed, run `npx -y unslop-mcp init` or ask which built-in preset fits the product. Do not improvise a second token system.
14
14
  3. Inspect existing semantic components, tokens, content hierarchy, and interaction patterns before writing UI.
15
- 4. Run `npx github:avivgerz-hue/unslop audit .` before and after frontend work. Turn each reported `file:line` into a concrete refactor; never suppress a rule to improve the score.
15
+ 4. Run `npx -y unslop-mcp audit .` before and after frontend work. Turn each reported `file:line` into a concrete refactor; never suppress a rule to improve the score.
16
16
 
17
17
  ## The anti-slop contract
18
18
 
@@ -70,7 +70,7 @@ You are not asked to make an interface merely “modern.” You are asked to mak
70
70
  2. **Compose:** define the information hierarchy and responsive grid before choosing effects.
71
71
  3. **Tokenize:** map every color, font, size, radius, shadow, and spacing decision to the selected preset.
72
72
  4. **Implement:** build semantic, responsive, keyboard-accessible components with complete states.
73
- 5. **Audit:** run `npx github:avivgerz-hue/unslop audit .` and resolve all findings at their exact locations.
73
+ 5. **Audit:** run `npx -y unslop-mcp audit .` and resolve all findings at their exact locations.
74
74
  6. **Verify:** inspect the rendered result at narrow and wide viewports; test long content, large numbers, zoom, contrast, focus, and reduced motion.
75
75
 
76
76
  ## Native MCP and token workflows
@@ -84,8 +84,8 @@ When the unslop MCP server is connected, prefer its deterministic tools over rei
84
84
  For component implementation, generate a framework-compatible token contract instead of inventing values:
85
85
 
86
86
  ```bash
87
- npx github:avivgerz-hue/unslop export-tokens --preset linear-dark --out tokens.css
88
- npx github:avivgerz-hue/unslop export-tokens --source ./tokens.css --name extracted --out tokens.css
87
+ npx -y unslop-mcp export-tokens --preset linear-dark --out tokens.css
88
+ npx -y unslop-mcp export-tokens --source ./tokens.css --name extracted --out tokens.css
89
89
  ```
90
90
 
91
91
  The output includes Tailwind v4 `@theme`, standard `:root` variables, and `.dark` overrides. Map Tailwind utilities to the generated `@theme` tokens. In other frameworks, consume semantic variables such as `--surface-0`, `--text-primary`, `--border-subtle`, `--font-display`, and `--shadow-md` directly. Preserve the generated token names rather than creating a competing scale.
@@ -99,11 +99,17 @@ Use the generated refactoring brief as an engineering checklist. Preserve behavi
99
99
  ## Useful commands
100
100
 
101
101
  ```bash
102
- npx github:avivgerz-hue/unslop init --preset linear-dark
103
- npx github:avivgerz-hue/unslop mcp
104
- npx github:avivgerz-hue/unslop audit .
105
- npx github:avivgerz-hue/unslop audit src --json
106
- npx github:avivgerz-hue/unslop extract https://example.com --name example -o .claude/skills/unslop/SKILL.md
107
- npx github:avivgerz-hue/unslop export-tokens --preset linear-dark --out tokens.css
108
- npx github:avivgerz-hue/unslop presets
102
+ npx -y unslop-mcp init --preset linear-dark
103
+ npx -y unslop-mcp --mcp
104
+ npx -y unslop-mcp audit .
105
+ npx -y unslop-mcp audit src --json
106
+ npx -y unslop-mcp extract https://example.com --name example -o .claude/skills/unslop/SKILL.md
107
+ npx -y unslop-mcp export-tokens --preset linear-dark --out tokens.css
108
+ npx -y unslop-mcp presets
109
+
110
+ # Alternative using the GitHub repository:
111
+ npx -y github:avivgerz-hue/unslop init
112
+ npx -y github:avivgerz-hue/unslop --mcp
109
113
  ```
114
+
115
+ For the currently published npm 1.2.0 tarball, use positional `mcp` instead of `--mcp` until a subsequent npm release includes the alias.
@@ -4,6 +4,8 @@ export interface CLIContext {
4
4
  cwd?: string;
5
5
  stdout?: (message: string) => void;
6
6
  stderr?: (message: string) => void;
7
+ input?: NodeJS.ReadableStream;
8
+ output?: NodeJS.WritableStream;
7
9
  }
8
10
  /** Execute the CLI without terminating the host process. */
9
11
  export declare function runCli(argv?: string[], context?: CLIContext): Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"unslop.d.ts","sourceRoot":"","sources":["../../bin/unslop.ts"],"names":[],"mappings":";AAeA,eAAO,MAAM,WAAW,UAAiB,CAAC;AAE1C,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAkHD,4DAA4D;AAC5D,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAA0B,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAyL9G"}
1
+ {"version":3,"file":"unslop.d.ts","sourceRoot":"","sources":["../../bin/unslop.ts"],"names":[],"mappings":";AAeA,eAAO,MAAM,WAAW,UAAiB,CAAC;AAE1C,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAChC;AAkHD,4DAA4D;AAC5D,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAA0B,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CA6L9G"}