@sergiorodas/mcp-dev-workflow
v0.1.0
Published
MCP server with deterministic tools that standardize the dev workflow from issue to pull request (branch names, conventional commits, PR checklists).
Maintainers
Readme
mcp-dev-workflow
An MCP server that gives AI assistants (Claude, Cursor, …) a set of deterministic, convention-enforcing tools to standardize the development workflow from issue to pull request.
These are the kind of tools an assistant calls to do something precise — generate a branch name, validate a commit, draft a PR body — rather than free-form generation. Same input, same output, every time.
Public, runnable distillation of an AI-agent workflow I built to automate the Jira issue → PR lifecycle.
Tools
| Tool | What it does |
| --- | --- |
| branch_name | Turn { type, id, title } into a convention-following git branch name. |
| commit_message | Validate & normalize a Conventional Commit; returns { valid, normalized, errors, warnings, parsed }. |
| pr_checklist | Turn a list of commits (and optional changed files) into a Markdown PR body: summary, changes grouped by type, and a checklist. |
Every tool exposes a JSON Schema for both its input and its output (structured content), so capable clients get typed results, not just text.
Install
The server runs over stdio and needs no install — point your MCP client at it
via npx.
Claude Desktop
Edit claude_desktop_config.json
(macOS: ~/Library/Application Support/Claude/,
Windows: %APPDATA%\Claude\):
{
"mcpServers": {
"dev-workflow": {
"command": "npx",
"args": ["-y", "@sergiorodas/mcp-dev-workflow"]
}
}
}Cursor
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"dev-workflow": {
"command": "npx",
"args": ["-y", "@sergiorodas/mcp-dev-workflow"]
}
}
}Restart the client and the three tools appear. Requires Node 18+.
Tool reference
branch_name
Generate a git branch name from a change type, ticket id and title.
| Param | Type | Default | Notes |
| --- | --- | --- | --- |
| type | enum | — | feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert |
| id | string | — | Ticket id, e.g. ABC-123. Case preserved. |
| title | string | — | Short title, slugified (lowercased, accents stripped). |
| separator | string | - | Joins id and slug, and words within the slug. |
| maxLength | number | — | Optional cap; the slug is truncated to fit. |
// in: { "type": "feat", "id": "ABC-123", "title": "Add login" }
// out: "feat/ABC-123-add-login"commit_message
Validate and normalize a Conventional Commit (type(scope): subject).
| Param | Type | Default | Notes |
| --- | --- | --- | --- |
| message | string | — | Commit message; the first line is the header. |
| allowedTypes | string[] | the 11 types above | Override the accepted types. |
| maxSubjectLength | number | 72 | Max subject length. |
| requireScope | boolean | false | Make (scope) mandatory. |
Checks the header format, the type, subject length, a trailing period, and hints
at non-imperative mood. Returns { valid, normalized, errors, warnings, parsed }.
// in: { "message": "feat(auth): added login." }
// out: {
// "valid": true,
// "normalized": "feat(auth): added login",
// "warnings": [
// "Subject should not end with a period.",
// "Use the imperative mood in the subject (e.g. 'add' instead of 'added'/'adds')."
// ],
// "parsed": { "type": "feat", "scope": "auth", "breaking": false, "subject": "added login" }
// }pr_checklist
Build a Markdown PR body from a list of commits.
| Param | Type | Default | Notes |
| --- | --- | --- | --- |
| commits | string[] | — | Commit messages (or just their headers). |
| changedFiles | string[] | [] | Optional file list to include. |
| title | string | — | Optional # Heading. |
Groups commits by conventional type, detects breaking changes (! or a
BREAKING CHANGE: footer), and emits a tests/docs/breaking-changes checklist.
## Summary
<!-- Describe what this PR does and why. -->
2 commits across 2 areas.
## Changes
### Features
- add login **(auth)**
### Fixes
- handle null user
## Checklist
- [ ] Tests added or updated
- [ ] Documentation updated
- [x] No breaking changes
- [ ] Self-reviewed the diffDevelopment
This project dogfoods the conventions it preaches.
npm install
npm run dev # run the server from source (tsx)
npm run typecheck # tsc --noEmit
npm test # vitest
npm run build # tsup -> dist/Architecture: pure logic lives in src/lib/ as plain,
unit-tested functions with no MCP coupling; src/tools/ wraps
each one in an MCP tool definition with a zod schema;
src/index.ts registers them on the stdio server.
License
MIT © Sergio Rodas
