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 +32 -29
- package/SKILL.md +18 -12
- package/dist/bin/unslop.d.ts +2 -0
- package/dist/bin/unslop.d.ts.map +1 -1
- package/dist/bin/unslop.js +336 -332
- package/dist/bin/unslop.js.map +1 -1
- package/dist/src/analyzer/slop-detector.js +1 -1
- package/dist/src/analyzer/slop-detector.js.map +1 -1
- package/dist/src/extractor/extract-dna.js +1 -1
- package/dist/src/extractor/extract-dna.js.map +1 -1
- package/dist/src/sync/rule-writer.d.ts +1 -1
- package/dist/src/sync/rule-writer.d.ts.map +1 -1
- package/dist/src/sync/rule-writer.js +3 -3
- package/dist/src/sync/rule-writer.js.map +1 -1
- package/glama.json +4 -3
- package/package.json +111 -110
- package/server.json +13 -4
- package/smithery.yaml +1 -1
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
|
+
[](https://www.npmjs.com/package/unslop-mcp)
|
|
6
|
+
[](https://www.npmjs.com/package/unslop-mcp)
|
|
5
7
|
[](https://github.com/avivgerz-hue/unslop/actions/workflows/ci.yml)
|
|
6
|
-
[](https://www.npmjs.com/package/unslop)
|
|
7
8
|
[](https://nodejs.org/)
|
|
8
9
|
[](LICENSE)
|
|
9
10
|
|
|
@@ -16,7 +17,7 @@ Works with **Claude Code, OpenAI Codex, Cursor, Windsurf, Cline**, and any agent
|
|
|
16
17
|

|
|
17
18
|
|
|
18
19
|
```bash
|
|
19
|
-
npx
|
|
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
|
|
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
|
|
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
|
|
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
|
|
100
|
-
npx
|
|
101
|
-
npx
|
|
102
|
-
npx
|
|
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
|
|
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
|
|
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
|
|
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
|
|
167
|
-
npx
|
|
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
|
|
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": ["
|
|
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
|
|
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
|
-
###
|
|
223
|
+
### Alternative: zero-build GitHub execution
|
|
221
224
|
|
|
222
|
-
|
|
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
|
|
237
|
-
- [`smithery.yaml`](smithery.yaml) starts `npx
|
|
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
|
-
|
|
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
|
|
257
|
-
npx
|
|
258
|
-
npx
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
88
|
-
npx
|
|
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
|
|
103
|
-
npx
|
|
104
|
-
npx
|
|
105
|
-
npx
|
|
106
|
-
npx
|
|
107
|
-
npx
|
|
108
|
-
npx
|
|
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.
|
package/dist/bin/unslop.d.ts
CHANGED
|
@@ -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>;
|
package/dist/bin/unslop.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|