在日常 Agent 架构里,想让 GPT 型模型真正知道“此时此刻”,就离不开一条简单而朴素的链路:一个符合 Model Context Protocol(简称 MCP)的时间服务器。mcp-server-time 正是这条链路中的典型实现,它把“当前时间”“时区转换”等能力打包成标准 MCP 工具,对外暴露 REST 风格接口,让大模型随取随用。本文围绕“如何查看和理解 mcp-server-time 的源代码”这一问题,以开源仓库导航、克隆实操、源码解剖、可运行示例、真实案例和常见坑排查六个维度展开,帮助读者既能快捷地找到源码,又能读懂其内部设计,并在本地跑通自定义改造。


一、mcp-server-time 身份与分布

1.1 官方参考实现

MCP 社区在 GitHub 上维护了统一的 modelcontextprotocol/servers 聚合仓库,time 模块就是其中一个⸺路径为 servers/time-server。该聚合仓库只保留“参考实现”,便于开发者 fork 派生。

1.2 PyPI 与二进制分发

同名 Python 包已发布到 PyPI,包名 mcp-server-time,可直接 pip install。源代码随 Python 包自动分发,安装完成后位于 site-packages/mcp_server_time/

1.3 社区派生版本

围绕“时间工具”主题,不同语言社区给出了多样实现:

  • Swift 版本 okooo5km/time-mcp-server

  • NodeJS 版本 ZeparHyfar/mcp-time

  • Java 版本 alexandreroman/mcp-time
    这些仓库大多保留与官方一致的 MCP JSON 架构定义,差异集中在实现语言和依赖栈。


二、源代码获取途径

2.1 在线浏览

直接打开 GitHub 页面即可阅读 README、源码文件、Issue 与 Pull Request 记录。对于单文件细读,可借助 GitHub . 快捷键唤起 Web IDE,或在 URL 前添加 https://github.dev/ 加载 VS Code Web 版。

2.2 Git 克隆本地

git clone https://github.com/modelcontextprotocol/servers.git
cd servers/time-server
python -m pip install -r requirements.txt

上述命令用单引号包裹字符串,避免出现要求替换的英文双引号。

2.3 纯包镜像解压

若环境无法直接访问 GitHub,可通过 PyPI 镜像:

python -m pip download mcp-server-time
python -m pip install mcp-server-time-*.whl --no-deps --target ./mcp_src

Wheel 文件本质是 zip,解压即可阅读源码。

2.4 VS Code 插件一键跳转

自 2025 年 6 月 VS Code Copilot Chat 推出 MCP Servers 预览通道后,侧边栏允许将已安装的 MCP Server 与本地源代码自动关联,点击“View Source”可直达。


三、源码剖面扫描

3.1 顶层目录

典型 Python 实现包含以下关键文件:

文件 作用
__main__.py CLI 入口,解析命令行参数并启动 FastAPI 服务器
handler.py 定义 get_datetimeconvert_timezone 核心业务函数
schema.json MCP Server 的 Tools/Resources 描述,用于与客户端协商能力
pyproject.toml 构建、依赖、元数据

3.2 schema.json 精解

该文件遵循 MCP Tools 规范。例如:

{
  'tools': {
    'get_datetime': {
      'description': 'Return local ISO-8601 time string',
      'parameters': {
        'type': 'object',
        'properties': {
          'timezone': {'type': 'string', 'description': 'IANA timezone id'}
        },
        'required': []
      }
    }
  }
}

客户端(如 Claude Desktop 或 VS Code Agent Mode)通过读取此 JSON 自动生成函数签名,从而让模型触发调用(theverge.com)。

3.3 业务逻辑

get_datetime 直接使用 Python datetime.now(zoneinfo.ZoneInfo(tz)),再格式化为 ISO-8601;convert_timezone 解析输入字符串,再调用同一套转换逻辑。所有函数返回值都包裹在 {"ok": true, "result": ...} 结构,以便前端易于判断。


四、本地可运行最小示例

下面代码遵循单文件策略,通过 run_time_server.py 一键启动,依赖仅 fastapiuvicorn

#!/usr/bin/env python3
from pathlib import Path
from typing import Optional
from datetime import datetime
from zoneinfo import ZoneInfo

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI(title='Time-MCP-Lite')

class GetDateTimeIn(BaseModel):
    timezone: Optional[str] = None

class GetDateTimeOut(BaseModel):
    iso_datetime: str

@app.post('/get_datetime', response_model=GetDateTimeOut)
async def get_datetime(body: GetDateTimeIn):
    tz = body.timezone or 'UTC'
    now = datetime.now(ZoneInfo(tz))
    return {'iso_datetime': now.isoformat()}

if __name__ == '__main__':  # pragma: no cover
    import uvicorn
    uvicorn.run('run_time_server:app', host='0.0.0.0', port=3333, reload=True)

运行方式

python -m pip install fastapi uvicorn "python-zoneinfo;python_version<'3.9'"
python run_time_server.py

浏览器访问 http://localhost:3333/docs,即可通过自动生成的 Swagger UI 调用接口,体验与官方 mcp-server-time 相同的 JSON 契约。


五、真实案例:在 VS Code Agent Mode 中调用

  1. 在 VS Code 打开 Command Palette,输入 MCP: Add Server,选择 http://localhost:3333/schema.json

  2. 打开 Copilot Chat,提问:

    What time is it in Europe/London now?
    侧边栏显示模型触发 get_datetime 工具调用,并返回结果。整个链路无需手写任何函数调用代码。

如果想在 Claude Desktop 中体验,则在“Tools → Add MCP Server”中填写同样的 URL;聊天时输入“伦敦时间是多少”,Claude 会自动走工具调用流程。


六、常见疑难与排查

现象 可能原因 解决策略
非英文系统报 KeyError: 'CST' 系统时区字符串格式化差异 使用 --local-timezone 参数明确指定
ImportError: No module named mcp_server_time Python 缺少包 python -m pip install mcp-server-time
HTTP 404 Not Found 客户端访问接口名拼写错误 参照 schema.jsonoperationId 一致性

七、扩展:自定义“国际节假日”资源

基于官方代码,我们可以新增 resources/holidays/{country},返回 JSON 假期列表。核心思路是:

  • schema.jsonresources 块添加 holidays 元数据

  • 编写 holidays.py 按需抓取或计算节假日

  • app.include_router 中挂载 /holidays/{country} 路由
    MCP Client 即可在上下文中引用节假日,辅助模型进行日期相关推理。


八、安全注意与最佳实践

MCP Server 本质是任意 HTTP 服务,风险点主要集中在:

  • Prompt Injection:外部输入通过模型指令路径写入日志或上下文,需对入参做长度与正则校验

  • 时区数据库更新:IANA TZDB 每年多次发布,及时 pip install tzdata --upgrade

  • CORS 控制:除非有跨域需求,生产环境建议 allow_origins=[]


九、结语

通过 GitHub 聚合仓库、PyPI 二进制分发、社区派生版本以及 VS Code 内建 MCP 浏览器,我们可以多路并举查看并深度理解 mcp-server-time 源码。在掌握目录结构、工具描述、主要业务逻辑之后,只需短短几十行 Python 代码就能自行实现一个合规、可扩展的时间服务,并快速接入任意支持 MCP 协议的大模型或 IDE 代理模式。希望本文提供的动手流程与排障笔记能助你在 AI 工具生态中更高效地管理“时间”这一关键上下文,让 Agent 真正做到“知天时”。


参考文献(按引用顺序):
(github.com, mcp-get.com, reddit.com, dev.to, piwheels.org, github.com, github.com, github.com, modelcontextprotocol.io, docs.anthropic.com, theverge.com, code.visualstudio.com, github.com, descope.com, mcp.so, smithery.ai)

Logo

一站式 AI 云服务平台

更多推荐