Skip to main content
Glama
qwertymuzaffar

mcp-udacity-commit

README.md
# mcp-udacity-commit

[![npm version](https://img.shields.io/npm/v/mcp-udacity-commit)](https://www.npmjs.com/package/mcp-udacity-commit)
[![npm downloads](https://img.shields.io/npm/dm/mcp-udacity-commit)](https://www.npmjs.com/package/mcp-udacity-commit)
[![License: MIT](https://img.shields.io/npm/l/mcp-udacity-commit)](./LICENSE)
[![MCP](https://img.shields.io/badge/MCP-server-blue)](https://modelcontextprotocol.io)

An [MCP](https://modelcontextprotocol.io) server that validates and formats git
commit messages according to the
[Udacity Git Commit Message Style Guide](https://udacity.github.io/git-styleguide/).

## Install

One line — paste it into your terminal:

```bash
claude mcp add udacity-commit -- npx -y mcp-udacity-commit
```

For Claude Desktop, add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "udacity-commit": {
      "command": "npx",
      "args": ["-y", "mcp-udacity-commit"]
    }
  }
}
```

<details>
<summary>Install from source</summary>

```bash
git clone https://github.com/qwertymuzaffar/mcp-udacity-commit
cd mcp-udacity-commit
npm install
npm run build
claude mcp add udacity-commit -- node "$(pwd)/build/index.js"
```

</details>

## What it exposes

| Primitive | Name | Purpose |
| --- | --- | --- |
| Resource | `udacity://commit-styleguide` | The style-guide rules, as markdown |
| Resource | `udacity://branch-naming` | The companion `type/kebab-case` branch-naming rules, as markdown |
| Tool | `validate_commit_message` | Checks a message against every rule (type, ≤50-char subject, capitalization, no trailing period, blank line, ≤72-char body wrap) |
| Tool | `format_commit_message` | Builds a compliant message from `type` + `subject` + optional `body`/`footer` |
| Tool | `validate_branch_name` | Checks a branch name against the companion `type/kebab-case` convention (e.g. `feat/add-dark-mode`); `release/*` is a typed branch with a version-style description (`release/1.2.0`), and base branches like `main` are exempt |

## Example

`format_commit_message` turns loose parts into a compliant commit:

```text
in:  type=fix  subject="prevent duplicate auth token refresh."
     body="The refresh timer could fire twice under load, minting two tokens…"
     footer="Resolves: #142"

out:
fix: Prevent duplicate auth token refresh

The refresh timer could fire twice under load, minting two tokens and
logging the user out. Serialize refreshes behind a single in-flight
promise so concurrent callers await the same request.

Resolves: #142
```

`validate_commit_message` flags every violation:

```text
"Fixed the login bug."  →  ❌ Not compliant.
  • Subject must follow "type: Subject".
  • Subject must not end with a period.
```

`validate_branch_name` enforces the companion `type/kebab-case` convention:

```text
"feat/add-dark-mode"     →  ✅ Compliant branch name.
"release/1.2.0"          →  ✅ Compliant branch name.
"Feature/Add_Dark_Mode"  →  ❌ Not compliant.
  • Unknown type "Feature". Use one of: feat, fix, docs, style, refactor, test, chore, release.
  • Description must be lowercase kebab-case. Got: "Add_Dark_Mode".
"main"                   →  ✅ (base branch — feature-branch rules don't apply)
```

## Develop

```bash
npm install
npm run build          # → build/index.js
npm run test:client    # spawns the server and exercises the tools
```

## License

MIT

TDQS

A4.1/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a distinct aspect of commit conventions: branch name validation, commit message validation, and commit message formatting. There is no overlap in their purposes, making selection unambiguous.

Naming Consistency5/5

All tool names follow the same verb_noun pattern: validate_branch_name, validate_commit_message, format_commit_message. This consistency makes the toolset predictable and easy to navigate.

Tool Count5/5

With only 3 tools, the server is tightly scoped to its purpose of enforcing Udacity commit guidelines. Each tool earns its place, and the count is neither too thin nor overly heavy.

Completeness5/5

The server covers the full lifecycle of commit standard compliance: validating branch names, validating commit messages, and formatting commit messages. There are no obvious gaps in the domain.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive