failecho

Check what other agents hit the same tool failure — and what recovery worked. Ask before retrying.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
85%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,464Tokens (tool definitions)
~3.1 KBTypical response size
Moderate attention impact (1.14% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "failecho": {
      "command": "npx",
      "args": [
        "failecho-mcp"
      ]
    }
  }
}

Runnable packages

npmfailecho-mcp0.1.1stdio
pypifailecho-mcp0.1.1stdio

Remote endpoints

https://failecho.com/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢check_tool_failure(service, operation, error_type, error_message, error_code, ...)

Use FailEcho when another tool fails, before retrying blindly. Call this BEFORE retrying a failed tool, API or MCP call. Returns what other agents saw for this exact failure -- status (HEALTHY/DEGRADED/MAJOR/INSUFFICIENT_DATA), counts, the recovery actions that worked with success rates, and one `recommendation` (or `skip` when nothing tried recently has worked; null when evidence is thin -- a real answer). Works on your own history before anyone else joins. Free, anonymous, stores nothing, never rate limited.

Input Schema

{
  "type": "object",
  "properties": {
    "service": {
      "description": "The MCP server's own name (serverInfo.name) or the API host, e.g. 'api.github.com'. Not your client's local alias.",
      "maxLength": 128,
      "type": "string"
    },
    "operation": {
      "description": "The tool or endpoint as the server names it, e.g. 'create_issue', not 'mcp__github__create_issue'.",
      "maxLength": 128,
      "type": "string"
    },
    "error_type": {
      "maxLength": 64,
      "type": "string",
      "description": "Failure class, e.g. 'validation_error', 'timeout', 'rate_limit', 'auth_error'."
    },
    "error_message": {
      "maxLength": 2000,
      "type": "string",
      "description": "The error text only; normalized server-side, not stored by this call."
    },
    "error_code": {
      "maxLength": 32,
      "type": "string",
      "description": "Code, e.g. '422', 'ECONNRESET'."
    },
    "version": {
      "maxLength": 64,
      "type": "string",
      "description": "Service/tool version, if known."
    },
    "schema_hash": {
      "maxLength": 64,
      "type": "string",
      "description": "Short hash of the tool schema you used (separates 'API broke' from 'schema stale')."
    },
    "reporter_id": {
      "maxLength": 200,
      "type": "string",
      "description": "Optional stable agent id; hashed, never stored raw. Lets from_other_agents be answered."
    },
    "verbose": {
      "default": false,
      "description": "Full record (timestamps, rates, effective counts, every action). Default: the compact answer.",
      "type": "boolean"
    }
  },
  "required": [
    "service",
    "operation"
  ]
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "check_tool_failureDictOutput"
}
🟡report_tool_failure(service, operation, error_type, error_message, error_code, ...)

Report a failed tool/API/MCP call so others can recognise it; call after a failure, alongside check_tool_failure. PRIVACY: this is a shared network. Send failure metadata only -- never prompts, tool arguments, tool results, request or response bodies, headers, cookies, API keys, tokens, emails or user content. Error text is normalized server-side and the raw string discarded. A stable reporter_id (hashed, never stored raw) makes you one reporter instead of anonymous noise. Writes are rate limited per client.

Input Schema

{
  "type": "object",
  "properties": {
    "service": {
      "description": "The MCP server's own name (serverInfo.name) or the API host, e.g. 'api.github.com'. Not your client's local alias.",
      "maxLength": 128,
      "type": "string"
    },
    "operation": {
      "description": "The tool or endpoint as the server names it, e.g. 'create_issue', not 'mcp__github__create_issue'.",
      "maxLength": 128,
      "type": "string"
    },
    "error_type": {
      "maxLength": 64,
      "type": "string",
      "description": "Short failure class, e.g. 'validation_error'."
    },
    "error_message": {
      "maxLength": 2000,
      "type": "string",
      "description": "Error text. Normalized before storage; no secrets please."
    },
    "error_code": {
      "maxLength": 32,
      "type": "string",
      "description": "Protocol/vendor code, e.g. '422'."
    },
    "version": {
      "maxLength": 64,
      "type": "string",
      "description": "Version of the service/tool."
    },
    "schema_hash": {
      "maxLength": 64,
      "type": "string",
      "description": "Short hash of the tool schema used."
    },
    "latency_ms": {
      "minimum": 0,
      "type": "integer",
      "description": "Observed call latency in milliseconds."
    },
    "reporter_id": {
      "maxLength": 200,
      "type": "string",
      "description": "Optional stable identifier for your agent. Salted and hashed on arrival; never stored raw."
    }
  },
  "required": [
    "service",
    "operation"
  ]
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "report_tool_failureDictOutput"
}
⚪report_tool_success(service, operation, version, schema_hash, latency_ms, ...)

Report that a call SUCCEEDED. Failure rates are failures over all calls; a network that only hears failures cannot tell broken from busy. No error data -- service, operation, version, latency.

Input Schema

{
  "type": "object",
  "properties": {
    "service": {
      "description": "The MCP server's own name (serverInfo.name) or the API host, e.g. 'api.github.com'. Not your client's local alias.",
      "maxLength": 128,
      "type": "string"
    },
    "operation": {
      "description": "The tool or endpoint as the server names it, e.g. 'create_issue', not 'mcp__github__create_issue'.",
      "maxLength": 128,
      "type": "string"
    },
    "version": {
      "maxLength": 64,
      "type": "string",
      "description": "Version of the service/tool."
    },
    "schema_hash": {
      "maxLength": 64,
      "type": "string",
      "description": "Short hash of the tool schema used."
    },
    "latency_ms": {
      "minimum": 0,
      "type": "integer",
      "description": "Observed call latency in milliseconds."
    },
    "reporter_id": {
      "maxLength": 200,
      "type": "string",
      "description": "Optional stable agent id; hashed, never stored raw."
    }
  },
  "required": [
    "service",
    "operation"
  ]
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "report_tool_successDictOutput"
}
🟢report_recovery_outcome(fingerprint, action, successful, reporter_id)

After acting on a failure -- retry, wait, refresh_schema, reconnect, use_fallback, reauthenticate -- report whether it worked. Every recommendation others get is built from these. Pass the fingerprint from check_tool_failure or report_tool_failure; one outcome per attempt.

Input Schema

{
  "type": "object",
  "properties": {
    "fingerprint": {
      "description": "From check_tool_failure or report_tool_failure (32 hex chars).",
      "pattern": "^[0-9a-f]{32}$",
      "type": "string"
    },
    "action": {
      "description": "What you tried, e.g. 'refresh_schema' ([a-z0-9_.-]).",
      "maxLength": 64,
      "type": "string"
    },
    "successful": {
      "description": "True when the action resolved the failure.",
      "type": "boolean"
    },
    "reporter_id": {
      "maxLength": 200,
      "type": "string",
      "description": "Optional stable agent id; hashed, never stored raw."
    }
  },
  "required": [
    "fingerprint",
    "action",
    "successful"
  ]
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "report_recovery_outcomeDictOutput"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools
verifiedversion not recorded4 tools