diffsorted
by bhakti0725
README.md
# diffsorted
Splits messy, multi-concern git diffs into focused groups and generates a clear, accurate commit message for each — exposed as an MCP (Model Context Protocol) server so any MCP-compatible clients (Claude Desktop, Claude Code, etc.) can use it directly against a local repo.
## Why
Built as a follow-up to [CommitMsg](https://github.com/bhakti0725/commitmsg), an AI commit-message generator I shipped earlier. CommitMsg works well on small, single-concern diffs, but struggles when a diff spans multiple unrelated changes (e.g. a bug fix + unrelated formatting pass, or multiple files) — it either writes one vague message or focuses on the wrong part of the diff.
`diffsorted` solves this by splitting the diff _before_ generating messages, so each commit message is scoped to one actual concern — closer to how atomic commits should look.
## How it works
1. **Parse** — reads the raw `git diff` output and breaks it into per-file segments.
2. **Split** — groups related files into concerns using one of two strategies:
- `splitByFile` (v1) — one chunk per changed file.
- `splitByConcern` (v2) — groups files by directory/naming (e.g. `auth.js` + `auth.test.js`), and separates out formatting-only changes into their own chunk.
3. **Generate** — calls Groq's LLaMA API once per chunk to produce a focused conventional commit message.
## Tools exposed
| Tool | Description |
| ----------------------------- | -------------------------------------------------------- |
| `get_diff` | Returns the raw git diff for a repo (staged or unstaged) |
| `generate_commit_messages` | v1: one commit message per changed file |
| `generate_commit_messages_v2` | v2: one commit message per logical concern group |
## Setup
\`\`\`bash
git clone https://github.com/bhakti0725/diffsorted.git
cd diffsorted
npm install
\`\`\`
Create a `.env` file:
\`\`\`
GROQ_API_KEY=your_key_here
\`\`\`
Get a free key at [console.groq.com/keys](https://console.groq.com/keys).
## Connecting to Claude Desktop
Add to your `claude_desktop_config.json`:
\`\`\`json
{
"mcpServers": {
"diffsorted": {
"command": "npx",
"args": ["tsx", "/absolute/path/to/diffsorted/src/index.ts"]
}
}
}
\`\`\`
https://www.npmjs.com/package/diffsorted
visit the above link, and download the mcp server as a npm package using npm i diffsorted.
No cloning or manual setup needed — `npx` fetches and runs it automatically. You'll still need a Groq API key in a `.env` file in your working directory (see Setup above).
## Tech stack
TypeScript, Model Context Protocol SDK, Groq (LLaMA 3.3 70B), Node.js `child_process` for git integration.
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues