MCP Hub
Back to servers

MantisBT MCP Server

Integrates MantisBT bug tracker into Claude and other MCP clients via the REST API. Read and manage issues, notes, file attachments, tags, relationships, and monitors — with optional offline semantic search across all issues.

glama
Forks
1
Updated
Mar 18, 2026

MantisBT MCP Server

npm version license MantisBT MCP Server

A Model Context Protocol (MCP) server that integrates the MantisBT REST API into Claude Code and other MCP-capable clients. Read, create, and update issues directly from your editor.

Requirements

  • Node.js ≥ 18
  • MantisBT installation with REST API enabled (version 2.23+)
  • MantisBT API token (create under My Account → API Tokens)

Installation

Via npx (recommended):

Add to ~/.claude/claude_desktop_config.json (Claude Desktop) or your local claude_desktop_config.json (Claude Code):

{
  "mcpServers": {
    "mantisbt": {
      "command": "npx",
      "args": ["-y", "@dpesch/mantisbt-mcp-server"],
      "env": {
        "MANTIS_BASE_URL": "https://your-mantis.example.com/api/rest",
        "MANTIS_API_KEY": "your-api-token"
      }
    }
  }
}

Local build:

git clone https://codeberg.org/dpesch/mantisbt-mcp-server
cd mantisbt-mcp-server
npm run init
npm run build
{
  "mcpServers": {
    "mantisbt": {
      "command": "node",
      "args": ["/path/to/mantisbt-mcp-server/dist/index.js"],
      "env": {
        "MANTIS_BASE_URL": "https://your-mantis.example.com/api/rest",
        "MANTIS_API_KEY": "your-api-token"
      }
    }
  }
}

Configuration

Environment variables

VariableRequiredDefaultDescription
MANTIS_BASE_URLBase URL of the MantisBT REST API
MANTIS_API_KEYAPI token for authentication
MANTIS_CACHE_DIR~/.cache/mantisbt-mcpDirectory for the metadata cache
MANTIS_CACHE_TTL3600Cache lifetime in seconds
TRANSPORTstdioTransport mode: stdio or http
PORT3000Port for HTTP mode
MCP_HTTP_HOST127.0.0.1Bind address for HTTP mode. Changed from 0.0.0.0 to 127.0.0.1 — the server now listens on localhost only by default. Set to 0.0.0.0 for Docker or remote access.
MCP_HTTP_TOKENWhen set, the /mcp endpoint requires Authorization: Bearer <token>. The /health endpoint is always public.
MANTIS_SEARCH_ENABLEDfalseSet to true to enable semantic search
MANTIS_SEARCH_BACKENDvectraVector store backend: vectra (pure JS) or sqlite-vec (requires manual install)
MANTIS_SEARCH_DIR{MANTIS_CACHE_DIR}/searchDirectory for the search index
MANTIS_SEARCH_MODELXenova/paraphrase-multilingual-MiniLM-L12-v2Embedding model name (downloaded once on first use, ~80 MB)
MANTIS_SEARCH_THREADS1Number of ONNX intra-op threads for the embedding model. Default is 1 to prevent CPU saturation on multi-core machines and WSL. Increase only if index rebuild speed matters and the host is dedicated to this workload.
MANTIS_UPLOAD_DIRRestrict upload_file to files within this directory. When set, any file_path outside the directory is rejected (path traversal attempts via ../ are blocked). Without this variable there is no restriction.

Config file (fallback)

If no environment variables are set, ~/.claude/mantis.json is read:

{
  "base_url": "https://your-mantis.example.com/api/rest",
  "api_key": "your-api-token"
}

Available tools

Issues

ToolDescription
get_issueRetrieve an issue by its numeric ID
list_issuesFilter issues by project, status, author, and more; optional select for field projection and status for client-side status filtering
create_issueCreate a new issue; optional handler parameter accepts a username as alternative to handler_id (resolved against project members)
update_issueUpdate an existing issue
delete_issueDelete an issue

Notes

ToolDescription
list_notesList all notes of an issue
add_noteAdd a note to an issue
delete_noteDelete a note

Attachments

ToolDescription
list_issue_filesList attachments of an issue
upload_fileUpload a file to an issue — either by local file_path or Base64-encoded content + filename

Relationships

ToolDescription
add_relationshipCreate a relationship between two issues; optional type_name parameter accepts a string name (e.g. "related_to", "duplicate_of") as alternative to numeric type_id
remove_relationshipRemove a relationship from an issue (use the id from the relationship object, not the type)

Monitors

ToolDescription
add_monitorAdd yourself as a monitor of an issue
remove_monitorRemove a user as a monitor of an issue

Tags

ToolDescription
list_tagsList all available tags; falls back to the metadata cache when GET /tags returns 404 (run sync_metadata first to populate)
attach_tagsAttach tags to an issue
detach_tagRemove a tag from an issue

Projects

ToolDescription
list_projectsList all accessible projects
get_project_versionsGet versions of a project; optional obsolete and inherit booleans to include obsolete or parent-inherited versions
get_project_categoriesGet categories of a project
get_project_usersGet users of a project

Semantic search (optional)

Instead of exact keyword matching, semantic search understands the meaning behind a query. Ask in plain language — the search engine finds conceptually related issues even when the wording doesn't match:

  • "login fails after password reset" — finds issues about authentication edge cases
  • "performance problems on the checkout page" — surfaces related reports regardless of the exact terminology used
  • "duplicate entries in the invoice list" — catches issues described as "shown twice", "double records", etc.

The embedding model (~80 MB) runs entirely offline — no OpenAI key, no external API. It is downloaded once on first start and cached locally. Issues are indexed incrementally on every server start (only new and updated issues are re-indexed).

Activate with MANTIS_SEARCH_ENABLED=true.

ToolDescription
search_issuesNatural language search over all indexed issues — returns top-N results with cosine similarity score; optional select (comma-separated field names) enriches each result with the requested issue fields
rebuild_search_indexBuild or update the search index; full: true clears and rebuilds from scratch
get_search_index_statusReturn the current fill level of the search index: how many issues are indexed vs. total, and the timestamp of the last sync

Which backend to choose?

vectra (default)sqlite-vec
DependenciesNone (pure JS)Requires native build tools
InstallIncludednpm install sqlite-vec better-sqlite3
Best forUp to ~10,000 issues10,000+ issues
PerformanceFast enough for most setupsFaster for large corpora

Start with vectra. Switch to sqlite-vec if indexing or query times become noticeably slow.

npm install sqlite-vec better-sqlite3
# then set MANTIS_SEARCH_BACKEND=sqlite-vec

Metadata & system

ToolDescription
get_issue_fieldsReturn all field names valid for the select parameter of list_issues
get_metadataRetrieve cached metadata (projects, users, versions, categories)
sync_metadataRefresh the metadata cache
list_filtersList saved filters
get_current_userRetrieve your own user profile
list_languagesList available languages
get_configShow server configuration (base URL, cache TTL)
get_issue_enumsReturn valid ID/name pairs for all issue enum fields (severity, status, priority, resolution, reproducibility) — use before create_issue / update_issue to look up correct values; on localized installations each entry may include a canonical_name with the standard English API name
get_mantis_versionGet MantisBT version and check for updates
get_mcp_versionReturn the version of this mantisbt-mcp-server instance

HTTP mode

For use as a standalone server (e.g. in remote setups):

MANTIS_BASE_URL=... MANTIS_API_KEY=... TRANSPORT=http PORT=3456 node dist/index.js

# With token authentication and explicit bind address (required for Docker/remote):
# MCP_HTTP_TOKEN=secret MANTIS_BASE_URL=... MANTIS_API_KEY=... \
#   TRANSPORT=http PORT=3456 MCP_HTTP_HOST=0.0.0.0 node dist/index.js

Health check: GET http://localhost:3456/health (always public, no token required)

Development

npm run init         # First-time setup: install deps, git hooks, typecheck
npm run build        # Compile TypeScript → dist/
npm run typecheck    # Type check without output
npm run dev          # Watch mode for development
npm test             # Run tests (vitest)
npm run test:watch   # Run tests in watch mode
npm run test:coverage # Coverage report

License

MIT – see LICENSE

Contributing

Contributions welcome! Please read CONTRIBUTING.md. Repository: codeberg.org/dpesch/mantisbt-mcp-server

Reviews

No reviews yet

Sign in to write a review