{"id":48698519,"url":"https://github.com/dpesch/mantisbt-mcp-server","last_synced_at":"2026-05-03T09:10:15.315Z","repository":{"id":345351931,"uuid":"1185519178","full_name":"dpesch/mantisbt-mcp-server","owner":"dpesch","description":"Mirror of codeberg.org/dpesch/mantisbt-mcp-server — issues and PRs not monitored","archived":false,"fork":false,"pushed_at":"2026-05-02T19:22:33.000Z","size":722,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-02T21:25:50.011Z","etag":null,"topics":["claude","claude-code","mantis","mantisbt","mcp","mcp-server","model-context-protocol","model-context-protocol-server"],"latest_commit_sha":null,"homepage":"https://codeberg.org/dpesch/mantisbt-mcp-server","language":"TypeScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dpesch.png","metadata":{"files":{"readme":"README.de.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-18T17:05:40.000Z","updated_at":"2026-05-02T19:22:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dpesch/mantisbt-mcp-server","commit_stats":null,"previous_names":["dpesch/mantisbt-mcp-server"],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/dpesch/mantisbt-mcp-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dpesch%2Fmantisbt-mcp-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dpesch%2Fmantisbt-mcp-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dpesch%2Fmantisbt-mcp-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dpesch%2Fmantisbt-mcp-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dpesch","download_url":"https://codeload.github.com/dpesch/mantisbt-mcp-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dpesch%2Fmantisbt-mcp-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32563637,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude","claude-code","mantis","mantisbt","mcp","mcp-server","model-context-protocol","model-context-protocol-server"],"created_at":"2026-04-11T09:04:03.207Z","updated_at":"2026-05-03T09:10:15.309Z","avatar_url":"https://github.com/dpesch.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MantisBT MCP Server\n\n[![npm version](https://img.shields.io/npm/v/@dpesch/mantisbt-mcp-server)](https://www.npmjs.com/package/@dpesch/mantisbt-mcp-server)\n[![license](https://img.shields.io/npm/l/@dpesch/mantisbt-mcp-server)](LICENSE)\n[![MCP Badge](https://lobehub.com/badge/mcp/dpesch-mantisbt-mcp-server)](https://lobehub.com/mcp/dpesch-mantisbt-mcp-server)\n[![MantisBT MCP Server](https://glama.ai/mcp/servers/dpesch/mantisbt-mcp-server/badges/card.svg)](https://glama.ai/mcp/servers/dpesch/mantisbt-mcp-server)\n\nEin [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) Server, der die [MantisBT REST API](https://documenter.getpostman.com/view/29959/mantis-bug-tracker-rest-api) in Claude Code und andere MCP-fähige Clients integriert. Issues lesen, erstellen und bearbeiten – direkt aus dem Editor heraus.\n\n## Voraussetzungen\n\n- Node.js ≥ 18\n- MantisBT-Installation mit aktivierter REST-API (ab Version 2.23)\n- MantisBT API-Token (unter *Mein Konto → API-Token* erstellen)\n\n## Installation\n\n**Via npx (empfohlen):**\n\nIn `~/.claude/claude_desktop_config.json` (Claude Desktop) oder der lokalen\n`claude_desktop_config.json` (Claude Code) eintragen:\n\n```json\n{\n  \"mcpServers\": {\n    \"mantisbt\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dpesch/mantisbt-mcp-server\"],\n      \"env\": {\n        \"MANTIS_BASE_URL\": \"https://deine-mantis-instanz.example.com/api/rest\",\n        \"MANTIS_API_KEY\": \"dein-api-token\"\n      }\n    }\n  }\n}\n```\n\n**Lokaler Build:**\n\n```bash\ngit clone https://codeberg.org/dpesch/mantisbt-mcp-server\ncd mantisbt-mcp-server\nnpm run init\nnpm run build\n```\n\n```json\n{\n  \"mcpServers\": {\n    \"mantisbt\": {\n      \"command\": \"node\",\n      \"args\": [\"/pfad/zum/mantisbt-mcp-server/dist/index.js\"],\n      \"env\": {\n        \"MANTIS_BASE_URL\": \"https://deine-mantis-instanz.example.com/api/rest\",\n        \"MANTIS_API_KEY\": \"dein-api-token\"\n      }\n    }\n  }\n}\n```\n\n## Konfiguration\n\n### Umgebungsvariablen\n\n| Variable | Pflicht | Standard | Beschreibung |\n|---|---|---|---|\n| `MANTIS_BASE_URL` | ✅ | – | Basis-URL der MantisBT-Installation. Beide Formate werden akzeptiert: `https://deine-mantis-instanz.example.com` und `https://deine-mantis-instanz.example.com/api/rest` — das `/api/rest`-Suffix wird automatisch normalisiert. |\n| `MANTIS_API_KEY` | ✅ | – | API-Token für die Authentifizierung |\n| `MANTIS_CACHE_DIR` | – | `~/.cache/mantisbt-mcp` | Verzeichnis für den Metadaten-Cache |\n| `MANTIS_CACHE_TTL` | – | `3600` | Cache-Lebensdauer in Sekunden |\n| `TRANSPORT` | – | `stdio` | Transport-Modus: `stdio` oder `http` |\n| `PORT` | – | `3000` | Port für HTTP-Modus |\n| `MCP_HTTP_HOST` | – | `127.0.0.1` | Bind-Adresse für HTTP-Modus. **Geändert von `0.0.0.0` auf `127.0.0.1`** — der Server horcht standardmäßig nur auf localhost. Für Docker oder Remote-Zugriff `0.0.0.0` setzen. |\n| `MCP_HTTP_TOKEN` | – | – | Wenn gesetzt, muss jede `/mcp`-Anfrage den Header `Authorization: Bearer \u003ctoken\u003e` enthalten. `/health` ist immer öffentlich. |\n| `MANTIS_SEARCH_ENABLED` | – | `false` | Auf `true` setzen, um die semantische Suche zu aktivieren |\n| `MANTIS_SEARCH_BACKEND` | – | `vectra` | Vektorspeicher: `vectra` (reines JS) oder `sqlite-vec` (manuelle Installation erforderlich) |\n| `MANTIS_SEARCH_DIR` | – | `{MANTIS_CACHE_DIR}/search` | Verzeichnis für den Suchindex |\n| `MANTIS_SEARCH_MODEL` | – | `Xenova/paraphrase-multilingual-MiniLM-L12-v2` | Embedding-Modell (wird beim ersten Start einmalig heruntergeladen, ~80 MB) |\n| `MANTIS_SEARCH_THREADS` | – | `1` | Anzahl der ONNX-Intra-Op-Threads für das Embedding-Modell. Standard ist 1, um CPU-Sättigung auf Mehrkernsystemen und in WSL zu verhindern. Nur erhöhen, wenn die Indexierungsgeschwindigkeit kritisch ist und der Host ausschließlich für diese Last vorgesehen ist. |\n| `MANTIS_UPLOAD_DIR` | – | – | Schränkt `upload_file` auf Dateien in diesem Verzeichnis ein. Wenn gesetzt, wird jeder `file_path` außerhalb des Verzeichnisses abgelehnt (Pfad-Traversal-Versuche via `../` werden blockiert). Ohne diese Variable gilt keine Einschränkung. |\n\n## Verfügbare Tools\n\n### Issues\n\n| Tool | Beschreibung |\n|---|---|\n| `get_issue` | Ein Issue anhand seiner ID abrufen |\n| `get_issues` | Mehrere Issues per ID in einem Aufruf abrufen (1–50 IDs); nicht zugängliche IDs liefern `null` an ihrer Position, statt den gesamten Aufruf abzubrechen |\n| `list_issues` | Issues nach Projekt, Status, Autor u.v.m. filtern; optionales `select` für Feldprojektion und `status` für clientseitige Statusfilterung — kanonische englische Statusnamen (z.B. `\"new\"`, `\"resolved\"`) werden per ID abgeglichen und funktionieren damit sprachunabhängig auf lokalisierten Installationen |\n| `create_issue` | Neues Issue anlegen; `severity` und `priority` müssen kanonische englische Namen sein (z.B. `minor`, `major`, `normal`, `high`) — `get_issue_enums` aufrufen, um alle gültigen Werte und deren lokalisierte Bezeichnungen zu sehen; optionaler `handler`-Parameter akzeptiert einen Benutzernamen als Alternative zu `handler_id` (wird gegen die Projektmitglieder aufgelöst) |\n| `update_issue` | Bestehendes Issue bearbeiten; Enum-Felder (`status`, `priority`, `severity`, `resolution`, `reproducibility`) akzeptieren kanonische englische Namen, lokalisierte Namen oder numerische IDs — der Server löst Namen automatisch zu IDs auf |\n| `delete_issue` | Issue löschen |\n\n### Notizen\n\n| Tool | Beschreibung |\n|---|---|\n| `list_notes` | Alle Notizen eines Issues auflisten |\n| `add_note` | Notiz zu einem Issue hinzufügen |\n| `delete_note` | Notiz löschen |\n\n### Anhänge\n\n| Tool | Beschreibung |\n|---|---|\n| `list_issue_files` | Anhänge eines Issues auflisten |\n| `upload_file` | Datei an ein Issue anhängen – entweder per lokalem `file_path` oder Base64-kodiertem `content` + `filename` |\n\n### Beziehungen\n\n| Tool | Beschreibung |\n|---|---|\n| `add_relationship` | Beziehung zwischen zwei Issues erstellen; optionaler `type_name`-Parameter akzeptiert einen String-Namen (z.B. `\"related_to\"`, `\"duplicate_of\"`) als Alternative zur numerischen `type_id` |\n| `remove_relationship` | Beziehung von einem Issue entfernen (die `id` aus dem Beziehungsobjekt verwenden, nicht die type-ID) |\n\n### Beobachter\n\n| Tool | Beschreibung |\n|---|---|\n| `add_monitor` | Einen Benutzer als Beobachter eines Issues eintragen |\n| `remove_monitor` | Benutzer als Beobachter eines Issues austragen |\n\n### Tags\n\n| Tool | Beschreibung |\n|---|---|\n| `list_tags` | Alle verfügbaren Tags auflisten; greift auf den Metadaten-Cache zurück, wenn `GET /tags` mit 404 antwortet (vorher `sync_metadata` ausführen) |\n| `attach_tags` | Tags an ein Issue hängen |\n| `detach_tag` | Tag von einem Issue entfernen |\n\n### Projekte\n\n| Tool | Beschreibung |\n|---|---|\n| `list_projects` | Alle zugänglichen Projekte auflisten; gibt normalisierte Projektdaten zurück (konsistent mit dem `sync_metadata`-Cache) |\n| `get_project_versions` | Versionen eines Projekts abrufen; optionale Booleans `obsolete` und `inherit` für veraltete bzw. vom Elternprojekt geerbte Versionen |\n| `get_project_categories` | Kategorien eines Projekts abrufen |\n| `get_project_users` | Benutzer eines Projekts abrufen |\n| `find_project_member` | Projektmitglieder nach Name, Realname oder E-Mail suchen (Teilstring-Suche, Groß-/Kleinschreibung ignoriert); optionale Parameter `query` und `limit` (Standard 10, max. 100); Cache-first |\n\n### Semantische Suche *(optional)*\n\nStatt einfachem Keyword-Matching versteht die semantische Suche die *Bedeutung* einer Anfrage. Formuliere in natürlicher Sprache — die Suche findet konzeptuell verwandte Issues, auch wenn die genauen Begriffe nicht übereinstimmen:\n\n- *„Login funktioniert nach Passwort-Reset nicht\"* — findet Issues rund um Authentifizierungsgrenzfälle\n- *„Performance-Probleme auf der Checkout-Seite\"* — liefert verwandte Meldungen unabhängig von der verwendeten Terminologie\n- *„doppelte Einträge in der Rechnungsliste\"* — erkennt auch Issues, die als „zweifach angezeigt\", „dupliziert\" o.ä. beschrieben sind\n\nDas Embedding-Modell (~80 MB) läuft vollständig **offline** — kein OpenAI-Key, keine externe API. Es wird beim ersten Start einmalig heruntergeladen und lokal gecacht. Issues werden bei jedem Serverstart inkrementell indexiert (nur neue und geänderte Issues werden neu verarbeitet).\n\nAktivierung mit `MANTIS_SEARCH_ENABLED=true`.\n\n| Tool | Beschreibung |\n|---|---|\n| `search_issues` | Natürlichsprachige Suche über alle indizierten Issues – liefert Top-N-Ergebnisse mit Cosine-Similarity-Score; optionales `select` (kommagetrennte Feldnamen) reichert jedes Ergebnis mit den angeforderten Issue-Feldern an; optionales `highlight` (boolean, Standard `false`) fügt je Ergebnis ein `highlights`-Feld mit keyword-basierten Ausschnitten aus `summary` und `description` hinzu (Treffer werden in `**fett**` dargestellt) |\n| `rebuild_search_index` | Suchindex aufbauen oder aktualisieren; `full: true` löscht und baut ihn vollständig neu |\n| `get_search_index_status` | Aktuellen Füllstand des Suchindex zurückgeben: wie viele Issues bereits indiziert sind im Verhältnis zur Gesamtanzahl, plus Zeitstempel der letzten Synchronisation |\n\n#### Welches Backend wählen?\n\n| | `vectra` *(Standard)* | `sqlite-vec` |\n|---|---|---|\n| Abhängigkeiten | Keine (reines JS) | Benötigt native Build-Tools |\n| Installation | Enthalten | `npm install sqlite-vec better-sqlite3` |\n| Geeignet für | Bis ~10.000 Issues | Ab 10.000 Issues |\n| Performance | Für die meisten Instanzen ausreichend | Schneller bei großen Datenmengen |\n\nMit `vectra` starten. Zu `sqlite-vec` wechseln, wenn Indexierungszeiten oder Abfragen spürbar langsam werden.\n\n```bash\nnpm install sqlite-vec better-sqlite3\n# dann MANTIS_SEARCH_BACKEND=sqlite-vec setzen\n```\n\n### Metadaten \u0026 System\n\n| Tool | Beschreibung |\n|---|---|\n| `get_issue_fields` | Alle gültigen Feldnamen für den `select`-Parameter von `list_issues` zurückgeben |\n| `get_metadata` | Kompakte Metadaten-Zusammenfassung abrufen: Anzahl Projekte/Tags und Anzahl Benutzer/Versionen/Kategorien je Projekt; für vollständige Arrays `get_metadata_full` verwenden |\n| `get_metadata_full` | Vollständigen rohen Metadaten-Cache als minifiziertes JSON zurückgeben (alle Projekte mit vollständigen Feldern, Benutzer/Versionen/Kategorien je Projekt, alle Tags) |\n| `sync_metadata` | Metadaten-Cache neu befüllen |\n| `list_filters` | Gespeicherte Filter auflisten |\n| `get_current_user` | Eigenes Benutzerprofil abrufen |\n| `list_languages` | Verfügbare Sprachen auflisten |\n| `get_config` | Server-Konfiguration (Basis-URL, Cache-TTL) anzeigen |\n| `get_issue_enums` | Gültige ID/Name-Paare für alle Enum-Felder zurückgeben (Severity, Status, Priority, Resolution, Reproducibility) — vor `create_issue` / `update_issue` verwenden, um korrekte Werte nachzuschlagen; auf lokalisierten Installationen kann jeder Eintrag ein `canonical_name`-Feld mit dem englischen Standard-API-Namen enthalten |\n| `get_mantis_version` | MantisBT-Version abrufen und auf Updates prüfen |\n| `get_mcp_version` | Version dieser mantisbt-mcp-server-Instanz zurückgeben |\n\n## Verfügbare Ressourcen\n\nMCP-Ressourcen sind URI-adressierbare, schreibgeschützte Daten, die Clients direkt abrufen können, ohne ein Tool aufzurufen. Sie sind das dritte MCP-Primitiv neben Tools und Prompts. Hinweis: Ressourcen werden von MCP-Clients weniger breit unterstützt als Tools — bitte die Dokumentation des jeweiligen Clients prüfen.\n\n| Ressource-URI | Beschreibung |\n|---|---|\n| `mantis://me` | Profil des authentifizierten API-Benutzers (Live-Abruf) |\n| `mantis://projects` | Alle zugänglichen MantisBT-Projekte als kompakte Liste (Cache-basiert, Aktualisierung via `sync_metadata`) |\n| `mantis://projects/{id}` | Kombinierte Projektansicht: Projektfelder + Benutzer + Versionen + Kategorien in einem Aufruf; Cache-first, List-Support zur Aufzählung aller verfügbaren Projekt-URIs |\n| `mantis://enums` | Gültige Werte für alle Issue-Enum-Felder: Severity, Priority, Status, Resolution, Reproducibility (Live-Abruf) |\n\n## Verfügbare Prompts\n\nMCP-Prompt-Templates sind Gesprächseinstiege, die den LLM anweisen, strukturierte Eingaben zu sammeln und dann das passende Tool aufzurufen. Es handelt sich nicht um Tools — sie starten einen geführten Arbeitsablauf.\n\n| Prompt | Pflichtargumente | Optionale Argumente | Beschreibung |\n|---|---|---|---|\n| `create-bug-report` | `project_id`, `category`, `summary`, `description` | `steps_to_reproduce`, `expected`, `actual`, `environment` | Führt durch einen strukturierten Bug-Report und ruft `create_issue` auf |\n| `create-feature-request` | `project_id`, `category`, `summary`, `description` | `use_case` | Führt durch einen Feature-Request und ruft `create_issue` auf |\n| `summarize-issue` | `issue_id` | – | Ruft das Issue per `get_issue` ab und liefert eine prägnante Zusammenfassung |\n| `project-status` | `project_id` | – | Listet Issues per `list_issues` auf und erstellt einen Status-Report nach Schweregrad |\n\n## HTTP-Modus\n\nFür den Einsatz als eigenständiger Server (z.B. in Remote-Setups):\n\n```bash\nMANTIS_BASE_URL=... MANTIS_API_KEY=... TRANSPORT=http PORT=3456 node dist/index.js\n\n# Mit Token-Authentifizierung und expliziter Bind-Adresse (erforderlich für Docker/Remote):\n# MCP_HTTP_TOKEN=secret MANTIS_BASE_URL=... MANTIS_API_KEY=... \\\n#   TRANSPORT=http PORT=3456 MCP_HTTP_HOST=0.0.0.0 node dist/index.js\n```\n\nHealthcheck: `GET http://localhost:3456/health` (immer öffentlich, kein Token erforderlich)\n\n## Dokumentation\n\n- [**Cookbook**](docs/cookbook.de.md) — Tool-orientierte Rezepte mit direkt verwendbaren Parameter-Beispielen für alle registrierten Tools\n- [**Anwendungsbeispiele**](docs/examples.de.md) — Beispiele in natürlicher Sprache für alltägliche Anwendungsfälle (keine Tool-Namen erforderlich)\n\n## Entwicklung\n\n```bash\nnpm run init         # Ersteinrichtung: Abhängigkeiten, Git-Hooks, Typprüfung\nnpm run build        # TypeScript → dist/ kompilieren\nnpm run typecheck    # Typprüfung ohne Ausgabe\nnpm run dev          # Watch-Modus für Entwicklung\nnpm test             # Tests ausführen (vitest)\nnpm run test:watch   # Tests im Watch-Modus\nnpm run test:coverage # Coverage-Report\n```\n\n## Lizenz\n\nMIT – siehe [LICENSE](LICENSE)\n\n## Mitwirken\n\nBeiträge willkommen! Bitte [CONTRIBUTING.md](CONTRIBUTING.md) lesen.\nRepository: [codeberg.org/dpesch/mantisbt-mcp-server](https://codeberg.org/dpesch/mantisbt-mcp-server)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdpesch%2Fmantisbt-mcp-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdpesch%2Fmantisbt-mcp-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdpesch%2Fmantisbt-mcp-server/lists"}