关于 calc-mcp
calc-mcp 是一款 MCP 服务,提供确定性的计算、日期、编码、哈希等实用工具,适合需要本地处理且不向外部服务发送处理数据的 MCP 客户端用户。
主要功能
- 01计算数学表达式和统计数据
- 02处理日期与时区
- 03生成密码学随机值
- 04编码、解码和哈希数据
- 05转换单位和数字进制
- 06解析并验证常见格式
适用场景
- 01计算表达式,避免依赖 LLM 估算
- 02转换时间并计算日期间隔
- 03生成 UUID 或密码
- 04编码文本或计算哈希值
MCP 相关
通过 stdio 向 MCP 客户端提供 21 种工具,涵盖数学、随机生成、日期操作、编码、哈希、转换、解析和验证。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
21收录的工具列表 · 更新于 4 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| max | number | 否 | 数字生成的最大值(默认值:100) |
| min | number | 否 | 数字生成的最小值(默认值:0) |
| type | enum | 是 | 要生成的随机值类型:uuid、ulid、password、number 或 shuffleuuid | ulid | password | number | shuffle |
| items | array | 否 | 要打乱的项目(用于 type=shuffle) |
| length | integer | 否 | 密码生成长度(默认值:16) |
| charset | string | 否 | 密码的自定义字符集(覆盖大写字母/数字/符号选项) |
| numbers | boolean | 否 | 在密码中包含数字(默认值:true) |
| symbols | boolean | 否 | 在密码中包含符号(默认值:true) |
| readable | boolean | 否 | 易读模式:排除容易混淆的字符(l/1/I/O/0/o),便于阅读 |
| uppercase | boolean | 否 | 在密码中包含大写字母(默认值:true) |
| uuidVersion | enum | 否 | UUID 版本:v4(随机,默认值)或 v7(按时间排序)v4 | v7 |
| excludeChars | string | 否 | 要从密码中排除的字符(例如 "\\|{}") |
详细介绍
Calc MCP
📖 文档 — 完整的工具参考、示例和安装指南。
21 个 AI 不擅长处理的工具 — 确定性数学计算、密码学随机数、精确日期运算、编码、哈希等。
大模型会幻觉式地给出计算结果,无法生成真正的随机数,也很难处理时区。这个 MCP 服务解决了这些问题。
快速开始
# Claude Code
claude mcp add -s user calc-mcp -- npx -y @coo-quack/[email protected]
# Or just run it
npx -y @coo-quack/[email protected]
适用于 Claude Desktop、VS Code Copilot、Cursor、Windsurf 和任何 MCP 客户端 — 下方的设置指南。
为什么?
| 仅用 AI | 使用 calc-mcp |
|---|---|
| “10 + 34 × 341 ÷ 23 = 507.8” ❌ | 514.087 ✅(数学) |
| “这是一个 UUID:550e8400-...” 🤷 伪造 | 密码学安全的随机 UUID v4/v7 ✅(随机数) |
| “从现在起 100 天是……” 🤔 猜测 | 2026-05-22 ✅(日期) |
| “password123 的 SHA-256 是……” 💀 幻觉 | {"hash": "ef92b778bafe..."} ✅(哈希) |
- 确定性 — 每次输入相同,输出就相同且正确
- 安全 — 沙盒化数学运算、ReDoS 防护、弱哈希警告
- 隐私 — 所有计算都在本地运行,不会向外部服务发送数据
- 无需服务端配置 — 通过 npx 安装一次即可;需要配置 MCP 客户端
- 无需 API 密钥 — calc-mcp 本身无需账户或 API 密钥;需要 Node.js
示例
用自然语言提问 — 你的 AI 助手会选择合适的工具。
数学与数字
| 你问 | 你得到 | 工具 |
|---|---|---|
| 10 + 34 × 341 ÷ 23 等于多少? | 514.087 | math |
| 将 255 转换为二进制 | 11111111 | base |
| 4539578763621486 是有效的银行卡号吗? | true | luhn |
文本与编码
| 你问 | 你得到 | 工具 |
|---|---|---|
| “Hello, World! 🌍”有多少个字符? | 15 chars, 18 bytes | count |
| 对“Hello World”进行 Base64 编码 | SGVsbG8gV29ybGQ= | base64 |
| 对“eyJhbGciOiJIUzI1NiJ9”进行 Base64 解码 | {"alg":"HS256"} | base64 |
| 对“hello world”进行 URL 编码 | hello%20world | encode |
| 对“hello%20world”进行 URL 解码 | hello world | encode |
对 <script> 进行 HTML 解码 | <script> | encode |
| 计算“password123”的 SHA-256 哈希 | {"hash": "ef92b778bafe..."} | hash |
| 使用密钥“secret”计算“message”的 HMAC-SHA256 | {"hash": "8b5f48702995..."} | hash |
日期与时间
| 你问 | 你得到 | 工具 |
|---|---|---|
| 纽约现在几点? | 2026-02-10T19:00:00-05:00 | datetime |
| 2026-02-11 之后 100 天是哪天? | 2026-05-22 | date |
| “30 9 * * 1-5”何时运行? | Mon–Fri at 9:30 | cron_parse |
生成
| 你询问 | 你得到 | 工具 |
|---|---|---|
| 生成一个 UUID v7 | 019c4b54-aad2-7e52-... | random |
| 生成一个易读的 20 个字符密码 | hT9jZDojX6sHRJt8vaKS | random |
| 打乱 ["Alice", "Bob", "Charlie"] | ["Charlie", "Alice", "Bob"] | random |
转换
| 你询问 | 你得到 | 工具 |
|---|---|---|
| 100 英里是多少公里? | 160.93 km | convert |
| 72°F 是多少摄氏度? | 22.22°C | convert |
| 将 #FF5733 转换为 RGB | rgb(255, 87, 51) | color |
| 将 rgba(255, 0, 0, 0.5) 转换为 8 位 HEX | #ff000080 | color |
分析与解析
| 你询问 | 你得到 | 工具 |
|---|---|---|
| 从 "abc123def456" 中提取数字 | 123, 456 | regex |
| 1.5.3 是否符合 ^1.0.0? | true | semver |
| 1.8.0 是否符合 ">=1.5.0 <2.0.0"? | true | semver |
| 192.168.1.0/24 的 IP 范围? | 192.168.1.1 – .254 (254 hosts) | ip |
| "kitten" → "sitting" 的编辑距离 | 3 | diff |
| "€" 的 Unicode 信息 | U+20AC, Currency Symbols | char_info |
{"name":"test"} 是有效的 JSON 吗? | valid, object | format_validate |
解码与解析
| 你询问 | 你得到 | 工具 |
|---|---|---|
| 解码此 JWT:eyJhbGci... | { alg: "HS256", name: "John Doe" } | jwt_decode |
| 解析 https://example.com/search?q=hello | host: example.com, q: "hello" | url_parse |
全部 21 个工具
| 工具 | 描述 |
|---|---|
math | 计算表达式、统计数据 |
count | 字符(支持字素簇)、单词、行、字节 |
datetime | 当前时间、时区转换、UNIX 时间戳 |
random | UUID v4/v7、ULID、密码(易读、自定义字符集)、随机数、打乱顺序 |
hash | MD5、SHA-1、SHA-256、SHA-512、CRC32、HMAC |
base64 | 编码 / 解码 |
encode | URL、HTML 实体、Unicode 转义 |
date | 日期差、加减日期、星期几、和历 |
regex | 测试、匹配、matchAll、替换 |
base | 进制转换(2–36) |
diff | 行差异、Levenshtein 距离 |
format_validate | 验证 JSON、CSV、XML、YAML |
cron_parse | 易读的 cron 表达式 + 后续运行时间(支持星期和月份名称) |
luhn | 验证 / 生成校验位 |
ip | IPv4/IPv6 信息、CIDR 包含检查、范围计算 |
color | HEX ↔ RGB ↔ HSL(支持 alpha 通道) |
convert | 8 个类别、146 个单位名称:长度、重量、温度、面积(坪、榻榻米)、体积、速度、数据、时间 |
char_info | Unicode 码点、区块、类别 |
jwt_decode | 解码标头 + 载荷(不验证) |
url_parse | 协议、主机、路径、参数、哈希 |
semver | 比较、验证、解析、范围匹配 |
安装
Claude Code
claude mcp add -s user calc-mcp -- npx -y @coo-quack/[email protected]
Claude Code 插件
也可通过 coo-quack marketplace 作为插件使用:
/plugin marketplace add coo-quack/claude-code-marketplace
/plugin install calc-mcp@coo-quack
详情请参阅安装指南。
Claude Desktop / Cursor / Windsurf
添加到配置文件:
| 应用 | 配置路径 |
|---|---|
| Claude Desktop(macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Claude Desktop(Windows) | %APPDATA%\Claude\claude_desktop_config.json |
| Cursor | ~/.cursor/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
{
"mcpServers": {
"calc-mcp": {
"command": "npx",
"args": ["-y", "@coo-quack/[email protected]"]
}
}
}
VS Code(GitHub Copilot)
添加到工作区中的 .vscode/mcp.json:
{
"servers": {
"calc-mcp": {
"command": "npx",
"args": ["-y", "@coo-quack/[email protected]"]
}
}
}
Docker 镜像
Calc MCP 可通过 GitHub Container Registry 获取 Docker 镜像:
docker run --rm -i ghcr.io/coo-quack/calc-mcp:latest
也可以在 MCP 客户端配置中使用:
{
"mcpServers": {
"calc-mcp": {
"command": "docker",
"args": ["run", "--rm", "-i", "ghcr.io/coo-quack/calc-mcp:latest"]
}
}
}
可用标签:
ghcr.io/coo-quack/calc-mcp:latest— 最新版本ghcr.io/coo-quack/calc-mcp:X.Y.Z— 指定版本(将 X.Y.Z 替换为所需版本)
其他 MCP 客户端
Calc MCP 可与任何兼容 MCP 的客户端配合使用。通过 stdio 运行服务:
npx -y @coo-quack/[email protected]
将客户端的 MCP 配置指向上述命令。该服务使用标准的 模型上下文协议 通过 stdio 进行通信。
开发
bun install
bun run dev # Start dev server
bun test # Run tests
bun run lint # Biome
bun run format # Biome
安全性
calc-mcp 会在本地处理所有数据,且不会:
- ❌ 将数据发送到外部服务
- ❌ 将数据记录到文件或远程服务
- ❌ 持久化存储已处理的数据
详细的安全信息请参阅 SECURITY.md。
安全地与大模型配合使用
calc-mcp 本身仅在本地运行。 但是,通过大模型使用时,您的输入会发送给大模型提供商(Anthropic、OpenAI 等)。
- ✅ 建议: 尽可能使用测试/示例数据
- ✅ 建议: 对敏感操作使用仅在本地运行的大模型
- ❌ 不要: 将生产环境密钥传递给 MCP 工具(这些信息会发送给您的大模型提供商)
示例:
# ❌ Unsafe: Any secret passed to MCP tool is sent to your LLM provider
# Tool: hash
# Input: { "input": "sk-1234567890abcdef", "algorithm": "sha256" }
# ✅ Safe: Use test data only (for learning/development)
# Tool: hash
# Input: { "input": "test-value-123", "algorithm": "sha256" }
# ✅ For production secrets: Use local-only LLMs or process outside MCP
注意: 错误消息会自动清理,以防止意外泄露数据。
有关安全问题,请参阅我们的安全政策。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。