Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Port for HTTP mode | 3000 |
| TRANSPORT | No | Transport mode: stdio or http | stdio |
| MCP_HTTP_HOST | No | Bind address for HTTP mode. Set to 0.0.0.0 for Docker or remote access. | 127.0.0.1 |
| MANTIS_API_KEY | Yes | API token for authentication | |
| MCP_HTTP_TOKEN | No | When set, the /mcp endpoint requires Authorization: Bearer <token>. | |
| MANTIS_BASE_URL | Yes | Base URL of the MantisBT REST API | |
| MANTIS_CACHE_DIR | No | Directory for the metadata cache | ~/.cache/mantisbt-mcp |
| MANTIS_CACHE_TTL | No | Cache lifetime in seconds | 3600 |
| MANTIS_SEARCH_DIR | No | Directory for the search index (defaults to {MANTIS_CACHE_DIR}/search) | |
| MANTIS_UPLOAD_DIR | No | Restrict upload_file to files within this directory to prevent path traversal. | |
| MANTIS_SEARCH_MODEL | No | Embedding model name (downloaded once on first use, ~80 MB) | Xenova/paraphrase-multilingual-MiniLM-L12-v2 |
| MANTIS_SEARCH_BACKEND | No | Vector store backend: vectra (pure JS) or sqlite-vec (requires manual install) | vectra |
| MANTIS_SEARCH_ENABLED | No | Set to true to enable semantic search | false |
| MANTIS_SEARCH_THREADS | No | Number of ONNX intra-op threads for the embedding model. | 1 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_issue | Retrieve a single MantisBT issue by its numeric ID. Returns all issue fields including notes, attachments, and relationships. |
| 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", and "status" filters are applied client-side (the MantisBT REST API does not reliably 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. |
| create_issue | Create a new MantisBT issue. Returns the created issue including its assigned ID. |
| update_issue | Update one or more fields of an existing MantisBT issue using a partial PATCH. The "fields" object accepts any combination of:
Important: when resolving an issue, always set BOTH status and resolution to avoid leaving resolution as "open". |
| delete_issue | Permanently delete a MantisBT issue. This action is irreversible. |
| list_notes | List all notes (comments) attached to a MantisBT issue. |
| add_note | Add a note (comment) to an existing MantisBT issue. Full UTF-8 text is supported. |
| delete_note | Permanently delete a note from a MantisBT issue. This action is irreversible. |
| list_issue_files | List all file attachments of a MantisBT issue. |
| upload_file | Upload a file as an attachment to a MantisBT issue via multipart/form-data. Two input modes (exactly one must be provided):
The optional content_type parameter sets the MIME type (e.g. "image/png"). If omitted, "application/octet-stream" is used. |
| add_relationship | Add a relationship between two MantisBT issues. Relationship types — use either type_id (numeric) or type_name (string):
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. |
| remove_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). |
| add_monitor | Add a user as a monitor (watcher) of a MantisBT issue. Monitors receive email notifications for issue updates. |
| remove_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. |
| list_projects | List all MantisBT projects accessible to the current API user. |
| get_project_users | List all users with access to a specific MantisBT project. |
| get_project_versions | List all versions defined for a MantisBT project. |
| 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. |
| get_current_user | Retrieve the profile of the user associated with the current API key. |
| list_filters | List all saved MantisBT issue filters accessible to the current user. Filter IDs can be used with list_issues. |
| get_config | Retrieve one or more MantisBT configuration options. Common option names:
|
| get_issue_enums | 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:
Always pass either the "id" or the "name" value to create_issue or update_issue — never the "label". Use the "label" to map user input in the UI language back to the correct "name"/"id" for the API. 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. The "name" value returned is always the correct one to use for API calls — regardless of language. |
| list_languages | List all languages supported by the MantisBT installation. |
| 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. |
| sync_metadata | 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 | Return cached MantisBT metadata (projects, users, versions, 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. |
| 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. |
| attach_tags | 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). |
| detach_tag | 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. |
| get_mcp_version | Returns the version of this mantisbt-mcp-server instance. |
| get_mantis_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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |