Skip to main content
Glama

Report Friction

report_friction
Destructive

Sends the LMCP team an anonymous signal that an LMCP tool failed, returned nothing useful, or could not do what the user asked, so the team can fix it. Offer it to the user after such a failure and send it when they agree. It carries a category, the tool name and facts LMCP gathers by itself: the class of the error, the type and rough size of each argument of the failed call (never its value), the names and outcomes of the last ten tool calls, whether the app is installed, running and permitted, and the LMCP version, macOS version, AI client and a random per-machine id (not linked to a name or account). It never carries the user's request, message or email content, account names or other personal data. It is sent over the network on this call (there is no preview). Anonymous signals are on by default (opt-out): nothing is sent when the user has turned them off in LMCP's settings.

Input Schema

NameRequiredDescriptionDefault
attempt_countNoHow many times this was attempted (optional).
friction_typeYesWhat kind of friction you observed.
error_categoryNoCategory of what went wrong (optional).
tool_attemptedNoName of the LMCP tool involved (e.g. list_emails). Optional.
intent_categoryNoWhat the user was trying to do, chosen from this list (optional). Pick the closest one; do not describe the request.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / friction_type / enum
      Previous value: -[
      -  "repeated_failure",
      -  "user_frustrated",
      -  "task_abandoned",
      -  "workaround_needed",
      -  "cannot_complete",
      -  "other"
      -]New value: +[
      +  "repeated_failure",
      +  "task_abandoned",
      +  "workaround_needed",
      +  "cannot_complete",
      +  "other"
      +]
    • addedInput schema / properties / intent_category
      Added value: +{
      +  "description": "What the user was trying to do, chosen from this list (optional). Pick the closest one; do not describe the request.",
      +  "enum": [
      +    "find_email",
      +    "read_email",
      +    "send_email",
      +    "send_message",
      +    "read_messages",
      +    "schedule_event",
      +    "read_calendar",
      +    "manage_reminder",
      +    "manage_note",
      +    "manage_contact",
      +    "read_file",
      +    "write_file",
      +    "search_files",
      +    "document_work",
      +    "cloud_storage",
      +    "browse_web",
      +    "run_command",
      +    "other"
      +  ],
      +  "type": "string"
      +}
  2. Added

TDQS

A4.1/5.0
Behavior5/5

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

With annotations declaring openWorldHint=true and destructiveHint=true, the description still adds substantial non-obvious behavior: the call sends data over the network immediately with no preview, itemizes exactly what payload is collected (error class, argument types and rough sizes but never values, last ten tool call names/outcomes, app/permission state, versions, random per-machine id), and itemizes what is deliberately excluded (request text, message content, account names). The opt-out default and the resulting no-op are also disclosed.

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

Conciseness4/5

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

Front-loaded with the purpose and the consent rule before the payload inventory, and every clause carries information. The payload enumeration is long and could be tightened (two sentences of privacy detail), but it is dense rather than padded.

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 telemetry-emitting tool with a rich output schema and explicit annotations, the description covers the consent flow, the network side effect, the no-preview caveat, and the exact data boundary — everything an agent needs to call it safely. The one missing piece is disambiguation from report_problem and submit_diagnostics.

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% and three parameters carry enums, so the schema already does the semantic heavy lifting. The description mentions 'a category, the tool name' and stresses that only argument types/sizes are sent, which reinforces the privacy constraint on inputs, but it adds nothing about friction_type vs error_category vs intent_category distinctions or how attempt_count should be counted. 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?

States a specific verb and resource: sends an anonymous failure signal to the LMCP team, and enumerates the triggering conditions (tool failed, returned nothing useful, could not do what the user asked). That is far more than a restatement of the name. It never names its nearest siblings (report_problem, submit_diagnostics, request_feature), so an agent cannot tell from the description alone which reporting channel to pick.

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?

Gives clear usage context and even a consent protocol: offer it to the user after a failure, send only when they agree, and it is a no-op when the user has opted out. No exclusions or sibling comparisons are given, though — it never explains when to use report_problem or submit_diagnostics instead, which matters given several overlapping reporting tools in the sibling list.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources