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
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools