# MantisBT MCP Server (npm · @dpesch/mantisbt-mcp-server)

MantisBT MCP server – manage issues, notes, files, tags, and relationships. With semantic search.

- Trust score: 59/100 (low)
- Change this week: +59
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-07

## Components

- npm · `@dpesch/mantisbt-mcp-server`: 59/100 (this document), [markdown](https://verifymcp.io/servers/dpesch-mantisbt-mcp-server/dpesch-mantisbt-mcp-server.md), [page](https://verifymcp.io/servers/dpesch-mantisbt-mcp-server/dpesch-mantisbt-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@dpesch/mantisbt-mcp-server`
- Version: `1.11.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-07.

- **Supply Chain Security**: 79/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known high-severity CVE affects sharp 0.34.5, reached via @huggingface/transformers > sharp. A fixed version is available.
  - No install/post-install scripts declared.
  - Dependency health was assessed across the 170 of 174 dependencies we could resolve, so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 19/100
  - Repository check failed: no source repository is declared.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 34 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 81/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 5738 tokens (~168/item across 34 items; 34 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add dpesch-mantisbt-mcp-server -- npx -y @dpesch/mantisbt-mcp-server
```

### Codex

```bash
codex mcp add dpesch-mantisbt-mcp-server -- npx -y @dpesch/mantisbt-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dpesch-mantisbt-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@dpesch/mantisbt-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add dpesch-mantisbt-mcp-server --command npx --arg -y --arg @dpesch/mantisbt-mcp-server
```

### Hermes

```yaml
mcp_servers:
  dpesch-mantisbt-mcp-server:
    command: "npx"
    args: ["-y", "@dpesch/mantisbt-mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "dpesch-mantisbt-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@dpesch/mantisbt-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-06 (score 59, +31)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent
- [functional] First check of Schema quality: fail

### 2026-08-02 (score 28, +13)

- [security regression] GHSA-f88m-g3jw-g9cj affects this package: high
- [security regression] Provenance: unverified → fail
- [security regression] Known CVEs: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [functional regression] Security disclosure: unverified → fail
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional] Licence: MIT

### 2026-08-01 (score 15, +15)

- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: our sandbox run of this package did not complete, so we have no schema to compare.
- [functional] Capabilities: Protocol version not yet verified: our sandbox run of this package did not complete, so we never saw its MCP handshake.
- [functional] Tool coverage: Tool coverage not yet verified: our sandbox run of this package did not complete, so we have no tool definitions to assess.
- [functional] Schema quality: Schema quality not yet verified: our sandbox run of this package did not complete, so we have no schema to assess.

### 2026-07-31 (score 0, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 0, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 18)

First indexed and scored.

## MCP tools (34)

### `get_issue` (~106 tokens)

Get Issue

Retrieve a single MantisBT issue by its numeric ID. Returns all issue fields including notes, attachments, and relationships (unless "select" is given). Notes are always included — no separate list_notes call needed.

Input parameters:

- `id` (integer, required): Numeric issue ID
- `select` (string): Comma-separated list of fields to include in the response (server-side projection, same as list_issues). Significantly reduces response size. Example: "id,summary,status,notes"

### `get_issues` (~109 tokens)

Get Multiple Issues

Retrieve multiple MantisBT issues by their numeric IDs in a single MCP call. Requests run in parallel (max 5 concurrent). Missing or inaccessible IDs return null at their array position — the call never fails due to individual missing IDs. Response includes "requested", "found", and "failed" counters for quick validation.

Input parameters:

- `ids` (array, required): Array of numeric issue IDs to fetch (1–50). null is returned per ID on 404/403/error instead of failing the whole call.

### `list_issues` (~560 tokens)

List Issues

List MantisBT issues with optional filtering. Returns a paginated list of issues. Use the "select" parameter to limit returned fields and reduce response size significantly.

Note: "assigned_to", "reporter_id", "status", and date filters are applied client-side (the MantisBT REST API does not support these as server-side filters). When any of these filters are active the tool automatically fetches multiple pages internally until enough matching results are found (up to 500 issues scanned). The "page" and "page_size" parameters refer to the resulting filtered list.

Tip for date queries: fetching with select="id,updated_at,created_at" plus a date filter is very compact and efficient.

Input parameters:

- `assigned_to` (integer): Filter by handler/assignee user ID
- `created_after` (string): ISO-8601 timestamp — only return issues created after this date (exclusive). Example: "2026-03-01T00:00:00Z"
- `created_before` (string): ISO-8601 timestamp — only return issues created before this date (exclusive). Example: "2026-03-15T00:00:00Z"
- `direction` (string): Sort direction
- `filter_id` (integer): Use a saved MantisBT filter ID
- `page` (integer): Page number (default: 1)
- `page_size` (integer): Issues per page (default: 50, max: 50)
- `project_id` (integer): Filter by project ID
- `reporter_id` (integer): Filter by reporter user ID
- `select` (string): Comma-separated list of fields to include in the response (server-side projection). Significantly reduces response size. Example: "id,summary,status,priority,handler,updated_at"
- `sort` (string): Sort field (e.g. "last_updated", "id")
- `status` (string): Filter issues by status name (e.g. "new", "feedback", "acknowledged", "confirmed", "assigned", "resolved", "closed") or use "open" as shorthand for all statuses with id < 80 (i.e. not yet resolved or…
- `updated_after` (string): ISO-8601 timestamp — only return issues updated after this date (exclusive). Example: "2026-03-25T00:00:00Z"
- `updated_before` (string): ISO-8601 timestamp — only return issues updated before this date (exclusive). Example: "2026-03-28T00:00:00Z"

### `create_issue` (~663 tokens)

Create Issue

Create a new MantisBT issue. Returns the full created issue object including the assigned id, summary, status, priority, severity, category, reporter, created_at, and view_url.

Required fields: summary, description, project_id, category. All other fields are optional with sensible defaults (priority: "normal", severity: "minor").

Recommended workflow:
1\. Call get_project_categories to obtain a valid category name
2\. Optionally call get_project_versions to obtain version names
3\. Optionally call find_project_member to resolve the assignee's username

Both priority and severity accept canonical English names or localized labels from the connected MantisBT instance — call get_issue_enums to see all available values.

For the handler, prefer the username field (resolved server-side) over handler_id when working interactively.

Input parameters:

- `additional_information` (string): Additional context or notes about the issue. Plain text or Markdown.
- `category` (string, required): Category name (required). Use get_project_categories to list available categories for the project.
- `custom_fields` (array): Custom field values: [{field: {id|name}, value: "<string>"}]. Use get_issue_fields or get_metadata to discover available custom fields per project.
- `description` (string, required): Detailed issue description (required). Do not create issues without a description. Plain text or Markdown.
- `fixed_in_version` (string): Version in which the issue was fixed. Use get_project_versions to list available version names.
- `handler` (string): MantisBT login name of the assignee. The server resolves the name to a user ID from the project member list. Use find_project_member or get_project_users to look up valid login names.
- `handler_id` (integer): Numeric user ID of the assignee. Alternative to the handler field — use one or the other, not both.
- `priority` (string): Priority level. Canonical English names: none, low, normal, high, urgent, immediate. Default: "normal". Use get_issue_enums to see localized labels.
- `project_id` (integer, required): Project ID the issue belongs to — use list_projects to discover project IDs
- `reproducibility` (string): How reliably the issue reproduces. Canonical English names: always, sometimes, random, have not tried, unable to reproduce, N/A. Use get_issue_enums to see localized labels.
- `severity` (string): Severity level. Canonical English names: feature, trivial, text, tweak, minor, major, crash, block. Default: "minor". Use get_issue_enums to see localized labels.
- `steps_to_reproduce` (string): Step-by-step instructions to reproduce the issue. Plain text or Markdown.
- `summary` (string, required): Issue summary/title (required)
- `target_version` (string): Target fix version — version in which the issue is planned to be resolved. Use get_project_versions to list available version names.
- `version` (string): Affected product version name. Use get_project_versions to list available version names for the project.
- `view_state` (string): Visibility of the issue: "public" (visible to all, default) or "private" (restricted to higher-access users).

### `update_issue` (~468 tokens)

Update Issue

Update one or more fields of an existing MantisBT issue using a partial PATCH.

The "fields" object accepts any combination of:
\- summary (string)
\- description (string)
\- steps_to_reproduce (string)
\- additional_information (string)
\- status: { name: "new"|"feedback"|"acknowledged"|"confirmed"|"assigned"|"resolved"|"closed" }
\- resolution: { id: 20 }  (20 = fixed/resolved)
\- handler: { id: <user_id> } or { name: "<username>" }
\- priority: { name: "<priority_name>" }
\- severity: { name: "<severity_name>" }
\- reproducibility: { name: "<reproducibility_name>" }
\- category: { name: "<category_name>" }
\- version: { name: "<version_name>" }  (affected version)
\- target_version: { name: "<version_name>" }
\- fixed_in_version: { name: "<version_name>" }
\- view_state: { name: "public"|"private" }
\- custom_fields: [{field: {id|name}, value: "<string>"}]  (only the listed custom fields are changed, others stay untouched; use get_issue_fields to discover fields)

Important: when resolving an issue, always set BOTH status and resolution to avoid leaving resolution as "open".

Use the optional "note" parameter to append a note in the same call (e.g. the reason for a status change) — no separate add_note call needed. For a note without field changes use add_note.

Input parameters:

- `dry_run` (boolean): If true, return the patch payload that would be sent without actually updating the issue. Useful for previewing changes before committing them.
- `fields` (object, required): Fields to update (partial update — only provided fields are changed; unknown keys are rejected)
- `id` (integer, required): Numeric issue ID to update
- `note` (string): Optional note text appended after a successful update (e.g. reason for a status change). Replaces a separate add_note call.
- `note_view_state` (string): Visibility of the appended note: "public" (default) or "private". Only used when "note" is set.

### `delete_issue` (~34 tokens)

Delete Issue

Permanently delete a MantisBT issue. This action is irreversible.

Input parameters:

- `id` (integer, required): Numeric issue ID to delete

### `list_notes` (~58 tokens)

List Issue Notes

List all notes (comments) attached to a MantisBT issue. Note: get_issue already includes notes in its response — use list_notes only when you need notes without fetching the full issue.

Input parameters:

- `issue_id` (integer, required): Numeric issue ID

### `add_note` (~224 tokens)

Add Note to Issue

Add a note (comment) to an existing MantisBT issue. Returns the created note object including id, created_at, reporter, text, view_state, and a view_url linking directly to the note in the MantisBT web UI.

Full UTF-8 text is supported. Markdown syntax is stored as-is — rendering depends on the MantisBT instance's configured text renderer.

Use view_state="private" to restrict the note to users with reporter-level access or higher; public notes are visible to all users who can view the issue.

Prerequisites: obtain issue_id from list_issues, get_issue, or search_issues.

Input parameters:

- `issue_id` (integer, required): Numeric issue ID — use list_issues or get_issue to obtain issue IDs
- `text` (string, required): Note text (minimum 1 character). Full UTF-8 including emoji is supported. Markdown is stored as-is.
- `view_state` (string): Visibility of the note: "public" (visible to all, default) or "private" (visible only to users with sufficient access level).

### `delete_note` (~162 tokens)

Delete Note

Permanently delete a note from a MantisBT issue. This action is irreversible — deleted notes cannot be recovered.

Returns a plain-text confirmation message on success. Returns an error if the note does not exist or the current user lacks permission to delete it (MantisBT enforces access control: users can typically only delete their own notes unless they have manager-level access or higher).

Prerequisites: obtain note_id from list_notes or from get_issue (notes[].id); obtain issue_id from the same source.

Input parameters:

- `issue_id` (integer, required): Numeric issue ID that owns the note — use get_issue or list_notes to identify this value
- `note_id` (integer, required): Numeric note ID to delete — obtain from get_issue (notes[].id) or list_notes

### `list_issue_files` (~110 tokens)

List Issue File Attachments

List all file attachments of a MantisBT issue. Returns an array of attachment objects, each containing id, filename, size in bytes, content_type, and download_url. Returns an empty array if the issue has no attachments.

Use this tool when you need to inspect or enumerate files attached to an issue. To add a new attachment, use upload_file instead. To retrieve full issue details that include attachments alongside other fields, use get_issue instead.

Input parameters:

- `issue_id` (integer, required): Numeric issue ID

### `upload_file` (~375 tokens)

Upload File Attachment

Upload a file as an attachment to a MantisBT issue. Adds the file to the issue without modifying any issue fields or status. Returns the created attachment metadata on success.

Provide exactly one of the two input modes:
\- file_path (preferred): absolute path to a local file — use this whenever the file exists on disk; the server reads and encodes it automatically; filename is derived from the path. Note: file_path reads from the server's filesystem and is disabled over the HTTP transport unless MANTIS_UPLOAD_DIR is configured — HTTP clients should use content instead.
\- content: Base64-encoded file content — only use this when the file is not accessible via a path (e.g. in-memory data); filename must be supplied explicitly via the filename parameter

The optional content_type sets the MIME type (e.g. "image/png"); defaults to "application/octet-stream". Use the optional description to annotate the attachment.

Use this tool to attach files such as logs, screenshots, or patches to an existing issue. To list existing attachments, use list_issue_files. To retrieve issue details, use get_issue.

Input parameters:

- `content` (string): Fallback: Base64-encoded file content — only use when file_path is not available (mutually exclusive with file_path)
- `content_type` (string): MIME type of the file, e.g. "image/png" (default: "application/octet-stream")
- `description` (string): Optional description for the attachment
- `file_path` (string): Preferred: absolute path to the local file to upload — use this whenever the file exists on disk (mutually exclusive with content)
- `filename` (string): File name for the attachment (required when using content; overrides the derived name when using file_path)
- `issue_id` (integer, required): Numeric issue ID

### `add_relationship` (~338 tokens)

Add Issue Relationship

Add a relationship between two MantisBT issues.

Relationship types — use either type_id (numeric) or type_name (string):
\- 0 / "duplicate_of"  — this issue is a duplicate of target
\- 1   / "related_to"    — this issue is related to target
\- 2    / "parent_of"     ��� this issue depends on target (target must be done first); alias: "depends_on"
\- 3     / "child_of"      — this issue blocks target (target can't proceed until this is done); alias: "blocks"
\- 4 / "has_duplicate" — this issue has target as a duplicate

Directionality note: "A child_of B" means A blocks B. "A parent_of B" means A depends on B.

Dash variants (e.g. "related-to") are also accepted for type_name.

Input parameters:

- `issue_id` (integer, required): The source issue ID (the one the relationship is added to)
- `target_id` (integer, required): The target issue ID
- `type_id` (integer): Relationship type ID: 0=duplicate_of, 1=related_to, 2=parent_of (depends on), 3=child_of (blocks), 4=has_duplicate. Use either type_id or type_name.
- `type_name` (string): Relationship type name as alternative to type_id. Accepted: "duplicate_of", "related_to", "parent_of" (or "depends_on"), "child_of" (or "blocks"), "has_duplicate". Dash variants (e.g. "related-to") a…

### `remove_relationship` (~91 tokens)

Remove Issue Relationship

Remove a relationship from a MantisBT issue.

Use get_issue first to retrieve the relationship IDs. The relationship_id is the numeric id field of a relationship object in the issue's relationships array (not the type ID).

Input parameters:

- `issue_id` (integer, required): The issue ID the relationship belongs to
- `relationship_id` (integer, required): The numeric ID of the relationship to remove (from the relationships array in get_issue)

### `add_monitor` (~189 tokens)

Add Issue Monitor

Add a user as a monitor (watcher) of a MantisBT issue. Monitors receive email notifications whenever the issue is updated. Returns a success confirmation object.

Use add_monitor to subscribe team members to issue updates without assigning them as the handler. To unsubscribe a user, call remove_monitor with the same parameters.

Adding a user who is already a monitor is a no-op — the operation succeeds without creating duplicates.

Prerequisites: obtain issue_id from list_issues or get_issue; use find_project_member or get_project_users to look up valid MantisBT login names.

Input parameters:

- `issue_id` (integer, required): Numeric issue ID — use list_issues or get_issue to obtain issue IDs
- `username` (string, required): MantisBT login name (not the display name) of the user to add as monitor. Use find_project_member or get_project_users to discover valid login names for a project.

### `remove_monitor` (~60 tokens)

Remove Issue Monitor

Remove a user from the monitor list of a MantisBT issue. The user will no longer receive email notifications for updates to this issue.

Input parameters:

- `issue_id` (integer, required): Numeric issue ID
- `username` (string, required): Username of the monitor to remove

### `list_projects` (~21 tokens)

List Projects

List all MantisBT projects accessible to the current API user.

### `get_project_users` (~230 tokens)

Get Project Users

List all users with access to a specific MantisBT project. Returns an array of user objects, each containing id, name (login name), real_name, email, and access_level fields.

Use get_project_users when you need the complete user list for a project — for example, to verify who has access or to build a handler list. For name-based lookup of a single user, prefer find_project_member which supports case-insensitive substring search and is significantly faster on large projects.

Access level IDs: 10=viewer, 25=reporter, 40=updater, 55=developer, 70=manager, 90=administrator.

Prerequisites: obtain project_id from list_projects.

Input parameters:

- `access_level` (integer): Return only users at or above this access level. Common values: 10=viewer, 25=reporter, 40=updater, 55=developer, 70=manager, 90=administrator. Omit to return all users.
- `project_id` (integer, required): Numeric project ID — use list_projects to discover project IDs

### `get_project_versions` (~201 tokens)

Get Project Versions

List all versions defined for a MantisBT project. Returns an array of version objects, each containing id, name, released (boolean), obsolete (boolean), and optionally a date field.

Use the returned version names directly when creating or updating issues via create_issue and update_issue (version, target_version, fixed_in_version fields).

By default, obsolete and inherited parent-project versions are excluded. Set obsolete=true to include deprecated versions; set inherit=true to also return versions from parent projects.

Prerequisites: obtain project_id from list_projects.

Input parameters:

- `inherit` (boolean): Include versions inherited from parent projects. Default: false. Set to true for sub-projects that share versions with a parent project.
- `obsolete` (boolean): Include obsolete (deprecated) versions in the response. Default: false. Set to true to see all versions including those no longer actively used.
- `project_id` (integer, required): Numeric project ID — use list_projects to discover project IDs

### `get_project_categories` (~71 tokens)

Get Project Categories

List all categories available for a MantisBT project.

Note: The MantisBT API returns global (cross-project) categories with a "[All Projects] " prefix.
This tool strips that prefix so the returned names can be used directly when creating issues.

Input parameters:

- `project_id` (integer, required): Numeric project ID

### `find_project_member` (~158 tokens)

Find Project Member

Search for users with access to a MantisBT project by name, display name, or email.

Returns up to `limit` matching users (default: 10, max: 100). Matching is case-insensitive substring search across `name`, `real_name`, and `email` fields. Omit `query` to list the first `limit` users.

Data is served from the local metadata cache when fresh; falls back to a live API call otherwise.

Input parameters:

- `limit` (integer): Maximum number of results to return (default: 10, max: 100)
- `project_id` (integer, required): Numeric project ID
- `query` (string): Case-insensitive substring to match against name, real_name, or email

### `get_current_user` (~22 tokens)

Get Current User

Retrieve the profile of the user associated with the current API key.

### `list_filters` (~32 tokens)

List Saved Filters

List all saved MantisBT issue filters accessible to the current user. Filter IDs can be used with list_issues.

### `get_config` (~118 tokens)

Get MantisBT Configuration

Retrieve one or more MantisBT configuration options.

Common option names:
\- "status_enum_string" — issue status values and their IDs
\- "priority_enum_string" — priority values
\- "severity_enum_string" — severity values
\- "resolution_enum_string" — resolution values
\- "reproducibility_enum_string" — reproducibility values
\- "view_state_enum_string" — view state values
\- "access_levels_enum_string" — access level values

Input parameters:

- `options` (array, required): Array of configuration option names to retrieve

### `get_issue_enums` (~496 tokens)

Get Issue Enum Values

Return valid ID, name, and (if available) localized label for all issue enum fields.

Use this tool before creating or updating issues to look up the correct value
for severity, status, priority, resolution, or reproducibility.

Example response (English installation):
{
  "severity":         [{"id": 10, "name": "feature"}, {"id": 50, "name": "minor"}, ...],
  "status":           [{"id": 10, "name": "new"}, {"id": 20, "name": "feedback"}, ...],
  "priority":         [{"id": 10, "name": "none"}, {"id": 30, "name": "normal"}, ...],
  "resolution":       [{"id": 10, "name": "open"}, {"id": 20, "name": "fixed"}, ...],
  "reproducibility":  [{"id": 10, "name": "always"}, {"id": 70, "name": "have not tried"}, ...]
}

Example response (localized installation, e.g. German):
{
  "status": [
    {"id": 10, "name": "new",      "label": "Neu"},
    {"id": 20, "name": "feedback", "label": "Feedback"},
    {"id": 30, "name": "acknowledged", "label": "Bestätigt"},
    ...
  ],
  ...
}

Fields:
\- "id"             — numeric ID accepted by the API
\- "name"           — localized or canonical name from the MantisBT database
\- "label"          — UI display label (only present when it differs from "name")
\- "canonical_name" — English canonical name (only present on localized installs)

For create_issue (severity, priority, reproducibility): pass the canonical English name, the
localized "name", or the "label" — all are accepted. The server resolves them to the correct ID.

For update_issue: pass either "id" or "name" in the field reference object.

Note: on some installations enum values are customized at the database level. In that case "name"
itself may be localized (e.g. "kleinerer Fehler" instead of "minor") and no "label" will be present
because there is no separate English original.

### `list_languages` (~19 tokens)

List Supported Languages

List all languages supported by the MantisBT installation.

### `list_tags` (~87 tokens)

List Tags

List all tags defined in the MantisBT installation.

The MantisBT REST API exposes a GET /tags endpoint on some installations.
If that endpoint is not available, this tool falls back to the local metadata
cache populated by sync_metadata.

Input parameters:

- `page` (integer): Page number (default: 1)
- `page_size` (integer): Tags per page (default: 50)

### `sync_metadata` (~122 tokens)

Sync Metadata Cache

Fetch all projects and their associated users, versions, categories, and tags from MantisBT and store them in the local metadata cache.

Tags are fetched via the dedicated GET /tags endpoint when available. On installations where that endpoint is missing (MantisBT < 2.26), tags are collected by scanning all issues across all projects.

This is useful for getting a complete overview of your MantisBT installation.
The cache is valid for 24 hours by default (configurable via MANTIS_CACHE_TTL env var).
Use this tool to refresh stale data.

### `get_metadata` (~99 tokens)

Get Cached Metadata

Return a compact summary of cached MantisBT metadata: project count, tag count, and per-project counts of users, versions, and categories.

If the cache does not exist or has expired (default TTL: 24 hours), it will automatically sync first.
Use sync_metadata to force a refresh. For full lists use: list_projects (projects), get_project_users / get_project_versions / get_project_categories (per-project data), list_tags (tags).

### `get_metadata_full` (~80 tokens)

Get Full Cached Metadata

Return the complete raw MantisBT metadata cache: all projects with full fields, and per-project lists of users, versions, categories, plus all tags.

If the cache does not exist or has expired (default TTL: 24 hours), it will automatically sync first.
Use sync_metadata to force a refresh. For a lightweight overview use get_metadata instead.

### `get_issue_fields` (~140 tokens)

Get Issue Fields

Return all field names that are valid for the "select" parameter of list_issues and get_issue.

Fields are discovered by fetching a sample issue from MantisBT (which reflects the server's active configuration — e.g. whether eta, projection, or profile fields are enabled) and merging the result with fields that MantisBT omits when empty (notes, attachments, relationships, etc.). The result is cached with the same TTL as the metadata cache.

Use this tool before constructing a "select" string to ensure you only request fields that exist on this server.

Input parameters:

- `project_id` (integer): Optional project ID to scope the sample issue fetch

### `attach_tags` (~106 tokens)

Attach Tags to Issue

Attach one or more tags to a MantisBT issue.

Each tag can be specified either by ID or by name. If a tag name is provided
that does not exist yet, MantisBT will create it automatically (requires
tag_create_threshold permission, default: REPORTER).

Requires tag_attach_threshold permission (default: REPORTER).

Input parameters:

- `issue_id` (integer, required): Numeric issue ID
- `tags` (array, required): Tags to attach — each entry needs at least id or name

### `detach_tag` (~77 tokens)

Detach Tag from Issue

Remove a tag from a MantisBT issue.

Requires tag_detach_own_threshold (default: REPORTER) for own tags,
or tag_detach_threshold (default: DEVELOPER) for tags attached by others.

Input parameters:

- `issue_id` (integer, required): Numeric issue ID
- `tag_id` (integer, required): Numeric tag ID to remove

### `get_mcp_version` (~23 tokens)

Get MCP Server Version

Returns the version of this mantisbt-mcp-server instance.

### `get_mantis_version` (~89 tokens)

Get MantisBT Version

Returns the version of the connected MantisBT installation and optionally compares it against the latest official release on GitHub.

The version is read from the X-Mantis-Version response header sent by every API call.
The GitHub comparison requires an outbound HTTPS request to the GitHub API.

Input parameters:

- `check_latest` (boolean): Whether to fetch the latest release from GitHub and compare (default: true)

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/dpesch-mantisbt-mcp-server/dpesch-mantisbt-mcp-server#diagnostics

## Score history

- 2026-08-07: 59
- 2026-08-06: 59
- 2026-08-05: 28
- 2026-08-04: 28
- 2026-08-03: 28
- 2026-08-02: 28
- 2026-08-01: 15
- 2026-07-31: 0
- 2026-07-30: 0
- 2026-07-28: 18
- 2026-07-27: 18

## Links

- npm package: https://www.npmjs.com/package/@dpesch/mantisbt-mcp-server
- Socket report: https://socket.dev/npm/package/@dpesch/mantisbt-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/dpesch-mantisbt-mcp-server/dpesch-mantisbt-mcp-server.xml
- Changelog JSON feed: https://verifymcp.io/servers/dpesch-mantisbt-mcp-server/dpesch-mantisbt-mcp-server.json
- HTML version of this page: https://verifymcp.io/servers/dpesch-mantisbt-mcp-server/dpesch-mantisbt-mcp-server
