A side-by-side look at the Mantisbt MCP Server and Redmine MCP Server MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Mantisbt MCP Server for product management work as a local process; choose Redmine MCP Server for product management. You can also run both side by side in one mcpServers block.
MANTIS_BASE_URL, MANTIS_API_KEY, MCP_HTTP_TOKEN.get_issue, get_issues, list_issues.REDMINE_URL, REDMINE_API_KEY.getCurrentUser, listProjects, getProject.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Product Management | Product Management |
| Quality signal | 60/100 · Good | 45/100 · Fair |
| Install command | Confirmed | Not confirmed yet |
| Transport | Local subprocess (stdio) | — |
| Auth | API key required | Not declared |
| Pricing | Free | Not declared |
| Required env vars | MANTIS_BASE_URLMANTIS_API_KEYMCP_HTTP_TOKEN | REDMINE_URLREDMINE_API_KEY |
| Verified owner | Community listing | Community listing |
| GitHub stars | 12 | 0 |
| Directory activity | 0 views 0 installs 0 upvotes | 0 views 0 installs 0 upvotes |
| Tools | 30 | 39 |
| Full listing | View Mantisbt MCP Server | View Redmine MCP Server |
get_issueRetrieve an issue by its numeric ID; optional `select` for field projection to reduce response sizeget_issuesRetrieve multiple issues by ID in one call (1–50 IDs); missing or inaccessible IDs return `null` at their position instead of failing the calllist_issuesFilter issues by project, status, author, and more; optional `select` for field projection and `status` for client-side status filtering — canonical English status names (e.g. `"new"`, `"resolved"`) are matched by ID, making the filter language-independent on localized installationscreate_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 proje…update_issueUpdate an existing issue; enum fields (`status`, `priority`, `severity`, `resolution`, `reproducibility`) accept canonical English names, localized names, or numeric IDs — the server resolves names to IDs automatically; supports `custom_fields` and an optional `note` parameter that appends a note i…delete_issueDelete an issuelist_notesList all notes of an issueadd_noteAdd a note to an issuedelete_noteDelete a notelist_issue_filesList attachments of an issueupload_fileUpload a file to an issue — preferred: local `file_path` (server reads and encodes automatically); fallback: Base64-encoded `content` + `filename` (use only when `file_path` is not available)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_idgetCurrentUserCurrent user: ID, login, groups, projects. Useful for "my issues" filteringlistProjectsList of all accessible projectsgetProjectProject details: trackers, modules, descriptionlistProjectMembersProject members with roleslistVersionsProject versions (milestones)listIssuesIssue list with filters: project, status, tracker, assignee, priority, version, saved query, custom fields (`customFieldFilters` in `cf_<id>=value` format), sortingsearchIssuesFull-text issue search with detailed resultsgetIssueIssue details: description, status, assignee, dates, notes, relations, custom fields, attachments, linked revisions (`changesets`). Parameters: `issueId`, `focus` (`default`, `implementation`, `timeline`, `full`; optional)getIssueJournalA single complete issue journal note/event without response compression. Parameters: `issueId`, `journalIdgetMyIssuesIssues of the current user. Parameters: `projectId`, `statusId`, `sort`, `limit`, `offsetgetIssueTreeParent chain and subtasks. `root` and `ancestors` keep the `Issue` JSON shape but contain compact context; call `getIssue` for full details or relations. Parameters: `issueId`, `depth` (default 2, max 5)getIssueHistoryCreation and every journal event, with status intervals. Long text is shortened; `journalId` identifies the full entry for `getIssueJournal`. Follow `nextOffset` with the optional `offset` parameter until it is absent.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"dpesch-mantisbt-mcp-server": {
"command": "npx",
"args": [
"-y",
"@dpesch/mantisbt-mcp-server"
],
"env": {
"MANTIS_BASE_URL": "YOUR_MANTIS_BASE_URL_HERE",
"MANTIS_API_KEY": "YOUR_MANTIS_API_KEY_HERE",
"MCP_HTTP_TOKEN": "YOUR_MCP_HTTP_TOKEN_HERE"
}
}
}
}
No confirmed install command for Redmine MCP Server yet — follow the setup steps linked from its listing page rather than a guessed package name.