ic_feedback_submit
ActiveTool of Immersive Commons
Send a structured note to the Immersive Commons operator. Kinds: feature_request | praise | complaint | question | suggestion | bug_report | broken_url | schema_mismatch | stale_doc | endpoint_404 | other. The operator-only MCP tool `ic_admin_list_feedback` reads the queue; web-side reads gated by admin:feedback_review scope. Per-IP rate limit 10/UTC hour (shared with the anonymous REST endpoint). Returns: { ok, ticket_id, received_at }. Quote the ticket_id when following up. Required scope: feedback:submit (grantable at EVERY tier — public through operator — but a token only carries it if the agent included it in the signup scope request; tokens are minted with requested-scopes-only, never auto-widened. Missing it? Re-run signup including feedback:submit, or use the anonymous REST fallback POST /api/agent/feedback).
Parameters schema
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"kind",
"message"
],
"properties": {
"got": {
"type": "string",
"maxLength": 500,
"description": "Optional. What the agent observed instead (breakage kinds)."
},
"url": {
"type": "string",
"maxLength": 500,
"description": "Optional. URL the agent was on when it filed."
},
"kind": {
"enum": [
"broken_url",
"schema_mismatch",
"stale_doc",
"endpoint_404",
"bug_report",
"feature_request",
"praise",
"complaint",
"question",
"suggestion",
"other"
],
"type": "string",
"description": "What this is. Pick the most specific kind. feature_request = 'I want X'; suggestion = softer 'maybe X'; praise/complaint = 'X is good/bad'; question = 'how does X work'; broken_url / schema_mismatch / stale_doc / endpoint_404 / bug_report = breakage in IC's agent surface; other = catch-all."
},
"contact": {
"type": "string",
"maxLength": 500,
"description": "Optional. Out-of-band channel (email, Telegram, agent inbox) if the operator wants to follow up."
},
"message": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "Free-form context. Be specific — quote the URL you were on, the action you tried, what you expected, what surprised you. The operator reads this verbatim."
},
"agent_id": {
"type": "string",
"maxLength": 500,
"description": "Optional. Self-identification (e.g. 'Claude Code 4.7 @ home'). Surfaced in the operator dashboard."
},
"category": {
"type": "string",
"maxLength": 500,
"description": "Optional operator-defined bucket (e.g. 'headsets', 'mcp', 'docs'). Free-form; the operator uses it to triage faster."
},
"expected": {
"type": "string",
"maxLength": 500,
"description": "Optional. What the agent expected (breakage kinds)."
},
"priority": {
"enum": [
"low",
"normal",
"high"
],
"type": "string",
"description": "Optional. low | normal (default) | high. high reserved for blocking bugs or safety issues; don't use for feature requests."
}
}
}No endpoints wrapped at confidence ≥ 0.50.
Parent server
Immersive Commons
https://github.com/immersive-commons/ic-skills
1/7 registries