AI and Claude Code

Using BugDump with Claude Code (MCP)

Updated 106 views

BugDump ships an MCP server, so Claude Code — or Cursor, or any MCP client — can read your bug reports as a first-class data source. Instead of copying a stack trace into a prompt, you give the agent the task ID and it fetches the evidence itself. With write access it can also close the loop: move the task, comment with the fix, set the priority, and assign it.

The MCP server is included on every plan, Free too.

Using Claude on the web, desktop or mobile, ChatGPT or VS Code? Those apps connect by signing in, with no token to create: see Connecting Claude, ChatGPT or VS Code to BugDump. This article covers personal tokens, which Cursor, scripts and CI jobs use — and Claude Code, if you'd rather use a token than sign in.

Coming from a shared MCP key? Project-level MCP keys have been replaced by personal tokens and no longer work. Create your own token below and update your client's configuration. See the changelog for what changed.

1. Create a personal token

Open your project's MCP server page and, under Personal tokens, click Create token. Name it after where it will live — "Work laptop" or "CI agent" — so you can tell your tokens apart later.

Create MCP token dialog with the token name Work laptop and the Allow changes checkbox checked

Leave Allow changes off for read-only access. Check it to let the assistant move tasks, comment, set priority, and assign. A token's access is fixed when it is created; to change it, create a new token and revoke the old one.

The token acts as you. It sees what you can see in this project, and anything it changes is recorded under your name. Every member creates their own — there is no shared project key.

BugDump shows the token once. Copy it before you close the dialog; afterwards the page only shows its last four characters.

MCP token created dialog showing the new bdm_ token once, the https://api.bugdump.com/api/mcp endpoint and the claude mcp add command

2. Connect Claude Code

The dialog gives you the command with your token already in it. Run it in your project folder:

Bash
claude mcp add --transport http bugdump https://api.bugdump.com/api/mcp \
  --header "Authorization: Bearer $BUGDUMP_MCP_TOKEN"

Set BUGDUMP_MCP_TOKEN to your token first, or paste the token in its place. Claude Code stores the server in your local settings, so the token never lands in your repository.

Sharing the setup with your team

To give everyone the same configuration, commit a .mcp.json at your project root. It holds no secret — each teammate sets BUGDUMP_MCP_TOKEN to their own token:

JSON
{
  "mcpServers": {
    "bugdump": {
      "type": "http",
      "url": "https://api.bugdump.com/api/mcp",
      "headers": {
        "Authorization": "Bearer ${BUGDUMP_MCP_TOKEN}"
      }
    }
  }
}

In Cursor, put the same server in .cursor/mcp.json and write the variable as ${env:BUGDUMP_MCP_TOKEN}.

Once connected, ask the agent to call get_current_project: it confirms which project the token is bound to and lists the project's kanban columns and members.

3. The tools

Every token gets the read tools:

Tool

Returns

get_current_project

The project, its kanban columns with task counts, its members, its properties with their option ids, and viewer — the member this token acts as

list_tasks

Tasks with their ref, column, priority, assignee, timestamps and a short snippet — filter by text, status, column, labels, assignee, the reporter's browser, OS and device, a creation range, a resolution range, or any property via propertyFilters

get_task

One task: its column, the body as Markdown, its attachments, and its linked errors

list_comments

The team's discussion on a task

get_task_history

A task's column moves, priority and assignee changes, edits, and changes to labels, the due date and custom properties, each naming the property

list_reports_for_task

The reports attached to a task

get_report

One report — console, network, screenshots

get_report_telemetry

A report's complete console, network, and actions, paged

get_task_activity

Project-wide daily counts of opened and resolved tasks

list_errors

The project's captured errors, filtered by state (new, linked or ignored), sorted by lastSeen or events, paged

get_error

One captured error with its stack trace, resolved through source maps when they were uploaded, and its newest stored event with console, network and actions, summarized

A token created with Allow changes also gets the write tools:

Tool

Does

move_task

Moves a task to another column, by column name or id. Moving into a closed column resolves the task

add_comment

Comments on a task in Markdown

set_priority

Sets or clears a task's priority, by the priority's name

assign_task

Assigns a task to a member, or unassigns it

set_task_labels

Replaces a task's labels with exactly the ids you pass

set_task_due_date

Sets or clears a task's due date, as YYYY-MM-DD

set_task_property

Sets or clears one custom property value on a task

Tasks can be addressed by their ref — BD-42, #42, or 42 — or by the internal id that list_tasks returns. The tools form a drill-down chain: find a task, list its reports, read a report, then page through its full telemetry.

Captured JavaScript errors have their own pair: list_errors finds an error and get_error reads it. See Working with captured errors.

A token is bound to one project, so these tools never take a project. An app connected by signing in reaches all your projects instead: it gets the same tools plus list_projects, and each tool takes a project argument. See Working across projects.

Properties, priorities and filters

get_current_project returns every property the project has: the five built-ins (system is status, assignee, priority, labels or due_date) and the custom ones you created (system is null). Select-like properties come with their option ids.

Start there rather than assuming a fixed set of values. Priorities are named by each project — yours may be Blocker and P1 rather than Critical and High — and set_priority takes the name, matched case-insensitively.

propertyFilters on list_tasks works against any property, built-in or custom, so an agent can ask for "open tasks whose priority is Blocker" or "tasks where Customer tier is Enterprise" in a single call:

JSON
{ "status": "open", "propertyFilters": [{ "op": "anyOf", "propertyId": "…", "optionIds": ["…"] }] }

The operators are anyOf, isSet, isTrue, textContains, numberRange and dateRange, and up to ten combine with AND.

The built-in fields each keep their own write tool, so set_task_property is for your own properties only and refuses a built-in.

Changes are recorded under your name

Everything a write tool does shows up in the task's history and comments under your name, with a via MCP label, so the team can tell what the assistant did from what people did.

Task activity showing a column move, a priority change and an assignment, each labelled via MCP

Each change is also written to the audit log with the token that made it. Write tools are limited to 60 changes a minute per tool, per person.

The agent's changes notify your teammates the way yours do: the people involved in the task hear about a move, a comment, a new assignee or a changed property, and read Alex Rivera via MCP. You are not notified about your own agent's work. A comment from add_comment does not notify the people it @mentions. See Task notifications: who hears about a change.

Summary versus full telemetry

get_report returns a compact summary by default — the last 50 console entries and actions, with network bodies stripped. This keeps a routine lookup from flooding the context window.

For a report where the interesting event is older than the last 50 console lines, or where the request body matters, use get_report_telemetry. It pages through console, network with bodies, and actions in chronological chunks until everything has been read.

The distinction matters: a summary showing nothing is not evidence that there is nothing. The response states what was trimmed.

Using it

The productive pattern is short:

Look at task BD-42 in BugDump and fix it.

The agent reads the task, pulls the attached reports, correlates the console error with the failing network request, finds the matching code, and proposes a fix. You never open the dashboard.

With a write token, add the ending:

Fix BD-42, then move it to Done and comment with a short summary of the fix.

Your week, without reading every task

Give me a report of my tasks for this week, split into In progress and Done.

The agent calls get_current_project once — viewer.userId tells it which member you are, so "my tasks" is not a guess at a name — and then one list_tasks per group: assigneeId with the In Progress column, and assigneeId with status: "closed" and resolvedFrom set to Monday. Every task it gets back carries resolvedAt, so it can group by day without asking again.

Note that updatedAt is not an activity stamp: a visitor upvoting a task on your public portal moves it, while assigning a task does not. Ask for a resolution window, not for recently-updated tasks.

More prompts, and why they work, are in MCP recipes: prompts that work.

Revoking a token

Revoke a token on the MCP server page and it stops working on the next request. OWNERs and ADMINs see every member's tokens under All tokens in this project and can revoke any of them. Removing someone from the team revokes all of their tokens.

Personal tokens on the BugDump MCP server page: a read-only Weekly report script token and a read-and-write Cursor on MacBook token, each with Revoke

Troubleshooting

MCP_PERSONAL_TOKEN_REQUIRED (401). The client is sending a key that starts with bd_ — a widget key, or a shared project MCP key from before personal tokens. Those no longer work. Create your own token and update your client's configuration.

MCP_TOKEN_INVALID (401). The token was revoked, mistyped, or its owner is no longer a member of the project.

The write tools are missing. The token was created without Allow changes. Create a new one with the box checked.

A tool reports "not found" for an ID. IDs must come from a previous response. A task ref from another project is reported as not found, because a token only ever sees its own project. Report IDs must come from list_reports_for_task — they cannot be guessed.

The agent says a report has no console output. It probably read the summary. Ask it to use get_report_telemetry for the full history.

See also

Was this article helpful?