Skip to main content
Glama
snappysnag

SnappySnag

Official

SnappySnag Model Context Protocol (MCP) Server

MIT License SnappySnag pub.dev

The official Model Context Protocol (MCP) integration for SnappySnag — seamlessly bridge Flutter in-app bug reports, pin annotations, screen diagnostics, and device logs directly into Cursor, Windsurf, Claude Desktop, and other AI coding assistants.


⚡ What is SnappySnag MCP?

When testing Flutter applications, QA testers and end-users pinpoint visual bugs or unexpected behaviors directly on the mobile screen. SnappySnag captures:

  • Exact visual pin coordinates and feedback comments

  • Annotated high-resolution screenshot

  • Active screen class & widget tree hierarchy

  • Real-time device logs (OS, platform, version, device metadata)

  • AI-generated root-cause insights and resolution prompts

With the SnappySnag MCP Server, your AI coding agent (in Cursor, Windsurf, Claude, etc.) can inspect these bug reports directly, jump straight to the relevant Flutter widget code, implement fixes, and mark tickets as resolved without ever switching context away from your editor.


Related MCP server: MCP Server Example

🛠️ Available MCP Tools

Tool

Description

Key Parameters

get_latest_feedback

Fetches the most recent bug report or user feedback with full details (active pins, screenshot, metadata, device info).

status (open | all), include_screenshot (true | false)

list_feedbacks

Searches and lists feedback tickets matching filter criteria (status, severity, keyword). Returns lightweight summaries.

status (open | resolved | ignored | all), severity, source, keyword, limit

get_feedback_detail

Retrieves complete details for a specific feedback ID, including screenshot image, active pins, and discussion notes.

feedback_id (required), include_screenshot

update_feedback_status

Updates ticket status (resolved / ignored / open) and optionally attaches a developer resolution note.

feedback_id (required), status (required), comment


🚀 Quick Start / Configuration

SnappySnag supports two connection options:

  1. Option A (Command / stdio with Demo Mode): Runs locally via standard MCP stdio. If no key is provided, an interactive Demo Mode with mock Flutter bug tickets is activated!

  2. Option B (Remote SSE / Streamable HTTP): Connects directly to SnappySnag's hosted endpoint without any local dependencies.


1. Get your MCP Secret Key (Optional for Demo)

  1. Sign in to your SnappySnag Dashboard.

  2. Open Project Settings (gear icon) -> Integrations or MCP tab.

  3. Click Generate MCP Secret Key and copy your key (snag_mcp_...).


2. Configure Your AI Editor

🔹 Option A: Command / stdio (npx or local build)

Cursor (.cursor/mcp.json)
{
  "mcpServers": {
    "snappysnag": {
      "command": "node",
      "args": ["path/to/snappy-snag-mcp/dist/index.js", "--key=YOUR_MCP_SECRET_KEY"]
    }
  }
}

(Tip: Omit --key or set --key=demo to test with demo data!)

Claude Desktop (claude_desktop_config.json)
{
  "mcpServers": {
    "snappysnag": {
      "command": "node",
      "args": ["path/to/snappy-snag-mcp/dist/index.js", "--key=YOUR_MCP_SECRET_KEY"]
    }
  }
}

🔹 Option B: Streamable HTTP (Remote SSE)

Cursor (.cursor/mcp.json)
{
  "mcpServers": {
    "snappysnag": {
      "url": "https://snappysnag.com/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_SECRET_KEY"
      }
    }
  }
}
Windsurf (~/.codeium/windsurf/mcp_config.json)
{
  "mcpServers": {
    "snappysnag": {
      "serverUrl": "https://snappysnag.com/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_SECRET_KEY"
      }
    }
  }
}

💡 Example Prompt Workflow

Once connected, you can instruct your AI assistant naturally:

"Check the latest open bug report from SnappySnag and fix the issue."

The AI agent will:

  1. Call get_latest_feedback(status: "open") to inspect the reported screen, pin position, and device specs.

  2. Read the referenced Flutter widget file in your repository.

  3. Apply the necessary code fix or layout adjustment.

  4. Call update_feedback_status(feedback_id: "...", status: "resolved", comment: "Fixed overflow in ProductCard layout").


🔒 Security & Privacy

  • Per-Project Scoped Keys: Each MCP Secret Key is strictly scoped to its designated project.

  • Instant Revocation: If compromised, keys can be regenerated or revoked with a single click in the dashboard.

  • Encrypted Transmission: All data and screenshot assets are delivered via HTTPS with short-lived signed URLs.



📄 License

This repository is licensed under the MIT License.

Available Tools

4 tools
get_feedback_detailAInspect

Fetch the full details of a specific feedback item by its ID, including active pin annotations, Flutter widget hierarchy, developer notes, AI fix prompt, and screenshot image.

NameRequiredDescriptionDefault
feedback_idYesThe UUID of the feedback item to retrieve.
include_screenshotNoWhether to include the screenshot image in the response. Defaults to true.

TDQS

A3.6/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden; it does disclose the payload contents (annotations, widget hierarchy, notes, AI prompt, screenshot), which is meaningful behavioral context. It stops short of stating that this is a read-only, side-effect-free operation, how errors are surfaced for unknown IDs, or that responses can be large when a screenshot is included.

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 front-loaded sentence with the action first and the returned fields after; every listed item is informative rather than padding. No redundant restatement of the tool name.

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 no output schema and no annotations, the description adequately compensates by naming the returned data, so an agent knows what it will get. Missing only error/invalid-ID behavior and an explicit read-only assurance for a two-parameter retrieval 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 both feedback_id (UUID) and include_screenshot (default true, included in response) are already fully documented. The description only reinforces that lookup is by ID and that the screenshot is part of the payload, adding little beyond the schema.

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

Purpose4/5

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

Specific verb ("Fetch") plus resource ("full details of a specific feedback item") and an enumeration of what comes back (pin annotations, widget hierarchy, notes, AI fix prompt, screenshot). This clearly separates it from list_feedbacks and get_latest_feedback by signaling an ID-addressed single-item lookup, though no sibling is named explicitly.

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?

Usage is only implied: the phrase "by its ID" suggests it is called after obtaining an ID from list_feedbacks or get_latest_feedback. There is no explicit statement of when to prefer this over get_latest_feedback, nor any note about what happens with an invalid or stale ID.

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

get_latest_feedbackAInspect

Fetch the most recent in-app bug report or user feedback from SnappySnag, including screenshot, visual pin annotations, screen name, device metadata, and AI fix prompts.

NameRequiredDescriptionDefault
statusNoFilter by status before picking the latest item. Defaults to 'open'.
include_screenshotNoWhether to include the screenshot image in the response. Defaults to true.

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are present, so the description carries the full disclosure burden. 'Fetch' signals a read operation and the enumeration of returned artifacts (screenshot, pin annotations, metadata, AI fix prompts) is useful, but it does not state permissions, rate limits, empty-result behavior, or explicitly confirm read-only semantics.

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?

It is a single front-loaded sentence with no filler. The field list is dense but directly supports the return-content expectation.

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 no output schema, the description helpfully enumerates the key returned fields, which compensates for the missing output schema. It still omits response structure and edge cases, but for a simple two-parameter retrieval tool it is largely complete.

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 the two parameters are already documented in the input schema. The description does not add syntax or default details for status/include_screenshot beyond noting that screenshot may be included; baseline 3 is appropriate.

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

Purpose4/5

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

The description uses the specific verb 'Fetch' and resource 'most recent in-app bug report or user feedback,' and the inclusion list further clarifies scope. It does not explicitly name sibling tools like list_feedbacks or get_feedback_detail, so sibling differentiation is implied by 'most recent' rather than stated.

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?

There is no explicit when/when-not guidance or named alternative. The word 'latest' implies the use case (retrieve the newest item rather than a list or a specific detail), but the description leaves comparison with list_feedbacks and get_feedback_detail to inference.

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

list_feedbacksAInspect

List and search feedback / bug reports in the SnappySnag project. Returns lightweight summaries (ID, title, status, severity, active pin count, screen category, created_at).

NameRequiredDescriptionDefault
limitNoMaximum number of items to return (1 to 30). Defaults to 10.
sourceNoFilter by submission mode ('user' for live end-users, 'dev' for internal QA). Defaults to 'all'.
statusNoFilter by feedback status. Defaults to 'open'.
keywordNoOptional search keyword to match against pin comments or user memo.
severityNoFilter by severity level. Defaults to 'all'.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden; it does assert this is a project-scoped read returning lightweight summaries with named fields, which is genuinely useful. It omits ordering/sort behavior, pagination or truncation semantics beyond the limit param, and any mention of what 'search' matches at a summary level.

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 sentences, front-loaded with the verb and scope, followed immediately by the return shape. Zero filler and no repetition of schema content.

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 five-parameter list tool with no output schema, listing the summary fields is the key compensating detail and it is present. Remaining gaps are ordering behavior and whether results are paginated beyond the limit cap, which leave it just short of fully complete.

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 all five parameters carry enum values and defaults, so the schema already does the heavy lifting. The description adds no filtering syntax or interaction details (e.g., how keyword combines with status/severity filters), so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb pair ('List and search') and resource ('feedback / bug reports') scoped to the SnappySnag project, and enumerates the returned fields, which clearly separates it from detail-fetching siblings. It never explicitly names those siblings as alternatives, but the singular/plural read distinction is obvious from the phrasing.

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?

Usage is only implied: 'list and search' plus 'lightweight summaries' suggests a browse/scan step before calling get_feedback_detail. There is no explicit statement of when to prefer this over get_latest_feedback or get_feedback_detail, and no exclusions or prerequisites.

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

update_feedback_statusAInspect

Update the status of a feedback ticket (e.g., mark as 'resolved' after fixing the bug in your codebase, or 'ignored'), and optionally attach an internal developer resolution note.

NameRequiredDescriptionDefault
statusYesThe new status to set ('resolved', 'ignored', or 'open').
commentNoOptional summary of what was fixed or investigated (e.g., 'Fixed bottom overflow in CartCheckoutScreen').
feedback_idYesThe UUID of the feedback item to update.

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It identifies the operation as a status update and mentions an internal developer resolution note, but it omits permissions/auth needs, allowed status-transition rules, side effects, reversibility, and error/response behavior 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.

Conciseness5/5

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

The description is a single front-loaded sentence with zero wasted text. The examples and optional-note detail are embedded efficiently.

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

Completeness3/5

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

For a simple three-parameter update tool with full schema coverage, the description makes the operation and optional note clear enough to call correctly. However, because annotations and an output schema are absent, the lack of permissions, transition rules, and response/error context leaves meaningful behavioral gaps.

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 schema already documents feedback_id, status enum values, and the optional comment parameter. The description adds some useful context by framing the comment as an optional internal developer resolution note, but it mostly repeats what the schema already provides.

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 uses a specific verb and resource: update the status of a feedback ticket. It is immediately distinguishable from the retrieval-oriented siblings (get_latest_feedback, list_feedbacks, get_feedback_detail) because it clearly performs a mutation.

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?

It gives clear usage context with examples such as marking a ticket resolved after fixing a bug or ignored. It does not include explicit exclusions or prerequisite conditions, but the when-to-use guidance is concrete.

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.

  1. 4 tool updatesv1.0.0
    • First observedget_feedback_detail
    • First observedget_latest_feedback
    • First observedlist_feedbacks
    • First observedupdate_feedback_status

TDQS

A3.8/5.0

Scored across 4 tools

Disambiguation4/5

Each tool targets a distinct retrieval/update mode: latest item, searchable list, ID-based detail, and status update. There is slight overlap because get_latest_feedback returns rich detail similar to get_feedback_detail, but the lack of an ID requirement makes the latest tool's purpose clear.

Naming Consistency4/5

All names follow a readable verb_noun snake_case pattern (get/list/update + feedback noun). Minor pluralization inconsistency appears between 'feedbacks' and 'feedback', but the pattern remains predictable.

Tool Count5/5

Four tools is well-scoped for a focused feedback triage server. Each tool covers a meaningful part of the read/update workflow without redundant operations.

Completeness4/5

The surface covers listing/searching, retrieving latest and detailed feedback, and updating status with notes, which supports the core bug-report triage lifecycle. Minor gaps like bulk status updates, assignment, or editing severity/title are not present but can be worked around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers