@coo-quack/calc-mcp 1.6.0 → 1.6.2

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.
@@ -1,79 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">
2
- <defs>
3
- <!-- Background gradient -->
4
- <linearGradient id="bgGrad" x1="0" y1="0" x2="1" y2="1">
5
- <stop offset="0%" stop-color="#5CB85C"/>
6
- <stop offset="100%" stop-color="#2E7D32"/>
7
- </linearGradient>
8
- <!-- Calculator body gradient -->
9
- <linearGradient id="bodyGrad" x1="0" y1="0" x2="0" y2="1">
10
- <stop offset="0%" stop-color="#FDFDFD"/>
11
- <stop offset="100%" stop-color="#E8E8E8"/>
12
- </linearGradient>
13
- <!-- Display gradient -->
14
- <linearGradient id="displayGrad" x1="0" y1="0" x2="0" y2="1">
15
- <stop offset="0%" stop-color="#1A1A2E"/>
16
- <stop offset="100%" stop-color="#16213E"/>
17
- </linearGradient>
18
- <!-- Green button gradient -->
19
- <linearGradient id="greenBtn" x1="0" y1="0" x2="0" y2="1">
20
- <stop offset="0%" stop-color="#6ABF47"/>
21
- <stop offset="100%" stop-color="#4A8C2A"/>
22
- </linearGradient>
23
- <!-- Orange button gradient -->
24
- <linearGradient id="orangeBtn" x1="0" y1="0" x2="0" y2="1">
25
- <stop offset="0%" stop-color="#FF8C42"/>
26
- <stop offset="100%" stop-color="#E8621A"/>
27
- </linearGradient>
28
- <!-- Gray button gradient -->
29
- <linearGradient id="grayBtn" x1="0" y1="0" x2="0" y2="1">
30
- <stop offset="0%" stop-color="#E0E0E0"/>
31
- <stop offset="100%" stop-color="#BDBDBD"/>
32
- </linearGradient>
33
- <!-- Accent green button -->
34
- <linearGradient id="accentBtn" x1="0" y1="0" x2="0" y2="1">
35
- <stop offset="0%" stop-color="#4CAF50"/>
36
- <stop offset="100%" stop-color="#2E7D32"/>
37
- </linearGradient>
38
- <!-- Shadow filter -->
39
- <filter id="shadow" x="-10%" y="-10%" width="130%" height="130%">
40
- <feDropShadow dx="0" dy="4" stdDeviation="8" flood-color="#000" flood-opacity="0.3"/>
41
- </filter>
42
- <filter id="btnShadow" x="-20%" y="-20%" width="140%" height="160%">
43
- <feDropShadow dx="0" dy="2" stdDeviation="3" flood-color="#000" flood-opacity="0.15"/>
44
- </filter>
45
- <filter id="innerGlow">
46
- <feDropShadow dx="0" dy="1" stdDeviation="1" flood-color="#FFF" flood-opacity="0.3"/>
47
- </filter>
48
- </defs>
49
-
50
- <!-- Background rounded square -->
51
- <rect x="0" y="0" width="512" height="512" rx="96" ry="96" fill="url(#bgGrad)"/>
52
- <!-- Subtle highlight on top-left -->
53
- <rect x="0" y="0" width="512" height="256" rx="96" ry="96" fill="url(#bgGrad)" opacity="0.15" style="filter: blur(2px)"/>
54
-
55
- <!-- Calculator body -->
56
- <rect x="88" y="64" width="336" height="400" rx="36" ry="36" fill="url(#bodyGrad)" filter="url(#shadow)"/>
57
-
58
- <!-- Display -->
59
- <rect x="116" y="92" width="280" height="88" rx="16" ry="16" fill="url(#displayGrad)"/>
60
- <!-- Display dots -->
61
- <circle cx="336" cy="136" r="4" fill="#4A5568" opacity="0.6"/>
62
- <circle cx="356" cy="136" r="4" fill="#4A5568" opacity="0.6"/>
63
- <circle cx="376" cy="136" r="4" fill="#48BB78"/>
64
-
65
- <!-- Row 1: Green, Green, Orange -->
66
- <rect x="116" y="204" width="76" height="60" rx="14" ry="14" fill="url(#greenBtn)" filter="url(#btnShadow)"/>
67
- <rect x="218" y="204" width="76" height="60" rx="14" ry="14" fill="url(#greenBtn)" filter="url(#btnShadow)"/>
68
- <rect x="320" y="204" width="76" height="60" rx="14" ry="14" fill="url(#orangeBtn)" filter="url(#btnShadow)"/>
69
-
70
- <!-- Row 2: Gray, Gray, Orange -->
71
- <rect x="116" y="284" width="76" height="60" rx="14" ry="14" fill="url(#grayBtn)" filter="url(#btnShadow)"/>
72
- <rect x="218" y="284" width="76" height="60" rx="14" ry="14" fill="url(#grayBtn)" filter="url(#btnShadow)"/>
73
- <rect x="320" y="284" width="76" height="60" rx="14" ry="14" fill="url(#orangeBtn)" filter="url(#btnShadow)"/>
74
-
75
- <!-- Row 3: Gray, Gray, Accent Green -->
76
- <rect x="116" y="364" width="76" height="60" rx="14" ry="14" fill="url(#grayBtn)" filter="url(#btnShadow)"/>
77
- <rect x="218" y="364" width="76" height="60" rx="14" ry="14" fill="url(#grayBtn)" filter="url(#btnShadow)"/>
78
- <rect x="320" y="364" width="76" height="60" rx="14" ry="14" fill="url(#accentBtn)" filter="url(#btnShadow)"/>
79
- </svg>
package/docs/tools.md DELETED
@@ -1,427 +0,0 @@
1
- # All Tools
2
-
3
- Calc MCP provides 21 tools for operations that AI models struggle with. Each tool is designed to be called automatically by your AI assistant when you ask questions in natural language.
4
-
5
- ## Math & Numbers
6
-
7
- ### math
8
-
9
- Evaluate mathematical expressions or compute statistics on numbers.
10
-
11
- **Parameters:**
12
- - `expression` (string, optional) — Math expression to evaluate
13
- - `action` (enum, optional) — `eval` (default) or `statistics`
14
- - `values` (array of numbers, optional) — Array of numbers for statistics
15
-
16
- **Examples:**
17
- ```
18
- What's 10 + 34 × 341 ÷ 23?
19
- → 514.087
20
-
21
- Calculate mean and stddev of [1, 2, 3, 4, 5]
22
- → { mean: 3, median: 3, stddev: 1.414, ... }
23
- ```
24
-
25
- ### count
26
-
27
- Count characters (grapheme-aware), words, lines, and bytes in text.
28
-
29
- **Parameters:**
30
- - `text` (string) — Text to analyze
31
- - `encoding` (enum, optional) — `utf8` (default) or `shift_jis` for byte count
32
-
33
- **Examples:**
34
- ```
35
- How many characters in "Hello, World! 🌍"?
36
- → 15 chars, 18 bytes
37
-
38
- Count words in "The quick brown fox"
39
- → 4 words
40
- ```
41
-
42
- ### base
43
-
44
- Convert numbers between different bases (2–36).
45
-
46
- **Parameters:**
47
- - `value` (string | number) — Value to convert
48
- - `from` (number) — Source base (2–36)
49
- - `to` (number) — Target base (2–36)
50
-
51
- **Examples:**
52
- ```
53
- Convert 255 to binary
54
- → 11111111
55
-
56
- Convert FF from hex to decimal
57
- → 255
58
- ```
59
-
60
- ### convert
61
-
62
- Convert between units across 8 categories: length, weight, temperature, area, volume, speed, data, time.
63
-
64
- **Parameters:**
65
- - `value` (number) — Value to convert
66
- - `from` (string) — Source unit
67
- - `to` (string) — Target unit
68
- - `category` (enum, optional) — Category (auto-detected if omitted)
69
-
70
- **Supported units:**
71
- - **Length:** m, km, cm, mm, in, ft, yd, mi, nm, um
72
- - **Weight:** kg, g, mg, lb, oz, t, st
73
- - **Temperature:** c, f, k (Celsius, Fahrenheit, Kelvin)
74
- - **Area:** m2, km2, cm2, ha, acre, ft2, in2, tsubo, jo, tatami
75
- - **Volume:** l, ml, m3, gal, qt, pt, cup, floz, tbsp, tsp
76
- - **Speed:** m/s, km/h, mph, kn, ft/s
77
- - **Data:** b, kb, mb, gb, tb, pb, bit, kbit, mbit
78
- - **Time:** ms, s, min, h, d, wk, mo, yr
79
-
80
- **Examples:**
81
- ```
82
- 100 miles in kilometers?
83
- → 160.93 km
84
-
85
- 72°F in Celsius?
86
- → 22.22°C
87
-
88
- 10 tsubo in square meters?
89
- → 33.06 m²
90
- ```
91
-
92
- ## Random Generation
93
-
94
- ### random
95
-
96
- Generate cryptographically random values: UUID, ULID, password, number, or shuffle a list.
97
-
98
- **Parameters:**
99
- - `type` (enum) — `uuid`, `ulid`, `password`, `number`, or `shuffle`
100
- - `uuidVersion` (enum, optional) — `v4` (random, default) or `v7` (time-ordered)
101
- - `length` (number, optional) — Length for password (default: 16, max: 256)
102
- - `min` (number, optional) — Minimum value for number (default: 0)
103
- - `max` (number, optional) — Maximum value for number (default: 100)
104
- - `charset` (string, optional) — Custom character set for password
105
- - `uppercase` (boolean, optional) — Include uppercase letters (default: true)
106
- - `numbers` (boolean, optional) — Include numbers (default: true)
107
- - `symbols` (boolean, optional) — Include symbols (default: true)
108
- - `excludeChars` (string, optional) — Characters to exclude (e.g., `"\\|{}"`)
109
- - `readable` (boolean, optional) — Exclude ambiguous characters (l/1/I/O/0/o)
110
- - `items` (array of strings, optional) — Items to shuffle (for `type=shuffle`)
111
-
112
- **Examples:**
113
- ```
114
- Generate a UUID v7
115
- → 019c4b54-aad2-7e52-8a3b-...
116
-
117
- Generate a readable 20-char password
118
- → hT9jZDojX6sHRJt8vaKS
119
-
120
- Shuffle ["Alice", "Bob", "Charlie"]
121
- → ["Charlie", "Alice", "Bob"]
122
-
123
- Random number between 1 and 100
124
- → 42
125
- ```
126
-
127
- ## Date & Time
128
-
129
- ### datetime
130
-
131
- Get current time, convert timezones, format datetime, or work with UNIX timestamps.
132
-
133
- **Parameters:**
134
- - `action` (enum) — `now`, `convert`, `format`, or `timestamp`
135
- - `timezone` (string, optional) — IANA timezone (e.g., `Asia/Tokyo`, `America/New_York`)
136
- - `datetime` (string, optional) — ISO8601 datetime string for convert/format
137
- - `fromTimezone` (string, optional) — Source timezone for conversion
138
- - `toTimezone` (string, optional) — Target timezone for conversion
139
- - `format` (string, optional) — Output format: `iso`, `date`, `time`, `full`, or Intl options
140
- - `timestamp` (number, optional) — UNIX timestamp in seconds for timestamp action
141
-
142
- **Examples:**
143
- ```
144
- What time is it in New York?
145
- → 2026-02-10T19:00:00-05:00
146
-
147
- Convert 1609459200 to ISO8601
148
- → 2021-01-01T00:00:00Z
149
- ```
150
-
151
- ### date
152
-
153
- Perform date arithmetic: difference, add/subtract, get weekday, or convert to wareki (Japanese era).
154
-
155
- **Parameters:**
156
- - `action` (enum) — `diff`, `add`, `weekday`, or `wareki`
157
- - `date` (string) — Date string (ISO8601)
158
- - `date2` (string, optional) — Second date for diff
159
- - `amount` (number, optional) — Amount to add
160
- - `unit` (enum, optional) — `days`, `months`, `years`, `hours`, `minutes`
161
-
162
- **Examples:**
163
- ```
164
- What's 100 days after 2026-02-11?
165
- → 2026-05-22
166
-
167
- Difference between 2026-01-01 and 2026-12-31
168
- → 364 days
169
-
170
- What day of the week is 2026-02-11?
171
- → Wednesday (水曜日)
172
- ```
173
-
174
- ### cron_parse
175
-
176
- Parse cron expressions into human-readable descriptions and get next occurrences.
177
-
178
- **Parameters:**
179
- - `expression` (string) — Cron expression (5 fields: min hour dom mon dow)
180
- - `count` (number, optional) — Number of next occurrences to return (default: 5)
181
- - `timezone` (string, optional) — IANA timezone (default: UTC)
182
-
183
- **Examples:**
184
- ```
185
- When does "30 9 * * 1-5" run?
186
- → Mon–Fri at 9:30, next runs: ...
187
- ```
188
-
189
- ## Text Processing
190
-
191
- ### hash
192
-
193
- Compute cryptographic hashes: MD5, SHA-1, SHA-256, SHA-512, CRC32.
194
-
195
- **Parameters:**
196
- - `input` (string) — String to hash
197
- - `algorithm` (enum) — `md5`, `sha1`, `sha256`, `sha512`, or `crc32`
198
-
199
- **Examples:**
200
- ```
201
- SHA-256 hash of "password123"
202
- → ef92b778bafe771e89b862eebf...
203
-
204
- MD5 of "hello world"
205
- → 5eb63bbbe01eeed093cb22bb8f5acdc3
206
- ```
207
-
208
- ### base64
209
-
210
- Encode or decode Base64 strings.
211
-
212
- **Parameters:**
213
- - `input` (string) — String to encode or decode
214
- - `action` (enum) — `encode` or `decode`
215
-
216
- **Examples:**
217
- ```
218
- Base64 encode "Hello World"
219
- → SGVsbG8gV29ybGQ=
220
-
221
- Base64 decode "eyJhbGciOiJIUzI1NiJ9"
222
- → {"alg":"HS256"}
223
- ```
224
-
225
- ### encode
226
-
227
- URL, HTML entity, or Unicode escape encoding/decoding.
228
-
229
- **Parameters:**
230
- - `input` (string) — String to encode or decode
231
- - `action` (enum) — `encode` or `decode`
232
- - `type` (enum) — `url`, `html`, or `unicode`
233
-
234
- **Examples:**
235
- ```
236
- URL-encode "hello world"
237
- → hello%20world
238
-
239
- HTML-decode "&lt;script&gt;"
240
- → <script>
241
- ```
242
-
243
- ### regex
244
-
245
- Test, match, or replace with regular expressions.
246
-
247
- **Parameters:**
248
- - `pattern` (string) — Regular expression pattern
249
- - `flags` (string, optional) — Regex flags (g, i, m, etc.)
250
- - `text` (string) — Text to search
251
- - `action` (enum) — `match`, `test`, `replace`, or `matchAll`
252
- - `replacement` (string, optional) — Replacement string for replace
253
-
254
- **Examples:**
255
- ```
256
- Extract numbers from "abc123def456"
257
- → ["123", "456"]
258
-
259
- Replace all spaces with dashes in "hello world"
260
- → "hello-world"
261
- ```
262
-
263
- ### diff
264
-
265
- Line diff or Levenshtein distance between two texts.
266
-
267
- **Parameters:**
268
- - `text1` (string) — First text
269
- - `text2` (string) — Second text
270
- - `action` (enum, optional) — `diff` (line diff, default) or `distance` (Levenshtein)
271
-
272
- **Examples:**
273
- ```
274
- Edit distance: "kitten" → "sitting"
275
- → 3
276
-
277
- Line diff between two texts
278
- → - old line
279
- → + new line
280
- ```
281
-
282
- ### char_info
283
-
284
- Get Unicode information about characters.
285
-
286
- **Parameters:**
287
- - `char` (string) — Character(s) to get info about
288
-
289
- **Examples:**
290
- ```
291
- Unicode info for "€"
292
- → U+20AC, Currency Symbols
293
-
294
- What's the code point for "🌍"?
295
- → U+1F30D, Miscellaneous Symbols and Pictographs
296
- ```
297
-
298
- ## Validation & Parsing
299
-
300
- ### json_validate
301
-
302
- Validate JSON, CSV, XML, or YAML format.
303
-
304
- **Parameters:**
305
- - `input` (string) — String to validate/parse
306
- - `format` (enum) — `json`, `csv`, `xml`, or `yaml`
307
-
308
- **Examples:**
309
- ```
310
- Is '{"name":"test"}' valid JSON?
311
- → valid, object, keys: ["name"]
312
-
313
- Validate CSV with 3 columns
314
- → valid, 10 rows, 3 columns
315
- ```
316
-
317
- ### luhn
318
-
319
- Validate or generate Luhn check digits (credit cards, etc.).
320
-
321
- **Parameters:**
322
- - `number` (string) — Number string to validate or generate check digit for
323
- - `action` (enum, optional) — `validate` (default) or `generate`
324
-
325
- **Examples:**
326
- ```
327
- Is 4539578763621486 a valid card number?
328
- → true
329
-
330
- Generate check digit for 453957876362148
331
- → 6
332
- ```
333
-
334
- ### semver
335
-
336
- Semantic versioning operations: compare, validate, or check range satisfaction.
337
-
338
- **Parameters:**
339
- - `action` (enum) — `compare`, `valid`, or `satisfies`
340
- - `version` (string) — Semver version string
341
- - `version2` (string, optional) — Second version for compare
342
- - `range` (string, optional) — Version range for satisfies (e.g., `^1.0.0`)
343
-
344
- **Examples:**
345
- ```
346
- Does 1.5.3 satisfy ^1.0.0?
347
- → true
348
-
349
- Compare 2.0.0 and 1.9.9
350
- → 2.0.0 is greater
351
- ```
352
-
353
- ### ip
354
-
355
- IPv4/IPv6 address information, CIDR range calculations, and membership checks.
356
-
357
- **Parameters:**
358
- - `action` (enum) — `info`, `contains`, or `range`
359
- - `ip` (string, optional) — IP address
360
- - `cidr` (string, optional) — CIDR notation (e.g., `192.168.1.0/24`)
361
- - `target` (string, optional) — Target IP to check against CIDR
362
-
363
- **Examples:**
364
- ```
365
- IP range of 192.168.1.0/24?
366
- → 192.168.1.1 – .254 (254 hosts)
367
-
368
- Is 192.168.1.50 in 192.168.1.0/24?
369
- → true
370
- ```
371
-
372
- ### color
373
-
374
- Convert between color formats: HEX ↔ RGB ↔ HSL.
375
-
376
- **Parameters:**
377
- - `color` (string) — Color value: `#hex`, `rgb(r,g,b)`, or `hsl(h,s%,l%)`
378
- - `to` (enum, optional) — `hex`, `rgb`, or `hsl` (returns all if omitted)
379
-
380
- **Examples:**
381
- ```
382
- Convert #FF5733 to RGB
383
- → rgb(255, 87, 51)
384
-
385
- Convert rgb(100, 200, 50) to HSL
386
- → hsl(100, 60%, 49%)
387
- ```
388
-
389
- ### jwt_decode
390
-
391
- Decode JWT tokens (header + payload, no signature verification).
392
-
393
- **Parameters:**
394
- - `token` (string) — JWT token to decode
395
-
396
- **Examples:**
397
- ```
398
- Decode this JWT: eyJhbGci...
399
- → { header: { alg: "HS256" }, payload: { name: "John Doe" } }
400
- ```
401
-
402
- ### url_parse
403
-
404
- Parse URLs into components.
405
-
406
- **Parameters:**
407
- - `url` (string) — URL to parse
408
-
409
- **Examples:**
410
- ```
411
- Parse https://example.com/search?q=hello
412
- → host: example.com, pathname: /search, q: "hello"
413
- ```
414
-
415
- ---
416
-
417
- ## Tool Categories Summary
418
-
419
- | Category | Count | Tools |
420
- |----------|-------|-------|
421
- | Math & Numbers | 4 | math, count, base, convert |
422
- | Random | 1 | random (5 types) |
423
- | Date & Time | 3 | datetime, date, cron_parse |
424
- | Text Processing | 6 | hash, base64, encode, regex, diff, char_info |
425
- | Validation & Parsing | 7 | json_validate, luhn, semver, ip, color, jwt_decode, url_parse |
426
-
427
- **Total: 21 tools**