# git-today-commits-mcp **Repository Path**: git-open/git-today-commits-mcp ## Basic Information - **Project Name**: git-today-commits-mcp - **Description**: 一个用账号密码(HTTP Basic Auth)获取指定 Git 服务器指定仓库今日提交代码变更记录的 MCP Server,同时提供命令行(CLI)入口。以 Asia/Shanghai(UTC+8)时区为准,适用于自建 Git 服务(Bonobo / Gitea / Gogs / GitLab 等开启 HTTP 智能协议的场景)。 - **Primary Language**: NodeJS - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-02 - **Last Updated**: 2026-08-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # git-today-commits MCP&Agent挑战赛 一个用账号密码(HTTP Basic Auth)获取指定 Git 服务器指定仓库**今日提交代码变更记录**的 MCP Server,同时提供命令行(CLI)入口。以 Asia/Shanghai(UTC+8)时区为准,适用于自建 Git 服务(Bonobo / Gitea / Gogs / GitLab 等开启 HTTP 智能协议的场景)。 ## 项目简介 在日常研发协作中,团队经常需要回顾「今天都有谁提交了什么代码、改了哪些文件」。对于自建 Git 服务器(尤其是 Bonobo Git Server 这类轻量方案),平台本身往往不提供便捷的「今日变更总览」能力,逐个分支翻看 `git log` 既繁琐又容易遗漏。 本项目把这一流程封装为一个标准 MCP(Model Context Protocol)工具 `get_today_commits`,让大模型 / AI Agent 能够直接调用,自动完成: 1. 用**账号密码**(HTTP Basic Auth)克隆目标仓库到临时目录(bare clone,仅元数据,体积小) 2. 按 **Asia/Shanghai 时区**计算今日时间范围(`00:00:00 ~ 23:59:59 +08:00`),用 `git log --since/--until` 过滤提交(按绝对时间过滤,不受运行机器时区影响) 3. 输出每个提交的元信息(哈希、作者、时间、主题)与变更内容(文件统计 `--stat` + 完整 `diff --patch`) 4. 运行结束自动清理临时目录,凭据不落盘 **核心特点:** - 双入口:既可作为 MCP Server 被 AI 客户端调用,也可作为命令行工具直接使用 - 通用 Git HTTP:不依赖任何平台 REST API,只要仓库支持 `git clone` 即可 - 安全:禁用 credential helper、`GIT_TERMINAL_PROMPT=0` 防止认证失败时交互挂起,凭据仅存于进程内存 - 零框架依赖:CLI 模式仅用 Node.js 内置模块;MCP 模式依赖官方 `@modelcontextprotocol/sdk` ## 部署指南 ### 环境依赖 - **Node.js ≥ 18** - **git**(系统已安装,用于克隆与日志查询) ### 安装 ```bash git clone https://github.com/<你的用户名>/git-today-commits-mcp.git cd git-today-commits-mcp npm install ``` ### 作为 MCP Server 使用(推荐) 本 MCP Server 支持 **Stdio**、**Streamable HTTP**、**SSE** 三种传输方式,可通过命令行参数 `--transport` 或环境变量 `MCP_TRANSPORT` 选择。三种方式均暴露同一个 `get_today_commits` 工具。 启动命令: ```bash # stdio (默认, 适用于本地客户端) node mcp-server.js # SSE (适用于远程/网页客户端) node mcp-server.js --transport sse --port 8787 --host 127.0.0.1 # Streamable HTTP (新版 MCP 推荐) node mcp-server.js --transport http --port 8788 --host 127.0.0.1 ``` 也可用环境变量(命令行参数优先):`MCP_TRANSPORT`、`MCP_PORT`、`MCP_HOST`。 #### 方式一:Stdio(本地客户端,推荐) Stdio 是 MCP 的默认传输方式,客户端通过子进程的标准输入/输出与 Server 通信。适用于 Claude Desktop、Cursor、Cherry Studio 等本地客户端。 在 MCP 客户端配置文件中添加: ```json { "mcpServers": { "git-today-commits": { "command": "node", "args": ["/克隆到本地的绝对路径/mcp-server.js"] } } } ``` - 无需指定 `--transport`,默认即为 stdio - 客户端会自动管理子进程生命周期 - 凭据在每次工具调用时通过 `arguments` 传入,不落盘 #### 方式二:Streamable HTTP(远程/新版客户端,推荐) Streamable HTTP 是 MCP 2025 新版规范推荐的远程传输方式,单端点 `POST /mcp` 通信,支持会话管理。适用于需要远程访问、网页客户端或跨机器调用的场景。 **1. 启动 Server:** ```bash node mcp-server.js --transport http --port 8788 --host 0.0.0.0 ``` 启动后端点为 `http://:8788/mcp`,仅接受 `POST` JSON-RPC 请求。 **2. 客户端配置(支持 URL 的客户端,如 Cursor / Cherry Studio):** ```json { "mcpServers": { "git-today-commits": { "url": "http://127.0.0.1:8788/mcp" } } } ``` **3. 手动测试:** ```bash curl -X POST http://127.0.0.1:8788/mcp \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' ``` #### 方式三:SSE(远程/兼容旧版客户端) SSE(Server-Sent Events)是 MCP 早期规范的远程传输方式,通过 `GET /sse` 建立长连接、`POST /messages` 发送请求。适用于不支持 Streamable HTTP 的旧版客户端(如部分早期 Claude Desktop 版本)。 **1. 启动 Server:** ```bash node mcp-server.js --transport sse --port 8787 --host 0.0.0.0 ``` 启动后提供两个端点: - `GET /sse`:建立 SSE 连接,返回 `sessionId` - `POST /messages?sessionId=`:发送 JSON-RPC 请求 **2. 客户端配置(支持 SSE 的客户端):** ```json { "mcpServers": { "git-today-commits": { "url": "http://127.0.0.1:8787/sse" } } } ``` > 对仅支持 stdio 的客户端(如部分版本 Claude Desktop),可通过 `npx mcp-remote` 桥接 SSE/HTTP 到 stdio: > ```json > { > "mcpServers": { > "git-today-commits": { > "command": "npx", > "args": ["mcp-remote", "http://127.0.0.1:8787/sse"] > } > } > } > ``` #### 三种传输方式对比 | 方式 | 适用场景 | 客户端要求 | 部署位置 | |---|---|---|---| | **Stdio** | 本地使用,AI 客户端直接调用 | 支持子进程 stdio(Claude Desktop / Cursor 等) | 本机 | | **Streamable HTTP** | 远程访问、跨机器、网页客户端 | 支持 URL 配置(新版 MCP 客户端) | 本机或服务器 | | **SSE** | 远程访问、兼容旧版客户端 | 支持 SSE URL 或 mcp-remote 桥接 | 本机或服务器 | > **关于魔搭托管部署:** 本 MCP 为 Node.js 实现,魔搭 MCP 广场的「可托管部署」目前仅支持 Python(PyPI/uvx)与 Gradio 链路,因此本项目以「本地使用」方式接入:克隆仓库后在本地通过 `node mcp-server.js` 运行(默认 stdio,也可用 `--transport sse/http` 启动远程模式)。 ### 作为命令行工具使用 ```bash node index.js --server --repo --user --password [选项] ``` **必填参数**(也可用同名环境变量 `GIT_SERVER` / `GIT_REPO` / `GIT_USER` / `GIT_PASSWORD`): | 参数 | 说明 | 示例 | |---|---|---| | `--server` | Git 服务器地址,含协议与端口 | `http://www.example.com:8888` | | `--repo` | 仓库路径,可带或不带 `.git` 后缀 | `group/project` 或 `owner/repo.git` | | `--user` | 账号 | `alice` | | `--password` | 密码(可为空串) | `secret` | **可选参数:** | 参数 | 默认 | 说明 | |---|---|---| | `--no-merges[=false]` | 排除 | 是否排除合并提交,设 `=false` 则包含 | | `--stat[=true]` | false | 仅输出文件变更统计,不输出完整 diff | | `-h, --help` | — | 显示帮助 | ## 使用示例 ### 示例 1:CLI 获取今日提交(完整 diff) ```bash node index.js --server http://www.example.com:8888 --repo myproject.git --user alice --password secret ``` 输出效果: ``` ════════════════════════════════════════════════════════════ Git 今日提交变更记录 ════════════════════════════════════════════════════════════ 服务器 : http://www.example.com:8888 仓库 : myproject.git 账号 : alice 时区 : Asia/Shanghai (UTC+8) 合并提交: 已排除 输出模式: 完整 diff (--stat -p) ════════════════════════════════════════════════════════════ 日期 : 2026-08-02 时间范围: 2026-08-02T00:00:00+08:00 ~ 2026-08-02T23:59:59+08:00 今日提交数: 2 ──────────────────────────────────────────────────────────── 提交: 822756b 作者: 张三 日期: 2026-08-02 14:30:00 +0800 主题: feat(calc): 新增 sub 函数 --- calc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/calc.js b/calc.js index 8d1f95e..8166ac6 100644 --- a/calc.js +++ b/calc.js @@ -1 +1,2 @@ function add(a,b){return a+b} +function sub(a,b){return a-b} ──────────────────────────────────────────────────────────── ``` ### 示例 2:AI Agent 调用 MCP 工具 在支持 MCP 的客户端对话中,AI 会自动调用 `get_today_commits` 工具,传入服务器、仓库、账号、密码等参数,返回结构化的提交变更文本,效果与示例 1 一致。工具支持 `noMerges`、`statOnly` 等可选参数。 ### 示例 3:今日无提交 ``` 今日提交数: 0 本仓库今日 (Asia/Shanghai) 无提交记录。 ``` ### 示例 4:认证失败 ``` [错误] 克隆失败: 账号或密码错误 (HTTP 认证失败)。 fatal: Authentication failed for 'http://www.example.com:8888/myproject.git/' ``` ## 工具参数(MCP) `get_today_commits` 工具的输入 schema: | 参数 | 类型 | 必填 | 默认 | 说明 | |---|---|---|---|---| | `server` | string | 是 | — | Git 服务器地址 | | `repo` | string | 是 | — | 仓库路径 | | `user` | string | 是 | — | 账号 | | `password` | string | 是 | — | 密码(可为空串) | | `noMerges` | boolean | 否 | true | 是否排除合并提交 | | `statOnly` | boolean | 否 | false | 仅输出统计,不输出完整 diff | ## 注意事项 - 仓库需开启 HTTP 智能协议(GitLab / Gitea / Gogs / Bonobo 默认开启;纯 `git://` 协议不走账号密码,不适用) - 默认只查询仓库默认分支(HEAD,通常为 master/main);如需扫描所有分支,可自行扩展 - 凭据通过 URL 临时传入进程内存,不写入磁盘缓存;但 URL 可能短暂出现在进程列表中,生产环境建议用环境变量传入 - 密码属敏感信息,请勿在公开仓库中硬编码 ## License MIT