@dpesch/mantisbt-mcp-server 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,80 @@
1
+ name: CI / Publish
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ tags:
7
+ - 'v*'
8
+ pull_request:
9
+ branches: [main]
10
+
11
+ jobs:
12
+ ci:
13
+ runs-on: codeberg-small
14
+
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+
18
+ - name: Set up Node.js
19
+ uses: actions/setup-node@v4
20
+ with:
21
+ node-version: '20'
22
+ cache: 'npm'
23
+
24
+ - name: Install dependencies
25
+ run: npm ci
26
+
27
+ - name: Typecheck
28
+ run: npm run typecheck
29
+
30
+ - name: Test
31
+ run: npm test
32
+
33
+ - name: Build
34
+ run: npm run build
35
+
36
+ publish:
37
+ runs-on: codeberg-small
38
+ needs: ci
39
+ if: startsWith(github.ref, 'refs/tags/v')
40
+
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+
44
+ - name: Set up Node.js
45
+ uses: actions/setup-node@v4
46
+ with:
47
+ node-version: '20'
48
+ cache: 'npm'
49
+ registry-url: 'https://registry.npmjs.org'
50
+
51
+ - name: Install dependencies
52
+ run: npm ci
53
+
54
+ - name: Build
55
+ run: npm run build
56
+
57
+ - name: Publish to npm
58
+ run: npm publish --access public
59
+ env:
60
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
61
+
62
+ - name: Extract release notes from CHANGELOG
63
+ run: |
64
+ VERSION="${{ github.ref_name }}"
65
+ VERSION_NUM="${VERSION#v}"
66
+ awk "/^## \[${VERSION_NUM}\]/{found=1; next} found && /^## \[/{exit} found{print}" CHANGELOG.md \
67
+ | sed '/^[[:space:]]*$/d' > /tmp/release_notes.md
68
+ echo "Release notes:"
69
+ cat /tmp/release_notes.md
70
+
71
+ - name: Create Codeberg release
72
+ run: |
73
+ curl -s -X POST "https://codeberg.org/api/v1/repos/dpesch/mantisbt-mcp-server/releases" \
74
+ -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
75
+ -H "Content-Type: application/json" \
76
+ -d "$(jq -n \
77
+ --arg tag "${{ github.ref_name }}" \
78
+ --arg name "${{ github.ref_name }}" \
79
+ --rawfile body /tmp/release_notes.md \
80
+ '{tag_name: $tag, name: $name, body: $body, draft: false, prerelease: false}')"
package/CHANGELOG.md CHANGED
@@ -7,6 +7,25 @@ This project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## [1.0.2] – 2026-03-15
11
+
12
+ ### Changed
13
+ - CI badge switched to shields.io for correct rendering on npmjs.com
14
+ - Publish workflow now depends on CI passing (`needs: ci`) before releasing
15
+
16
+ ---
17
+
18
+ ## [1.0.1] – 2026-03-15
19
+
20
+ ### Added
21
+ - Gitea Actions CI workflow: typecheck, tests, build on every push
22
+ - Gitea Actions publish workflow: automatic npm publish and Codeberg release on version tags
23
+
24
+ ### Changed
25
+ - README badges: added CI status, npm version, and license badges
26
+
27
+ ---
28
+
10
29
  ## [1.0.0] – 2026-03-15
11
30
 
12
31
  First stable release.
package/README.de.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # MantisBT MCP Server
2
2
 
3
+ [![CI](https://img.shields.io/gitea/actions/workflow/status/dpesch/mantisbt-mcp-server/ci.yml?gitea_url=https%3A%2F%2Fcodeberg.org&label=CI)](https://codeberg.org/dpesch/mantisbt-mcp-server/actions)
4
+ [![npm version](https://img.shields.io/npm/v/@dpesch/mantisbt-mcp-server)](https://www.npmjs.com/package/@dpesch/mantisbt-mcp-server)
5
+ [![license](https://img.shields.io/npm/l/@dpesch/mantisbt-mcp-server)](LICENSE)
6
+
3
7
  Ein [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.
4
8
 
5
9
  ## Voraussetzungen
package/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # MantisBT MCP Server
2
2
 
3
+ [![CI](https://img.shields.io/gitea/actions/workflow/status/dpesch/mantisbt-mcp-server/ci.yml?gitea_url=https%3A%2F%2Fcodeberg.org&label=CI)](https://codeberg.org/dpesch/mantisbt-mcp-server/actions)
4
+ [![npm version](https://img.shields.io/npm/v/@dpesch/mantisbt-mcp-server)](https://www.npmjs.com/package/@dpesch/mantisbt-mcp-server)
5
+ [![license](https://img.shields.io/npm/l/@dpesch/mantisbt-mcp-server)](LICENSE)
6
+
3
7
  A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that integrates the [MantisBT REST API](https://documenter.getpostman.com/view/29959/mantis-bug-tracker-rest-api) into Claude Code and other MCP-capable clients. Read, create, and update issues directly from your editor.
4
8
 
5
9
  ## Requirements
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dpesch/mantisbt-mcp-server",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "MCP server for MantisBT REST API – read and manage bug tracker issues",
5
5
  "author": "Dominik Pesch",
6
6
  "license": "MIT",
package/.env.local DELETED
@@ -1,2 +0,0 @@
1
- MANTIS_BASE_URL=https://mantis.dev.11com7.de
2
- MANTIS_API_KEY=3vhKDwxVavmCzRUR7Cp0Lk7F8E4dha6n
@@ -1,108 +0,0 @@
1
- {
2
- "id": 51,
3
- "name": "domAgent",
4
- "real_name": "Dominik Pesch (via Agent)",
5
- "email": "d.pesch+agent@11com7.de",
6
- "language": "german",
7
- "timezone": "Europe/Berlin",
8
- "access_level": {
9
- "id": 70,
10
- "name": "manager",
11
- "label": "Manager"
12
- },
13
- "created_at": "2026-02-28T09:08:30+01:00",
14
- "projects": [
15
- {
16
- "id": 30,
17
- "name": "((Haus)) (Bolliggasse 1a)"
18
- },
19
- {
20
- "id": 54,
21
- "name": "11com7 Claude MetaRepo"
22
- },
23
- {
24
- "id": 2,
25
- "name": "11com7 ContentGo-Lib"
26
- },
27
- {
28
- "id": 48,
29
- "name": "11com7 DevServer"
30
- },
31
- {
32
- "id": 25,
33
- "name": "11com7 GmbH"
34
- },
35
- {
36
- "id": 39,
37
- "name": "11com7 Hosting (Keyweb, Ansible)"
38
- },
39
- {
40
- "id": 44,
41
- "name": "11com7-Ausbildung-FIAE"
42
- },
43
- {
44
- "id": 52,
45
- "name": "11com7-DVMS (Datenschutzverletzungsmelder)"
46
- },
47
- {
48
- "id": 5,
49
- "name": "11com7-Homepage"
50
- },
51
- {
52
- "id": 27,
53
- "name": "b11com7"
54
- },
55
- {
56
- "id": 3,
57
- "name": "BIBB NAA309"
58
- },
59
- {
60
- "id": 11,
61
- "name": "BIBB wbmonitor"
62
- },
63
- {
64
- "id": 38,
65
- "name": "DSGV Budgetanalyse 3"
66
- },
67
- {
68
- "id": 28,
69
- "name": "DSGV Finanzchecker (App)"
70
- },
71
- {
72
- "id": 45,
73
- "name": "DSGV Finanzchecker (Landingpage)"
74
- },
75
- {
76
- "id": 40,
77
- "name": "DSGV Login"
78
- },
79
- {
80
- "id": 26,
81
- "name": "DSGV Referenzbudgets"
82
- },
83
- {
84
- "id": 8,
85
- "name": "DSGV Vortragsservice"
86
- },
87
- {
88
- "id": 14,
89
- "name": "DSGV Web-Budgetplaner"
90
- },
91
- {
92
- "id": 42,
93
- "name": "Lingua-World"
94
- },
95
- {
96
- "id": 49,
97
- "name": "SIK M&E-App"
98
- },
99
- {
100
- "id": 21,
101
- "name": "Uni Bonn (Hausprint V2)"
102
- },
103
- {
104
- "id": 53,
105
- "name": "ZEEEM GSM-Landingpage"
106
- }
107
- ]
108
- }
@@ -1,320 +0,0 @@
1
- {
2
- "issues": [
3
- {
4
- "id": 7856,
5
- "summary": "statusline-command.sh: Usage-Statistiken ergaenzt",
6
- "description": "## Was ist passiert?\nstatusline-command.sh verwendete cygpath hartcodiert für USAGE_CACHE und USAGE_FETCHER.\nAuf WSL und Linux wurden die Pfade nicht aufgelöst — die Usage-Statistiken fehlten in der Statusleiste.\n\n## Betroffene Komponente\n- Skript: statusline-command.sh\n- Dateien: setup/statusline-command.sh, ~/.claude/statusline-command.sh\n- Plattform: beide\n\n## Ursachenanalyse\nDie Variablen USAGE_CACHE und USAGE_FETCHER wurden mit $(cygpath ...) gesetzt,\nohne Fallback für WSL/Linux.\n\n## Lösungsansätze\n1. Plattform-Erkennung: cygpath verfügbar -> Windows, sonst $HOME (WSL/Linux)\n2. _CLAUDE_HOME als gemeinsame Hilfsvariable\n3. USAGE_CACHE und USAGE_FETCHER davon ableiten\n\n## Hinweise zur Umsetzung\nÄnderungen wurden lokal vorgenommen, aber noch nicht commited oder gepushed.\nSiehe Kommentar für den konkreten Diff.",
7
- "project": {
8
- "id": 54,
9
- "name": "11com7 Claude MetaRepo"
10
- },
11
- "category": {
12
- "id": 350,
13
- "name": "Konfiguration"
14
- },
15
- "reporter": {
16
- "id": 52,
17
- "name": "ppAgent"
18
- },
19
- "handler": {
20
- "id": 51,
21
- "name": "domAgent",
22
- "real_name": "Dominik Pesch (via Agent)",
23
- "email": "d.pesch+agent@11com7.de"
24
- },
25
- "status": {
26
- "id": 80,
27
- "name": "resolved",
28
- "label": "erledigt",
29
- "color": "#e8e8e8"
30
- },
31
- "resolution": {
32
- "id": 20,
33
- "name": "fixed",
34
- "label": "erledigt"
35
- },
36
- "view_state": {
37
- "id": 10,
38
- "name": "public",
39
- "label": "öffentlich"
40
- },
41
- "priority": {
42
- "id": 30,
43
- "name": "normal",
44
- "label": "normal"
45
- },
46
- "severity": {
47
- "id": 210,
48
- "name": "Wartung",
49
- "label": "Wartung"
50
- },
51
- "reproducibility": {
52
- "id": 70,
53
- "name": "have not tried",
54
- "label": "nicht getestet"
55
- },
56
- "sticky": false,
57
- "created_at": "2026-03-13T15:51:57+01:00",
58
- "updated_at": "2026-03-15T08:35:48+01:00",
59
- "notes": [
60
- {
61
- "id": 3982,
62
- "reporter": {
63
- "id": 52,
64
- "name": "ppAgent"
65
- },
66
- "text": "## Ausstehende Aenderung — setup/statusline-command.sh\n\nDie Aenderung wurde lokal erstellt, aber noch nicht commited. Ein Agent kann sie direkt uebernehmen.\n\n### Diff\n\n```diff\n@@ -34,8 +34,13 @@ else\n fi\n \n # Rate-Limit-Usage aus Cache lesen; bei veraltetem Cache Refresh im Hintergrund anstoessen\n-USAGE_CACHE=\"$(cygpath \"$USERPROFILE\")/.claude/usage-rate-cache.json\"\n-USAGE_FETCHER=\"$(cygpath \"$USERPROFILE\")/.claude/usage-fetcher.sh\"\n+if command -v cygpath &>/dev/null; then\n+ _CLAUDE_HOME=\"$(cygpath \"$USERPROFILE\")/.claude\"\n+else\n+ _CLAUDE_HOME=\"$HOME/.claude\"\n+fi\n+USAGE_CACHE=\"$_CLAUDE_HOME/usage-rate-cache.json\"\n+USAGE_FETCHER=\"$_CLAUDE_HOME/usage-fetcher.sh\"\n usage_str=\"\"\n```\n\n### Commit-Vorschlag\n\n```\nErgaenze WSL/Linux-Pfad-Fallback in statusline-command.sh\n```\n\nDie Aenderung muss identisch in `setup/statusline-command.sh` (Repo) und\n`~/.claude/statusline-command.sh` (deployed) vorgenommen werden.",
67
- "view_state": {
68
- "id": 10,
69
- "name": "public",
70
- "label": "öffentlich"
71
- },
72
- "attachments": [],
73
- "type": "note",
74
- "created_at": "2026-03-13T15:58:50+01:00",
75
- "updated_at": "2026-03-13T15:58:50+01:00"
76
- },
77
- {
78
- "id": 3984,
79
- "reporter": {
80
- "id": 51,
81
- "name": "domAgent",
82
- "real_name": "Dominik Pesch (via Agent)",
83
- "email": "d.pesch+agent@11com7.de"
84
- },
85
- "text": "`setup/statusline-command.sh` verwendete `cygpath \"$USERPROFILE\"` hartcodiert zum Auflösen der Pfade für `USAGE_CACHE` und `USAGE_FETCHER`. `cygpath` ist ausschließlich unter Windows (Git Bash / Cygwin) verfügbar — auf WSL und Linux ist der Befehl nicht vorhanden, weshalb die Variablen auf leere Strings gesetzt wurden und die Usage-Statistiken in der Statusleiste komplett fehlten.\n\nBehoben durch eine Plattform-Erkennung: Wenn `cygpath` verfügbar ist (Windows), wird `_CLAUDE_HOME` wie bisher per `cygpath \"$USERPROFILE\"` gesetzt; andernfalls (WSL/Linux) wird `$HOME/.claude` verwendet. `USAGE_CACHE` und `USAGE_FETCHER` leiten sich dann gemeinsam von `_CLAUDE_HOME` ab.\n\nCommit: e66a7ca",
86
- "view_state": {
87
- "id": 10,
88
- "name": "public",
89
- "label": "öffentlich"
90
- },
91
- "attachments": [],
92
- "type": "note",
93
- "created_at": "2026-03-13T16:22:40+01:00",
94
- "updated_at": "2026-03-13T16:22:40+01:00"
95
- }
96
- ],
97
- "history": [
98
- {
99
- "created_at": "2026-03-13T15:51:57+01:00",
100
- "user": {
101
- "id": 52,
102
- "name": "ppAgent"
103
- },
104
- "type": {
105
- "id": 1,
106
- "name": "issue-new"
107
- },
108
- "message": "Neuer Eintrag"
109
- },
110
- {
111
- "created_at": "2026-03-13T15:51:57+01:00",
112
- "user": {
113
- "id": 52,
114
- "name": "ppAgent"
115
- },
116
- "field": {
117
- "name": "status",
118
- "label": "Status"
119
- },
120
- "type": {
121
- "id": 0,
122
- "name": "field-updated"
123
- },
124
- "old_value": {
125
- "id": 10,
126
- "name": "new",
127
- "label": "neu",
128
- "color": "#eeb3aa"
129
- },
130
- "new_value": {
131
- "id": 50,
132
- "name": "assigned",
133
- "label": "zugewiesen",
134
- "color": "#afbed5"
135
- },
136
- "message": "Status",
137
- "change": "neu => zugewiesen"
138
- },
139
- {
140
- "created_at": "2026-03-13T15:51:57+01:00",
141
- "user": {
142
- "id": 52,
143
- "name": "ppAgent"
144
- },
145
- "field": {
146
- "name": "handler",
147
- "label": "Bearbeitung durch"
148
- },
149
- "type": {
150
- "id": 0,
151
- "name": "field-updated"
152
- },
153
- "old_value": {
154
- "id": 0
155
- },
156
- "new_value": {
157
- "id": 51,
158
- "name": "domAgent",
159
- "real_name": "Dominik Pesch (via Agent)",
160
- "email": "d.pesch+agent@11com7.de"
161
- },
162
- "message": "Bearbeitung durch",
163
- "change": " => domAgent"
164
- },
165
- {
166
- "created_at": "2026-03-13T15:58:50+01:00",
167
- "user": {
168
- "id": 52,
169
- "name": "ppAgent"
170
- },
171
- "type": {
172
- "id": 6,
173
- "name": "issue-description-updated"
174
- },
175
- "message": "Beschreibung aktualisiert"
176
- },
177
- {
178
- "created_at": "2026-03-13T15:58:50+01:00",
179
- "user": {
180
- "id": 52,
181
- "name": "ppAgent"
182
- },
183
- "type": {
184
- "id": 2,
185
- "name": "note-added"
186
- },
187
- "note": {
188
- "id": 3982
189
- },
190
- "message": "Notiz hinzugefügt: 0003982"
191
- },
192
- {
193
- "created_at": "2026-03-13T16:10:05+01:00",
194
- "user": {
195
- "id": 52,
196
- "name": "ppAgent"
197
- },
198
- "type": {
199
- "id": 6,
200
- "name": "issue-description-updated"
201
- },
202
- "message": "Beschreibung aktualisiert"
203
- },
204
- {
205
- "created_at": "2026-03-13T16:22:40+01:00",
206
- "user": {
207
- "id": 51,
208
- "name": "domAgent",
209
- "real_name": "Dominik Pesch (via Agent)",
210
- "email": "d.pesch+agent@11com7.de"
211
- },
212
- "type": {
213
- "id": 2,
214
- "name": "note-added"
215
- },
216
- "note": {
217
- "id": 3984
218
- },
219
- "message": "Notiz hinzugefügt: 0003984"
220
- },
221
- {
222
- "created_at": "2026-03-13T16:22:49+01:00",
223
- "user": {
224
- "id": 51,
225
- "name": "domAgent",
226
- "real_name": "Dominik Pesch (via Agent)",
227
- "email": "d.pesch+agent@11com7.de"
228
- },
229
- "field": {
230
- "name": "status",
231
- "label": "Status"
232
- },
233
- "type": {
234
- "id": 0,
235
- "name": "field-updated"
236
- },
237
- "old_value": {
238
- "id": 50,
239
- "name": "assigned",
240
- "label": "zugewiesen",
241
- "color": "#afbed5"
242
- },
243
- "new_value": {
244
- "id": 80,
245
- "name": "resolved",
246
- "label": "erledigt",
247
- "color": "#e8e8e8"
248
- },
249
- "message": "Status",
250
- "change": "zugewiesen => erledigt"
251
- },
252
- {
253
- "created_at": "2026-03-13T16:22:49+01:00",
254
- "user": {
255
- "id": 51,
256
- "name": "domAgent",
257
- "real_name": "Dominik Pesch (via Agent)",
258
- "email": "d.pesch+agent@11com7.de"
259
- },
260
- "field": {
261
- "name": "resolution",
262
- "label": "Lösung"
263
- },
264
- "type": {
265
- "id": 0,
266
- "name": "field-updated"
267
- },
268
- "old_value": {
269
- "id": 10,
270
- "name": "open",
271
- "label": "offen"
272
- },
273
- "new_value": {
274
- "id": 20,
275
- "name": "fixed",
276
- "label": "erledigt"
277
- },
278
- "message": "Lösung",
279
- "change": "offen => erledigt"
280
- },
281
- {
282
- "created_at": "2026-03-15T08:35:40+01:00",
283
- "user": {
284
- "id": 51,
285
- "name": "domAgent",
286
- "real_name": "Dominik Pesch (via Agent)",
287
- "email": "d.pesch+agent@11com7.de"
288
- },
289
- "type": {
290
- "id": 25,
291
- "name": "tag-added"
292
- },
293
- "tag": {
294
- "id": 25,
295
- "name": "mcp-test"
296
- },
297
- "message": "Tag zugeordnet: mcp-test"
298
- },
299
- {
300
- "created_at": "2026-03-15T08:35:48+01:00",
301
- "user": {
302
- "id": 51,
303
- "name": "domAgent",
304
- "real_name": "Dominik Pesch (via Agent)",
305
- "email": "d.pesch+agent@11com7.de"
306
- },
307
- "type": {
308
- "id": 26,
309
- "name": "tag-deleted"
310
- },
311
- "tag": {
312
- "id": 25,
313
- "name": "mcp-test"
314
- },
315
- "message": "Tag entfernt: mcp-test"
316
- }
317
- ]
318
- }
319
- ]
320
- }