dsers.store.push
Push prepared product drafts from DSers to Shopify or Wix stores using single, batch, or multi-store modes to publish imported dropshipping items.
Instructions
Push one or more prepared import drafts to the connected Shopify or Wix store(s). Three modes: (1) Single push — provide job_id + target_store. (2) Batch push — provide job_ids_json with an array of job IDs or objects; takes priority over job_id. (3) Multi-store push — provide job_id + target_stores_json to push one product to multiple stores. Returns per-job results: job_id, status, target_store, visibility_applied, push_options_applied, job_summary, warnings.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No | Single job ID from dsers.product.import. Used for single-push or multi-store mode. | |
| job_ids_json | No | Batch push: JSON array of job ID strings or objects {job_id, target_store?, target_stores?, push_options?, visibility_mode?}. Example: ["job-abc123", {"job_id": "job-def456", "target_store": "My Store"}]. When provided, this takes priority over job_id. | |
| target_store | No | Target store ID or display name from dsers.store.discover. Required when the account has multiple stores. | |
| target_stores_json | No | Multi-store: JSON array of store IDs or display names. Pushes the same job_id to each listed store. Example: ["Store A", "Store B"] | |
| visibility_mode | No | Override the visibility mode set during prepare. backend_only: draft. sell_immediately: published. | |
| push_options_json | No | Push configuration as JSON string. Keys: publish_to_online_store (bool), image_strategy ('selected_only' or 'all_available'), pricing_rule_behavior ('keep_manual' or 'apply_store_pricing_rule'), shipping_profile_name (string — Shopify delivery profile name), auto_inventory_update (bool), auto_price_update (bool), sales_channels (string[]), only_push_specifications (bool). Example: {"image_strategy": "all_available", "shipping_profile_name": "DSers Shipping Profile"} |
Implementation Reference
- src/tools.ts:275-381 (handler)Implementation and registration of the 'dsers.store.push' MCP tool in src/tools.ts. It parses the inputs and calls `svc().confirmPushToStore(payload)`.
"dsers.store.push", { title: "Push Product to Shopify / Wix Store", description: "Push one or more prepared import drafts to the connected Shopify or Wix store(s). " + "Three modes: (1) Single push — provide job_id + target_store. " + "(2) Batch push — provide job_ids_json with an array of job IDs or objects; takes priority over job_id. " + "(3) Multi-store push — provide job_id + target_stores_json to push one product to multiple stores. " + "Returns per-job results: job_id, status, target_store, visibility_applied, push_options_applied, job_summary, warnings.", inputSchema: { job_id: z .string() .optional() .describe( "Single job ID from dsers.product.import. Used for single-push or multi-store mode.", ), job_ids_json: z .string() .optional() .describe( "Batch push: JSON array of job ID strings or objects " + '{job_id, target_store?, target_stores?, push_options?, visibility_mode?}. ' + 'Example: ["job-abc123", {"job_id": "job-def456", "target_store": "My Store"}]. ' + "When provided, this takes priority over job_id.", ), target_store: z .string() .optional() .describe( "Target store ID or display name from dsers.store.discover. Required when the account has multiple stores.", ), target_stores_json: z .string() .optional() .describe( "Multi-store: JSON array of store IDs or display names. Pushes the same job_id to each listed store. " + 'Example: ["Store A", "Store B"]', ), visibility_mode: z .string() .optional() .describe( "Override the visibility mode set during prepare. " + "backend_only: draft. sell_immediately: published.", ), push_options_json: z .string() .optional() .describe( "Push configuration as JSON string. Keys: " + "publish_to_online_store (bool), " + "image_strategy ('selected_only' or 'all_available'), " + "pricing_rule_behavior ('keep_manual' or 'apply_store_pricing_rule'), " + "shipping_profile_name (string — Shopify delivery profile name), " + "auto_inventory_update (bool), auto_price_update (bool), " + "sales_channels (string[]), only_push_specifications (bool). " + 'Example: {"image_strategy": "all_available", "shipping_profile_name": "DSers Shipping Profile"}', ), }, annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true, }, }, async (args) => { try { const payload: Record<string, any> = {}; if (args.job_ids_json) { const parsed = safeJsonParse( args.job_ids_json, "job_ids_json", 'Expected a JSON array of job ID strings or objects. Example: ["job-abc123"]', ); if (parsed.error) return fail(new Error(parsed.error)); payload.job_ids = parsed.value; } else if (args.job_id) { payload.job_id = args.job_id; } if (args.target_store) payload.target_store = args.target_store; if (args.target_stores_json) { const parsed = safeJsonParse( args.target_stores_json, "target_stores_json", 'Expected a JSON array of store names or IDs. Example: ["My Store", "Store B"]', ); if (parsed.error) return fail(new Error(parsed.error)); payload.target_stores = parsed.value; } if (args.visibility_mode) payload.visibility_mode = args.visibility_mode; if (args.push_options_json) { const parsed = safeJsonParse( args.push_options_json, "push_options_json", 'Expected a JSON object. Example: {"image_strategy": "all_available", "auto_inventory_update": true}', ); if (parsed.error) return fail(new Error(parsed.error)); payload.push_options = parsed.value; } return ok(await svc().confirmPushToStore(payload)); } catch (err) { return fail(err); } }, );