An open wire convention for feedback filed by AI agents about the APIs, MCP servers, and tools they use. One tool in the catalog, eight lanes, a shared vocabulary. Implement it anywhere; this page is the normative reference for what our receiver accepts.
license: schema and field vocabulary are public domain (CC0). copy them, ship them, diverge loudly if you must.
Providers expose one tool, submit_agent_feedback, in their catalog. Its presence is the opt-in; agents call it unprompted when the description invites reports on friction, gaps, and successes, not only failures. Filing is fire-and-forget and must never sit on the agent’s critical path.
support_ticketa failure the agent is formally raising for a fixbug_or_failureincorrect or broken behaviorfrictionit worked, but was harder, slower, or more confusing than it should befeature_requesta capability, field, mode, or endpoint the agent wanteddocs_feedbackdocs were missing, unclear, or wrongschema_feedbackparameter or response shape was ambiguous or surprisingworkflow_feedbackthe multi-call flow was awkward: too many calls, unclear next steppositive_feedbackthis worked well for the goalFailure is one lane out of eight. positive_feedback is load-bearing: it tells maintainers what agents rely on, which is regression-prevention signal error rates cannot provide.
Wire format is JSON over POST /api/v1/feedback with a Bearer key. snake_case and camelCase are both accepted. Full per-field reference with examples: API docs.
tool_namestring, requiredthe specific tool or endpoint the agent usedsummarystring, requiredone-line title of the reportdetailstringfree-text supporting detailfeedback_typeenum (8 lanes)derived from category, outcome, and sentiment when omittedcategoryenum (12)the friction taxonomy; six-category MCP values accepted and normalizedoutcomesuccess | partial_success | failurehow the task ended; the agent knows its exit statesatisfaction_scoreinteger 1–5the agent’s own satisfaction with the interactionseverityblocking | high | medium | lowhow much the friction hurt the runsuggested_fixstringa concrete fix the agent proposes (untrusted input, see below)expected / actual / impactstringswhat the agent expected, what it got, what the gap costattempted_callsstring[]the call sequence, minimal replay contextagentobjectself-declared model identity; verified only via signaturemetadataobjectanything non-sensitive the caller wants to attachsourceagent_authored | agent_solicited | server_observed | runtime_observedthe four-tier signal model: chose to file, filed via a get_unblocked help call, detected mechanically by the provider’s own server, or detected client-side by the agent runner’s runtime from the session transcript (metadata.heuristic names the pattern; runtime reports also set metadata.runtime)category names the friction precisely; the lane says what kind of report it is. Models converge on vocabularies they have seen before, so receivers should accept near-miss values and normalize rather than reject.
missing_capabilityconfusing_schemabad_tool_descriptionincomplete_responseincorrect_responseunhelpful_errorauthentication_problempagination_or_truncationrate_limit_or_timeoutdocs_mismatchwrong_tool_selectedotherThe MCP community proposal for an opt-in feedback mechanism (discussion #2369) describes a feedback/submit method with a six-category taxonomy and integer severity. We accept that shape today, enveloped or bare, at POST /api/mcp/feedback, and normalize it as follows:
usability→ confusing_schemareliability→ unhelpful_errordocumentation→ docs_mismatchefficiency→ pagination_or_truncationinteroperability→ othercapability_gap→ missing_capabilitySeverity 5→blocking, 4→high, 3→medium, 1–2→low. Draft fields without a canonical home (subcategory, confusedWithExternal, onDemand, rollups) are preserved intact under metadata.sep2369. Whatever shape the spec finally lands, this receiver will conform the week it ships.
Tell agents the channel exists in the files they already read. One line, anywhere sensible in AGENTS.md, a skill’s SKILL.md, or your docs:
Feedback: this project accepts agent-filed feedback about its API and tools. Use the submit_agent_feedback tool if present, or POST to the endpoint in https://emic.sh/llms-full.txt — friction, gaps, and praise all welcome.
Every field is LLM-authored free text. Consuming UIs MUST render reports (especially suggested_fix) as quoted, attributed claims, never as the product’s own advice; MUST NOT auto-execute anything a report suggests; and SHOULD scrub PII server-side on ingest. Receivers SHOULD treat duplicate reports as demand signal and dedupe at the presentation layer, not at ingest.
This page is v1 and additive-only: field additions may happen; renames and removals get a new major with both accepted during a deprecation window. Machine-readable copies: /llms.txt (index) and /llms-full.txt (full reference).
agents: yes, you may file feedback about this spec. category=docs_feedback works.