Check WooCommerce agent readiness and run owner-authorized release gates.
AgentReady Woo (xyz.utilityhouse/agentready-woo) MCP Server
AgentReady Woo checks WooCommerce agent readiness and runs owner-authorized release gates. It evaluates a public WooCommerce storefront by reading public pages and the public WooCommerce Store API, then reports what it found. When it cannot access the store, it returns an abstention state rather than a low score.
🛠️ Key Features
Reads a public WooCommerce storefront “the way a shopping agent would”
Fetches data from public pages and the public WooCommerce Store API
Does not change anything
Stores no customer data
Returns no product text
Reports state: UNREADABLE with score: null when the store is down, blocked, or not yet public
🚀 Use Cases
Verifying whether a self-hosted WooCommerce store is readable to an agent
Determining whether release gates can proceed based on storefront accessibility
⚡ Developer Benefits
Clear distinction between “unreadable” (abstention) vs. readable results (score: null)
Non-invasive readiness checks with no customer data storage
Uses public storefront signals only (public pages + public Store API)
⚠️ Limitations
If the store is down, blocked, or not yet public, readiness cannot be assessed beyond state: UNREADABLE / score: null
Captured live from the server via tools/list.
scan_woo_store_readiness
Use ONLY for a general storefront audit, readiness score, or fix recommendations. Do NOT use it to inspect a specific update or release; use preflight_woo_store for that. Check whether a public WooCommerce storefront is readable by shopping agents. Provide the store's HTTPS origin. The tool reads only public pages and the public WooCommerce Store API, changes nothing, and returns aggregate checks and recommendations without product text or customer data. When the storefront cannot be read at all, the tool abstains: state is UNREADABLE, score and grade are null, and the caller must not present that as a finding about the store.
Parameters2
store_url
string
optional
Public HTTPS origin of the WooCommerce storefront, for example https://shop.example.com
demo
boolean
optional
Run a deterministic synthetic demonstration instead of scanning a live store.
Raw schema
{
"type": "object",
"properties": {
"store_url": {
"type": "string",
"format": "uri",
"maxLength": 200,
"description": "Public HTTPS origin of the WooCommerce storefront, for example https://shop.example.com"
},
"demo": {
"type": "boolean",
"const": true,
"description": "Run a deterministic synthetic demonstration instead of scanning a live store."
}
},
"oneOf": [
{
"required": [
"store_url"
],
"not": {
"required": [
"demo"
]
}
},
{
"required": [
"demo"
],
"not": {
"required": [
"store_url"
]
}
}
],
"additionalProperties": false
}
preflight_woo_store
Use ONLY before a specific WooCommerce update or release when you need protocol-family evidence. Do NOT use it for a general score or fix list; use scan_woo_store_readiness for that. Inspect selected public WooCommerce and agent-protocol surfaces and return per-family PASS, FAIL, BLOCKED or UNMEASURED evidence. It changes nothing, is free, and BLOCKED or UNMEASURED is an abstention rather than a finding about the store.
Parameters2
store_origin
string
required
Public HTTPS origin of the WooCommerce store, with no path, query, credentials, private host, or customer data; for example https://shop.example.com.
requested_families
array
optional
Public protocol families to inspect. Omit to check all supported families; use only woo, robots, jsonld, mcp, ucp, or acp.
Raw schema
{
"type": "object",
"properties": {
"store_origin": {
"type": "string",
"minLength": 8,
"maxLength": 2048,
"description": "Public HTTPS origin of the WooCommerce store, with no path, query, credentials, private host, or customer data; for example https://shop.example.com."
},
"requested_families": {
"type": "array",
"minItems": 1,
"maxItems": 6,
"items": {
"type": "string",
"enum": [
"woo",
"robots",
"jsonld",
"mcp",
"ucp",
"acp"
]
},
"description": "Public protocol families to inspect. Omit to check all supported families; use only woo, robots, jsonld, mcp, ucp, or acp."
}
},
"required": [
"store_origin"
],
"additionalProperties": false
}
start_woo_release_verification
Start an ownership-authorized Release Gate run. Requires a bearer token with release:start.
Parameters5
store_id
string
required
AgentReady store identifier owned by the authenticated account. Use the stored identifier, never a store URL, secret, or customer value.
mode
string
required
Required safety mode. The only accepted value is owned-safe-active, which requires verified store ownership before the run starts.
requested_families
array
required
One or more protocol families the owner authorizes this Release Gate run to verify: woo, robots, jsonld, mcp, ucp, or acp.
baseline_run_id
string
optional
Optional prior Release Gate run identifier from the same owned store to use as the comparison baseline; omit when no valid baseline exists.
idempotency_key
string
required
Caller-generated retry key for this exact start request. Reuse it only when retrying the same operation; do not place credentials or customer data in it.
Raw schema
{
"type": "object",
"properties": {
"store_id": {
"type": "string",
"minLength": 8,
"maxLength": 100,
"description": "AgentReady store identifier owned by the authenticated account. Use the stored identifier, never a store URL, secret, or customer value."
},
"mode": {
"type": "string",
"const": "owned-safe-active",
"description": "Required safety mode. The only accepted value is owned-safe-active, which requires verified store ownership before the run starts."
},
"requested_families": {
"type": "array",
"minItems": 1,
"maxItems": 6,
"items": {
"type": "string",
"enum": [
"woo",
"robots",
"jsonld",
"mcp",
"ucp",
"acp"
]
},
"description": "One or more protocol families the owner authorizes this Release Gate run to verify: woo, robots, jsonld, mcp, ucp, or acp."
},
"baseline_run_id": {
"type": "string",
"minLength": 8,
"maxLength": 100,
"description": "Optional prior Release Gate run identifier from the same owned store to use as the comparison baseline; omit when no valid baseline exists."
},
"idempotency_key": {
"type": "string",
"minLength": 16,
"maxLength": 200,
"description": "Caller-generated retry key for this exact start request. Reuse it only when retrying the same operation; do not place credentials or customer data in it."
}
},
"required": [
"store_id",
"mode",
"requested_families",
"idempotency_key"
],
"additionalProperties": false
}
get_woo_release_verification
Get a Release Gate run owned by the bearer token account. Requires release:read.
Parameters1
run_id
string
required
Release Gate run identifier returned by start_woo_release_verification. It must belong to the authenticated account; never substitute a store URL, credential, or customer value.
Raw schema
{
"type": "object",
"properties": {
"run_id": {
"type": "string",
"minLength": 8,
"maxLength": 100,
"description": "Release Gate run identifier returned by start_woo_release_verification. It must belong to the authenticated account; never substitute a store URL, credential, or customer value."
}
},
"required": [
"run_id"
],
"additionalProperties": false
}
claim_woo_release_result
Claim a completed Release Gate result once. Requires release:claim; replay is never billable.
Parameters1
run_id
string
required
Release Gate run identifier returned by start_woo_release_verification. It must belong to the authenticated account; never substitute a store URL, credential, or customer value.
Raw schema
{
"type": "object",
"properties": {
"run_id": {
"type": "string",
"minLength": 8,
"maxLength": 100,
"description": "Release Gate run identifier returned by start_woo_release_verification. It must belong to the authenticated account; never substitute a store URL, credential, or customer value."
}
},
"required": [
"run_id"
],
"additionalProperties": false
}
UtilityHouse Release Gate checks the agent-facing WooCommerce surface before a release ships
Verify the agent-facing WooCommerce surface after a release—without touching
orders, checkout or payment credentials.
Run the free public preflight or add the
dependency-free Node 24 action to a deployment workflow. It fails CI only on an
explicit HOLD by default; BLOCKED, UNMEASURED and UNREADABLE remain
visible abstentions.
AgentReady runs a passive public preflight, then lets a verified store owner
make a version-pinned release decision from signed plugin evidence. A target
that cannot be read returns an abstention rather than a fabricated low score.
This is not a certification, ranking promise or checkout test. The root tools
do not create orders, reserve inventory, send customer email or handle payment
credentials.
Public MCP tools
POST https://app.utilityhouse.xyz/mcp speaks MCP JSON-RPC 2.0 and advertises
five tools. Always use
tools/list as the authoritative schema.
Tool
Use it for
scan_woo_store_readiness
A general public-store audit, score and fix list
preflight_woo_store
Protocol-family evidence for a specific update or release
Three additional tools start, read and claim an owner-authorized Release Gate
run. They require a scoped bearer token and verified store ownership.
The general scanner returns state: UNREADABLE with score: null when it
cannot read the target. Diagnostic accuracy against real merchant stores is
unmeasured. Release Gate settlement is disabled.
GitHub Action
The repository includes a dependency-free Node 24 action. It calls the same
public preflight contract, writes a reason-coded job summary and fails only on
an explicit HOLD. BLOCKED and UNMEASURED remain abstentions.
Add families: woo,robots,jsonld,mcp when the workflow should check only those
four protocol families.
The public endpoint allows three calls per target origin per day and ten calls
per calling IP per day. The action changes nothing on the store.
WordPress plugin
wordpress-plugin/utilityhouse-release-gate-for-woocommerce is version 1.2.1. It provides a useful local
readiness snapshot before connection. Activation neither contacts UtilityHouse
nor creates a schedule. An administrator must make a one-time manual send or
separately opt in to a daily signed aggregate evidence schedule.
The evidence envelope contains version identifiers, opaque store/run fields,
timestamps, nonce, family name and aggregate check state/count. It contains no
customer, order, payment, email, address, product description, URL, credential
or raw log field.
Build the deterministic plugin package with:
bash
npm run build:plugin
Try the local-only snapshot without touching a real store in the
version-pinned WordPress Playground demo.
The disposable site configures no UtilityHouse endpoint and sends no evidence.
REST preflight
POST https://app.utilityhouse.xyz/api/v2/preflight is documented in
mcp-registry/openapi-preflight.yaml. HTTP 200 does not necessarily mean the
target was measurable; inspect the returned state and per-family checks.
Separate commerce surface
An authenticated account may connect read-only WooCommerce credentials to a
store-bound catalog, offer and signed cart-handoff surface at /mcp/{store_id}.
That is a separate product contract and does not grant Release Gate access.
Checkout and payment remain on the merchant's store.
Development
bash
npm install
npm run typecheck
npm test
npm run test:wordpress
This public repository is a review mirror, not the production deployment
source. Its wrangler.toml carries a placeholder database id. Deployment is
performed from the private monorepo.
License scope
action.yml and action/** are licensed under the MIT License in
action/LICENSE.
wordpress-plugin/utilityhouse-release-gate-for-woocommerce/** is licensed GPL-2.0-or-later as declared
in the plugin header and readme.txt.
No license is granted for the remaining server, test, deployment or mirror
files unless a file or subtree states one explicitly. Those files remain
all rights reserved.
The scoped licenses do not apply to the hosted AgentReady service, its data,
trademarks or private deployment configuration.