{"id":44401277,"url":"https://github.com/coo-quack/calc-mcp","last_synced_at":"2026-04-02T20:05:06.641Z","repository":{"id":337771834,"uuid":"1154753520","full_name":"coo-quack/calc-mcp","owner":"coo-quack","description":"MCP server with 21 tools for things AI is bad at — math, hashing, encoding, date arithmetic, and more.","archived":false,"fork":false,"pushed_at":"2026-02-16T12:52:20.000Z","size":1130,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-16T15:49:42.710Z","etag":null,"topics":["ai-tools","bun","calculator","mcp","mcp-server","typescript"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coo-quack.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-10T18:33:40.000Z","updated_at":"2026-02-16T12:43:19.000Z","dependencies_parsed_at":"2026-02-16T10:01:16.821Z","dependency_job_id":null,"html_url":"https://github.com/coo-quack/calc-mcp","commit_stats":null,"previous_names":["coo-quack/calc-mcp"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/coo-quack/calc-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coo-quack%2Fcalc-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coo-quack%2Fcalc-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coo-quack%2Fcalc-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coo-quack%2Fcalc-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coo-quack","download_url":"https://codeload.github.com/coo-quack/calc-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coo-quack%2Fcalc-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29541119,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T08:11:05.436Z","status":"ssl_error","status_checked_at":"2026-02-17T08:09:38.860Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-tools","bun","calculator","mcp","mcp-server","typescript"],"created_at":"2026-02-12T06:21:14.438Z","updated_at":"2026-02-17T11:00:43.989Z","avatar_url":"https://github.com/coo-quack.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Calc MCP\n\n[![npm version](https://img.shields.io/npm/v/@coo-quack/calc-mcp)](https://www.npmjs.com/package/@coo-quack/calc-mcp)\n[![CI](https://github.com/coo-quack/calc-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/coo-quack/calc-mcp/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n📖 **[Documentation](https://coo-quack.github.io/calc-mcp/)** — Full tool reference, examples, and install guides.\n\n**21 tools for things AI is bad at** — deterministic math, cryptographic randomness, accurate date arithmetic, encoding, hashing, and more.\n\nLLMs hallucinate calculations, can't generate true random numbers, and struggle with timezones. This MCP server fixes that.\n\n### Quick Start\n\n```bash\n# Claude Code\nclaude mcp add -s user calc-mcp -- npx --prefix /tmp -y @coo-quack/calc-mcp@latest\n\n# Or just run it\nnpx --prefix /tmp -y @coo-quack/calc-mcp@latest\n```\n\n\u003e Works with Claude Desktop, VS Code Copilot, Cursor, Windsurf — [setup guides below](#install).\n\n---\n\n## Why?\n\n| AI alone | With calc-mcp |\n|----------|---------------|\n| \"10 + 34 × 341 ÷ 23 = 507.8\" ❌ | `514.087` ✅ (math) |\n| \"Here's a UUID: 550e8400-...\" 🤷 fake | Cryptographically random UUID v4/v7 ✅ (random) |\n| \"100 days from now is...\" 🤔 guess | `2026-05-22` ✅ (date) |\n| \"SHA-256 of password123 is...\" 💀 hallucinated | `ef92b778bafe...` ✅ (hash) |\n\n## Examples\n\nAsk in natural language — the AI picks the right tool automatically.\n\n### Math \u0026 Numbers\n\n| You ask | You get | Tool |\n|---------|---------|------|\n| What's 10 + 34 × 341 ÷ 23? | `514.087` | math |\n| Convert 255 to binary | `11111111` | base |\n| Is 4539578763621486 a valid card number? | `true` | luhn |\n\n### Text \u0026 Encoding\n\n| You ask | You get | Tool |\n|---------|---------|------|\n| How many characters in \"Hello, World! 🌍\"? | `15 chars, 18 bytes` | count |\n| Base64 encode \"Hello World\" | `SGVsbG8gV29ybGQ=` | base64 |\n| Base64 decode \"eyJhbGciOiJIUzI1NiJ9\" | `{\"alg\":\"HS256\"}` | base64 |\n| URL-encode \"hello world\" | `hello%20world` | encode |\n| URL-decode \"hello%20world\" | `hello world` | encode |\n| HTML-decode `\u0026lt;script\u0026gt;` | `\u003cscript\u003e` | encode |\n| SHA-256 hash of \"password123\" | `ef92b778bafe...` | hash |\n\n### Date \u0026 Time\n\n| You ask | You get | Tool |\n|---------|---------|------|\n| What time is it in New York? | `2026-02-10T19:00:00-05:00` | datetime |\n| What's 100 days after 2026-02-11? | `2026-05-22` | date |\n| When does \"30 9 * * 1-5\" run? | `Mon–Fri at 9:30` | cron_parse |\n\n### Generation\n\n| You ask | You get | Tool |\n|---------|---------|------|\n| Generate a UUID v7 | `019c4b54-aad2-7e52-...` | random |\n| Generate a readable 20-char password | `hT9jZDojX6sHRJt8vaKS` | random |\n| Shuffle [\"Alice\", \"Bob\", \"Charlie\"] | `[\"Charlie\", \"Alice\", \"Bob\"]` | random |\n\n### Conversion\n\n| You ask | You get | Tool |\n|---------|---------|------|\n| 100 miles in kilometers? | `160.93 km` | convert |\n| 72°F in Celsius? | `22.22°C` | convert |\n| Convert #FF5733 to RGB | `rgb(255, 87, 51)` | color |\n\n### Analysis \u0026 Parsing\n\n| You ask | You get | Tool |\n|---------|---------|------|\n| Extract numbers from \"abc123def456\" | `123, 456` | regex |\n| Does 1.5.3 satisfy ^1.0.0? | `true` | semver |\n| IP range of 192.168.1.0/24? | `192.168.1.1 – .254 (254 hosts)` | ip |\n| Edit distance: \"kitten\" → \"sitting\" | `3` | diff |\n| Unicode info for \"€\" | `U+20AC, Currency Symbols` | char_info |\n| Is `{\"name\":\"test\"}` valid JSON? | `valid, object` | json_validate |\n\n### Decode \u0026 Parse\n\n| You ask | You get | Tool |\n|---------|---------|------|\n| Decode this JWT: eyJhbGci... | `{ alg: \"HS256\", name: \"John Doe\" }` | jwt_decode |\n| Parse https://example.com/search?q=hello | `host: example.com, q: \"hello\"` | url_parse |\n\n## All 21 Tools\n\n| Tool | Description |\n|------|-------------|\n| `math` | Evaluate expressions, statistics |\n| `count` | Characters (grapheme-aware), words, lines, bytes |\n| `datetime` | Current time, timezone conversion, UNIX timestamps |\n| `random` | UUID v4/v7, ULID, passwords (readable, custom charset), shuffle |\n| `hash` | MD5, SHA-1, SHA-256, SHA-512, CRC32 |\n| `base64` | Encode / decode |\n| `encode` | URL, HTML entity, Unicode escape |\n| `date` | Diff, add/subtract, weekday, wareki |\n| `regex` | Test, match, matchAll, replace |\n| `base` | Number base conversion (2–36) |\n| `diff` | Line diff, Levenshtein distance |\n| `json_validate` | Validate JSON, CSV, XML, YAML |\n| `cron_parse` | Human-readable cron + next runs |\n| `luhn` | Validate / generate check digits |\n| `ip` | IPv4/IPv6 info, CIDR range |\n| `color` | HEX ↔ RGB ↔ HSL |\n| `convert` | 8 categories, 72 units: length, weight, temperature, area (tsubo, tatami), volume, speed, data, time |\n| `char_info` | Unicode code point, block, category |\n| `jwt_decode` | Decode header + payload (no verification) |\n| `url_parse` | Protocol, host, path, params, hash |\n| `semver` | Compare, validate, range satisfaction |\n\n## Install\n\n### Claude Code\n\n```bash\nclaude mcp add -s user calc-mcp -- npx --prefix /tmp -y @coo-quack/calc-mcp@latest\n```\n\n### Claude Desktop / Cursor / Windsurf\n\nAdd to your config file:\n\n| App | Config path |\n|-----|-------------|\n| Claude Desktop (macOS) | `~/Library/Application Support/Claude/claude_desktop_config.json` |\n| Claude Desktop (Windows) | `%APPDATA%\\Claude\\claude_desktop_config.json` |\n| Cursor | `~/.cursor/mcp.json` |\n| Windsurf | `~/.codeium/windsurf/mcp_config.json` |\n\n```json\n{\n  \"mcpServers\": {\n    \"calc-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"--prefix\", \"/tmp\", \"-y\", \"@coo-quack/calc-mcp@latest\"]\n    }\n  }\n}\n```\n\n### VS Code (GitHub Copilot)\n\nAdd to `.vscode/mcp.json` in your workspace:\n\n```json\n{\n  \"servers\": {\n    \"calc-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"--prefix\", \"/tmp\", \"-y\", \"@coo-quack/calc-mcp@latest\"]\n    }\n  }\n}\n```\n\n## Development\n\n```bash\nbun install\nbun run dev       # Start dev server\nbun test          # Run tests\nbun run lint      # Biome\nbun run format    # Biome\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoo-quack%2Fcalc-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoo-quack%2Fcalc-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoo-quack%2Fcalc-mcp/lists"}