Skip to content
Agentmart
Submit a tool

ApparelHub

Run a custom-merch store from an agent: design, build products, list on every channel, fulfill.

Connector by ApparelHub-AI · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)Remote (HTTP)
Write a review

Chalk Labs

Need help deploying ApparelHub?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, VS Code, Codex, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/apparelhub-ai-apparelhub-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Remote endpoint

  • https://mcp.apparelhub.ai Remote (HTTP)

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Run a custom-merch store from an agent: design, build products, list on every channel, fulfill.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
54 read · 45 write · 13 delete · 15 not yet classified
Secrets
1 (API keys, tokens or passwords)
Install scripts
None found
Runs as
Node.js package

Tools by what they do 127

Read from the source code; the running server may list different tools.

Read 54 · Look things up without changing anything.

  • analytics_breakdown
  • analytics_ops
  • analytics_portfolio
  • analytics_summary
  • analytics_timeseries
  • analyze_what_works
  • browse_catalog
  • cascade_price_change
  • channel_coverage
  • channel_opportunities
  • channel_performance
  • check_connection_status
Show 42 more tools
  • check_design_compliance
  • check_design_move
  • check_fulfillment_issue
  • check_order_status
  • check_product_move
  • check_setup_readiness
  • check_workspace_deletion
  • describe_listing_attributes
  • estimate_order_costs
  • find_garments
  • generate_listing_image
  • get_account_overview
  • get_api_reference
  • get_catalog_import_run
  • get_collection
  • get_design_collection
  • get_garment_details
  • get_order_details
  • get_orders_summary
  • get_role_matrix
  • get_store_settings
  • import_size_measurements
  • list_account_members
  • list_catalog_providers
  • list_collections
  • list_connectable_providers
  • list_fulfillment_issues
  • list_invites
  • list_my_designs
  • list_my_orders
  • list_my_products
  • list_my_stores
  • list_my_workspaces
  • list_order_holds
  • list_pending_fulfillments
  • list_tracked_listings
  • listing_changes
  • recommend_garment
  • recover_from_outage
  • verify_design_quality
  • verify_design_text
  • verify_mockup_quality

Write 45 · Create, change, send or run things.

  • accept_invite
  • activate_store
  • add_order_item
  • add_products_to_collection
  • add_variants
  • approve_order
  • approve_order_hold
  • archive_design
  • archive_product
  • assign_workspace_member
  • confirm_order
  • create_collection
Show 33 more tools
  • create_product
  • create_store
  • create_workspace
  • hold_order
  • import_channel_catalog
  • invite_member
  • mark_order_no_payment
  • move_design_to_workspace
  • move_product_to_workspace
  • move_store_to_workspace
  • reconcile_order
  • record_order_payment
  • resend_invite
  • resolve_fulfillment_issue
  • restore_design
  • restore_product
  • set_channel_settings
  • set_listing_attributes
  • set_order_payment_method
  • set_prices_by_margin
  • set_product_images
  • start_channel_connect
  • submit_order_to_fulfillment
  • sync_collection
  • sync_orders
  • sync_to_channel
  • sync_to_fulfillment
  • unarchive_store
  • update_collection
  • update_product
  • update_store_settings
  • update_workspace
  • upload_design

Delete 13 · Delete, drop, revoke or wipe things.

  • archive_store
  • cancel_order
  • delete_collection
  • delete_design
  • delete_product
  • delete_workspace
  • remove_member
  • remove_order_item
  • remove_product_from_collection
  • revoke_invite
  • unapprove_order
  • unassign_workspace_member
Show 1 more tools
  • unsync_from_channel

Not yet classified 15 · We could not tell from the name and description.

  • api_request
  • auto_optimize_listings
  • connect_fulfillment_provider
  • connect_sales_channel
  • copy_design_to_workspace
  • copy_product_to_workspace
  • design_apparel
  • diagnose_tiktok_listings
  • fit_aspect
  • generate_image
  • iterate_design
  • process_transparency
Show 3 more tools
  • report_fulfillment_issue
  • request_hold_changes
  • ship_product

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • APPARELHUB_API_KEY

Network hosts it talks to 5

  • api.apparelhub.ai · found in code
  • apparelhub.ai · found in code
  • github.com · found in code
  • glama.ai · found in code
  • mcp.apparelhub.ai · found in remote endpoint, install command, code

Files it touches

  • Any path the agent passes to its tools

Tools (127)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • accept_invite

    Accept a pending invite by token. The authenticated key-holder’s email must match the invite. Works on any tier and with a workspace-scoped key (the invitee side). Returns the account + workspace you were added to.

  • activate_store

    Activate a store so it can list products and ingest orders. Requires at least one fulfillment provider (e.g. Printful) to be connected first — otherwise this fails. Use after create_store or unarchive_store once a provider is connected.

  • add_order_item

    Add an item (e.g. another variant of the same product) to a DRAFT order, before it is confirmed to production. Optionally set custom_price (the new item's per-unit retail price) and/or shipping_cost (the order-level retail shipping the customer pays — NOT the provider's cost); omit them and the variant price / existing shipping are kept. Only works while the order is in "draft" status. Printful and Gelato edit the existing provider draft IN PLACE; Printify has no edit API, so it CANCELS + RE-CREATES the order — the result then carries edit_method="recreated" and a new fulfillment_external_id. …

  • add_products_to_collection

    Add one or more products (by uuid) to a collection. The products must already be associated with the store. If the collection is synced to a channel, the products are added there too.

  • add_variants

    Add variants to an existing product (split primitive). Resolves provider_variant_ids by color+size from the product's provider options (or pass them explicitly). Warns on the AQUA-vs-Navy trap. Variants must exist before syncing.

  • analytics_breakdownread-only

    Aggregate KPIs broken down by one dimension: product_type, sales_channel, fulfillment_provider, product, variant, or hold_reason. Rows are sorted for display; overflow past the limit folds into an "(everything else)" row so totals still reconcile. Requires an Advanced Analytics plan. Read-only.

  • analytics_opsread-only

    Operational health for a date range: fulfillment velocity (payment→submit→ship→deliver averages), order counts, and cancellation / refund / hold rates, plus a hold-reason breakdown. Requires an Advanced Analytics plan. Read-only.

  • analytics_portfolioread-only

    Cross-client portfolio: per-workspace (per-client) KPIs plus rolled-up totals — the agency view. Groups store rollups by each store's current workspace over every workspace you can view analytics in. Requires an agency (Enterprise) account with Advanced Analytics; other accounts get a feature_unavailable error. Read-only.

  • analytics_summaryread-only

    Headline order/merch KPIs for a date range (gross revenue, orders, units, AOV, COGS, gross profit, margin, cancel/refund/hold rates, fulfillment velocity) plus prior-period deltas. Defaults to the last 30 days. Requires an Advanced Analytics plan (Professional or Enterprise). Read-only.

  • analytics_timeseriesread-only

    KPI trend series over a date range, bucketed by day, week, or month (zero-filled). Each bucket carries gross revenue, gross profit, COGS, order count, units, AOV, average margin, and margin coverage. Requires an Advanced Analytics plan. Read-only.

  • analyze_what_worksread-only

    Surface insights from the merchant's own products + orders: best sellers, top channel, average order value. Read-only. Own-account signal (cross-merchant intelligence is a future feature).

  • api_request

    Escape hatch: make an authenticated request to any ApparelHub agent API endpoint under /agents/v1, as the connected account. PREFER a dedicated tool when one exists (they return clean, guarded results) — use this only for capabilities no tool covers. Call get_api_reference first to find the right path. `path` is relative (e.g. "orders", "store/<uuid>/settings"); no full URLs. Scoped to the account's own permissions.

  • approve_order

    Approve an order that is awaiting approval, releasing it for fulfillment. For sales-channel (webhook) orders this also auto-submits the order to the fulfillment provider (Printful/Printify). ALWAYS check auto_submitted in the result: false means the order is approved but NOT in production, and submit_error says why. Use when an order is held for review and the user wants to let it proceed.

  • approve_order_hold

    Approve a design-approval hold on an order so the provider can proceed. If the provider can't flip the hold via its API (Printful today), the result is deferred with a dashboard_url to finish the approval manually — the hold stays active until the provider's release fires. Get the hold_uuid from list_order_holds.

  • archive_design

    Archive a design so it stops showing in the default gallery listing. Reversible with restore_design, and safe: it never touches products that already use the design. This is the right way to retire an unwanted or orphan design. Prefer it over delete_design unless the design must be removed permanently. Find orphan designs first with list_my_designs(on_products=false).

Show 112 more tools
  • archive_product

    Archive a product: unsync it from every connected sales channel and its fulfillment provider, then hide it. Fails (returns blocking_orders) if any pending order still references its variants — cancel or fulfill those first. Restore it later with restore_product. Use archive rather than delete_product when a product has order history.

  • archive_store

    Archive a store (use instead of delete for stores with order history — order records are kept for accounting, but the store is hidden from the default listing and stops ingesting new orders). Restore it later with unarchive_store. Set disconnect_provider=true to also disconnect every connected fulfillment provider and remove its stored credentials.

  • assign_workspace_member

    Assign an account member to a workspace with a role, or update their existing role (agency / Enterprise). The target must already be a member of the account (invite_member first). Needs an account-wide key.

  • auto_optimize_listings

    Propose (and, with dry_run=false, apply) optimizations across listings. Uses the sales channel's own demand data, so a listing that people SEE but do not buy is flagged for a listing fix rather than archived — that listing is proven demand with broken conversion, and archiving it destroys the best opportunity in the catalogue. Only a listing the channel reports as genuinely inert is ever archived. Where no demand data is available the proposal is "review" and NOTHING is applied. DEFAULTS TO DRY-RUN; applying only ever archives (never deletes, never goes live).

  • browse_catalogread-only

    Browse ONE fulfillment provider's catalog for garments to print on. `category` is resolved against THAT provider's own taxonomy (providers use different vocabularies for the same idea) and an unknown category is rejected with the valid list rather than quietly returning everything. `keyword` matches product names across the whole catalog. ALWAYS read `warnings` in the response: they tell you when your results are narrower than you asked for -- e.g. a category that only exists inside one department. Each garment carries `decoration_method` / `accepts_photoreal` (`accepts_photoreal` absent means…

  • cancel_ordercan change or delete data

    Cancel an order. Cancels it locally and, where possible, cancels the draft/order at the fulfillment provider (Printful/Printify). This does NOT refund the customer on the sales channel — the channel is the source of payment. Destructive: only cancel when the user explicitly asks.

  • cascade_price_change

    Change a product price once and propagate it: the platform cascades to all variants, and (when store_uuid is given) this re-syncs each connected channel so the price is consistent everywhere. Avoids the "changed on one channel, forgot the others" footgun.

  • channel_coverageread-only

    Which of your connected sales channels report performance data, and which metrics each one supplies. Check this before concluding a listing has no traffic: a channel that reports nothing looks identical to a channel reporting zeros unless you look here. Also flags shops that must be RECONNECTED before performance data can flow. Read-only.

  • channel_opportunitiesread-only

    The listings wasting the most demand: proven traffic, broken conversion, ranked by how many people saw them and did not buy. This is the natural starting point for an optimisation pass — fix these before touching anything else, because the demand is already there and only the listing is in the way. Also returns per-state counts and, separately, the listings that are genuinely inert (state "dead") and therefore safe to archive. Nothing else is safe to archive. READ `shop` BEFORE acting on anything else here. If the shop as a whole is getting almost no views, safe_to_archive will be empty and to…

  • channel_performanceread-only

    What the sales channel reports about each of your listings: impressions, clicks, click-through rate and units sold, plus a state telling you what to do about it. Use this to find listings people SEE but do not BUY — the order-based analytics tools cannot show you those, because to them a listing with 5,000 views and no sales looks identical to one nobody has ever seen. States: winner (scale it), conversion_blocked (lots of views, few clicks — the listing card is losing them), pdp_blocked (they click but do not buy — the product page is losing them), starved (too few views to judge; needs disco…

  • check_connection_statusread-only

    Poll whether a dispatched connection has completed. Call this repeatedly after start_channel_connect while the user authorizes in their browser, and announce the result when it lands: they cannot see this conversation from the tab they authorized in, so if you do not tell them, nobody does. Read-only, makes no provider call, and is safe to poll every few seconds. connected true means say so and continue setup. connected false means keep waiting. needs_reconnect means retrying will never work and you must dispatch a fresh link with start_channel_connect.

  • check_design_complianceread-only

    Advisory pre-flight for IP / trademark / prohibited-content risk. Scans the prompt/name and any detected text against common protected marks. NOT legal advice, and NOT an image-content trademark check.

  • check_design_moveread-only

    Dry run: report whether a generated design can be MOVED to another workspace, without changing anything. Returns {eligible, blockers} — a non-empty blockers list (a product using the design is in use, or forbidden_source/destination) means move would fail, so copy instead. Read-only.

  • check_fulfillment_issueread-only

    Fetch one fulfillment issue in full (affected items, evidence attachments, provider claim tracking, resolution) and, by default, the provider-ready problem report: a copy-paste summary_text plus the provider dashboard deep-link where the report must be filed (Printful/Printify accept problem reports only in their own dashboards). Read-only.

  • check_order_status

    Poll the fulfillment provider for the latest status of an order and update it locally (including any design-approval holds). Read-mostly refresh — safe to call repeatedly. Use to see whether an order has shipped or is on hold at the provider.

  • check_product_moveread-only

    Dry run: report whether a product can be MOVED to another workspace, without changing anything. Returns {eligible, blockers} — a non-empty blockers list (e.g. asset_in_use, asset_has_orders, forbidden_source/destination) means move would fail, so copy instead. Read-only.

  • check_setup_readinessread-only

    What this account already has, what it still needs, and the single next action to take. Returns ready_to_design / ready_to_fulfill / ready_to_sell, a per-store breakdown, and an ordered next_steps list. Start here for any first-time setup, and call it again after each connection to confirm the state actually changed. Read-only, makes no provider calls, and is safe to poll.

  • check_workspace_deletionread-only

    Dry run: preview deleting a workspace (agency / Enterprise) — the stores that would move to the Default workspace and the members whose assignment would be revoked. Changes nothing. Read-only.

  • confirm_order

    Confirm a DRAFT order to send it into production at the fulfillment provider. Only works for orders in "draft" status that have already been submitted to a provider (have a provider order id). Use after submit_order_to_fulfillment on a "prepare, then I confirm" store.

  • connect_fulfillment_provider

    Connect an API-token fulfillment provider (Printify, Gelato) to a store, entirely in chat. Validates the token first, so a bad token fails before anything is stored. If the token maps to more than one shop the result asks you to pick one and lists them — call again with shop_id set. For Printful use start_channel_connect instead: it needs a browser. Never repeat the token back to the user.

  • connect_sales_channel

    Connect an API-key sales channel (WooCommerce, Wix) to a store, entirely in chat. For Shopify and TikTok Shop use start_channel_connect instead: they need a browser. Credentials are write-only and are never returned.

  • copy_design_to_workspace

    Copy a generated design image into another workspace (agency accounts). Non-destructive: the original stays put and the copy gets its own duplicated image file. Use list_my_workspaces for the destination uuid; pass source_workspace if the design is not in your Default workspace.

  • copy_product_to_workspace

    Copy a product into another workspace (agency accounts). Non-destructive: the original is untouched and the copy lands as an unsynced DRAFT (no store mapping, fresh variants). Use list_my_workspaces to get the destination workspace uuid. If the product lives in a non-Default workspace, pass source_workspace too.

  • create_collection

    Create a new (empty) collection in a store. Provide a name (sent to the platform as the collection title) and an optional description. Add products with add_products_to_collection, then sync_collection to push it to a sales channel.

  • create_product

    Create a STANDALONE product from a design (split primitive) — it is NOT placed on any store yet. Applies the correct field names + pricing floor, routes EMBROIDERY garments (caps/beanies) to their real embroidery placement with Printful thread colors (derived or explicit), and defaults face goods (canvas/backpacks/bags/socks/towels/blankets/pillows/cases...) to print_style "fill" (design recomposed onto a matching background, printed edge-to-edge). Set generate_mockup: true to render a garment mockup as the display image (it auto-derives representative variants from the catalog, so you do NOT …

  • create_store

    Create a new ApparelHub store. Only a name is required. The store starts CLOSED — connect a fulfillment provider (Printful/Printify), then call activate_store to make it ACTIVE. In an agency account pass workspace=<uuid> to create it in a specific client workspace.

  • create_workspace

    Create a new workspace in the account (agency / Enterprise). Name must be unique within the account. Needs an account-wide key; a tier without the agency feature gets feature_unavailable. Returns the new workspace uuid.

  • delete_collectioncan change or delete data

    Delete a collection. If it is synced to any sales channel, the platform unsyncs it there first. The member products are NOT deleted, only the grouping.

  • delete_designcan change or delete data

    Permanently delete a design and its stored files. Irreversible. Refused with design_in_use if any live product still uses the design, in which case archive_design is the safe alternative. Use archive_design unless the design genuinely must be erased.

  • delete_productcan change or delete data

    Delete (default) or archive a product. Hard delete cascades to variants; if the product is synced to channels, unsync it first to avoid orphan listings — unsync_from_channel for one channel, archive_product for all of them. (sync_to_channel cannot unsync; it only syncs.)

  • delete_workspacecan change or delete data

    Delete a workspace (agency / Enterprise). Its stores are reassigned to the Default workspace and member assignments revoked first. The Default workspace cannot be deleted. Preview with check_workspace_deletion. Needs an account-wide key.

  • describe_listing_attributesread-only

    Description is built at runtime.

  • design_apparel

    End-to-end apparel design with the platform lessons baked in: solid-green-background prompt, transparency keying, and (optionally) a local text check. Returns ready-to-use design(s). Streams progress. Set needs_transparency=false for all-over-print products. Rate-limit errors are classified (model_rate_limited = one model's provider vs platform_rate_limited = this key's ApparelHub throttle vs request_not_sent = the call never reached ApparelHub), and each design's fallback_trail shows any model substitutions. This GENERATES new artwork — when the merchant already owns the file (a logo, a brand…

  • diagnose_tiktok_listings

    Diagnose TikTok Shop listing quality and optionally apply TikTok's own recommendations. TikTok grades each listing POOR/FAIR/GOOD and a low grade suppresses reach. Returns, per listing: the current tier, the machine-readable issues behind it (code + how_to_solve + the tier that ONE fix unlocks), and TikTok's recommended search terms / titles / descriptions. READ-ONLY unless you pass `apply`. `apply:['search_terms']` is the safe default action — search terms are hidden listing metadata. Passing 'title' or 'description' replaces merchant-visible copy with machine-generated text, so ask the user …

  • estimate_order_costsread-only

    Estimate production + shipping + tax + total for an order WITHOUT creating it (read-only against the fulfillment provider, no order placed). Give the store, the recipient, and the variants + quantities. Use to preview landed cost before placing an order. AVAILABLE FOR PRINTFUL AND GELATO ONLY: Printify offers no pre-order estimate, so a Printify-fulfilled store returns a refusal rather than a number — do not retry it, and do not present a cross-provider landed-cost comparison that silently omits Printify. Both country_code AND address1 are required; the platform rejects the request without a s…

  • find_garmentsread-only

    Search EVERY fulfillment provider on the account at once for garments matching a capability. USE THIS BEFORE TELLING A USER AN ITEM CANNOT BE BUILT. A capability limit is almost always scoped to one provider, not to the category of garment: one provider carrying only embroidered headwear says nothing about another's printed caps. browse_catalog answers 'what does THIS provider carry'; this answers 'what on this ACCOUNT can take this design'. Provider scope defaults to every provider available — pass `providers` only to deliberately narrow it. Returns a compact ranked shortlist (confirmed capab…

  • fit_aspect

    Fit an EXISTING design image to a target aspect ratio without generating a new one. mode="pad" letterboxes it onto a background (keeps the whole design, nothing cropped); mode="crop" center-crops (trims the edges to fill the shape). QUOTA-FREE: this reshapes an existing image and does NOT consume an image-generation credit. Use to adapt a square design to a product's print area (e.g. a tall 9:16 for a phone case or poster, a wide 16:9 for a mug or banner). Returns a NEW design (image uuid + url). Note: for an AI-generated EXTENSION of the borders (outpainting) instead of a flat pad/crop, gener…

  • generate_image

    Generate a design image (split primitive of design_apparel). Returns the raw generated image; follow with process_transparency for apparel that needs a transparent background. Rate-limit errors are classified (model_rate_limited = one model's provider vs platform_rate_limited = this key's ApparelHub throttle vs request_not_sent = the call never reached ApparelHub), and fallback_trail shows any model substitutions. When the platform has advice on the prompt it is returned as prompt_improvement (advisory, never applied for you). If its issues include "brand_brief", the prompt describes a whole b…

  • generate_listing_image

    Generate listing photography for an existing product — an on-model shot, a detail crop, a flat lay, or the product in a real setting. HOW IT WORKS: this EDITS the product's own rendered mockup. It is not text-to-image, and that is the point — the photo shows the actual colourway and the actual printed design, so it depicts the product a shopper will receive. ⚠️ A PRODUCT WITH NO MOCKUP IS REFUSED, not silently generated from scratch. A from-scratch product photo invents a product that does not exist and publishes it as photography of one that does — a listing-takedown and chargeback risk, no…

  • get_account_overviewread-only

    Account name, your role, whether the agency feature is enabled, and seat accounting (used / included / billable). Agency / Enterprise; needs an account-wide key. Read-only.

  • get_api_referenceread-only

    Discover the full ApparelHub agent API: returns a compact index of every endpoint (path, methods, summary) from the live OpenAPI spec. Use this when no dedicated tool covers what you need, then call it with api_request. Read-only. Also returns `connector`, which reports what THIS server actually serves: its version, and the name of every tool. **If a capability seems missing, check that first.** A tool listed in `connector.tool_names` that you cannot call means your own tool list is stale, not that the tool is unbuilt — say so and tell the user to reconnect, rather than reporting the feature …

  • get_catalog_import_runread-only

    Progress of a catalog import started with import_channel_catalog. status is queued, running, completed or failed, with counts: pages read, listings seen, created, updated, ours (listings ApparelHub made, linked to their product), removed (left the channel since the last import) and images_fetched. A failed run states `error`; what was read before it stopped is kept and nothing is marked removed on a partial pass. Poll every few seconds while queued/running. Read-only.

  • get_collectionread-only

    Get a single collection by uuid, including its member products and per-channel sync status. Read-only.

  • get_design_collectionread-only

    List the OTHER designs that came out of the same generation as this one. When generate_image is called with concepts > 1, one generation produces a themed set; every design is saved separately and this is how you find its siblings. The design you ask about is never included, and the list is oldest first. An ordinary design returns an empty list, which is the honest answer, not an error (an inaccessible or unknown uuid also reads as empty, so an empty list does not prove the design exists). Read-only and not metered. Each entry carries title and concept_description: the product name and retail …

  • get_garment_detailsread-only

    Full detail for one garment: the variant matrix (colors/sizes/costs), print templates, ApparelHub pricing floor, and quality tier. Read-only.

  • get_order_detailsread-only

    Full detail for one order: line items, payment + fulfillment status, shipments/tracking, and `ship_by_at` (the sales channel's ship-by deadline, UTC) when the channel has one. If `needs_attention` is present the order will not complete on its own; tell the user its `title` and `message`. `cost` and `profit` are this order's own figures once the provider has priced it. If `checkout_split` is present, the buyer's checkout was split into `checkout_split.order_count` orders across the merchant's stores and this order holds only its share: when asked how the sale did, report `checkout_split.profit`…

  • get_orders_summaryread-only

    Aggregated stats for the orders dashboard: counts of orders pending approval / awaiting payment / in fulfillment / shipped today, plus today's revenue and profit, and a per-store breakdown. Read-only.

  • get_role_matrixread-only

    The workspace roles and the role → capability matrix, so you can pick a role before assigning a member. Agency / Enterprise; needs an account-wide key. Read-only.

  • get_store_settingsread-only

    Read a store's fulfillment workflow + notification settings: fulfillment_mode (auto/confirm/review), approval_authority (human/agent/rules), the margin / high-value / first-time-customer hold guardrails, auto-reconcile, and payment settings. Read-only.

  • hold_order

    Put an order on hold with an optional reason, pausing it before it is submitted to fulfillment. Use when the user wants to stop an order from proceeding (e.g. to double-check the design or address). Release it later with approve_order.

  • import_channel_catalog

    Bring the products a merchant ALREADY sells on a connected sales channel into ApparelHub as TRACKED listings, so you can see their whole catalog, not just what ApparelHub made. Use it when an established seller wants to see or manage what they already sell. READ-ONLY against the channel: nothing is written to the merchant's store, and those products keep being fulfilled exactly as they are today (ApparelHub never fulfils them). Tell the merchant both of those things before you start. Listings ApparelHub created are recognised and linked to their product, not duplicated. Images stay the channel…

  • import_size_measurementsread-only

    Get the blank's real per-size measurements from its fulfillment provider, in the exact shape `size_chart_measurements` takes. READ-ONLY. Use this instead of asking a merchant to type a size chart, and never instead of asking them when it comes back unavailable. It imports nothing by itself — adopting a set of measurements is the merchant's decision. Show them the table, let them correct it, then write it back with set_listing_attributes as `size_chart_measurements`. `available: false` is an ANSWER, not a failure. Branch on `reason`: • `provider_publishes_no_size_guide` — this provider has no…

  • invite_member

    Invite someone to the account by email, optionally pre-assigning a workspace + role (agency / Enterprise). An existing ApparelHub user is auto-added immediately; a new email gets a pending invite. Needs an account-wide key.

  • iterate_design

    Generate a variation of an existing design via img2img (e.g. "make the cactus blue"). Almost every source supports editing; only Google Imagen 4 is text-to-image-only (rejected). Multi-reference edits (several source images) work on Seedream, Flux 2 Pro, and Wan; slow-model edits return 202 and are polled automatically.

  • list_account_membersread-only

    List account members and their per-workspace assignments (agency / Enterprise). Filterable + paginated. Needs an account-wide key. Read-only.

  • list_catalog_providersread-only

    List the fulfillment providers this account can browse catalogs from. Use this to discover valid `provider` values for browse_catalog / get_garment_details — the set is account-specific and auth-gated on the platform (a provider only appears if this account is entitled to it), so never assume a fixed list. Read-only.

  • list_collectionsread-only

    List a store's product collections (categories/groups), each with its product count and per-channel sync status. Read-only.

  • list_connectable_providersread-only

    Fulfillment providers and sales channels this account may connect, each marked with how it connects: connect_mode "in_chat" means you can complete it here by asking for a credential, "browser" means you must dispatch an authorization link with start_channel_connect and poll. Also returns where the merchant generates the credential, when there is one. Use this before asking a user for anything, so you ask for the right thing.

  • list_fulfillment_issuesread-only

    List fulfillment issues. With order_uuid: that order's issues plus its report-window eligibility. Without: the workspace-wide issues inbox, filterable by status ('open_any' = open + filed upstream) and store, with limit/offset paging. Read-only.

  • list_invitesread-only

    List the account’s pending invites, each with the target workspace name and a copyable accept URL (agency / Enterprise). Needs an account-wide key. Read-only.

  • list_my_designsread-only

    List the merchant's generated design images (newest first). Read-only. Use these design_uuids with the design/product tools. Pass on_products=false to find orphan designs (designs not used by any live product), the supported way to audit a workspace for unused designs before archiving them. Pass archived=true to list already-archived designs. A design with no full_url carries processing_status: "pending"/"processing" means it is still being made and is worth polling, while "failed" means it gave up and processing_error says why. Branch on processing_error_code rather than matching the message …

  • list_my_ordersread-only

    List the merchant's recent orders across channels. An order with `fulfilled_by: 'merchant'` is for the merchant's own products (brought in from their sales channel, not made in ApparelHub): their store fulfils it, ApparelHub only records it, and approve / submit / confirm / cancel / hold / record-payment refuse it with `fulfilled_by_merchant`; tell the user to act on it in their store. Pass fulfilled_by to list only those ('merchant') or only ApparelHub-fulfilled orders ('apparelhub'). An order carrying `needs_attention` is one the merchant must act on (the fulfillment provider failed or cance…

  • list_my_productsread-only

    List the merchant's products with their fulfillment and sales-channel sync status. Each channel entry also carries `health` — what the channel last said about the listing. A channel can remove or deactivate a listing at any time, so check `health`, not just `sync_status`: a product can read 'Synced' historically and still be gone. Pass store_uuid to scope to one store; omit for all products. Read-only.

  • list_my_storesread-only

    List the merchant's ApparelHub stores, each with its fulfillment providers (Printful/Printify) and connected sales channels (Shopify/WooCommerce/Wix). Read-only.

  • list_my_workspacesread-only

    List the workspaces this account can act in, each with its uuid. Agency / multi-brand accounts have more than one (e.g. a workspace per client); a single account just has Default. The store / product / order / design tools operate on the Default workspace unless you pass workspace=<uuid>. Use this FIRST to resolve a workspace by name (e.g. a client's name) to the uuid those tools need. Read-only.

  • list_order_holdsread-only

    List the design-approval holds on an order (active and released). Set refresh=true to also poll the fulfillment provider for newly-discovered holds. Read-only. Use to see why an order is stuck at the provider and get the hold_uuid for approve_order_hold / request_hold_changes.

  • list_pending_fulfillmentsread-only

    List orders in a store that have pending fulfillment data needing attention (used by the reconciliation view). Read-only. Use to find orders that stalled before reaching the provider.

  • list_tracked_listingsread-only

    The listings imported from a store's sales channels with import_channel_catalog, plus each channel's import state (catalog_read, last_run). Each listing is the channel's view: title, description, price, currency, channel_status (live/draft/archived/unknown), SKUs, variants and the channel's own image_url. made_in_apparelhub + product_uuid mark a listing ApparelHub created. scope "external" returns only the merchant's own listings (what they sold before ApparelHub), "ours" only ApparelHub-made ones, "all" both. TRACKED LISTINGS ARE NOT APPARELHUB PRODUCTS: you cannot sync, price-cascade, edit o…

  • listing_changesread-only

    What has been changed on your listings, and whether it worked. The other half of channel_performance: that says what to fix, this says whether the last fix landed. Every shopper-visible change — title, description, images, price, search terms, variants, availability — is recorded automatically when it is made, along with the signal state that prompted it. Once the channel has finalised enough days either side, a verdict is computed on the ONE metric that change should have moved (a title is judged on click-through, not revenue). ⛔ `unmeasurable` IS THE DEFAULT VERDICT, NOT AN ERROR, and it d…

  • mark_order_no_payment

    Mark an order as having no payment expected (e.g. a free / comp / sample order). Sets its payment status to "no payment". Use when an order should proceed without a recorded payment.

  • move_design_to_workspace

    Move a generated design image to another workspace (agency accounts). Fails with a 409 (blocking list) if a product that uses the design is mapped to a store or has orders — copy it instead in that case (check first with check_design_move). Use list_my_workspaces for the destination uuid; pass source_workspace if the design is not in your Default workspace.

  • move_product_to_workspace

    Move a product to another workspace (agency accounts) by re-stamping its workspace. Fails with a 409 (blocking list) if the product is mapped to a store or has orders — copy it instead in that case (check first with check_product_move). Use list_my_workspaces for the destination uuid; pass source_workspace if the product is not in your Default workspace.

  • move_store_to_workspace

    Move a store into one of the account's workspaces (agency / Enterprise). This changes who can access the store, so it needs account owner/admin + an account-wide key.

  • process_transparency

    Key a solid background out of a generated image to true RGBA transparency (flood-fill + enclosed-region sweep + tight crop) and upload the result. Runs server-side (Python + Pillow). If the generator produced a tinted/muted green instead of pure #00FF00, it auto-recovers by re-keying in green-dominance mode (safe for art with no bright-green/lime elements). Returns a NEW image_uuid plus keying_mode.

  • recommend_garmentread-only

    Recommend a garment type for a design/use-case, encoding ApparelHub's garment trade-offs (BC 3001 vs Comfort Colors, budget vs premium, pricing floors). Returns a pick + rationale + alternatives. Advisory / knowledge-based.

  • reconcile_order

    Reconcile a sales-channel order with the channel it came from: pull payment / cancellation FROM the channel and push fulfillment status + tracking TO it. Only sales-channel orders can be reconciled (native orders return reconcilable=false). Use to re-sync an order that drifted (e.g. tracking not relayed to the storefront).

  • record_order_payment

    Record a manual payment on an order that is awaiting payment (payment_status="pending"). Use payment_method="sales_channel" for an order already paid on its storefront (Shopify/WooCommerce/Wix — the channel is the source of payment), or "stripe" for an order taken through ApparelHub's own card flow. This marks the order paid; it does not charge a card.

  • recover_from_outage

    Find products in a failed sync state (fulfillment or channel) and, with dry_run=false + a store_uuid, retry the syncs. DEFAULTS TO DRY-RUN (diagnose only).

  • remove_membercan change or delete data

    Remove a member from the account entirely (agency / Enterprise): all their workspace assignments are revoked and seat billing synced. The account owner cannot be removed. Needs an account-wide key.

  • remove_order_item

    Remove a line item from a DRAFT order (the order must keep at least one item). Same provider semantics as add_order_item: Printful/Gelato edit in place, Printify cancels + re-creates. Only works while the order is a draft. Get the order_item_id from get_order_details (each item carries an id).

  • remove_product_from_collectioncan change or delete data

    Remove a single product from a collection (the product itself is not deleted). If the collection is synced to a channel, the product is removed there too.

  • report_fulfillment_issue

    Report a post-sale fulfillment issue (defect) on an order: the item does not match the approved mockup, poor print quality, damaged in transit, wrong/missing item, late or lost. Creates a tracked issue and computes the provider report window (30 days from delivery). Follow up with check_fulfillment_issue for the provider-ready problem report and resolve_fulfillment_issue to file/close it or create a replacement order.

  • request_hold_changes

    Request design changes on a held shipment instead of approving it. change_kind is 'minor' (notes REQUIRED — describe the edit) or 'full_replacement' (re-do the design). If the provider can't action it via API (Printful today), the result is deferred with a dashboard_url. Get the hold_uuid from list_order_holds.

  • resend_invite

    Re-send a pending invite’s email with the SAME token and extend its TTL 14 days (agency / Enterprise). Needs an account-wide key.

  • resolve_fulfillment_issue

    Progress a fulfillment issue. action='submit_upstream' records that the problem report was filed with the provider (optionally with their claim reference) and returns the dashboard link + summary. action='resolve' closes it with a resolution_type (reprint, refund_wallet, refund_customer, replacement_order, other, none). action='create_replacement' builds a one-click zero-charge replacement (reship) draft order from the affected items; if it cannot be built automatically (no recipient on the provider record, an unlinked variant, or a replacement already exists) the error says what to do instead…

  • restore_design

    Restore a previously archived design so it appears in the default gallery listing again. List archived designs with list_my_designs(archived=true).

  • restore_product

    Restore a previously archived product (sets it back to active). It is not re-synced to any sales channel automatically — sync it again afterward if you want it live. Use to undo archive_product.

  • revoke_invitecan change or delete data

    Revoke a pending invite so its token can no longer be used (agency / Enterprise). Needs an account-wide key.

  • set_channel_settings

    Set SHOP-WIDE listing settings for one connected sales channel: product compliance attestations, the shipping template, and a fallback size chart. These apply to every listing on that channel, so they are set once rather than per product. Call describe_listing_attributes with `integration_uuid` (and no `product_uuid`) first to see which settings this channel defines and what each one accepts. ⚠️ BRAND and the per-listing SIZE CHART are NOT here — they are per-product (use set_listing_attributes), because both describe the blank rather than the shop. `default_size_measurements` is the one size…

  • set_listing_attributes

    Set channel-defined listing attributes on ONE product (Material, Style, Washing Instructions and similar). Call describe_listing_attributes first to learn the field keys and their allowed values. A PARTIAL WRITE SUCCEEDS. Send four values with one bad and the three good ones are stored while the bad one is reported — you do not have to get them all right at once. A value the channel refuses comes back in `rejected` with a machine-readable `reason` and the allowed values echoed, so you can correct it in one more turn rather than guessing. Rejections are never dropped silently. ⛔ NEVER INVENT …

  • set_order_payment_method

    Change the recorded payment method on an order that already has a payment recorded (e.g. correct "stripe" to "sales_channel"). This is a bookkeeping label change; it does not move any money.

  • set_prices_by_margin

    Set each variant's price to hit a target profit margin off its OWN cost: price = cost / (1 - margin). Reads per-variant production cost (populated after the fulfillment sync), applies a per-variant price, then re-syncs connected channels. Use this instead of one flat price when costs tier by size (larger sizes cost more, so a single price gives a different margin per size — and can go negative on the biggest). Requires store_uuid (cost lives on the store-products list, not product detail).

  • set_product_images

    Description is built at runtime.

  • ship_product

    End-to-end pipeline in ONE call: take a design, generate + verify a mockup (one per imported color, so every color variant has a matching mockup), create the product with the correct field names, add all variants, associate with a store, sync to fulfillment, then (optionally) sync to sales channels as DRAFT. Handles EMBROIDERY garments automatically WHEN the garment is actually embroidered: routes the design to the real embroidery placement and attaches thread colors (derived from the design, or pass thread_colors). Headwear is NOT inherently embroidered -- some providers carry printed (DTF) c…

  • start_channel_connect

    Begin a browser-based connection (Printful, Shopify, TikTok Shop, Fourthwall). Shopify additionally requires shop_url, the merchant myshopify domain — ask for it before calling. Returns an authorization URL to give the user. THE CONNECTION IS NOT FINISHED WHEN THIS RETURNS. You must keep polling check_connection_status (passing the same provider_uuid) until it reports connected, then tell the user. The browser tab where they authorize is NOT this conversation and cannot report back to you, so polling is the only way you or they will learn it worked. Poll every few seconds, up to about two minu…

  • submit_order_to_fulfillment

    Manually submit an order to its fulfillment provider (Printful/Printify) as a DRAFT. For sales-channel orders this auto-fetches the recipient from the channel. Use to un-stick a paid order that never got submitted; confirm it afterward with confirm_order if the store requires confirmation.

  • sync_collection

    Sync a collection to a sales channel (creates/updates the channel-side category and places all products in it that are already synced there). integration_uuid selects which channel; not all channels support collections (e.g. TikTok Shop), which returns a clear "collections_unsupported" error.

  • sync_orders

    Import orders that never reached ApparelHub and refresh order status from fulfillment providers. For each connected Shopify shop it imports recent orders a webhook should have delivered, scoped to orders placed after the shop was connected and excluding cancelled or already-fulfilled ones (an imported paid order is sent to the fulfillment provider like a live one). Pass store_uuid to sync one store; omit it for all stores. Read `shopify[]`: `processed` imported now, `not_eligible_reasons` why others were left alone, `truncated` means run again, `outcome: "auth_revoked"` carries a reconnect_url…

  • sync_to_channel

    Sync one product to a sales channel (WooCommerce/Shopify/Wix) as a listing. PREREQUISITE: the product must first be associated with the store AND synced to its fulfillment provider — call sync_to_fulfillment(product_uuid, store_uuid) FIRST (it does the store association too). If that prerequisite is missing, this tool now AUTO-HEALS it (associate + fulfillment-sync, then retries once) instead of failing with "product not associated with store" — but the clean, explicit order is sync_to_fulfillment then sync_to_channel, and ship_product does the whole pipeline in one call. Defaults to DRAFT — o…

  • sync_to_fulfillment

    Associate a product with a store AND sync it to that store's fulfillment provider (Printful/Printify). This is the REQUIRED step before sync_to_channel: it both puts the product on the store (a product from create_product is standalone) and creates the manufacturing path the sales-channel listing binds to. Run it after the product has variants.

  • unapprove_order

    Revert an approved order back to pending so it can be reviewed / re-approved. Only works if the order has NOT yet been submitted to the fulfillment provider. Use to undo an approve_order that was done too early.

  • unarchive_store

    Restore an archived store. It comes back as CLOSED (or ACTIVE if a fulfillment provider is still connected); if it landed CLOSED, connect a provider and call activate_store to reopen it.

  • unassign_workspace_membercan change or delete data

    Revoke a member's assignment to a workspace (agency / Enterprise). The account owner cannot be unassigned from the Default workspace. Needs an account-wide key.

  • unsync_from_channelcan change or delete data

    Remove a product from ONE sales channel, leaving every other channel and the fulfillment provider untouched. The product stays in ApparelHub; only that channel listing goes away. Use this to delist from a single channel — do NOT hand-roll it against the raw unsync endpoint: that endpoint is product-level and defaults to detaching fulfillment AND cascading to every channel, so getting the parameters slightly wrong unsyncs far more than you asked for. To remove a product from EVERYTHING, use archive_product instead.

  • update_collection

    Update a collection's name and/or description. A name change is sent to the platform as the collection title. Editing a synced collection marks it for re-sync.

  • update_product

    Update a product (name, description, price). For a price change that must propagate to synced channels, prefer cascade_price_change. Optionally set tiktok_listing to enrich the TikTok Shop listing (SEO search terms, product highlights, brand, packaging, TikTok-only title/description, and category_id) — applied when the product is synced to a TikTok channel; ignored by other channels. For channel-defined ATTRIBUTES (Material, Style, Washing Instructions...) use set_listing_attributes instead: it validates against the listing category's real schema and tells you which values the channel refused,…

  • update_store_settings

    Update a store's fulfillment workflow / notification settings. Only the fields you pass are changed. fulfillment_mode: "auto" (auto-pilot: paid -> draft -> auto-confirm -> production), "confirm" (auto-draft, you confirm each order), "review" (held before submission for approval). The hold_* guardrails escalate an otherwise-auto/confirm order to a pre-submission review. Set hold_orders_above_amount / hold_below_margin_pct to null to disable that guardrail. hold_channel_risk_review is ON by default and OVERRIDES fulfillment_mode (including "auto"): an order the sales channel is reviewing is neve…

  • update_workspace

    Rename a workspace or archive/unarchive it (agency / Enterprise). The Default workspace cannot be archived. Needs an account-wide key.

  • upload_design

    Upload artwork the merchant ALREADY OWNS and turn it into a design_uuid usable by create_product / ship_product. This is the way to build products from a client's own files — a logo, a brand mark, a cleared cover, a photograph — instead of generating something new. If a client says their mark must not be redrawn, use this; never regenerate or approximate a mark to work around a missing file. Three ways to supply the file, pick the cheapest one available: 1. `source_url` — an https URL the server can fetch. One call, no context cost. Best when the asset is already hosted or reachable by link (…

  • verify_design_qualityread-only

    Local QC gate for a design: transparency correctness (alpha, clean corners, white premultiply), resolution, and detected text. Returns a 0-100 score + issues. Needs local Python + Pillow.

  • verify_design_textread-only

    Read the text in a design with local OCR (tesseract) when available, so the agent can confirm spelling. Advisory: pass expected_text to get a match verdict, otherwise the detected text is returned for visual review. has_text is null when OCR is unavailable, meaning UNKNOWN — not "no text"; read the design image yourself in that case.

  • verify_mockup_qualityread-only

    QC gate for a rendered product MOCKUP (verify_design_quality checks the design; this checks the render on the garment). Deterministically catches three defects that have actually shipped: an un-keyed chroma-green background printed onto the product, an empty render, and a render too small to judge. It does NOT decide whether the design is upright, clipped, seam-split, or whether every face is printed: those need looking at the image, and a pixel statistic that guessed would be confidently wrong on exactly those cases. It returns a fixed visual_checklist for you to answer by VIEWING the render,…

Signals

Stars
0
Forks
0
Open issues
5
Weekly downloads
805
Last commit
Oct 23, 2026 (11 days ago)
Last release
Oct 26, 2026 (8 days ago)
Last package publish
Oct 23, 2026 (11 days ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.ApparelHub-AI/apparelhub-mcp
Version
0.20.0
Auth
Auth not stated, API key
License
MIT
First seen
Oct 24, 2026
Last checked
Nov 1, 2026

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get ApparelHub running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying ApparelHub?

CallGet help
Cite this page

ApparelHub MCP server. Agent Mart. https://agentmart.dev/connectors/apparelhub-ai-apparelhub-mcp (last updated 2026-11-01)