---
title: entherium_report_defect
description: File a DEFECT you found in the platform.
locale: en
version: 0.2.0
canonical: https://enterium-developer-docs.pages.dev/developers/mcp/tools/entherium_report_defect/
---

> Documentation index: https://enterium-developer-docs.pages.dev/developers/llms.txt — every page of this portal has a Markdown twin at <route>.md; the frozen API contract is at https://enterium-developer-docs.pages.dev/developers/api/openapi.json.

:::note
Generated from the running server (agent capability version `2026-09-03.1`) — do not edit by hand.
:::

File a DEFECT you found in the platform. Give MAXIMUM detail so it can be
detected AND reproduced, as in full QA management: ordered `steps_to_reproduce`,
what you `expected` vs the `actual` behaviour, `evidence` (links / quotes /
screenshot URLs / logs — plain strings or {"type","url"|"value"} objects both
work), the `component`, and `environment` (instance/url/run_guid/commit). Set
`spec_ref` to the feature's SPEC id ("SPEC-NNN") when the defect is about a known
spec, so it targets the right feature context (an unknown spec id is REJECTED). A
report WITHOUT repro steps or an evidence locator is QUARANTINED, not tracked.
Duplicates of an existing defect are merged server-side. Returns {"accepted":
true} when the report is taken, or {"accepted": false} if it could not be
accepted — nothing else about the ticket comes back.

**Access:** writes — the client asks you for confirmation before every call

**Available at:** `/mcp/`

_Hints declared to MCP clients (ToolAnnotations)_

| Hint | Value |
| --- | --- |
| `readOnlyHint` | false |
| `destructiveHint` | false |
| `idempotentHint` | false |
| `openWorldHint` | false |
| `anthropic/requiresUserInteraction` | true |

## Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `title` | `string` | yes | One-line summary of the defect, as a QA ticket title |
| `steps_to_reproduce` | `array \| null` | no | Ordered steps that make the defect appear; required for the report to be tracked |
| `expected` | `string \| null` | no | What should have happened |
| `actual` | `string \| null` | no | What actually happened |
| `evidence` | `array \| array \| string \| null` | no | Links, quotes, screenshot URLs or log lines — plain strings or {{type, url\|value}} objects |
| `component` | `string \| null` | no | Platform area the defect belongs to (e.g. publish, generate, portal) |
| `severity` | `string \| null` | no | sev1 (outage) … sev4 (cosmetic) |
| `environment` | `object \| null` | no | Where it happened: instance, url, run_guid, commit |
| `behavior_cases` | `array \| null` | no | Other inputs or cases you tried and what they did |
| `spec_ref` | `string \| null` | no | Feature id of the form SPEC-NNN the defect belongs to; unknown ids are rejected |


## Example call

Send inside an initialized MCP session (see [Connecting](../../connecting/)). Every parameter is shown with a typed placeholder; drop the optional ones you do not need — but for defect/task tools the QA fields are what keeps a report out of quarantine.

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "entherium_report_defect",
    "arguments": {
      "title": "<title>",
      "steps_to_reproduce": [],
      "expected": "<expected>",
      "actual": "<actual>",
      "evidence": [],
      "component": "<component>",
      "severity": "<severity>",
      "environment": {},
      "behavior_cases": [],
      "spec_ref": "<spec_ref>"
    }
  }
}
```

## Returns

| Field | Type | Description |
| --- | --- | --- |
| `accepted` | `boolean` (optional) | True iff the write was applied / the report was taken in |
| `error` | `string` (optional) | Why it was not accepted (truthful, never a silent drop) |
| `task_id` | `integer` (optional) | Id of the created task (create_task only) |

## If it fails

| Symptom | Cause | Action |
| --- | --- | --- |
| `401` | Token missing/expired | Tokens are issued by the platform owner via `POST /api/v1/auth/agent-token` (superuser-only) — ask for a re-issue. ⚠️ A new token **replaces** your grant set |
| `403` / capability error | Your token lacks the capability or the contract grant | Check `my_capabilities` first; ask the owner for the grant |
