redmine-mcp
redmine-mcp
Ein zustandsloser Model Context Protocol-Server für Redmine. Platzieren Sie ihn vor eine beliebige Redmine- Instanz und lassen Sie Claude (oder einen beliebigen MCP-fähigen LLM-Client) Tickets lesen und schreiben, Zeiten erfassen, das Wiki durchsuchen und Projekte im Namen des Benutzers durchsuchen, wobei jeder Benutzer seinen eigenen API-Schlüssel verwendet.
Kein Zustand: keine Datenbank, keine Sitzungen, kein gemeinsames Geheimnis. Der Server leitet jede Anfrage unter Verwendung des mitgelieferten API-Schlüssels an Redmine weiter.
Ein Server, viele Benutzer: Das Einzige, was der Betreiber konfiguriert, ist die Upstream-
REDMINE_URL. Jeder MCP-Client liefert seinen eigenenX-Redmine-API-Key. Die Berechtigungen entsprechen denen, die in Redmine definiert sind.Abdeckung: Tickets (CRUD + Notizen), Projekte, Mitgliedschaften, Benutzer, Zeiteinträge, Wiki (PUT-Upsert), Anhänge (Hochladen + Herunterladen), Volltextsuche, Status, Tracker, Kategorien, benutzerdefinierte Felder, Aufzählungen.
Schnellstart
Lokal (uv)
uv sync
REDMINE_URL=https://redmine.example.com uv run redmine-mcpDer MCP-Endpunkt befindet sich jetzt unter http://127.0.0.1:8080/mcp.
Container (GHCR)
docker run --rm -p 8080:8080 \
-e REDMINE_URL=https://redmine.example.com \
ghcr.io/kalvadtech/redmine-mcp:latestDas Image ist ein mehrstufiges Alpine-Image, läuft als Nicht-Root-Benutzer und stellt Port 8080 bereit.
Related MCP server: Redmine MCP Server
Einbindung in Ihren MCP-Client
Finden Sie Ihren Redmine-API-Schlüssel unter Mein Konto > API-Zugriffsschlüssel. Beide unten
aufgeführten Clients kommunizieren über Streamable HTTP mit demselben MCP-Endpunkt; keine weitere
Client-Konfiguration ist erforderlich.
Claude Code
.mcp.json in Ihrem Projektstammverzeichnis:
{
"mcpServers": {
"redmine": {
"type": "http",
"url": "http://127.0.0.1:8080/mcp",
"headers": {
"X-Redmine-API-Key": "your-40-char-key"
}
}
}
}opencode
opencode.json in Ihrem Projektstammverzeichnis (oder Ihrem opencode-Konfigurationsverzeichnis):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"redmine": {
"type": "remote",
"url": "http://127.0.0.1:8080/mcp",
"enabled": true,
"headers": {
"X-Redmine-API-Key": "{env:REDMINE_API_KEY}"
}
}
}
}opencode unterstützt {env:VAR}-Interpolation in headers, sodass der API-Schlüssel
nicht in der Konfigurationsdatei landet: REDMINE_API_KEY=... opencode.
Konfiguration
Variable | Erforderlich | Standard | Zweck |
| ja | - | Basis-URL der Redmine-Instanz (http oder https) |
CLI-Flags für redmine-mcp:
--host bind address (default 127.0.0.1)
--port port (default 8080)
--log-level uvicorn log level (default info)Der Server bricht beim Start sofort ab, wenn REDMINE_URL fehlt oder kein http(s) ist.
Authentifizierungsmodell
Die Redmine-URL wird nicht vom Benutzer bereitgestellt; sie ist pro Bereitstellung über
REDMINE_URL festgelegt. Dies eliminiert das SSRF-Risiko: Clients können den Server nicht auf
beliebige Hosts verweisen.
Das einzige Anmeldeinformation, das ein Client sendet, ist sein eigener Redmine-API-Schlüssel im
X-Redmine-API-Key-Header. Der Server leitet ihn als denselben Header an Redmine weiter (sodass er
nicht als Query-String in den Redmine-Zugriffsprotokollen landet), verwendet ihn für eine Anfrage
und verwirft ihn dann. Es gibt kein Caching, kein gemeinsames Dienstkonto und keine Identitätswechsel.
Tools
59 Tools decken jede Ressourcenfamilie ab, die Redmine über seine REST-API bereitstellt.
Listen-Tools geben {items, total_count, limit, offset} für einfaches Paging zurück.
Tickets
list_issues(Projekt, Status, Bearbeiter, Tracker, Kategorie, Version, gespeicherte Abfrage, Freitextsuche, Sortierung, Include)get_issue(Include: Journale, Anhänge, Beziehungen, Kinder, Beobachter)create_issue(inkl.uploads-Token,custom_fields,watcher_user_ids)update_issue(inkl.notes,private_notes)add_issue_note(dünner Wrapper)delete_issue
Ticket-Beziehungen
list_issue_relations,get_relation,create_issue_relation(bezieht sich auf / blockiert / geht voraus / etc., mitdelayfür vorausgehend/folgend),delete_relation
Journale (Ticket-Notizen)
update_journal_note- Bearbeiten Sie den Text oder die Vertraulichkeit einer vorhandenen Notiz. Verwenden Sieadd_issue_note, um eine neue Notiz hinzuzufügen.
Projekte und Versionen
list_projects,get_projectlist_versions,get_version,create_version,update_version,delete_version
Mitgliedschaften
list_memberships,get_membership,add_project_member(Benutzer oder Gruppe),update_membership,remove_membership
Benutzer, mein Konto, Gruppen, Rollen
list_users,get_user(akzeptiert den literalen String"current")get_my_account,update_my_accountlist_groups,get_group,create_group,update_group,delete_group,add_user_to_group,remove_user_from_grouplist_roles,get_role(mit Berechtigungen)
Zeiteinträge
list_time_entries(Datumsbereiche, Benutzer, Projekt, Ticket)create_time_entry(Ticket oder Projekt, Stunden, Aktivität, spent_on, Kommentare)update_time_entry,delete_time_entry
Wiki
list_wiki_pages,get_wiki_page(mit Version)create_or_update_wiki_page(PUT-Upsert)delete_wiki_page
Anhänge und Dateien
get_attachment,download_attachment(begrenzt auf 25 MiB, base64-Ausgabe)upload_attachment(gibt ein Token zurück, um es überuploadsbei create_issue / update_issue anzuhängen)list_files,upload_file(One-Shot-Upload + Anhängen an den Dateibereich eines Projekts, mit optionaler version_id und Beschreibung)
Nachrichten, Abfragen, Suche und Metadaten
list_news(projektübergreifend oder pro Projekt)list_queries(gespeicherte Abfragen; übergeben Sie die ID alsquery_idanlist_issues)search(Volltextsuche über Tickets, Nachrichten, Dokumente, Wiki, etc.)list_issue_statuses,list_trackers,list_issue_categories,list_custom_fieldslist_issue_priorities,list_time_entry_activities,list_document_categories
Bereitstellung
Für eine einzelne Redmine-Instanz führen Sie einen Container pro Umgebung aus:
docker run -d --name redmine-mcp \
--restart unless-stopped \
-p 8080:8080 \
-e REDMINE_URL=https://redmine.example.com \
ghcr.io/kalvadtech/redmine-mcp:latestPlatzieren Sie ihn hinter Ihrem üblichen Reverse-Proxy und der TLS-Terminierung. Das MCP- Protokoll ist serverseitig nur HTTP; Benutzer erhalten TLS über Ihren Proxy.
Für mehrere Redmine-Instanzen führen Sie einen Container pro Instanz mit eigener
REDMINE_URL aus und routen Sie am Proxy nach Hostname / Pfad.
Entwicklung
uv sync
uv run pytest
uv run ruff check .
uv run mypy srcDie Testsuite ist vollständig offline und verwendet respx, um die Redmine-HTTP-API zu mocken.
Es gibt keine Integrationstests gegen ein Live-Redmine; bringen Sie Ihr eigenes mit.
Mitwirken
Pull Requests sind willkommen. Bitte:
folgen Sie den Conventional Commits,
halten Sie Änderungen prägnant und gut abgegrenzt (eine logische Änderung pro Commit),
fügen Sie Tests für jede Verhaltensänderung hinzu oder aktualisieren Sie diese,
führen Sie
pytest,ruffundmypysauber aus, bevor Sie den PR öffnen.
Lizenz
MIT (c) 2026 Kalvad.
This server cannot be deployed
Maintenance
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
MCP server for Linear project management and issue tracking
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server providing 63 tools to interact with Redmine instances, covering issues, projects, time entries, and wiki pages. It utilizes streamable HTTP transport and supports per-client authentication for secure management of Redmine resources.6 npm-
- AlicenseBqualityDmaintenanceMCP server for Redmine project management, enabling tools for managing projects, issues, users, time entries, groups, memberships, versions, wiki, news, attachments, search, and Agile sprints via the Redmine REST API.8911 npm1MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for Redmine that enables interaction with issues, wiki pages, and time entries through natural language.ISC
- AlicenseAqualityDmaintenanceA local STDIO server that exposes Redmine REST API as MCP tools, allowing MCP clients to browse Redmine projects and tickets.6MIT