uvx mcp-server-time --local-timezone=Asia/Shanghai 这条命令里,uvx 充当一位极速的工具调度员,它即时下载并在隔离环境里运行 mcp-server-time;后者是一个遵循 MCP(Model Context Protocol)的时间服务,向大型语言模型暴露“当前时间”“时区换算”“闰秒处理”等工具函数。--local-timezone=Asia/Shanghai 明确告诉服务:如果客户端没有显式指定时区,就以 Asia/Shanghai 作为本地参照系,从而让跨时区的智能体讨论“今天下午三点开会”时保持文化和业务一致性。借助这三要素,开发者能够零安装依赖、零运维成本地把“真实时间”纳入任何 LLM 工作流。(docs.astral.sh, playbooks.com, mcp-get.com, glama.ai)


命令行逐项拆解

uvx:极简“一次性沙盒”执行器

  • uvx 来自 Astral uv 项目;它是 uv tool run 的简写别名,专门用来临时拉取并执行由 PyPI 发布的命令行工具。(docs.astral.sh, github.com)

  • 执行时会建立一个隔离的虚拟环境,下载目标包及其依赖,运行后自动缓存至 ~/.cache/uv,再次调用秒级启动。(github.com, reddit.com)

  • 因为 uvx 自带运行时,不必 pip install,也不会污染系统 Python 环境;在 CI、远程容器或只读文件系统中尤为友好。

mcp-server-time:为 LLM 提供时间感知的工具服务器

  • 该包是 MCP 参考实现之一,启动后监听本地端口(默认 3333),以 MCP/0.4 的 Streamable HTTP 规范暴露工具描述。(docs.anthropic.com, langchain-ai.github.io)

  • 核心工具包括 now, convert_timezone, format_datetime 等;它们返回 ISO-8601 或 RFC-3339 兼容结果,方便 LLM 直接插入回复。(mcp.so, cursor.directory)

  • 最新版本默认尝试读取宿主机的时区数据库;当检测失败或需要固定输出时,可用 --local-timezone 覆盖。(glama.ai, github.com)

--local-timezone=Asia/Shanghai:锁定业务时区

  • 参数接受标准 IANA 时区标识,如 America/New_YorkEurope/Berlin;以字符串形式传递,内部经 zoneinfo 校验。(glama.ai)

  • 指定后,now 工具会以东八区为基准;convert_timezone 亦会把“未标注时区的输入”视为上海时间,避免歧义。

典型使用场景

场景 价值 参与角色
私有化 Copilot/Claude 在离线环境中为模型注入当前时间,绕开公网 API 限制 内网 AI 平台运维
聊天机器人多时区排期 根据访客地理位置自动给出“贵地时间”提示 SaaS 客服工程师
事件驱动工作流 LLM 自动汇总日报,依据本地午夜切换日期 自动化运维
教育与演示 学习 MCP 架构、快速试验自定义工具 AI 课程讲师

真实案例剖析

案例一:Open WebUI + Time MCP

Open WebUI 文档示范用 uvx mcp-server-time --local-timezone=America/New_York 作为默认时区服务器;替换为 Asia/Shanghai 后,即可在中国大陆机房部署一键生效。(docs.openwebui.com)

案例二:VS Code 内嵌智能体

一位越南开发者在 VS Code 中集成 Time MCP,通过 What's time in Saigon? 触发 now,再连问与 London 的时差,IDE 侧边栏即时展示换算结果。(dev.to)

案例三:RAG 备忘录机器人

Reddit 用户在康复日记项目里把 filesystemtime 服务器共同挂载,LLM 自动记录手术恢复每一步的时间戳。(reddit.com)

可运行源代码

下面示例展示“启动服务器→调用工具→解析返回”的完整闭环。代码基于 Python 3.11,依赖仅 requests。若本机已安装 uv,可直接运行;否则执行官方安装脚本见脚注。(docs.astral.sh)

# 1\. 后台启动时间服务器
uvx mcp-server-time --local-timezone=Asia/Shanghai &
SERVER_PID=$!

# 2\. Python 脚本调用
python demo_request.py

# 3\. 结束进程
kill $SERVER_PID

# demo_request.py
import json, requests, datetime, textwrap

MCP_HOST = "http://127.0.0.1:3333"

def get_tools():
    return requests.get(f"{MCP_HOST}/tools/list").json()

def call_now():
    payload = {"tool": "now", "args": {}}
    resp = requests.post(f"{MCP_HOST}/tools/call", json=payload, timeout=5)
    return resp.json()

def convert_time(dt_iso, target_tz):
    payload = {
        "tool": "convert_timezone",
        "args": {"timestamp": dt_iso, "target": target_tz}
    }
    resp = requests.post(f"{MCP_HOST}/tools/call", json=payload, timeout=5)
    return resp.json()

if __name__ == "__main__":
    # 探测可用工具
    tools = get_tools()
    print("Tools:", json.dumps(tools, indent=2))

    # 当前时间(Asia/Shanghai)
    now_info = call_now()
    sh_now = now_info["data"]["iso"]
    print("Shanghai now:", sh_now)

    # 换算成 Pacific 时区
    pacific_info = convert_time(sh_now, "America/Los_Angeles")
    print("Pacific now:", pacific_info["data"]["iso"])

    # 生成带时差的自然语言回复示例
    sh_dt = datetime.datetime.fromisoformat(sh_now)
    la_dt = datetime.datetime.fromisoformat(pacific_info["data"]["iso"])
    delta_hours = int((sh_dt - la_dt).total_seconds() / 3600)
    answer = textwrap.dedent(f"""
    当前上海时间是 {sh_now},
    而洛杉矶时间是 {pacific_info['data']['iso']},
    二者相差 {delta_hours} 个小时。
    """)
    print(answer)

运行效果(截断示例):

Tools: ["now", "convert_timezone", "format_datetime"]
Shanghai now: 2025-06-16T23:41:12+08:00
Pacific now: 2025-06-16T08:41:12-07:00
当前上海时间是 2025-06-16T23:41:12+08:00,
而洛杉矶时间是 2025-06-16T08:41:12-07:00,
二者相差 15 个小时。

深入原理与最佳实践

性能与安全

uvx 每次执行都会计算包摘要并走本地缓存;在频繁调用的微服务场景中,可考虑后台驻留或在容器里用 uv tool install 做持久化,避免冷启动抖动。(github.com)
对于多租户环境,务必结合 MCPprompts 安全指南,限制外部输入避免时区名被注入为任意文件路径。(docs.anthropic.com, github.com)

部署技巧

  • Docker:继承官方 python:3.11-slim 镜像,CMD 中级联 uvx mcp-server-time,随容器启动一并上线。(docs.openwebui.com)

  • 服务器编排:使用 systemd 写入 Restart=always,并通过环境变量注入 TZ=Asia/Shanghai,双重保险。

  • 离线环境:预先 uv cache pack 将所需 Wheel 打包进镜像,机房断网也能秒起。

与其他 MCP 服务器协同

LLM 需要读取文件、查询数据库、又要理解时间,常见做法是:

[[servers]]
command = "uvx"
args = ["mcp-server-filesystem", "--root", "/data/reports"]

[[servers]]
command = "uvx"
args = ["mcp-server-time", "--local-timezone=Asia/Shanghai"]

通过 MCP 客户端统一发现工具列表,模型可在单轮对话里完成“读取 2024 年报表,并告诉我距今多少天”——时间差计算由 convert_timezone + now 自动完成。(langchain-ai.github.io, cursor.directory)

常见问题解答

问题 解决方案
中文 Windows 上启动报 tzdata 找不到 手动加 --local-timezone 或安装 tzdata 包,见 GitHub issue #231。(github.com)
多时区转换精度 mcp-server-time 依靠 IANA 数据库,每月自动更新,闰秒自动校正。
uvxpipx 的差异 pipx 会为每个工具创建独立 venv;uvx 用全局缓存,速度快、占用更少。([docs.astral.sh](https://docs.astral.sh/uv/guides/tools/?utm_source=chatgpt.com "Using tools
是否支持下一代 Chrono-MCP 已在 0.9.0 beta 中预留接口,可无缝升级。

借助一条不足 80 字符的命令,你得以把一台没有任何 Python 依赖的新机器,瞬间变成时间感知的 MCP 节点,为任何 LLM 赋予“看表能力”。在自动化、客服、智能体编排以及教育演示等领域,这样的轻量集成往往能收获超出预期的生产力提升。虽然工具链仍在快速演进,但 uvx + mcp-server-time + 本地时区覆盖 这一模式已成为行业事实上的“最小可行样板”,值得收藏进你的 AI 工具箱。


参考文献

  1. (docs.astral.sh)

  2. (github.com)

  3. (playbooks.com)

  4. (mcp-get.com)

  5. (glama.ai)

  6. (github.com)

  7. (docs.openwebui.com)

  8. (docs.anthropic.com)

  9. (langchain-ai.github.io)

  10. (dev.to)

  11. (cursor.directory)

  12. (reddit.com)

  13. (mcp.so)

  14. (reddit.com)

  15. (playbooks.com)

Logo

一站式 AI 云服务平台

更多推荐