用途
gnomon-mcp 是一个小型 MCP(Model Context Protocol)服务器,定位为“模型都需要但很无聊又必需”的工具集合:日期、日历、算术和单位换算。其目的是让助手停止对数学和日期数学进行“下一 token 猜测”。LLM 默认不擅长算术和日期计算,常常给出看似合理但小幅度错误的答案,这类错误在长回答中很难被察觉。gnomon-mcp 通过 MCP 暴露确定性的 Python 实现,使模型可以计算而不是猜测。
判断何时应使用 gnomon 的原则是:当“下一个最可能的 token”不是正确答案时。具体场景包括:需要认真对待的数学(任何超出简单心算、带小数点或需要累积的计算)调用 calc;判断“今天几号”“还有多久”“已经过去多久”——模型的训练截止日期不是今天,调用 now 获取快照,用 calendar 的 until / since / diff 计算经过时间,用 parse 解析自然语言日期(如“next thursday”);跨月/跨年的日期运算(加 30 天、找季度末、计算工作日)模型经常差一,调用 calendar 的 add / business_days;单位换算(如 kg 到 lb、°C 到 °F)调用 calc_convert,不要凭目测;表格逐行工作负载——当同一种计算需要作用于表格每一行时,两个批量工具(calendar、calc)都接受列表并按顺序返回列表,一次调用得到 N 个结果。经验法则:如果你会请同事“再核对一下那个数字”,那就改调用 gnomon。
主要能力
now(tz?)
独立工具,返回当前时刻的丰富字典快照。一次调用即可获得“此刻”的全部信息。根据文档,now(tz?) 返回 18 个字段,包括 ISO 周、季度、财年、一年中的第几天、is_weekend 等,而不仅仅是 {iso, tz}。
calendar(ops)
批量调度器。每个条目自行选择操作。为表格逐行工作负载而设计,例如一次调用为每一行计算经过时间。calendar(ops) 支持的操作有 add、business_days、until、since、diff、parse 等。diff / until / since 的单位支持 seconds、minutes、hours、days、weeks。内建自然语言日期解析(如“next thursday”“in 3 hours”),无需单独的 NLP 服务器。
calc 与 calc_convert
calc 用于表达式求值;calc_convert 用于单位换算,基于 Pint。两者都支持批量:calc(expressions) 接受表达式列表。
文档给出了一个示例:在一次调用中计算多件事情。
与其他 MCP 服务器的比较
时间和数学类已有多个 MCP 服务器,包括官方 Time 参考实现(仅时区)、mcp-time 和 mcp-datetime(日期格式化 / 时区)、calculator-server(数学 + 单位,无日期),以及 agent-utils-mcp 这类捆绑工具(regex / 哈希 / JWT)。gnomon 的定位更窄:批量优先,calendar(ops) 和 calc(expressions) 接受列表,一次工具调用覆盖整列表格列,而不是 N 次调用;提供真正的 now(),一次调用返回 18 个字段;将日期、数学和单位集成在同一处,无需组合三个独立服务器;内建自然语言日期,无需单独 NLP 服务器。若只需时区转换,官方 Time 服务器已足够;若想要广泛工具捆绑(regex、哈希、编码、JWT),agent-utils-mcp 更合适;gnomon 面向的是无聊的日期运算与算术核心,且以批量方式提供。
使用方式
推荐无需安装,通过 uv 按需运行:uvx gnomon-mcp。或全局安装:gnomon-mcp。所有接入配方都假定使用 uvx gnomon-mcp;若偏好固定安装,可将命令替换为 gnomon-mcp(不带 uvx)。
接入代理时,可编辑 ~/.claude.json 或项目 .mcp.json;claude_desktop_config.json;~/.cursor/mcp.json(或项目内 .cursor/mcp.json);~/.continue/config.yaml。任何其他客户端(通用 stdio):将 uvx gnomon-mcp 作为子进程启动,通过 stdin/stdout 使用 MCP 通信,这就是全部集成。
托管 / 远程(HTTP 传输):适用于团队共享实例或无法启动本地子进程的代理,然后将 MCP 客户端指向 http://<host>:8000/mcp (或 /sse 用于 SSE 传输)。
让代理真正使用它
MCP 工具描述刻意简洁,以将持久上下文开销降到最低(全部四个工具约 150 tokens)。更丰富的“何时使用 gnomon”指南放在按需加载的 Claude Code 技能中。
选项 A — Claude Code 插件(一条命令,推荐):插件一次性接入 MCP 服务器和技能。在 Claude Code 内使用命令后,会将 gnomon 注册为 MCP 服务器(通过 uvx 自动启动)并安装按需技能。技能正文仅在任务触发时加载,持久上下文保持在四个工具描述约 150 tokens 加上技能名称与摘要约 40 tokens。
选项 B — 手动安装技能(不使用插件):如果已通过 claude mcp add gnomon -- uvx gnomon-mcp 接入 MCP 服务器,只想安装技能,可手动安装。
选项 C — 粘贴到系统提示(非 Claude Code 代理):对于不支持技能的代理,可将简短版本粘贴到系统提示或 CLAUDE.md 中。
未来工具(草图)
同样逻辑——如果模型可能吹牛,就暴露确定性版本——指向更多值得构建的原语。以下均尚未实现,是候选清单,大致按性价比排序:文本测量 count(text, unit),用于字符 / 单词 / 行 / 句子 / LLM tokens,代理经常数错“这有多长”和“能否放进上下文窗口”;正则匹配 / 替换 regex_find(pattern, text) 和 regex_sub(pattern, repl, text),模型会幻觉哪些子串匹配正则,真实引擎可终结争论;结构化数据提取 jq(path, json) / jsonpath(path, json),按路径从嵌套数据中读取值,避免笔误;哈希与编码 hash(text, algo)(sha256、md5、blake2)、encode(text, scheme) / decode(text, scheme)(base64、hex、url、jwt-payload),这些都是模型会自信地编错的;Decimal 货币数学 money(expr),在 Python Decimal 下显式舍入求值,因为 calc 基于浮点,对货币并不安全;假日感知工作日,为 calendar.business_days 扩展国家(或日历)参数,以排除美国 / 英国 / 印度的假日,当前实现只识别周末;Cron 描述 / 下次触发 cron_describe("0 9 * * 1-5") 转人类英文、cron_next(expr, n) 返回未来 N 次触发时间,模型经常误读 cron 字段;目标模型的 token 计数 count_tokens(text, model),通过 tiktoken / Anthropic tokenizer,让代理自行预算提示和输出,而不必猜测。如需其中某项,可开 issue 或 PR——每项都是小型自包含模块,契合现有的 tools/ 布局。
适用场景
需要确定性数学、日期运算、跨月/跨年处理、工作日计算、单位换算和自然语言日期解析的场景;尤其是需要对表格逐行批量计算的任务。若只需要时区转换或广泛的工具捆绑(regex、哈希、编码、JWT),其他专用 MCP 服务器可能更合适。
限制
文中提到,未来工具部分的所有候选功能尚未实现;当前 business_days 只识别周末,不排除假日;calc 基于浮点,对货币不安全。其余未在资料中说明的限制暂未提供。