@dpesch/mantisbt-mcp-server 1.0.0 → 1.0.1

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,32 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ ci:
11
+ runs-on: codeberg-small
12
+
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - name: Set up Node.js
17
+ uses: actions/setup-node@v4
18
+ with:
19
+ node-version: '20'
20
+ cache: 'npm'
21
+
22
+ - name: Install dependencies
23
+ run: npm ci
24
+
25
+ - name: Typecheck
26
+ run: npm run typecheck
27
+
28
+ - name: Test
29
+ run: npm test
30
+
31
+ - name: Build
32
+ run: npm run build
@@ -0,0 +1,57 @@
1
+ name: Publish to npm
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ jobs:
9
+ publish:
10
+ runs-on: codeberg-small
11
+
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+
15
+ - name: Set up Node.js
16
+ uses: actions/setup-node@v4
17
+ with:
18
+ node-version: '20'
19
+ cache: 'npm'
20
+ registry-url: 'https://registry.npmjs.org'
21
+
22
+ - name: Install dependencies
23
+ run: npm ci
24
+
25
+ - name: Typecheck
26
+ run: npm run typecheck
27
+
28
+ - name: Test
29
+ run: npm test
30
+
31
+ - name: Build
32
+ run: npm run build
33
+
34
+ - name: Publish to npm
35
+ run: npm publish --access public
36
+ env:
37
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
38
+
39
+ - name: Extract release notes from CHANGELOG
40
+ run: |
41
+ VERSION="${{ github.ref_name }}"
42
+ VERSION_NUM="${VERSION#v}"
43
+ awk "/^## \[${VERSION_NUM}\]/{found=1; next} found && /^## \[/{exit} found{print}" CHANGELOG.md \
44
+ | sed '/^[[:space:]]*$/d' > /tmp/release_notes.md
45
+ echo "Release notes:"
46
+ cat /tmp/release_notes.md
47
+
48
+ - name: Create Codeberg release
49
+ run: |
50
+ curl -s -X POST "https://codeberg.org/api/v1/repos/dpesch/mantisbt-mcp-server/releases" \
51
+ -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
52
+ -H "Content-Type: application/json" \
53
+ -d "$(jq -n \
54
+ --arg tag "${{ github.ref_name }}" \
55
+ --arg name "${{ github.ref_name }}" \
56
+ --rawfile body /tmp/release_notes.md \
57
+ '{tag_name: $tag, name: $name, body: $body, draft: false, prerelease: false}')"
package/CHANGELOG.md CHANGED
@@ -7,6 +7,17 @@ This project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## [1.0.1] – 2026-03-15
11
+
12
+ ### Added
13
+ - Gitea Actions CI workflow: typecheck, tests, build on every push
14
+ - Gitea Actions publish workflow: automatic npm publish and Codeberg release on version tags
15
+
16
+ ### Changed
17
+ - README badges: added CI status, npm version, and license badges
18
+
19
+ ---
20
+
10
21
  ## [1.0.0] – 2026-03-15
11
22
 
12
23
  First stable release.
package/README.de.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # MantisBT MCP Server
2
2
 
3
+ [![CI](https://codeberg.org/dpesch/mantisbt-mcp-server/actions/workflows/ci.yml/badge.svg)](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://codeberg.org/dpesch/mantisbt-mcp-server/actions/workflows/ci.yml/badge.svg)](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.1",
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
- }