@dpesch/mantisbt-mcp-server 1.0.0

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.
Files changed (49) hide show
  1. package/.env.local +2 -0
  2. package/CHANGELOG.md +68 -0
  3. package/LICENSE +21 -0
  4. package/README.de.md +177 -0
  5. package/README.md +177 -0
  6. package/dist/cache.js +52 -0
  7. package/dist/client.js +114 -0
  8. package/dist/config.js +54 -0
  9. package/dist/constants.js +23 -0
  10. package/dist/index.js +120 -0
  11. package/dist/tools/config.js +107 -0
  12. package/dist/tools/files.js +37 -0
  13. package/dist/tools/filters.js +35 -0
  14. package/dist/tools/issues.js +191 -0
  15. package/dist/tools/metadata.js +119 -0
  16. package/dist/tools/monitors.js +38 -0
  17. package/dist/tools/notes.js +96 -0
  18. package/dist/tools/projects.js +127 -0
  19. package/dist/tools/relationships.js +54 -0
  20. package/dist/tools/tags.js +78 -0
  21. package/dist/tools/users.js +34 -0
  22. package/dist/tools/version.js +58 -0
  23. package/dist/types.js +4 -0
  24. package/dist/version-hint.js +117 -0
  25. package/package.json +41 -0
  26. package/scripts/record-fixtures.ts +138 -0
  27. package/tests/cache.test.ts +149 -0
  28. package/tests/client.test.ts +241 -0
  29. package/tests/config.test.ts +164 -0
  30. package/tests/fixtures/get_current_user.json +39 -0
  31. package/tests/fixtures/get_issue.json +151 -0
  32. package/tests/fixtures/get_project_categories.json +60 -0
  33. package/tests/fixtures/get_project_versions.json +3 -0
  34. package/tests/fixtures/get_project_versions_with_data.json +28 -0
  35. package/tests/fixtures/list_issues.json +67 -0
  36. package/tests/fixtures/list_projects.json +65 -0
  37. package/tests/fixtures/recorded/get_current_user.json +108 -0
  38. package/tests/fixtures/recorded/get_issue.json +320 -0
  39. package/tests/fixtures/recorded/get_project_categories.json +241 -0
  40. package/tests/fixtures/recorded/get_project_versions.json +3 -0
  41. package/tests/fixtures/recorded/list_issues.json +824 -0
  42. package/tests/fixtures/recorded/list_projects.json +10641 -0
  43. package/tests/helpers/mock-server.ts +32 -0
  44. package/tests/tools/issues.test.ts +130 -0
  45. package/tests/tools/projects.test.ts +169 -0
  46. package/tests/tools/users.test.ts +76 -0
  47. package/tests/version-hint.test.ts +230 -0
  48. package/tsconfig.build.json +8 -0
  49. package/vitest.config.ts +8 -0
@@ -0,0 +1,39 @@
1
+ {
2
+ "id": 51,
3
+ "name": "user_1",
4
+ "real_name": "User One",
5
+ "email": "user1@example.com",
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
+ { "id": 30, "name": "Project 1" },
16
+ { "id": 54, "name": "Project 2" },
17
+ { "id": 2, "name": "Project 3" },
18
+ { "id": 48, "name": "Project 4" },
19
+ { "id": 25, "name": "Project 5" },
20
+ { "id": 39, "name": "Project 6" },
21
+ { "id": 44, "name": "Project 7" },
22
+ { "id": 52, "name": "Project 8" },
23
+ { "id": 5, "name": "Project 9" },
24
+ { "id": 27, "name": "Project 10" },
25
+ { "id": 3, "name": "Project 11" },
26
+ { "id": 11, "name": "Project 12" },
27
+ { "id": 38, "name": "Project 13" },
28
+ { "id": 28, "name": "Project 14" },
29
+ { "id": 45, "name": "Project 15" },
30
+ { "id": 40, "name": "Project 16" },
31
+ { "id": 26, "name": "Project 17" },
32
+ { "id": 8, "name": "Project 18" },
33
+ { "id": 14, "name": "Project 19" },
34
+ { "id": 42, "name": "Project 20" },
35
+ { "id": 49, "name": "Project 21" },
36
+ { "id": 21, "name": "Project 22" },
37
+ { "id": 53, "name": "Project 23" }
38
+ ]
39
+ }
@@ -0,0 +1,151 @@
1
+ {
2
+ "issues": [
3
+ {
4
+ "id": 7856,
5
+ "summary": "Issue summary 1",
6
+ "description": "Issue description 1",
7
+ "project": { "id": 54, "name": "Project 2" },
8
+ "category": { "id": 350, "name": "Konfiguration" },
9
+ "reporter": { "id": 52, "name": "user_2" },
10
+ "handler": {
11
+ "id": 51,
12
+ "name": "user_1",
13
+ "real_name": "User One",
14
+ "email": "user1@example.com"
15
+ },
16
+ "status": {
17
+ "id": 80,
18
+ "name": "resolved",
19
+ "label": "erledigt",
20
+ "color": "#e8e8e8"
21
+ },
22
+ "resolution": {
23
+ "id": 20,
24
+ "name": "fixed",
25
+ "label": "erledigt"
26
+ },
27
+ "view_state": {
28
+ "id": 10,
29
+ "name": "public",
30
+ "label": "öffentlich"
31
+ },
32
+ "priority": {
33
+ "id": 30,
34
+ "name": "normal",
35
+ "label": "normal"
36
+ },
37
+ "severity": {
38
+ "id": 210,
39
+ "name": "Wartung",
40
+ "label": "Wartung"
41
+ },
42
+ "reproducibility": {
43
+ "id": 70,
44
+ "name": "have not tried",
45
+ "label": "nicht getestet"
46
+ },
47
+ "sticky": false,
48
+ "created_at": "2026-03-13T15:51:57+01:00",
49
+ "updated_at": "2026-03-15T08:35:48+01:00",
50
+ "notes": [
51
+ {
52
+ "id": 3982,
53
+ "reporter": { "id": 52, "name": "user_2" },
54
+ "text": "Note text 1",
55
+ "view_state": { "id": 10, "name": "public", "label": "öffentlich" },
56
+ "attachments": [],
57
+ "type": "note",
58
+ "created_at": "2026-03-13T15:58:50+01:00",
59
+ "updated_at": "2026-03-13T15:58:50+01:00"
60
+ },
61
+ {
62
+ "id": 3984,
63
+ "reporter": {
64
+ "id": 51,
65
+ "name": "user_1",
66
+ "real_name": "User One",
67
+ "email": "user1@example.com"
68
+ },
69
+ "text": "Note text 2",
70
+ "view_state": { "id": 10, "name": "public", "label": "öffentlich" },
71
+ "attachments": [],
72
+ "type": "note",
73
+ "created_at": "2026-03-13T16:22:40+01:00",
74
+ "updated_at": "2026-03-13T16:22:40+01:00"
75
+ }
76
+ ],
77
+ "history": [
78
+ {
79
+ "created_at": "2026-03-13T15:51:57+01:00",
80
+ "user": { "id": 52, "name": "user_2" },
81
+ "type": { "id": 1, "name": "issue-new" },
82
+ "message": "Neuer Eintrag"
83
+ },
84
+ {
85
+ "created_at": "2026-03-13T15:51:57+01:00",
86
+ "user": { "id": 52, "name": "user_2" },
87
+ "field": { "name": "status", "label": "Status" },
88
+ "type": { "id": 0, "name": "field-updated" },
89
+ "old_value": { "id": 10, "name": "new", "label": "neu", "color": "#eeb3aa" },
90
+ "new_value": { "id": 50, "name": "assigned", "label": "zugewiesen", "color": "#afbed5" },
91
+ "message": "Status",
92
+ "change": "neu => zugewiesen"
93
+ },
94
+ {
95
+ "created_at": "2026-03-13T15:51:57+01:00",
96
+ "user": { "id": 52, "name": "user_2" },
97
+ "field": { "name": "handler", "label": "Bearbeitung durch" },
98
+ "type": { "id": 0, "name": "field-updated" },
99
+ "old_value": { "id": 0 },
100
+ "new_value": {
101
+ "id": 51,
102
+ "name": "user_1",
103
+ "real_name": "User One",
104
+ "email": "user1@example.com"
105
+ },
106
+ "message": "Bearbeitung durch",
107
+ "change": " => user_1"
108
+ },
109
+ {
110
+ "created_at": "2026-03-13T16:22:40+01:00",
111
+ "user": {
112
+ "id": 51,
113
+ "name": "user_1",
114
+ "real_name": "User One",
115
+ "email": "user1@example.com"
116
+ },
117
+ "type": { "id": 2, "name": "note-added" },
118
+ "note": { "id": 3984 },
119
+ "message": "Notiz hinzugefügt: 0003984"
120
+ },
121
+ {
122
+ "created_at": "2026-03-13T16:22:49+01:00",
123
+ "user": {
124
+ "id": 51,
125
+ "name": "user_1",
126
+ "real_name": "User One",
127
+ "email": "user1@example.com"
128
+ },
129
+ "field": { "name": "status", "label": "Status" },
130
+ "type": { "id": 0, "name": "field-updated" },
131
+ "old_value": { "id": 50, "name": "assigned", "label": "zugewiesen", "color": "#afbed5" },
132
+ "new_value": { "id": 80, "name": "resolved", "label": "erledigt", "color": "#e8e8e8" },
133
+ "message": "Status",
134
+ "change": "zugewiesen => erledigt"
135
+ },
136
+ {
137
+ "created_at": "2026-03-15T08:35:40+01:00",
138
+ "user": {
139
+ "id": 51,
140
+ "name": "user_1",
141
+ "real_name": "User One",
142
+ "email": "user1@example.com"
143
+ },
144
+ "type": { "id": 25, "name": "tag-added" },
145
+ "tag": { "id": 25, "name": "mcp-test" },
146
+ "message": "Tag zugeordnet: mcp-test"
147
+ }
148
+ ]
149
+ }
150
+ ]
151
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "categories": [
3
+ {
4
+ "id": 369,
5
+ "name": "API",
6
+ "project": { "id": 0, "name": null },
7
+ "status": "1"
8
+ },
9
+ {
10
+ "id": 176,
11
+ "name": "Außenbereich / GaLaBau",
12
+ "project": { "id": 30, "name": "Project 1" },
13
+ "status": "1",
14
+ "default_handler": { "id": 4, "name": "user_4" }
15
+ },
16
+ {
17
+ "id": 170,
18
+ "name": "Außenhülle",
19
+ "project": { "id": 30, "name": "Project 1" },
20
+ "status": "1"
21
+ },
22
+ {
23
+ "id": 372,
24
+ "name": "Automatisierung",
25
+ "project": { "id": 0, "name": null },
26
+ "status": "1"
27
+ },
28
+ {
29
+ "id": 351,
30
+ "name": "Build-Stack",
31
+ "project": { "id": 0, "name": null },
32
+ "status": "1"
33
+ },
34
+ {
35
+ "id": 171,
36
+ "name": "Elektro",
37
+ "project": { "id": 30, "name": "Project 1" },
38
+ "status": "1",
39
+ "default_handler": { "id": 2, "name": "user_5" }
40
+ },
41
+ {
42
+ "id": 350,
43
+ "name": "Konfiguration",
44
+ "project": { "id": 0, "name": null },
45
+ "status": "1"
46
+ },
47
+ {
48
+ "id": 364,
49
+ "name": "QS (Qualitätssicherung)",
50
+ "project": { "id": 0, "name": null },
51
+ "status": "1"
52
+ },
53
+ {
54
+ "id": 365,
55
+ "name": "Wartung (u. a. Vendors)",
56
+ "project": { "id": 0, "name": null },
57
+ "status": "1"
58
+ }
59
+ ]
60
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "versions": []
3
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "versions": [
3
+ {
4
+ "id": 101,
5
+ "name": "1.0.0",
6
+ "description": "",
7
+ "released": true,
8
+ "obsolete": false,
9
+ "timestamp": "2024-01-01T00:00:00+01:00"
10
+ },
11
+ {
12
+ "id": 102,
13
+ "name": "1.1.0",
14
+ "description": "",
15
+ "released": true,
16
+ "obsolete": false,
17
+ "timestamp": "2024-06-01T00:00:00+01:00"
18
+ },
19
+ {
20
+ "id": 103,
21
+ "name": "2.0.0",
22
+ "description": "",
23
+ "released": false,
24
+ "obsolete": false,
25
+ "timestamp": "2025-01-01T00:00:00+01:00"
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "issues": [
3
+ {
4
+ "id": 7856,
5
+ "summary": "Issue summary 1",
6
+ "description": "Issue description 1",
7
+ "project": { "id": 54, "name": "Project 2" },
8
+ "category": { "id": 350, "name": "Konfiguration" },
9
+ "reporter": { "id": 52, "name": "user_2" },
10
+ "handler": {
11
+ "id": 51,
12
+ "name": "user_1",
13
+ "real_name": "User One",
14
+ "email": "user1@example.com"
15
+ },
16
+ "status": { "id": 80, "name": "resolved", "label": "erledigt", "color": "#e8e8e8" },
17
+ "resolution": { "id": 20, "name": "fixed", "label": "erledigt" },
18
+ "priority": { "id": 30, "name": "normal", "label": "normal" },
19
+ "severity": { "id": 210, "name": "Wartung", "label": "Wartung" },
20
+ "sticky": false,
21
+ "created_at": "2026-03-13T15:51:57+01:00",
22
+ "updated_at": "2026-03-15T08:35:48+01:00"
23
+ },
24
+ {
25
+ "id": 7855,
26
+ "summary": "Issue summary 2",
27
+ "description": "Issue description 2",
28
+ "project": { "id": 54, "name": "Project 2" },
29
+ "category": { "id": 394, "name": "Hooks" },
30
+ "reporter": { "id": 52, "name": "user_2" },
31
+ "handler": {
32
+ "id": 51,
33
+ "name": "user_1",
34
+ "real_name": "User One",
35
+ "email": "user1@example.com"
36
+ },
37
+ "status": { "id": 80, "name": "resolved", "label": "erledigt", "color": "#e8e8e8" },
38
+ "resolution": { "id": 20, "name": "fixed", "label": "erledigt" },
39
+ "priority": { "id": 30, "name": "normal", "label": "normal" },
40
+ "severity": { "id": 210, "name": "Wartung", "label": "Wartung" },
41
+ "sticky": false,
42
+ "created_at": "2026-03-13T15:51:52+01:00",
43
+ "updated_at": "2026-03-13T16:22:49+01:00"
44
+ },
45
+ {
46
+ "id": 7854,
47
+ "summary": "Issue summary 3",
48
+ "description": "Issue description 3",
49
+ "project": { "id": 54, "name": "Project 2" },
50
+ "category": { "id": 393, "name": "Skills" },
51
+ "reporter": { "id": 53, "name": "user_3" },
52
+ "handler": {
53
+ "id": 51,
54
+ "name": "user_1",
55
+ "real_name": "User One",
56
+ "email": "user1@example.com"
57
+ },
58
+ "status": { "id": 80, "name": "resolved", "label": "erledigt", "color": "#e8e8e8" },
59
+ "resolution": { "id": 20, "name": "fixed", "label": "erledigt" },
60
+ "priority": { "id": 30, "name": "normal", "label": "normal" },
61
+ "severity": { "id": 50, "name": "kleinerer Fehler", "label": "kleinerer Fehler" },
62
+ "sticky": false,
63
+ "created_at": "2026-03-13T09:58:23+01:00",
64
+ "updated_at": "2026-03-13T11:25:19+01:00"
65
+ }
66
+ ]
67
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "projects": [
3
+ {
4
+ "id": 30,
5
+ "name": "Project 1",
6
+ "status": { "id": 10, "name": "development" },
7
+ "enabled": true,
8
+ "view_state": { "id": 10, "name": "public" },
9
+ "access_level": { "id": 10, "label": "viewer" },
10
+ "categories": [
11
+ {
12
+ "id": 369,
13
+ "name": "API",
14
+ "project": { "id": 0, "name": null },
15
+ "status": "1"
16
+ },
17
+ {
18
+ "id": 176,
19
+ "name": "Außenbereich / GaLaBau",
20
+ "project": { "id": 30, "name": "Project 1" },
21
+ "status": "1",
22
+ "default_handler": { "id": 4, "name": "user_4" }
23
+ },
24
+ {
25
+ "id": 350,
26
+ "name": "Konfiguration",
27
+ "project": { "id": 0, "name": null },
28
+ "status": "1"
29
+ }
30
+ ],
31
+ "versions": [],
32
+ "subprojects": []
33
+ },
34
+ {
35
+ "id": 54,
36
+ "name": "Project 2",
37
+ "status": { "id": 10, "name": "development" },
38
+ "enabled": true,
39
+ "view_state": { "id": 10, "name": "public" },
40
+ "access_level": { "id": 10, "label": "viewer" },
41
+ "categories": [
42
+ {
43
+ "id": 350,
44
+ "name": "Konfiguration",
45
+ "project": { "id": 0, "name": null },
46
+ "status": "1"
47
+ },
48
+ {
49
+ "id": 393,
50
+ "name": "Skills",
51
+ "project": { "id": 54, "name": "Project 2" },
52
+ "status": "1"
53
+ },
54
+ {
55
+ "id": 394,
56
+ "name": "Hooks",
57
+ "project": { "id": 54, "name": "Project 2" },
58
+ "status": "1"
59
+ }
60
+ ],
61
+ "versions": [],
62
+ "subprojects": []
63
+ }
64
+ ]
65
+ }
@@ -0,0 +1,108 @@
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
+ }