changelog-mcp
Click on "Install 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., "@changelog-mcpAdd a changelog entry for new API endpoint"
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.
changelog-mcp

Ein universeller MCP-Server für das Changelog-Management. Er funktioniert mit allen MCP-fähigen KI-Assistenten, darunter Claude Code, Cursor, Windsurf, Cline und Claude Desktop.
Das Problem
KI-Assistenten sind sehr gut darin, Changelog-Einträge zu formulieren, aber weniger zuverlässig beim Verwalten einer Changelog-Datei. Typische Probleme sind:
vorhandene Einträge werden versehentlich überschrieben oder gelöscht,
Versionsnummern werden falsch erhöht oder vergessen,
das Format wird inkonsistent,
Merge-Konflikte entstehen,
im schlimmsten Fall wird die gesamte Changelog-Datei beschädigt.
Je größer ein Projekt wird und je häufiger KI Änderungen dokumentiert, desto höher wird dieses Risiko.
Related MCP server: devflow-mcp
Die Lösung
changelog-mcp nimmt der KI die Verwaltung der Changelog-Dateien vollständig ab.
Statt Markdown-Dateien direkt zu bearbeiten, schreibt die KI ausschließlich strukturierte Änderungsdatensätze in eine JSONL-Datei. Diese Datei ist die einzige Quelle der Wahrheit. Daraus erzeugt der Server anschließend deterministisch alle Markdown-Changelogs.
Der Server übernimmt dabei unter anderem:
sicheres Hinzufügen neuer Einträge,
automatische Versionsberechnung,
konsistente Formatierung,
Generierung von
CHANGELOG.mdundCHANGELOG-full.md,automatische Backups, bevor Dateien geändert werden.
Dadurch kann die KI sich auf den Inhalt konzentrieren, während der Server sicherstellt, dass die Changelog-Historie konsistent und nachvollziehbar bleibt.
Status: Aktive Entwicklung. Die Basisversion (Server, Store und 15 Tools) ist funktionsfähig und über den
stdio-Transport verifiziert.
Features
15 MCP-Tools (Setup, Erfassung, Release, Suche, Rendern, Migration) über stdio.
Drei Format-Presets:
keep-a-changelog,conventional,smart.Einträge korrigierbar:
edit_entry/delete_entryändern oder entfernen Einzeleinträge per ID; bereits veröffentlichte Einträge sind vor dem Löschen geschützt.Strukturierte Suche mit Freitext-Ranking und Filtern (Kategorie, Datei, Version, Zeitraum).
Migration bestehender Changelogs (
import_records+verify_store).Versionierung
semveroderpatch-only, konfigurierbarer Prefix.Defense-in-Depth: Zeilen-Validierung beim Lesen (defekte Zeilen werden gemeldet und übersprungen), Path-Traversal- und Symlink-Schutz, Größenlimit, Render-Schutz. Korrekturen laufen über angehängte Records statt über Mutation bestehender Zeilen, sodass die Rohhistorie in der JSONL-Datei nachvollziehbar bleibt.
Rotierendes Backup: vor der ersten Änderung je Zeitraum (Default täglich) wird der Store gesichert; die letzten 30 Backups bleiben erhalten. Ordner, Intervall, Aufbewahrung und Dateiname-Muster sind konfigurierbar.
Zero-Config: läuft ohne Konfigurationsdatei mit sinnvollen Defaults.
Installation & Einbindung in den KI-Client
Der Server läuft als stdio-MCP-Server und wird über uvx gestartet — kein manuelles Environment
nötig (Voraussetzung: uv ist installiert). Trage ihn in die
MCP-Konfiguration deines Clients ein. Bei Claude Code ist das die Datei .mcp.json im Projekt-Root
(im Repo liegt sie als Vorlage unter .mcp.json.example):
{
"mcpServers": {
"changelog": {
"command": "uvx",
"args": ["--from", "git+https://github.com/smartsys/changelog-mcp", "changelog-mcp"],
"env": {
"CHANGELOG_MCP_CONFIG": "./documentation/changelog/changelog-mcp-config.json"
}
}
}
}Feld für Feld:
command/args—uvxholt den Server direkt aus diesem Repository und startet ihn; eine separate Installation entfällt.env.CHANGELOG_MCP_CONFIG— Pfad zu deiner Config-Datei, relativ zum Projekt-Root (der Pfad im Beispiel ist frei wählbar — leg die Datei ab, wo es zu deinem Projekt passt, siehe Konfiguration). Ohne diese Variable startet der Server im Zero-Config-Modus mit Defaults.
Nach dem Eintragen den Client neu starten; die Changelog-Tools stehen dann zur Verfügung.
Geplant: Veröffentlichung auf PyPI, danach genügt
"args": ["changelog-mcp"](ohne--from).
Erster Start: einmal init_changelog
uvx installiert nur den Server (das Paket). Keine Config und kein Store werden
mitgeliefert — beide gehören in dein Projekt. Nach dem Eintragen der .mcp.json rufst du daher
einmal das Tool init_changelog auf (z.B. „Initialisiere den Changelog"). Es legt an, was fehlt:
den Store (
changelog.jsonl, die Quelle der Wahrheit),die Config — und zwar genau am Pfad aus
CHANGELOG_MCP_CONFIG(bzw., ohne die Variable,changelog-mcp-config.jsonim Projekt-Root).
init_changelog ist idempotent: Ein zweiter Aufruf überschreibt nichts — ein vorhandener Store
und eine vorhandene Config bleiben unangetastet. Ohne diesen Aufruf laufen die Tools im
Zero-Config-Modus (Defaults), aber ohne Config-Datei, die du bearbeiten kannst.
Pro Projekt einrichten
Der Server ist ein einmal installiertes Werkzeug, aber ein Changelog gehört immer zu genau
einem Projekt — es gibt keinen globalen Changelog. Config, Store und .mcp.json werden relativ
zum jeweiligen Projekt-Root aufgelöst. Richte den Server deshalb in jedem Projekt separat ein:
.mcp.json eintragen und einmal init_changelog ausführen.
Konfiguration
Der Server läuft ohne Konfigurationsdatei (Zero-Config) mit sinnvollen Defaults. Der einfachste
Weg zu einer eigenen, bearbeitbaren Config ist init_changelog (siehe
Erster Start) — es schreibt die Datei mit allen Default-Werten
an den Pfad aus CHANGELOG_MCP_CONFIG. Danach passt du dort an, was du brauchst.
Alle Felder sind optional. Was du weglässt, bleibt auf dem Default. Eine vollständige Datei mit den Standardwerten sieht so aus:
{
"format": "smart",
"store": { "file": "changelog.jsonl", "path": "./documentation/changelog" },
"changelog": { "file": "CHANGELOG.md", "path": "./", "encoding": "utf-8", "entrySpacing": 2, "includePrivate": false },
"fullChangelog":{ "enabled": true, "file": "CHANGELOG-full.md", "path": "./documentation/changelog", "includePrivate": false },
"versioning": { "mode": "semver", "prefix": "", "fixedMajor": null, "fixedMinor": null },
"backup": { "enabled": true, "path": "./documentation/changelog/backup", "interval": "daily", "retention": 30, "fileFormat": "changelog-{date}.jsonl" },
"dateFormat": "YYYY-MM-DD",
"language": "de"
}Alle Pfade sind relativ zum Projekt-Root. Der Server prüft sie streng (kein .., keine
Symlinks aus dem Projekt heraus). Die aktuell aktive, aufgelöste Konfiguration kannst du jederzeit
mit dem Tool get_config ausgeben lassen.
Die Blöcke im Überblick
Block | Zweck | Details |
| Kategorien-Regeln + Aussehen der Versions-Überschrift | |
| Ort der JSONL-Quelle der Wahrheit | unten |
| die kuratierte | unten |
| die detaillierte | unten |
| wie Versionsnummern vergeben werden | |
| automatische Sicherung des Stores | |
| Datumsformat und Sprach-Metadatum | unten |
| private Einträge doch publizieren |
store — legt fest, wo die JSONL-Datei liegt, aus der alles generiert wird:
file— Dateiname (Defaultchangelog.jsonl).path— Ordner relativ zum Projekt-Root (Default./documentation/changelog).
changelog — die kuratierte, öffentliche CHANGELOG.md (nur Release-Zusammenfassungen):
file/path— Name und Ort der Datei (DefaultCHANGELOG.mdim Projekt-Root).encoding— Textkodierung der beiden Markdown-Dateien:utf-8|utf-16le|latin1|ascii(Defaultutf-8). Der Store selbst ist immer UTF-8.entrySpacing— Anzahl Leerzeilen zwischen zwei Versionsblöcken (≥ 0, Default 2).includePrivate— siehe Private Einträge.
fullChangelog — die detaillierte CHANGELOG-full.md mit jedem Einzeleintrag:
enabled—falseschaltet diese Datei komplett ab (Defaulttrue).file/path— Name und Ort (DefaultCHANGELOG-full.md).includePrivate— siehe Private Einträge.
dateFormat — Datumsformat der Einträge und Überschriften über die Tokens YYYY, MM, DD.
Beispiele: YYYY-MM-DD → 2026-07-19, DD.MM.YYYY → 19.07.2026.
language — reines Metadatum (Default en). Wird derzeit nicht ausgewertet und ändert
nichts am Verhalten; die Sprache der Ausgaben liegt an deiner Nutzung, nicht an diesem Feld.
Format-Presets
Das Feld format bestimmt, welche Kategorien erlaubt sind und wie die Versions-Überschriften
in CHANGELOG.md / CHANGELOG-full.md aussehen. Drei Presets stehen zur Wahl:
smart (Default)
Flexibles Preset mit frei wählbaren Kategorien — du legst die Kategorien selbst fest.
Kategorien (frei, keine Validierung): beliebig. Empfohlen als Vorschlagsliste:
Added·Changed·Deprecated·Removed·Fixed·Security·DocumentationVersions-Überschrift:
## [1.2.3] - 2026-07-19Geeignet, wenn ein Projekt eigene Kategorien braucht, die keiner der strikten Presets abdeckt.
keep-a-changelog
Der verbreitete Standard nach keepachangelog.com.
Kategorien (strikt validiert):
Added·Changed·Deprecated·Removed·Fixed·SecurityVersions-Überschrift:
## [1.2.3] - 2026-07-19Nur diese sechs Kategorien sind zulässig; jede andere wird mit einer Fehlermeldung abgelehnt.
conventional
Angelehnt an Conventional Commits.
Kategorien (strikt validiert):
Features·Bug Fixes·Performance·Reverts·Breaking ChangesVersions-Überschrift:
## 1.2.3 (2026-07-19)Ebenfalls streng: nur die genannten Kategorien sind erlaubt.
Versionierung
Der Block versioning steuert, wie die Versionsnummern vergeben werden. Wichtig zu verstehen:
in diesem Server bekommt jeder einzelne add_entry eine eigene Versionsnummer — die Version
zählt also pro Änderung hoch, nicht erst beim Release. Ein Release bündelt anschließend die Spanne
der Einträge unter der höchsten Versionsnummer dieser Spanne.
mode: "semver" (Default)
Klassisches Semantic Versioning mit den drei Stellen
MAJOR.MINOR.PATCH. Beim add_entry (und get_next_version) bestimmt der Parameter bump, welche
Stelle steigt:
bump: "patch"(Default) —1.2.3→1.2.4(Fehlerbehebungen, Kleinigkeiten).bump: "minor"—1.2.3→1.3.0(neue, abwärtskompatible Funktionen).bump: "major"—1.2.3→2.0.0(Breaking Changes).
Bei leerem Store ist die Initialversion 0.1.0 (bzw. fixedMajor.fixedMinor.0, falls gesetzt).
Beispielkette: Start 0.1.0 → add_entry(bump=patch) → 0.1.1 → add_entry(bump=minor) →
0.2.0 → add_entry(bump=major) → 1.0.0.
mode: "patch-only"
Major und Minor sind fest verdrahtet, nur die Patch-Stelle zählt fortlaufend hoch. Der Parameter
bump wird in diesem Modus ignoriert. Gedacht für Projekte, die einfach eine durchlaufende
Nummer wollen (z.B. eine Firmware- oder Doku-Reihe 1.4.x).
Die feste Basis kommt aus
fixedMajor/fixedMinor(Default0/1, also Basis0.1).Beispiel mit
fixedMajor: 1,fixedMinor: 4:1.4.1→1.4.2→1.4.3→ …Änderst du die Basis später (z.B. auf
fixedMinor: 5), springt der nächste Eintrag auf1.5.1.
prefix
Reiner Anzeige-Prefix vor der Nummer in den Überschriften, üblich ist "v". Aus 1.2.3 wird
dann z.B. ## [v1.2.3] - 2026-07-19. Der Store speichert weiterhin die nackte Nummer; der Prefix
betrifft nur die Darstellung (Default leer, also kein Prefix).
fixedMajor / fixedMinor
Im Modus
semver: setzen Major/Minor der Initialversion bei leerem Store (Defaultnull→0.1.0).Im Modus
patch-only: die feste Basis, gegen die die Patch-Nummer läuft (Default0.1).
Private Einträge
Ein Eintrag kann per add_entry(..., private=true) als privat markiert werden — für Änderungen an
nicht-öffentlicher Doku, die trotzdem im Store nachvollziehbar bleiben soll. Standardmäßig erscheinen
private Einträge weder in CHANGELOG.md noch in CHANGELOG-full.md. Zwei Flags (Default
jeweils false) heben das gezielt auf:
changelog.includePrivate— private Einträge fließen in den kuratiertenCHANGELOG.md-Summary ein (list_unreleasedzeigt sie dann ebenfalls).fullChangelog.includePrivate— private Einträge werden inCHANGELOG-full.mdgerendert.
Bei false blendet list_unreleased private Einträge aus, damit sie gar nicht erst in den
öffentlichen Summary geraten. create_release bündelt sie dennoch (sie gelten als released); ein
Release nur aus privaten Einträgen erzeugt keinen öffentlichen Block.
Backups
Der Server sichert den Store automatisch, bevor er im jeweiligen Zeitraum zum ersten Mal geändert wird — als Sicherheitsnetz für den Fall, dass Einträge versehentlich geändert oder getilgt werden. Ausgelöst wird beim ersten schreibenden Tool-Aufruf (kein Scheduler nötig).
enabled— Backups an/aus (Defaulttrue).path— Zielordner, relativ zum Projekt-Root (Default./documentation/changelog/backup).interval—daily|weekly|monthly: ein Backup pro Zeitraum (Defaultdaily).retention— Anzahl behaltener Backup-Dateien; ältere werden entfernt (Default30).fileFormat— Dateiname-Muster;{date}wird zur Zeitraum-Kennung (YYYY-MM-DD,YYYY-Www,YYYY-MM).
Beispiel-Konfigurationen
Minimal — nur ein anderes Format, sonst alle Defaults:
{ "format": "keep-a-changelog" }Interne Doku — private Einträge im Detail-Changelog sichtbar, in der öffentlichen aber nicht:
{
"format": "smart",
"changelog": { "includePrivate": false },
"fullChangelog":{ "enabled": true, "includePrivate": true }
}Fortlaufende Patch-Reihe mit v-Prefix (z.B. Firmware 1.4.x):
{
"format": "smart",
"versioning": { "mode": "patch-only", "prefix": "v", "fixedMajor": 1, "fixedMinor": 4 }
}Ergebnis: Überschriften wie ## [v1.4.1] - 2026-07-19, mit jedem Eintrag v1.4.2, v1.4.3, …
Tools
Der Server stellt 15 MCP-Tools bereit. Alle Parameter werden an der Tool-Grenze mit Pydantic validiert; Fehlermeldungen sind deutsch und folgen dem Muster Beschreibung + Kontext + Lösung.
Setup & Version
Tool | Parameter | Beschreibung |
|
| Bootstrap: legt Store und Config-Datei an, was fehlt (Config am Pfad aus |
| — | Höchste Version im Store plus Anzahl unveröffentlichter Einträge. |
|
| Berechnet die nächste Version aus der höchsten Store-Version und dem Bump-Modus. |
| — | Zeigt die aktive, aufgelöste Konfiguration als JSON inklusive Herkunft der Werte. |
Laufende Erfassung
Tool | Parameter | Beschreibung |
|
| Hängt einen validierten Einzeleintrag an den Store an. |
|
| Ändert Felder eines Eintrags per ID — nur die genannten Felder, Version und Datum bleiben. Intern als Korrektur-Record angehängt; der Read-Layer rechnet die Änderung ein. IDs liefern |
|
| Löscht einen unveröffentlichten Eintrag per ID (Tilgungs-Record); er entfällt in allen Ausgaben. Bereits released Einträge sind publizierte Historie und werden abgelehnt. |
Veröffentlichen
Tool | Parameter | Beschreibung |
| — | Zeigt die öffentlichen Einträge seit dem letzten Release und die künftige Release-Version; private Einträge sind ausgeblendet, solange |
|
| Rendert den Release-Block wie |
|
| Bündelt alle unveröffentlichten Einträge (auch private) zu einem Release und rendert beide Markdown-Dateien neu. |
Suche & Abruf
Tool | Parameter | Beschreibung |
|
| Durchsucht den strukturierten Store mit Freitext-Ranking; alle Filter werden UND-kombiniert. |
|
| Zeigt einen Release mit Zusammenfassung und allen gebündelten Einzeleinträgen. |
Rendern & Migration
Tool | Parameter | Beschreibung |
| — | Erzeugt beide Markdown-Dateien neu aus dem Store (idempotent, mit Render-Schutz). |
|
| Migration: hängt geparste Einträge und optional Releases an den Store an. |
|
| Vergleicht die Versions-Überschriften einer Quelldatei mit dem Store und meldet Fehlendes. |
Lizenz
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceA token-efficient, schema-aware MCP server that enables AI assistants to safely read, modify, query, and validate JSON, YAML, and TOML files with automatic schema detection and format conversion capabilities.89MIT
- Alicense-qualityDmaintenanceA production-ready MCP server that provides AI assistants with comprehensive GitHub developer tooling including PR analysis, code review, changelog generation, dependency auditing, commit summarization, and refactoring suggestions.17ISC
- Alicense-qualityCmaintenanceA local-first MCP server for AI programming branch notes and mainline decision logging, supporting branch management, summary merging, and Markdown export with optional Git-mode for isolated branch conversations.3MIT
- Alicense-qualityFmaintenanceA local MCP server that records completed tasks to daily JSONL files and promotes substantial work to a cumulative weekly Markdown worklog, providing persistent, searchable logs of AI-assisted productivity.MIT
Related MCP Connectors
User-owned memory for AI agents, Copilot, Claude, IDEs, CLIs, and chat apps over remote MCP.
Person-owned, portable AI memory as a remote MCP server, readable and writable by any MCP client.
An agent-friendly API for product changelogs. A unified registry via CLI, API, or MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/smartsys/changelog-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server