Skip to main content
Glama
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.