feedbug-mcp
This MCP server connects an AI coding agent to Feedbug visual bug reports and their linked Linear/GitHub issues, so the agent can inspect, diagnose, and close out bugs.
feedbug_list_bugs– List bug reports, optionally filtered by status or page URL.feedbug_get_bug– Fetch full bug details: screenshot, page URL, tracker link, viewport, user agent, click coordinates, and DOM context.feedbug_get_html_context– Read the clicked element's CSS selector path, framework component path, attributes, ancestors, and siblings to locate the source.feedbug_get_diagnostics– View the browser environment: page URL, viewport, user agent, and reporter.feedbug_get_replay– Get a 30-second session replay URL of the bug.feedbug_add_comment– Add a comment to the bug's Linear issue (GitHub issues not supported).feedbug_resolve_bug– Mark a bug as resolved in Feedbug once its fix is verified.
@feedbug/mcp
Visual bug reports your AI agent can actually fix.
Feedbug lets your testers report bugs by clicking on them. Each report captures a screenshot, the console logs, the failed network requests, a session replay, and the HTML/DOM context of the element they clicked, then opens an issue in your Linear project or your GitHub repository automatically. When a code source is connected, the issue also carries a link to the source file the bug most likely came from.
This MCP server plugs that data straight into your AI coding agent (Claude Code, Cursor, Windsurf, VS Code). The agent reads the bug, gets the exact CSS selector and component path, traces it to the source file, proposes the patch, and marks the bug resolved.
Full write-up of the product side: feedbug.app/mcp-bug-tracking.
Point at the bug. Ship the fix.
Quick start
npx @feedbug/mcp initThe installer asks for your client and your project key, then writes the config for you. Non-interactive:
npx @feedbug/mcp init --client claude pk_your_project_keySupported clients: claude (Claude Code), cursor, windsurf. Grab your project key (pk_...) from your project page on feedbug.app.
Restart your client and the tools are live.
Related MCP server: Skippr Extension MCP Server
Manual configuration
Add this to your client's MCP config (.mcp.json, .cursor/mcp.json, .windsurf/mcp.json, etc.):
{
"mcpServers": {
"feedbug": {
"command": "npx",
"args": ["-y", "@feedbug/mcp"],
"env": {
"FEEDBUG_API_URL": "https://api.feedbug.app",
"FEEDBUG_PROJECT_KEY": "pk_your_project_key"
}
}
}
}Run with Docker
docker build -t feedbug-mcp .{
"mcpServers": {
"feedbug": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "FEEDBUG_PROJECT_KEY", "feedbug-mcp"],
"env": {
"FEEDBUG_PROJECT_KEY": "pk_your_project_key"
}
}
}
}Environment variables
Variable | Required | Default | Description |
| Yes | none | Your project key ( |
| No |
| Override the API base URL (self-hosting / staging). |
Tools
Every tool accepts either the feedback UUID or the tracker identifier (e.g. PRE-13 on Linear, owner/repo#42 on GitHub).
Tool | What it does |
| List reported bugs (filter by status or page URL). |
| Full details: screenshot, viewport, user agent, HTML context. |
| DOM context of the clicked element: CSS selector path, framework component path (Vue/React/Angular/Svelte), attributes, ancestors, siblings. This is what lets the agent find the source. |
| Browser diagnostics: page URL, viewport, user agent, reporter. |
| Session replay URL (last 30 seconds before the report). |
| Add a comment to the bug's Linear issue. |
| Mark a bug resolved once it's fixed. |
How it works
When a tester clicks a bug, the Feedbug widget snapshots the DOM around the clicked element: the CSS selector path, the framework component name when detectable, the element's attributes and text, plus its ancestors and siblings. That snapshot travels with the Linear ticket.
Through this MCP server, your agent reads that context and maps the bug to the exact file and line, instead of guessing from a vague "it's broken on the dashboard" description.
Links
Product: feedbug.app
API:
https://api.feedbug.app
License
MIT
Available Tools
7 toolsfeedbug_add_commentComment on the tracker issue of a bugA
Post a comment on the tracker issue linked to a bug.
Returns: a confirmation message once the tracker accepted the comment. Use when: you want to document a fix, ask the reporter for a reproduction, or leave an update the whole team can read on the issue. Do not use when: the bug is tracked in GitHub — only Linear-routed bugs accept comments today and the call errors otherwise. Never use it to talk to the user running you; answer them directly instead. Behavior: writes to Linear and is NOT idempotent — every call adds another comment, and this server can neither edit nor delete one. The comment is public to everyone with access to the issue and is authored by the Linear account that installed Feedbug, so send a single finished comment rather than successive drafts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Bug UUID as returned by feedbug_list_bugs, or the tracker identifier such as PRE-13, matched case-insensitively. Ids belonging to another project are rejected. | |
| body | Yes | The comment text, posted verbatim. Linear renders Markdown. Must not be empty or whitespace only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond the minimal annotations: it is not idempotent, cannot edit or delete comments, comments are public and authored by the Linear account, and it advises sending a single finished comment. The annotations (readOnlyHint=false, idempotentHint=false) are consistent but lack detail; the description fills the gap completely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the core action, and uses clear sections (action, return, use cases, behavior). Every sentence is necessary and informative, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 2 parameters, no output schema, and no nested objects, the description covers all relevant aspects: return value ('confirmation message'), behavior, and usage constraints. It is complete for effective agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds value by clarifying constraints: 'Ids belonging to another project are rejected' and 'Must not be empty or whitespace only.' It also mentions that the body supports Markdown, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Post a comment on the tracker issue linked to a bug.' This clearly distinguishes the tool from its siblings (e.g., feedbug_list_bugs, feedbug_get_bug), which read or list bugs rather than adding comments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('document a fix, ask the reporter for a reproduction, or leave an update') and when not to use it ('bug is tracked in GitHub' and 'never use it to talk to the user running you'). It also provides an alternative context (GitHub vs Linear).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feedbug_get_bugRead a bug reportARead-onlyIdempotent
Read one bug report in full.
Returns: a JSON object with the title, the Feedbug and tracker statuses, the tracker issue URL, the page URL, the screenshot URL, the session replay URL, the viewport, the user agent, the click coordinates as percentages, and the captured DOM context. Use when: you picked a bug out of feedbug_list_bugs and are about to reproduce or fix it. Do not use when: you only need the DOM tree (feedbug_get_html_context), only the browser environment (feedbug_get_diagnostics) or only the replay link (feedbug_get_replay). Behavior: read-only and idempotent, scoped by FEEDBUG_PROJECT_KEY to a single project. An unknown id, or one belonging to another project, returns a "Bug not found" error.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Bug UUID as returned by feedbug_list_bugs, or the tracker identifier such as PRE-13, matched case-insensitively. Ids belonging to another project are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds behavioral detail: scoped by FEEDBUG_PROJECT_KEY to a single project, and error behavior ('Bug not found' for unknown/project-mismatched IDs). This provides meaningful context beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and return value. It uses clear sections (Returns, Use when, Do not use when, Behavior) that are easy to scan. Every sentence adds distinct value without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter, full schema coverage, explicit annotations, and the existence of sibling tools for specific slices of data, the description fully covers the tool's purpose, scope, error handling, and usage guidance. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already provides a rich description of the 'id' parameter (accepts UUID or tracker identifier, case-insensitively, rejected if belonging to another project). The tool has only one parameter, so there is limited room for the description to add more. The description indirectly reinforces the parameter semantics by noting it returns data for a single bug.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool name and title ('feedbug_get_bug', 'Read a bug report') clearly indicate the action. The description specifies it reads a bug report in full and lists the fields returned, distinguishing it from sibling tools that return partial context (e.g., feedbug_get_html_context, feedbug_get_diagnostics).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use ('you picked a bug out of feedbug_list_bugs and are about to reproduce or fix it'), and provides a clear 'Do not use when' list with specific alternatives (feedbug_get_html_context, feedbug_get_diagnostics, feedbug_get_replay). This pairs perfectly with the sibling tool context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feedbug_get_diagnosticsRead the browser environment of a bugARead-onlyIdempotent
Read the browser environment a bug was reported from.
Returns: a JSON object with the page URL, the viewport size, the user agent and the name of the reporter. Use when: you need to reproduce a bug under the same browser, screen size or account, or to judge whether a report is device-specific. Do not use when: you also want the screenshot, the DOM or the tracker link — this is a strict subset of feedbug_get_bug, so one call there replaces this one. Behavior: read-only and idempotent, scoped by FEEDBUG_PROJECT_KEY to a single project. Fields the widget could not capture come back null; an unknown id returns a "Bug not found" error.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Bug UUID as returned by feedbug_list_bugs, or the tracker identifier such as PRE-13, matched case-insensitively. Ids belonging to another project are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: read-only & idempotent (echoed and expanded), scoped by FEEDBUG_PROJECT_KEY, null fields for missing data, and error handling for unknown IDs. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with main action. Uses clear section headers (Returns, Use when, Do not use when, Behavior). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers input, output (explicit JSON fields), error cases, scope (single project), and relationship to sibling tools. No output schema, but description fully compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and describes the 'id' parameter in detail. Description adds no additional parameter information beyond schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'read' and resource 'browser environment'. Specifies returned fields (page URL, viewport size, user agent, reporter). Distinguishes from sibling feedbug_get_bug which includes more data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides 'Use when' and 'Do not use when' sections. Tells when to reproduce bugs and when to prefer feedbug_get_bug instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feedbug_get_html_contextRead the DOM context of a bugARead-onlyIdempotent
Read the HTML and DOM context captured at the instant the tester clicked on the bug.
Returns: a JSON object with the CSS selector path, the framework component path (Vue, React, Angular, Svelte), the clicked element itself (tag, id, classes, text, attributes), its ancestors and its siblings. Use when: you need to map a report onto a source file — this is the shortest path from a bug to the component that renders it. Do not use when: the bug is about a behaviour rather than one element; feedbug_get_replay shows what the tester actually did. Behavior: read-only and idempotent, scoped by FEEDBUG_PROJECT_KEY to a single project. A report captured without DOM context errors with "No HTML context captured for this bug" rather than returning an empty tree. Component paths survive a Vue build but are often absent from minified React, in which case fall back to the selector path.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Bug UUID as returned by feedbug_list_bugs, or the tracker identifier such as PRE-13, matched case-insensitively. Ids belonging to another project are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description goes beyond these by adding scoping (by FEEDBUG_PROJECT_KEY), error behavior (returns error message instead of empty tree when no DOM context), and platform-specific fallback behavior (component paths survive Vue builds but are absent in minified React, fall back to selector path). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is approximately 100 words, well-structured with a clear opening sentence, return value explanation, use/don't use sections, and behavioral notes. Every sentence adds distinct value, and there is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter, no output schema, and no nested objects, the description covers everything needed: what it returns (JSON object with specific fields), when to use it, when not to, error handling, and platform-specific behavior. It is fully self-contained and sufficient for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The tool description does not add new information about the 'id' parameter beyond what the schema already provides (the schema already describes the parameter as a bug UUID or tracker identifier). The description mentions scoping by project key, which is related but does not directly enhance parameter semantics. Hence minimal added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a precise verb and resource: 'Read the HTML and DOM context captured at the instant the tester clicked on the bug.' It lists the returned components (CSS selector path, component path, clicked element, ancestors, siblings), which clearly distinguishes it from siblings like feedbug_get_bug (general bug info) or feedbug_get_replay (behavioral replay).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly includes 'Use when:' and 'Do not use when:' sections, stating that it is the shortest path from a bug to its source component, and that for behavioral bugs the alternative feedbug_get_replay should be used instead. This provides clear and actionable guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feedbug_get_replayGet the session replay link of a bugARead-onlyIdempotent
Read the session replay URL of a bug, an rrweb recording of the last 30 seconds of activity before the report was sent.
Returns: a one-line message holding the URL to open in a browser. The recording itself is never inlined, so it costs no context. Use when: the written report is not enough to reproduce the bug and you want to hand the user a link to watch it happen. Do not use when: you already called feedbug_get_bug, which returns the same URL alongside the rest of the record. Behavior: read-only and idempotent, scoped by FEEDBUG_PROJECT_KEY to a single project. A bug with no recording returns "No session replay available" as an ordinary result rather than an error, so the call is always safe to attempt.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Bug UUID as returned by feedbug_list_bugs, or the tracker identifier such as PRE-13, matched case-insensitively. Ids belonging to another project are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations that already declare readOnlyHint, idempotentHint, and destructiveHint, the description adds valuable behavioral context: it explains the scoping by FEEDBUG_PROJECT_KEY, that missing recordings return a non-error message ('No session replay available'), and that the call is always safe to attempt. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise at four short paragraphs, each with a distinct purpose: the first paragraph states the action and scope, the second describes the output and cost, the third provides usage guidance, and the fourth covers behavior. Every sentence earns its place, and the structure is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter, no output schema, and annotations already cover safety, the description is fully complete: it covers the idiosyncratic return format (one-line message), special case (no recording), scoping to project key, and how to call feedbug_get_bug to avoid redundancy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description does not repeat parameter details, but it complements the schema by explaining the id can be a UUID or tracker identifier like 'PRE-13', matched case-insensitively, and clarifies that ids from other projects are rejected — adding meaningful value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and the specific resource 'session replay URL of a bug', and distinguishes it from siblings by noting that feedbug_get_bug returns the same URL alongside other data, while feedbug_get_replay focuses on just the recording link.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use when' the written report is insufficient and you want to provide a link, and 'Do not use when' you already called feedbug_get_bug (which returns the same URL), offering clear guidance on when to choose this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feedbug_list_bugsList bug reportsARead-onlyIdempotent
List the bug reports captured by the Feedbug widget, newest first.
Returns: a JSON array carrying, per bug, its UUID, tracker identifier (e.g. PRE-13), title, status, page URL, framework component path, session replay URL and creation date. Use when: you are looking for a bug to work on, checking what is still open, or reviewing every report filed on one page. Do not use when: you already hold a bug id — feedbug_get_bug returns that one report with its screenshot and DOM context. Behavior: read-only and idempotent. The server authenticates with the FEEDBUG_PROJECT_KEY environment variable and can only ever see that single project. There is no pagination: the API truncates to limit, so narrow the set with status or page_url instead of paging. No match returns an empty array, not an error.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many bugs to return, newest first. Integer between 1 and 50, defaults to 20; the API clamps anything higher to 50. | |
| status | No | Feedbug status to keep. Omit to get every status. 'in-progress' only ever occurs on bugs tracked in Linear, since a GitHub issue is either open or closed. | |
| page_url | No | Substring matched case-insensitively against the whole page URL of the report — '/checkout' to inspect one route, 'staging.' to inspect one environment. Omit to search every page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: read-only/idempotent restated, auth scope (FEEDBUG_PROJECT_KEY, single project), truncation/no-pagination behavior, and empty-array return. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: purpose, return format, use-when, do-not-use, behavior, edge case. Every sentence adds value; appropriately sized for a tool with rich behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides return shape (JSON array with fields), auth scope, truncation, empty-array behavior, and usage boundaries. No output schema, so the description carries the return-format burden – fully covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already describes all 3 params (100% coverage). Description adds the tip to narrow via status/page_url instead of paging and clarifies truncation, which complements schema. Slight redundancy with schema's clamping note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States 'List the bug reports captured by the Feedbug widget, newest first' – specific verb+resource+order. Clearly differentiates from feedbug_get_bug by describing when not to use it (when holding a bug id).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides 'Use when' and 'Do not use when' sections, naming the alternative feedbug_get_bug. Also advises narrowing with status/page_url instead of paging, giving clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feedbug_resolve_bugMark a bug as resolvedAIdempotent
Mark a bug as resolved in Feedbug, once its fix is verified.
Returns: a confirmation message. Use when: you have shipped and checked the fix for that exact report. Do not use when: the fix is only proposed or not yet verified — this server exposes no way to reopen a bug. Behavior: writes to Feedbug and is idempotent, since resolving an already resolved bug leaves it resolved. It flips the status of the report and hides its marker from the widget, but does NOT close the linked Linear or GitHub issue: the tracker stays the source of truth, and moving that issue back to an open state syncs the report open again through the webhook.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Bug UUID as returned by feedbug_list_bugs, or the tracker identifier such as PRE-13, matched case-insensitively. Ids belonging to another project are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond the annotations: idempotency (already hinted, but explained with the 'already resolved' consequence), the fact that linked Linear/GitHub issues are NOT closed, and the webhook sync that can reopen the report. This adds substantial context about side effects and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into purpose, returns, usage, and behavior sections. Each sentence contributes essential information without redundancy, balancing clarity with detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the return type, side effects, idempotency, integration with external trackers, and the critical 'no reopen' caveat. It is thorough enough for correct invocation and expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameter documentation, describing the id as a UUID or tracker identifier with case-insensitivity and project rejection. The description adds no extra parameter details, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Mark a bug as resolved in Feedbug') with a specific condition ('once its fix is verified'). It distinguishes this from sibling tools by focusing on status resolution, which the read-only siblings do not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'Use when' and 'Do not use when' sections provide clear decision guidance, including the critical warning that the server exposes no way to reopen a bug. This prevents misuse and sets it apart from feedbug_add_comment.
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.
7 tool updates
v1.1.2- Changed
feedbug_add_comment2 fields changed- changed
Input schema / properties / body / descriptionPrevious value: -"Comment text"New value: +"The comment text, posted verbatim. Linear renders Markdown. Must not be empty or whitespace only." - changed
Input schema / properties / id / descriptionPrevious value: -"Feedback UUID or Linear identifier (e.g. PRE-13)"New value: +"Bug UUID as returned by feedbug_list_bugs, or the tracker identifier such as PRE-13, matched case-insensitively. Ids belonging to another project are rejected."
- Changed
feedbug_get_bug1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Feedback UUID or Linear identifier (e.g. PRE-13)"New value: +"Bug UUID as returned by feedbug_list_bugs, or the tracker identifier such as PRE-13, matched case-insensitively. Ids belonging to another project are rejected."
- Changed
feedbug_get_diagnostics1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Feedback UUID or Linear identifier (e.g. PRE-13)"New value: +"Bug UUID as returned by feedbug_list_bugs, or the tracker identifier such as PRE-13, matched case-insensitively. Ids belonging to another project are rejected."
- Changed
feedbug_get_html_context1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Feedback UUID or Linear identifier (e.g. PRE-13)"New value: +"Bug UUID as returned by feedbug_list_bugs, or the tracker identifier such as PRE-13, matched case-insensitively. Ids belonging to another project are rejected."
- Changed
feedbug_get_replay1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Feedback UUID or Linear identifier (e.g. PRE-13)"New value: +"Bug UUID as returned by feedbug_list_bugs, or the tracker identifier such as PRE-13, matched case-insensitively. Ids belonging to another project are rejected."
- Changed
feedbug_list_bugs3 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default: 20)"New value: +"How many bugs to return, newest first. Integer between 1 and 50, defaults to 20; the API clamps anything higher to 50." - changed
Input schema / properties / page_url / descriptionPrevious value: -"Filter by page URL (substring match)"New value: +"Substring matched case-insensitively against the whole page URL of the report — '/checkout' to inspect one route, 'staging.' to inspect one environment. Omit to search every page." - changed
Input schema / properties / status / descriptionPrevious value: -"Filter by status (default: all)"New value: +"Feedbug status to keep. Omit to get every status. 'in-progress' only ever occurs on bugs tracked in Linear, since a GitHub issue is either open or closed."
- Changed
feedbug_resolve_bug1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Feedback UUID or Linear identifier (e.g. PRE-13)"New value: +"Bug UUID as returned by feedbug_list_bugs, or the tracker identifier such as PRE-13, matched case-insensitively. Ids belonging to another project are rejected."
7 tool updates
v0.1.0- First observed
feedbug_add_comment - First observed
feedbug_get_bug - First observed
feedbug_get_diagnostics - First observed
feedbug_get_html_context - First observed
feedbug_get_replay - First observed
feedbug_list_bugs - First observed
feedbug_resolve_bug
TDQS
Each tool has a clearly distinct purpose: listing bugs, getting full details, retrieving specific context (HTML, diagnostics, replay), adding comments, and resolving. The 'Do not use when' notes further prevent ambiguity, making it easy for an agent to select the right tool.
All tools follow a consistent 'feedbug_verb_noun' pattern (e.g., feedbug_list_bugs, feedbug_get_bug, feedbug_resolve_bug). The prefix is uniform, and the verb-noun structure is predictable and clear.
Seven tools is an ideal size for a bug tracking server. Each tool covers a distinct operation without being overwhelming: listing, reading full details, accessing specific sub-data (HTML, diagnostics, replay), commenting, and resolving. No tool is superfluous.
The tool set covers the core bug lifecycle: discover, inspect, comment, and resolve. Minor gaps exist, such as the inability to reopen a bug or filter by multiple criteria, and the comment tool only works with Linear. However, these are intentional limitations of the Feedbug integration, and the surface is largely complete for its purpose.
Maintenance
Related MCP Connectors
Give AI coding agents access to your Vynix visual feedback, bug reports, and AI diagnosis.
Comment on AI-generated webpages; feedback flows back to your coding agent. Free, MIT, local-first.
Direct access to Cypress tests results and accessibility reports in your AI workflow.
Capture feature requests and bug reports from chat into a searchable, AI-categorized backlog.
Related MCP Servers
- AlicenseAqualityFmaintenanceUnleashes LLM-powered agents to autonomously execute and debug web apps directly in your code editor, with features like webapp navigation, network traffic capture, and console error collection.21,240Apache 2.0
- AlicenseAqualityCmaintenanceEnables AI coding agents to discover, understand, and fix product issues (UX inconsistencies, accessibility violations, quality problems) identified by Skippr's browser extension through natural language commands.1118MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to capture screen and voice recordings, extract timestamped frames, and receive structured Markdown reports with context for bug fixing and UI feedback.1218MIT
- AlicenseAqualityBmaintenanceEnables blind AI coding models to debug visual bugs by capturing screenshots, analyzing them with a vision-capable model, and returning a written report.15MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/joffreyBerrier/feedbug-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server