
whygit
io.github.Srikarmk由 GitHub 账号 Srikarmk 发布v0.1.2更新于 Oct 26, 2026
Read-only Git explainer: what state a repo is in, what an error means, and the exact fix.
概览
只读的 Git 解释器 MCP 服务器,让助手了解仓库当前状态、Git 报错含义以及确切的修复方法。
- 可以做什么
- 诊断仓库:按紧急程度列出发现的所有问题,并给出通俗解释和建议的修复命令
- 解释 Git 错误信息,可选地结合仓库状态提供上下文
- 汇总仓库状态:分支、上游、领先/落后、远程、已暂存与已修改文件、进行中的操作
- 可识别合并冲突、中断的 rebase、分离的 HEAD、被拒绝的推送、大文件、疑似密钥文件及多种常见错误
- 适用场景
- 适合助手在 Git 仓库中工作、需要给出可靠诊断而不是凭 git status 猜测的场景,尤其适合初学者卡在合并冲突、中断的 rebase、分离的 HEAD 或被拒绝的推送时。
- 运行要求
- 通过 uvx(PyPI 包 whygit)以 stdio 在本地运行。需要 Python 3.10 或更高版本以及 Git。未声明需要账号、API 密钥或环境变量。建议传入绝对路径,因为相对路径会相对于服务器的工作目录解析。
安装
在 SourceWeft 中
- 打开 控制台中的 whygit,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
whygit
[CI] [PyPI] [Python] [MCP registry] [License] [Case study]
What just happened to my Git repository, and how do I fix it?
whygit looks at a Git repository and tells you, in plain English, what state it is in and which commands will get you out of it: a merge conflict, a rebase stopped halfway, a detached HEAD, a rejected push, a login GitHub won't accept, a 120 MB CSV that GitHub will refuse. Paste it an error message and it explains that too.
It is written for people meeting Git for the first time. Git's own messages are accurate but hard to read; whygit turns them into a short explanation and the exact fix.
It only ever reads your repository. It never runs the fixes it suggests, so you stay in control and learn the commands as you go.
There are two ways to use it, built on the same engine:
- On the command line, with no AI tools involved:
whygit. - As an MCP server, so an assistant such as Claude Code, Claude Desktop or Cursor gets a
reliable diagnosis instead of guessing from
git status.
Install
whygit needs Python 3.10 or newer and Git. Pick one:
This works the same on macOS, Windows and Linux.
Use it from the terminal
Run it inside your project folder:
Options: --path <folder> (or -C) to look at another folder, --json for machine-readable
output, --no-color to turn off colour. Colour is only used in a real terminal and never
when NO_COLOR is set.
Exit codes: 0 nothing blocking, 1 something blocking was found, 2 bad usage (for example
the folder does not exist), 3 explain did not recognise the message.
Example
Commands that can lose work (git restore, git rebase --skip, git push --force-with-lease
and so on) are always marked with a warning, and a safer option is listed first when one
exists.
Use it with an AI assistant (MCP)
whygit mcp runs a Model Context Protocol server over stdio with three read-only tools:
Results are small JSON objects. Pass an absolute path: relative paths resolve against the
server's working directory, which for desktop apps is usually not your project. ~ works.
Claude Code
--scope user makes it available in every project; leave it out to add it to the current
project only. Check it with claude mcp list.
Claude Desktop
Open Settings > Developer > Edit Config, and add whygit to
claude_desktop_config.json (on macOS ~/Library/Application Support/Claude/, on Windows
%APPDATA%\Claude\):
Restart Claude Desktop. If it can't find uvx, use the full path that which uvx (macOS)
or where uvx (Windows) prints as the command.
Cursor
Add the same block to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json in a project:
If you installed whygit with uv tool install or pipx, you can use "command": "whygit"
with "args": ["mcp"] instead.
What it recognises
Repository states: merge conflicts (and a merge that is resolved but not committed, including
leftover <<<<<<< markers), a rebase stopped on a conflict or an edit, cherry-pick, revert,
git am and bisect in progress, detached HEAD (and commits that no branch points to),
diverged / behind / ahead of the upstream, no upstream yet (the first git push -u), no
remote, upstream branch deleted, no commits yet, not a repository (including being one folder
too high, and your home folder), a home folder that was accidentally turned into a
repository, nested repositories (common with downloaded starter code), files over GitHub's
100 MB limit (and over 50 MB) staged or in unpushed commits, files that usually hold secrets
(.env, id_rsa, *.pem, kaggle.json, credentials JSON), notebooks with large saved
outputs, Jupyter notebook conflicts, missing user.name / user.email, a leftover
index.lock, and folders Git refuses because of "dubious ownership".
Error messages: rejected pushes, "You have divergent branches", "refusing to merge unrelated
histories", GitHub login failures (passwords no longer work; it explains tokens, SSH and
gh auth login, and never asks for your token), Permission denied (publickey), repository
not found, 403, "Your local changes would be overwritten", untracked files in the way,
"not a git repository", "src refspec main does not match any", "pathspec did not match",
"remote origin already exists", missing upstream, "couldn't find remote ref", GitHub's
large-file rejection (GH001), "detected dubious ownership", "Please tell me who you are",
index.lock exists, line-ending warnings, network errors, and more. If it doesn't recognise
a message, it says so and shows what it can see in the repository instead.
The read-only promise
whygit never changes your repository, and this is enforced in code rather than left to good intentions:
- Every Git command goes through a single function that only accepts read-only subcommands
(
status,rev-parse,for-each-ref,rev-list,diff,log,ls-files,cat-file,config --get,remote -v, ...) and refuses anything else, including the writing forms ofconfig,remoteandsymbolic-ref. - It sets
GIT_OPTIONAL_LOCKS=0, so evengit statusdoesn't refresh the index, and turns off external diff programs and the fsmonitor hook. - It never runs
git fetch. Ahead/behind counts are "as of your last fetch", and whygit tells you to rungit fetchyourself when that matters. - The test suite builds each state in a real repository, snapshots every file under
.git(names, timestamps and contents) before and after diagnosing, and checks nothing changed. It also checks that no other module in the package can start a process or write a file.
Credentials are never printed: a remote address like https://name:[email protected]/...
is shown as https://***@github.com/..., in every output.
Privacy
whygit collects nothing and makes no network calls. It reads your repository on your own computer and prints the result. That's all.
Licence
MIT. Copyright (c) 2026 Kameswara Sai Srikar Manda.
来源:README.md,提交 9a49c10
工具
0版本历史
1- v0.1.2最新Oct 20, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分