Skip to main content
Glama

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

TableJSON Schema
NameRequiredDescriptionDefault
job_idNoSingle job ID from dsers.product.import. Used for single-push or multi-store mode.
job_ids_jsonNoBatch 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_storeNoTarget store ID or display name from dsers.store.discover. Required when the account has multiple stores.
target_stores_jsonNoMulti-store: JSON array of store IDs or display names. Pushes the same job_id to each listed store. Example: ["Store A", "Store B"]
visibility_modeNoOverride the visibility mode set during prepare. backend_only: draft. sell_immediately: published.
push_options_jsonNoPush 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

  • 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); }
      },
    );

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lofder/dsers-mcp-product'

If you have feedback or need assistance with the MCP directory API, please join our Discord server