Skip to main content
Glama
realsidg

bug_tracker_mcp

by realsidg

bug_tracker_mcp

Python 3.12+ FastMCP

A lean, agent-first Model Context Protocol (MCP) server for tracking bugs, tasks, and context across coding sessions. Designed to give AI agents (like Claude Desktop, Antigravity, and Cursor) zero-friction persistent memory for issues discovered during development.


Overview

When pair-programming with AI agents, bugs and technical debt are frequently discovered mid-task. Without a persistent tracker, these issues get lost when context windows reset.

bug_tracker_mcp solves this with a lightweight SQLite-backed MCP server. It provides 6 fast MCP tools allowing agents to log, inspect, update, resolve, and delete bugs, all isolated per project. Every tool call requires an explicit project name (e.g. the repo name) supplied by the calling agent; the server never infers it from its own working directory, since a single long-lived MCP process can serve many different projects across a session.


Related MCP server: Telebugs MCP Server

Architecture

The system is organized into decoupled Python modules:

  • FastMCP Server (bug_tracker_mcp.server): Defines stdio transport MCP tools using fastmcp.FastMCP. Handles argument validation, requires a project name on every call, and converts internal exceptions to user-friendly ToolError responses.

  • Database Path Resolution (bug_tracker_mcp.scope): Resolves the path to the single shared SQLite database: $XDG_DATA_HOME/bug-tracker-mcp/bugs.db (or ~/.local/share/bug-tracker-mcp/bugs.db) by default, or $BUGTRACKER_ROOT/bugs.db if overridden.

  • SQLite Storage Layer (bug_tracker_mcp.storage): Manages SQLite connections with WAL journal mode, busy timeouts, auto-migrations via user_version, and full CRUD operations. Every read and write is scoped by a project column, so bugs logged under one project are invisible to and cannot be mutated from another.

  • Pydantic Models (bug_tracker_mcp.models): Strict Pydantic models (Bug, BugSummary, BugListResponse) enforcing schema and typed responses.

  • Environment Configuration (bug_tracker_mcp.config): Reads an optional environment variable override for the shared database's storage directory.


Installation & Setup

Install and manage dependencies using uv:

# Clone repository
git clone https://github.com/realsidg/bug_tracker_mcp.git
cd bug_tracker_mcp

# Install dependencies and setup virtual environment
uv sync

Agent Configuration

Register bug-tracker-mcp with your agent workspace or desktop client.

Workspace .mcp.json

Add to .mcp.json in your workspace root:

{
  "mcpServers": {
    "bug-tracker": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/bug_tracker_mcp",
        "bug-tracker-mcp"
      ]
    }
  }
}

Claude Desktop (claude_desktop_config.json)

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "bug-tracker": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/bug_tracker_mcp",
        "bug-tracker-mcp"
      ]
    }
  }
}

Environment Variables

You can override the storage location by setting an environment variable:

Variable

Description

Default

BUGTRACKER_ROOT

Overrides the directory holding the shared bugs.db file.

$XDG_DATA_HOME/bug-tracker-mcp or ~/.local/share/bug-tracker-mcp.


Tool Reference

bug_tracker_mcp exposes 6 tools to AI agents. Every tool requires a project name identifying which project the bugs belong to — use a consistent name (e.g. the repo name) for the same project across calls, since bugs are only ever returned to callers passing the matching project.

Tool Name

Parameters

Description

log_bug

project (str, required)title (str, required)description (str, optional)severity (minor | major | blocking, default: minor)kind (bug | improvement, default: bug)location (str, optional)tags (list[str], optional)found_while (str, optional)

Logs a new bug or improvement into storage and returns the created Bug record with auto-incremented ID.

list_bugs

project (str, required)status (open | fixed | all, default: open)severity (minor | major | blocking, optional)kind (bug | improvement | all, optional)tag (str, optional)limit (int, default: 50)offset (int, default: 0)

Lists lightweight BugSummary items within a project with filtering and pagination.

get_bug

project (str, required)bug_id (int, required)

Returns complete details of a specific bug by ID within a project. Raises ToolError if not found.

update_bug

project (str, required)bug_id (int, required)title, description, severity, kind, location, tags, found_while, status (optional)

Updates specific attributes of an existing bug within a project. Raises ToolError if not found.

resolve_bug

project (str, required)bug_id (int, required)resolution (str, optional)

Marks a bug as fixed, sets optional resolution explanation, and records fixed_at timestamp. Raises ToolError if not found.

delete_bug

project (str, required)bug_id (int, required)

Permanently removes a bug by ID within a project. Returns {"deleted": true, "bug_id": bug_id} or raises ToolError if not found.


Development & Testing

Run all quality checks:

# Run pytest test suite
uv run pytest

# Check code formatting and linting
uv run ruff check .
uv run ruff format --check .

# Run static type checker in strict mode
uv run mypy src

# Run pre-commit hooks
uv run pre-commit run --all-files

Available Tools

6 tools
delete_bugB

Delete a bug by ID within a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
bug_idYesInteger ID of the bug to delete.
projectYesName identifying the project the bug belongs to.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description should disclose behaviors like permanent deletion, side effects, or required permissions. It only states the action without detailing consequences, leaving the agent underinformed about the destructive nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, consisting of a single sentence that conveys the essential purpose without any extraneous words or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description does not need to explain return values, but it lacks details about success/failure behavior or whether the deletion is reversible. For a destructive tool, more context is needed to ensure safe usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for both parameters (bug_id and project) with 100% coverage. The tool description adds no new semantic information beyond what is already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Delete a bug by ID within a project' clearly specifies the verb (delete), resource (bug), and scope (by ID within project). It effectively distinguishes this tool from siblings like list_bugs or update_bug.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is provided on when to use this tool versus alternatives or when not to use it. The context implies deletion, but there are no warnings about irreversibility or dependencies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bugA

Get full details of a specific bug by ID within a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
bug_idYesInteger ID of the bug.
projectYesName identifying the project the bug belongs to.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
kindNo
tagsNo
titleYes
statusNo
projectYes
fixed_atNo
locationNo
severityNo
created_atYes
resolutionNo
updated_atYes
descriptionNo
found_whileNo

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It only states 'Get full details' implying a read operation, but does not disclose behavioral traits such as idempotency, rate limits, or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, 12 words, front-loaded with the purpose. Every word is purposeful with no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get operation with 2 parameters and an output schema, the description is complete. It clearly indicates what the tool does. However, it could explicitly state the operation is read-only and safe.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are described in the schema. The description adds no additional meaning beyond the schema. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves full details of a specific bug by ID within a project, using a specific verb and resource. It distinguishes from siblings like list_bugs (listing all) and mutation tools like log_bug, delete_bug, update_bug, resolve_bug.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing full details of a specific bug, but does not explicitly state when to use over siblings. No exclusionary language or prerequisites are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_bugsA

List bugs within a project with optional filtering and pagination.

Returns lightweight BugSummary items (omitting full description and notes) for progressive disclosure. Use get_bug to retrieve complete details for a specific bug.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoFilter by tag name.
kindNoFilter by kind ('bug', 'improvement', or 'all').
limitNoMax number of items to return. Defaults to 50.
offsetNoPagination offset. Defaults to 0.
statusNoFilter by status ('open', 'fixed', or 'all'). Defaults to 'open'.open
projectYesName identifying the project to list bugs for. Required — only bugs logged under this exact project name are returned.
severityNoFilter by severity ('minor', 'major', 'blocking').

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
totalYes
has_moreYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since annotations are absent, the description carries the full burden and discloses that the tool returns lightweight BugSummary items omitting description and notes, which is a key behavioral trait.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise, front-loaded sentences with no wasted information, clearly stating purpose and usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and full parameter descriptions, the description adds necessary context about progressive disclosure, making it fairly complete for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description does not need to add parameter details; baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists bugs with filtering and pagination, and distinguishes it from get_bug by noting it returns lightweight items for progressive disclosure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance to use get_bug for full details, but does not mention when not to use this tool or specify alternatives beyond get_bug.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

log_bugB

Log a new bug or improvement into the bug tracking store.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoEntry kind ('bug' or 'improvement'). Defaults to 'bug'.bug
tagsNoList of tag strings to categorize the bug.
titleYesShort description of the bug.
projectYesName identifying the project these bugs belong to (e.g. the repo name). Required — bugs are isolated per project, so use a consistent name for the same project across calls.
locationNoFile location or context reference (e.g. 'src/foo.py:42').
severityNoBug severity level ('minor', 'major', 'blocking'). Defaults to 'minor'.minor
descriptionNoDetailed explanation or error details.
found_whileNoContext or activity being undertaken when bug was discovered.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
kindNo
tagsNo
titleYes
statusNo
projectYes
fixed_atNo
locationNo
severityNo
created_atYes
resolutionNo
updated_atYes
descriptionNo
found_whileNo

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It only says 'Log a new bug or improvement' without mentioning side effects, duplicate checks, or any prerequisites. The output schema exists but the description does not add behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that is concise and front-loaded with the action. Every word is earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters and an output schema, the description is too minimal. It does not explain the return value (though schema does) or any context like required permissions or process quirks.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description itself does not add any parameter semantics; all parameter meaning is in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Log' and the resource 'new bug or improvement into the bug tracking store'. It is easily distinguishable from sibling tools like delete_bug, list_bugs, etc., which handle different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives, but the sibling tool names imply this is for creation. The description lacks explicit when-to-use or when-not-to-use advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_bugB

Mark a bug as fixed with optional resolution details.

ParametersJSON Schema
NameRequiredDescriptionDefault
bug_idYesInteger ID of the bug to resolve.
projectYesName identifying the project the bug belongs to.
resolutionNoExplanation of how the bug was resolved (optional).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
kindNo
tagsNo
titleYes
statusNo
projectYes
fixed_atNo
locationNo
severityNo
created_atYes
resolutionNo
updated_atYes
descriptionNo
found_whileNo

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description must disclose behavior. It only states 'mark as fixed' without detailing side effects, permission requirements, or changes to bug status. Minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no unnecessary words. Front-loaded with action and subject. Highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite output schema existing, the description lacks context for a mutation tool—no mention of prerequisites (e.g., bug must exist, user permissions) or validation. Incomplete for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds no extra meaning beyond 'optional resolution details', which aligns with the 'resolution' parameter. No enhancement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Mark a bug as fixed') and resource (bug). It distinguishes from siblings like 'log_bug' (create) and 'update_bug' (general update) by specifying a fixed state, which is a unique intent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a bug is fixed but does not explicitly state when to use it vs alternatives like 'update_bug' or 'delete_bug'. No guidance on prerequisites or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_bugC

Update attributes of an existing bug within a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoNew kind ('bug' or 'improvement') (optional).
tagsNoNew tags list (optional).
titleNoNew title (optional).
bug_idYesInteger ID of the bug to update.
statusNoNew status ('open' or 'fixed') (optional).
projectYesName identifying the project the bug belongs to.
locationNoNew location (optional).
severityNoNew severity (optional).
descriptionNoNew description (optional).
found_whileNoNew found_while context (optional).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
kindNo
tagsNo
titleYes
statusNo
projectYes
fixed_atNo
locationNo
severityNo
created_atYes
resolutionNo
updated_atYes
descriptionNo
found_whileNo

TDQS

C2.7/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It only states 'update' without disclosing side effects, required permissions, mutability, or any behavioral traits. This is insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded and concise. However, it is too brief and fails to provide necessary information, making it less helpful for accurate tool selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (10 parameters, mutation, no annotations), the description is incomplete. It does not mention preconditions, return values, or constraints like requiring an existing bug. Output schema exists but description does not leverage it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds no extra meaning beyond 'update attributes', which is generic. Parameters are well-documented in schema, so description need not repeat them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Update attributes of an existing bug within a project', specifying the verb (update) and resource (existing bug). It distinguishes from sibling tools like log_bug (create) and get_bug (read).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives like resolve_bug, which may also update status. No prerequisites or conditions mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv0.1.0
    • First observeddelete_bug
    • First observedget_bug
    • First observedlist_bugs
    • First observedlog_bug
    • First observedresolve_bug
    • First observedupdate_bug

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a distinct action on bugs: create, delete, list, get, update, and resolve. There is no overlap between their purposes.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: log_bug, delete_bug, list_bugs, get_bug, update_bug, resolve_bug. No mixing of conventions.

Tool Count5/5

6 tools cover the essential CRUD operations plus a dedicated resolve action for a bug tracker. This is well-scoped and not excessive.

Completeness4/5

The set provides full create, read (list and get), update, delete, and resolve. Minor gaps like reassigning or changing status beyond resolve exist but are acceptable for a basic tracker.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for intelligent project planning and task management featuring task tracking, bug reporting, and feature specification with SQLite persistence. It includes full-text search capabilities and automatic filesystem synchronization to keep project data organized and accessible.
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that enables AI agents to retrieve and analyze error reports from a self-hosted Telebugs instance. It provides tools for listing projects, searching error groups, and fetching detailed reports directly from the Telebugs SQLite database.
    4
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/realsidg/bug_tracker_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server