@nekzus/mcp-server 1.1.8 → 1.2.0

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 (3) hide show
  1. package/README.md +222 -355
  2. package/dist/index.js +33 -10
  3. package/package.json +8 -6
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # MCP Server Nekzus
1
+ # Nekzus MCP Server
2
2
 
3
3
  [![Github Workflow](https://github.com/nekzus/mcp-server/actions/workflows/publish.yml/badge.svg?event=push)](https://github.com/Nekzus/mcp-server/actions/workflows/publish.yml)
4
4
  [![npm-version](https://img.shields.io/npm/v/@nekzus/mcp-server.svg)](https://www.npmjs.com/package/@nekzus/mcp-server)
@@ -14,350 +14,220 @@ official MCP SDK and offers an extensible architecture for adding new tools_
14
14
 
15
15
  </div>
16
16
 
17
- ## 🌟 Features
18
-
19
- - šŸ”„ MCP Protocol Implementation with JSON-RPC 2.0
20
- - šŸ› ļø Seven Integrated Utility Tools
21
- - šŸ“ Input Schema Validation
22
- - šŸš€ ESM Support
23
- - šŸ”’ Strict TypeScript Types
24
- - 🧩 Extensible Tool Architecture
25
- - šŸ” Detailed Error Handling
26
- - šŸŽØ Emoji-Enhanced Output
27
- - šŸ” Secure Expression Evaluation
28
- - šŸ“¦ NPM Package Support
29
-
30
- ## šŸ› ļø Available Tools
31
-
32
- ### 1. greeting
33
-
34
- Generates a personalized greeting message.
35
-
36
- **Parameters:**
37
-
38
- - `name` (string, required): Recipient's name
39
-
40
- **Example:**
41
-
42
- ```typescript
43
- // Input
44
- {
45
- "jsonrpc": "2.0",
46
- "method": "tools/call",
47
- "params": {
48
- "name": "greeting",
49
- "arguments": {
50
- "name": "John"
51
- }
52
- }
53
- }
54
-
55
- // Output
56
- {
57
- "jsonrpc": "2.0",
58
- "result": {
59
- "content": [{
60
- "type": "text",
61
- "text": "šŸ‘‹ Hello John! Welcome to the MCP server!"
62
- }],
63
- "isError": false
64
- }
65
- }
66
- ```
67
-
68
- ### 2. card
69
-
70
- Gets a random card from a standard poker deck.
71
-
72
- **Parameters:**
73
-
74
- - No parameters required
75
-
76
- **Example:**
77
-
78
- ```typescript
79
- // Input
80
- {
81
- "jsonrpc": "2.0",
82
- "method": "tools/call",
83
- "params": {
84
- "name": "card",
85
- "arguments": {}
86
- }
87
- }
88
-
89
- // Output
90
- {
91
- "jsonrpc": "2.0",
92
- "result": {
93
- "content": [{
94
- "type": "text",
95
- "text": "šŸŽ“ You drew: Ace of ā™  Spades"
96
- }],
97
- "isError": false
98
- }
99
- }
100
- ```
101
-
102
- ### 3. datetime
103
-
104
- Gets the current date and time for a specific timezone.
105
-
106
- **Parameters:**
107
-
108
- - `timeZone` (string, optional): Timezone identifier (e.g., "America/New_York")
109
- - `locale` (string, optional): Locale identifier (e.g., "en-US")
110
-
111
- **Example:**
112
-
113
- ```typescript
114
- // Input
115
- {
116
- "jsonrpc": "2.0",
117
- "method": "tools/call",
118
- "params": {
119
- "name": "datetime",
120
- "arguments": {
121
- "timeZone": "America/New_York",
122
- "locale": "en-US"
123
- }
124
- }
125
- }
126
-
127
- // Output
128
- {
129
- "jsonrpc": "2.0",
130
- "result": {
131
- "content": [{
132
- "type": "text",
133
- "text": "šŸ—“ļø Date: March 24, 2024\nā° Time: 3:25:25 PM\nšŸŒ Timezone: America/New_York"
134
- }],
135
- "isError": false
136
- }
137
- }
138
- ```
139
-
140
- ### 4. calculator
141
-
142
- Performs mathematical calculations with support for basic and advanced operations.
143
-
144
- **Parameters:**
145
-
146
- - `expression` (string, required): Mathematical expression (e.g., "2 + 2 * 3")
147
- - `precision` (number, optional): Decimal places in the result (default: 2)
148
-
149
- **Example:**
150
-
151
- ```typescript
152
- // Input
153
- {
154
- "jsonrpc": "2.0",
155
- "method": "tools/call",
156
- "params": {
157
- "name": "calculator",
158
- "arguments": {
159
- "expression": "2 + 2 * 3",
160
- "precision": 2
161
- }
162
- }
163
- }
164
-
165
- // Output
166
- {
167
- "jsonrpc": "2.0",
168
- "result": {
169
- "content": [{
170
- "type": "text",
171
- "text": "🧮 Expression: 2 + 2 * 3\nšŸ“Š Result: 8.00"
172
- }],
173
- "isError": false
174
- }
175
- }
176
- ```
177
-
178
- ### 5. passwordGen
179
-
180
- Generates secure passwords with customizable options.
181
-
182
- **Parameters:**
183
-
184
- - `length` (number, optional): Password length (default: 16)
185
- - `includeNumbers` (boolean, optional): Include numbers (default: true)
186
- - `includeSymbols` (boolean, optional): Include special characters (default: true)
187
- - `includeUppercase` (boolean, optional): Include uppercase letters (default: true)
188
-
189
- **Example:**
190
-
191
- ```typescript
192
- // Input
17
+ ## Components
18
+
19
+ ### Tools
20
+
21
+ - **greeting**
22
+ - Generate personalized greeting messages
23
+ - Input: `name` (string, required): Name of the recipient
24
+ - Example:
25
+ ```json
26
+ {"name": "John"} -> "šŸ‘‹ Hello John! Welcome to the MCP server!"
27
+ ```
28
+
29
+ - **card**
30
+ - Draw random cards from a standard 52-card poker deck
31
+ - Input: No parameters required
32
+ - Example:
33
+ ```json
34
+ {} -> "šŸŽ“ Drew card: Aā™ ļø" (random from 52 cards)
35
+ ```
36
+
37
+ - **datetime**
38
+ - Get formatted date/time for any timezone
39
+ - Inputs:
40
+ - `timeZone` (string, optional, default: "UTC"): Timezone identifier
41
+ - `locale` (string, optional, default: "en-US"): Locale for formatting
42
+ - Example:
43
+ ```json
44
+ {"timeZone": "America/New_York", "locale": "es-ES"} ->
45
+ "šŸ•’ domingo, 24 de marzo de 2024, 15:25:25 hora de verano del este"
46
+ ```
47
+
48
+ - **calculator**
49
+ - Perform mathematical calculations
50
+ - Inputs:
51
+ - `expression` (string, required): Mathematical expression to evaluate
52
+ - `precision` (number, optional, default: 2): Number of decimal places
53
+ - Supported operations: +, -, *, /, %, (), .
54
+ - Example:
55
+ ```json
56
+ {"expression": "2 + 2 * 3", "precision": 2} -> "šŸ”¢ Result: 8.00"
57
+ {"expression": "(15 / 2) % 2", "precision": 3} -> "šŸ”¢ Result: 1.500"
58
+ ```
59
+
60
+ - **passwordGen**
61
+ - Generate secure passwords with customizable options
62
+ - Inputs:
63
+ - `length` (number, optional, default: 16): Password length
64
+ - `includeNumbers` (boolean, optional, default: true): Include numbers
65
+ - `includeSymbols` (boolean, optional, default: true): Include special symbols
66
+ - `includeUppercase` (boolean, optional, default: true): Include uppercase letters
67
+ - Example:
68
+ ```json
69
+ {"length": 12, "includeSymbols": true} -> "šŸ” Generated: Kj2$mP9&vN4x"
70
+ {"length": 8, "includeNumbers": false} -> "šŸ” Generated: KjMpNvXw"
71
+ ```
72
+
73
+ - **qrGen**
74
+ - Generate QR codes for text or URLs
75
+ - Inputs:
76
+ - `text` (string, required): Text or URL to encode
77
+ - `size` (number, optional, default: 200): Size in pixels
78
+ - `dark` (string, optional, default: "#000000"): Color for dark modules
79
+ - `light` (string, optional, default: "#ffffff"): Color for light modules
80
+ - Output: Returns a Data URL containing the QR code image
81
+ - Example:
82
+ ```json
83
+ // Basic Usage
84
+ {"text": "https://github.com/nekzus"} ->
85
+ "šŸ“± QR Code generated successfully!
86
+ Properties:
87
+ • Content: https://github.com/nekzus
88
+ • Size: 200px
89
+ • Dark Color: #000000
90
+ • Light Color: #ffffff
91
+
92
+ QR Code (Data URL):
93
+ data:image/png;base64,..."
94
+
95
+ // Custom Size and Colors
96
+ {
97
+ "text": "Hello World!",
98
+ "size": 300,
99
+ "dark": "#FF0000",
100
+ "light": "#FFFFFF"
101
+ } ->
102
+ "šŸ“± QR Code generated successfully!
103
+ Properties:
104
+ • Content: Hello World!
105
+ • Size: 300px
106
+ • Dark Color: #FF0000
107
+ • Light Color: #FFFFFF
108
+
109
+ QR Code (Data URL):
110
+ data:image/png;base64,..."
111
+ ```
112
+
113
+ **Note:** The QR code is returned as a Data URL that can be used directly in HTML `<img>` tags or converted to a file.
114
+
115
+ - **kitchenConvert**
116
+ - Convert between kitchen measurements
117
+ - Inputs:
118
+ - `value` (number, required): Value to convert
119
+ - `from` (string, required): Source unit
120
+ - `to` (string, required): Target unit
121
+ - `ingredient` (string, optional): Ingredient for accurate conversion
122
+
123
+ **Supported Units:**
124
+
125
+ *Volume Units:*
126
+ ```
127
+ - ml (milliliters)
128
+ - l (liters)
129
+ - cup (US cup = 236.588 ml)
130
+ - tbsp (US tablespoon = 14.787 ml)
131
+ - tsp (US teaspoon = 4.929 ml)
132
+ - floz (US fluid ounce = 29.574 ml)
133
+ ```
134
+
135
+ *Weight Units:*
136
+ ```
137
+ - g (grams)
138
+ - kg (kilograms)
139
+ - oz (ounces = 28.350 g)
140
+ - lb (pounds = 453.592 g)
141
+ ```
142
+
143
+ **Ingredient Densities:**
144
+ ```
145
+ - water (1.000 g/ml)
146
+ - milk (1.030 g/ml)
147
+ - flour (0.593 g/ml)
148
+ - sugar (0.845 g/ml)
149
+ - brown_sugar (0.721 g/ml)
150
+ - salt (1.217 g/ml)
151
+ - butter (0.911 g/ml)
152
+ - oil (0.918 g/ml)
153
+ - honey (1.420 g/ml)
154
+ - maple_syrup (1.370 g/ml)
155
+ ```
156
+
157
+ Examples:
158
+ ```json
159
+ // Volume to Volume
160
+ {"value": 1, "from": "cup", "to": "ml"} ->
161
+ "āš–ļø 1 cup = 236.59 ml"
162
+
163
+ // Weight to Weight
164
+ {"value": 500, "from": "g", "to": "lb"} ->
165
+ "āš–ļø 500 g = 1.10 lb"
166
+
167
+ // Volume to Weight (requires ingredient)
168
+ {"value": 1, "from": "cup", "to": "g", "ingredient": "flour"} ->
169
+ "āš–ļø 1 cup of flour = 140.30 g"
170
+ ```
171
+
172
+ ## Key Features
173
+
174
+ - Zero configuration required
175
+ - JSON-RPC 2.0 compliant
176
+ - Type-safe implementations
177
+ - Emoji-enhanced responses
178
+ - Comprehensive error handling
179
+ - ESM support
180
+ - Full TypeScript types
181
+ - Docker support
182
+
183
+ ## Configuration
184
+
185
+ To use this server with the Claude Desktop app, add the following configuration to the "mcpServers" section of your `claude_desktop_config.json`:
186
+
187
+ ### NPX (Recommended)
188
+
189
+ ```json
193
190
  {
194
- "jsonrpc": "2.0",
195
- "method": "tools/call",
196
- "params": {
197
- "name": "passwordGen",
198
- "arguments": {
199
- "length": 12,
200
- "includeNumbers": true,
201
- "includeSymbols": true,
202
- "includeUppercase": true
191
+ "mcpServers": {
192
+ "nekzus": {
193
+ "transport": "stdio",
194
+ "command": "npx",
195
+ "args": [
196
+ "-y",
197
+ "@nekzus/mcp-server"
198
+ ]
203
199
  }
204
200
  }
205
201
  }
206
-
207
- // Output
208
- {
209
- "jsonrpc": "2.0",
210
- "result": {
211
- "content": [{
212
- "type": "text",
213
- "text": "šŸ” Generated Password:\nKj2$mP9&vN4x\n\nšŸ“‹ Password Properties:\n• Length: 12\n• Includes Numbers: āœ…\n• Includes Symbols: āœ…\n• Includes Uppercase: āœ…"
214
- }],
215
- "isError": false
216
- }
217
- }
218
202
  ```
219
203
 
220
- ### 6. qrGen
221
-
222
- Generates QR codes for text or URLs.
223
-
224
- **Parameters:**
225
-
226
- - `text` (string, required): Text or URL to encode
227
- - `size` (number, optional): Size in pixels (default: 200)
228
- - `dark` (string, optional): Dark module color (default: "#000000")
229
- - `light` (string, optional): Light module color (default: "#ffffff")
230
-
231
- **Example:**
204
+ ### Docker
232
205
 
233
- ```typescript
234
- // Input
206
+ ```json
235
207
  {
236
- "jsonrpc": "2.0",
237
- "method": "tools/call",
238
- "params": {
239
- "name": "qrGen",
240
- "arguments": {
241
- "text": "https://www.nekzus.dev",
242
- "size": 300,
243
- "dark": "#000000",
244
- "light": "#ffffff"
208
+ "mcpServers": {
209
+ "nekzus": {
210
+ "transport": "stdio",
211
+ "command": "docker",
212
+ "args": ["run", "-i", "--rm", "--init", "nekzus/mcp-server"]
245
213
  }
246
214
  }
247
215
  }
248
-
249
- // Output
250
- {
251
- "jsonrpc": "2.0",
252
- "result": {
253
- "content": [{
254
- "type": "text",
255
- "text": "šŸ“± QR Code Properties:\n• Content: https://www.nekzus.dev\n• Size: 300px\n• Dark Color: #000000\n• Light Color: #ffffff\n\nšŸ”„ QR Code generation successful! (Implementation pending)"
256
- }],
257
- "isError": false
258
- }
259
- }
260
216
  ```
261
217
 
262
- ### 7. kitchenConvert
263
-
264
- Converts between common kitchen measurements and weights.
265
-
266
- **Parameters:**
267
-
268
- - `value` (number, required): Value to convert
269
- - `from` (string, required): Source unit
270
- - `to` (string, required): Target unit
271
- - `ingredient` (string, optional): Ingredient for volume-to-weight conversions
272
-
273
- **Supported Units:**
274
-
275
- *Volume:*
276
- - ml (milliliters)
277
- - l (liters)
278
- - cup (US cup)
279
- - tbsp (tablespoon)
280
- - tsp (teaspoon)
281
- - floz (fluid ounce)
282
-
283
- *Weight:*
284
- - g (grams)
285
- - kg (kilograms)
286
- - oz (ounces)
287
- - lb (pounds)
288
-
289
- **Supported Ingredients:**
290
- - water (density: 1.000 g/ml)
291
- - milk (density: 1.030 g/ml)
292
- - flour (density: 0.593 g/ml)
293
- - sugar (density: 0.845 g/ml)
294
- - brown sugar (density: 0.721 g/ml)
295
- - salt (density: 1.217 g/ml)
296
- - butter (density: 0.911 g/ml)
297
- - oil (density: 0.918 g/ml)
298
- - honey (density: 1.420 g/ml)
299
- - maple syrup (density: 1.370 g/ml)
300
-
301
- **Example:**
302
-
303
- ```typescript
304
- // Input
305
- {
306
- "jsonrpc": "2.0",
307
- "method": "tools/call",
308
- "params": {
309
- "name": "kitchenConvert",
310
- "arguments": {
311
- "value": 1,
312
- "from": "cup",
313
- "to": "g",
314
- "ingredient": "flour"
315
- }
316
- }
317
- }
318
-
319
- // Output
320
- {
321
- "jsonrpc": "2.0",
322
- "result": {
323
- "content": [{
324
- "type": "text",
325
- "text": "šŸ”„ Conversion Result:\n• 1 cup of flour = 140.30 g\n\nšŸ“ Note: Conversion includes ingredient density"
326
- }],
327
- "isError": false
328
- }
329
- }
330
- ```
331
-
332
- ## šŸš€ Usage
333
-
334
- ### As CLI Tool
335
-
336
- ```bash
337
- # Global Installation
338
- npm install -g @nekzus/mcp-server
339
-
340
- # Direct Execution
341
- npx @nekzus/mcp-server
342
-
343
- # Example Usage
344
- echo '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"greeting","arguments":{"name":"John"}}}' | npx @nekzus/mcp-server
345
- ```
218
+ The configuration file is typically located at:
219
+ - Windows: `%APPDATA%/claude-desktop/claude_desktop_config.json`
220
+ - macOS: `~/Library/Application Support/claude-desktop/claude_desktop_config.json`
221
+ - Linux: `~/.config/claude-desktop/claude_desktop_config.json`
346
222
 
347
- ## šŸ”§ Development
223
+ ## Development
348
224
 
349
225
  ```bash
350
- # Clone repository
351
- git clone https://github.com/nekzus/mcp-server.git
352
-
353
226
  # Install dependencies
354
227
  npm install
355
228
 
356
- # Build
357
- npm run build
358
-
359
- # Run tests
360
- npm test
229
+ # Run in development mode
230
+ npm run dev
361
231
 
362
232
  # Format code
363
233
  npm run format
@@ -365,46 +235,43 @@ npm run format
365
235
  # Lint code
366
236
  npm run lint
367
237
 
368
- # Check code
369
- npm run check
238
+ # Run tests
239
+ npm run test
240
+
241
+ # Build
242
+ npm run build
370
243
  ```
371
244
 
372
- ## šŸ“ Project Structure
245
+ ## Docker
373
246
 
374
- ```
375
- /
376
- ā”œā”€ā”€ index.ts # Main server implementation
377
- ā”œā”€ā”€ package.json # Project configuration
378
- ā”œā”€ā”€ tsconfig.json # TypeScript configuration
379
- ā”œā”€ā”€ biome.json # Biome configuration
380
- ā”œā”€ā”€ jest.config.js # Jest configuration
381
- ā”œā”€ā”€ .github/ # GitHub workflows
382
- │ └── workflows/ # CI/CD configuration
383
- └── dist/ # Compiled JavaScript
247
+ Build the Docker image:
248
+
249
+ ```bash
250
+ # Build the image
251
+ docker build -t nekzus/mcp-server .
252
+
253
+ # Run the container
254
+ docker run -i --rm --init nekzus/mcp-server
384
255
  ```
385
256
 
386
- ## šŸ” Technical Details
257
+ ## Contributing
387
258
 
388
- - **Transport:** Uses `StdioServerTransport` for JSON-RPC communication
389
- - **Input Validation:** Schema validation for tool arguments
390
- - **Error Handling:** Comprehensive error handling with detailed messages
391
- - **Security:** Safe expression evaluation in calculator tool
392
- - **Types:** Full TypeScript type coverage
393
- - **Testing:** Jest test framework integration
394
- - **CI/CD:** Automated publishing with semantic-release
395
- - **Formatting:** Biome for code formatting and linting
259
+ 1. Fork the repository
260
+ 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
261
+ 3. Commit your changes using commitizen (`npm run commit`)
262
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
263
+ 5. Open a Pull Request
396
264
 
397
- ## šŸ“„ License
265
+ ## License
398
266
 
399
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
267
+ This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.
400
268
 
401
- ## šŸ‘¤ Author
269
+ ## Author
402
270
 
403
- **Nekzus**
271
+ šŸ‘¤ **nekzus**
404
272
 
405
- - GitHub: [@nekzus](https://github.com/nekzus)
406
- - PayPal: [Donate](https://paypal.me/maseortega)
273
+ * GitHub: [@Nekzus](https://github.com/Nekzus)
407
274
 
408
- ## 🌟 Support
275
+ ## Show your support
409
276
 
410
277
  Give a ā­ļø if this project helped you!
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
3
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
4
  import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
5
- import 'dotenv/config';
5
+ import QRCode from 'qrcode';
6
6
  // Logger function that uses stderr - only for critical errors
7
7
  const log = (...args) => {
8
8
  // Filter out server status messages
@@ -250,15 +250,38 @@ async function handlePasswordGen(args) {
250
250
  };
251
251
  }
252
252
  async function handleQRGen(args) {
253
- return {
254
- content: [
255
- {
256
- type: 'text',
257
- text: 'QR code generation is not implemented yet',
253
+ try {
254
+ const { text, size = 200, dark = '#000000', light = '#ffffff' } = args;
255
+ // Generate QR code as Data URL
256
+ const qrDataUrl = await QRCode.toDataURL(text, {
257
+ width: size,
258
+ margin: 1,
259
+ color: {
260
+ dark,
261
+ light,
258
262
  },
259
- ],
260
- isError: true,
261
- };
263
+ });
264
+ return {
265
+ content: [
266
+ {
267
+ type: 'text',
268
+ text: `šŸ“± QR Code generated successfully!\n\nProperties:\n• Content: ${text}\n• Size: ${size}px\n• Dark Color: ${dark}\n• Light Color: ${light}\n\nQR Code (Data URL):\n${qrDataUrl}`,
269
+ },
270
+ ],
271
+ isError: false,
272
+ };
273
+ }
274
+ catch (error) {
275
+ return {
276
+ content: [
277
+ {
278
+ type: 'text',
279
+ text: `Error generating QR code: ${error.message}`,
280
+ },
281
+ ],
282
+ isError: true,
283
+ };
284
+ }
262
285
  }
263
286
  async function handleKitchenConvert(args) {
264
287
  // Simplified conversion logic
@@ -350,7 +373,7 @@ async function runServer() {
350
373
  });
351
374
  await server.connect(transport);
352
375
  }
353
- runServer().catch(console.error);
376
+ runServer().catch(log);
354
377
  process.stdin.on('close', () => {
355
378
  server.close();
356
379
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nekzus/mcp-server",
3
- "version": "1.1.8",
3
+ "version": "1.2.0",
4
4
  "description": "Personal MCP Server implementation providing extensible utility functions and tools for development and testing purposes",
5
5
  "type": "module",
6
6
  "bin": {
@@ -10,9 +10,9 @@
10
10
  "dist"
11
11
  ],
12
12
  "scripts": {
13
- "build": "tsc && chmod +x dist/index.js",
13
+ "build": "tsc && shx chmod +x dist/*.js",
14
14
  "prepare": "npm run build",
15
- "dev": "tsx src/index.ts",
15
+ "dev": "tsx watch index.ts",
16
16
  "start": "node dist/index.js",
17
17
  "test": "jest --passWithNoTests",
18
18
  "format": "biome format --write .",
@@ -42,7 +42,7 @@
42
42
  "homepage": "https://github.com/Nekzus/mcp-server#readme",
43
43
  "dependencies": {
44
44
  "@modelcontextprotocol/sdk": "1.7.0",
45
- "dotenv": "16.4.7"
45
+ "qrcode": "1.5.4"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@biomejs/biome": "1.9.4",
@@ -52,11 +52,13 @@
52
52
  "@semantic-release/npm": "12.0.1",
53
53
  "@semantic-release/release-notes-generator": "14.0.3",
54
54
  "@types/jest": "29.5.14",
55
- "@types/node": "22.13.11",
55
+ "@types/node": "22.13.13",
56
+ "@types/qrcode": "1.5.5",
56
57
  "cz-conventional-changelog": "3.3.0",
57
58
  "jest": "29.7.0",
58
59
  "semantic-release": "24.2.3",
59
- "ts-jest": "29.2.6",
60
+ "shx": "0.4.0",
61
+ "ts-jest": "29.3.0",
60
62
  "tsx": "4.19.3",
61
63
  "typescript": "5.8.2"
62
64
  },