@coo-quack/calc-mcp 1.6.1 → 1.7.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coo-quack/calc-mcp",
3
- "version": "1.6.1",
3
+ "version": "1.7.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "calc-mcp": "dist/index.js"
Binary file
@@ -1,56 +0,0 @@
1
- import { defineConfig } from "vitepress";
2
-
3
- export default defineConfig({
4
- title: "Calc MCP",
5
- description: "21 tools for things AI is bad at",
6
- base: "/calc-mcp/",
7
-
8
- themeConfig: {
9
- logo: "/logo.svg",
10
-
11
- nav: [
12
- { text: "Home", link: "/" },
13
- { text: "Tools", link: "/tools" },
14
- { text: "Install", link: "/install" },
15
- { text: "Examples", link: "/examples" },
16
- { text: "Changelog", link: "/changelog" },
17
- ],
18
-
19
- sidebar: [
20
- {
21
- text: "Guide",
22
- items: [
23
- { text: "Getting Started", link: "/" },
24
- { text: "Installation", link: "/install" },
25
- { text: "Examples", link: "/examples" },
26
- ],
27
- },
28
- {
29
- text: "Reference",
30
- items: [
31
- { text: "All Tools", link: "/tools" },
32
- { text: "Changelog", link: "/changelog" },
33
- ],
34
- },
35
- ],
36
-
37
- socialLinks: [
38
- { icon: "github", link: "https://github.com/coo-quack/calc-mcp" },
39
- {
40
- icon: "npm",
41
- link: "https://www.npmjs.com/package/@coo-quack/calc-mcp",
42
- },
43
- ],
44
-
45
- footer: {
46
- message: "Released under the MIT License.",
47
- copyright: "Copyright © 2026 coo-quack",
48
- },
49
-
50
- search: {
51
- provider: "local",
52
- },
53
- },
54
-
55
- head: [["link", { rel: "icon", href: "/calc-mcp/favicon.ico" }]],
56
- });
@@ -1,4 +0,0 @@
1
- import DefaultTheme from "vitepress/theme";
2
- import "./style.css";
3
-
4
- export default DefaultTheme;
@@ -1,21 +0,0 @@
1
- :root {
2
- --vp-c-brand-1: #00a000;
3
- --vp-c-brand-2: #00c000;
4
- --vp-c-brand-3: #00e000;
5
- --vp-c-brand-soft: rgba(0, 160, 0, 0.14);
6
- }
7
-
8
- .dark {
9
- --vp-c-brand-1: #00d000;
10
- --vp-c-brand-2: #00b000;
11
- --vp-c-brand-3: #00a000;
12
- --vp-c-brand-soft: rgba(0, 208, 0, 0.16);
13
- }
14
-
15
- .vp-doc a {
16
- color: var(--vp-c-brand-1);
17
- }
18
-
19
- .vp-doc a:hover {
20
- color: var(--vp-c-brand-2);
21
- }
package/docs/changelog.md DELETED
@@ -1,117 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to Calc MCP are documented here.
4
-
5
- ## v1.6.1 (2026-02-12)
6
-
7
- ### Bug Fixes
8
-
9
- - **hash** — Replace `Bun.CryptoHasher` with `node:crypto` for Node.js compatibility (#18)
10
-
11
- ## v1.6.0 (2026-02-12)
12
-
13
- ### Features
14
-
15
- - **Documentation site** — Full VitePress-powered docs at [coo-quack.github.io/calc-mcp](https://coo-quack.github.io/calc-mcp/) with tool reference, examples, install guides, and changelog (#13)
16
-
17
- ### Documentation
18
-
19
- - Added documentation site link to README
20
- - Added release checklist to CONTRIBUTING.md (#15)
21
- - Updated npx examples with `--prefix /tmp` for better node_modules compatibility
22
- - Added common ignore patterns to .gitignore
23
-
24
- ## v1.5.0 (2026-02-11)
25
-
26
- ### Features
27
-
28
- - **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
29
- - **Shuffle** — Fisher-Yates algorithm with `crypto.getRandomValues` for unbiased list shuffling
30
-
31
- ### Documentation
32
-
33
- - README title: `@coo-quack/calc-mcp` → `Calc MCP`
34
- - Added "Why?" section with AI-alone vs calc-mcp comparison
35
- - Quick Start moved to top
36
- - Install guides consolidated (Claude Desktop/Cursor/Windsurf share same JSON format)
37
-
38
- ### Tests
39
-
40
- - Random tool tests: 12 → 27 (+15)
41
- - Total: 194 tests, 280 assertions
42
-
43
- ## v1.4.0 (2026-02-11)
44
-
45
- ### Features
46
-
47
- - **Time conversion** — ms, s, min, h, d, wk, mo, yr (now 8 categories, 72 units)
48
- - **`--version` flag** — `npx @coo-quack/calc-mcp --version`
49
-
50
- ### Improvements
51
-
52
- - serverInfo.version synced with package.json (was hardcoded "0.1.0")
53
- - Error messages now list all supported units on unknown unit
54
- - Semver test coverage: 9 → 23 tests
55
- - CI git config for tag authoring
56
- - README badges (npm, CI, license)
57
- - CONTRIBUTING.md added
58
- - GitHub topics set
59
- - README examples: Japanese text replaced with English alternatives
60
-
61
- ## v1.3.0 (2026-02-11)
62
-
63
- ### Documentation
64
-
65
- - Overhaul README with natural language examples (22 verified examples)
66
- - Add install guides for Claude Code, Claude Desktop, VS Code, Cursor, Windsurf
67
- - Add unit conversion coverage details (7 categories, 58 units)
68
- - Add encode/decode examples (Base64, URL, HTML)
69
-
70
- ## v1.1.0 (2026-02-11)
71
-
72
- ### Features
73
-
74
- - **random**: Add UUID v7 support (`uuidVersion: "v7"`) — Time-ordered UUIDs, ideal for database primary keys
75
-
76
- ## v1.0.0 (2026-02-11)
77
-
78
- ### Features
79
-
80
- Initial release with **21 MCP tools** for calculations and operations AI models struggle with:
81
-
82
- - **random** — UUID (v4), ULID, secure password, random number
83
- - **hash** — SHA-1, SHA-256, SHA-512, MD5
84
- - **base64** — Encode/decode Base64
85
- - **encode** — URL encode/decode, HTML entity encode/decode
86
- - **datetime** — Current time, convert, format, Unix timestamp
87
- - **count** — Character, word, line, byte counting (grapheme-aware)
88
- - **math** — Precise math evaluation via mathjs
89
- - **date** — Date arithmetic (add/subtract/diff)
90
- - **regex** — Test, match, replace with regex
91
- - **base** — Number base conversion (bin/oct/dec/hex/custom)
92
- - **diff** — Text diff between two strings
93
- - **json_validate** — JSON schema validation
94
- - **cron_parse** — Cron expression to human-readable description
95
- - **luhn** — Luhn algorithm validation (credit cards, etc.)
96
- - **ip** — IPv4/IPv6 parsing, CIDR subnet info
97
- - **color** — Color format conversion (hex/rgb/hsl/hwb)
98
- - **convert** — Unit conversion (length, weight, temp, data, time)
99
- - **char_info** — Unicode character info (codepoint, name, category)
100
- - **jwt_decode** — Decode JWT tokens (header + payload)
101
- - **url_parse** — URL parsing into components
102
- - **semver** — Semantic versioning operations (compare, satisfy, sort)
103
-
104
- ### CI/CD
105
-
106
- - GitHub Actions: test + lint on push/PR
107
- - Publish workflow: test + lint gate before npm publish on tag
108
-
109
- ### Infrastructure
110
-
111
- - Biome for linting and formatting
112
- - Renovate with OSV vulnerability alerts
113
- - 160 tests, 92%+ line coverage
114
-
115
- ---
116
-
117
- For the latest changes, see [GitHub Releases](https://github.com/coo-quack/calc-mcp/releases).
package/docs/examples.md DELETED
@@ -1,419 +0,0 @@
1
- # Examples
2
-
3
- Ask in natural language — the AI picks the right tool automatically. Here are real examples you can try:
4
-
5
- ## Math & Numbers
6
-
7
- ### Calculations
8
-
9
- ```
10
- What's 10 + 34 × 341 ÷ 23?
11
- → 514.087 (math)
12
-
13
- Calculate sqrt(144) + 2^8
14
- → 268 (math)
15
-
16
- What's the sum of [10, 20, 30, 40, 50]?
17
- → 150 (math)
18
- ```
19
-
20
- ### Statistics
21
-
22
- ```
23
- Calculate mean and stddev of [1, 2, 3, 4, 5]
24
- → { mean: 3, median: 3, stddev: 1.414, min: 1, max: 5 } (math)
25
-
26
- What's the median of [100, 50, 200, 75, 150]?
27
- → 100 (math)
28
- ```
29
-
30
- ### Base Conversion
31
-
32
- ```
33
- Convert 255 to binary
34
- → 11111111 (base)
35
-
36
- Convert FF from hex to decimal
37
- → 255 (base)
38
-
39
- Convert 12 from decimal to base 5
40
- → 22 (base)
41
- ```
42
-
43
- ### Card Validation
44
-
45
- ```
46
- Is 4539578763621486 a valid card number?
47
- → true (luhn)
48
-
49
- Generate check digit for 453957876362148
50
- → 6 (luhn)
51
- ```
52
-
53
- ## Text & Encoding
54
-
55
- ### Counting
56
-
57
- ```
58
- How many characters in "Hello, World! 🌍"?
59
- → 15 chars, 18 bytes (count)
60
-
61
- Count words in "The quick brown fox jumps"
62
- → 5 words (count)
63
-
64
- How many lines in this text? (multiline input)
65
- → 10 lines (count)
66
- ```
67
-
68
- ### Base64
69
-
70
- ```
71
- Base64 encode "Hello World"
72
- → SGVsbG8gV29ybGQ= (base64)
73
-
74
- Base64 decode "eyJhbGciOiJIUzI1NiJ9"
75
- → {"alg":"HS256"} (base64)
76
- ```
77
-
78
- ### URL Encoding
79
-
80
- ```
81
- URL-encode "hello world"
82
- → hello%20world (encode)
83
-
84
- URL-decode "hello%20world"
85
- → "hello world" (encode)
86
-
87
- HTML-encode "<script>alert('XSS')</script>"
88
- → &lt;script&gt;alert(&#39;XSS&#39;)&lt;/script&gt; (encode)
89
-
90
- HTML-decode "&lt;script&gt;"
91
- → <script> (encode)
92
- ```
93
-
94
- ### Hashing
95
-
96
- ```
97
- SHA-256 hash of "password123"
98
- → ef92b778bafe771e89b862eebf... (hash)
99
-
100
- MD5 of "hello world"
101
- → 5eb63bbbe01eeed093cb22bb8f5acdc3 (hash)
102
-
103
- CRC32 checksum of "test"
104
- → d87f7e0c (hash)
105
- ```
106
-
107
- ## Date & Time
108
-
109
- ### Current Time
110
-
111
- ```
112
- What time is it in New York?
113
- → 2026-02-10T19:00:00-05:00 (datetime)
114
-
115
- What time is it in Tokyo?
116
- → 2026-02-11T09:00:00+09:00 (datetime)
117
-
118
- What's the current UNIX timestamp?
119
- → 1707638400 (datetime)
120
- ```
121
-
122
- ### Date Arithmetic
123
-
124
- ```
125
- What's 100 days after 2026-02-11?
126
- → 2026-05-22 (date)
127
-
128
- What's 30 days before 2026-03-01?
129
- → 2026-01-30 (date)
130
-
131
- Add 6 months to 2026-01-15
132
- → 2026-07-15 (date)
133
- ```
134
-
135
- ### Date Differences
136
-
137
- ```
138
- How many days between 2026-01-01 and 2026-12-31?
139
- → 364 days (date)
140
-
141
- Difference in months between 2025-01-01 and 2026-01-01
142
- → 12 months (date)
143
- ```
144
-
145
- ### Weekdays
146
-
147
- ```
148
- What day of the week is 2026-02-11?
149
- → Wednesday (水曜日) (date)
150
- ```
151
-
152
- ### Cron Expressions
153
-
154
- ```
155
- When does "30 9 * * 1-5" run?
156
- → Mon–Fri at 9:30 (cron_parse)
157
-
158
- Parse "0 0 1 * *"
159
- → Monthly on the 1st at midnight (cron_parse)
160
-
161
- Next 5 runs of "*/15 * * * *"
162
- → Every 15 minutes: 10:00, 10:15, 10:30... (cron_parse)
163
- ```
164
-
165
- ## Generation
166
-
167
- ### UUIDs
168
-
169
- ```
170
- Generate a UUID v4
171
- → 550e8400-e29b-41d4-a716-446655440000 (random)
172
-
173
- Generate a UUID v7 (time-ordered)
174
- → 019c4b54-aad2-7e52-8a3b-... (random)
175
-
176
- Generate a ULID
177
- → 01HN8B6ZK9PQRSTVWXY0123456 (random)
178
- ```
179
-
180
- ### Passwords
181
-
182
- ```
183
- Generate a 20-character password
184
- → hT9jZDojX6sHRJt8vaKS (random)
185
-
186
- Generate a readable password (no ambiguous chars)
187
- → rTbPkWnF8sHuDxYz (random)
188
-
189
- Generate a 16-char password with only letters and numbers
190
- → aB3dE5fG7hJ9kL2m (random)
191
-
192
- Generate a password without symbols
193
- → xYz4AbC8DeFgHiJk (random)
194
- ```
195
-
196
- ### Random Numbers
197
-
198
- ```
199
- Random number between 1 and 100
200
- → 42 (random)
201
-
202
- Random number between 1 and 6 (dice roll)
203
- → 4 (random)
204
- ```
205
-
206
- ### Shuffle
207
-
208
- ```
209
- Shuffle ["Alice", "Bob", "Charlie"]
210
- → ["Charlie", "Alice", "Bob"] (random)
211
-
212
- Randomize order: ["A", "B", "C", "D", "E"]
213
- → ["D", "A", "E", "B", "C"] (random)
214
- ```
215
-
216
- ## Conversion
217
-
218
- ### Length
219
-
220
- ```
221
- 100 miles in kilometers?
222
- → 160.93 km (convert)
223
-
224
- 5 feet in meters?
225
- → 1.524 m (convert)
226
- ```
227
-
228
- ### Temperature
229
-
230
- ```
231
- 72°F in Celsius?
232
- → 22.22°C (convert)
233
-
234
- 100°C in Fahrenheit?
235
- → 212°F (convert)
236
-
237
- 300 Kelvin in Celsius?
238
- → 26.85°C (convert)
239
- ```
240
-
241
- ### Weight
242
-
243
- ```
244
- 10 pounds in kilograms?
245
- → 4.536 kg (convert)
246
-
247
- 500 grams in ounces?
248
- → 17.637 oz (convert)
249
- ```
250
-
251
- ### Area (including Japanese units)
252
-
253
- ```
254
- 10 tsubo in square meters?
255
- → 33.06 m² (convert)
256
-
257
- 100 m² in tatami?
258
- → 60.5 tatami (convert)
259
-
260
- 1 acre in square meters?
261
- → 4046.86 m² (convert)
262
- ```
263
-
264
- ### Data
265
-
266
- ```
267
- 5 GB in megabytes?
268
- → 5120 MB (convert)
269
-
270
- 1000 kilobytes in bits?
271
- → 8192000 bits (convert)
272
- ```
273
-
274
- ### Time
275
-
276
- ```
277
- 3600 seconds in hours?
278
- → 1 hour (convert)
279
-
280
- 2 weeks in days?
281
- → 14 days (convert)
282
-
283
- 1000000 milliseconds in minutes?
284
- → 16.667 minutes (convert)
285
- ```
286
-
287
- ## Analysis & Parsing
288
-
289
- ### Regular Expressions
290
-
291
- ```
292
- Extract numbers from "abc123def456"
293
- → ["123", "456"] (regex)
294
-
295
- Does "hello@example.com" match an email pattern?
296
- → true (regex)
297
-
298
- Replace all spaces with dashes in "hello world"
299
- → "hello-world" (regex)
300
- ```
301
-
302
- ### Text Diff
303
-
304
- ```
305
- Edit distance: "kitten" → "sitting"
306
- → 3 (diff)
307
-
308
- Line diff between two code snippets
309
- → - old line
310
- → + new line
311
- → unchanged line
312
- (diff)
313
- ```
314
-
315
- ### IP Addresses
316
-
317
- ```
318
- IP range of 192.168.1.0/24?
319
- → 192.168.1.1 – .254 (254 hosts) (ip)
320
-
321
- Is 192.168.1.50 in 192.168.1.0/24?
322
- → true (ip)
323
-
324
- Parse IPv6 address 2001:db8::1
325
- → { version: 6, address: "2001:0db8:0000:..." } (ip)
326
- ```
327
-
328
- ### Colors
329
-
330
- ```
331
- Convert #FF5733 to RGB
332
- → rgb(255, 87, 51) (color)
333
-
334
- Convert rgb(100, 200, 50) to HSL
335
- → hsl(100, 60%, 49%) (color)
336
-
337
- Convert hsl(120, 100%, 50%) to HEX
338
- → #00FF00 (color)
339
- ```
340
-
341
- ### Semver
342
-
343
- ```
344
- Does 1.5.3 satisfy ^1.0.0?
345
- → true (semver)
346
-
347
- Compare 2.0.0 and 1.9.9
348
- → 2.0.0 is greater (semver)
349
-
350
- Is "1.2.3-beta.1" a valid semver?
351
- → true (semver)
352
- ```
353
-
354
- ## Decode & Parse
355
-
356
- ### JSON Validation
357
-
358
- ```
359
- Is '{"name":"test"}' valid JSON?
360
- → valid, object, keys: ["name"] (json_validate)
361
-
362
- Validate CSV with 3 columns
363
- → valid, 10 rows, 3 columns (json_validate)
364
-
365
- Is this valid XML? (XML input)
366
- → valid (json_validate)
367
- ```
368
-
369
- ### JWT Decoding
370
-
371
- ```
372
- Decode this JWT: eyJhbGci...
373
- → {
374
- header: { alg: "HS256", typ: "JWT" },
375
- payload: { sub: "1234567890", name: "John Doe" }
376
- }
377
- (jwt_decode)
378
- ```
379
-
380
- ### URL Parsing
381
-
382
- ```
383
- Parse https://example.com/search?q=hello&lang=en
384
- → {
385
- host: "example.com",
386
- pathname: "/search",
387
- searchParams: { q: "hello", lang: "en" }
388
- }
389
- (url_parse)
390
-
391
- Extract query params from https://api.github.com/search?q=mcp&sort=stars
392
- → { q: "mcp", sort: "stars" } (url_parse)
393
- ```
394
-
395
- ### Unicode Info
396
-
397
- ```
398
- Unicode info for "€"
399
- → U+20AC, Currency Symbols (char_info)
400
-
401
- What's the code point for "🌍"?
402
- → U+1F30D, Miscellaneous Symbols and Pictographs (char_info)
403
-
404
- Character info for "あ"
405
- → U+3042, Hiragana (char_info)
406
- ```
407
-
408
- ---
409
-
410
- ## Tips for Natural Language Queries
411
-
412
- The AI automatically selects the right tool based on your question. For best results:
413
-
414
- 1. **Be specific** — "Convert 100°F to Celsius" is better than "temperature conversion"
415
- 2. **Include units** — "5 miles in km" is clearer than "5 miles"
416
- 3. **Use examples** — "Extract numbers from 'abc123'" shows what you want
417
- 4. **Ask naturally** — The AI understands conversational queries
418
-
419
- Try asking in your own words — the AI will figure it out! 🚀