@coo-quack/calc-mcp 1.5.0 → 1.6.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/docs/tools.md ADDED
@@ -0,0 +1,427 @@
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 "<script>"
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**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coo-quack/calc-mcp",
3
- "version": "1.5.0",
3
+ "version": "1.6.1",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "calc-mcp": "dist/index.js"
@@ -12,13 +12,18 @@
12
12
  "lint": "biome check .",
13
13
  "format": "biome format . --write",
14
14
  "changelog": "bunx changelogen",
15
- "release": "bunx bumpp"
15
+ "release": "bunx bumpp",
16
+ "docs:dev": "vitepress dev docs",
17
+ "docs:build": "vitepress build docs",
18
+ "docs:preview": "vitepress preview docs"
16
19
  },
17
20
  "devDependencies": {
18
21
  "@biomejs/biome": "^2.3.14",
19
22
  "@types/bun": "latest",
20
- "typescript": "^5.9.3"
23
+ "typescript": "^5.9.3",
24
+ "vitepress": "^1.6.4"
21
25
  },
26
+ "homepage": "https://coo-quack.github.io/calc-mcp/",
22
27
  "repository": {
23
28
  "type": "git",
24
29
  "url": "git+https://github.com/coo-quack/calc-mcp.git"
package/CHANGELOG.md DELETED
@@ -1,91 +0,0 @@
1
- # Changelog
2
-
3
- ## v1.5.0 (2026-02-11)
4
-
5
- ### Features
6
-
7
- - **Password generation** — fine-grained options: `uppercase`, `numbers`, `symbols` (on/off), `readable` mode (excludes ambiguous chars like l/1/I/O/0/o), `excludeChars` for custom exclusions
8
- - **Shuffle** — Fisher-Yates algorithm with `crypto.getRandomValues` for unbiased list shuffling
9
-
10
- ### Documentation
11
-
12
- - README title: `@coo-quack/calc-mcp` → `Calc MCP`
13
- - Added "Why?" section with AI-alone vs calc-mcp comparison
14
- - Quick Start moved to top
15
- - Install guides consolidated (Claude Desktop/Cursor/Windsurf share same JSON format)
16
-
17
- ### Tests
18
-
19
- - Random tool tests: 12 → 27 (+15)
20
- - Total: 194 tests, 280 assertions
21
-
22
- ## v1.4.0 (2026-02-11)
23
-
24
- ### Features
25
-
26
- - **Time conversion** — ms, s, min, h, d, wk, mo, yr (now 8 categories, 72 units)
27
- - **`--version` flag** — `npx @coo-quack/calc-mcp --version`
28
-
29
- ### Improvements
30
-
31
- - serverInfo.version synced with package.json (was hardcoded "0.1.0")
32
- - Error messages now list all supported units on unknown unit
33
- - Semver test coverage: 9 → 23 tests
34
- - CI git config for tag authoring
35
- - README badges (npm, CI, license)
36
- - CONTRIBUTING.md added
37
- - GitHub topics set
38
- - README examples: Japanese text replaced with English alternatives
39
-
40
- ## v1.3.0 (2026-02-11)
41
-
42
- ### Documentation
43
-
44
- - Overhaul README with natural language examples (22 verified examples)
45
- - Add install guides for Claude Code, Claude Desktop, VS Code, Cursor, Windsurf
46
- - Add unit conversion coverage details (7 categories, 58 units)
47
- - Add encode/decode examples (Base64, URL, HTML)
48
-
49
- ## v1.1.0 (2026-02-11)
50
-
51
- ### Features
52
-
53
- - **random**: Add UUID v7 support (`uuidVersion: "v7"`) — time-ordered UUIDs, ideal for database primary keys
54
-
55
- ## v1.0.0 (2026-02-11)
56
-
57
- ### Features
58
-
59
- - **21 MCP tools** for calculations and operations AI models struggle with:
60
- - `random` — UUID (v4), ULID, secure password, random number
61
- - `hash` — SHA-1, SHA-256, SHA-512, MD5
62
- - `base64` — Encode/decode Base64
63
- - `encode` — URL encode/decode, HTML entity encode/decode
64
- - `datetime` — Current time, convert, format, Unix timestamp
65
- - `count` — Character, word, line, byte counting (grapheme-aware)
66
- - `math` — Precise math evaluation via mathjs
67
- - `date` — Date arithmetic (add/subtract/diff)
68
- - `regex` — Test, match, replace with regex
69
- - `base` — Number base conversion (bin/oct/dec/hex/custom)
70
- - `diff` — Text diff between two strings
71
- - `json_validate` — JSON schema validation
72
- - `cron_parse` — Cron expression to human-readable description
73
- - `luhn` — Luhn algorithm validation (credit cards, etc.)
74
- - `ip` — IPv4/IPv6 parsing, CIDR subnet info
75
- - `color` — Color format conversion (hex/rgb/hsl/hwb)
76
- - `convert` — Unit conversion (length, weight, temp, data, time)
77
- - `char_info` — Unicode character info (codepoint, name, category)
78
- - `jwt_decode` — Decode JWT tokens (header + payload)
79
- - `url_parse` — URL parsing into components
80
- - `semver` — Semantic versioning operations (compare, satisfy, sort)
81
-
82
- ### CI/CD
83
-
84
- - GitHub Actions: test + lint on push/PR
85
- - Publish workflow: test + lint gate before npm publish on tag
86
-
87
- ### Infrastructure
88
-
89
- - Biome for linting and formatting
90
- - Renovate with OSV vulnerability alerts
91
- - 160 tests, 92%+ line coverage