@nekzus/mcp-server 1.6.1 → 1.7.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/llms-full.txt ADDED
@@ -0,0 +1,582 @@
1
+ # NPM Sentinel MCP Server - Full Documentation
2
+
3
+ ## Protocol Specification
4
+ Version: 2025-05-11
5
+ Transport: stdio
6
+ Features: resources, tools, error handling
7
+
8
+ ## Architecture
9
+ ```mermaid
10
+ flowchart TD
11
+ Client[MCP Client] <-->|MCP Protocol| Server[NPM Sentinel Server]
12
+ Server -->|Fetch| NPM[NPM Registry]
13
+ Server -->|Analysis| Security[Security DB]
14
+ Server -->|Metrics| Stats[Download Stats]
15
+
16
+ subgraph Resources
17
+ NPM
18
+ Security
19
+ Stats
20
+ end
21
+
22
+ subgraph Tools
23
+ Analysis[Package Analysis]
24
+ TypeScript[TS Support]
25
+ Performance[Performance]
26
+ Trends[Trend Analysis]
27
+ end
28
+ ```
29
+
30
+ ## Resources
31
+
32
+ ### npm://registry
33
+ Content-Type: application/json
34
+ Methods: GET, SUBSCRIBE
35
+ Update Frequency: Real-time
36
+ Rate Limits: Follows npm registry limits
37
+ Description: Package metadata and version information interface
38
+
39
+ ### npm://security
40
+ Content-Type: application/json
41
+ Methods: GET
42
+ Update Frequency: Daily
43
+ Severity Levels: Low, Medium, High, Critical
44
+ Description: Vulnerability and security analysis interface
45
+
46
+ ### npm://metrics
47
+ Content-Type: application/json
48
+ Methods: GET, SUBSCRIBE
49
+ Update Frequency: Real-time
50
+ Metrics Types: Downloads, Stars, Issues, Updates
51
+ Description: Package analytics and statistics interface
52
+
53
+ ## Tool Specifications
54
+
55
+ // Note: For all tools below, the response payload, typically as described by its `XYZResponse` interface
56
+ // (or a textual summary if the response is simpler), is JSON stringified and placed within the `text` field
57
+ // of the standard MCP content object: {"type": "text", "text": "...", "isError": boolean}.
58
+
59
+ #### npmVersions
60
+ ```typescript
61
+ interface NpmVersionsInput {
62
+ packages: string[];
63
+ }
64
+
65
+ interface VersionInfo {
66
+ version: string;
67
+ releaseDate: string;
68
+ deprecated?: boolean;
69
+ description?: string;
70
+ }
71
+
72
+ interface NpmVersionsResponse {
73
+ [packageName: string]: VersionInfo[];
74
+ }
75
+ ```
76
+
77
+ #### npmLatest
78
+ ```typescript
79
+ interface NpmLatestInput {
80
+ packages: string[];
81
+ }
82
+
83
+ interface LatestInfo {
84
+ version: string;
85
+ releaseDate: string;
86
+ changelog?: string;
87
+ }
88
+
89
+ interface NpmLatestResponse {
90
+ [packageName: string]: LatestInfo;
91
+ }
92
+ ```
93
+
94
+ #### npmDeps
95
+ ```typescript
96
+ interface NpmDepsInput {
97
+ packages: string[];
98
+ }
99
+
100
+ interface DependencyNode {
101
+ name: string;
102
+ version: string;
103
+ dependencies?: { [dependencyName: string]: string };
104
+ }
105
+
106
+ interface NpmDepsResponse {
107
+ [packageName: string]: {
108
+ dependencyTree?: DependencyNode;
109
+ analysisSummary?: string;
110
+ };
111
+ }
112
+ ```
113
+
114
+ #### npmTypes
115
+ ```typescript
116
+ interface NpmTypesInput {
117
+ packages: string[];
118
+ }
119
+
120
+ interface TypeSupport {
121
+ hasTypes: boolean;
122
+ bundled: boolean;
123
+ definitelyTyped: boolean;
124
+ typeVersion?: string;
125
+ }
126
+
127
+ interface NpmTypesResponse {
128
+ [packageName: string]: TypeSupport;
129
+ }
130
+ ```
131
+
132
+ #### npmSize
133
+ ```typescript
134
+ interface NpmSizeInput {
135
+ packages: string[];
136
+ }
137
+
138
+ interface SizeMetrics {
139
+ size: number;
140
+ gzip: number;
141
+ dependenciesCount: number;
142
+ treeshakeable?: boolean;
143
+ assetSizes?: { assetName: string; size: number }[];
144
+ }
145
+
146
+ interface NpmSizeResponse {
147
+ [packageName: string]: SizeMetrics;
148
+ }
149
+ ```
150
+
151
+ #### npmVulnerabilities
152
+ ```typescript
153
+ interface NpmVulnerabilitiesInput {
154
+ packages: string[];
155
+ }
156
+
157
+ interface Vulnerability {
158
+ severity: 'low' | 'medium' | 'high' | 'critical' | 'unknown';
159
+ title: string;
160
+ description: string;
161
+ affectedVersions: string;
162
+ recommendation?: string;
163
+ cvssScore?: number;
164
+ url?: string;
165
+ }
166
+
167
+ interface NpmVulnerabilitiesResponse {
168
+ [packageName: string]: Vulnerability[];
169
+ }
170
+ ```
171
+
172
+ #### npmTrends
173
+ ```typescript
174
+ interface NpmTrendsInput {
175
+ packages: string[];
176
+ period: 'last-day' | 'last-week' | 'last-month' | 'last-year';
177
+ }
178
+
179
+ interface TrendDataPoint {
180
+ date: string;
181
+ downloads: number;
182
+ }
183
+
184
+ interface TrendMetrics {
185
+ period: string;
186
+ downloads: TrendDataPoint[];
187
+ growth?: number;
188
+ popularityScore?: number;
189
+ }
190
+
191
+ interface NpmTrendsResponse {
192
+ [packageName: string]: TrendMetrics;
193
+ }
194
+ ```
195
+
196
+ #### npmCompare
197
+ ```typescript
198
+ interface NpmCompareInput {
199
+ packages: string[];
200
+ }
201
+
202
+ interface ComparisonAspects {
203
+ latestVersion?: string;
204
+ size?: SizeMetrics;
205
+ vulnerabilitiesCount?: number;
206
+ averageDownloads?: number;
207
+ qualityScore?: number;
208
+ }
209
+
210
+ interface NpmCompareResponse {
211
+ [packageName: string]: ComparisonAspects;
212
+ comparisonSummary?: string;
213
+ }
214
+ ```
215
+
216
+ #### npmMaintainers
217
+ ```typescript
218
+ interface NpmMaintainersInput {
219
+ packages: string[];
220
+ }
221
+
222
+ interface Maintainer {
223
+ name: string;
224
+ email?: string;
225
+ githubUsername?: string;
226
+ }
227
+
228
+ interface NpmMaintainersResponse {
229
+ [packageName: string]: Maintainer[];
230
+ }
231
+ ```
232
+
233
+ #### npmScore
234
+ ```typescript
235
+ interface NpmScoreInput {
236
+ packages: string[];
237
+ }
238
+
239
+ interface ScoreDetails {
240
+ quality: number;
241
+ popularity: number;
242
+ maintenance: number;
243
+ overall: number;
244
+ }
245
+
246
+ interface NpmScoreResponse {
247
+ [packageName: string]: ScoreDetails;
248
+ }
249
+ ```
250
+
251
+ #### npmPackageReadme
252
+ ```typescript
253
+ interface NpmPackageReadmeInput {
254
+ packages: string[];
255
+ }
256
+
257
+ interface NpmPackageReadmeResponse {
258
+ [packageName: string]: {
259
+ content: string;
260
+ format: 'markdown' | 'text';
261
+ error?: string;
262
+ };
263
+ }
264
+ ```
265
+
266
+ #### npmSearch
267
+ ```typescript
268
+ interface NpmSearchInput {
269
+ query: string;
270
+ limit?: number;
271
+ }
272
+
273
+ interface SearchResultPackage {
274
+ name: string;
275
+ version: string;
276
+ description?: string;
277
+ keywords?: string[];
278
+ score?: ScoreDetails;
279
+ }
280
+
281
+ interface NpmSearchResponse {
282
+ query: string;
283
+ results: SearchResultPackage[];
284
+ totalResults?: number;
285
+ }
286
+ ```
287
+
288
+ #### npmLicenseCompatibility
289
+ ```typescript
290
+ interface NpmLicenseCompatibilityInput {
291
+ packages: string[];
292
+ projectLicense?: string;
293
+ }
294
+
295
+ interface LicenseInfo {
296
+ spdxId: string;
297
+ name: string;
298
+ isCompatible?: boolean;
299
+ issues?: string[];
300
+ }
301
+
302
+ interface NpmLicenseCompatibilityResponse {
303
+ [packageName: string]: LicenseInfo;
304
+ compatibilitySummary?: string;
305
+ }
306
+ ```
307
+
308
+ #### npmRepoStats
309
+ ```typescript
310
+ interface NpmRepoStatsInput {
311
+ packages: string[];
312
+ }
313
+
314
+ interface RepoStats {
315
+ stars?: number;
316
+ forks?: number;
317
+ openIssues?: number;
318
+ lastCommitDate?: string;
319
+ contributorsCount?: number;
320
+ repoUrl?: string;
321
+ }
322
+
323
+ interface NpmRepoStatsResponse {
324
+ [packageName: string]: RepoStats;
325
+ }
326
+ ```
327
+
328
+ #### npmDeprecated
329
+ ```typescript
330
+ interface NpmDeprecatedInput {
331
+ packages: string[];
332
+ }
333
+
334
+ interface DeprecationInfo {
335
+ isDeprecated: boolean;
336
+ message?: string;
337
+ alternative?: string;
338
+ }
339
+
340
+ interface NpmDeprecatedResponse {
341
+ [packageName: string]: DeprecationInfo;
342
+ }
343
+ ```
344
+
345
+ #### npmChangelogAnalysis
346
+ ```typescript
347
+ interface NpmChangelogAnalysisInput {
348
+ packages: string[];
349
+ targetVersion?: string;
350
+ sinceVersion?: string;
351
+ }
352
+
353
+ interface ChangelogEntry {
354
+ version: string;
355
+ date?: string;
356
+ summary?: string;
357
+ changes?: { type: 'added' | 'fixed' | 'changed' | 'removed'; description: string }[];
358
+ }
359
+
360
+ interface NpmChangelogAnalysisResponse {
361
+ [packageName: string]: {
362
+ changelogUrl?: string;
363
+ entries?: ChangelogEntry[];
364
+ analysisSummary?: string;
365
+ };
366
+ }
367
+ ```
368
+
369
+ #### npmAlternatives
370
+ ```typescript
371
+ interface NpmAlternativesInput {
372
+ packages: string[];
373
+ }
374
+
375
+ interface AlternativePackageInfo {
376
+ name: string;
377
+ reason?: string;
378
+ score?: ScoreDetails;
379
+ }
380
+
381
+ interface NpmAlternativesResponse {
382
+ [packageName: string]: {
383
+ alternatives: AlternativePackageInfo[];
384
+ };
385
+ }
386
+ ```
387
+
388
+ #### npmQuality
389
+ ```typescript
390
+ interface NpmQualityInput {
391
+ packages: string[];
392
+ }
393
+
394
+ interface QualityMetrics {
395
+ codeComplexity?: number;
396
+ testCoverage?: number;
397
+ documentationScore?: number;
398
+ communityEngagement?: number;
399
+ npmsQualityScore?: number;
400
+ npmsPopularityScore?: number;
401
+ npmsMaintenanceScore?: number;
402
+ }
403
+
404
+ interface NpmQualityResponse {
405
+ [packageName: string]: QualityMetrics;
406
+ }
407
+ ```
408
+
409
+ #### npmMaintenance
410
+ ```typescript
411
+ interface NpmMaintenanceInput {
412
+ packages: string[];
413
+ }
414
+
415
+ interface MaintenanceMetrics {
416
+ lastPublishDate?: string;
417
+ commitFrequency?: string;
418
+ openIssuesRatio?: number;
419
+ timeSinceLastCommit?: string;
420
+ npmsMaintenanceScore?: number;
421
+ }
422
+
423
+ interface NpmMaintenanceResponse {
424
+ [packageName: string]: MaintenanceMetrics;
425
+ }
426
+ ```
427
+
428
+ ## Error Handling
429
+
430
+ ### Standard Error Format
431
+ // When an error occurs, the standard MCP response 'content' object will have 'isError: true'.
432
+ // The 'text' field of that content object will contain a JSON stringified MCPError object, as defined below.
433
+ ```typescript
434
+ interface MCPError {
435
+ error: {
436
+ code: number;
437
+ message: string;
438
+ data?: {
439
+ details: string;
440
+ packageName?: string;
441
+ context?: any;
442
+ };
443
+ };
444
+ }
445
+ ```
446
+
447
+ ### Error Codes
448
+ 1000: Invalid package name
449
+ 1001: Package not found
450
+ 1002: Version not found
451
+ 1003: Rate limit exceeded
452
+ 1004: Network error
453
+ 1005: Analysis failed
454
+ 2000: Internal server error
455
+
456
+ ## Security Considerations
457
+
458
+ ### Data Protection
459
+ - All data is processed locally
460
+ - No sensitive information is stored
461
+ - Secure communication channels
462
+
463
+ ### Rate Limiting
464
+ - Implements fair usage policies
465
+ - Respects NPM registry limits
466
+ - Prevents abuse
467
+
468
+ ### Authentication
469
+ - Supports npm token authentication
470
+ - Validates package access
471
+ - Manages credentials securely
472
+
473
+ ## Integration Guide
474
+
475
+ ### Docker Configuration
476
+ The server can be run in a Docker container with directory mounting to `/projects`. This allows for secure access to files while maintaining isolation.
477
+
478
+ #### Build
479
+ ```bash
480
+ # Build the Docker image
481
+ docker build -t nekzus/npm-sentinel-mcp .
482
+ ```
483
+
484
+ #### Basic Usage
485
+ ```json
486
+ {
487
+ "mcpServers": {
488
+ "npm-sentinel-mcp": {
489
+ "command": "docker",
490
+ "args": [
491
+ "run",
492
+ "-i",
493
+ "--rm",
494
+ "-w", "/projects",
495
+ "--mount", "type=bind,src=${PWD},dst=/projects",
496
+ "nekzus/npm-sentinel-mcp",
497
+ "node",
498
+ "dist/index.js"
499
+ ]
500
+ }
501
+ }
502
+ }
503
+ ```
504
+
505
+ #### Multi-Directory Configuration
506
+ ```json
507
+ {
508
+ "mcpServers": {
509
+ "npm-sentinel-mcp": {
510
+ "command": "docker",
511
+ "args": [
512
+ "run",
513
+ "-i",
514
+ "--rm",
515
+ "-w", "/projects",
516
+ "--mount", "type=bind,src=/path/to/workspace,dst=/projects/workspace",
517
+ "--mount", "type=bind,src=/path/to/other/dir,dst=/projects/other/dir,ro",
518
+ "nekzus/npm-sentinel-mcp",
519
+ "node",
520
+ "dist/index.js"
521
+ ]
522
+ }
523
+ }
524
+ }
525
+ ```
526
+
527
+ #### Mount Guidelines
528
+ - Mount all directories under `/projects`
529
+ - Use absolute paths for source directories
530
+ - Add `,ro` flag for read-only access
531
+ - Working directory is set to `/projects`
532
+ - Container runs in interactive mode with auto-removal
533
+
534
+ ### Standard Configuration
535
+ ```json
536
+ {
537
+ "mcpServers": {
538
+ "npm-sentinel-mcp": {
539
+ "transport": "stdio",
540
+ "command": "npx",
541
+ "args": ["-y", "@nekzus/mcp-server"]
542
+ }
543
+ }
544
+ }
545
+ ```
546
+
547
+ ### Basic Usage
548
+ ```typescript
549
+ // Initialize client
550
+ const client = await MCPClient.connect("npm-sentinel-mcp");
551
+
552
+ // Analyze package
553
+ const result = await client.invoke("npmVersions", {
554
+ packages: ["react"]
555
+ });
556
+
557
+ // Subscribe to updates
558
+ const unsubscribe = await client.subscribe("npm://registry", {
559
+ package: "react",
560
+ onUpdate: (data) => console.log(data)
561
+ });
562
+ ```
563
+
564
+ ## Best Practices
565
+
566
+ ### Resource Usage
567
+ 1. Subscribe to resources for real-time updates
568
+ 2. Implement caching for frequently accessed data
569
+ 3. Use batch operations when possible
570
+ 4. Handle rate limits gracefully
571
+
572
+ ### Error Handling
573
+ 1. Implement proper error recovery
574
+ 2. Provide meaningful error messages
575
+ 3. Log errors for debugging
576
+ 4. Handle timeout scenarios
577
+
578
+ ### Performance
579
+ 1. Use connection pooling
580
+ 2. Implement request queuing
581
+ 3. Cache responses
582
+ 4. Handle concurrent requests
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nekzus/mcp-server",
3
- "version": "1.6.1",
3
+ "version": "1.7.1",
4
4
  "description": "NPM Sentinel MCP - A powerful Model Context Protocol (MCP) server that revolutionizes NPM package analysis through AI. Built to integrate with Claude and Anthropic AI, it provides real-time intelligence on package security, dependencies, and performance.",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -11,6 +11,7 @@
11
11
  "files": [
12
12
  "dist",
13
13
  "README.md",
14
+ "llms-full.txt",
14
15
  "LICENSE"
15
16
  ],
16
17
  "scripts": {
@@ -75,7 +76,7 @@
75
76
  },
76
77
  "homepage": "https://github.com/Nekzus/npm-sentinel-mcp#readme",
77
78
  "dependencies": {
78
- "@modelcontextprotocol/sdk": "1.11.1",
79
+ "@modelcontextprotocol/sdk": "1.11.2",
79
80
  "node-fetch": "3.3.2",
80
81
  "zod": "3.24.4"
81
82
  },