@mcpskillsio/server 2.3.0 → 2.4.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,7 +2,7 @@
2
2
 
3
3
  Trust-score any AI skill or MCP server from inside Claude Code, Cursor, or any MCP client.
4
4
 
5
- 14 signals across 4 dimensions with safety scanning for prompt injection, credential theft, and supply chain attacks.
5
+ 13 standard signals (15 in Skills Mode) across 4 dimensions with safety scanning for prompt injection, credential theft, and supply chain attacks.
6
6
 
7
7
  ## Install
8
8
 
@@ -100,11 +100,19 @@ Get a boolean go/no-go decision with reasoning.
100
100
  "Should I install this MCP server? 21st-dev/magic-mcp"
101
101
  ```
102
102
 
103
+ ### `build_stack`
104
+
105
+ Recommend a vetted, pre-scored stack from MCP Skills' curated packages.
106
+
107
+ ```
108
+ "Build me a stack: auth + payments + email"
109
+ ```
110
+
103
111
  ## Full Reports
104
112
 
105
113
  Free tier returns trust tier + dimension scores (same as mcpskills.io free scans).
106
114
 
107
- For full 14-signal reports with detailed safety findings inside your IDE, set your API key:
115
+ For full reports (13 standard / 15 Skills Mode signals + safety findings) inside your IDE, set your API key:
108
116
 
109
117
  ```bash
110
118
  export MCPSKILLS_API_KEY=your_key_here
@@ -117,8 +125,8 @@ Get your API key at [mcpskills.io/api](https://mcpskills.io/api).
117
125
  The server calls the mcpskills.io trust scoring API, which:
118
126
 
119
127
  1. Fetches repo data from GitHub API and OpenSSF Scorecard
120
- 2. Scores 14 signals across 4 dimensions (Alive, Legit, Solid, Usable)
121
- 3. Detects AI skills/MCP servers and activates Skills Mode (+2 bonus signals)
128
+ 2. Scores 13 standard signals across 4 dimensions (Alive, Legit, Solid, Usable)
129
+ 3. Detects AI skills/MCP servers and activates Skills Mode (+2 bonus signals — 15 total)
122
130
  4. Runs 5 safety scans based on ClawHavoc and ToxicSkills attack patterns
123
131
  5. Assigns a trust tier: Verified (>=7.0), Established (>=4.5), New, or Blocked
124
132
 
package/index.js CHANGED
@@ -396,7 +396,7 @@ function formatSafetyResult(data) {
396
396
  const server = new Server(
397
397
  {
398
398
  name: "mcpskills",
399
- version: "2.2.0",
399
+ version: "2.4.1",
400
400
  },
401
401
  {
402
402
  capabilities: {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mcpskillsio/server",
3
- "version": "2.3.0",
4
- "description": "Trust-score any AI skill or MCP server from inside Claude Code, Cursor, or any MCP client. Accepts GitHub repos, npm packages, Smithery URLs, and OpenClaw skills. 14 signals, safety scanning, recommendations, badges, monitoring, batch checking, auto-gate decisions, and stack building from live trust data.",
3
+ "version": "2.4.1",
4
+ "description": "Trust-score any AI skill or MCP server from inside Claude Code, Cursor, or any MCP client. Accepts GitHub repos, npm packages, Smithery URLs, and OpenClaw skills. 15 signals (incl. OSV/KEV/EPSS vulnerability intelligence), safety scanning, OpenClaw frontmatter parsing + transparency scoring, recommendations, badges, monitoring, batch checking, auto-gate decisions, and stack building from live trust data.",
5
5
  "type": "module",
6
6
  "main": "index.js",
7
7
  "bin": {
@@ -1,332 +0,0 @@
1
- functionsDirectory = "/Users/michaelbrowne/Desktop/mcpskills/mcp-server/netlify/functions"
2
- functionsDirectoryOrigin = "config-v1"
3
- redirectsOrigin = "config"
4
- plugins = []
5
- headers = []
6
-
7
- [functions]
8
-
9
- [functions.nightly-crawl]
10
- schedule = "0 2 * * *"
11
-
12
- [functions.daily-scan]
13
- schedule = "0 8 * * *"
14
-
15
- [functions.weekly-digest]
16
- schedule = "0 18 * * 0"
17
-
18
- [functions.monthly-recap]
19
- schedule = "0 14 1-5 * *"
20
-
21
- [functions."*"]
22
- included_files = ["lib/fonts/**", "data/**"]
23
- external_node_modules = ["satori", "@resvg/resvg-js", "@netlify/blobs"]
24
- node_bundler = "esbuild"
25
-
26
- [build]
27
- publish = "/Users/michaelbrowne/Desktop/mcpskills/mcp-server/public"
28
- publishOrigin = "config"
29
- base = "/Users/michaelbrowne/Desktop/mcpskills/mcp-server"
30
- functions = "/Users/michaelbrowne/Desktop/mcpskills/mcp-server/netlify/functions"
31
-
32
- [build.environment]
33
-
34
- [build.processing]
35
-
36
- [build.processing.css]
37
-
38
- [build.processing.html]
39
-
40
- [build.processing.images]
41
-
42
- [build.processing.js]
43
-
44
- [build.services]
45
-
46
- [[redirects]]
47
- from = "/blog/state-of-ai-skill-security"
48
- to = "/blog/state-of-ai-skill-security.html"
49
- status = 200.0
50
- force = false
51
-
52
- [redirects.query]
53
-
54
- [redirects.conditions]
55
-
56
- [redirects.headers]
57
-
58
- [[redirects]]
59
- from = "/blog/clawhavoc-missing-trust-layer"
60
- to = "/blog/clawhavoc-missing-trust-layer.html"
61
- status = 200.0
62
- force = false
63
-
64
- [redirects.query]
65
-
66
- [redirects.conditions]
67
-
68
- [redirects.headers]
69
-
70
- [[redirects]]
71
- from = "/blog/how-to-check-ai-skill-safe"
72
- to = "/blog/how-to-check-ai-skill-safe.html"
73
- status = 200.0
74
- force = false
75
-
76
- [redirects.query]
77
-
78
- [redirects.conditions]
79
-
80
- [redirects.headers]
81
-
82
- [[redirects]]
83
- from = "/blog/score-without-github-repo"
84
- to = "/blog/score-without-github-repo.html"
85
- status = 200.0
86
- force = false
87
-
88
- [redirects.query]
89
-
90
- [redirects.conditions]
91
-
92
- [redirects.headers]
93
-
94
- [[redirects]]
95
- from = "/privacy"
96
- to = "/privacy.html"
97
- status = 200.0
98
- force = false
99
-
100
- [redirects.query]
101
-
102
- [redirects.conditions]
103
-
104
- [redirects.headers]
105
-
106
- [[redirects]]
107
- from = "/terms"
108
- to = "/terms.html"
109
- status = 200.0
110
- force = false
111
-
112
- [redirects.query]
113
-
114
- [redirects.conditions]
115
-
116
- [redirects.headers]
117
-
118
- [[redirects]]
119
- from = "/badge/*"
120
- to = "/.netlify/functions/badge/:splat"
121
- status = 200.0
122
- force = false
123
-
124
- [redirects.query]
125
-
126
- [redirects.conditions]
127
-
128
- [redirects.headers]
129
-
130
- [[redirects]]
131
- from = "/score/*"
132
- to = "/.netlify/functions/score-page/:splat"
133
- status = 200.0
134
- force = false
135
-
136
- [redirects.query]
137
-
138
- [redirects.conditions]
139
-
140
- [redirects.headers]
141
-
142
- [[redirects]]
143
- from = "/digest/rss.xml"
144
- to = "/.netlify/functions/digest-rss"
145
- status = 200.0
146
- force = false
147
-
148
- [redirects.query]
149
-
150
- [redirects.conditions]
151
-
152
- [redirects.headers]
153
-
154
- [[redirects]]
155
- from = "/digest/*"
156
- to = "/.netlify/functions/digest-page/:splat"
157
- status = 200.0
158
- force = false
159
-
160
- [redirects.query]
161
-
162
- [redirects.conditions]
163
-
164
- [redirects.headers]
165
-
166
- [[redirects]]
167
- from = "/digest"
168
- to = "/.netlify/functions/digest-page"
169
- status = 200.0
170
- force = false
171
-
172
- [redirects.query]
173
-
174
- [redirects.conditions]
175
-
176
- [redirects.headers]
177
-
178
- [[redirects]]
179
- from = "/certified"
180
- to = "/.netlify/functions/certified-wall"
181
- status = 200.0
182
- force = false
183
-
184
- [redirects.query]
185
-
186
- [redirects.conditions]
187
-
188
- [redirects.headers]
189
-
190
- [[redirects]]
191
- from = "/api/limit-capture"
192
- to = "/.netlify/functions/limit-capture"
193
- status = 200.0
194
- force = false
195
-
196
- [redirects.query]
197
-
198
- [redirects.conditions]
199
-
200
- [redirects.headers]
201
-
202
- [[redirects]]
203
- from = "/api/trending"
204
- to = "/.netlify/functions/trending"
205
- status = 200.0
206
- force = false
207
-
208
- [redirects.query]
209
-
210
- [redirects.conditions]
211
-
212
- [redirects.headers]
213
-
214
- [[redirects]]
215
- from = "/trending"
216
- to = "/.netlify/functions/trending"
217
- status = 200.0
218
- force = false
219
-
220
- [redirects.query]
221
-
222
- [redirects.conditions]
223
-
224
- [redirects.headers]
225
-
226
- [[redirects]]
227
- from = "/sitemap.xml"
228
- to = "/.netlify/functions/sitemap"
229
- status = 200.0
230
- force = false
231
-
232
- [redirects.query]
233
-
234
- [redirects.conditions]
235
-
236
- [redirects.headers]
237
-
238
- [[redirects]]
239
- from = "/data/latest.json"
240
- to = "/.netlify/functions/data-export"
241
- status = 200.0
242
- force = false
243
-
244
- [redirects.query]
245
-
246
- [redirects.conditions]
247
-
248
- [redirects.headers]
249
-
250
- [[redirects]]
251
- from = "/data/latest.csv"
252
- to = "/.netlify/functions/data-export"
253
- status = 200.0
254
- force = false
255
-
256
- [redirects.query]
257
-
258
- [redirects.conditions]
259
-
260
- [redirects.headers]
261
-
262
- [[redirects]]
263
- from = "/methodology"
264
- to = "/methodology.html"
265
- status = 200.0
266
- force = false
267
-
268
- [redirects.query]
269
-
270
- [redirects.conditions]
271
-
272
- [redirects.headers]
273
-
274
- [[redirects]]
275
- from = "/roadmap"
276
- to = "/roadmap.html"
277
- status = 200.0
278
- force = false
279
-
280
- [redirects.query]
281
-
282
- [redirects.conditions]
283
-
284
- [redirects.headers]
285
-
286
- [[redirects]]
287
- from = "/certify"
288
- to = "/certify.html"
289
- status = 200.0
290
- force = false
291
-
292
- [redirects.query]
293
-
294
- [redirects.conditions]
295
-
296
- [redirects.headers]
297
-
298
- [[redirects]]
299
- from = "/api/certify"
300
- to = "/.netlify/functions/certify"
301
- status = 200.0
302
- force = false
303
-
304
- [redirects.query]
305
-
306
- [redirects.conditions]
307
-
308
- [redirects.headers]
309
-
310
- [[redirects]]
311
- from = "/api/webhook"
312
- to = "/.netlify/functions/webhook"
313
- status = 200.0
314
- force = false
315
-
316
- [redirects.query]
317
-
318
- [redirects.conditions]
319
-
320
- [redirects.headers]
321
-
322
- [[redirects]]
323
- from = "/api/unlock"
324
- to = "/.netlify/functions/unlock"
325
- status = 200.0
326
- force = false
327
-
328
- [redirects.query]
329
-
330
- [redirects.conditions]
331
-
332
- [redirects.headers]