dsers.product.visibility
Switch product job visibility between draft and published modes before pushing to storefront. Control when imported products become visible to shoppers.
Instructions
Change the visibility mode of a prepared job before pushing it to the store. Call this between dsers.product.import and dsers.store.push to switch between draft and published. Returns: job_id, status, visibility_mode.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID returned by dsers.product.import. | |
| visibility_mode | Yes | New visibility mode. backend_only: save as draft, not visible to shoppers. sell_immediately: publish to storefront. |
Implementation Reference
- src/service.ts:318-334 (handler)The actual logic for setting product visibility, which updates the job's visibility_mode and persists it.
async setProductVisibility( payload: Record<string, any>, ): Promise<Record<string, any>> { const jobId = String(payload.job_id ?? "").trim(); const visibilityMode = String(payload.visibility_mode ?? "").trim(); if (!jobId || !visibilityMode) { throw new Error( "job_id and visibility_mode are both required. " + "Valid visibility_mode values: backend_only, sell_immediately.", ); } const job = this.store.load(jobId); job.visibility_mode = visibilityMode; job.updated_at = utcNow(); this.store.save(jobId, job); return { job_id: jobId, status: job.status, visibility_mode: visibilityMode }; } - src/tools.ts:242-272 (registration)Registration of the 'dsers.product.visibility' tool, mapping the input parameters to the service handler.
server.registerTool( "dsers.product.visibility", { title: "Shopify / Wix Product Visibility Toggle", description: "Change the visibility mode of a prepared job before pushing it to the store. " + "Call this between dsers.product.import and dsers.store.push to switch between draft and published. " + "Returns: job_id, status, visibility_mode.", inputSchema: { job_id: z .string() .describe("Job ID returned by dsers.product.import."), visibility_mode: z.string().describe( "New visibility mode. " + "backend_only: save as draft, not visible to shoppers. " + "sell_immediately: publish to storefront.", ), }, annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false, }, }, async ({ job_id, visibility_mode }) => { try { return ok(await svc().setProductVisibility({ job_id, visibility_mode })); } catch (err) { return fail(err); } }, );