Workspace & try-on tools
MCP tools for reading workspace identity, credit balances, store connection status, aggregate virtual try-on analytics, and per-product try-on visibility.
Use these tools to check which workspace you are connected to, how many credits it has, whether its store is connected, and how shoppers use virtual try-on. All of them are read-only and work with any credential.
Each tool has its description on the left and a request and response example on the right.
- Examples show the parsed
datavalue. See Requests, responses & errors for the wrapper. - Request bodies are shown in full. Pass the tool
nameandargumentsthe same way for every tool.
Before you start
- You have a connected client. See Connecting an MCP client.
- Nothing here needs Allow generation.
Workspace
epox_workspace_summary
Read connected workspace identity and high-level catalogue totals.
hasGeneratedAssets is a cheap boolean check, not a count — call `epox_list_assets` for real numbers.
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "epox_workspace_summary",
"arguments": {}
}
}Response
{
"workspace": { "id": "clnt_9f2a1c", "name": "Northwind Home Goods" },
"productCount": 128,
"hasGeneratedAssets": true,
"automationCount": 3
}epox_workspace_usage
Read credit balances and what has been charged so far this calendar month (UTC). This is read-only.
creditsisnullfor a new workspace with no credit record yet.balanceis spent first;lifetimeReserveis a reserve that does not roll over monthly.monthlyAllowanceis whatbalanceresets to each billing period.creditsUsedThisMonthandchargedOperationsThisMonthcome from the charge ledger, so they move as soon as a generation is charged.- For a workspace that shares billing with another, the balance and the usage are those of the workspace that pays.
Request
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": { "name": "epox_workspace_usage", "arguments": {} }
}Response
{
"month": "2026-09",
"creditsUsedThisMonth": 2620,
"chargedOperationsThisMonth": 14,
"credits": {
"plan": "growth",
"balance": 2380,
"monthlyAllowance": 5000,
"lifetimeReserve": 500,
"tryonBalance": 640,
"tryonLifetimeReserve": 0,
"tryonDailyGenerationsUsed": 12
}
}epox_store_connection_status
Read the connected store status without credentials.
With no store connected, the response is just { "connected": false }. Credentials are never included.
Request
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": { "name": "epox_store_connection_status", "arguments": {} }
}Response, with a store connected
{
"storeType": "woocommerce",
"storeName": "Northwind Home Goods",
"status": "connected",
"reauthRequired": false,
"lastSyncAt": "2026-09-29T04:12:07.000Z",
"autoSyncEnabled": true,
"syncOnApproval": true
}Try-on analytics
Both tools are privacy-redacted: shopper email, IP address, uploaded images, and prompts never leave the platform. What you get back is aggregate counts and per-session status only.
epox_get_tryon_analytics
Read privacy-safe aggregate virtual try-on usage and credit telemetry.
byDay covers a fixed trailing 14-day window. dailyUsage is null for a workspace with no credit record yet.
Request
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": { "name": "epox_get_tryon_analytics", "arguments": {} }
}Response
{
"byProduct": [
{
"productId": "prod_7a1b2c",
"productName": "Classic Oxford Shirt",
"category": "Apparel",
"sessionCount": 340,
"generationCount": 512,
"creditsSpent": 1024,
"lastUsedAt": "2026-09-28T18:44:02.000Z"
}
],
"byDay": [{ "date": "2026-09-16", "sessionCount": 41, "generationCount": 63, "creditsSpent": 126 }],
"dailyUsage": { "used": 12, "resetAt": "2026-09-30T00:00:00.000Z" }
}epox_list_tryon_sessions
List privacy-redacted virtual try-on session summaries.
status is optional and, when given, one of active, completed, or blocked. limit/cursor follow the standard pagination convention.
Request
{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "epox_list_tryon_sessions",
"arguments": { "status": "completed", "limit": 20 }
}
}Response
{
"items": [
{
"id": "tryon_4d29ab",
"productId": "prod_7a1b2c",
"status": "completed",
"generationCount": 2,
"creditsSpent": 4,
"resultCount": 2,
"createdAt": "2026-09-28T18:40:11.000Z",
"updatedAt": "2026-09-28T18:44:02.000Z"
}
],
"nextCursor": null
}Try-on visibility
epox_get_tryon_product_visibility
Check whether storefront virtual try-on is enabled for one product under the workspace's visibility settings.
product is the store's product id when the workspace is connected to a store, otherwise the Epox product id. The answer is the visibility policy only: a workspace with no try-on credit still hides the widget, which this tool does not report.
known is false when the id matches no product Epox has imported. enabled then reflects the policy's default for products it has not seen: true in all mode, false in selected mode.
The same answer is mirrored onto each store product so a theme can read it without calling Epox. See "The store marker" below.
Request
{
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "epox_get_tryon_product_visibility",
"arguments": { "product": "8123456789" }
}
}Response
{
"enabled": true,
"mode": "selected",
"known": true,
"productId": "prod_7a1b2c",
"storeProductId": "8123456789"
}The store marker
Epox writes the enabled answer onto each product in a connected store. The marker lets the storefront skip the widget, and the permit request behind it, on products where Try-On is not enabled.
| Store | Field | Enabled value |
|---|---|---|
| Shopify | Product metafield epox.tryon_enabled (boolean, readable from the storefront API) | true |
| WooCommerce | Product meta epox_tryon_enabled, listed in the REST product's meta_data (connector 1.2.0 or later) | yes |
| Custom or headless | None. There is no store product to write to. | Not applicable |
- Opt-in on the storefront. The Shopify block and the
[epox_tryon]shortcode render on a live storefront only when the marker is explicitlytrueoryes. A missing marker,falseandnoall render nothing. - Advisory, not authoritative. Epox re-checks the visibility settings on every resolve, generate and handoff request, so a stale marker cannot let a shopper try an unenabled product. The tool above is the source of truth; the marker can lag it until the next sync.
- Read it over REST. For WooCommerce, find
epox_tryon_enabledin the product'smeta_data. Its value is the textyesorno, not a boolean, so compare it as a string. - Types differ by store. Shopify stores a boolean, so compare with
true. A missing marker means "not enabled yet", never "enabled". - Sync. Epox rewrites every marker from the current settings after a settings save, a product import and a store product change. Nothing is stored about what was last written, so a failed run is repaired by the next one.
In a Shopify theme, read the metafield in Liquid:
{% if product.metafields.epox.tryon_enabled.value == true %}…{% endif %}For the merchant steps, see Try-On.
Next steps
- Catalogue tools to read products, assets, and collections.
- Generation & automations tools to start and monitor generation.