MantisBT MCP Server

Integra o rastreador de bugs MantisBT no Claude e outros clientes MCP via API REST. Leia e gerencie issues, notas, anexos de arquivos, tags, relacionamentos e monitores — com pesquisa semântica offline opcional em todas as issues.

Documentação

Servidor MCP para a API REST do MantisBT – leia e gerencie issues do rastreador de bugs diretamente do Claude Code e de outros clientes compatíveis com MCP.

Dominik Pesch 6d251673d9

CI / Publish / ci (push) Foi ignorado

Detalhes

CI / Publish / publish (push) Foi ignorado

Detalhes

chore: release v1.14.0
2026-09-27 19:52:48 +02:00
.giteaExigir Node.js 22 e migrar para vitest 52026-09-27 16:38:43 +02:00
.github/workflowsExigir Node.js 22 e migrar para vitest 52026-09-27 16:38:43 +02:00
docsUsar travessões en na documentação em alemão2026-09-27 15:46:20 +02:00
scriptsExigir Node.js 22 e migrar para vitest 52026-09-27 16:38:43 +02:00
srcMigrar para zod 42026-09-27 16:43:25 +02:00
testsMigrar para zod 42026-09-27 16:43:25 +02:00
.gitignoreIgnorar conteúdos temporários do playwright2026-04-26 09:23:25 +02:00
.npmignoreCorrigir .npmignore: excluir arquivos sensíveis e artefatos de desenvolvimento2026-06-29 20:30:20 +02:00
CHANGELOG.mdchore: release v1.14.02026-09-27 19:52:48 +02:00
CLAUDE.mdExigir Node.js 22 e migrar para vitest 52026-09-27 16:38:43 +02:00
CONTRIBUTING.mdExigir Node.js 22 e migrar para vitest 52026-09-27 16:38:43 +02:00
glama.jsonchore: adicionar glama.json para listagem no diretório MCP do Glama2026-03-18 18:48:12 +01:00
LICENSEchore: release v1.0.02026-03-15 14:10:54 +01:00
package-lock.jsonchore: release v1.14.02026-09-27 19:52:48 +02:00
package.jsonchore: release v1.14.02026-09-27 19:52:48 +02:00
README.de.mdExigir Node.js 22 e migrar para vitest 52026-09-27 16:38:43 +02:00
README.mdExigir Node.js 22 e migrar para vitest 52026-09-27 16:38:43 +02:00
server.jsonchore: release v1.14.02026-09-27 19:52:48 +02: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

MantisBT MCP Server

npm version license MCP compatible MCP Badge MantisBT MCP Server

Inglês · Alemão

Um servidor Model Context Protocol (MCP) que integra a API REST do MantisBT ao Claude Code e a outros clientes compatíveis com MCP. Leia, crie e atualize issues diretamente do seu editor.

Requisitos

  • Node.js ≥ 22
  • Instalação do MantisBT com API REST habilitada (versão 2.23+)
  • Token de API do MantisBT (crie em Minha Conta → Tokens de API)

Instalação

Via npx (recomendado):

Adicione ao ~/.claude/claude_desktop_config.json (Claude Desktop) ou ao seu claude_desktop_config.json local (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"
      }
    }
  }
}

Build local:

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"
      }
    }
  }
}

Configuração

Variáveis de ambiente

VariávelObrigatóriaPadrãoDescrição
MANTIS_BASE_URL✅–URL base da sua instalação do MantisBT. Tanto https://your-mantis.example.com quanto https://your-mantis.example.com/api/rest são aceitos — o sufixo /api/rest é normalizado automaticamente.
MANTIS_API_KEY✅–Token de API para autenticação
MANTIS_USE_INDEX_PHP–autoDefina como true quando a reescrita de URL não estiver disponível — as solicitações REST usarão /api/rest/index.php/ em vez de /api/rest/. Detectado automaticamente quando MANTIS_BASE_URL termina com /api/rest/index.php; um valor explícito sempre tem prioridade. Consulte o cookbook.
MANTIS_CACHE_DIR–~/.cache/mantisbt-mcpDiretório para o cache de metadados
MANTIS_CACHE_TTL–3600Tempo de vida do cache em segundos
TRANSPORT–stdioModo de transporte: stdio ou http
PORT–3000Porta para o modo HTTP
MCP_HTTP_HOST–127.0.0.1Endereço de bind para o modo HTTP. Alterado de 0.0.0.0 para 127.0.0.1 — o servidor agora escuta apenas em localhost por padrão. Defina como 0.0.0.0 para Docker ou acesso remoto.
MCP_HTTP_TOKEN✅ (modo HTTP)–Token Bearer para o endpoint /mcp (Authorization: Bearer <token>). Obrigatório quando TRANSPORT=http — o servidor se recusa a iniciar no modo HTTP sem ele, para que as ferramentas nunca sejam expostas sem autenticação. Ignorado no modo stdio. O endpoint /health é sempre público.
MANTIS_SEARCH_ENABLED–falseDefina como true para habilitar a busca semântica
MANTIS_SEARCH_BACKEND–vectraBackend do armazenamento vetorial: vectra (JS puro) ou sqlite-vec (requer instalação manual)
MANTIS_SEARCH_DIR–{MANTIS_CACHE_DIR}/searchDiretório para o índice de busca
MANTIS_SEARCH_MODEL–Xenova/paraphrase-multilingual-MiniLM-L12-v2Nome do modelo de embeddings (baixado uma vez no primeiro uso, ~80 MB)
MANTIS_SEARCH_THREADS–1Número de threads intra-op ONNX para o modelo de embeddings. O padrão é 1 para evitar saturação da CPU em máquinas com múltiplos núcleos e WSL. Aumente apenas se a velocidade de reconstrução do índice for importante e o host for dedicado a essa carga de trabalho.
MANTIS_UPLOAD_DIR––Restringir o upload_file do file_path a arquivos dentro deste diretório (traversal de caminho via ../ é bloqueado). No modo stdio, file_path não tem restrições, a menos que isso seja definido. No modo HTTP, file_path lê do sistema de arquivos do servidor, portanto é desabilitado a menos que esta variável seja definida — clientes HTTP devem enviar via o parâmetro content (Base64) em vez disso.

Ferramentas disponíveis

Issues

FerramentaDescrição
get_issueRecupera um problema pelo seu ID numérico; select opcional para projeção de campos, reduzindo o tamanho da resposta
get_issuesRecupera múltiplos problemas por ID em uma única chamada (1–50 IDs); problemas ausentes ou inacessíveis retornam null em sua posição, em vez de falhar a chamada
list_issuesFiltra problemas por projeto, status, autor e mais; select opcional para projeção de campos e status para filtragem de status no lado do cliente — nomes canônicos de status em inglês (ex.: "new", "resolved") são correspondidos por ID, tornando o filtro independente do idioma em instalações localizadas
create_issueCria um novo problema; severity e priority devem ser nomes canônicos em inglês (ex.: minor, major, normal, high) — chame get_issue_enums para ver todos os valores válidos e seus rótulos localizados; o parâmetro opcional handler aceita um nome de usuário como alternativa a handler_id (resolvido entre os membros do projeto); custom_fields opcional para definir valores de campos personalizados
update_issueAtualiza um problema existente; campos de enumeração (status, priority, severity, resolution, reproducibility) aceitam nomes canônicos em inglês, nomes localizados ou IDs numéricos — o servidor resolve nomes para IDs automaticamente; suporta custom_fields e um parâmetro opcional note que adiciona uma nota na mesma chamada (ex.: o motivo de uma mudança de status)
delete_issueExclui um problema

Notas

FerramentaDescrição
list_notesLista todas as notas de um problema
add_noteAdiciona uma nota a um problema
delete_noteExclui uma nota

Anexos

FerramentaDescrição
list_issue_filesLista anexos de um problema
upload_fileEnvia um arquivo para um problema — preferido: file_path local (o servidor lê e codifica automaticamente); alternativa: content codificado em Base64 + filename (use apenas quando file_path não estiver disponível)

Relacionamentos

FerramentaDescrição
add_relationshipCria um relacionamento entre dois problemas; o parâmetro opcional type_name aceita um nome de string (ex.: "related_to", "duplicate_of") como alternativa ao type_id numérico
remove_relationshipRemove um relacionamento de um problema (use o id do objeto de relacionamento, não o tipo)

Monitores

FerramentaDescrição
add_monitorAdiciona um usuário como monitor de um problema
remove_monitorRemove um usuário como monitor de um problema

Tags

FerramentaDescrição
list_tagsLista todas as tags disponíveis; usa o cache de metadados como fallback quando GET /tags retorna 404 (execute sync_metadata primeiro para popular)
attach_tagsAnexa tags a um problema
detach_tagRemove uma tag de um problema

Projetos

FerramentaDescrição
list_projectsLista todos os projetos acessíveis; retorna dados normalizados do projeto (consistentes com o cache sync_metadata)
get_project_versionsObtém versões de um projeto; os booleanos opcionais obsolete e inherit incluem versões obsoletas ou herdadas do projeto pai; cada versão inclui um campo timestamp (data da versão); veja create_version, update_version, release_version, delete_version para modificar versões
create_versionCria uma nova versão em um projeto; retorna o objeto da versão criada (id, nome, descrição, lançada, obsoleta, timestamp); requer manage_project_threshold (padrão: gerente)
update_versionAtualiza uma versão existente; apenas os campos passados são alterados (pelo menos um é obrigatório); renomear reescreve version/target_version/fixed_in_version em todos os problemas referenciados; requer manage_project_threshold (padrão: gerente)
release_versionMarca uma versão como lançada e define sua data (padrão: agora); opcionalmente cria uma versão de acompanhamento na mesma etapa via next_version; requer manage_project_threshold (padrão: gerente)
delete_versionExclui permanentemente uma versão — irreversível, o MantisBT limpa version/target_version/fixed_in_version em todos os problemas referenciados; prefira update_version com obsolete=true como alternativa não destrutiva; requer manage_project_threshold (padrão: gerente)
get_project_categoriesObtém categorias de um projeto
get_project_usersObtém usuários de um projeto
find_project_memberBusca membros do projeto por nome, nome real ou e-mail (correspondência de substring sem diferenciar maiúsculas/minúsculas); query e limit opcionais (padrão 10, máximo 100); prioriza o cache

Busca semântica (opcional)

Em vez de correspondência exata de palavras-chave, a busca semântica entende o significado por trás de uma consulta. Pergunte em linguagem natural — o mecanismo de busca encontra problemas conceitualmente relacionados mesmo quando a redação não corresponde:

  • "o login falha após redefinir a senha" — encontra problemas sobre casos extremos de autenticação
  • "problemas de desempenho na página de checkout" — traz relatórios relacionados independentemente da terminologia exata usada
  • "entradas duplicadas na lista de faturas" — captura problemas descritos como "exibido duas vezes", "registros duplicados", etc.

O modelo de incorporação (~80 MB) roda inteiramente offline — sem chave OpenAI, sem API externa. Ele é baixado uma vez na primeira inicialização e armazenado em cache localmente. Os problemas são indexados incrementalmente a cada inicialização do servidor (apenas problemas novos e atualizados são reindexados).

Ative com MANTIS_SEARCH_ENABLED=true.

FerramentaDescrição
search_issuesBusca em linguagem natural sobre todos os problemas indexados — retorna os N principais resultados com pontuação de similaridade de cosseno; select opcional (nomes de campos separados por vírgula) enriquece cada resultado com os campos solicitados do problema; highlight opcional (booleano, padrão false) adiciona um campo highlights por resultado com trechos correspondentes por palavras-chave de summary e description (termos correspondentes exibidos em **bold**)
rebuild_search_indexConstrói ou atualiza o índice de busca; full: true limpa e reconstrói do zero
get_search_index_statusRetorna o nível atual de preenchimento do índice de busca: quantos problemas estão indexados vs. o total, e o timestamp da última sincronização

Qual backend escolher?

vectra (padrão)sqlite-vec
DependênciasNenhuma (JS puro)Requer ferramentas de build nativas
InstalaçãoIncluídonpm install sqlite-vec better-sqlite3
Melhor paraAté ~10.000 problemas10.000+ problemas
DesempenhoRápido o suficiente para a maioria das configuraçõesMais rápido para grandes corpora

Comece com vectra. Mude para sqlite-vec se os tempos de indexação ou consulta ficarem visivelmente lentos.

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

Metadados e sistema

FerramentaDescrição
get_issue_fieldsRetorna todos os nomes de campos válidos para o parâmetro select de list_issues
get_metadataRecupera um resumo compacto de metadados: contagens de projetos/tags e contagens de usuários/versões/categorias por projeto; use get_metadata_full para arrays completos
get_metadata_fullRetorna o cache completo de metadados brutos como JSON minificado (todos os projetos com campos completos, usuários/versões/categorias por projeto, todas as tags)
sync_metadataAtualiza o cache de metadados
list_filtersLista filtros salvos
get_current_userRecupera seu próprio perfil de usuário
list_languagesLista idiomas disponíveis
get_configMostra a configuração do servidor (URL base, TTL do cache)
get_issue_enumsRetorna pares válidos de ID/nome para todos os campos de enumeração de problemas (severidade, status, prioridade, resolução, reprodutibilidade) — use antes de create_issue / update_issue para consultar valores corretos; em instalações localizadas, cada entrada pode incluir um canonical_name com o nome padrão da API em inglês
get_mantis_versionObtém a versão do MantisBT e verifica atualizações
get_mcp_versionRetorna a versão desta instância do mantisbt-mcp-server

Recursos disponíveis

Recursos MCP são dados somente leitura endereçáveis por URI que os clientes podem buscar diretamente sem chamar uma ferramenta. Eles são a terceira primitiva MCP, junto com Ferramentas e Prompts. Observe que o suporte a Recursos é menos amplamente implementado em clientes MCP do que Ferramentas — consulte a documentação do seu cliente.

URI do recursoDescrição
mantis://mePerfil do usuário da API autenticado (busca ao vivo)
mantis://projectsTodos os projetos MantisBT acessíveis como uma lista compacta (com suporte a cache, atualizada via sync_metadata)
mantis://projects/{id}Visão combinada do projeto: campos do projeto + usuários + versões + categorias em uma única chamada; prioriza o cache; suporte a lista para enumerar todos os URIs de projeto disponíveis
mantis://enumsValores válidos para todos os campos de enumeração de problemas: severidade, prioridade, status, resolução, reprodutibilidade (busca ao vivo)

Prompts disponíveis

Modelos de prompt MCP são iniciadores de conversa que instruem o LLM a coletar entrada estruturada e então chamar a ferramenta apropriada. Eles não são ferramentas em si — iniciam um fluxo de trabalho guiado.

PromptArgumentos obrigatóriosArgumentos opcionaisDescrição
create-bug-reportproject_id, category, summary, descriptionsteps_to_reproduce, expected, actual, environmentGuia por um relatório de bug estruturado e chama create_issue
create-feature-requestproject_id, category, summary, descriptionuse_caseGuia por uma solicitação de recurso e chama create_issue
summarize-issueissue_id–Busca um problema via get_issue e retorna um resumo conciso
project-statusproject_id–Lista problemas via list_issues e gera um relatório de status agrupado por severidade

Modo HTTP

Para uso como servidor autônomo (ex.: em configurações remotas). MCP_HTTP_TOKEN é obrigatório no modo HTTP — o servidor se recusa a iniciar sem ele:

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

# With 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

Cada requisição /mcp deve enviar Authorization: Bearer <token>. Via HTTP, o file_path de upload_file é desabilitado a menos que MANTIS_UPLOAD_DIR esteja definido — use o parâmetro content (Base64) em vez disso.

Verificação de saúde: GET http://localhost:3456/health (sempre público, sem token necessário)

Documentação

  • Cookbook — receitas orientadas a ferramentas com exemplos de parâmetros prontos para copiar e colar para todas as ferramentas registradas
  • Exemplos de Uso — exemplos de prompts em linguagem natural para casos de uso do dia a dia (sem necessidade de nomes de ferramentas)

Desenvolvimento

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

Licença

MIT – veja LICENSE

Contribuindo

Contribuições são bem-vindas! Por favor, leia CONTRIBUTING.md. Repositório: codeberg.org/dpesch/mantisbt-mcp-server