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.

dpesch/mantisbt-mcp-server

Watch 1

Star 0

Fork

You've already forked mantisbt-mcp-server

0

MCP server for MantisBT REST API – read and manage bug tracker issues directly from Claude Code and other MCP-compatible clients.

97 commits1 branch19 tags 1,002 KiB

  • TypeScript 94.4%
  • JavaScript 5.6%

Find a file

HTTPS

Dominik Pesch a7be7e8d2f All checks were successful CI / Publish / ci (push) Has been skipped Details CI / Publish / publish (push) Has been skipped Details chore: release v1.5.92026-03-20 10:54:06 +01:00
.giteaci: add GitHub release step to publish workflow2026-03-18 18:59:31 +01:00
docsdocs: link cookbook and examples from README and cross-link docs2026-03-20 10:49:57 +01:00
scriptsfeat: add npm run init and versioned git hook2026-03-18 08:00:24 +01:00
srcfix: Validate severity/priority in create_issue against canonical names2026-03-20 09:40:16 +01:00
testsfix: Validate severity/priority in create_issue against canonical names2026-03-20 09:40:16 +01:00
.gitignorechore: release v1.5.62026-03-18 14:17:08 +01:00
.npmignorechore: release v1.0.02026-03-15 14:10:54 +01:00
CHANGELOG.mdchore: release v1.5.92026-03-20 10:54:06 +01:00
CLAUDE.mddocs: trim CLAUDE.md from 254 to 76 lines2026-03-18 10:28:14 +01:00
CONTRIBUTING.mddocs: add PR template and note about cherry-pick integration workflow2026-03-15 21:00:37 +01:00
glama.jsonchore: add glama.json for Glama MCP directory listing2026-03-18 18:48:12 +01:00
LICENSEchore: release v1.0.02026-03-15 14:10:54 +01:00
package-lock.jsonfeat: add npm run init and versioned git hook2026-03-18 08:00:24 +01:00
package.jsonchore: release v1.5.92026-03-20 10:54:06 +01:00
README.de.mddocs: link cookbook and examples from README and cross-link docs2026-03-20 10:49:57 +01:00
README.mddocs: link cookbook and examples from README and cross-link docs2026-03-20 10:49:57 +01:00
server.jsonchore: release v1.5.92026-03-20 10:54:06 +01:00
tsconfig.build.jsonchore: release v1.0.02026-03-15 14:10:54 +01:00
tsconfig.jsonchore: release v1.0.02026-03-15 14:10:54 +01:00
vitest.config.tschore: release v1.0.02026-03-15 14:10:54 +01:00

README.md

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 localclaude_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 . 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; severity and priority must be canonical English names (e.g. minor, major, normal, high) — call get_issue_enums to see all valid values and their localized labels; 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)

Documentation

  • Cookbook — tool-oriented recipes with copy-paste-ready parameter examples for all registered tools
  • Usage Examples — natural language prompt examples for everyday use cases (no tool names 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

相關伺服器