Woo Revenue Incident Graph

Check WooCommerce checkout-change risk using public evidence and privacy-safe store signals.

我該用這個嗎

品質與安全性

A
說明品質
100%
結構描述完整度
90%
命名品質
95%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

根據工具定義與協定合規性的自動化分析。

上下文成本

~2,724Token(工具定義)
~6.5 KB典型回應大小
顯著的注意力影響(128k 上下文的 2.13%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "woo-revenue-incident-graph": {
      "url": "https://revenue-graph.utilityhouse.xyz/mcp/registry"
    }
  }
}

遠端端點

https://revenue-graph.utilityhouse.xyz/mcp/registrystreamable-http

它能做什麼

工具清單

工具(4)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢get_checkout_health_snapshot(window_seconds)

Answers: is anything wrong with this connected WooCommerce store's checkout and payment path right now, and is a full diagnosis worth running? Free, always. Returns order counts by status with the change across the window, gateway/webhook/scheduler health, checkout page health, how many recent commerce changes there were, which signal families this store can and cannot report, and how fresh the underlying data is. Call this FIRST — it is cheap, and `diagnosis_recommended` tells you whether the expensive call would have anything to work with. It returns no customer, order, or payment identifier because the store never sends any.

輸入結構描述

{
  "type": "object",
  "properties": {
    "window_seconds": {
      "type": "integer",
      "minimum": 900,
      "maximum": 604800,
      "description": "Window in seconds. Default 86400 (24h), maximum 604800 (7d)."
    }
  },
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "connected": {
      "type": "boolean"
    },
    "data_freshness": {
      "type": "string",
      "enum": [
        "fresh",
        "aging",
        "stale"
      ]
    },
    "collected_at": {
      "type": [
        "integer",
        "null"
      ]
    },
    "order_counts": {
      "type": "object",
      "additionalProperties": {
        "type": "integer"
      }
    },
    "paid_order_change_pct": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Change in paid orders across the window; null when there is too little data to compare."
    },
    "gateway_summary": {
      "type": "object",
      "properties": {
        "total": {
          "type": "integer"
        },
        "unavailable": {
          "type": "integer"
        },
        "test_mode": {
          "type": "integer"
        }
      },
      "required": [
        "total",
        "unavailable",
        "test_mode"
      ],
      "additionalProperties": false
    },
    "webhook_summary": {
      "type": "object",
      "properties": {
        "total": {
          "type": "integer"
        },
        "failing": {
          "type": "integer"
        },
        "disabled": {
          "type": "integer"
        }
      },
      "required": [
        "total",
        "failing",
        "disabled"
      ],
      "additionalProperties": false
    },
    "error_fingerprints": {
      "type": "integer"
    },
    "scheduler_overdue": {
      "type": "integer"
    },
    "recent_changes": {
      "type": "integer"
    },
    "coverage": {
      "type": "object",
      "properties": {
        "families": {
          "type": "integer",
          "description": "How many families actually reported. Only these can corroborate anything."
        },
        "present": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "missing": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sufficient": {
          "type": "boolean"
        },
        "unavailable": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Cannot be collected on this store at all. Silence here is not evidence of health."
        },
        "truncated": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Reported, but hit a collection cap — a PARTIAL aggregate covering fewer events than were asked for. A burst is what overflows a cap, so this is likeliest exactly when it matters."
        },
        "no_history_yet": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Only know what has happened since the plugin was connected."
        },
        "not_collected": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Deliberately not collected in this release."
        },
        "caveat": {
          "type": [
            "string",
            "null"
          ],
          "description": "One sentence naming why the missing families are missing."
        }
      },
      "required": [
        "families",
        "present",
        "missing",
        "sufficient",
        "unavailable",
        "truncated",
        "no_history_yet",
        "not_collected",
        "caveat"
      ],
      "additionalProperties": false
    },
    "diagnosis_recommended": {
      "type": "boolean"
    },
    "reason": {
      "type": "string"
    }
  },
  "required": [
    "connected",
    "data_freshness",
    "collected_at",
    "order_counts",
    "paid_order_change_pct",
    "gateway_summary",
    "webhook_summary",
    "error_fingerprints",
    "scheduler_overdue",
    "recent_changes",
    "coverage",
    "diagnosis_recommended",
    "reason"
  ],
  "additionalProperties": false
}
🟢diagnose_revenue_incident(symptom, window_seconds)

Answers: what most likely broke this store's checkout or payment path, what argues against each explanation, and how to tell whether a fix actually held. Joins the store's own privacy-safe signals — order status over time, order-status transitions, order-note reason codes, gateway and webhook health, scheduler backlog, checkout page health, recent plugin/theme/core changes — against public release and issue evidence, on one timeline. Every answer reports which signal families this store could and could not report, because a family that cannot be collected is not a family that is fine. Returns up to three ranked hypotheses, each with the observations behind it, independent public sources where they exist, counterevidence, what remains unknown, safe next steps, and a verification plan. Returns `abstained` and charges nothing when the snapshot is stale, coverage is thin, or the signals do not support any cause — an unsupported guess during an outage is worse than no answer. Free while in beta. Call get_checkout_health_snapshot first.

輸入結構描述

{
  "type": "object",
  "properties": {
    "symptom": {
      "type": "string",
      "enum": [
        "orders_dropped",
        "payment_succeeded_order_pending",
        "failed_orders_spiked",
        "payment_method_missing",
        "checkout_errors",
        "unknown"
      ],
      "description": "What the merchant reports. Use \"unknown\" rather than guessing."
    },
    "window_seconds": {
      "type": "integer",
      "minimum": 900,
      "maximum": 604800,
      "description": "Window in seconds. Default 86400 (24h), maximum 604800 (7d)."
    }
  },
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "symptom": {
      "type": "string"
    },
    "window": {
      "type": "object",
      "properties": {
        "started_at": {
          "type": "integer"
        },
        "ended_at": {
          "type": "integer"
        }
      },
      "required": [
        "started_at",
        "ended_at"
      ],
      "additionalProperties": false
    },
    "data_freshness": {
      "type": "string",
      "enum": [
        "fresh",
        "aging",
        "stale"
      ]
    },
    "coverage": {
      "type": "object",
      "properties": {
        "families": {
          "type": "integer",
          "description": "How many families actually reported. Only these can corroborate anything."
        },
        "present": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "missing": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sufficient": {
          "type": "boolean"
        },
        "unavailable": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Cannot be collected on this store at all. Silence here is not evidence of health."
        },
        "truncated": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Reported, but hit a collection cap — a PARTIAL aggregate covering fewer events than were asked for. A burst is what overflows a cap, so this is likeliest exactly when it matters."
        },
        "no_history_yet": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Only know what has happened since the plugin was connected."
        },
        "not_collected": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Deliberately not collected in this release."
        },
        "caveat": {
          "type": [
            "string",
            "null"
          ],
          "description": "One sentence naming why the missing families are missing."
        }
      },
      "required": [
        "families",
        "present",
        "missing",
        "sufficient",
        "unavailable",
        "truncated",
        "no_history_yet",
        "not_collected",
        "caveat"
      ],
      "additionalProperties": false
    },
    "timeline": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "at": {
            "type": "integer"
          },
          "kind": {
            "type": "string"
          },
          "statement": {
            "type": "string"
          }
        },
        "required": [
          "at",
          "kind",
          "statement"
        ],
        "additionalProperties": false
      }
    },
    "failure_pattern": {
      "type": "string",
      "enum": [
        "card_testing_suspected",
        "buyer_failures",
        "mixed_or_unclear"
      ]
    },
    "failure_pattern_reasoning": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "hypotheses": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "rank": {
            "type": "integer"
          },
          "hypothesis": {
            "type": "string"
          },
          "confidence": {
            "type": "string",
            "enum": [
              "high",
              "medium",
              "low",
              "abstained"
            ]
          },
          "observations": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string"
                },
                "statement": {
                  "type": "string"
                },
                "at": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "weight": {
                  "type": "string",
                  "enum": [
                    "strong",
                    "supporting"
                  ]
                }
              },
              "required": [
                "kind",
                "statement",
                "at",
                "weight"
              ],
              "additionalProperties": false
            }
          },
          "public_evidence": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string"
                },
                "source_type": {
                  "type": "string"
                },
                "origin_group": {
                  "type": "string"
                },
                "observed_at": {
                  "type": "integer"
                },
                "affected_version": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "fixed_version": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "url",
                "source_type",
                "origin_group",
                "observed_at",
                "affected_version",
                "fixed_version"
              ],
              "additionalProperties": false
            }
          },
          "counterevidence": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "unknowns": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "safe_next_steps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "verification_plan": {
            "type": "string"
          },
          "billing_eligibility": {
            "type": "string",
            "enum": [
              "billable",
              "free_abstained",
              "free_insufficient_coverage",
              "free_stale"
            ]
          }
        },
        "required": [
          "rank",
          "hypothesis",
          "confidence",
          "observations",
          "public_evidence",
          "counterevidence",
          "unknowns",
          "safe_next_steps",
          "verification_plan",
          "billing_eligibility"
        ],
        "additionalProperties": false
      }
    },
    "abstained": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "reason": {
          "type": "string"
        }
      },
      "required": [
        "reason"
      ],
      "additionalProperties": false
    },
    "billable": {
      "type": "boolean"
    },
    "price_micros": {
      "type": "integer"
    }
  },
  "required": [
    "symptom",
    "window",
    "data_freshness",
    "coverage",
    "timeline",
    "failure_pattern",
    "failure_pattern_reasoning",
    "hypotheses",
    "abstained",
    "billable",
    "price_micros"
  ],
  "additionalProperties": false
}
🟢check_checkout_change_risk(component, to_version)

Answers: is a change to this store's checkout or payment path known to have broken revenue elsewhere — before it is applied, or when explaining a change that was already made? Checks a component and version against public release and issue evidence scoped to the money path (payment capture, order status transitions, gateway webhooks, wallet checkout), not to general plugin update safety. With no component named, checks every commerce change this store has made recently. Says `unknown` when nothing independent is on record — an absence of reports is not a safety record, and is reported as the absence it is. Free.

輸入結構描述

{
  "type": "object",
  "properties": {
    "component": {
      "type": "string",
      "maxLength": 80,
      "description": "e.g. \"plugin:woocommerce-gateway-stripe\". Omit to check this store's own recent changes."
    },
    "to_version": {
      "type": "string",
      "maxLength": 40
    }
  },
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "checked": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "component": {
            "type": "string"
          },
          "to_version": {
            "type": [
              "string",
              "null"
            ]
          },
          "verdict": {
            "type": "string",
            "enum": [
              "known_risk",
              "no_known_risk",
              "unknown"
            ]
          },
          "reason": {
            "type": "string"
          },
          "independent_source_count": {
            "type": "integer"
          },
          "affected_versions": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "fixed_version": {
            "type": [
              "string",
              "null"
            ]
          },
          "source_urls": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "component",
          "to_version",
          "verdict",
          "reason",
          "independent_source_count",
          "affected_versions",
          "fixed_version",
          "source_urls"
        ],
        "additionalProperties": false
      }
    },
    "source": {
      "type": "string",
      "enum": [
        "named_component",
        "store_recent_changes"
      ]
    },
    "billable": {
      "type": "boolean"
    },
    "price_micros": {
      "type": "integer"
    }
  },
  "required": [
    "checked",
    "source",
    "billable",
    "price_micros"
  ],
  "additionalProperties": false
}
🟢verify_revenue_recovery(change_applied_at, window_seconds)

Answers: after a change was made, did this store's revenue signals actually recover? Compares the window before a stated change against the window since: paid vs pending vs failed order mix, webhook failure counts, and gateway availability. Returns `resolved`, `improving`, `still_failing`, or `unknown` — and `unknown` when too little new data has arrived to tell, which is free. A quiet ten minutes is not a recovery. Free while in beta.

輸入結構描述

{
  "type": "object",
  "properties": {
    "change_applied_at": {
      "type": "integer",
      "description": "Epoch ms when the fix was applied."
    },
    "window_seconds": {
      "type": "integer",
      "minimum": 900,
      "maximum": 604800,
      "description": "Window in seconds. Default 86400 (24h), maximum 604800 (7d)."
    }
  },
  "required": [
    "change_applied_at"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "resolved",
        "improving",
        "still_failing",
        "unknown"
      ]
    },
    "reason": {
      "type": "string"
    },
    "before": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": true
    },
    "after": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": true
    },
    "new_regressions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "billable": {
      "type": "boolean"
    },
    "price_micros": {
      "type": "integer"
    }
  },
  "required": [
    "status",
    "reason",
    "before",
    "after",
    "new_regressions",
    "billable",
    "price_micros"
  ],
  "additionalProperties": false
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本4 個工具
已驗證未記錄版本4 個工具
已驗證未記錄版本4 個工具