PM Release Notes MCP
Fetches shipped GitHub issues and merged pull requests from a repository, categorizes them into customer or internal release notes, and surfaces uncertain items for review. Supports filtering by close date and excludes unmerged PRs and issues closed as not planned or duplicate.
Fetches shipped Jira work items by project and fix version or custom JQL, categorizes them using labels, conventional-commit prefixes, and issue types, and produces release-note drafts with a review list of unclassified items.
Fetches completed Linear issues for a team, categorizes them into release notes, and returns drafts plus review items. Supports date-range filtering and can include ticket links for internal audiences.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PM Release Notes MCPDraft customer release notes for PAY fix version 2.4.0"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pm-release-notes-mcp
An MCP server that turns the work your team closed in GitHub, Jira, Linear or Azure DevOps into release notes customers can read, with a review list so nothing ships without a human looking at it.
Ask your AI assistant "Draft customer release notes for PAY fix version 2.4.0" and you get back:
## Billing v2.4.0
_Released 2026-11-01_
### Breaking changes
- Remove v1 webhook payloads
### New features
- Proration preview on plan change
### Bug fixes
- Invoice PDF shows wrong tax total…plus a note of what was left out as internal work (chore: upgrade Stripe SDK) and what the rules couldn't place, so you can decide before publishing.
Why I built this
Writing release notes is one of the most repetitive parts of a PM's week: export the tickets, delete the internal ones, guess which are features versus fixes, rewrite engineering titles into customer language, and hope nothing breaking slipped through. It's work that has to be done, but not work that needs judgement on every line.
LLMs are good at the rewriting part and risky at the rest. Asked to "write release notes from these tickets", a model will happily merge items, drop one, or describe a feature that didn't ship. So this server splits the job:
Step | Who does it | Why |
Fetch what shipped | Server (deterministic) | Same query, same tickets, every time |
Categorise and filter | Server (rule-based, explainable) | Every placement records the rule that made it, so it can be audited |
Flag uncertain items | Server | Unclassified items are surfaced, not guessed |
Rewrite for customers | The model, via the | Wording is where LLMs add value; the prompt forbids adding or dropping items |
Publish | A person | The server is read-only by design |
Related MCP server: draft-mcp-server
Product decisions
Read-only. Both tools are annotated
readOnlyHint. The server never writes to a tracker or posts anywhere. Release notes are a public commitment, so publishing stays a human action.Rules before AI for classification. Labels beat conventional-commit prefixes, which beat issue type. That order follows intent: a label is something your team chose deliberately; an issue type is often a default. Breaking changes are checked first because missing one is the most expensive mistake.
Two audiences. Customer notes drop internal work and ticket keys and lead with breaking changes. Internal notes keep everything, with links, for support and sales.
"Shipped" means shipped. GitHub issues closed as not planned or duplicate and unmerged PRs are excluded. In Azure DevOps, only work items in a completed state (
DoneorClosed) count; Removed items never do.Same model for every tracker. GitHub, Jira, Linear and Azure DevOps all map to one
WorkItemshape, so adding another tracker means writing one adapter, not touching the rules.
Tools
draft_release_notes
Categorises work and returns a Markdown draft plus a review list.
Argument | Notes |
|
|
| GitHub: |
| Jira: project key and fix version, or your own JQL |
| Linear: team key, e.g. |
| Azure DevOps: project name and iteration path (child iterations included), or your own WIQL |
| Date range ( |
| Or pass work items directly: |
|
|
| Used in the heading |
| Show ticket keys and links (default: on for internal, off for customer) |
fetch_work_items
Returns the raw shipped work items as JSON, for when you want to inspect or filter them yourself first.
Prompt: polish_release_notes
Takes a draft and asks the model to rewrite each item in terms of customer benefit, keep breaking changes first with an action line for each, and add a short summary, without inventing, merging or dropping changes.
How items are categorised
Checked in this order; the first match wins and is recorded as the item's reason.
Breaking:
feat!:/fix!:prefixes,BREAKINGin the title, or abreakinglabelLabels:
security, internal labels (chore,refactor,tech-debt,skip-changelog…),bug,feature,enhancement…Conventional-commit prefixes:
feat:,fix:,perf:,chore:,refactor:…Issue or work item type:
Bug,Story,User Story,Product Backlog Item,Improvement,Sub-task…Otherwise Other, and the item is listed for review
Azure DevOps tags are treated as labels, so a breaking or internal tag works the same way as a Jira or GitHub label.
Setup
Requires Node.js 20 or later.
git clone https://github.com/ajayvancouver/pm-release-notes-mcp.git
cd pm-release-notes-mcp
npm install
npm run buildAdd it to your MCP client. For Claude Desktop, edit claude_desktop_config.json:
{
"mcpServers": {
"release-notes": {
"command": "node",
"args": ["/absolute/path/to/pm-release-notes-mcp/dist/index.js"],
"env": {
"GITHUB_TOKEN": "ghp_…",
"JIRA_BASE_URL": "https://your-company.atlassian.net",
"JIRA_EMAIL": "you@company.com",
"JIRA_API_TOKEN": "…",
"LINEAR_API_KEY": "lin_api_…",
"AZURE_DEVOPS_ORG": "your-org",
"AZURE_DEVOPS_PAT": "…"
}
}
}
}Only set the variables for the trackers you use. GITHUB_TOKEN is optional for public repositories. A read-only token is enough everywhere.
Tracker | Credential |
GitHub | Fine-grained token with read access to issues and pull requests |
Jira Cloud | API token plus the email it belongs to |
Linear | Personal API key from your Linear account settings |
Azure DevOps | Personal access token with the Work Items (Read) scope. |
Example requests
"Draft customer release notes for everything merged in acme/web since 2026-10-01."
"Internal release notes for Jira project PAY, fix version 2.4.0, with links."
"What did the ENG team in Linear complete last sprint? List anything you couldn't categorise."
"Customer release notes for Azure DevOps project Payments, iteration Payments\Sprint 42."
"Draft notes for PAY 2.4.0, then use polish_release_notes to make them friendly."
Development
npm test # unit and in-memory MCP tests
npm run typecheck
npm run buildTests cover the categorisation rules, rendering, each tracker adapter (with mocked HTTP) and the MCP tools end to end over an in-memory transport.
Roadmap
Group items by Jira epic, Linear project or Azure DevOps feature as "themes"
Read per-team label conventions from a config file
Optional draft-to-Confluence/Notion, behind an explicit approval step
Built with
TypeScript, the official MCP TypeScript SDK, Zod and Vitest. Built with Claude Code as a pair programmer.
License
MIT © Ajay Agrawal
This server cannot be deployed
Maintenance
Related MCP Connectors
- ShipstarOAuthai.shipstar
Generate changelogs, release emails, help-center articles, banners, and social posts from commits.
Release intelligence for AI coding tools: releases, typed changes, breaking changes, cadence.
Release notes and changelogs from across the web, indexed for agents. Also via CLI and REST API.
Read-only AI coding tools for change verification, release readiness, capacity, and guidance.
Related MCP Servers
- FlicenseBqualityDmaintenanceGenerates comprehensive and formatted release notes from GitHub repositories, efficiently organizing commits by type and including detailed statistics using smart API usage.33-
- AlicenseAqualityFmaintenanceEnables AI assistants to draft content such as PR descriptions, tickets, or messages, with a review window for live preview, editing, and approval before submission.18 npm1MIT
- AlicenseNot gradedqualityDmaintenanceConverts raw GitHub notes into polished Polish release notes, PR descriptions, and changelogs using predefined workflows.MIT
- FlicenseAqualityCmaintenanceCombines GitHub releases from multiple repositories into a single product release note, with context sources for LLM synthesis.725 PyPI-