@dpesch/mantisbt-mcp-server 1.11.0 → 1.12.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.
- package/CHANGELOG.md +16 -0
- package/README.de.md +3 -0
- package/README.md +3 -0
- package/dist/client.js +42 -12
- package/dist/config.js +38 -2
- package/dist/index.js +5 -1
- package/docs/cookbook.de.md +37 -0
- package/docs/cookbook.md +37 -0
- package/package.json +1 -1
- package/server.json +10 -2
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,22 @@ This project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
+
## [1.12.0] – 2026-08-28
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- Added `MANTIS_USE_INDEX_PHP=true` for MantisBT installations without URL rewriting. REST requests use `/api/rest/index.php/` instead of `/api/rest/` when enabled. Thanks to [@iantrudell](https://github.com/iantrudell) for the contribution.
|
|
19
|
+
- `MANTIS_USE_INDEX_PHP` is detected automatically when `MANTIS_BASE_URL` ends with `/api/rest/index.php`, so pasting the full REST URL of an installation without URL rewriting is enough. An explicitly set value always wins; a base URL contradicting an explicit `false` is reported on stderr instead of failing silently.
|
|
20
|
+
- New cookbook section "Connect to an installation without URL rewriting" in `docs/cookbook.md` and `docs/cookbook.de.md`.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- `MANTIS_BASE_URL` suffix normalization is now case-insensitive, so `/API/REST` is stripped like `/api/rest`.
|
|
25
|
+
- `.env.local` is now read once per process instead of once per config path, removing a duplicate file read on every startup.
|
|
26
|
+
- `README.md` and `README.de.md` now link to each other, making the German translation discoverable.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
14
30
|
## [1.11.0] – 2026-07-03
|
|
15
31
|
|
|
16
32
|
### Added
|
package/README.de.md
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
[](https://lobehub.com/mcp/dpesch-mantisbt-mcp-server)
|
|
7
7
|
[](https://glama.ai/mcp/servers/dpesch/mantisbt-mcp-server)
|
|
8
8
|
|
|
9
|
+
[English](README.md) · **Deutsch**
|
|
10
|
+
|
|
9
11
|
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.
|
|
10
12
|
|
|
11
13
|
## Voraussetzungen
|
|
@@ -68,6 +70,7 @@ npm run build
|
|
|
68
70
|
|---|---|---|---|
|
|
69
71
|
| `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. |
|
|
70
72
|
| `MANTIS_API_KEY` | ✅ | – | API-Token für die Authentifizierung |
|
|
73
|
+
| `MANTIS_USE_INDEX_PHP` | – | auto | Auf `true` setzen, wenn URL-Rewriting nicht verfügbar ist — REST-Anfragen verwenden dann `/api/rest/index.php/` statt `/api/rest/`. Wird automatisch erkannt, wenn `MANTIS_BASE_URL` auf `/api/rest/index.php` endet; ein explizit gesetzter Wert hat immer Vorrang. Siehe [Cookbook](docs/cookbook.de.md#installation-ohne-url-rewriting-anbinden). |
|
|
71
74
|
| `MANTIS_CACHE_DIR` | – | `~/.cache/mantisbt-mcp` | Verzeichnis für den Metadaten-Cache |
|
|
72
75
|
| `MANTIS_CACHE_TTL` | – | `3600` | Cache-Lebensdauer in Sekunden |
|
|
73
76
|
| `TRANSPORT` | – | `stdio` | Transport-Modus: `stdio` oder `http` |
|
package/README.md
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
[](https://lobehub.com/mcp/dpesch-mantisbt-mcp-server)
|
|
7
7
|
[](https://glama.ai/mcp/servers/dpesch/mantisbt-mcp-server)
|
|
8
8
|
|
|
9
|
+
**English** · [Deutsch](README.de.md)
|
|
10
|
+
|
|
9
11
|
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.
|
|
10
12
|
|
|
11
13
|
## Requirements
|
|
@@ -68,6 +70,7 @@ npm run build
|
|
|
68
70
|
|---|---|---|---|
|
|
69
71
|
| `MANTIS_BASE_URL` | ✅ | – | Base URL of your MantisBT installation. Both `https://your-mantis.example.com` and `https://your-mantis.example.com/api/rest` are accepted — the `/api/rest` suffix is normalized automatically. |
|
|
70
72
|
| `MANTIS_API_KEY` | ✅ | – | API token for authentication |
|
|
73
|
+
| `MANTIS_USE_INDEX_PHP` | – | auto | Set to `true` when URL rewriting is unavailable — REST requests then use `/api/rest/index.php/` instead of `/api/rest/`. Detected automatically when `MANTIS_BASE_URL` ends with `/api/rest/index.php`; an explicit value always wins. See the [cookbook](docs/cookbook.md#connect-to-an-installation-without-url-rewriting). |
|
|
71
74
|
| `MANTIS_CACHE_DIR` | – | `~/.cache/mantisbt-mcp` | Directory for the metadata cache |
|
|
72
75
|
| `MANTIS_CACHE_TTL` | – | `3600` | Cache lifetime in seconds |
|
|
73
76
|
| `TRANSPORT` | – | `stdio` | Transport mode: `stdio` or `http` |
|
package/dist/client.js
CHANGED
|
@@ -2,13 +2,35 @@
|
|
|
2
2
|
// Helpers
|
|
3
3
|
// ---------------------------------------------------------------------------
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* Recognises a MANTIS_BASE_URL that already points at the REST API, with or
|
|
6
|
+
* without the index.php front controller. Single source of truth for both
|
|
7
|
+
* stripping the suffix and detecting the entry point, so the two can never
|
|
8
|
+
* disagree. Case-insensitive: MantisBT is commonly hosted on case-insensitive
|
|
9
|
+
* servers, which is exactly the IIS/Apache-without-rewrite crowd this matters
|
|
10
|
+
* for.
|
|
11
|
+
*/
|
|
12
|
+
const REST_API_SUFFIX = /\/api\/rest(\/index\.php)?\/?$/i;
|
|
13
|
+
/**
|
|
14
|
+
* Normalise a MANTIS_BASE_URL so that it never ends with "/api/rest",
|
|
15
|
+
* "/api/rest/index.php", or a trailing slash. The client appends the REST API
|
|
16
|
+
* prefix itself, so URLs that already include it must not produce a doubled
|
|
17
|
+
* prefix.
|
|
18
|
+
*
|
|
19
|
+
* The "/index.php" part is stripped regardless of the useIndexPhp flag — this
|
|
20
|
+
* function only produces the bare host prefix. Whether requests then route
|
|
21
|
+
* through index.php is answered by usesIndexPhpEntryPoint() on the
|
|
22
|
+
* *unnormalised* URL.
|
|
9
23
|
*/
|
|
10
24
|
export function normalizeBaseUrl(url) {
|
|
11
|
-
return url.replace(
|
|
25
|
+
return url.replace(REST_API_SUFFIX, '').replace(/\/$/, '');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* True when an unnormalised base URL already routes through the index.php
|
|
29
|
+
* front controller. Used by the config layer to default MANTIS_USE_INDEX_PHP
|
|
30
|
+
* for users who paste their full REST URL.
|
|
31
|
+
*/
|
|
32
|
+
export function usesIndexPhpEntryPoint(url) {
|
|
33
|
+
return REST_API_SUFFIX.exec(url)?.[1] !== undefined;
|
|
12
34
|
}
|
|
13
35
|
export function buildIssueViewUrl(baseUrl, issueId) {
|
|
14
36
|
return `${baseUrl}/view.php?id=${issueId}`;
|
|
@@ -31,10 +53,17 @@ export class MantisClient {
|
|
|
31
53
|
credentialFactory;
|
|
32
54
|
responseObserver;
|
|
33
55
|
resolvedCredentials;
|
|
34
|
-
constructor(baseUrlOrFactory, apiKeyOrObserver, responseObserver) {
|
|
56
|
+
constructor(baseUrlOrFactory, apiKeyOrObserver, useIndexPhpOrObserver, responseObserver) {
|
|
35
57
|
if (typeof baseUrlOrFactory === 'string') {
|
|
36
|
-
|
|
37
|
-
this.
|
|
58
|
+
const useIndexPhp = typeof useIndexPhpOrObserver === 'boolean' ? useIndexPhpOrObserver : false;
|
|
59
|
+
this.resolvedCredentials = {
|
|
60
|
+
baseUrl: normalizeBaseUrl(baseUrlOrFactory),
|
|
61
|
+
apiKey: apiKeyOrObserver,
|
|
62
|
+
useIndexPhp,
|
|
63
|
+
};
|
|
64
|
+
this.responseObserver = typeof useIndexPhpOrObserver === 'function'
|
|
65
|
+
? useIndexPhpOrObserver
|
|
66
|
+
: responseObserver;
|
|
38
67
|
}
|
|
39
68
|
else {
|
|
40
69
|
this.credentialFactory = baseUrlOrFactory;
|
|
@@ -46,8 +75,8 @@ export class MantisClient {
|
|
|
46
75
|
// ---------------------------------------------------------------------------
|
|
47
76
|
async getCredentials() {
|
|
48
77
|
if (!this.resolvedCredentials) {
|
|
49
|
-
const { baseUrl, apiKey } = await this.credentialFactory();
|
|
50
|
-
this.resolvedCredentials = { baseUrl: normalizeBaseUrl(baseUrl), apiKey };
|
|
78
|
+
const { baseUrl, apiKey, useIndexPhp = false } = await this.credentialFactory();
|
|
79
|
+
this.resolvedCredentials = { baseUrl: normalizeBaseUrl(baseUrl), apiKey, useIndexPhp };
|
|
51
80
|
}
|
|
52
81
|
return this.resolvedCredentials;
|
|
53
82
|
}
|
|
@@ -55,8 +84,9 @@ export class MantisClient {
|
|
|
55
84
|
return (await this.getCredentials()).baseUrl;
|
|
56
85
|
}
|
|
57
86
|
async buildUrl(path, params) {
|
|
58
|
-
const { baseUrl } = await this.getCredentials();
|
|
59
|
-
const
|
|
87
|
+
const { baseUrl, useIndexPhp } = await this.getCredentials();
|
|
88
|
+
const restPrefix = useIndexPhp ? '/api/rest/index.php/' : '/api/rest/';
|
|
89
|
+
const url = new URL(`${baseUrl}${restPrefix}${path}`);
|
|
60
90
|
if (params) {
|
|
61
91
|
for (const [key, value] of Object.entries(params)) {
|
|
62
92
|
if (value !== undefined) {
|
package/dist/config.js
CHANGED
|
@@ -2,11 +2,23 @@ import { readFile } from 'node:fs/promises';
|
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { join, dirname } from 'node:path';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
|
-
import { normalizeBaseUrl } from './client.js';
|
|
5
|
+
import { normalizeBaseUrl, usesIndexPhpEntryPoint } from './client.js';
|
|
6
6
|
// ---------------------------------------------------------------------------
|
|
7
7
|
// .env.local loader
|
|
8
8
|
// ---------------------------------------------------------------------------
|
|
9
|
-
|
|
9
|
+
let cachedDotEnvLocal = null;
|
|
10
|
+
/**
|
|
11
|
+
* Loads .env.local at most once per process. Both getStartupConfig() and
|
|
12
|
+
* getConfig() need it, and the HTTP transport calls them on separate paths —
|
|
13
|
+
* without memoising, the file is read twice on every startup. Caching the
|
|
14
|
+
* promise (not a boolean) also makes concurrent callers share one read.
|
|
15
|
+
*/
|
|
16
|
+
function loadDotEnvLocal() {
|
|
17
|
+
if (!cachedDotEnvLocal)
|
|
18
|
+
cachedDotEnvLocal = readDotEnvLocal();
|
|
19
|
+
return cachedDotEnvLocal;
|
|
20
|
+
}
|
|
21
|
+
async function readDotEnvLocal() {
|
|
10
22
|
try {
|
|
11
23
|
const envPath = join(dirname(fileURLToPath(import.meta.url)), '..', '.env.local');
|
|
12
24
|
const content = await readFile(envPath, 'utf-8');
|
|
@@ -24,6 +36,9 @@ async function loadDotEnvLocal() {
|
|
|
24
36
|
// .env.local not present — use environment variables directly
|
|
25
37
|
}
|
|
26
38
|
}
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Non-credential config (safe to read at startup without credentials)
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
27
42
|
function readNonCredentialConfig() {
|
|
28
43
|
const defaultCacheDir = join(homedir(), '.cache', 'mantisbt-mcp');
|
|
29
44
|
const cacheDir = process.env.MANTIS_CACHE_DIR ?? defaultCacheDir;
|
|
@@ -57,6 +72,26 @@ function readNonCredentialConfig() {
|
|
|
57
72
|
testEnvironment: process.env.MCP_TEST_ENVIRONMENT === 'true',
|
|
58
73
|
};
|
|
59
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Resolves index.php routing from MANTIS_USE_INDEX_PHP and the shape of
|
|
77
|
+
* MANTIS_BASE_URL. An explicitly set env var always wins; the URL suffix is
|
|
78
|
+
* only consulted when the user said nothing, so copying the full REST URL
|
|
79
|
+
* from a MantisBT installation without URL rewriting just works. A base URL
|
|
80
|
+
* that contradicts an explicit "false" is reported on stderr — silently
|
|
81
|
+
* ignoring it would look like a broken server, not a misconfiguration.
|
|
82
|
+
*/
|
|
83
|
+
function resolveUseIndexPhp(rawBaseUrl) {
|
|
84
|
+
const explicit = process.env.MANTIS_USE_INDEX_PHP;
|
|
85
|
+
const urlImpliesIndexPhp = usesIndexPhpEntryPoint(rawBaseUrl);
|
|
86
|
+
if (explicit === undefined)
|
|
87
|
+
return urlImpliesIndexPhp;
|
|
88
|
+
const enabled = explicit === 'true';
|
|
89
|
+
if (urlImpliesIndexPhp && !enabled) {
|
|
90
|
+
process.stderr.write(`[mantisbt-config] MANTIS_BASE_URL ends with /api/rest/index.php, but MANTIS_USE_INDEX_PHP="${explicit}" — ` +
|
|
91
|
+
`using plain /api/rest/ routing as configured. Unset MANTIS_USE_INDEX_PHP to route through index.php.\n`);
|
|
92
|
+
}
|
|
93
|
+
return enabled;
|
|
94
|
+
}
|
|
60
95
|
/**
|
|
61
96
|
* Returns all non-credential config values. Never throws, even when
|
|
62
97
|
* MANTIS_BASE_URL / MANTIS_API_KEY are absent. Use this at server startup
|
|
@@ -102,6 +137,7 @@ export async function getConfig() {
|
|
|
102
137
|
cachedConfig = {
|
|
103
138
|
baseUrl: normalizeBaseUrl(baseUrl),
|
|
104
139
|
apiKey,
|
|
140
|
+
useIndexPhp: resolveUseIndexPhp(baseUrl),
|
|
105
141
|
...readNonCredentialConfig(),
|
|
106
142
|
};
|
|
107
143
|
return cachedConfig;
|
package/dist/index.js
CHANGED
|
@@ -43,7 +43,11 @@ async function createMcpServer(transport) {
|
|
|
43
43
|
setGlobalVersionHint(versionHint);
|
|
44
44
|
const client = new MantisClient(async () => {
|
|
45
45
|
const config = await getConfig();
|
|
46
|
-
return {
|
|
46
|
+
return {
|
|
47
|
+
baseUrl: config.baseUrl,
|
|
48
|
+
apiKey: config.apiKey,
|
|
49
|
+
useIndexPhp: config.useIndexPhp,
|
|
50
|
+
};
|
|
47
51
|
}, (response) => versionHint.onSuccessfulResponse(response));
|
|
48
52
|
const cache = new MetadataCache(startupConfig.cacheDir, startupConfig.cacheTtl);
|
|
49
53
|
const server = new McpServer({
|
package/docs/cookbook.de.md
CHANGED
|
@@ -4,6 +4,8 @@ Tool-orientierte Rezepte für den MantisBT MCP Server — jedes Rezept zeigt gen
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
- [Verbindung einrichten](#verbindung-einrichten)
|
|
8
|
+
- [Installation ohne URL-Rewriting anbinden](#installation-ohne-url-rewriting-anbinden)
|
|
7
9
|
- [Die eigene Instanz erkunden](#die-eigene-instanz-erkunden)
|
|
8
10
|
- [Alle Projekte abrufen](#alle-projekte-abrufen)
|
|
9
11
|
- [Gültige Enum-Werte ermitteln (Schweregrad, Status, Priorität)](#gültige-enum-werte-ermitteln-schweregrad-status-priorität)
|
|
@@ -72,6 +74,41 @@ Tool-orientierte Rezepte für den MantisBT MCP Server — jedes Rezept zeigt gen
|
|
|
72
74
|
|
|
73
75
|
---
|
|
74
76
|
|
|
77
|
+
## Verbindung einrichten
|
|
78
|
+
|
|
79
|
+
### Installation ohne URL-Rewriting anbinden
|
|
80
|
+
|
|
81
|
+
Manche MantisBT-Installationen liefern die REST-API ausschließlich über ihren Front-Controller aus — typischerweise Apache ohne `mod_rewrite` oder IIS ohne Rewrite-Modul. Dort liefert `/api/rest/issues` einen 404, während `/api/rest/index.php/issues` funktioniert.
|
|
82
|
+
|
|
83
|
+
**Variante A — Flag explizit setzen:**
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"env": {
|
|
88
|
+
"MANTIS_BASE_URL": "https://mantis.example.com",
|
|
89
|
+
"MANTIS_API_KEY": "dein-api-token",
|
|
90
|
+
"MANTIS_USE_INDEX_PHP": "true"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Variante B — vollständige REST-URL eintragen und erkennen lassen:**
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"env": {
|
|
100
|
+
"MANTIS_BASE_URL": "https://mantis.example.com/api/rest/index.php",
|
|
101
|
+
"MANTIS_API_KEY": "dein-api-token"
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Endet `MANTIS_BASE_URL` auf `/api/rest/index.php`, wird das index.php-Routing automatisch aktiviert. Ein explizit gesetztes `MANTIS_USE_INDEX_PHP` hat immer Vorrang vor der Erkennung — steht es zusammen mit einer solchen URL auf `false`, wird das normale `/api/rest/`-Routing erzwungen und eine Warnung auf stderr ausgegeben.
|
|
107
|
+
|
|
108
|
+
**Prüfen:** `get_mantis_version` aufrufen. Kommt eine Antwort zurück, stimmt das Routing.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
75
112
|
## Die eigene Instanz erkunden
|
|
76
113
|
|
|
77
114
|
### Alle Projekte abrufen
|
package/docs/cookbook.md
CHANGED
|
@@ -4,6 +4,8 @@ Tool-oriented recipes for the MantisBT MCP server — each recipe shows exactly
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
- [Connection setup](#connection-setup)
|
|
8
|
+
- [Connect to an installation without URL rewriting](#connect-to-an-installation-without-url-rewriting)
|
|
7
9
|
- [Discovering your instance](#discovering-your-instance)
|
|
8
10
|
- [Get all projects](#get-all-projects)
|
|
9
11
|
- [Discover valid enum values (severity, status, priority)](#discover-valid-enum-values-severity-status-priority)
|
|
@@ -72,6 +74,41 @@ Tool-oriented recipes for the MantisBT MCP server — each recipe shows exactly
|
|
|
72
74
|
|
|
73
75
|
---
|
|
74
76
|
|
|
77
|
+
## Connection setup
|
|
78
|
+
|
|
79
|
+
### Connect to an installation without URL rewriting
|
|
80
|
+
|
|
81
|
+
Some MantisBT installations serve the REST API only through its front controller — typically Apache without `mod_rewrite`, or IIS without a rewrite module. There, `/api/rest/issues` returns 404 while `/api/rest/index.php/issues` works.
|
|
82
|
+
|
|
83
|
+
**Option A — set the flag explicitly:**
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"env": {
|
|
88
|
+
"MANTIS_BASE_URL": "https://mantis.example.com",
|
|
89
|
+
"MANTIS_API_KEY": "your-api-token",
|
|
90
|
+
"MANTIS_USE_INDEX_PHP": "true"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Option B — paste the full REST URL and let the server detect it:**
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"env": {
|
|
100
|
+
"MANTIS_BASE_URL": "https://mantis.example.com/api/rest/index.php",
|
|
101
|
+
"MANTIS_API_KEY": "your-api-token"
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
When `MANTIS_BASE_URL` ends with `/api/rest/index.php`, index.php routing is enabled automatically. An explicitly set `MANTIS_USE_INDEX_PHP` always wins over the detection — setting it to `false` alongside such a URL forces plain `/api/rest/` routing and logs a warning on stderr.
|
|
107
|
+
|
|
108
|
+
**Verify:** call `get_mantis_version`. A successful response means the routing is correct.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
75
112
|
## Discovering your instance
|
|
76
113
|
|
|
77
114
|
### Get all projects
|
package/package.json
CHANGED
package/server.json
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
"name": "io.github.dpesch/mantisbt-mcp-server",
|
|
4
4
|
"title": "MantisBT MCP Server",
|
|
5
5
|
"description": "MantisBT MCP server – manage issues, notes, files, tags, and relationships. With semantic search.",
|
|
6
|
-
"version": "1.
|
|
6
|
+
"version": "1.12.0",
|
|
7
7
|
"packages": [
|
|
8
8
|
{
|
|
9
9
|
"registryType": "npm",
|
|
10
10
|
"identifier": "@dpesch/mantisbt-mcp-server",
|
|
11
|
-
"version": "1.
|
|
11
|
+
"version": "1.12.0",
|
|
12
12
|
"runtimeHint": "npx",
|
|
13
13
|
"transport": {
|
|
14
14
|
"type": "stdio"
|
|
@@ -29,6 +29,14 @@
|
|
|
29
29
|
"isSecret": true,
|
|
30
30
|
"format": "string"
|
|
31
31
|
},
|
|
32
|
+
{
|
|
33
|
+
"name": "MANTIS_USE_INDEX_PHP",
|
|
34
|
+
"description": "Use /api/rest/index.php/ for MantisBT installations without URL rewriting. Detected automatically when MANTIS_BASE_URL ends with /api/rest/index.php",
|
|
35
|
+
"isRequired": false,
|
|
36
|
+
"isSecret": false,
|
|
37
|
+
"format": "boolean",
|
|
38
|
+
"default": "false"
|
|
39
|
+
},
|
|
32
40
|
{
|
|
33
41
|
"name": "MANTIS_CACHE_DIR",
|
|
34
42
|
"description": "Directory for the metadata cache. Defaults to ~/.cache/mantisbt-mcp",
|