)
如何用 Git MCP Server 的 git_log 日期过滤查询提交记录ISO 8601 与相对日期【免费下载链接】serversModel Context Protocol Servers项目地址: https://gitcode.com/GitHub_Trending/se/servers如果你需要在 Claude Desktop、VS Code 或 Zed 等 MCP 客户端里只查看某个 Git 仓库在特定时间段内的提交记录例如昨天以来的改动或2024 年 1 月 15 日之后的提交可以用servers仓库中src/git目录下的 mcp-server-git。它的git_log工具支持通过start_timestamp和end_timestamp两个参数做日期过滤接受 ISO 8601 时间戳、相对日期如2 weeks ago、yesterday和绝对日期如2024-01-15、Jan 15 2024返回带 hash、作者、日期和 message 的提交条目。本文覆盖安装并接入服务器、配置客户端、用三种日期格式调用git_log、判断返回结果以及日期参数的已知限制。前提是你已有一个本地的 Git 仓库且系统满足 pyproject.toml 中声明的requires-python 3.10。准备条件安装 mcp-server-gitREADME 给出两种安装方式推荐 uvuv推荐无需单独安装直接用uvx运行mcp-server-git。pippip install mcp-server-git安装后可以用python -m mcp_server_git直接以脚本方式运行。如果你打算用 Docker 方式则按 README 的 Build 一节构建镜像cd src/git docker build -t mcp/git .把服务器接入你的 MCP 客户端以 Claude Desktop 为例编辑claude_desktop_config.json。用 uvx 时配置如下path/to/git/repo替换成你本地仓库的实际路径mcpServers: { git: { command: uvx, args: [mcp-server-git, --repository, path/to/git/repo] } }用 pip 安装时对应改为mcpServers: { git: { command: python, args: [-m, mcp_server_git, --repository, path/to/git/repo] } }--repository参数把服务器限定在指定仓库上。如果不传该参数服务器会尝试从客户端的 roots 能力里发现可用仓库见 server.py 的list_repos且此时对repo_path不做白名单限制配置了--repository后传入的repo_path必须是该仓库本身或其子目录否则会报Repository path ... is outside the allowed repository错误。VS Code 的写法类似把配置加到用户级mcp.json或工作区的.vscode/mcp.json{ servers: { git: { command: uvx, args: [mcp-server-git] } } }Zed 则在settings.json的context_servers中加入mcp-server-git条目具体见 README 的 Usage with Zed 一节。不接客户端、直接调试的话可以用 MCP inspectornpx modelcontextprotocol/inspector uvx mcp-server-git调用 git_log 并传递日期参数git_log的输入定义server.py 的GitLog模型如下参数类型说明repo_pathstring必填Git 仓库路径max_countnumber可选默认 10最多返回的提交条数start_timestampstring可选过滤起始时间end_timestampstring可选过滤结束时间start_timestamp/end_timestamp都接受三类写法以start_timestamp为例{ repo_path: /your/git/repo, start_timestamp: 2024-01-15T14:30:25, end_timestamp: 2024-02-01T00:00:00, max_count: 20 }上面的 ISO 8601 写法可以换成相对日期或绝对日期ISO 86012024-01-15T14:30:25相对日期2 weeks ago、yesterday绝对日期2024-01-15、Jan 15 2024两个参数都可以只传一个例如只传start_timestamp: yesterday就是查昨天以来的提交。repo_path在示例中用/your/git/repo占位替换为你本机仓库的实际路径即可。底层是怎么过滤的日期过滤路径的实际实现在 server.py只要start_timestamp或end_timestamp任一存在工具就把它们分别转成git log的--since和--until参数执行输出按--format%H%n%an%n%ad%n%s%n解析成 4 行一组hash、作者、日期、message。两个时间参数都不传时走的是另一条不做日期过滤的路径直接用repo.iter_commits(max_countmax_count)取最近提交。也就是说max_count在两条路径下都是最多显示几条的上限。如何判断调用成功git_log的返回是一个提交条目数组工具标注为只读readOnlyHintTrue见 server.py。最终推送给客户端的文本以Commit history:开头每条提交的格式为Commit history: Commit: commit hash Author: 作者名 Date: 日期 Message: 提交说明判断标准很简单返回内容中每条记录都应同时包含Commit:、Author:、Date:、Message:四段这一点在 test_server.py 的test_git_log与test_git_log_default中被显式断言。如果你在 inspector 或客户端里看到Commit history:前缀加完整四段条目说明调用成功条目中的Date:值应落在你给定的时间窗口内。另外在 macOS 上运行 Claude Desktop 时tail -n 20 -f ~/Library/Logs/Claude/mcp*.log可以查看服务器日志用于排查调用异常这来自 README 的 Debugging 一节。日期参数的限制与常见失败结合实现和测试有两个已知的边界需要知道时间戳不能以-开头。实现里对两个参数都做了注入防护以-开头的值会直接抛ValueError错误信息形如Invalid start_timestamp: 值 - cannot start with -。这由 test_server.py 的test_git_log_rejects_timestamp_flag_injection覆盖。如果你的日期字符串例如某些系统的--date风格写法以短横线开头需要改成 ISO 8601 或文档列出的其他格式。过滤路径受max_count截断。日期窗口内的提交多于max_count时只返回前max_count条实现中len(log) max_count即停止累积需要更多结果时把max_count调大。README 同时注明 mcp-server-git 目前处于早期开发阶段功能和可用工具可能随版本变化升级后建议重新核对参数说明。下一步拿到某条提交的 hash 后可以继续用同一服务器的git_show工具查看该提交的完整内容和 diff输入repo_path和revisiongit_branch则可以按是否包含某个 commit sha 来筛选分支参数说明都在 README 的 Tools 列表里。【免费下载链接】serversModel Context Protocol Servers项目地址: https://gitcode.com/GitHub_Trending/se/servers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考