@dpesch/mantisbt-mcp-server

中文文档
1.15.0发布于 2026/11/01MITES Module

用于MantisBT REST API的MCP服务器-读取和管理错误跟踪器问题

中文使用文档
文档目录23 节
  1. 要求
  2. 安装
  3. 配置
  4. 环境变量
  5. 限制提供的工具
  6. 可用的工具
  7. 问题
  8. 笔记
  9. 附件
  10. 的关系
  11. 监控
  12. 标签
  13. 项目
  14. 语义搜索 (可选)
  15. 元数据与系统
  16. 使用令牌
  17. 可用的资源
  18. 可用的提示
  19. HTTP方式
  20. 文档
  21. 开发
  22. 许可证
  23. 贡献

MantisBT MCP服务器

npm version license MCP compatible MCP Badge MantisBT MCP Server

英语 · 多伊奇

一、 模型上下文协议(MCP) 集成了 MantisBT REST API Claude Code和其他mcp客户端直接从编辑器读取、创建和更新问题。

要求

  • Node.js≥22
  • 启用REST API的MantisBT安装(2.23+版本)
  • MantisBT API令牌(创建下 我的帐户→API令牌)

安装

通过npx(推荐):

将......添加到...... ~/.claude/claude_desktop_config.json (Claude Desktop)或你当地的 claude_desktop_config.json (Claude代码):

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

当地的构建:

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

配置

环境变量

变量要求默认的描述
MANTIS_BASE_URL✅–您的MantisBT安装的基础URL。两个 https://your-mantis.example.com 和 https://your-mantis.example.com/api/rest 被接受- /api/rest 后缀是自动规范化的。
MANTIS_API_KEY✅–身份验证的API令牌
MANTIS_USE_INDEX_PHP–汽车设置为 true 当URL重写不可用时- REST请求然后使用 /api/rest/index.php/ 而不是 /api/rest/。自动检测 MANTIS_BASE_URL 结尾 /api/rest/index.php;显式值总是占上风。看到 食谱.
MANTIS_CACHE_DIR–~/.cache/mantisbt-mcp元数据缓存的目录
MANTIS_CACHE_TTL–3600缓存生存期(以秒为单位)
TRANSPORT–stdio传输模式: stdio 或者 http
PORT–3000HTTP模式端口
MCP_HTTP_HOST–127.0.0.1HTTP模式绑定地址。 从 0.0.0.0 来 127.0.0.1 -服务器现在只监听本地主机默认情况下。设置为 0.0.0.0 用于Docker或远程访问。
MCP_HTTP_TOKEN✅(HTTP模式)–不记名令牌 /mcp 端点(Authorization: Bearer <token>)。 时需要 TRANSPORT=http -服务器拒绝在HTTP模式下启动没有它,所以工具永远不会暴露未经身份验证。在演播室模式下忽略。这个 /health 端点始终是公共的。
MANTIS_SEARCH_ENABLED–false设置为 true 启用语义搜索
MANTIS_SEARCH_BACKEND–vectraVector存储后端: vectra (纯JS)或 sqlite-vec (需要手动安装)
MANTIS_SEARCH_DIR–{MANTIS_CACHE_DIR}/search搜索索引的目录
MANTIS_SEARCH_MODEL–Xenova/paraphrase-multilingual-MiniLM-L12-v2嵌入模型名称(第一次使用时下载一次,~ 80mb)
MANTIS_SEARCH_THREADS–1嵌入模型的ONNX op内线程数。默认值为1,以防止多核机器和WSL上的CPU饱和。仅当索引重建速度很重要并且主机专门用于此工作负载时才增加。
MANTIS_UPLOAD_DIR––限制 upload_file的 file_path 到这个目录中的文件(路径遍历通过 ../ 被阻塞)。在 它的模式 file_path 是不受限制的,除非设置了这个。在 HTTP方式 file_path 从服务器的文件系统中读取,就是这样 禁用,除非设置了此变量 - HTTP客户端应该通过 content (Base64)参数。
MANTIS_TOOLSETS–(所有)以逗号分隔的工具组列表: issues, notes, links, files, projects, versions, meta, search (不区分大小写)。Unset或empty表示所有组。这个 search 团体额外要求 MANTIS_SEARCH_ENABLED=true;如果没有组,则根本不会启动搜索模块。未知的组名在启动时用一条列出有效名称的消息停止服务器。看到 限制提供的工具 和 食谱.
MANTIS_DISABLE_DESTRUCTIVE–false设置为 true 隐藏每一个破坏性的工具 delete_issue, delete_note, delete_version, remove_relationship, remove_monitor -不管活跃的群体是什么。隐藏工具不列出,调用时返回“Tool…not found”。

限制提供的工具

两个envars减少了提供给模型的工具表面-有助于保持模型上下文更短,并防止意外的破坏性操作:

  • MANTIS_TOOLSETS -只包含列出的组(逗号分隔,不区分大小写)
  • MANTIS_DISABLE_DESTRUCTIVE=true -额外隐藏 delete_issue, delete_note, delete_version, remove_relationship, remove_monitor 不管活跃的群体是什么

隐藏工具不列出,调用时返回“Tool…not found”。

集团工具
issuesget_issue, list_issues, create_issue, update_issue, delete_issue¹, get_issues__, list_notes__, list_issue_files__, add_monitor__, remove_monitor†¹
notesadd_note, delete_note¹
linksadd_relationship, remove_relationship¹, attach_tags, detach_tag, list_tags
filesupload_file
projectslist_projects, get_project, list_filters, get_project_categories__, get_project_users__, get_project_versions__, find_project_member__
versionscreate_version, update_version, delete_version¹, release_version__
metaget_metadata, get_issue_schema, get_config, get_version, get_current_user, get_metadata_full__, sync_metadata__, get_search_index_status__, get_issue_fields__, get_issue_enums__, get_mcp_version__, get_mantis_version__, list_languages__
searchsearch_issues, rebuild_search_index ²

¹隐藏于 MANTIS_DISABLE_DESTRUCTIVE=true ·†已弃用,在2.0.0·²中移除 MANTIS_SEARCH_ENABLED=true;没有 search 组搜索模块根本没有启动

弃用的工具总是和它们的替换工具属于同一个组——禁用一个组会同时隐藏旧的和新的名称。

A -分诊设置 (问题、注释和元数据;无破坏性操作):

{
  "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",
        "MANTIS_TOOLSETS": "issues,notes,meta",
        "MANTIS_DISABLE_DESTRUCTIVE": "true"
      }
    }
  }
}

使用实例B - all组,delete-protection only (41个默认工具中的36个):

{
  "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",
        "MANTIS_DISABLE_DESTRUCTIVE": "true"
      }
    }
  }
}

可用的工具

问题

工具描述
get_issue通过以下方式检索问题 id,或几个 ids (1-50)在一次呼叫中-只通过一次;与 ids 返回 { issues, requested, found, failed },丢失或无法访问的id给出 null 在他们的位置上;可选 select 用于现场投影
get_issues弃用: 使用 get_issue 与 ids 相反-将在2.0.0中删除
list_issues按项目、状态、作者等筛选问题;可选 select 用于现场投影和 status 用于客户端状态过滤-规范的英文状态名称(例如: "new", "resolved")由ID匹配,使过滤器在本地化安装上与语言无关; group_by ("status", "handler", "priority", "category")返回每个组的计数而不是问题列表-所有过滤器仍然适用, page, page_size, select 被忽略
create_issue创造一个新问题; severity 和 priority 必须是规范的英文名称(例如: minor, major, normal, high) -呼叫 get_issue_schema 查看所有有效值及其本地化标签;可选 handler 参数接受用户名作为选项 handler_id (针对项目成员解决);可选 custom_fields 设置自定义字段值
update_issue更新现有的问题;枚举字段(status, priority, severity, resolution, reproducibility)接受规范的英文名称、本地化名称或数字id——服务器自动将名称解析为id;支持 custom_fields 还有一个可选的 note 参数,在同一调用中追加注释; fields 可以省略,当只有 add_monitors, remove_monitors,或者 note 给出了;使用 add_monitors / remove_monitors (登录名数组)来添加或删除观察者——响应包括一个 monitors 键与当前和更改的监控列表;使用 fields.notes 按ID编辑已有的注释(注释ID from) get_issue)
delete_issue删除issue

笔记

工具描述
list_notes弃用: 使用 get_issue 与 select: "notes" 相反-将在2.0.0中删除
add_note给问题添加注释
delete_note删除笔记

附件

工具描述
list_issue_files弃用: 使用 get_issue 与 select: "attachments" 相反-将在2.0.0中删除
upload_file上传文件到issue -首选:本地 file_path (服务器自动读取和编码);回退:base64编码 content + filename (仅用于 file_path 不可用)

的关系

工具描述
add_relationship在两个问题之间建立关系;可选 type_name 参数接受字符串名称(例如: "related_to", "duplicate_of")作为数字的替代 type_id
remove_relationship从问题中删除关系(使用 id 来自关系对象,而不是类型)

监控

工具描述
add_monitor弃用: 使用 update_issue 与 add_monitors 相反-将在2.0.0中删除
remove_monitor弃用: 使用 update_issue 与 remove_monitors 相反-将在2.0.0中删除

标签

工具描述
list_tags列出所有可用的标签;时回退到元数据缓存 GET /tags 返回404(运行) get_metadata 与 refresh: true 首先填充)
attach_tags给问题附加标签
detach_tag从问题中移除标签

项目

工具描述
list_projects列出所有可访问的项目;返回规范化的项目数据(与元数据缓存一致)
get_project在一次调用中获取一个项目的主数据(id,名称,状态,启用,子项目)以及它的类别,用户和/或版本。 access_level 和 member_query 暗示 users; obsolete/inherit 暗示 versions
get_project_versions弃用: 使用 get_project 与 include: ["versions"] 相反-将在2.0.0中删除
create_version在项目中创建一个新版本;返回已创建的版本对象(id,名称,描述,已发布,废弃,时间戳);需要 manage_project_threshold (默认值:经理)
update_version更新现有版本;只有您传递的字段被更改(至少需要一个);重命名重写所有引用问题上的version/target_version/fixed_in_version;可选 next_version (只有 released: true)在同一个调用中创建一个后续版本;需要 manage_project_threshold (默认值:经理)
release_version弃用: 使用 update_version 与 released: true, timestamp,可选 next_version 相反-将在2.0.0中删除
delete_version永久删除一个版本-不可逆,MantisBT清除所有引用问题的version/target_version/fixed_in_version;更喜欢 update_version 与 obsolete=true 作为非破坏性的替代品;需要 manage_project_threshold (默认值:经理)
get_project_categories弃用: 使用 get_project 与 include: ["categories"] 相反-将在2.0.0中删除
get_project_users弃用: 使用 get_project 与 include: ["users"] 相反-将在2.0.0中删除
find_project_member弃用: 使用 get_project 与 member_query (没有 limit(返回所有匹配项)-将在2.0.0中删除

语义搜索 (可选)

而不是精确的关键字匹配,语义搜索理解 意义 在查询后面。用通俗易懂的语言提问——即使措辞不匹配,搜索引擎也能找到概念上相关的问题。

  • “重置密码后登录失败” -查找有关认证边缘情况的问题
  • “结帐页面的性能问题” -表面相关的报告,而不管使用的确切术语
  • 发票清单上的重复条目 -捕获被描述为“显示两次”、“重复记录”等问题。

嵌入模型(~ 80mb)完全运行 离线 -没有OpenAI密钥,没有外部API。它在第一次启动时下载一次,并在本地缓存。问题在每次服务器启动时都被增量索引(只有新的和更新的问题被重新索引)。当多个客户端会话同时启动服务器时,只有其中一个会话同步共享索引。该模型在第一次使用时加载,并在10分钟后再次卸载,没有嵌入,因此空闲会话不会占用其内存(每个服务器进程约0.9 GB)。

激活与 MANTIS_SEARCH_ENABLED=true.

工具描述
search_issues自然语言搜索在所有索引的问题-返回前n的结果与余弦相似度得分;可选 select (逗号分隔字段名)用请求的问题字段丰富每个结果;可选 highlight (布尔,默认 false)加a highlights 字段,其中包含与关键字匹配的摘录 summary 和 description (与 **bold**)
rebuild_search_index建立或更新搜索索引; full: true 从头开始清理和重建
get_search_index_status弃用: 使用 get_metadata (字段 search_index) -将在2.0.0中删除

选择哪个后端?

vectra (默认)sqlite-vec
依赖关系无(纯JS)需要本地构建工具
安装包括npm install sqlite-vec better-sqlite3
最适合多达10,000个问题10000 +的问题
表演对于大多数设置来说足够快对于大型语料库更快

从……开始 vectra. 切换到 sqlite-vec 如果索引或查询时间明显变慢。

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

元数据与系统

工具描述
get_metadata检索缓存的元数据: detail: "summary" (默认)返回项目/标签计数和每个项目的用户/版本/类别计数; detail: "full" 返回完整的原始缓存; refresh: true 首先从MantisBT重新获取;启用语义搜索后,响应还包含一个 search_index 块
get_version此MCP服务器和连接的MantisBT安装的版本在一个响应中; check_latest (默认 true)比较MantisBT和最新的GitHub版本; mantis 持有 error 当无法联系到MantisBT时
get_issue_schema有效的 select 字段(fields, fields_source)和枚举值(enums(严重性、状态、优先级、解决方案、可再现性)在一个响应中显示此MantisBT服务器;可选 project_id 范围字段发现-以前使用过 create_issue / update_issue 或者在构建 select 字符串
get_issue_fields弃用: 使用 get_issue_schema 相反-将在2.0.0中删除
get_issue_enums弃用: 使用 get_issue_schema 相反;资源 mantis://enums 停留-将在2.0.0中移除
get_metadata_full弃用: 使用 get_metadata 与 detail: "full" 相反-将在2.0.0中删除
sync_metadata弃用: 使用 get_metadata 与 refresh: true 相反-将在2.0.0中删除
list_filters保存的过滤器列表
get_current_user检索您自己的用户配置文件-包括 language (用户的MantisBT语言,在发布文本和注释中使用哪种语言的提示)
list_languages弃用: 使用 get_current_user (字段 language) -将在2.0.0中删除
get_config显示服务器配置(基本URL,缓存TTL)
get_mantis_version弃用: 使用 get_version 相反-将在2.0.0中删除
get_mcp_version弃用: 使用 get_version 相反-将在2.0.0中删除

使用令牌

服务器自己处理计数和字段投影——模型接收一个紧凑的摘要,而不是读取原始问题列表。在2026-10-31对MantisBT 2.28安装进行测试(604个问题,5个问题有很长的描述/注释):

任务之前令牌后令牌保存
项目状态概述(604期)list_issues,所有页面1274398年list_issues + group_by: "status"16599.9%
每个处理程序的开放问题list_issues 状态 "open" + select,所有页面¹2686年list_issues + group_by: "handler"10895.9%
选定字段的5个问题get_issue ids,没有 select16272年get_issue id + select62396.1%

¹ list_issues 当客户端过滤器处于活动状态时,最多扫描500个问题,因此这个“before”值被低估了。

记号估计为字符/ 4。要在你自己的实例上复制(需要git签出,不能通过npx):

MANTIS_BASE_URL=… MANTIS_API_KEY=… \
  BENCHMARK_PROJECT_ID=12 BENCHMARK_ISSUE_IDS=101,102,103,104,105 \
  npm run benchmark

证书也可能来自 .env.local.

可用的资源

MCP资源是可uri寻址的只读数据,客户端无需调用工具即可直接获取。它们是继工具和提示符之后的第三个MCP原语。请注意,在MCP客户端中,资源支持的实现范围不如工具广泛——请查看客户端的文档。

资源URI描述
mantis://me通过身份验证的API用户的概要文件(实时获取)
mantis://projects所有可访问的MantisBT项目作为一个紧凑的列表(缓存支持,刷新通过 get_metadata 与 refresh: true)
mantis://projects/{id}组合项目视图:一次调用项目字段+用户+版本+类别;缓存优先,列表支持枚举所有可用的项目uri
mantis://enums所有问题枚举字段的有效值:严重性、优先级、状态、解析、再现性(实时获取)

可用的提示

MCP提示模板是对话启动器,它指示LLM收集结构化输入,然后调用适当的工具。它们本身并不是工具——它们启动了一个被引导的工作流。

提示所需的参数可选参数描述
create-bug-reportproject_id, category, summary, descriptionsteps_to_reproduce, expected, actual, environment指导结构化的bug报告和调用 create_issue
create-feature-requestproject_id, category, summary, descriptionuse_case指导完成一个特性请求和调用 create_issue
summarize-issueissue_id–通过获取问题 get_issue 并返回一个简明的摘要
project-statusproject_id–通过以下方式列出问题 list_issues 并生成按严重性分组的状态报告

HTTP方式

作为独立服务器使用(例如在远程设置中)。 MCP_HTTP_TOKEN 是 要求 在HTTP模式下-服务器拒绝启动没有它:

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

每一个 /mcp 请求必须发送 Authorization: Bearer <token>. 通过HTTP, upload_file的 file_path 被禁用,除非 MANTIS_UPLOAD_DIR 设置-使用 content (Base64)参数。

健康检查: GET http://localhost:3456/health (总是公开的,不需要令牌)

文档

  • 食谱 -面向工具的食谱,包括所有注册工具的复制粘贴参数示例
  • 用法示例 -日常用例的自然语言提示示例(不需要工具名称)

开发

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
npm run benchmark    # Token benchmark against a live MantisBT (see Token usage above)

许可证

MIT -见 许可证

贡献

贡献欢迎!请阅读 CONTRIBUTING.md. 存储库: codeberg.org/dpesch/mantisbt-mcp-server

版本与发布记录

@dpesch/mantisbt-mcp-server 共发布 40 个版本,首次发布于 2026/03/15;过去 12 个月发布了 40 个版本。

版本发布日期距今
1.15.0latest2026/11/012 天前
1.14.12026/10/249 天前
1.14.02026/09/281 个月前
1.13.02026/09/271 个月前
1.12.02026/08/292 个月前
1.11.02026/07/034 个月前

关于 @dpesch/mantisbt-mcp-server 的常见问题

@dpesch/mantisbt-mcp-server 是什么?

用于MantisBT REST API的MCP服务器-读取和管理错误跟踪器问题

如何安装 @dpesch/mantisbt-mcp-server?

在项目目录运行 npm install @dpesch/mantisbt-mcp-server,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mantisbt-mcp-server,可以用 npx mantisbt-mcp-server 直接运行。

@dpesch/mantisbt-mcp-server 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/dpesch__mantisbt-mcp-server 是否存在。

@dpesch/mantisbt-mcp-server 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@dpesch/mantisbt-mcp-server 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@dpesch/mantisbt-mcp-server 可以商用吗?

@dpesch/mantisbt-mcp-server 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dpesch/mantisbt-mcp-server 还在维护吗?

最新版本 1.15.0 发布于 2026/11/01(2 天前);至今共发布 40 个版本,其中过去 12 个月发布了 40 个;首次发布于 2026/03/15。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。