Koskamo

Woo Revenue Incident Graph MCP

Diagnoses why a WooCommerce store's checkout revenue path broke by joining privacy-safe aggregate signals with public evidence. It is a read-only diagnostic tool that answers if something is wrong, what broke it, and if the fix held, without changing orders or payments.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Woo Revenue Incident Graph MCP logo, by Utility HouseCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Utility House
MCP endpoint (Streamable HTTP)
https://revenue-graph.utilityhouse.xyz/mcp/registry
Vendor documentation

What its tools do

4 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

4 of 4 have a description · 4 of 4 declare behavior hints · 3 of 4 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Check checkout health snapshot for errors
  • Diagnose revenue incident hypotheses
  • Check checkout change risk
  • Verify revenue recovery

Source and maintenance

Community listingRegistry 0.2.2

Protocol and capabilities

Server
woo-revenue-incident-graph 0.2.0
MCP protocol negotiated in check
2025-06-18
Tools
4 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Diagnoses why a WooCommerce store's checkout revenue path broke. Joins the connected store's own privacy-safe signals — order status over time, order-note reason codes, gateway and webhook health, error fingerprints, scheduler backlog, recent commerce changes — against public release and issue evidence, on one timeline, and answers three questions: is something wrong right now, what most likely broke it, and did the fix hold. Read-only: it cannot change an order, a refund, a payment or a plugin. It never receives a customer, order or payment identifier, because the store's collector does not send one. Call get_checkout_health_snapshot first — it is free and says whether a diagnosis has anything to work with. Every tool abstains rather than guessing when the data is stale, thin or contradictory. Free beta.

Tools

4 advertised

get_checkout_health_snapshot — Is this store's revenue path healthy right now?
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

get_checkout_health_snapshot input schema
{
  "type": "object",
  "properties": {
    "window_seconds": {
      "type": "integer",
      "maximum": 604800,
      "minimum": 900,
      "description": "Window in seconds. Default 86400 (24h), maximum 604800 (7d)."
    }
  },
  "additionalProperties": false
}
get_checkout_health_snapshot output schema
{
  "type": "object",
  "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"
  ],
  "properties": {
    "reason": {
      "type": "string"
    },
    "coverage": {
      "type": "object",
      "required": [
        "families",
        "present",
        "missing",
        "sufficient",
        "unavailable",
        "truncated",
        "no_history_yet",
        "not_collected",
        "caveat"
      ],
      "properties": {
        "caveat": {
          "type": [
            "string",
            "null"
          ],
          "description": "One sentence naming why the missing families are missing."
        },
        "missing": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "present": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "families": {
          "type": "integer",
          "description": "How many families actually reported. Only these can corroborate anything."
        },
        "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."
        },
        "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."
        },
        "not_collected": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Deliberately not collected in this release."
        },
        "no_history_yet": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Only know what has happened since the plugin was connected."
        }
      },
      "additionalProperties": false
    },
    "connected": {
      "type": "boolean"
    },
    "collected_at": {
      "type": [
        "integer",
        "null"
      ]
    },
    "order_counts": {
      "type": "object",
      "additionalProperties": {
        "type": "integer"
      }
    },
    "data_freshness": {
      "enum": [
        "fresh",
        "aging",
        "stale"
      ],
      "type": "string"
    },
    "recent_changes": {
      "type": "integer"
    },
    "gateway_summary": {
      "type": "object",
      "required": [
        "total",
        "unavailable",
        "test_mode"
      ],
      "properties": {
        "total": {
          "type": "integer"
        },
        "test_mode": {
          "type": "integer"
        },
        "unavailable": {
          "type": "integer"
        }
      },
      "additionalProperties": false
    },
    "webhook_summary": {
      "type": "object",
      "required": [
        "total",
        "failing",
        "disabled"
      ],
      "properties": {
        "total": {
          "type": "integer"
        },
        "failing": {
          "type": "integer"
        },
        "disabled": {
          "type": "integer"
        }
      },
      "additionalProperties": false
    },
    "scheduler_overdue": {
      "type": "integer"
    },
    "error_fingerprints": {
      "type": "integer"
    },
    "diagnosis_recommended": {
      "type": "boolean"
    },
    "paid_order_change_pct": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Change in paid orders across the window; null when there is too little data to compare."
    }
  },
  "additionalProperties": false
}
get_checkout_health_snapshot annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
diagnose_revenue_incident — Why did this store's checkout revenue break?
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

diagnose_revenue_incident input schema
{
  "type": "object",
  "properties": {
    "symptom": {
      "enum": [
        "orders_dropped",
        "payment_succeeded_order_pending",
        "failed_orders_spiked",
        "payment_method_missing",
        "checkout_errors",
        "unknown"
      ],
      "type": "string",
      "description": "What the merchant reports. Use \"unknown\" rather than guessing."
    },
    "window_seconds": {
      "type": "integer",
      "maximum": 604800,
      "minimum": 900,
      "description": "Window in seconds. Default 86400 (24h), maximum 604800 (7d)."
    }
  },
  "additionalProperties": false
}
diagnose_revenue_incident output schema
{
  "type": "object",
  "required": [
    "symptom",
    "window",
    "data_freshness",
    "coverage",
    "timeline",
    "failure_pattern",
    "failure_pattern_reasoning",
    "hypotheses",
    "abstained",
    "billable",
    "price_micros"
  ],
  "properties": {
    "window": {
      "type": "object",
      "required": [
        "started_at",
        "ended_at"
      ],
      "properties": {
        "ended_at": {
          "type": "integer"
        },
        "started_at": {
          "type": "integer"
        }
      },
      "additionalProperties": false
    },
    "symptom": {
      "type": "string"
    },
    "billable": {
      "type": "boolean"
    },
    "coverage": {
      "type": "object",
      "required": [
        "families",
        "present",
        "missing",
        "sufficient",
        "unavailable",
        "truncated",
        "no_history_yet",
        "not_collected",
        "caveat"
      ],
      "properties": {
        "caveat": {
          "type": [
            "string",
            "null"
          ],
          "description": "One sentence naming why the missing families are missing."
        },
        "missing": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "present": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "families": {
          "type": "integer",
          "description": "How many families actually reported. Only these can corroborate anything."
        },
        "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."
        },
        "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."
        },
        "not_collected": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Deliberately not collected in this release."
        },
        "no_history_yet": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Only know what has happened since the plugin was connected."
        }
      },
      "additionalProperties": false
    },
    "timeline": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "at",
          "kind",
          "statement"
        ],
        "properties": {
          "at": {
            "type": "integer"
          },
          "kind": {
            "type": "string"
          },
          "statement": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "abstained": {
      "type": [
        "object",
        "null"
      ],
      "required": [
        "reason"
      ],
      "properties": {
        "reason": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "hypotheses": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "rank",
          "hypothesis",
          "confidence",
          "observations",
          "public_evidence",
          "counterevidence",
          "unknowns",
          "safe_next_steps",
          "verification_plan",
          "billing_eligibility"
        ],
        "properties": {
          "rank": {
            "type": "integer"
          },
          "unknowns": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "confidence": {
            "enum": [
              "high",
              "medium",
              "low",
              "abstained"
            ],
            "type": "string"
          },
          "hypothesis": {
            "type": "string"
          },
          "observations": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "kind",
                "statement",
                "at",
                "weight"
              ],
              "properties": {
                "at": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "kind": {
                  "type": "string"
                },
                "weight": {
                  "enum": [
                    "strong",
                    "supporting"
                  ],
                  "type": "string"
                },
                "statement": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          },
          "counterevidence": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "public_evidence": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "url",
                "source_type",
                "origin_group",
                "observed_at",
                "affected_version",
                "fixed_version"
              ],
              "properties": {
                "url": {
                  "type": "string"
                },
                "observed_at": {
                  "type": "integer"
                },
                "source_type": {
                  "type": "string"
                },
                "origin_group": {
                  "type": "string"
                },
                "fixed_version": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "affected_version": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "additionalProperties": false
            }
          },
          "safe_next_steps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "verification_plan": {
            "type": "string"
          },
          "billing_eligibility": {
            "enum": [
              "billable",
              "free_abstained",
              "free_insufficient_coverage",
              "free_stale"
            ],
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "price_micros": {
      "type": "integer"
    },
    "data_freshness": {
      "enum": [
        "fresh",
        "aging",
        "stale"
      ],
      "type": "string"
    },
    "failure_pattern": {
      "enum": [
        "card_testing_suspected",
        "buyer_failures",
        "mixed_or_unclear"
      ],
      "type": "string"
    },
    "failure_pattern_reasoning": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
diagnose_revenue_incident annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
check_checkout_change_risk — Is this change likely to break checkout?
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

check_checkout_change_risk input schema
{
  "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
}
check_checkout_change_risk output schema
{
  "type": "object",
  "required": [
    "checked",
    "source",
    "billable",
    "price_micros"
  ],
  "properties": {
    "source": {
      "enum": [
        "named_component",
        "store_recent_changes"
      ],
      "type": "string"
    },
    "checked": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "component",
          "to_version",
          "verdict",
          "reason",
          "independent_source_count",
          "affected_versions",
          "fixed_version",
          "source_urls"
        ],
        "properties": {
          "reason": {
            "type": "string"
          },
          "verdict": {
            "enum": [
              "known_risk",
              "no_known_risk",
              "unknown"
            ],
            "type": "string"
          },
          "component": {
            "type": "string"
          },
          "to_version": {
            "type": [
              "string",
              "null"
            ]
          },
          "source_urls": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "fixed_version": {
            "type": [
              "string",
              "null"
            ]
          },
          "affected_versions": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "independent_source_count": {
            "type": "integer"
          }
        },
        "additionalProperties": false
      }
    },
    "billable": {
      "type": "boolean"
    },
    "price_micros": {
      "type": "integer"
    }
  },
  "additionalProperties": false
}
check_checkout_change_risk annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
verify_revenue_recovery — Did the fix actually hold?
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

verify_revenue_recovery input schema
{
  "type": "object",
  "required": [
    "change_applied_at"
  ],
  "properties": {
    "window_seconds": {
      "type": "integer",
      "maximum": 604800,
      "minimum": 900,
      "description": "Window in seconds. Default 86400 (24h), maximum 604800 (7d)."
    },
    "change_applied_at": {
      "type": "integer",
      "description": "Epoch ms when the fix was applied."
    }
  },
  "additionalProperties": false
}
verify_revenue_recovery output schema
{
  "type": "object",
  "required": [
    "status",
    "reason",
    "before",
    "after",
    "new_regressions",
    "billable",
    "price_micros"
  ],
  "properties": {
    "after": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": true
    },
    "before": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": true
    },
    "reason": {
      "type": "string"
    },
    "status": {
      "enum": [
        "resolved",
        "improving",
        "still_failing",
        "unknown"
      ],
      "type": "string"
    },
    "billable": {
      "type": "boolean"
    },
    "price_micros": {
      "type": "integer"
    },
    "new_regressions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
verify_revenue_recovery annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
3061 ms
95th percentile latency
3061 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 3061 ms · metadata changed · 4 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http woo-revenue-incident-graph-mcp https://revenue-graph.utilityhouse.xyz/mcp/registry

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add woo-revenue-incident-graph-mcp --url https://revenue-graph.utilityhouse.xyz/mcp/registry

Cursor

Merge this server into .cursor/mcp.json in your project, then enable woo-revenue-incident-graph-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "woo-revenue-incident-graph-mcp": {
      "url": "https://revenue-graph.utilityhouse.xyz/mcp/registry"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "woo-revenue-incident-graph-mcp": {
      "type": "streamableHttp",
      "url": "https://revenue-graph.utilityhouse.xyz/mcp/registry",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start woo-revenue-incident-graph-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "woo-revenue-incident-graph-mcp": {
      "type": "http",
      "url": "https://revenue-graph.utilityhouse.xyz/mcp/registry"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http woo-revenue-incident-graph-mcp https://revenue-graph.utilityhouse.xyz/mcp/registry

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://revenue-graph.utilityhouse.xyz/mcp/registry

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "woo-revenue-incident-graph-mcp": {
      "serverUrl": "https://revenue-graph.utilityhouse.xyz/mcp/registry"
    }
  }
}

Let your agent find its tools

Find servers like Woo Revenue Incident Graph MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.