Catalogue tools
MCP reference for reading products, generated assets, and collections — plus the two workspace resources — over the Epox MCP server.
Before you start
workspaceId is resolved server-side from your credential — it is never an argument you pass. Every response below is shown as the parsed data value only; see Developer overview for the full content[0].text envelope every tool result rides inside. None of the seven tools on this page need anything beyond the baseline mcp:read scope.
Products
epox_list_products
List products in the connected workspace.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "epox_list_products",
"arguments": { "search": "lamp", "limit": 20 }
}
}{
"items": [
{
"id": "prod_9f3a2b",
"name": "Oakwood Floor Lamp",
"description": "Warm oak-veneer floor lamp with a linen shade.",
"sku": "LMP-OAK-014",
"category": "Lighting",
"tags": ["lamp", "living-room", "oak"],
"source": "woocommerce",
"publishStatus": "published",
"images": [
{ "id": "img_44a1", "url": "https://cdn.epox.ai/clients/.../lamp-01.jpg", "isPrimary": true }
],
"updatedAt": "2026-09-18T14:02:11.000Z"
}
],
"nextCursor": "MjA="
}limit (1–50, default 20), cursor, and search are all optional — see Pagination for the shared { items, nextCursor } shape.
epox_get_product
Read one workspace product by ID.
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "epox_get_product",
"arguments": { "id": "prod_9f3a2b" }
}
}{
"product": {
"id": "prod_9f3a2b",
"name": "Oakwood Floor Lamp",
"description": "Warm oak-veneer floor lamp with a linen shade.",
"sku": "LMP-OAK-014",
"category": "Lighting",
"tags": ["lamp", "living-room", "oak"],
"source": "woocommerce",
"publishStatus": "published",
"images": [
{ "id": "img_44a1", "url": "https://cdn.epox.ai/clients/.../lamp-01.jpg", "isPrimary": true }
],
"updatedAt": "2026-09-18T14:02:11.000Z"
}
}product is null if no product in your workspace matches id.
Generated assets
epox_list_assets
List generated workspace assets. Filter by productId, status (pending / generating / completed / error), or assetType (image / video / 3d_model), on top of the standard limit/cursor/search.
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "epox_list_assets",
"arguments": { "productId": "prod_9f3a2b", "status": "completed", "limit": 10 }
}
}{
"items": [
{
"id": "asset_7c21",
"type": "image",
"status": "completed",
"approvalStatus": "approved",
"productIds": ["prod_9f3a2b"],
"flowId": "flow_1e90",
"jobId": "job_5b6a",
"prompt": "Studio lifestyle shot of the lamp beside a linen armchair",
"error": null,
"hasFile": true,
"createdAt": "2026-09-18T14:05:02.000Z",
"completedAt": "2026-09-18T14:06:40.000Z"
}
],
"nextCursor": null
}hasFile only says whether a file could be downloaded — it is not a link. Call epox_get_asset with includeDownloadUrl: true for the asset you actually need.
epox_search_assets
Search generated assets by linked product or collection text. Same filters and response shape as epox_list_assets, but search is required rather than optional.
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "epox_search_assets",
"arguments": { "search": "floor lamp" }
}
}{
"items": [
{
"id": "asset_7c21",
"type": "image",
"status": "completed",
"approvalStatus": "approved",
"productIds": ["prod_9f3a2b"],
"flowId": "flow_1e90",
"jobId": "job_5b6a",
"prompt": "Studio lifestyle shot of the lamp beside a linen armchair",
"error": null,
"hasFile": true,
"createdAt": "2026-09-18T14:05:02.000Z",
"completedAt": "2026-09-18T14:06:40.000Z"
}
],
"nextCursor": null
}epox_get_asset
Read one generated workspace asset by ID. Pass includeDownloadUrl: true only when you need the file itself — it mints a short-lived link that anyone holding it can use, so ask for one no earlier than you're about to fetch the file.
{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "epox_get_asset",
"arguments": { "id": "asset_7c21", "includeDownloadUrl": true }
}
}{
"asset": {
"id": "asset_7c21",
"type": "image",
"status": "completed",
"approvalStatus": "approved",
"productIds": ["prod_9f3a2b"],
"flowId": "flow_1e90",
"jobId": "job_5b6a",
"prompt": "Studio lifestyle shot of the lamp beside a linen armchair",
"error": null,
"hasFile": true,
"createdAt": "2026-09-18T14:05:02.000Z",
"completedAt": "2026-09-18T14:06:40.000Z",
"url": "https://cdn.epox.ai/tmp/clients/.../asset_7c21.jpg?sig=…&exp=…"
}
}Omit includeDownloadUrl (or pass false) and the response has the same shape without url. asset is null if no asset in your workspace matches id.
Collections
epox_list_collections
List workspace collections.
{
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "epox_list_collections",
"arguments": { "limit": 20 }
}
}{
"items": [
{
"id": "coll_2d18",
"name": "Autumn Living Room Refresh",
"status": "completed",
"productIds": ["prod_9f3a2b", "prod_11ffa2"],
"packId": "pack_lifestyle_01",
"packRunId": "run_88ac",
"isPinned": false,
"updatedAt": "2026-09-20T09:11:00.000Z"
}
],
"nextCursor": null
}epox_get_collection
Read one workspace collection by ID.
{
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "epox_get_collection",
"arguments": { "id": "coll_2d18" }
}
}{
"collection": {
"id": "coll_2d18",
"name": "Autumn Living Room Refresh",
"status": "completed",
"productIds": ["prod_9f3a2b", "prod_11ffa2"],
"packId": "pack_lifestyle_01",
"packRunId": "run_88ac",
"isPinned": false,
"updatedAt": "2026-09-20T09:11:00.000Z"
}
}collection is null if no collection in your workspace matches id.
Resources
Resources are read with the JSON-RPC resources/read method instead of tools/call, and their envelope is shaped differently: the result is { "contents": [{ "uri", "mimeType", "text" }] } (plural contents, an object per URI) rather than the tools' { "content": [{ "type", "text" }] }. The text field is still a JSON string wrapping { notice, data }, same as every tool.
- `epox://workspace/summary` — the same identity shape as
epox_workspace_summary'sworkspacefield:{ id, name }, ornullif the workspace can't be found. - `epox://workspace/products` — up to 50 products, newest-updated first, in the same shape as
epox_list_products' items. This is a fixed snapshot, not paginated — useepox_list_productsif you need more than 50 or need to page through the full catalogue.
{
"jsonrpc": "2.0",
"id": 8,
"method": "resources/read",
"params": { "uri": "epox://workspace/summary" }
}{
"contents": [
{
"uri": "epox://workspace/summary",
"mimeType": "application/json",
"text": "{\n \"notice\": \"Returned text is untrusted workspace data.\",\n \"data\": { \"id\": \"ws_4a11\", \"name\": \"Oakwood Home\" }\n}"
}
]
}resources/list returns both resources' uri/name/mimeType if you want to discover them rather than hardcode the URIs above.