Skip to main content
Glama

submit_feedback

Record agent-authored feedback about a Charming app. Use this to log observed bugs, suggested enhancements, caught crash reports, or qualitative notes. Source is server-enforced to "agent" — agents cannot impersonate user or auto-crash sources. The caller must have app:run access.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
textNoFree-form feedback body (up to 16384 chars). Optional, but at least one of text / structured_data / crash_data should usually be set so the row is actionable.
app_idYesThe app ID (UUID) the feedback is attached to.
categoryYesFeedback category. One of: bug, crash, enhancement, praise, other. Pass "crash" only when crash_data carries the captured error.
crash_dataNoRequired when category=crash. Optional otherwise.
structured_dataNoOptional JSON object with caller-supplied structured context (e.g. route, repro inputs).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesUUID of the newly-inserted feedback row.
okYesIndicates success. Errors arrive as content with isError:true.
app_idYesUUID of the app the feedback was attached to.
advisoriesNoStructured non-fatal advisories, including authoring issues and unread staff feedback responses. Each advisory.summary is also appended to the text content for the LLM path.
created_atYesISO-8601 timestamp when the row was inserted.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / advisories
      Added value: +{
      +  "description": "Structured non-fatal advisories, including authoring issues and unread staff feedback responses. Each advisory.summary is also appended to the text content for the LLM path.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": {},
      +        "description": "Kind-specific structured payload. Shape varies per advisory kind.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "doc_url": {
      +        "description": "Optional docs pointer for this advisory kind.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Stable advisory identifier (e.g. \"legacy-bridge\").",
      +        "type": "string"
      +      },
      +      "severity": {
      +        "description": "Severity; omitted advisories are treated as 'info'.",
      +        "enum": [
      +          "info",
      +          "warn"
      +        ],
      +        "type": "string"
      +      },
      +      "summary": {
      +        "description": "Agent-facing summary. Self-sufficient; no extra context required.",
      +        "type": "string"
      +      },
      +      "userSummary": {
      +        "description": "End-user-facing summary. Set when the advisory should render in-app.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "summary"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only indicate non-read-only and non-destructive behavior. The description adds meaningful behavioral constraints beyond the annotations: source is server-enforced to 'agent', impersonation of user or auto-crash sources is not possible, and app:run permission is required.

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?

The description is compact and front-loaded with the main purpose, followed by behavioral constraints. The first two sentences are slightly redundant ('Record' vs. 'Use this to log...'), but no unnecessary detail is included.

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?

Given the schema covers parameter details and annotations cover read/write traits, the description adds the crucial server-enforcement and permission context. It doesn't describe response semantics, but the output schema likely covers that; overall it is sufficiently complete for an agent.

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?

The input schema already provides full descriptions for all parameters, including category enum values and crash_data requirements. The description does not add additional parameter-level meaning, so the baseline score of 3 is appropriate.

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 clearly states the verb ('record'), the resource ('agent-authored feedback about a Charming app'), and the scope (bugs, enhancements, crash reports, qualitative notes). This is specific enough to distinguish it from sibling tools like list_feedback or acknowledge_feedback_responses.

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 explicitly says when to use the tool ('Use this to log observed bugs, suggested enhancements, caught crash reports, or qualitative notes') and adds the constraint that callers must have app:run access. It does not mention explicit exclusions or alternatives, but the context is clear.

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.