@kud/mcp-bugzilla
v1.1.3
Published
MCP server for Bugzilla — search, discuss, and manage Firefox/Mozilla bugs via the Bugzilla REST API.
Maintainers
Readme
Bugzilla MCP Server
██████╗ ██╗ ██╗ ██████╗ ███████╗██╗██╗ ██╗ █████╗
██╔══██╗██║ ██║██╔════╝ ╚══███╔╝██║██║ ██║ ██╔══██╗
██████╔╝██║ ██║██║ ███╗ ███╔╝ ██║██║ ██║ ███████║
██╔══██╗██║ ██║██║ ██║ ███╔╝ ██║██║ ██║ ██╔══██║
██████╔╝╚██████╔╝╚██████╔╝███████╗██║███████╗███████╗██║ ██║
╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝╚══════╝╚══════╝╚═╝ ╚═╝
Search, discuss, and manage Mozilla/Firefox bugs via the Bugzilla REST API.
Features • Quick Start • Installation • Tools • Development
🌟 Features
- 🔑 Optional auth — read-only without a key; create/update/comment with an API key
- 🛠️ 12 tools covering bugs, comments, history, attachments, products, users, and fields
- 🦊 Mozilla-first — defaults to
https://bugzilla.mozilla.org/rest, configurable via env var - 🔍 Powerful search — filter by product, component, status, severity, assignee, or quicksearch syntax
- 💬 Full discussion flow — read comments, post replies, attach work-time logs
- 📎 Attachment listing — inspect patches and test files linked to any bug
🚀 Quick Start
Prerequisites
- Node.js 20+
- A Mozilla Bugzilla account (optional — for write operations)
- A Bugzilla API key from User Preferences → API Keys
Installation
# Run directly without installing
npx @kud/mcp-bugzilla
# Or clone and build locally
git clone https://github.com/kud/mcp-bugzilla.git
cd mcp-bugzilla
npm install && npm run buildQuick Setup (Claude Desktop)
{
"mcpServers": {
"mcp-bugzilla": {
"command": "npx",
"args": ["-y", "@kud/mcp-bugzilla"],
"env": {
"MCP_BUGZILLA_API_KEY": "your-api-key-here"
}
}
}
}✅ Restart Claude Desktop — you can now search and discuss Firefox bugs.
📚 Installation Guides
claude mcp add mcp-bugzilla -- npx -y @kud/mcp-bugzilla
claude mcp get mcp-bugzillaTo pass an API key:
claude mcp add mcp-bugzilla -e MCP_BUGZILLA_API_KEY=your-key -- npx -y @kud/mcp-bugzillaEdit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"mcp-bugzilla": {
"command": "npx",
"args": ["-y", "@kud/mcp-bugzilla"],
"env": {
"MCP_BUGZILLA_API_KEY": "your-api-key-here"
}
}
}
}In Cursor settings → MCP → Add server:
{
"mcp-bugzilla": {
"command": "npx",
"args": ["-y", "@kud/mcp-bugzilla"],
"env": { "MCP_BUGZILLA_API_KEY": "your-api-key-here" }
}
}In ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"mcp-bugzilla": {
"command": "npx",
"args": ["-y", "@kud/mcp-bugzilla"],
"env": { "MCP_BUGZILLA_API_KEY": "your-api-key-here" }
}
}
}In .vscode/mcp.json:
{
"servers": {
"mcp-bugzilla": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@kud/mcp-bugzilla"],
"env": { "MCP_BUGZILLA_API_KEY": "your-api-key-here" }
}
}
}🛠️ Available Tools
🐛 Bugs (5 tools)
| Tool | Description |
| ----------------- | ------------------------------------------------------------------------------ |
| get_bug | Fetch a single bug by ID or alias |
| search_bugs | Search bugs by product, component, status, assignee, quicksearch, etc. |
| create_bug | File a new bug (requires API key) |
| update_bug | Update status, resolution, assignee, keywords, CC, and more (requires API key) |
| get_bug_history | View the full field-change history for a bug |
💬 Comments (2 tools)
| Tool | Description |
| ---------------- | ------------------------------------------------------------------------------------- |
| get_comments | Get all comments on a bug, with optional new_since filter |
| create_comment | Post a comment, optionally marking it private or logging work time (requires API key) |
📎 Attachments (1 tool)
| Tool | Description |
| ----------------- | ----------------------------------------------------------- |
| get_attachments | List all attachments (patches, screenshots, logs) for a bug |
📦 Products (2 tools)
| Tool | Description |
| -------------- | ----------------------------------------------------- |
| get_products | List accessible/selectable/enterable products |
| get_product | Get product details including components and versions |
👤 Users (1 tool)
| Tool | Description |
| ---------- | ---------------------------------------------- |
| get_user | Look up a Bugzilla user by email or login name |
🔖 Fields (1 tool)
| Tool | Description |
| ---------------- | ------------------------------------------ |
| get_bug_fields | List all bug fields and their legal values |
Total: 12 Tools covering the full Bugzilla REST API!
💬 Example Conversations
You: "Show me bug 1234567"
AI: *Fetches and displays the bug summary, status, assignee, and metadata*
You: "Search for open Firefox crashes with priority P1"
AI: *Queries product=Firefox, status=NEW|ASSIGNED, priority=P1, severity=critical*
You: "What comments are on bug 1800000?"
AI: *Lists all comments with author names and timestamps*
You: "Who is assigned to the most recent WebGL regression?"
AI: *Searches for WebGL regressions and shows assignee details*
You: "File a bug for a Firefox crash on macOS when opening PDFs"
AI: *Creates the bug in the DOM: PDF Viewer component with the right fields*
You: "Mark bug 9999 as RESOLVED FIXED with a comment explaining the fix"
AI: *Updates status/resolution and posts the comment in one operation*
You: "What components does the Firefox product have?"
AI: *Fetches product details and lists all components*
You: "Show me the change history for bug 500000"
AI: *Displays the full audit trail of field changes with timestamps*
You: "Who is [email protected] on Bugzilla?"
AI: *Returns user profile including display name and real name*
You: "What are the valid values for bug severity?"
AI: *Queries get_bug_fields for severity and lists all legal values*🧪 Development
Project Structure
mcp-bugzilla/
├── src/
│ ├── index.ts # Server, tools, and handlers
│ └── __tests__/
│ └── tools.test.ts # Unit tests for every handler
├── dist/ # Compiled output
├── .mcp.json # Local dev MCP config
├── CLAUDE.md # API reference pointers
├── package.json
└── tsconfig.jsonAvailable Scripts
| Script | Description |
| --------------------- | --------------------------------- |
| npm run build | Compile TypeScript to dist/ |
| npm run build:watch | Watch mode compilation |
| npm run dev | Run directly via tsx |
| npm test | Run test suite |
| npm run test:watch | Watch mode tests |
| npm run coverage | Coverage report |
| npm run typecheck | Type-check without emitting |
| npm run inspect:dev | Open MCP Inspector against source |
Development Workflow
Terminal 1 — watch compiler:
npm run build:watchTerminal 2 — MCP Inspector:
npm run inspect:devTesting with MCP Inspector
export MCP_BUGZILLA_API_KEY=your-key
npm run inspect:devOpen http://localhost:5173 to interact with the server live.
🔐 Authentication
API key authentication is optional for reads and required for writes.
- Log in to bugzilla.mozilla.org
- Go to Preferences → API Keys
- Click Generate a new API key, give it a description
- Copy the key and set it as
MCP_BUGZILLA_API_KEY
Verify your key:
curl -H "X-BUGZILLA-API-KEY: your-key" \
https://bugzilla.mozilla.org/rest/whoamiYou can also override the Bugzilla instance with MCP_BUGZILLA_BASE_URL (useful for self-hosted installations).
🐛 Troubleshooting
Server Not Showing
- Ensure Node.js 20+ is installed:
node --version - Check the server key includes the
mcp-prefix in config - Restart Claude Desktop / reload your editor after config changes
- Run
claude mcp get mcp-bugzillato verify the registration
Authentication Errors
Test your key directly:
curl -H "X-BUGZILLA-API-KEY: your-key" \
https://bugzilla.mozilla.org/rest/whoamiCheck Logs
- macOS:
~/Library/Logs/Claude/mcp-server-mcp-bugzilla.log - Windows:
%APPDATA%\Claude\logs\mcp-server-mcp-bugzilla.log - Claude Code:
claude mcp get mcp-bugzilla
🔒 Security Best Practices
- ✅ Set
MCP_BUGZILLA_API_KEYas an environment variable — never hardcode it - ✅ Never commit your API key to version control
- ✅ Protect your shell profile or secrets manager where the key is stored
- ✅ Rotate your key at Bugzilla preferences if it is ever exposed
📊 Tech Stack
Runtime: Node.js 20+
Language: TypeScript 5
Target: Mozilla Bugzilla REST API v1
Protocol: Model Context Protocol (MCP) 1.0
HTTP Client: Native fetch
Module System: ESM ("type": "module")
🤝 Contributing
- Run
npm run typecheckandnpm test— both must pass - Run
npm run build— verifydist/compiles cleanly - Follow the existing tool handler pattern: exported arrow function → registered with
server.registerTool
📄 License
MIT — see LICENSE.
🙏 Acknowledgments
📮 Support
Open an issue on GitHub.
Made with ❤️ for Firefox contributors and Mozilla community members
⭐ Star this repo if it helped you!
