feedbug-mcp
@feedbug/mcp
Informes visuales de bugs que tu agente de IA realmente puede corregir.
Feedbug permite a tus testers reportar bugs haciendo clic en ellos. Cada informe captura una captura de pantalla, los registros de consola, las solicitudes de red fallidas, una reproducción de sesión y el contexto HTML/DOM del elemento en el que hicieron clic, y luego abre un issue en tu proyecto de Linear o en tu repositorio de GitHub automáticamente. Cuando se conecta una fuente de código, el issue también incluye un enlace al archivo fuente del que probablemente proviene el bug.
Este servidor MCP introduce esos datos directamente en tu agente de codificación de IA (Claude Code, Cursor, Windsurf, VS Code). El agente lee el bug, obtiene el selector CSS exacto y la ruta del componente, lo rastrea hasta el archivo fuente, propone el parche y marca el bug como resuelto.
Artículo completo sobre el producto: feedbug.app/mcp-bug-tracking.
Señala el bug. Entrega la corrección.
Inicio rápido
npx @feedbug/mcp initEl instalador te pide tu cliente y tu clave de proyecto, y luego escribe la configuración por ti. No interactivo:
npx @feedbug/mcp init --client claude pk_your_project_keyClientes compatibles: claude (Claude Code), cursor, windsurf. Obtén tu clave de proyecto (pk_...) desde la página de tu proyecto en feedbug.app.
Reinicia tu cliente y las herramientas estarán activas.
Related MCP server: talkthrough-mcp
Configuración manual
Añade esto a la configuración MCP de tu cliente (.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"
}
}
}
}Ejecutar con 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"
}
}
}
}Variables de entorno
Variable | Requerido | Por defecto | Descripción |
| Sí | ninguno | Tu clave de proyecto ( |
| No |
| Sobrescribe la URL base de la API (self-hosting / staging). |
Herramientas
Cada herramienta acepta o bien el UUID del feedback o bien el identificador del tracker (p. ej. PRE-13 en Linear, owner/repo#42 en GitHub).
Herramienta | Qué hace |
| Lista los bugs reportados (filtra por estado o URL de página). |
| Detalles completos: captura de pantalla, viewport, agente de usuario, contexto HTML. |
| Contexto DOM del elemento en el que se hizo clic: ruta del selector CSS, ruta del componente del framework (Vue/React/Angular/Svelte), atributos, ancestros, hermanos. Esto es lo que permite al agente encontrar el código fuente. |
| Diagnósticos del navegador: URL de la página, viewport, agente de usuario, informador. |
| URL de la reproducción de la sesión (últimos 30 segundos antes del informe). |
| Añade un comentario al issue de Linear del bug. |
| Marca un bug como resuelto una vez que se ha corregido. |
Cómo funciona
Cuando un tester hace clic en un bug, el widget de Feedbug captura una instantánea del DOM alrededor del elemento en el que se hizo clic: la ruta del selector CSS, el nombre del componente del framework cuando es detectable, los atributos y el texto del elemento, además de sus ancestros y hermanos. Esa instantánea viaja con el ticket de Linear.
A través de este servidor MCP, tu agente lee ese contexto y relaciona el bug con el archivo y la línea exactos, en lugar de adivinar a partir de una descripción vaga como "está roto en el panel".
Enlaces
Producto: feedbug.app
API:
https://api.feedbug.app
Licencia
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.
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
Scored across 7 tools
Each tool has a clearly named purpose, and the list/get distinction plus the specialized context getters are explicit. The only real overlap is that feedbug_get_bug returns replay URLs, diagnostics, and DOM context that also have dedicated getters, but the descriptions directly call out when to use the subsets instead.
All tools share the consistent feedbug_ prefix and follow a clear verb_noun pattern: list_bugs, get_bug, get_html_context, get_diagnostics, get_replay, add_comment, resolve_bug. The naming is predictable and makes the toolset easy to navigate.
Seven tools is well-scoped for a bug-reporting server. Each tool covers a distinct retrieval path or action without redundancy, and there is no padding or unnecessary surface area.
The server covers the core bug-report workflow: list, inspect in full, drill into DOM/browser/replay, comment, and resolve. Minor gaps exist—there is no reopen, update, or comment listing—but the descriptions acknowledge these limitations and the tracker remains the source of truth for broader lifecycle management.
Maintenance
Related MCP Connectors
- BugTapeOAuthai.bugtape
Production bugs with replay, network, console and stack, ranked for your coding agent to fix.
Give AI coding agents access to your Vynix visual feedback, bug reports, and AI diagnosis.
The bug mediator for AI-built apps: plain-English diagnosis + a ready fix, in your editor.
Read, filter and triage Ybug website feedback and bug reports from your AI assistant
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,231Apache 2.0
- AlicenseAqualityAmaintenanceFeedback ingestion for AI agents. Record your screen and talk; your agent does the rest — files the bugs, writes the spec, builds the backlog.9266 PyPI32MIT
- AlicenseNot gradedqualityAmaintenanceEnables coding agents to pull structured UI feedback captured in the browser — including element selectors, bounding boxes, computed styles, screenshots, and annotations — and to mark issues as fixed.MIT
- FlicenseNot gradedqualityAmaintenanceGives coding agents full browser context from recorded user flows, including actions, network, console, storage, DOM events, and screen recordings. Enables in-depth debugging, bug reporting, regression testing, and Playwright test generation without reproducing issues.-