关于 Bugasura
Bugasura 的 MCP 服务让 AI 助手通过自然语言操作测试管理项目,适用于管理测试、缺陷和迭代的团队。它提供交互式上下文选择,可按名称查找团队、项目和成员,无需预先记住 ID。
主要功能
- 01管理测试用例及评论
- 02跟踪缺陷与评论
- 03维护需求并关联测试
- 04规划迭代和测试运行
- 05管理测试数据环境与文件
- 06按名称查找团队和项目
适用场景
- 01创建并分配测试用例
- 02查看或更新缺陷状态
- 03把测试用例关联到需求
- 04安排定期测试运行
MCP 相关
作为 MCP 服务,Bugasura 向 AI 客户端提供项目测试管理工具,涵盖测试用例、缺陷、需求、迭代和测试运行等操作。托管 HTTP 服务通过 OAuth 登录认证。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.bugasura.io/mcpclaude mcp add --transport http io-bugasura-bugasura https://mcp.bugasura.io/mcp{"mcpServers":{"io-bugasura-bugasura":{"type":"http","url":"https://mcp.bugasura.io/mcp"}}}在 Cursor 中打开{"servers":{"io-bugasura-bugasura":{"type":"http","url":"https://mcp.bugasura.io/mcp"}}}在 VS Code 中打开{"mcpServers":{"io-bugasura-bugasura":{"type":"http","url":"https://mcp.bugasura.io/mcp"}}}{"mcpServers":{"io-bugasura-bugasura":{"serverUrl":"https://mcp.bugasura.io/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
Bugasura MCP 服务
让 AI 助手直接连接到你的测试管理工作区。
Bugasura MCP 服务支持 Claude、VS Code Copilot 和 Cursor 等 AI 工具通过自然语言与你的 Bugasura 项目交互——管理测试用例、跟踪问题、规划冲刺等。
⚠️ 3.3 版重大变更
| 变更内容 | 3.2 | 3.3 |
|---|---|---|
| 需求 ↔ 测试用例关联 | bugasura_link_unlink_requirement_testcases,带有 is_delete | bugasura_link_requirement_testcases 和 bugasura_unlink_requirement_testcases(具有破坏性);两者均接受逗号分隔的 testcase_ids |
| Coda、Jira、Confluence 和 Figma 导入(10 个工具) | 所有传输方式均提供 | 仅限本地(STDIO)。这些工具将相应服务的 API 令牌作为参数,因此托管服务不再列出它们,也会拒绝对它们的调用 |
⚠️ 3.0 版重大变更
身份验证已改为 OAuth 2.0 登录。如果你从 2.x 升级:
| 变更内容 | 2.x | 3.0 |
|---|---|---|
| 托管(HTTP)身份验证 | 在客户端配置中使用 X-Bugasura-API-Key 标头或 Authorization: Basic <key> | 从 MCP 客户端登录:客户端会打开 Bugasura 登录与授权页面,完成一次登录后便会静默刷新令牌。任何配置文件中都无需提供密钥。 |
api_key 工具参数 | 每个工具都有 | 已移除。工具从不接受密钥;助手不得索要密钥。 |
| STDIO(本地子进程) | BUGASURA_API_KEY 环境变量 | 未变——该环境变量是 STDIO 唯一的凭据来源。 |
| 提示词 | setup_api_key | connect_bugasura |
| 服务要求(HTTP) | 无 | MCP_PUBLIC_BASE_URL、BUGASURA_OAUTH_CLIENT_ID、BUGASURA_OAUTH_CLIENT_SECRET(参见 部署 OAuth 登录) |
⚠️ 2.0 版重大变更
如果你从 1.x 升级,请更新客户端配置:
| 变更内容 | 1.x | 2.0 |
|---|---|---|
| 工具名称 | create_issue、list_teams…… | bugasura_create_issue、bugasura_list_teams……(添加前缀,以便与其他 MCP 服务共存) |
| 默认 HTTP 端点 | /sse(SSE) | /mcp(可流式传输的 HTTP) |
| 列表/查找响应 | {status, project_list, …}(上游格式) | 标准分页封装 {status, total, count, offset, items, has_more, next_offset}——旧版键会作为额外字段保留一个版本 |
将客户端指向 /sse 的 1.x 客户端必须迁移到 /mcp——SSE 已移除。
功能
- 📋 测试用例管理 - 创建、更新、删除和搜索测试用例
- 💬 测试用例评论 - 添加、更新、删除和列出测试用例评论,并支持分页和筛选
- 🐛 问题跟踪 - 报告、管理和删除缺陷,并提供丰富的上下文信息
- 💬 问题评论 - 添加、更新、删除和列出问题评论,并支持分页和筛选
- 📝 需求管理 - 创建、整理和管理产品需求,并采用文件夹结构
- 📚 知识库 - 在项目知识库中上传、列出、标星和删除文档,并按需创建文件夹;还可从网站、Coda、Jira、Confluence 或 Figma 导入
- 🏃 迭代规划 - 创建、更新、删除和管理敏捷迭代
- 🏁 测试运行 - 创建一次性或计划(重复)运行,编辑、重新运行或删除运行,选择环境和应用构建版本,并添加测试用例——全部可按名称或 ID 操作
- 🧪 测试数据 - 管理项目的测试数据环境(创建、重命名、复制、删除)、环境变量和 Globals 作用域,以及测试数据文件(上传、读取、下载、删除)、应用构建版本和文件类别——全部可按名称或 ID 操作
- 🤖 Testpert 迭代 - 完整的 AI 驱动测试增强流程:上传规格、回答需求问题、编辑测试计划,并自动生成测试用例
- 👥 团队协作 - 使用姓名或电子邮件分配工作(自动解析为用户 ID)
- 👤 团队成员管理 - 使用团队名称或 ID 添加团队成员、更新角色并移除成员
- 🔍 智能发现 - 无需记住 ID,即可查找项目和团队
- 🤖 交互式工作流 - 为所有操作提供引导式上下文选择
快速开始
1. 拥有 Bugasura 账号
托管服务只需满足这一点。首次使用时,AI 工具会在浏览器中打开 Bugasura 登录页面;批准一次即可完成连接。令牌会自动刷新,有效期为 30 天。
只有在配置本地 STDIO 时才需要 API 密钥,详见 本地开发。
2. 安装 MCP 服务
将服务 URL 添加到你的 AI 工具中。无需请求头或密钥:客户端会从服务发现 OAuth 登录,并引导你完成登录。
Claude Desktop
打开 Claude Desktop → Settings → Connectors → Add Custom Connector
- 名称:
Bugasura - URL:
https://mcp.bugasura.io/mcp
点击 Connect,登录 Bugasura,然后在授权页面点击 Allow。
VS Code
在 VS Code 中安装,或将以下内容添加到 VS Code MCP 配置中:
{
"servers": {
"bugasura": {
"type": "http",
"url": "https://mcp.bugasura.io/mcp"
}
}
}
VS Code 会检测 OAuth 登录,并在首次使用工具时打开浏览器。
Claude Code
claude mcp add --transport http bugasura https://mcp.bugasura.io/mcp
然后在 Claude Code 中运行 /mcp,选择 Bugasura → Authenticate,并在浏览器中完成登录。
ChatGPT
Settings → Apps & Connectors → Advanced → 开启 Developer mode,然后点击 Create:
- 名称:
Bugasura - MCP 服务 URL:
https://mcp.bugasura.io/mcp - 身份验证:OAuth
点击 Create,登录 Bugasura,然后点击 Allow。
Codex
codex mcp add bugasura --url https://mcp.bugasura.io/mcp
codex mcp login bugasura
Cursor
添加到 Cursor,或将以下内容添加到 ~/.cursor/mcp.json:
{
"mcpServers": {
"bugasura": {
"url": "https://mcp.bugasura.io/mcp"
}
}
}
Cursor 会在服务旁显示 Needs login 标记;点击即可登录。
Windsurf
将以下内容添加到 Windsurf MCP 配置中:
{
"mcpServers": {
"bugasura": {
"serverUrl": "https://mcp.bugasura.io/mcp"
}
}
}
Windsurf 会在首次使用时打开登录页面。
Cline
- 打开 Cline
- 点击 ☰ → MCP Servers → Remote Servers 标签页
- 点击 Edit Configuration
- 添加:
{
"mcpServers": {
"bugasura": {
"url": "https://mcp.bugasura.io/mcp",
"type": "streamableHttp"
}
}
}
Roo Code
{
"mcpServers": {
"bugasura": {
"type": "streamable-http",
"url": "https://mcp.bugasura.io/mcp"
}
}
}
3. 开始使用
安装完成后,只需用自然语言与 AI 助手交流:
"List all my Bugasura teams and projects"
"Create a test case for login functionality with high severity"
"Create a requirement for user authentication feature"
"Show me all critical bugs in sprint 5"
工作原理
无需 ID
Bugasura MCP 提供交互式上下文选择功能。你无需知道团队 ID、项目 ID 或用户 ID,只需用自然语言描述你的需求。
示例: 无需知道任何 ID 即可创建问题:
You: "Create a bug for the login button not working"
AI: [Calls MCP server]
"Which team should I use?
1. Acme Corp (Admin)
2. Client Project (Member)"
You: "Acme Corp"
AI: "Which project?
1. Mobile App
2. Web App"
You: "Mobile App"
AI: "Which sprint?
1. Sprint 5 (IN PROGRESS)
2. Sprint 6 (SCHEDULED)"
You: "Sprint 5"
AI: ✓ "Created issue #ISSUE-123 in Sprint 5"
系统会自动引导你选择团队 → 项目 → 冲刺。
智能指派对象解析
使用姓名、电子邮件或用户 ID指派工作——系统会自动转换:
"Assign issue 123 to John Doe"
"Add [email protected] and user 789 to issue 456"
"Remove Sarah from issue 321"
问题和测试用例均适用。
发现工具
无需记忆 ID 即可查找资源:
"Find my mobile app project"
→ Searches across ALL teams automatically
"Show me all projects I have access to"
→ Returns complete context in one call
你可以做什么
📋 测试用例
Create an API test case for user authentication with priority P1
List all test cases for the mobile app project
Update test case 123 to mark it as PASS
Assign test case 456 to [email protected]
Delete test case 789
Delete test case with key "TES5"
Delete test case named "Verify login with valid credentials"
💬 测试用例评论
List all comments on test case 123
List comments on test case "Verify login with valid credentials"
List only user comments on test case 456 (exclude system comments)
Get details of comment 789
Add a comment "Test passed on Chrome and Firefox" to test case 123
Add a private comment to test case 456
Update comment 789 with new text
Delete comment 456
📝 需求
Create a requirement titled "User Authentication" with details and priority P1
List all requirements for the mobile app project
Get requirement details for requirement ID 2036
Update requirement 2036 to change severity to HIGH
Assign requirement 456 to [email protected]
Create a folder named "Sprint 1 Features" for organizing requirements
List all requirement folders in a project
Delete requirement 789
Link test cases to requirement 2036
🐛 问题与缺陷
Create a critical bug for login page crash in sprint 5
Show me all open issues assigned to me
Update issue 789 to change status to "Fixed"
Add John and Jane as assignees to issue 123
Delete issue 456
Delete issue with key "ISS09"
Delete issue with summary "Login button not working"
💬 问题评论
List all comments on issue 123
List comments with pagination (start at 10, show 20 results)
List only user comments, exclude system comments
Get details of comment 456
Add a comment "Fixed in latest build" to issue 789
Add a private comment to issue 123
Update comment 456 with new text
Delete comment 789
🏃 冲刺
Create a new sprint called "Sprint 15" for the mobile app
List all sprints for project 456
Update sprint 789 to mark it as COMPLETED
Show sprint details including issue statistics
Delete sprint 321
Delete sprint named "Sprint 15"
🏁 测试运行
List the test runs for the "Login Sprint"
Show me the environments and app builds for this project
Create a test run called "Smoke run" for the "Login Sprint" using the "Staging" environment
Schedule a daily run "Nightly" for the "Login Sprint" at 09:00, ending after 10 runs
Schedule a run every 2 weeks on Monday and Friday at 09:00
Add test cases 12, 15, 18 to the "Smoke run" run
Rename the "Smoke run" run and mark it COMPLETED
Pause the "Nightly" scheduler
Rerun the "Nightly" scheduler
Delete the "Smoke run" run
注意: 报告/测试套件、环境、应用构建、运行和调度器均可通过名称或数字 ID引用——系统会自动解析名称(如果名称不明确,还会给出贴心提示)。
🧪 测试数据
List the test data environments for this project
Create a "Staging" environment and set its baseUrl to https://staging.example.com
Add a variable loginEmail = [email protected] to the Staging environment
Show me everything in the Staging environment
Duplicate Staging as "UAT"
Deactivate the legacyToken variable in Globals
List the App Build files in Production
Upload /home/me/users.csv to the Staging environment as Sample Data Files
Show me what's in users.csv in Staging
Download app-release.apk from Production to /home/me/builds/
Which app builds does this project have?
Add a custom file category "Payment Fixtures"
Delete the "Old QA" environment
注意: 环境、变量和文件可通过名称或数字 ID引用;项目级全局作用域请使用 "Globals"。写入和删除操作必须明确指定作用域,且名称必须完全匹配;只有读取工具支持使用部分名称。删除仍包含自定义变量或文件的环境时,会先要求确认(delete_contents=true)。默认的 baseUrl / apiBaseUrl 变量可以修改值,但不能重命名或删除。
🤖 Testpert 冲刺
TestPert 是一项付费的项目级功能,可根据需求文档使用 AI 生成完整的测试计划和测试用例。
常规流程(上传文档):
Create a TestPert sprint called "Login Feature Sprint"
Upload /path/to/login-spec.pdf to the knowledge base
Start the analysis and answer the requirement questions
Review the test plan focus areas and feature tree
Generate test cases for the sprint
跳过增强流程(基于现有需求):
Create a TestPert sprint with skip_enrich_requirements=true
Link requirement IDs 101 and 102 to the sprint
Build the test plan from those requirements
📋 项目
List all projects in team 123
Find project by name "Mobile App"
Get detailed information for project 456
Create a new project "E-commerce Web App" in team 123
Update project 789 name to "Mobile Application"
Update project "Mobile App" to change issue prefix to "MOB"
Delete project 321
Delete project "Old Test Project"
👥 团队管理
List all my teams
Find team by name "Acme"
Get detailed information for team 123
Get detailed information for team "Engineering"
Create a new team called "Mobile App Team"
Update team 456 name to "Web Development Team"
Rename team "Mobile Team" to "Mobile App Development"
List all members in team "Acme Corp"
Add [email protected] and [email protected] to team "Engineering"
Invite [email protected] to team 123
Promote user 456 to admin in team "Marketing"
Demote user to regular member in team "Sales"
Remove [email protected] from team "Sales"
Remove user by name "John Doe" from team 123
Show all projects in team 456
可用工具
上下文与发现
bugasura_get_user_context- 一次调用即可获取所有团队和项目bugasura_find_team_by_name- 按名称搜索团队bugasura_find_project_by_name- 跨所有团队搜索项目bugasura_list_teams- 列出你所属的所有团队bugasura_get_team- 获取团队详细信息,包括设置和订阅详情(支持 team_id 或 team_name)bugasura_create_team- 创建新团队(创建者将成为所有者/管理员)bugasura_update_team- 更新团队名称(仅限管理员,支持 team_id 或 team_name)bugasura_delete_team- 永久删除团队(仅限管理员,具有破坏性操作,支持 team_id 或 team_name)bugasura_list_team_members- 列出团队成员及其 ID、姓名、邮箱和角色bugasura_list_projects- 列出指定团队的项目bugasura_get_project_details- 获取项目详细信息bugasura_create_project- 创建新项目(支持交互式选择团队) (NEW)bugasura_update_project- 更新项目名称、前缀和设置(支持 project_id 或 project_name,可能需要管理员权限) (NEW)bugasura_delete_project- 永久删除项目(支持 project_id 或 project_name,仅限管理员,具有破坏性操作) (NEW)
智能团队解析: bugasura_get_team、bugasura_update_team 和 bugasura_delete_team 工具同时支持 team_id(数字 ID)和 team_name(支持部分匹配的文本名称)。可根据需要选择使用。
智能项目解析: bugasura_update_project 和 bugasura_delete_project 工具同时支持 project_id(数字 ID)和 project_name(支持部分匹配的文本名称),以便灵活识别项目。 (NEW)
注意: 删除团队是永久操作,会移除所有关联的项目、冲刺、问题、测试用例和需求。删除项目同样是永久操作,会移除所有关联的冲刺、问题和测试用例。请务必谨慎操作!
团队成员管理
- `bugasura_add_team_members` - 通过电子邮件地址邀请用户加入团队(支持 team_id 或 team_name) - `bugasura_update_team_member` - 更改团队成员角色(管理员/成员)(支持 team_id 或 team_name) - `bugasura_delete_team_user` - 将用户从团队中移除(支持 team_id 或 team_name,可自动通过 ID/电子邮件/姓名解析用户)智能团队解析:所有团队成员工具都支持 team_id(数字 ID)和 team_name(文本名称,支持部分匹配)。选择更方便的一种即可。
智能用户解析:bugasura_delete_team_user 工具可以通过以下信息识别用户:
- 用户 ID(例如,“123”)
- 电子邮件地址(例如,“[email protected]”)
- 姓名或部分姓名(例如,“John”、“John Doe”)
**注意:**只有团队管理员可以管理团队成员。团队所有者不能被移除。
Sprint 管理
bugasura_list_sprints- 列出项目的所有 Sprintbugasura_get_sprint_details- 获取 Sprint 信息和统计数据bugasura_create_sprint- 创建新的 Sprintbugasura_update_sprint- 更新 Sprint 详情(支持部分更新)bugasura_delete_sprint- 永久删除 Sprint(支持 ID 或名称)
**注意:**所有 Sprint 工具都支持交互式上下文选择。可使用数字 ID 或名称执行删除操作。
问题管理
bugasura_list_issues- 列出问题,可选按 Sprint 筛选bugasura_get_issue- 获取问题详细信息bugasura_create_issue- 创建新的 Bug/问题,可选择添加附件(upload_id/file_paths)bugasura_add_issue_attachments- 向现有问题添加文件(截图、日志、录屏)bugasura_delete_issue_attachments- 按文件名删除问题附件(有破坏性;系统会先检查名称是否与该问题匹配)bugasura_update_issue- 更新问题详情(支持部分更新)bugasura_delete_issue- 永久删除问题(支持 ID、问题键,例如 "ISS09",或摘要/标题)bugasura_get_issue_assignees- 获取问题的受指派人列表,包括姓名、电子邮件和个人资料图片bugasura_add_issue_assignees- 通过姓名、电子邮件或 ID 添加受指派人bugasura_remove_issue_assignees- 通过姓名、电子邮件或 ID 移除受指派人
**注意:**所有问题工具都支持交互式上下文选择。可使用数字 ID、问题键(例如 "ISS09")或问题摘要执行删除操作。
问题评论
bugasura_list_issue_comments- 分页列出问题评论并进行筛选(支持 creator_id 筛选、排除系统评论)bugasura_get_issue_comment- 获取单条评论的详细信息,包括完整内容和元数据bugasura_add_issue_comment- 在问题上创建新评论(支持公开/私密可见性、HTML 格式和附件)bugasura_update_issue_comment- 更新现有评论文本并添加附件(仅限作者,支持交互式评论选择)bugasura_delete_issue_comment- 永久删除评论(作者或管理员可操作,支持交互式评论选择)
主要功能:
- 分页:使用
start_at和max_results参数列出评论(默认:10 条结果,最多:100 条) - 筛选:按评论作者(
creator_id)筛选,或排除系统评论(get_user_comments_only) - 交互式选择:如果未提供上下文,会依次提示选择团队 → 项目 → 问题 → 评论
- 评论类型:用户评论(可编辑)与系统评论(自动生成,只读)
- 可见性控制:公开评论(所有人可见)与私密评论(仅团队成员可见)
- HTML 支持:评论支持 HTML 格式和用户提及(@username)
**注意:**所有评论工具都支持完整的交互式上下文选择,包括更新/删除操作中的评论选择。系统评论不能编辑或删除。
测试用例管理
bugasura_list_test_cases- 列出项目的测试用例bugasura_get_test_case- 获取测试用例的详细信息bugasura_create_test_case- 创建新的测试用例bugasura_update_test_case- 更新测试用例(支持部分更新,可按姓名、电子邮件或 ID 指定受派人)bugasura_delete_test_case- 永久删除测试用例(支持 ID、测试用例键,如 “TES5”,或场景名称)bugasura_link_test_cases_to_sprint- 将现有测试用例添加到迭代中(测试用例 ID 以逗号分隔)bugasura_unlink_test_cases_from_sprint- 从迭代中移除测试用例;它们仍保留在项目中bugasura_list_agents- 列出项目中启用的 AI Agent(API、浏览器、移动端)及其各自运行的内容bugasura_assign_test_cases_to_agent- 将迭代测试用例分配给适用于其平台的 Agent,可在迭代或测试运行中进行分配bugasura_run_agent_test_cases- 将测试运行中的 Agent 测试用例加入队列(action='start'),或报告其进度(action='status')
注意: 所有测试用例工具都支持交互式上下文选择。删除操作可使用数字 ID、测试用例键(例如 “TES5”)或场景名称。
测试运行管理
bugasura_list_test_run_environments- 列出项目的测试数据环境和应用构建版本(用于按名称选择环境/应用构建版本)bugasura_list_test_runs- 列出测试套件的测试运行执行记录和计划任务(报告)bugasura_get_test_run_details- 获取单个测试运行执行记录的详细信息bugasura_create_test_run- 创建一次性或计划(定期)运行,可设置简便的重复选项、环境、应用构建版本和预置测试用例bugasura_update_test_run- 更新单个执行运行(名称、状态、环境、应用构建版本)bugasura_update_test_run_scheduler- 编辑运行/计划任务(重命名、环境/构建版本、切换一次性↔计划运行、更改频率/重复设置、暂停/恢复)bugasura_rerun_test_run- 根据现有计划任务触发新的执行bugasura_add_test_cases_to_run- 将测试用例添加(复制)到现有运行中bugasura_delete_test_run- 删除一个或多个执行运行(默认软删除,设置is_permanent_delete=1时永久删除)bugasura_delete_test_run_scheduler- 删除一个或多个计划任务(默认软删除,设置is_permanent_delete=1时永久删除)
注意: 所有测试运行工具都支持交互式上下文选择。报告/套件、环境、应用构建版本、运行和计划任务都可通过名称或数字 ID引用(自动解析名称,并在需要时进行消歧)。重复设置使用简便选项(frequency、repeat_value/repeat_unit、selected_days、recurrence_type),而非原始 JSON。
使用的 API 端点:
| 工具 | 方法和端点 | 功能 |
|---|---|---|
bugasura_list_test_run_environments | GET /v1/projectTestDataEnvironments/get | 列出环境和应用构建版本,供按名称选择。 |
bugasura_list_test_runs | GET /v1/testrunsExecution/getList | 列出测试套件的执行记录和调度器。 |
bugasura_get_test_run_details | GET /v1/testrunsExecution/getList | 获取单条测试记录(按测试记录 ID 筛选)。 |
bugasura_create_test_run | POST /v1/testrunsExecution/add | 创建单次或定期执行的测试记录。 |
bugasura_update_test_run | POST /v1/testrunsExecution/testruns/update | 更新单条执行记录。 |
bugasura_update_test_run_scheduler | POST /v1/testrunsExecution/scheduler/update | 编辑测试记录或调度器(对应 UI 中的编辑测试记录弹窗)。 |
bugasura_rerun_test_run | POST /v1/testrunsExecution/rerun | 根据现有调度器重新运行测试。 |
bugasura_add_test_cases_to_run | POST /v1/testrunsExecution/copy | 将测试用例添加到测试记录中。 |
bugasura_delete_test_run | POST /v1/testrunsExecution/deleteTestRunsExecution | 删除执行记录。 |
bugasura_delete_test_run_scheduler | POST /v1/testrunsExecution/deleteScheduler | 删除调度器。 |
名称通过 bugasura_list_sprints(报告 ↔ 冲刺)、bugasura_list_test_run_environments(环境 / 应用构建版本)和 /v1/testrunsExecution/getList(测试记录 / 调度器)解析。
测试数据管理
bugasura_list_test_data_environments- 列出项目的测试数据环境及其 baseUrl / apiBaseUrl(可选包含 Globals 作用域)bugasura_get_test_data_environment- 获取一个环境(或 Globals)及其所有有效变量和文件bugasura_create_test_data_environment- 创建环境(初始时包含空的 baseUrl / apiBaseUrl 变量)bugasura_rename_test_data_environment- 重命名环境bugasura_duplicate_test_data_environment- 将环境或 Globals 作用域及其变量和文件复制到新环境bugasura_delete_test_data_environment- 删除环境及其变量和文件(破坏性操作;环境非空时需要设置delete_contents=true)bugasura_list_test_data_variables- 列出环境或 Globals 的变量(可按键或有效状态筛选)bugasura_create_test_data_variable- 向环境或 Globals 添加变量bugasura_update_test_data_variable- 修改变量的值、键、描述或有效状态(部分更新)bugasura_delete_test_data_variable- 删除单个变量(破坏性操作;默认变量受保护)bugasura_list_test_data_files- 列出环境或 Globals 的文件(可按类别或名称筛选),并显示下载 URL 和项目类别bugasura_upload_test_data_files- 从上传链接、共享链接或本地路径(终端)将一个或多个文件上传到环境或 Globals 的指定类别bugasura_get_test_data_file- 获取单个文件的详细信息、下载链接和(Office 文件的)预览链接;还可选择读取文本文件的内容bugasura_download_test_data_file- 获取文件的直接下载链接,还可选择将文件保存到服务端磁盘(终端)bugasura_list_test_data_app_builds- 列出所有环境和 Globals 中的应用构建版本(App Build 类别)bugasura_delete_test_data_file- 删除单个文件(破坏性操作)bugasura_list_test_data_categories- 列出内置和自定义文件类别bugasura_create_test_data_category- 添加自定义文件类别
主要功能:
- 环境、变量和文件均可使用名称或数字 ID;
"Globals"表示项目范围的全局作用域 - 删除操作始终针对单个已解析的 ID,不会删除整个作用域
- 更新时会保留所有未传入的字段;默认的
baseUrl/apiBaseUrl变量只能修改值和有效状态,与 Web 应用中的行为一致 **注意:**所有测试数据工具都需要team_id和project_id;创建/更新变量以及上传工具还需要environment(全局范围请传入"Globals")。文件类型与 Web 应用一致:“App Build”类别支持 apk、aab、ipa、apks、apkm、xapk;其他类别支持文档、电子表格、csv/json/xml/yaml、图像、音频/视频和应用构建文件,每个文件最大 1024MB。
上传。bugasura_upload_test_data_files 会将文件本身作为 multipart testData[] 部分发送到 /v1/projectTestDataFiles/add,因此无论服务运行在哪里都能使用。本地路径(file_paths)仅适用于 STDIO;在托管服务上,用户通过 bugasura_create_upload_link(purpose='test_data') 上传自己的文件,工具接收其 upload_id(每个链接最多 100 MB);也可以将 Google Drive、Dropbox 或其他公开链接作为 source_url 传入(最多 1024 MB)。对于较大的构建文件,工具会延长超时时间;如果 Bugasura 响应仍然较慢,工具会在报告上传未确认之前检查文件是否已送达,因此重试不会产生重复文件。
使用的 API 端点:
| 工具 | 方法和端点 | 功能 |
|---|---|---|
bugasura_list_test_data_environments | GET /v1/projectTestDataEnvironments/get | 列出环境(以及 Globals 行)。 |
bugasura_get_test_data_environment | GET /v1/projectTestDataEnvironmentsDetails/get | 获取某个范围内的活动变量和文件。 |
bugasura_create_test_data_environment | POST /v1/projectTestDataEnvironments/add | 创建环境。 |
bugasura_rename_test_data_environment | POST /v1/projectTestDataEnvironments/update | 重命名环境。 |
bugasura_duplicate_test_data_environment | POST /v1/projectTestDataEnvironments/duplicate | 复制环境或 Globals。 |
bugasura_delete_test_data_environment | POST /v1/projectTestDataEnvironments/delete | 删除环境及其内容。 |
bugasura_list_test_data_variables | GET /v1/projectTestData/get | 列出变量。 |
bugasura_create_test_data_variable | POST /v1/projectTestData/add | 创建变量。 |
bugasura_update_test_data_variable | POST /v1/projectTestData/update | 更新变量。 |
bugasura_delete_test_data_variable | POST /v1/projectTestData/delete | 删除变量。 |
bugasura_list_test_data_files | GET /v1/projectTestDataFiles/get | 列出文件和自定义类别。 |
bugasura_upload_test_data_files | POST /v1/projectTestDataFiles/add | 将文件作为 multipart testData[] 部分发送(每次调用最多 20 个文件,总计最多 1024 MB)。 |
bugasura_get_test_data_file | GET /v1/projectTestDataFiles/get | 获取文件详情(内容从 CDN 读取)。 |
bugasura_download_test_data_file | GET /v1/projectTestDataFiles/get | 获取文件的 CDN 下载链接。 |
bugasura_list_test_data_app_builds | GET /v1/projectTestDataFiles/get | 列出所有范围内的 App Build 文件。 |
bugasura_delete_test_data_file | POST /v1/projectTestDataFiles/delete | 删除文件。 |
bugasura_list_test_data_categories | GET /v1/projectTestDataFiles/get | 读取自定义类别。 |
bugasura_create_test_data_category | POST /v1/projectTestDataFiles/addCategory | 添加自定义类别。 |
测试用例评论
- `bugasura_list_testcase_comments` - 分页并筛选列出测试用例的评论(支持按 creator_id 筛选,排除系统评论) - `bugasura_get_testcase_comment` - 获取单条测试用例评论的详细信息,包括完整内容和元数据 - `bugasura_add_testcase_comment` - 在测试用例上创建新评论(支持公开/私密可见性和 HTML 格式) - `bugasura_update_testcase_comment` - 更新现有测试用例评论文本(仅作者可操作,支持交互式评论选择) - `bugasura_delete_testcase_comment` - 永久删除测试用例评论(作者或管理员可操作,支持交互式评论选择)主要功能:
- 分页:使用
start_at和max_results参数列出评论(默认:10 条结果,最多:100 条) - 筛选:按评论作者(
creator_id)筛选,或排除系统评论(get_user_comments_only) - 交互式选择:如未提供信息,将提示选择团队 → 项目 → 测试用例 → 评论
- 评论类型:用户评论(可编辑)与系统评论(自动生成,只读)
- 可见性控制:公开评论(所有人可见)与私密评论(仅团队成员可见)
- HTML 支持:评论支持 HTML 格式和用户提及(@username)
- 附件:
upload_id/file_paths可将文件附加到新评论,或添加到已更新的评论中;评论是测试用例保存文件的唯一位置。更新评论时会保留现有附件,除非comment_attachments列出了要保留的附件。
**注意:**所有测试用例评论工具都支持完整的交互式上下文选择,包括更新/删除操作中的评论选择。系统评论无法编辑或删除。
需求管理
bugasura_list_requirements- 列出项目或迭代中的所有需求bugasura_get_requirement_details- 获取需求详细信息,包括父子层级关系bugasura_create_requirement- 创建需求,并交互式选择文件夹;也可选择添加附件bugasura_add_requirement_attachments- 为现有需求添加附件bugasura_update_requirement- 更新需求详情(支持部分更新,并保留所有字段)bugasura_delete_requirement- 永久删除需求bugasura_link_requirement_testcases- 将测试用例关联到需求(以逗号分隔的 ID)bugasura_unlink_requirement_testcases- 取消测试用例与需求的关联;测试用例会保留bugasura_create_requirement_folder- 创建文件夹以整理需求bugasura_list_requirement_folders- 列出项目中的所有文件夹bugasura_list_requirement_comments- 列出需求评论(分页)bugasura_get_requirement_comment- 获取一条评论及其附件 URLbugasura_add_requirement_comment- 评论需求,可添加附件或作为串接回复bugasura_update_requirement_comment- 编辑评论并添加附件(除非comment_attachments另有指定,否则保留现有附件)bugasura_delete_requirement_comment- 删除评论及其附件(破坏性操作)
主要功能:
- 文件夹整理:需求必须放在文件夹中。创建需求时,可通过交互式文件夹选择来选择或创建文件夹。
- 父子层级:需求可以设置父需求,以进行多层级整理(EPIC → STORY → TASK)。
- 智能指派对象解析:可按姓名、邮箱或用户 ID 指派(自动解析)。
- 保留字段:更新操作会获取现有数据,并保留所有未更新的字段。
- 关联测试用例:将需求关联到测试用例,以便追踪。
**注意:**所有需求工具都支持交互式上下文选择。所有需求操作都必须提供 folder_id 字段;系统会自动获取该字段,或通过交互式选择确定。
知识库
知识库是项目级文档库,以文件夹形式组织,并显示在项目的「知识库」页面中。它与 TestPert sprint 自带的知识库分开(参见下方的 Testpert 工具)。
文档
bugasura_list_knowledge_base_documents- 列出文件夹内或整个项目中的文档(支持starred_only和分页)bugasura_download_knowledge_base_document- 获取已上传文档的直接下载链接,并可选择将其保存到磁盘bugasura_star_knowledge_base_document- 为文档加星标或取消星标(starred=False会移除星标)bugasura_delete_knowledge_base_document- 永久删除文档(仅限管理员,破坏性操作)
导入(均位于 tools/knowledge_base.py 中)
知识库页面「+」菜单中的六个选项,以及文档编辑器自身的导入菜单。除文件上传外,所有操作都在后台运行——工具会在爬取/同步任务排队后立即返回,bugasura_list_knowledge_base_documents 会在 stage 中显示进度。连接器凭据需在每次调用时提供,且此服务不会存储这些凭据。
仅限本地(STDIO): Coda、Jira、Confluence 和 Figma 导入及其列表工具都需要将相应服务的 API 令牌作为参数,因此托管服务(
/mcp)不提供这些工具:在托管聊天中输入的令牌会经过对话内容。请在本地运行服务以使用这些工具;在托管服务上,请改为导入网站或上传文件。
bugasura_create_upload_link- 在此服务上为用户自己电脑中的文件创建一个短期有效、只能使用一次的上传链接(仅限托管服务)。purpose用于指定接收该文件的工具:knowledge_base、document_import、testpert_kb、attachment(问题、问题/测试用例评论、需求;支持任意文件类型)或test_data(bugasura_upload_test_data_files)bugasura_upload_knowledge_base_document- 通过上传链接、分享链接或本地路径上传文档(.txt、.pdf、.doc、.docx、.md)bugasura_import_website_to_knowledge_base- 爬取网站(max_pages、include_linked_pages)bugasura_import_coda_to_knowledge_base- 导入 Coda 文档的页面(“Superhuman Import”);需要 Coda API 密钥以及文档的 URL、ID 或名称bugasura_import_jira_to_knowledge_base- 导入 Jira 问题,每个 Jira 项目生成一个页面;默认导入整个项目,也可以指定issue_keysbugasura_import_confluence_to_knowledge_base- 导入 Confluence 空间,每个空间生成一棵页面树;默认导入整个空间,也可以指定page_idsbugasura_import_figma_to_knowledge_base- 将 Figma 画框作为设计上下文导入(破坏性操作——参见下方的关键功能)bugasura_import_file_to_knowledge_base_document- 文档编辑器的导入菜单:.md文件会成为新页面,.csv/.xlsx/.xls文件会转换为 Markdown 表格并追加到现有页面
请先使用列表工具,选择连接器要导入的内容:
bugasura_list_coda_docs/bugasura_list_coda_pages- Coda API 密钥可访问的文档,以及某个文档的页面树bugasura_list_jira_projects/bugasura_list_jira_issues- 账号可访问的项目(含问题数),以及某个项目的问题bugasura_list_confluence_spaces/bugasura_list_confluence_pages- 账号可访问的空间,以及某个空间的页面
文件夹
bugasura_list_knowledge_base_folders- 列出顶层知识库文件夹(分页),每个文件夹均包含其子文件夹树和文档bugasura_create_knowledge_base_folder- 创建文件夹,可选择将其嵌套在现有文件夹下bugasura_rename_knowledge_base_folder- 就地重命名文件夹(保留其父级和内容)bugasura_delete_knowledge_base_folder- 删除文件夹(仅限管理员,破坏性操作)
页面文档 页面文档是在 Bugasura 中编写的,而非上传的,即 Web 应用中的“创建文档”流程。文档正文由页面树组成,每个页面都有自己的 Markdown 内容。从 Coda、Jira、Confluence 或 URL 同步的文档也采用相同结构,因此页面工具同样适用于这些文档。
bugasura_create_knowledge_base_document- 创建页面文档(初始包含一个空页面)bugasura_rename_knowledge_base_document- 重命名页面文档bugasura_list_knowledge_base_pages- 列出文档中的页面,包含page_path、depth和has_contentbugasura_create_knowledge_base_page- 添加页面,可选择嵌套在某个页面下或放置在某个页面之后,并设置其内容bugasura_rename_knowledge_base_page- 重命名页面bugasura_get_knowledge_base_page_content- 读取页面当前的 Markdown 正文(编辑页面前请先调用)bugasura_update_knowledge_base_page_content- 写入页面的 Markdown:替换整个正文(''会清空正文),或使用mode='append'/mode='prepend'添加内容bugasura_duplicate_knowledge_base_page- 复制页面,可选择是否同时复制其子页面bugasura_move_knowledge_base_page- 更改页面的父级或排序(parent_page/after_page/to_root)bugasura_delete_knowledge_base_page- 删除页面及其子页面(破坏性操作) 主要功能:- 自动处理文件夹:传入
folder_name,即可将文档归入该文件夹——系统会忽略大小写进行匹配;如果项目中没有同名文件夹,则会创建一个。省略此参数时,将使用项目中的第一个知识库文件夹;如果项目中没有文件夹,则会创建一个Knowledge Base文件夹。 - 提供文件的三种方式:助手不会对文件进行编码。
upload_id(托管服务):bugasura_create_upload_link会返回此服务上的一个链接/upload/<upload_id>,并将其绑定到已登录用户。此链接只能使用一次,并会在 30 分钟后过期。用户可以打开链接,通过普通表单上传文件;也可以由命令行客户端运行curl -sS -F [email protected] <upload_url>。文件字节会经由浏览器或 shell 传输,不会经过模型。文件会暂存于UPLOAD_STAGING_PATH,最长保留一小时,直至bugasura_upload_knowledge_base_document(upload_id=...)(或在purpose='document_import'时使用bugasura_import_file_to_knowledge_base_document)将其发送到 Bugasura 并删除。只有创建该链接的用户才能使用其upload_id。source_url:Google Drive、Dropbox 或任何公开下载链接。服务会获取该链接中的文件。file_paths:绝对路径,仅适用于本地 STDIO 服务。
- 多个文件:可提供多个路径,或通过一个上传链接上传最多 10 个文件(总计 100 MB),这些文件会上传到同一文件夹。
- 文件夹名称:文件夹名称不能包含
<、>、/或\;同一父文件夹下不能有两个同名文件夹。bugasura_rename_knowledge_base_folder会提前报告这两种情况;若将文件夹重命名为其当前名称,则会直接返回结果,不执行写入。 - 智能文档解析:文档可通过文件名(先精确匹配,再部分匹配)或数字 ID 识别。若名称匹配到多个文档,系统会返回这些文档供用户选择;添加
folder_name可缩小搜索范围。 - 后台处理:Bugasura 会自动处理上传的文档;处理完成后,这些文档就会成为可搜索的项目上下文。
- 优先提供下载链接:Bugasura 没有下载端点——上传文件的字节存储在 CDN 上,
bugasura_download_knowledge_base_document会将存储路径转换为无需登录即可访问的直接download_url。对于大多数客户端,提供该链接即可;添加save_to_path还可将文件写入运行服务的机器,但只有在该机器属于用户本人时(终端使用场景)才有帮助。对于已知主机映射未涵盖的部署,请在服务的.env中设置CDN_BASE_URL——CDN 使用独立的 CloudFront/S3 主机,无法从API_BASE_URL推导出来。 - 只有已上传的文件可供下载:页面文档、网站条目以及 Jira/Confluence 导入内容都没有自己的文件,且 Bugasura 不支持 PDF 导出,因此无法将页面文档作为 PDF 提供。请改用
bugasura_list_knowledge_base_pages读取这些内容。 - 智能页面解析:页面可通过页面名称(先精确匹配,再部分匹配)或页面 ID(
page_20250104120500)识别。若名称匹配到多个页面,系统会返回这些页面供用户选择。 - 连接器凭据按调用提供:每次调用 Jira、Confluence、Coda 和 Figma 时都需要提供凭据,并会直接转发——此服务不会存储任何凭据。Jira Cloud 和 Confluence 使用 API 令牌;自托管 Jira(
deployment_type="SERVER")使用账户密码;Coda 使用 API 密钥;Figma 使用个人访问令牌。Confluence 是唯一的例外:省略其三个凭据参数后,列表工具会改用项目中已保存的 Confluence 集成。 - 导入到现有文档:默认情况下,
bugasura_import_jira_to_knowledge_base和bugasura_import_confluence_to_knowledge_base会创建新文档;传入document_identifier可将所选内容合并到现有页面文档中,效果与在文档内使用网页应用的“Import → Jira / Confluence”相同。若文档已在导入中,系统会报告此情况,而不会将其重复加入队列。 - Figma 导入会替换项目的画框集合:Bugasura 为每个项目保留一组 Figma 画框,导入时会重写该集合——存储的任何画框只要未包含在载荷中,就会被删除。
bugasura_import_figma_to_knowledge_base会读取现有画框并一并保留,因此导入只会添加内容;replace_existing=True会删除现有内容,仅应在用户明确要求时使用。每个链接都必须指向一个画框(包含node-id,即 Figma 的“复制所选内容的链接”);指向整个文件的链接会被拒绝。 - 编辑页面采用读取-修改-写入流程:API 只会写入页面的 Markdown,因此
bugasura_get_knowledge_base_page_content会像网页编辑器一样从 CDN 读取页面内容(需要设置CDN_BASE_URL,与下载相同)。由于写入操作会替换整个正文,修改页面的部分内容时,必须先读取页面、编辑相应文本,再使用mode='replace'写回完整结果。若只需向页面添加内容,mode='append'/mode='prepend'会代为读取;只需传入新增文本即可。若页面过大,无法安全读取,系统会拒绝操作,而不会截断内容,因此绝不会将不完整副本写回并覆盖完整页面。 注意: 每个文档的大小不得超过 100MB,但bugasura_import_file_to_knowledge_base_document(文档编辑器的 Markdown/CSV/Excel 导入)上限为 10MB。用户想要分享文件时,请先调用bugasura_prepare_kb_upload,它会返回要向用户展示的说明。删除文档会移除其文件以及 AI 从中学到的所有内容,且无法撤销;删除仍包含文档的文件夹需要设置delete_documents=True,并会一并删除其中的文档。这两种删除操作都需要团队或项目管理员权限。删除含有子页面的页面,同样需要设置delete_sub_pages=True,并会一并删除这些子页面。
Testpert 冲刺生成
TestPert 是一项付费的项目级 AI 功能(项目上的 is_testpert_enabled)。它可根据需求文档或现有需求生成完整的测试计划和测试用例。
创建冲刺
bugasura_create_testpert_sprint- 创建 TestPert 冲刺(创建前会确认选项;设置confirm_options=True以继续)
常规流程 — 上传文档 → 回答问题 → 编辑计划 → 生成
bugasura_testpert_upload_kb- 将项目知识库文档关联到冲刺,或向冲刺上传文档/图片(.txt、.pdf、.docx、.md、.json最大为 100 MB;.png、.jpg等最大为 20 MB)。图片通过purpose='testpert_kb'的上传链接上传。bugasura_testpert_list_kb- 列出知识库中的现有文档bugasura_testpert_delete_kb- 从知识库中移除文档bugasura_testpert_generate_sprint_context- 开始需求分析(KB → SPRINT_CONTEXT)bugasura_testpert_get_kb_validation- 查看引擎无法有把握地分类的已上传文档及原因bugasura_testpert_resolve_kb_validation- 为每个标记的文档指定角色,并恢复冲刺上下文生成bugasura_testpert_get_sprint_context- 查看引擎推测的平台、用户角色和受影响模块,以供审核bugasura_testpert_confirm_sprint_context- 确认冲刺上下文并进入深化需求问题环节bugasura_testpert_answer_context_questions- 回答 AI 提出的深化需求问题bugasura_testpert_get_requirement_contexts- 获取深化问题、缺失需求和风险,供用户审核bugasura_testpert_update_requirement_contexts- 将对缺失需求和风险的批准/拒绝/编辑决定写回(默认自动进入 RISKS_IN_REQUIREMENTS)bugasura_testpert_add_context_question- 向冲刺添加深化需求问题(即“Add Question”按钮)bugasura_testpert_delete_context_question- 从冲刺中移除深化需求问题bugasura_testpert_get_testplan- 获取生成的测试计划(重点领域 + 功能/子功能树)bugasura_testpert_update_testplan- 编辑重点领域层级和功能树bugasura_testpert_get_features- 列出当前的功能/子功能树bugasura_testpert_add_feature- 添加功能或子功能bugasura_testpert_delete_feature- 删除功能或子功能bugasura_testpert_enrich_requirements- 显式运行需求丰富阶段(可选 —generate_coverage会自动运行)bugasura_testpert_generate_coverage- 将冲刺推进到测试覆盖阶段(如有需要,会先运行需求丰富)bugasura_testpert_get_coverage- 获取覆盖率思维导图bugasura_testpert_generate_testcases- 生成测试用例(轮询直至完成;可重复调用)bugasura_testpert_regenerate_testcases- 在TEST_CASES阶段后,为某个子功能重新生成/重试测试用例(需要用户提供 3 个部分的上下文弹窗问题答案;每个子功能最多尝试 5 次)
底层状态驱动器(高级)
bugasura_testpert_advance- 设置特定状态和/或轮询直到达到目标状态 — 需要直接控制流水线时使用
流程概览:
Normal: create → upload_kb → generate_sprint_context → [get_kb_validation → resolve_kb_validation]*
→ get_sprint_context → confirm_sprint_context → answer_context_questions
→ (missing reqs) → (risks) → get_testplan → enrich → generate_coverage → generate_testcases
* only if generate_sprint_context lands on SPRINT_CONTEXT_USER_VALIDATION instead of SPRINT_CONTEXT
Skip: create (skip_enrich=true) → link_requirements → start_skip_testplan
→ get_testplan → generate_coverage → generate_testcases
注意事项:
- 项目必须启用 TestPert(
is_testpert_enabled)。标准冲刺请使用bugasura_create_sprint。 - 轮询工具(
generate_sprint_context、resolve_kb_validation、confirm_sprint_context、start_skip_testplan、enrich_requirements、generate_coverage、generate_testcases)的单次调用有时间限制,且可重复调用 — 如果 AI 阶段仍在运行,请再次调用同一工具以继续检查。 generate_coverage会自行驱动增强和测试计划两个阶段(RISKS_IN_REQUIREMENTS → ENRICH_REQUIREMENTS → TEST_PLANING → TEST_COVERAGE),每次调用推进一个阶段 — 只有想让该阶段作为独立步骤显示时,才需要使用enrich_requirements。- 状态转换和测试计划更新需要团队管理员 API 密钥。
可用资源
MCP 资源提供对 Bugasura 数据的只读访问。AI 助手可以直接访问这些资源:
| 资源 | 描述 |
|---|---|
bugasura://teams | 你所属的所有团队 |
bugasura://teams/{team_id}/projects | 团队中的项目 |
bugasura://projects/{project_id}/sprints | 项目中的冲刺 |
bugasura://projects/{project_id}/issues | 项目中的问题 |
bugasura://projects/{project_id}/test-cases | 项目中的测试用例 |
bugasura://projects/{project_id}/requirements | 项目中的需求 |
高级用法
分页
列表操作默认返回 10 条结果:
Show me the first 20 issues (using max_results=20)
Show me issues 11-20 (using start_at=10, max_results=10)
Show me the first 50 comments on issue 123 (using max_results=50)
Show me comments 21-40 on issue 456 (using start_at=20, max_results=20)
部分更新
只更新要更改的字段 — 其他所有字段都会自动保留:
Update issue 123 to change severity to HIGH
(other fields like status, description, assignees remain unchanged)
Update requirement 2036 to change title only
(severity, priority, assignees, and all other fields are preserved)
工作原理: 所有更新操作(问题、需求、测试用例、冲刺)都会先获取现有记录,然后将你的更改与现有数据合并,再发送到 API。这可确保不会意外清除或重置任何字段。
自定义字段
Create issue with custom fields: {"Environment": "Production", "Build": "1.2.3"}
筛选
List issues for sprint 5 only
Search projects containing "mobile" in the name
List only user comments on issue 123 (exclude system-generated comments)
List comments by a specific user on issue 456 (using creator_id filter)
传输模式
Bugasura MCP 支持两种传输模式:
STDIO(默认)— 本地 MCP 客户端(通过 stdin/stdout 使用子进程)
python server.py --transport stdio
Streamable HTTP(推荐用于远程部署)— 挂载于 /mcp
python server.py --transport streamable-http --port 8000
托管版本位于 https://mcp.bugasura.io/mcp,使用 Streamable HTTP。该服务基于 FastMCP 4 构建,在同一端点上支持两个时期的 MCP 协议:无状态的 2026-07-28 协议,以及较旧的 2025-11-25 initialize 握手。每个连接都会单独协商,因此新旧客户端无需任何设置均可使用。此传输模式需要配置 OAuth 登录(见下一节);否则服务会拒绝启动。STDIO 除 BUGASURA_API_KEY 外无需其他配置。
部署 OAuth 登录
供服务器运维人员阅读。用户不会看到这些内容。
MCP 服务是一个基于 FastMCP 的 OAuthProxy(core/oauth.py)构建的 OAuth 2.0 入口。MCP 客户端通过动态客户端注册或客户端 ID 元数据文档(CIMD,即客户端用作 client_id 的 URL)标识自身,并通过该入口执行 PKCE。两种方式均受支持;服务自身是 Bugasura 的一个预注册机密客户端,并与 Bugasura API 服务器间交换授权码。Bugasura 的令牌不会到达 MCP 客户端 — 服务会签发自己的短期令牌,并在每次请求时进行交换,通过 POST /v1/oauth/introspect 验证 Bugasura 令牌(缓存 60 s)。
1. 从 Bugasura 获取客户端凭据
服务器以机密 OAuth 客户端 bugasura-mcp 的身份登录 Bugasura。其客户端密钥和回调地址 <MCP_PUBLIC_BASE_URL>/auth/callback 已在 Bugasura 端注册,因此,可自托管实例需要由 Bugasura 团队签发这些凭据([email protected])。
Bugasura 的令牌与用户的 API 密钥绑定:在 Bugasura 中重新生成密钥,会使该用户的所有 MCP 会话退出登录。
2. 配置 MCP 服务
将以下内容添加到实例的 dotenv 文件(.env,或由 MCP_ENV_FILE 指定的租户文件):
| 变量 | 必填 | 含义 |
|---|---|---|
MCP_PUBLIC_BASE_URL | 是 | 公开的 https 源站,不带末尾斜杠,例如 https://mcp.bugasura.io。它将成为 OAuth 颁发者(也会作为 RFC 9207 iss 随每次重定向发送回客户端)和回调主机。 |
BUGASURA_OAUTH_CLIENT_ID | 是 | bugasura-mcp |
BUGASURA_OAUTH_CLIENT_SECRET | 是 | 明文密钥,其哈希值已配置在 API 中 |
MCP_JWT_SIGNING_KEY | 建议 | 用于签署颁发给 MCP 客户端的令牌并加密存储状态。如果不设置,两者都会由客户端密钥派生,因此轮换密钥会使所有人退出登录。 |
OAUTH_STORAGE_PATH | 建议 | 持久化 OAuth 状态的目录(/var/lib/bugasura-mcp/<tenant>),采用 Fernet 加密的 FileTreeStore(每条记录一个 JSON 文件,这是 FastMCP 自带的默认方式)。如果不设置,会话将保存在内存中,服务器重启后每个客户端都需要重新进行身份验证。从较早的 DiskStore 布局升级时,所有客户端都会退出登录一次;部署完成后,可以删除目录中的旧 diskcache 文件(cache.db*)。 |
UPLOAD_STAGING_PATH | 否 | 通过上传链接上传的文件等待 KB 工具处理的目录,最多保留一小时(默认值为 <tmp>/bugasura-mcp-uploads/<LOG_FILE_PREFIX>,每个租户单独设置)。服务器启动时、之后每小时以及创建新链接时,都会清理过期上传文件。 |
OAUTH_REQUIRE_CONSENT | 否 | true 会在 Bugasura 登录页面之前显示 FastMCP 自带的同意确认页(默认值为 false;参见关于同意确认页)。 |
BUGASURA_WEBSITE_URL | 否 | 服务器元数据和浏览器访问 /mcp 时显示的页面中链接到的公开产品网站(默认值为 https://bugasura.io)。 |
MCP_SERVER_ICON_URL | 否 | 服务器同意确认页和提供给 MCP 客户端的图标中的 PNG 标志(默认值为 https://bugasura.io/bugasura_icon_1024.png)。页面显示的名称由 MCP_SERVER_NAME 指定。 |
MCP_SERVER_ICON_SVG_URL | 否 | 除 PNG 外提供给 MCP 客户端的 SVG 标志(默认值为 https://bugasura.io/bugasura_icon_512.svg)。 |
OPENAI_APPS_CHALLENGE_TOKEN | 否 | ChatGPT 应用的域名验证令牌,以纯文本形式通过 /.well-known/openai-apps-challenge 提供。未设置时返回 404。仅在要提交的实例上设置。 |
OAUTH_ALLOWED_REDIRECT_URIS | 否 | MCP 客户端可使用的额外重定向模式,以逗号分隔,内置列表之外的模式包括 loopback、claude.ai、VS Code / Cline / Roo Code、Cursor、Windsurf、Antigravity、ChatGPT / Codex。方案、主机和端口分别匹配:主机必须精确匹配或使用 *.example.com;路径中的 * 匹配任意内容;未指定端口的 loopback 模式可匹配任意端口。cursor://* 不会匹配任何内容;应写为 cursor://anysphere.cursor-mcp/*。 |
OAUTH_INTROSPECTION_CACHE_TTL | 否 | 缓存有效令牌检查结果的秒数(默认值为 60)。这也限制了已撤销会话仍可继续使用的时长。 |
BUGASURA_OAUTH_*_URL | 否 | 覆盖派生得到的上游端点({WEB_BASE_URL}oauth/authorize、{API_BASE}/v1/oauth/{token,introspect,revoke})。 |
启动时将 --forwarded-allow-ips 设为反向代理的地址。服务器会按 MCP 规范验证 Host 和 Origin,以防范 DNS 重绑定攻击(core/app.py)。允许 MCP_PUBLIC_BASE_URL 的主机和来源,以及回环地址,因此无论反向代理是否保留 Host,都能正常工作。来自外部来源的请求会收到 403,带有未知 Host 的请求会收到 421。不带 Origin 标头的请求(命令行和桌面客户端、claude.ai 的连接器)不受影响;来自其他来源网页的请求(例如使用 MCP Inspector 网页界面访问已部署的服务)会被拒绝。 |
CIMD 客户端会通过 https 让服务器获取其元数据文档,同时会阻止私有地址和回环地址。只能通过出口代理访问互联网的租户,可设置 FASTMCP_SSRF_TRUST_PROXY=true 和 HTTPS_PROXY。
本地测试。 Claude Code、Cursor 和 Inspector 可以连接到 http://localhost:8000:设置 MCP_PUBLIC_BASE_URL=http://localhost:8000,并使用 --allow-insecure-http 启动。Claude Desktop 和 claude.ai 则不同:它们的连接器运行在 Anthropic 的服务器上,因此 MCP 服务必须能通过 https 从公共互联网访问。在本地端口前配置隧道,并将其 URL 用作公共基址:
ngrok http 8000 # note the https://xxxx.ngrok-free.app URL
MCP_PUBLIC_BASE_URL=https://xxxx.ngrok-free.app \
BUGASURA_OAUTH_CLIENT_ID=bugasura-mcp BUGASURA_OAUTH_CLIENT_SECRET=... \
python server.py --transport streamable-http --port 8000 --forwarded-allow-ips '*'
然后将 https://xxxx.ngrok-free.app/mcp 添加为自定义连接器。隧道的回调地址(https://xxxx.ngrok-free.app/auth/callback)必须是 Bugasura API 针对你的客户端 ID 接受的地址。首次通过免费版 ngrok 隧道访问网页时,会显示“Visit Site”过渡页面;点击继续即可。
关于同意页面
默认情况下,用户首次连接时只会看到一个页面:Bugasura 自带的登录和同意页面。FastMCP 代理也有自己的过渡页面,会显示 MCP 客户端及其回调地址;该页面默认关闭(OAUTH_REQUIRE_CONSENT=false),因此整个流程看起来都是 Bugasura 提供的。
以下机制可确保安全:MCP 客户端会自行注册(DCR),或提供自己的元数据文档(CIMD),因此服务器会在注册时、加载元数据文档时,以及再次访问 /authorize 时强制执行重定向 URI 允许列表(config/config.py 中的 DEFAULT_ALLOWED_REDIRECT_URIS)。只接受回环地址,以及上述客户端的回调地址(Claude Desktop / claude.ai、VS Code,包括 Cline 和 Roo Code、Claude Code、Cursor、Windsurf、Google Antigravity、ChatGPT 连接器,包括 Codex),此外还接受 OAUTH_ALLOWED_REDIRECT_URIS 中的地址;任何注册其他回调地址的客户端都会收到 invalid_redirect_uri(DCR 拒绝会记录为 Rejected client registration;回调地址不在允许列表中的 CIMD 客户端会被拒绝,但不会写入日志,因此新客户端无法登录时,请先检查其回调地址是否在列表中)。如果没有这项检查,恶意客户端就可以注册自己的回调地址并获取用户会话。设置 OAUTH_REQUIRE_CONSENT=true 可重新启用过渡页面,作为第二道防线。
3. 反向代理
应转发整个来源,而不只是 /mcp。FastMCP 会在根路径挂载以下端点:/.well-known/oauth-authorization-server、/.well-known/oauth-protected-resource/mcp、/authorize、/token、/register、/revoke、/auth/callback、/consent,以及 /mcp、/health、/sse 和 /upload/<upload_id>。只有 /mcp 需要令牌;上传链接不可猜测且只能使用一次,其 ID 本身就是凭据。
每个上传请求最多可接受 100 MB。用户可以同时持有 20 个未关闭的链接,并有 500 MB 已上传、等待工具处理的文件;暂存目录整体上限为 5 GB(config/config.py 中的 UPLOAD_MAX_* 常量)。反向代理的请求正文大小限制应至少设为 101 MB(Apache 的 LimitRequestBody、nginx 的 client_max_body_size),代理超时时间也应足够长,以便在慢速连接下上传 100 MB 文件(例如 300 秒)。
4. 检查
curl -s https://mcp.bugasura.io/.well-known/oauth-authorization-server | jq '{issuer, client_id_metadata_document_supported, authorization_response_iss_parameter_supported}'
curl -si -X POST https://mcp.bugasura.io/mcp -H 'content-type: application/json' -d '{}' | grep -i www-authenticate # 401 + resource_metadata
curl -s https://mcp.bugasura.io/health # "auth": "oauth"
然后在 Claude Code 中添加 URL(claude mcp add --transport http …,依次选择 /mcp → Authenticate),并确认浏览器跳转到 Bugasura 授权页面后又返回。
本地开发 — 示例客户端配置
在开发服务本身时,如果你想让 AI 客户端将本地克隆作为 stdio 子进程启动,而不是访问托管的 /mcp 端点,请使用以下配置。
将
/path/to/bugasura-mcp-server/替换为你自己的克隆仓库的绝对路径,并将your_api_key_here替换为你的 Bugasura API 密钥(User Settings → API Key)。 STDIO 是唯一仍使用密钥的传输方式,因为子进程无法跳转到浏览器。切勿提交真实密钥。
VS Code(工作区 .vscode/settings.json)
{
"settings": {
"mcp": {
"inputs": [],
"servers": {
"bugasura-local-mcp": {
"type": "stdio",
"command": "/path/to/bugasura-mcp-server/.venv/bin/python3",
"args": [
"/path/to/bugasura-mcp-server/server.py"
],
"env": {
"BUGASURA_API_KEY": "your_api_key_here"
}
}
}
}
}
}
Claude Desktop(claude_desktop_config.json)
macOS 路径:~/Library/Application Support/Claude/claude_desktop_config.json
Windows 路径:%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"bugasura": {
"command": "/path/to/bugasura-mcp-server/.venv/bin/python",
"args": [
"/path/to/bugasura-mcp-server/server.py"
],
"env": {
"BUGASURA_API_KEY": "your_api_key_here"
}
}
}
}
编辑配置后,重启客户端(重新加载 VS Code 窗口/退出并重新启动 Claude Desktop),使其加载新的服务。服务日志写入 stderr — 查看客户端的 MCP 服务日志,确认启动时出现 Bugasura MCP Server | API: ... | Transport: stdio。
使用 MCP Inspector 进行测试与调试
MCP Inspector 提供基于 Web 的界面,用于测试和调试 MCP 服务。
快速开始
-
安装 MCP Inspector(如果尚未安装):
npm install -g @modelcontextprotocol/inspector -
运行 Inspector(STDIO,从
.env读取BUGASURA_API_KEY):cd /path/to/bugasura-mcp-server source .venv/bin/activate npx @modelcontextprotocol/inspector python server.py -
打开浏览器 — Inspector 会自动在
http://localhost:5173打开
若要尝试 OAuth 登录,请使用 HTTP 模式启动服务,并设置 MCP_PUBLIC_BASE_URL=http://localhost:8000 以及客户端 ID/密钥,同时添加 --allow-insecure-http;然后在 Inspector 中选择 Streamable HTTP,URL 填写 http://localhost:8000/mcp,再选择 Authentication → OAuth 2.0 → Quick OAuth Flow。你将先进入服务的授权页面,再进入 Bugasura 的登录和授权页面,最后返回并看到已列出的工具。
可以执行的操作
- ✅ 查看所有工具及其参数和文档
- ✅ 交互式测试工具 — 调用任意工具并查看实际响应
- ✅ 调试工作流 — 测试创建 → 更新 → 删除流程
- ✅ 验证参数 — 确保格式和类型正确
- ✅ 测试基于名称的操作 — 尝试通过问题键(ISS09)、测试用例键(TES5)或名称删除
- ✅ 测试团队解析 — 在管理团队成员时使用团队名称,而非 ID
测试示例
按键删除问题:
Tool: bugasura_delete_issue
Parameters: {
"issue_identifier": "ISS09"
}
注意:STDIO 模式从环境中读取
BUGASURA_API_KEY;工具没有api_key参数。
交互式选择冲刺:
Tool: bugasura_create_issue
Parameters: {
"summary": "Test issue"
}
// Returns selection prompt for team → project → sprint
使用团队名称管理团队成员:
Tool: bugasura_add_team_members
Parameters: {
"team_name": "Engineering",
"email_list": "[email protected], [email protected]"
}
// Resolves team name and sends invitations
使用智能解析移除用户:
Tool: bugasura_delete_team_user
Parameters: {
"team_id": 123,
"user_identifier": "[email protected]"
}
// Resolves user by email and removes from team
详细说明请参阅 MCP_INSPECTOR_GUIDE.md
重要说明
身份验证
托管服务(HTTP) — 使用 OAuth 2.0 登录。MCP 客户端会从服务发现登录方式,在浏览器中打开 Bugasura 的登录和授权页面一次,然后保存一个可静默刷新的令牌(访问令牌有效期为 1 小时,刷新令牌有效期为 30 天)。客户端配置中不会存储任何内容,助手也不会看到凭据。若要让客户端退出登录,请在客户端中断开连接。
本地 STDIO — 服务作为客户端的子进程运行,无法跳转到浏览器,因此会从 env 块中读取 BUGASURA_API_KEY(Bugasura → User Settings → API Key)。如果未设置,工具会返回 status: 'api_key_required' 并附上说明;助手不会要求你在聊天中粘贴密钥。
交互模式
如果未提供 team_id 或 project_id,系统会自动进入交互模式,引导你进行选择。此模式适用于:
- 所有冲刺操作
- 所有问题操作
- 所有测试用例操作
智能分配对象
分配工作时,可以使用:
- 姓名:
"John Doe"(部分匹配,不区分大小写) - 电子邮件:
"[email protected]"(精确匹配,不区分大小写) - 用户 ID:
"123"(直接匹配) - 混合使用:
"John, [email protected], 789"(以逗号分隔)
系统会自动将姓名/电子邮件解析为用户 ID。
智能团队解析
团队成员管理工具支持灵活地识别团队:
- 团队 ID:
team_id=123(直接使用数字 ID) - 团队名称:
team_name="Acme Corp"(部分匹配,不区分大小写)
以下工具可以使用任一参数:
bugasura_add_team_members- 邀请用户加入团队bugasura_update_team_member- 更改成员角色bugasura_delete_team_user- 移除团队成员
示例:
add_team_members(team_name="Engineering", email_list="[email protected]")
update_team_member(team_id=123, user_id=456, is_admin=1)
delete_team_user(team_name="Sales", user_identifier="[email protected]")
注意:如果环境中已配置
BUGASURA_API_KEY,则可以省略api_key。
数据要求
冲刺:
- 冲刺名称必须为 5-250 个字符
- 问题必须分配到冲刺
- 更新时,问题必须已分配到冲刺
需求:
- 需求必须归入文件夹
- 所有需求操作都必须提供文件夹 ID
- 需求可以采用父子层级结构(最多 2 层:父级不能再有父级)
对话示例
入门
"What teams and projects do I have access to?"
→ Returns all your teams and projects
"Find my authentication project"
→ Searches across all teams and returns matches
测试管理
"Create a test case for password reset with severity HIGH and priority P1"
→ Guides you through team/project selection, then creates test case
"List all test cases in my mobile app project"
→ Returns paginated test case list
"Update test case 456 to mark it as PASS and assign to [email protected]"
→ Updates test case and resolves email to user ID
Bug 跟踪
"Show me all critical bugs in sprint 5"
→ Lists critical severity issues filtered by sprint
"Create a bug: Login button crashes on iOS 17"
→ Guides through team/project/sprint selection, creates issue
"Assign issue 789 to Jane and mark it as In Progress"
→ Updates assignee and status
问题评论
"List all comments on issue 123"
→ Returns all comments with user details and timestamps
"Show me the next 10 comments starting from comment 11"
→ Uses pagination (start_at=10, max_results=10)
"List only user comments, exclude system-generated ones"
→ Uses get_user_comments_only=True to filter out system comments
"Add a comment 'Fixed in version 2.1.0' to issue 456"
→ Guides through team/project/issue selection, creates public comment
"Add a private comment about internal notes to issue 789"
→ Creates comment with is_public_comment=0
"Update comment 321 to fix a typo"
→ Guides through interactive selection if comment details not provided
"Delete comment 456"
→ Shows deletion warning, removes comment permanently
冲刺规划
"Create a 2-week sprint called 'Sprint 16' starting next Monday"
→ Guides through project selection, creates sprint with dates
"Show me sprint statistics for sprint 5"
→ Returns issue counts, completion rates, etc.
"Mark sprint 12 as COMPLETED"
→ Updates sprint status
需求管理
"Create a requirement titled 'User Authentication' with details 'Implement OAuth 2.0' and priority P1"
→ Guides through team/project selection, prompts for folder selection, creates requirement
"List all requirements in my mobile app project"
→ Returns all requirements with their hierarchy and test case counts
"Link test cases 123 and 456 to requirement 2036"
→ Creates traceability between requirements and test cases
"Update requirement 2036 to change severity to HIGH and assign to [email protected]"
→ Updates requirement fields while preserving all other data
Testpert 冲刺生成
"Create a TestPert sprint called 'Checkout Flow Sprint'"
→ Confirms options (testing type, depth, skip enrich), then creates the sprint
"Upload /docs/checkout-spec.pdf and /docs/api-contract.md to the knowledge base"
→ Uploads both files, moves sprint to KNOWLEDGE_BASE stage
"Start the analysis"
→ Kicks off requirement analysis, then automatically shows the AI's contextual questions
"Answer: Q1: Users must be able to pay by card or wallet. Q2: Guest checkout is required."
→ Saves answers and advances to the missing requirements stage
"Approve all missing requirements and proceed"
→ Approves rows, advances through risks to the test plan
"Set Authentication focus to EXHAUSTIVE and Performance to MINIMAL"
→ Edits focus-area levels in the test plan
"Generate the test cases"
→ Runs enrichment + coverage + test case generation; returns sprint link when done
"Create a TestPert sprint with skip enrich, link requirements 101 and 102, then build the test plan"
→ Creates sprint (skip_enrich=true), links requirements, starts test plan generation
团队成员管理
"Add [email protected] and [email protected] to the Engineering team"
→ Resolves team by name, sends email invitations to new members
"List all members of team Acme Corp"
→ Returns team members with names, emails, user IDs, and roles
"Promote user 456 to admin in the Marketing team"
→ Updates team member role from member to admin
"Remove [email protected] from the Sales team"
→ Resolves user by email, removes from team and unassigns all their issues
"Make Sarah an admin in team 123"
→ Resolves user by name, promotes to admin role
隐私政策
服务端会以你自己的账户,将请求转发到 Bugasura API。它会加密保存你会话的 OAuth 令牌,在内存中缓存团队/项目列表数分钟,并记录运行日志;它本身没有数据库。数据的收集、使用、存储、共享和保留均受 Bugasura 隐私政策 和 服务条款约束。如有疑问,请联系:[email protected]。
支持
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。