MCP Server

AgentReady Woo

xyz.utilityhouse/agentready-woo
Commerce & Retail Developer Tools Public & reachable MCP 2026-07-28

What this MCP does

Audits WooCommerce storefronts for shopping-agent readiness and runs owner-authorized release verification gates.

claim_woo_release_result
Claim a completed Release Gate result once. Requires release:claim; replay is never billable.
Input schema
{'type': 'object', 'required': ['run_id'], 'properties': {'run_id': {'type': 'string', 'maxLength': 100, 'minLength': 8, '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.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'oneOf': [{'type': 'object', 'required': ['packet', 'delivery', 'billable_eligibility', 'settlement'], 'properties': {'packet': {'oneOf': [{'type': 'object', 'required': ['schema_version', 'run_id', 'state', 'checks', 'protocol_bundles', 'coverage', 'unknowns', 'observed_at', 'digest'], 'properties': {'state': {'enum': ['ACCEPTED', 'REJECTED', 'PARTIAL', 'BLOCKED', 'UNMEASURED', 'INFRA_ERROR', 'CANCELED'], 'type': 'string'}, 'checks': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'family', 'state', 'evidence'], 'properties': {'id': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'state': {'enum': ['PASS', 'FAIL', 'BLOCKED', 'NOT_APPLICABLE', 'UNMEASURED'], 'type': 'string'}, 'family': {'enum': ['woo', 'robots', 'jsonld', 'mcp', 'ucp', 'acp'], 'type': 'string'}, 'evidence': {'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'safe': {'type': 'boolean'}, 'count': {'type': 'number'}, 'search': {'type': 'boolean'}, 'status': {'type': 'number'}, 'allowed': {'type': 'boolean'}, 'training': {'type': 'boolean'}, 'authorized': {'type': 'boolean'}, 'mime_valid': {'type': 'boolean'}, 'page_count': {'type': 'number'}, 'tool_count': {'type': 'number'}, 'user_fetch': {'type': 'boolean'}, 'offer_pages': {'type': 'number'}, 'api_declared': {'type': 'boolean'}, 'sample_count': {'type': 'number'}, 'source_count': {'type': 'number'}, 'feed_declared': {'type': 'boolean'}, 'product_pages': {'type': 'number'}, 'sampled_pages': {'type': 'number'}, 'reviewed_tools': {'type': 'number'}, 'catalogue_total': {'type': ['number', 'null']}, 'version_matches': {'type': 'boolean'}, 'capability_count': {'type': 'number'}, 'protocol_version': {'type': 'string'}, 'sampled_identifiers': {'type': 'number'}, 'conflicting_identifiers': {'type': 'number'}}, 'additionalProperties': False}, 'reasonCode': {'enum': ['TARGET_INVALID', 'TARGET_PRIVATE', 'TARGET_REDIRECT_UNSAFE', 'TARGET_DNS_REBIND', 'TARGET_TIMEOUT', 'TARGET_BYTES_EXCEEDED', 'TARGET_RATE_LIMITED', 'ROBOTS_BLOCKED', 'WOO_API_UNAVAILABLE', 'WOO_SAMPLE_EMPTY', 'JSONLD_PRODUCT_MISSING', 'JSONLD_OFFER_MISSING', 'DISCOVERY_UNDECLARED', 'PROTOCOL_VERSION_UNSUPPORTED', 'PROTOCOL_SCHEMA_INVALID', 'MCP_INITIALIZE_FAILED', 'MCP_TOOLS_LIST_FAILED', 'MCP_TOOL_ANNOTATION_UNSAFE', 'MCP_TOOL_CALL_FAILED', 'UCP_PROFILE_INVALID', 'ACP_PROFILE_INVALID', 'CROSS_SURFACE_CONFLICT', 'OWNERSHIP_REQUIRED', 'OWNERSHIP_EXPIRED', 'ACTIVE_FLOW_FORBIDDEN', 'EVIDENCE_INVALID', 'INFRA_PERSISTENCE_FAILED', 'UNMEASURED_SOURCE', 'CONNECTION_UNVERIFIABLE', 'INVALID_MIME', 'INVALID_JSON', 'PAGINATION_DRIFT', 'CANCELED_BY_CALLER'], 'type': 'string'}}, 'additionalProperties': False}}, 'digest': {'type': 'string', 'pattern': '^[a-f0-9]{64}$'}, 'run_id': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{8,100}$'}, 'coverage': {'type': 'object', 'required': ['requested_families', 'completed_families', 'sample_size', 'catalogue_total'], 'properties': {'sample_size': {'type': 'integer', 'minimum': 0}, 'catalogue_total': {'type': ['integer', 'null'], 'minimum': 0}, 'completed_families': {'type': 'array', 'items': {'enum': ['woo', 'robots', 'jsonld', 'mcp', 'ucp', 'acp'], 'type': 'string'}}, 'requested_families': {'type': 'array', 'items': {'enum': ['woo', 'robots', 'jsonld', 'mcp', 'ucp', 'acp'], 'type': 'string'}}}, 'additionalProperties': False}, 'unknowns': {'type': 'array', 'items': {'enum': ['TARGET_INVALID', 'TARGET_PRIVATE', 'TARGET_REDIRECT_UNSAFE', 'TARGET_DNS_REBIND', 'TARGET_TIMEOUT', 'TARGET_BYTES_EXCEEDED', 'TARGET_RATE_LIMITED', 'ROBOTS_BLOCKED', 'WOO_API_UNAVAILABLE', 'WOO_SAMPLE_EMPTY', 'JSONLD_PRODUCT_MISSING', 'JSONLD_OFFER_MISSING', 'DISCOVERY_UNDECLARED', 'PROTOCOL_VERSION_UNSUPPORTED', 'PROTOCOL_SCHEMA_INVALID', 'MCP_INITIALIZE_FAILED', 'MCP_TOOLS_LIST_FAILED', 'MCP_TOOL_ANNOTATION_UNSAFE', 'MCP_TOOL_CALL_FAILED', 'UCP_PROFILE_INVALID', 'ACP_PROFILE_INVALID', 'CROSS_SURFACE_CONFLICT', 'OWNERSHIP_REQUIRED', 'OWNERSHIP_EXPIRED', 'ACTIVE_FLOW_FORBIDDEN', 'EVIDENCE_INVALID', 'INFRA_PERSISTENCE_FAILED', 'UNMEASURED_SOURCE', 'CONNECTION_UNVERIFIABLE', 'INVALID_MIME', 'INVALID_JSON', 'PAGINATION_DRIFT', 'CANCELED_BY_CALLER'], 'type': 'string'}}, 'observed_at': {'type': 'string', 'format': 'date-time'}, 'schema_version': {'const': '2026-09-06'}, 'protocol_bundles': {'type': 'array', 'items': {'type': 'object', 'required': ['family', 'release', 'sourceSha256', 'vectorSha256', 'builtAt'], 'properties': {'family': {'enum': ['mcp', 'ucp', 'acp'], 'type': 'string'}, 'builtAt': {'type': 'string', 'format': 'date-time'}, 'release': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'sourceSha256': {'type': 'string', 'pattern': '^[a-f0-9]{64}$'}, 'vectorSha256': {'type': 'string', 'pattern': '^[a-f0-9]{64}$'}}, 'additionalProperties': False}}}, 'additionalProperties': False}, {'type': 'null'}]}, 'delivery': {'enum': ['FIRST', 'REPLAY'], 'type': 'string'}, 'settlement': {'const': 'disabled'}, 'billable_eligibility': {'enum': ['ELIGIBLE_ON_FIRST_DELIVERY', 'NOT_BILLABLE'], 'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['code'], 'properties': {'code': {'enum': ['AUTH_REQUIRED', 'STORE_NOT_FOUND', 'OWNERSHIP_REQUIRED', 'WORKFLOW_UNAVAILABLE', 'WORKFLOW_DISPATCH_FAILED', 'INVALID_INPUT', 'RUN_NOT_FOUND', 'RESULT_NOT_READY', 'EVIDENCE_REQUIRED'], 'type': 'string'}, 'state': {'enum': ['BLOCKED', 'UNMEASURED'], 'type': 'string'}, 'settlement': {'const': 'disabled'}}, 'additionalProperties': False}]}
get_woo_release_verification
Get a Release Gate run owned by the bearer token account. Requires release:read.
Read only
Input schema
{'type': 'object', 'required': ['run_id'], 'properties': {'run_id': {'type': 'string', 'maxLength': 100, 'minLength': 8, '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.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'oneOf': [{'type': 'object', 'required': ['run_id', 'state', 'terminal_state', 'evidence_digest'], 'properties': {'state': {'enum': ['QUEUED', 'RUNNING', 'RETRYING', 'TERMINAL', 'CANCELED'], 'type': 'string'}, 'run_id': {'type': 'string', 'maxLength': 100, 'minLength': 8}, 'terminal_state': {'type': ['string', 'null']}, 'evidence_digest': {'type': ['string', 'null']}}, 'additionalProperties': False}, {'type': 'object', 'required': ['code'], 'properties': {'code': {'enum': ['AUTH_REQUIRED', 'STORE_NOT_FOUND', 'OWNERSHIP_REQUIRED', 'WORKFLOW_UNAVAILABLE', 'WORKFLOW_DISPATCH_FAILED', 'INVALID_INPUT', 'RUN_NOT_FOUND', 'RESULT_NOT_READY', 'EVIDENCE_REQUIRED'], 'type': 'string'}, 'state': {'enum': ['BLOCKED', 'UNMEASURED'], 'type': 'string'}, 'settlement': {'const': 'disabled'}}, '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.
Read only Open world
Input schema
{'type': 'object', 'required': ['store_origin'], 'properties': {'store_origin': {'type': 'string', 'maxLength': 2048, 'minLength': 8, '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', 'items': {'enum': ['woo', 'robots', 'jsonld', 'mcp', 'ucp', 'acp'], 'type': 'string'}, 'maxItems': 6, 'minItems': 1, 'description': 'Public protocol families to inspect. Omit to check all supported families; use only woo, robots, jsonld, mcp, ucp, or acp.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['kind', 'state', 'store_origin', 'requested_families', 'sample_seed', 'sample_size', 'catalogue_total', 'checks', 'protocol_bundles', 'observed_at', 'unknowns'], 'properties': {'kind': {'const': 'preflight'}, 'state': {'enum': ['ACCEPTED', 'REJECTED', 'PARTIAL', 'BLOCKED', 'UNMEASURED'], 'type': 'string'}, 'checks': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'family', 'state', 'evidence'], 'properties': {'id': {'type': 'string'}, 'state': {'enum': ['PASS', 'FAIL', 'BLOCKED', 'NOT_APPLICABLE', 'UNMEASURED'], 'type': 'string'}, 'family': {'enum': ['woo', 'robots', 'jsonld', 'mcp', 'ucp', 'acp'], 'type': 'string'}, 'evidence': {'type': 'object'}, 'reasonCode': {'enum': ['TARGET_INVALID', 'TARGET_PRIVATE', 'TARGET_REDIRECT_UNSAFE', 'TARGET_DNS_REBIND', 'TARGET_TIMEOUT', 'TARGET_BYTES_EXCEEDED', 'TARGET_RATE_LIMITED', 'ROBOTS_BLOCKED', 'WOO_API_UNAVAILABLE', 'WOO_SAMPLE_EMPTY', 'JSONLD_PRODUCT_MISSING', 'JSONLD_OFFER_MISSING', 'DISCOVERY_UNDECLARED', 'PROTOCOL_VERSION_UNSUPPORTED', 'PROTOCOL_SCHEMA_INVALID', 'MCP_INITIALIZE_FAILED', 'MCP_TOOLS_LIST_FAILED', 'MCP_TOOL_ANNOTATION_UNSAFE', 'MCP_TOOL_CALL_FAILED', 'UCP_PROFILE_INVALID', 'ACP_PROFILE_INVALID', 'CROSS_SURFACE_CONFLICT', 'OWNERSHIP_REQUIRED', 'OWNERSHIP_EXPIRED', 'ACTIVE_FLOW_FORBIDDEN', 'EVIDENCE_INVALID', 'INFRA_PERSISTENCE_FAILED', 'UNMEASURED_SOURCE', 'CONNECTION_UNVERIFIABLE', 'INVALID_MIME', 'INVALID_JSON', 'PAGINATION_DRIFT', 'CANCELED_BY_CALLER'], 'type': 'string'}}, 'additionalProperties': False}}, 'unknowns': {'type': 'array', 'items': {'enum': ['TARGET_INVALID', 'TARGET_PRIVATE', 'TARGET_REDIRECT_UNSAFE', 'TARGET_DNS_REBIND', 'TARGET_TIMEOUT', 'TARGET_BYTES_EXCEEDED', 'TARGET_RATE_LIMITED', 'ROBOTS_BLOCKED', 'WOO_API_UNAVAILABLE', 'WOO_SAMPLE_EMPTY', 'JSONLD_PRODUCT_MISSING', 'JSONLD_OFFER_MISSING', 'DISCOVERY_UNDECLARED', 'PROTOCOL_VERSION_UNSUPPORTED', 'PROTOCOL_SCHEMA_INVALID', 'MCP_INITIALIZE_FAILED', 'MCP_TOOLS_LIST_FAILED', 'MCP_TOOL_ANNOTATION_UNSAFE', 'MCP_TOOL_CALL_FAILED', 'UCP_PROFILE_INVALID', 'ACP_PROFILE_INVALID', 'CROSS_SURFACE_CONFLICT', 'OWNERSHIP_REQUIRED', 'OWNERSHIP_EXPIRED', 'ACTIVE_FLOW_FORBIDDEN', 'EVIDENCE_INVALID', 'INFRA_PERSISTENCE_FAILED', 'UNMEASURED_SOURCE', 'CONNECTION_UNVERIFIABLE', 'INVALID_MIME', 'INVALID_JSON', 'PAGINATION_DRIFT', 'CANCELED_BY_CALLER'], 'type': 'string'}}, 'observed_at': {'type': 'string', 'format': 'date-time'}, 'sample_seed': {'type': 'string'}, 'sample_size': {'type': 'integer', 'minimum': 0}, 'store_origin': {'type': 'string', 'format': 'uri'}, 'catalogue_total': {'type': ['integer', 'null'], 'minimum': 0}, 'protocol_bundles': {'type': 'array', 'items': {'type': 'object'}}, 'requested_families': {'type': 'array', 'items': {'enum': ['woo', 'robots', 'jsonld', 'mcp', 'ucp', 'acp'], 'type': 'string'}}}, 'additionalProperties': False}
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.
Read only Open world
Input schema
{'type': 'object', 'oneOf': [{'not': {'required': ['demo']}, 'required': ['store_url']}, {'not': {'required': ['store_url']}, 'required': ['demo']}], 'properties': {'demo': {'type': 'boolean', 'const': True, 'description': 'Run a deterministic synthetic demonstration instead of scanning a live store.'}, 'store_url': {'type': 'string', 'format': 'uri', 'maxLength': 200, 'description': 'Public HTTPS origin of the WooCommerce storefront, for example https://shop.example.com'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['state', 'score', 'grade', 'unreadable', 'checks', 'product_count_sampled', 'recommendations', 'scanned_at', 'billable', 'evidence_status'], 'properties': {'grade': {'type': ['string', 'null']}, 'score': {'type': ['number', 'null'], 'maximum': 100, 'minimum': 0}, 'state': {'enum': ['SCORED', 'UNREADABLE'], 'type': 'string', 'description': 'UNREADABLE is an abstention, not a verdict about the store.'}, 'checks': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'label', 'ok', 'weight'], 'properties': {'id': {'type': 'string'}, 'ok': {'type': 'boolean'}, 'label': {'type': 'string'}, 'weight': {'type': 'number'}}, 'additionalProperties': False}}, 'billable': {'const': False}, 'scanned_at': {'type': 'integer'}, 'unreadable': {'type': ['object', 'null'], 'required': ['reason', 'detail'], 'properties': {'detail': {'type': 'string'}, 'reason': {'type': 'string'}}, 'description': 'Why nothing could be read. Null when the scan produced a score.', 'additionalProperties': False}, 'evidence_status': {'enum': ['LIVE_PUBLIC_SCAN', 'SYNTHETIC_DEMO'], 'type': 'string'}, 'recommendations': {'type': 'array', 'items': {'type': 'string'}}, 'product_count_sampled': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}
start_woo_release_verification
Start an ownership-authorized Release Gate run. Requires a bearer token with release:start.
Open world
Input schema
{'type': 'object', 'required': ['store_id', 'mode', 'requested_families', 'idempotency_key'], 'properties': {'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.'}, 'store_id': {'type': 'string', 'maxLength': 100, 'minLength': 8, 'description': 'AgentReady store identifier owned by the authenticated account. Use the stored identifier, never a store URL, secret, or customer value.'}, 'baseline_run_id': {'type': 'string', 'maxLength': 100, 'minLength': 8, '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', 'maxLength': 200, 'minLength': 16, '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.'}, 'requested_families': {'type': 'array', 'items': {'enum': ['woo', 'robots', 'jsonld', 'mcp', 'ucp', 'acp'], 'type': 'string'}, 'maxItems': 6, 'minItems': 1, 'description': 'One or more protocol families the owner authorizes this Release Gate run to verify: woo, robots, jsonld, mcp, ucp, or acp.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'oneOf': [{'type': 'object', 'required': ['run_id', 'state', 'settlement'], 'properties': {'state': {'enum': ['QUEUED', 'RUNNING', 'RETRYING', 'TERMINAL', 'CANCELED'], 'type': 'string'}, 'run_id': {'type': 'string', 'maxLength': 100, 'minLength': 8}, 'settlement': {'const': 'disabled'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['code', 'state', 'settlement'], 'properties': {'code': {'const': 'EVIDENCE_REQUIRED'}, 'state': {'enum': ['BLOCKED', 'UNMEASURED'], 'type': 'string'}, 'settlement': {'const': 'disabled'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['code'], 'properties': {'code': {'enum': ['AUTH_REQUIRED', 'STORE_NOT_FOUND', 'OWNERSHIP_REQUIRED', 'WORKFLOW_UNAVAILABLE', 'WORKFLOW_DISPATCH_FAILED', 'INVALID_INPUT', 'RUN_NOT_FOUND', 'RESULT_NOT_READY', 'EVIDENCE_REQUIRED'], 'type': 'string'}}, 'additionalProperties': False}]}
Added
claim_woo_release_result
Sept. 17, 2026, 12:55 p.m.
Added
get_woo_release_verification
Sept. 17, 2026, 12:55 p.m.
Added
start_woo_release_verification
Sept. 17, 2026, 12:55 p.m.
Added
preflight_woo_store
Sept. 17, 2026, 12:55 p.m.
Added
scan_woo_store_readiness
Sept. 17, 2026, 12:55 p.m.