by openSUSE
Enables AI models and MCP clients to seamlessly interact with Bugzilla instances, offering tools for retrieving bug details, history, comments, and performing write operations such as status updates, assignments, and commenting.
Provides a robust MCP server that exposes a comprehensive set of tools and prompts for querying bug information, managing comments, and leveraging Bugzilla's quicksearch capabilities. The server follows the Model Context Protocol, allowing AI agents and other MCP‑compatible clients to call functions programmatically.
uvx mcp-bugzilladocker pull kskarthik/mcp-bugzilla
docker run -p 8000:8000 \
-e BUGZILLA_SERVER=https://bugzilla.example.com \
kskarthik/mcp-bugzilla \
--bugzilla-server https://bugzilla.example.com \
--host 0.0.0.0 \
--port 8000
git clone https://github.com/openSUSE/mcp-bugzilla.git
cd mcp-bugzilla
uv sync
uv run mcp-bugzilla --bugzilla-server https://bugzilla.example.com --host 127.0.0.1 --port 8000
--bugzilla-server or the BUGZILLA_SERVER environment variable.--api-key-header (default ApiKey).--use-auth-header for Authorization: Bearer).--read-only) or disable specific tools via MCP_BUGZILLA_DISABLED_METHODS.mcp-bugzilla --bugzilla-server https://bugzilla.opensuse.org
The server listens at http://127.0.0.1:8000/mcp/ by default.ApiKey: YOUR_KEY).{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "bug_info", "args": {"bug_ids": [12345]}}, "id": 1}
bug_info, bug_history, bug_commentsadd_commentupdate_bug_status, assign_bug, update_bug_fields, add_cc_to_bug, mark_as_duplicatebugs_quicksearch with full quicksearch syntax, quicksearch_syntax_resourcebug_url, bugzilla_server_info, mcp_server_info_resource, get_current_headers_resource, summarize_bug_promptQ: Which Python version is required? A: Python 3.13 or newer.
Q: How do I secure the server?
A: Use HTTPS in front of the server, enable --read-only for read‑only access, and restrict MCP_BUGZILLA_DISABLED_METHODS to limit writable tools.
Q: Can I run the server without Docker?
A: Yes, install via PyPI (uvx mcp-bugzilla) or from source and execute the mcp-bugzilla command.
Q: What if my Bugzilla instance rejects the api_key query parameter?
A: Start the server with --use-auth-header to send the key as Authorization: Bearer.
Q: How do I disable specific tools?
A: Set the environment variable MCP_BUGZILLA_DISABLED_METHODS to a comma‑separated list of tool names, e.g., bug_info,bug_comments.
Q: Where can I find the Docker image?
A: On Docker Hub at kskarthik/mcp-bugzilla.
A robust MCP server that provides seamless interaction with Bugzilla instances through the Model Context Protocol. This server exposes a comprehensive set of tools and prompts, enabling AI models and other MCP clients to efficiently query bug information, manage comments, and leverage Bugzilla's powerful quicksearch capabilities.
The server provides the following tools for interacting with Bugzilla:
bug_info(bug_ids: set[int]): Retrieves comprehensive details for specified Bugzilla bug IDs.
bug_ids: A set of bug IDs to fetch details forbugs which lists all available information about the bugs (status, assignee, summary, description, extensions, etc.)bug_info({12345, 67890}) returns complete bug details for the specified IDs.bug_history(id: int, new_since: Optional[datetime] = None): Fetches the history of changes for a given bug ID.
id: The bug ID to fetch history fornew_since: Optional datetime object to only return history entries newer than this time.bug_history(12345, new_since=datetime.fromisoformat("2026-01-01T00:00:00")) returns all history changes newer than Jan 1, 2026.bug_comments(id: int, include_private_comments: bool = False, new_since: Optional[datetime] = None): Fetches all comments associated with a given bug ID.
id: The bug ID to fetch comments forinclude_private_comments: Whether to include private comments (default: False)new_since: Optional datetime object to only return comments newer than this time.bug_comments(12345, include_private_comments=True, new_since=datetime.fromisoformat("2026-01-01T00:00:00")) returns all comments newer than Jan 1, 2026 including private onesadd_comment(bug_id: int, comment: str, is_private: bool = False): Adds a new comment to a specified bug.
bug_id: The bug ID to add a comment tocomment: The comment text to addis_private: Whether the comment should be private (default: False)add_comment(12345, "Fixed in version 2.0", is_private=False)Note: Write operations require appropriate Bugzilla permissions. These tools enable bug management and workflow automation.
update_bug_status(bug_id: int, status: str, resolution: str = None, comment: str = ""): Updates the status of a bug with optional comment.
bug_id: The bug ID to updatestatus: New status (e.g., NEW, ASSIGNED, MODIFIED, ON_QA, VERIFIED, CLOSED)resolution: Required when status is CLOSED (e.g., FIXED, WONTFIX, NOTABUG, DUPLICATE)comment: Optional comment explaining the status changeupdate_bug_status(12345, "CLOSED", resolution="FIXED", comment="Fixed in version 2.0")assign_bug(bug_id: int, assignee: str, comment: str = ""): Assigns a bug to a user.
bug_id: The bug ID to assignassignee: Email address of the assigneecomment: Optional comment explaining the assignmentassign_bug(12345, "developer@example.com", comment="You're the expert on this component")update_bug_fields(bug_id: int, priority: str = None, severity: str = None, resolution: str = None, comment: str = ""): Updates various bug fields.
bug_id: The bug ID to updatepriority: Priority level (e.g., urgent, high, medium, low, unspecified)severity: Severity level (e.g., urgent, high, medium, low, unspecified)resolution: Resolution (only for closed bugs)comment: Optional comment explaining the changesupdate_bug_fields(12345, priority="high", severity="urgent", comment="Escalating due to customer impact")add_cc_to_bug(bug_id: int, cc_email: str): Adds an email address to the CC list of a bug.
bug_id: The bug IDcc_email: Email address to add to CC listadd_cc_to_bug(12345, "manager@example.com")mark_as_duplicate(bug_id: int, duplicate_of: int, comment: str = ""): Marks a bug as a duplicate of another bug and closes it.
bug_id: The bug ID to mark as duplicateduplicate_of: The bug ID this is a duplicate ofcomment: Optional comment (auto-generated if not provided)CLOSED, resolution DUPLICATE, and dupe_of referencemark_as_duplicate(12345, 789012, comment="Same root cause as the original report")bugs_quicksearch(query: str, status: str = "ALL", include_fields: str = "...", limit: int = 50, offset: int = 0): Executes a search for bugs using Bugzilla's powerful quicksearch syntax.
query: A quicksearch query string (e.g., "product:Firefox")status: Bug status to filter by (default: "ALL")include_fields: Comma-separated list of fields to return (default: "id,product,component,assigned_to,status,resolution,summary,last_change_time")limit: Maximum number of results to return (default: 50)offset: Number of results to skip for pagination (default: 0)bugs_quicksearch("product:Firefox", status="NEW", limit=10)quicksearch_syntax_resource(): Returns documentation on Bugzilla's quicksearch syntax.
summarize_bug_prompt(id: int): Returns a detailed summary prompt for all comments of a given bug ID.
bug_url(bug_id: int): Constructs and returns the direct URL to a specific bug on the Bugzilla server.
"https://bugzilla.example.com/show_bug.cgi?id=12345")bugzilla_server_info(): Returns comprehensive Bugzilla server information.
url, version, extensions, timezone, time, and parameters.mcp_server_info_resource(): Returns the configuration arguments being used by the current server instance (version, host, port, etc.).
get_current_headers_resource(): Returns the HTTP headers from the current request.
uvx mcp-bugzilla
The easiest way to run the server is using Docker or Podman:
docker pull kskarthik/mcp-bugzilla
docker run -p 8000:8000 \
-e BUGZILLA_SERVER=https://bugzilla.example.com \
kskarthik/mcp-bugzilla \
--bugzilla-server https://bugzilla.example.com \
--host 0.0.0.0 \
--port 8000
Official Docker Hub repository: https://hub.docker.com/r/kskarthik/mcp-bugzilla/
Clone the repository:
git clone <repository-url>
cd mcp-bugzilla
Install dependencies:
uv sync
Run the server:
uv run mcp-bugzilla --bugzilla-server https://bugzilla.example.com --host 127.0.0.1 --port 8000
This will start the HTTP server at http://127.0.0.1:8000/mcp/.
The mcp-bugzilla command supports the following options:
| Argument | Environment Variable | Default | Description |
|---|---|---|---|
--bugzilla-server <URL> |
BUGZILLA_SERVER |
Required | Base URL of the Bugzilla server (e.g., https://bugzilla.example.com) |
--host <ADDRESS> |
MCP_HOST |
127.0.0.1 |
Host address for the MCP server to listen on |
--port <PORT> |
MCP_PORT |
8000 |
Port for the MCP server to listen on |
--api-key-header <HEADER_NAME> |
MCP_API_KEY_HEADER |
ApiKey |
HTTP header name for the Bugzilla API key |
--use-auth-header |
USE_AUTH_HEADER |
False |
Use Authorization: Bearer header instead of api_key query parameter |
--read-only |
MCP_READ_ONLY |
False |
Disables all tools which can modify a bug. Works well in conjunction with MCP_BUGZILLA_DISABLED_METHODS |
Note: Command-line arguments take precedence over environment variables.
You can configure the server using environment variables instead of command-line arguments:
export BUGZILLA_SERVER=https://bugzilla.example.com
export MCP_HOST=127.0.0.1
export MCP_PORT=8000
export MCP_API_KEY_HEADER=ApiKey
export LOG_LEVEL=INFO # Optional: DEBUG, INFO, WARNING, ERROR, CRITICAL
export MCP_READ_ONLY=true # Optional: set to true to disable write operations
# Selective Disabling Tools (Optional)
# Works fine in conjunction with --read-only flag
export MCP_BUGZILLA_DISABLED_METHODS='bug_info,bug_comments'
mcp-bugzilla
The server allows you to selectively disable specific tools or prompts using an environment variable. This is useful for restricting functionality based on security or resource requirements.
Method: MCP_BUGZILLA_DISABLED_METHODS=tool1,tool2
Start the server with your Bugzilla instance URL:
mcp-bugzilla --bugzilla-server https://bugzilla.opensuse.org
The server will start listening on http://127.0.0.1:8000/mcp/ by default.
The MCP server exposes an HTTP endpoint at:
http://<host>:<port>/mcp/
For example, with default settings:
http://127.0.0.1:8000/mcp/
Required: All requests must include a Bugzilla API key in the HTTP headers.
Generate an API Key:
Send the API Key:
Include the API key in the HTTP request header. By default, the header name is ApiKey:
POST /mcp/ HTTP/1.1
Host: 127.0.0.1:8000
ApiKey: YOUR_API_KEY_HERE
Content-Type: application/json
You can customize the header name using the --api-key-header argument or MCP_API_KEY_HEADER environment variable.
Example with curl:
curl -X POST http://127.0.0.1:8000/mcp/ \
-H "ApiKey: YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "server_url_resource"}, "id": 1}'
This server supports two authentication methods for communicating with Bugzilla:
By default, the server sends the API key as a query parameter in the URL:
mcp-bugzilla --bugzilla-server https://bugzilla.example.com
This works with standard Bugzilla instances (Mozilla Bugzilla, openSUSE Bugzilla, etc.).
Some Bugzilla instances (such as Red Hat Bugzilla) require the API key to be sent via the Authorization: Bearer header instead of as a query parameter. Use the --use-auth-header flag for these instances:
mcp-bugzilla --bugzilla-server https://bugzilla.redhat.com --use-auth-header
When to use --use-auth-header:
api_key query parametersHow it works:
--use-auth-header: Sends Authorization: Bearer YOUR_API_KEY header to Bugzilla--use-auth-header (default): Sends ?api_key=YOUR_API_KEY query parameter to BugzillaNote: The --api-key-header option controls which header name the MCP server expects from clients, while --use-auth-header controls how the MCP server authenticates with Bugzilla. These are independent settings.
The server follows the Model Context Protocol (MCP) specification. It can be integrated with any MCP-compatible client.
Example MCP client configuration (format may vary by client):
{
"mcpServers": {
"bugzilla": {
"url": "http://127.0.0.1:8000/mcp/",
"headers": {
"ApiKey": "YOUR_API_KEY_HERE"
}
}
}
}
All tools return JSON responses following the MCP protocol. Successful responses include the tool's return value, while errors include detailed error messages.
The server provides detailed error messages for common issues:
ValidationError if the required API key header is missingToolError with details if a bug ID doesn't existToolError with the HTTP status code and error message from BugzillaToolError for connection or timeout issuesThe server includes structured logging with color-coded output:
Set the log level using the LOG_LEVEL environment variable:
DEBUG: Detailed debugging informationINFO: General informational messages (default)WARNING: Warning messagesERROR: Error messages onlyCRITICAL: Critical errors only# MCP client call
result = client.call_tool("bug_info", {"bug_ids": [12345]})
print(result)
# Returns complete bug details including status, assignee, summary, etc.
# Search for new bugs in Firefox product
result = client.call_tool("bugs_quicksearch", {
"query": "product:Firefox status:NEW",
"limit": 10
})
# Returns list of bugs with essential fields
# Add a public comment to a bug
result = client.call_tool("add_comment", {
"bug_id": 12345,
"comment": "This issue has been resolved in version 2.0",
"is_private": False
})
# Returns: {"id": 67890} - the new comment ID
# Get the history of changes for a bug
history = client.call_tool("bug_history", {
"id": 12345,
"new_since": datetime.fromisoformat("2026-01-01T00:00:00")
})
# Get all public comments
public_comments = client.call_tool("bug_comments", {
"id": 12345,
"include_private_comments": False
})
# Get all comments including private ones
all_comments = client.call_tool("bug_comments", {
"id": 12345,
"include_private_comments": True
})
# Search by product and status
bugs_quicksearch("product:Firefox status:NEW")
# Search by assignee
bugs_quicksearch("assigned_to:user@example.com")
# Search by component
bugs_quicksearch("component:Core status:RESOLVED")
# Search with multiple criteria
bugs_quicksearch("product:Firefox component:JavaScript status:NEW priority:P1")
# Use pagination
page1 = bugs_quicksearch("status:NEW", limit=50, offset=0)
page2 = bugs_quicksearch("status:NEW", limit=50, offset=50)
Red Hat Bugzilla requires Authorization header authentication:
# Start the server with --use-auth-header flag
mcp-bugzilla \
--bugzilla-server https://bugzilla.redhat.com \
--use-auth-header \
--host 127.0.0.1 \
--port 8000
# Client connects normally - the flag only affects server-to-Bugzilla communication
curl -X POST http://127.0.0.1:8000/mcp/ \
-H "ApiKey: YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "server_url"}, "id": 1}'
# Close a bug as fixed
result = client.call_tool("update_bug_status", {
"bug_id": 12345,
"status": "CLOSED",
"resolution": "FIXED",
"comment": "Fixed in commit abc123"
})
# Assign bug to a developer
result = client.call_tool("assign_bug", {
"bug_id": 12345,
"assignee": "developer@example.com",
"comment": "Please review this regression"
})
# Mark bug as duplicate and close it
result = client.call_tool("mark_as_duplicate", {
"bug_id": 12345,
"duplicate_of": 67890,
"comment": "This is a duplicate of the original report"
})
# Bug is automatically closed with resolution DUPLICATE
Issue: Server fails to start with "bugzilla-server argument required"
Solution: Ensure you provide the --bugzilla-server argument or set the BUGZILLA_SERVER environment variable:
mcp-bugzilla --bugzilla-server https://bugzilla.example.com
Issue: Receiving ValidationError: ApiKey header is required
Solution:
ApiKey)Issue: Receiving ToolError with HTTP status codes
Common causes:
Solution: Check the error message for details and verify your API key permissions.
Issue: Cannot connect to Bugzilla server
Solution:
Issue: Not seeing enough (or too much) log output
Solution: Adjust the LOG_LEVEL environment variable:
export LOG_LEVEL=DEBUG # For more verbose output
export LOG_LEVEL=ERROR # For minimal output
This project is licensed under the Apache 2.0 License. See the LICENSE file for details.
Author: Sai Karthik kskarthik@disroot.org
Contributors: https://github.com/openSUSE/mcp-bugzilla/graphs/contributors
Please log in to share your review and rating for this MCP.
Explore related MCPs that share similar capabilities and solve comparable challenges
by modelcontextprotocol
A Model Context Protocol server for Git repository interaction and automation.
by zed-industries
A high‑performance, multiplayer code editor designed for speed and collaboration.
by modelcontextprotocol
Model Context Protocol Servers
by modelcontextprotocol
A Model Context Protocol server that provides time and timezone conversion capabilities.
by cline
An autonomous coding assistant that can create and edit files, execute terminal commands, and interact with a browser directly from your IDE, operating step‑by‑step with explicit user permission.
by upstash
Provides up-to-date, version‑specific library documentation and code examples directly inside LLM prompts, eliminating outdated information and hallucinated APIs.
by daytonaio
Provides a secure, elastic infrastructure that creates isolated sandboxes for running AI‑generated code with sub‑90 ms startup, unlimited persistence, and OCI/Docker compatibility.
by continuedev
Enables faster shipping of code by integrating continuous AI agents across IDEs, terminals, and CI pipelines, offering chat, edit, autocomplete, and customizable agent workflows.
by github
Connects AI tools directly to GitHub, enabling natural‑language interactions for repository browsing, issue and pull‑request management, CI/CD monitoring, code‑security analysis, and team collaboration.