Catalogue tools
MCP reference for reading products, generated assets, collections, and the image and video models — plus the two workspace resources — over the Epox MCP server.
Use these tools to read your products, generated assets, collections, and the models you can generate with. Each tool has its description on the left and a request and response example on the right.
- All nine need only read access.
- Examples show the parsed
datavalue. See Requests, responses & errors for the wrapper.
Before you start
- You have a connected client. See Connecting an MCP client.
- Lists follow the shared pagination rules:
limit(1 to 50),cursor, and anextCursorin the reply.
Products
epox_list_products
List products in the connected workspace.
limit (1–50, default 20), cursor, and search are all optional. List rows name each source photo by id only; call epox_get_product for a URL you can fetch.
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "epox_list_products",
"arguments": { "search": "lamp", "limit": 20 }
}
}Response
{
"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", "isPrimary": true }],
"updatedAt": "2026-09-18T14:02:11.000Z"
}
],
"nextCursor": "MjA=",
"total": 34
}epox_get_product
Read one workspace product by ID, with a fetchable url for each source photo. The image id is what you pass as primaryId in `epox_start_pack_generation`'s sourceImages.
product is null if no product in your workspace matches id. An image's url is null when its file isn't stored under your workspace.
Request
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "epox_get_product",
"arguments": { "id": "prod_9f3a2b" }
}
}Response
{
"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://example.com/images/lamp-01.jpg", "isPrimary": true }],
"updatedAt": "2026-09-18T14:02:11.000Z"
}
}Generated assets
epox_list_assets
List generated workspace assets. Filter by productId, flowId (only the assets filed in that flow, to read back a run grouped with `epox_create_session`), status (pending / generating / completed / error), or assetType (image / video / 3d_model), on top of the standard limit/cursor/search.
totalis the number of assets the filters match across every page, so "how many finished images does this product have" is one call withstatus: "completed"andassetType: "image"— no paging and adding.hasFileonly says whether a file could be downloaded — it is not a link.- Call
epox_get_assetwithincludeDownloadUrl: truefor the asset you actually need.
Request
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "epox_list_assets",
"arguments": { "productId": "prod_9f3a2b", "status": "completed", "limit": 10 }
}
}Response
{
"items": [
{
"id": "asset_7c21",
"type": "image",
"status": "completed",
"approvalStatus": "approved",
"productIds": ["prod_9f3a2b"],
"flowId": "flow_1e90",
"jobId": "job_5b6a",
"error": null,
"hasFile": true,
"createdAt": "2026-09-18T14:05:02.000Z",
"completedAt": "2026-09-18T14:06:40.000Z"
}
],
"nextCursor": null,
"total": 1
}epox_search_assets
Search generated assets by linked product or collection text. Same filters (including flowId) and response shape as epox_list_assets, but search is required rather than optional.
Request
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "epox_search_assets",
"arguments": { "search": "floor lamp" }
}
}Response
{
"items": [
{
"id": "asset_7c21",
"type": "image",
"status": "completed",
"approvalStatus": "approved",
"productIds": ["prod_9f3a2b"],
"flowId": "flow_1e90",
"jobId": "job_5b6a",
"error": null,
"hasFile": true,
"createdAt": "2026-09-18T14:05:02.000Z",
"completedAt": "2026-09-18T14:06:40.000Z"
}
],
"nextCursor": null,
"total": 1
}epox_get_asset
Read one generated workspace asset by ID, including the prompt it was generated from. Pass includeDownloadUrl: true only when you need the file itself — it returns a link that expires after 15 minutes and that anyone holding it can use, so request it only when you are about to fetch the file.
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.
Request
{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "epox_get_asset",
"arguments": { "id": "asset_7c21", "includeDownloadUrl": true }
}
}Response
{
"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://…/asset_7c21.jpg?…"
}
}Collections
epox_list_collections
List workspace collections.
Request
{
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "epox_list_collections",
"arguments": { "limit": 20 }
}
}Response
{
"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,
"total": 1
}epox_get_collection
Read one workspace collection by ID.
collection is null if no collection in your workspace matches id.
Request
{
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "epox_get_collection",
"arguments": { "id": "coll_2d18" }
}
}Response
{
"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"
}
}Models
epox_list_models
- List the image and video generation models this workspace can use, with their resolutions, durations, credit prices and capabilities.
- It needs only
mcp:read. - A model's
idis what you pass asimageModeltoepox_generate_imageandepox_start_generation, or asmodeltoepox_start_video. - Only models your workspace is offered are listed, which is not the same as every model Epox knows.
Arguments
- `type` (optional) —
imageorvideo. Omit it for both.
defaultsholds the model used when you pass none: the workspace's pinned default if it has one, otherwise Epox's.- With
type: "video"onlyvideois returned and withtype: "image"onlyimage. - Each image model carries
id,name,description,tier,speed,quality,tags,resolutions({ resolution, creditsPerImage }for each) andmaxReferenceImages. - Each video model carries the fields above, with
creditsPerClippriced for one clip without audio (models that price audio can cost more with sound on). - A price is
nullwhen none is configured. maxShotsis0for a model that isn't multi-shot, andmaxReferenceImagesisnullon an image model when no cap is set.
Request
{
"jsonrpc": "2.0",
"id": 9,
"method": "tools/call",
"params": { "name": "epox_list_models", "arguments": { "type": "video" } }
}Response
{
"defaults": { "image": "image_model_default", "video": "video_model_default" },
"video": [
{
"id": "video_model_default",
"name": "Example video model",
"description": "Short description of the model.",
"tier": "standard",
"speed": "medium",
"quality": "high",
"tags": ["Multi-shot"],
"options": [
{ "resolution": "720p", "duration": "5s", "creditsPerClip": 40 },
{ "resolution": "1080p", "duration": "5s", "creditsPerClip": 70 }
],
"supportsEndFrame": true,
"multiShot": true,
"maxShots": 6,
"maxReferenceImages": 4,
"maxReferenceVideos": 0
}
]
}epox_recommend_model
- Rank the models this workspace can use for a goal, so you don't have to read the whole
epox_list_modelslist. - It needs only
mcp:read. - Ranking is plain: it reads each model's quality, speed, price and capabilities from the same data as
epox_list_models, and gives a reason for each pick.
Arguments
- `type` (string, required) —
imageorvideo. - `needs` (array, optional, up to 6) — capabilities the model must have. Image:
text_rendering,reference_images,editing. Video:audio,multi_shot,end_frame,reference_images. A model missing any need is left out. - `priority` (optional) —
quality(the default),speedorcost. - `limit` (optional integer, 1–5) — how many to return. Defaults to 3.
recommendationsentries are{ id, name, reason }; passidasmodeltoepox_start_videoorimageModeltoepox_generate_image.excludedForMissingCapabilitiescounts the models dropped for lacking a need.- When nothing qualifies,
recommendationsis empty and anotesuggests dropping a need or callingepox_list_models. - The example's
reasontext is illustrative; read the real one from the response.
Request
{
"jsonrpc": "2.0",
"id": 10,
"method": "tools/call",
"params": {
"name": "epox_recommend_model",
"arguments": { "type": "video", "needs": ["audio", "end_frame"], "priority": "quality", "limit": 2 }
}
}Response
{
"type": "video",
"recommendations": [
{ "id": "video_model_default", "name": "Example video model", "reason": "Generates sound and accepts an end frame; ultra quality." }
],
"excludedForMissingCapabilities": 3
}Resources
Resources are fixed, read-only snapshots fetched with resources/read instead of tools/call. Call resources/list to discover them.
- `epox://workspace/summary` is the workspace's
{ id, name }. - `epox://workspace/products` is up to 50 products, most recently updated first, in the same shape as
epox_list_productsitems. It is not paginated; useepox_list_productsto page through more.
{
"jsonrpc": "2.0",
"id": 8,
"method": "resources/read",
"params": { "uri": "epox://workspace/summary" }
}The result is { "contents": [{ "uri", "mimeType", "text" }] }, where text is a JSON string holding { notice, data }.
Next steps
- Generation & automations tools to create products, start a generation for them and follow its progress.
- Workspace & try-on tools for credits and try-on analytics.