1. Conduid
  2. Search
  3. Firestarter
MCP server · Search

Firestarter

Firestarter MCP server — AI-native commerce execution: search products, buy with approval, track orders, manage listings, connect Shopify, and monitor prices.

Unclaimed search
37Low

Scored a month ago · breakdown

About Firestarter

Firestarter is an MCP server published by Analog-Labs in the Search category: firestarter MCP server — AI-native commerce execution: search products, buy with approval, track orders, manage listings, connect Shopify, and monitor prices.

Recent commit activity is the strongest signal that reported issues will get attention.

Install

Claude Code
claude mcp add firestarter -- npx -y @analog-labs/firestarter-mcp
npx
npx -y @analog-labs/firestarter-mcp

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Tools (95)

firestarter_addressesList the buyer's saved shipping addresses (masked). Shows whether an address is already on file; each entry's `address_id` is accepted by firestarter_execute and firestarter_approve, so a saved address never has to be re-typed. The default address (used automatically at approval) is marked. Values are masked (partial street, no zip/phone); an address is referenced by id, so the full value is not needed.

Parameters not published.

firestarter_approveConfirm and place an order that is awaiting approval — this is the step that actually BUYS and pays. Lifecycle: firestarter_execute (or a listing_id buy) returns options awaiting approval → firestarter_approve places and pays for the order → the buyer can then get a receipt (firestarter_receipt) and follow delivery (firestarter_track_order). The buyer's SAVED DEFAULT address is used automatically (the execute/approve responses show a masked view of the ship-to); a `delivery_address` (or a saved `address_id` from firestarter_addresses) applies only when the buyer has no saved address or wants THIS order shipped somewhere else. By default it approves the pre-selected (best purchasable) option; a different one is selected with option_id (each purchasable option prints its own `option_id:`; it identifies the product itself rather than a position that can shift between display and approval, which makes it the more reliable selector) or, as a positional fallback, selected_option. Delivery speed is the buyer's choice: the option shows a numbered 'Delivery options' menu (Standard / Express / Same-Day with prices + ETAs) — shipping_option_index (the [number] from that menu) selects a specific speed, and omitting it uses the cheapest. Only Firestarter-purchasable options can be approved — browse-only results (external listings, or Firestarter listings that are not buyable right now) are rejected with a view link instead. When execution_id is omitted (e.g. the user just says "approve"/"confirm"/"yes" without naming an order), the tool resolves the single pending purchase automatically, and lists the candidates when several are pending. A PRICE_CHANGED result means the total changed since the options were shown; placing the order at the new price requires the buyer's explicit confirmation of the exact updated total, expressed as a repeat call with confirm_total set to that exact value AND consent_nonce set to the one-time nonce PRICE_CHANGED returned, verbatim (it is single-use and cannot be guessed). If no address is saved and none is passed, approval of physical goods is rejected.
ParameterTypeDescription
address_idstringA saved address id (addr_...) to ship this order to, from firestarter_addresses. Optional — omit to use the buyer's default saved address. Pass only to ship somewhere other than their default.
confirm_totalnumberExact updated total in USD from a prior PRICE_CHANGED response. Pass only after showing that total to the buyer and receiving a new explicit confirmation; never guess or pre-fill it on the first approval.
consent_noncestringThe single-use consent_nonce string from a prior PRICE_CHANGED response. Pass it VERBATIM together with confirm_total when re-approving a price change. It is one-time-use and cannot be guessed — never fabricate it; only echo the exact value the last PRICE_CHANGED returned.
delivery_addressanyOptional — pass EITHER a single-line string (e.g. "123 Main St, Austin, TX 78701, US") OR an object { name?, street1, street2?, city, state?, zip?, country? }. The buyer's saved default address is used automatically; only pass a NEW address here to ship this order elsewhere, or when the buyer has no saved address. A partial or odd-shaped address is accepted (never rejected for shape); a complete one (ZIP + state for US/CA/AU) is required only at the pay boundary. On a first order with no saved address, the address you pass is saved as their default for next time.
execution_idstringThe execution ID to approve (e.g. 'exec_abc123'). Omit when the user simply replied "approve": the tool then approves the one execution awaiting approval, surfaces payment-setup guidance if the order is parked awaiting a payment method, or lists the candidates if several are pending.
option_idstringExact option id (e.g. 'opt_abc123') to approve — PREFERRED over selected_option, because it identifies the product itself rather than a position that can shift. Each purchasable option in firestarter_execute / firestarter_status output prints its own `option_id:`; copy that value verbatim. Takes precedence over selected_option.
selected_optionnumber0-based POSITIONAL index into the options list as displayed (the option shown as '1.' is index 0). Prefer option_id: this index is resolved against a fresh read of the execution, and the option order can change if the order was re-quoted or refined with firestarter_message since you displayed it. Omit both to approve the pre-selected best option.
shipping_option_indexinteger0-based index of the delivery speed to use, taken from the numbered 'Delivery options' menu shown for the option (in firestarter_execute / firestarter_status output, or firestarter_shipping_options). Omit to use the cheapest rate; the order total is recalculated server-side for the chosen speed and included in what the buyer approves.
firestarter_approve_dropApprove a pending community drop request on one of your listings (from firestarter_drop_requests), making it go live immediately so members can start claiming it. The per-claim discount comes out of YOUR proceeds on each claimed sale — not Firestarter's platform fee — so an approved discount directly reduces your margin on those sales. The requesting community is notified of the approval.
ParameterTypeDescription
drop_id *stringThe drop id to approve (from firestarter_drop_requests).
firestarter_assist_bookBook a courier from a firestarter_assist_quote result. Booking dispatches a real crew and the fee is charged to the buyer's order; it requires the human's prior explicit confirmation of the exact quoted price. When the booking is linked to a purchase execution, the courier's proof-of-delivery photo starts the escrow inspection window automatically.
ParameterTypeDescription
dropoff_address *string
dropoff_contact_namestring
dropoff_contact_phonestring
execution_idstringThe purchase execution this delivery fulfills (exec_...)
fee_centsnumberThe confirmed quote fee, for the booking record
listing_idstring
pickup_address *string
pickup_contact_namestring
pickup_contact_phonestring
provider *stringProvider name from the chosen quote (e.g. lalamove, nash)
quote_ref *stringquote_ref from firestarter_assist_quote
firestarter_assist_quoteGet pickup+delivery quotes for a PHYSICAL item, including loading/unloading help (a courier crew) for bulky or heavy things - weight racks, sofas, appliances. Use when a buyer or seller asks how to move an item, or proactively when an item is clearly bulky. Pure price check: books nothing, charges nothing. Include lat/lng for both stops when the user shared a location pin - some couriers (Lalamove in Thailand) cannot quote without coordinates. Returns quotes cheapest-first, each with a quote_ref that firestarter_assist_book takes to book it; booking is a real dispatch with a real charge and requires the human's prior confirmation of the exact price.
ParameterTypeDescription
bulkybooleanLarge/awkward item (furniture, gym equipment)
declared_value_centsnumberItem value in cents, for courier insurance on high-value items
dropoff_address *stringDropoff street address
dropoff_latnumber
dropoff_lngnumber
needs_disassemblyboolean
pickup_address *stringPickup street address
pickup_latnumber
pickup_lngnumber
two_personbooleanNeeds two people to carry - adds a crew helper
weight_kgnumberApproximate item weight in kg
firestarter_auto_approve_limitRead the buyer's PERSISTENT, account-level auto-approval limit for purchases. This is a real stored account setting (not a chat note or session memory): orders whose total is at or below the limit are auto-approved and paid without a manual confirmation step, and anything above pauses for approval. It applies to EVERY future order on the account, across all surfaces (chat, dashboard, API), until changed. Read-only: use firestarter_set_auto_approve_limit to change or disable it.
ParameterTypeDescription
disableanyIGNORED here — this tool only reads. Use firestarter_set_auto_approve_limit.
set_limit_usdanyIGNORED here — this tool only reads. Use firestarter_set_auto_approve_limit.
firestarter_bulk_listCreate MANY products at once — for migrating an existing catalog (e.g. from a CSV or spreadsheet the seller pasted/described). Each product needs product_name and base_price at minimum; everything firestarter_list accepts per-item is accepted here too (brand, condition, sku, variants, etc.). Up to 100 products per call — for more, call this tool again with the next batch. One bad item never blocks the others: the response reports exactly which products were created and which failed, with why. For a SINGLE product, use firestarter_list instead — it has richer per-listing guidance in its response.
ParameterTypeDescription
products *arrayThe products to create, up to 100 per call.
firestarter_cancelCancel an active execution. A not-yet-captured authorization hold is voided; an already-captured payment is refunded. An order that has already shipped can't be cancelled — use firestarter_return instead.
ParameterTypeDescription
execution_id *stringThe execution ID to cancel
reasonstringReason for cancellation
firestarter_cancel_dropWithdraw a drop request you created (with firestarter_create_drop) on a market you own, while it is still pending the seller's approval. Once cancelled it stops being visible to that seller and can never be approved — create a new request with firestarter_create_drop if you change your mind. This only works on still-pending requests; a drop that's already live, expired, exhausted, or already decided can't be cancelled this way.
ParameterTypeDescription
drop_id *stringThe drop id to cancel (from firestarter_create_drop's response or firestarter_market_drops).
program_id *stringThe market/program id you own (from firestarter_my_markets) — the drop belongs to this program.
firestarter_catalog_searchSearch the Firestarter NETWORK catalog — products listed for sale by ALL sellers — without starting a purchase. This is the BUYER-facing browse tool: use it to see what's available before buying, compare prices, or check whether the network carries an item. Different from firestarter_listings, which only shows YOUR OWN seller listings. Each result includes a listing id (lst_...) you can pass to firestarter_execute (as listing_id) to buy it, the share link, and a `buyable` flag — buyable means it can be purchased now; browse-only means it cannot be checked out right now — the seller is not accepting new orders, or the store has not been claimed by its merchant (the share link still shows the item). Results lead with buyable, cheapest first. Pass `country` to filter for items that ship to the buyer's country. test/live follows the API key's environment. Returns up to `limit` matches (default 20, max 50); when more exist the result notes it — a narrower query or higher `limit` surfaces the rest. Read-only: never charges or changes anything.
ParameterTypeDescription
buyable_onlybooleanIf true, return only listings that can be purchased now (seller checkout enabled). Default false (includes browse-only listings, which are clearly tagged).
categorystringFilter by category, e.g. 'Rings', 'Accessories', 'Stickers'.
countrystringISO 3166-1 alpha-2 country code (e.g. 'TH', 'US', 'GB'). Filters for listings that ship to this country. Pass the buyer's country to see locally-deliverable options.
limitnumberMax results to return, 1-50. Default 20.
max_pricenumberMaximum price in the listing currency (inclusive).
min_pricenumberMinimum price in the listing currency (inclusive).
querystringFree-text product search of product name, description, and category — matches best on real product nouns, e.g. 'leather conditioner', 'wireless earbuds'. Price constraints belong in max_price rather than the query ('under $50' is a filter, not a search term), and filler words like 'cheap' or 'best' add no signal; price phrases that do slip into the query are auto-extracted into the price filters.
Show all 95 tools
firestarter_checkTrigger an immediate check on a monitor. Runs the product search and diff right now instead of waiting for the next scheduled check.
ParameterTypeDescription
monitor_id *stringThe monitor ID to check now
firestarter_confirm_deliveryConfirm that a shipped or delivered order was received by the buyer. This marks a shipped order delivered and expedites escrow release instead of waiting for carrier confirmation plus the auto-release window (5 days). Use when the buyer says 'I got it', 'package arrived', or 'confirm delivery'.
ParameterTypeDescription
execution_id *stringThe execution/order ID to confirm delivery for (exec_...)
firestarter_confirm_orderAccept a pending incoming order — step 2 of the seller fulfillment flow (firestarter_seller_orders → firestarter_confirm_order → firestarter_ship_order). Use when a seller wants to accept/confirm an order a buyer placed. Confirming notifies the buyer that the order is accepted and is the gate before shipping. Pass the order_id exactly as shown by firestarter_seller_orders (the order_id field, NOT the exec_... execution id). Only orders still in 'pending' can be confirmed — an order that's already confirmed or shipped doesn't need this — firestarter_ship_order handles its next step.
ParameterTypeDescription
order_id *stringREQUIRED. The order_id from firestarter_seller_orders (the seller_earnings id, not the exec_... execution id).
firestarter_connect_marketplaceConnect the buyer's OWN Shopee or Lazada account for marketplace search and checkout. Step 1 (default): opens a private cloud browser on the marketplace's sign-in page and returns a link — the buyer opens it (phone is fine), signs in as they normally would including any code the marketplace sends, then says they're done. Nothing they type reaches Firestarter or the agent; the sign-in is kept as a browser profile at the provider, never as cookies here. Step 2: call again with verify: true to confirm the sign-in stuck; if the marketplace still shows its login page you get a fresh link. `country` picks the storefront (MY, SG, TH) and is required the first time.
ParameterTypeDescription
countrystringStorefront country, ISO 3166-1 alpha-2: MY, SG or TH. Required on first connect; remembered afterwards.
marketplace *stringWhich marketplace to connect
mobilebooleantrue when the buyer will open the sign-in link on a phone (mobile-sized browser).
verifybooleantrue = the buyer says they've signed in; confirm it and mark the marketplace connected.
firestarter_connect_payoutsConnect a Stripe payout account so a community-market owner can WITHDRAW their accrued earnings. Earnings accrue with no Stripe needed — creating a market and earning a share works from any country — but PAYING OUT requires this. Returns a Stripe onboarding link for the owner to open in a browser; once they finish, payouts enable. Use when an owner asks to get paid, cash out, set up payouts, or connect Stripe. If already fully set up, it just says so. Optionally pass the owner's country (ISO-3166-1 alpha-2) if onboarding asks.
ParameterTypeDescription
countrystringOwner's 2-letter country code (ISO-3166-1 alpha-2), e.g. 'US', 'GB'. Only needed if onboarding asks.
firestarter_connect_shopifyConnect a seller's Shopify store to Firestarter — step 1 of the Shopify flow: connect_shopify → (catalog syncs automatically) → firestarter_listings to see imported products → firestarter_sync_shopify to refresh after store edits → orders arrive via firestarter_seller_orders → firestarter_ship_order. Called with NO arguments: if a store is already connected it returns the connection status, store name, and last sync time; if not, the response reports that the store handle is the missing input. Called with shop_handle: mints a one-click install link — the seller clicks it, approves on Shopify, and their whole catalog syncs into Firestarter automatically (no tokens to paste). Use this whenever a seller mentions Shopify, wants to connect/link their store, or asks why their products aren't showing up. The store handle is the part before .myshopify.com in their Shopify admin URL (Settings > Domains > the permanent xxxxx.myshopify.com, NOT their custom domain). To force a fresh catalog pull on an already-connected store, use firestarter_sync_shopify instead.
ParameterTypeDescription
shop_handlestringOptional. The seller's Shopify store handle (e.g. 'matrix-store' from matrix-store.myshopify.com). Omit on the first call to check existing connection status — only needed when no store is connected yet. Accepts the bare handle or the full myshopify.com domain (it's normalized). If the seller doesn't know it, tell them: Shopify admin > Settings > Domains > the permanent .myshopify.com address.
firestarter_connect_storeConnect a seller's BigCommerce, Shopee, Lazada, Wix, or WooCommerce store to Firestarter. For Shopify use firestarter_connect_shopify instead (one-click install link); for TikTok Shop use firestarter_connect_tiktok. Call with just `platform` first to check for an existing connection or get platform-specific credential instructions; call again with credentials to connect.
ParameterTypeDescription
access_tokenstringRequired for bigcommerce/shopee/lazada/wix. Not used for woocommerce — use consumer_key/consumer_secret instead.
consumer_keystringWooCommerce only — from WooCommerce > Settings > Advanced > REST API.
consumer_secretstringWooCommerce only — paired with consumer_key.
platform *string
shop_domainstringStore identifier: BigCommerce store hash, Shopee/Lazada shop id, Wix account id, or — for WooCommerce — your store's domain WITHOUT `https://` (e.g. `mystore.com`).
firestarter_connect_tiktokConnect a seller's TikTok Shop to Firestarter so their catalog syncs and orders flow back. If a TikTok Shop is already connected, returns its status. TikTok Shop currently connects by ACCESS TOKEN (not one-click OAuth yet): the seller authorizes Firestarter in TikTok Shop Partner Center and provides their shop access token + shop id/region. Call with no arguments to check status or get setup instructions; call with access_token AND shop_domain to create the connection. Use this whenever a seller mentions TikTok Shop or wants to sync their TikTok products. The access token is a secret credential: it is stored encrypted server-side and never echoed in any response.
ParameterTypeDescription
access_tokenstringThe seller's TikTok Shop access token (from TikTok Shop Partner Center authorization). Omit to check status or get instructions. This is a secret — never echo it back.
shop_domainstringThe seller's TikTok Shop identifier (shop id, shop cipher, or region/store name). Required together with access_token to create the connection.
firestarter_create_dropCreate a community-sponsored DROP on a market you own: a per-claim discount on ONE listing for the first N members, optionally opening it to higher tiers first (a tier-gated early-access window). It applies at checkout when a member claims a slot (firestarter_drops action 'claim'), first-come first-served, one per member. Who funds it depends on whose listing it is: on YOUR OWN listing it goes live immediately with no approval needed — funded from your drop wallet if it covers the whole pot (max_claims × discount), otherwise from your own seller proceeds; on ANOTHER seller's listing it goes live now only if your drop wallet covers the pot (topped up via firestarter_fund_wallet, and the seller is made whole from it) or that seller has granted your community standing approval — otherwise it waits as a request for the seller to approve (firestarter_drop_requests). Distinct from tiered ACCESS (firestarter_set_market_tiers), which never discounts. test/live follows your API key's environment.
ParameterTypeDescription
discount_cents *integerPer-claim discount in cents, e.g. 500 = $5 off each claimed order.
expires_in_hoursnumberHours until the drop expires. Default 168 (7 days).
listing_id *stringThe listing (lst_...) to discount — find one with firestarter_catalog_search. Must be a real, sellable listing.
max_claims *integerHow many members can claim it (the 'first N') — first-come, first-served, one per member.
min_tierintegerRung required to claim DURING the priority window (0 = everyone). Use with priority_hours to give higher tiers early access first.
priority_hoursnumberHours the drop stays tier-gated (to min_tier and up) before opening to everyone. Omit or 0 = open to all immediately.
program_id *stringThe market/program id you own (from firestarter_my_markets).
firestarter_create_marketSet up a community/affiliate 'market' on Firestarter so a community owner or influencer earns a share of Firestarter's platform fee on every sale their community drives. Use when a user asks to create, set up, or start a community market, affiliate program, or 'store for my audience' (e.g. Discord/Telegram/X following). Market creation is independent of seller onboarding and country: it does NOT require being a Firestarter seller, connecting Stripe, or living in a payout-supported country — it works from ANY country, including ones where seller payouts aren't yet available. (A payout method is only needed LATER to withdraw accrued earnings, and can be connected any time.) Creates an attribution PROGRAM owned by the caller. `share_bps` is the cut of the PLATFORM FEE in basis points (1000 = 10%); it is capped at the platform self-serve max and the response returns the effective value. Optionally claim a `handle` now for a memorable community URL (firestarter.network/m/<handle>); it can also be set or changed later with firestarter_set_market_handle. A share code for the community comes from firestarter_market_link.
ParameterTypeDescription
display_namestringBuyer-facing community name, e.g. 'Analog'. Displayed on join/browse/community surfaces.
handlestringOptional vanity handle for the community URL — firestarter.network/m/<handle> instead of a random share code. 2-31 chars: letters, digits and hyphens, must start with a letter or digit. Case is ignored (normalized to lowercase), so 'Analog' and 'analog' are the same handle. Must be unique; the API rejects handles that are reserved or shaped like a share code. If it's taken the whole create fails, so retry with a different handle (or omit it and claim one later with firestarter_set_market_handle).
share_bps *integerCut of Firestarter's platform fee in basis points (1000 = 10%). Capped at the platform self-serve max; the response returns the effective value.
taglinestringOne-line 'what this community is about', shown under the name on the join page and in firestarter_market_preview. Change it later with firestarter_update_market.
typestringProgram type. Default 'community'.
firestarter_create_voucherCreate a voucher (also called a coupon, promo code, or discount code) that buyers can apply to your listings. Requires a SELLER account with at least one listing — a community-market owner who only recommends other sellers' products has nothing of their own to discount; tiered access (firestarter_set_market_tiers) is the member-reward mechanism for that case. Supports percentage off, a fixed amount off, or free shipping, with an optional start/end date, usage cap, per-buyer limit, minimum order value, and scoping to a single listing. YOU FUND THE DISCOUNT: it comes out of your proceeds, and the platform fee is charged on the discounted total. Dates accept natural language — 'next Friday', 'in 2 weeks' — as well as ISO dates. A discount above 50% requires confirm_deep_discount — a flag attesting that the seller has confirmed that unusually deep number. If the voucher would leave the seller's cheapest orders below the payable minimum the call is rejected with an explanation rather than creating something whose orders would fail at payment.
ParameterTypeDescription
code *stringThe code buyers type, e.g. 'SUMMER20'. 2-64 characters: letters, numbers, dashes or underscores. Case-insensitive; stored uppercase.
confirm_deep_discountbooleanRequired to create a discount above 50%. Only pass it after the seller has confirmed that exact number.
discount_amount_centsintegerFixed amount off in cents (e.g. 500 = $5 off). Use instead of discount_percent.
discount_percentintegerPercent off, 1-100. Use this OR discount_amount_cents, not both.
discoverablebooleanDefault true: buyer agents can find and auto-apply it. Set false for a targeted code usable only by someone you give it to.
expires_atstringWhen it stops working. Natural language ('next Friday') or ISO. Omit for no expiry.
free_shippingbooleanSet true for a free-shipping voucher instead of a discount off the item price.
listing_idstringRestrict the voucher to one of your listings (lst_...). Omit to apply across all of them.
max_usesintegerTotal redemptions allowed across all buyers. Omit for unlimited.
min_order_centsintegerMinimum order subtotal in cents before the voucher applies.
per_buyer_limitintegerHow many times one buyer may use it. Omit for unlimited.
starts_atstringWhen it becomes usable. Natural language ('tomorrow') or ISO. Omit to start immediately.
firestarter_delete_marketRemove a community market you own. What this does depends on the market, and the two outcomes are NOT equivalent — say which one happened. A market that never had a member and never earned anything is DELETED outright, along with its share links and shelf, and its market slot is freed. A market that has members or earnings cannot be deleted (its records are referenced by member bindings and by the fee ledger); it is ARCHIVED instead: it stops earning immediately and disappears from the public listings, but two things are permanent — it keeps using one of the owner's 3 market slots forever, and its vanity handle goes back into the pool, so anyone can claim /m/<handle> next and old links to it will follow whoever does. Use only when the owner has clearly asked to delete, remove, or close a specific market. `confirm` must be true, and you must only set it after the owner has confirmed THAT market by name — never on a vague 'tidy up my markets'. Read the market list first with firestarter_my_markets if you are unsure which one they mean.
ParameterTypeDescription
confirm *booleanAttestation that the owner has confirmed removing this specific market by name. Never pass this on your own initiative or to retry a failed call.
program_id *stringThe market/program id (apg_...) to remove, from firestarter_my_markets. Removing the wrong one is not undoable, so confirm the NAME with the owner before calling.
firestarter_delete_ship_fromDelete a seller ship-from (fulfillment) location by id (floc_..., from firestarter_ship_from_locations). Deleting the primary leaves quotes rated from the platform origin until another location is added or promoted via firestarter_save_ship_from. Seller accounts only.
ParameterTypeDescription
location_id *stringThe location id (floc_...) to delete
firestarter_delistRemove one of your listings from the network (soft delete). Takes the product off the market immediately: buyers' agents can no longer find or buy it, and its share link goes dark.
ParameterTypeDescription
listing_id *stringThe listing ID (lst_...) to delist
firestarter_demandCheck demand intelligence for a specific listing or category. See what buyers are searching for, demand trends, and pricing signals.
ParameterTypeDescription
categorystringCheck demand for a category (e.g. 'electronics/audio')
listing_idstringSpecific listing ID to check demand for
firestarter_developer_marginRead this organization's DEVELOPER MARGIN — the markup it adds on top of the item total for purchases made through its own API keys, disclosed to the buyer and paid out to this organization when the seller is paid. Returns the current margin, the platform ceiling, and margin earned so far. Read-only: use firestarter_set_developer_margin to set or change it. NOT the same thing as a community market's share_bps (firestarter_create_market), which is a cut of Firestarter's own platform fee and costs the buyer nothing — this one is money the buyer pays.
ParameterTypeDescription
margin_percentanyIGNORED here — this tool only reads. Use firestarter_set_developer_margin.
firestarter_discover_marketsBrowse public community markets a buyer can join (the 'Discover communities' list): each one's name, tagline, community URL/handle, join code, and social proof (members, orders driven). Use when a buyer asks what communities exist, wants to find one to support, or says 'discover community markets'. To see a specific community's curated shelf use firestarter_market_preview; to join one use firestarter_join_market with its code. Read-only, public — no sign-in needed.
ParameterTypeDescription
limitintegerMax communities to return (default 12, max 24).
firestarter_disputesFor BUYERS: open, check, and resolve disputes on orders the user BOUGHT. Use this whenever a buyer asks 'is there a dispute on my order?', wants to open a dispute (item never arrived, arrived damaged / wrong / not as described), or needs to respond to one — post a note or photo, accept / reject / counter the seller's partial-refund offer, withdraw, or escalate to Firestarter. Call with NO arguments to list the buyer's disputes; pass an order's execution_id (exec_…) to check whether THAT order has a dispute; pass a dispute_id (disp_…) to see the full thread. This is the BUYER side — for disputes on orders the user is SELLING, use firestarter_seller_disputes instead.
ParameterTypeDescription
actionstringWhat to do. OMIT to list the buyer's disputes, or to view one (pass dispute_id, or execution_id to look up the dispute on that order). 'open' = file a new dispute (needs execution_id + reason). 'message' = post a note and/or photo to the thread (needs dispute_id or execution_id, plus message and/or image_urls; for a photo attached in the chat use firestarter_upload_image with dispute_id instead — never rebuild it as base64). 'accept' / 'reject' = respond to the seller's split offer (offer_id optional — defaults to the latest pending seller offer). 'counter' = propose your own split (needs buyer_pct + seller_pct). 'withdraw' = drop the dispute. 'escalate' = ask Firestarter to review.
buyer_pctnumberFor 'counter': the percent YOU (the buyer) would be refunded. buyer_pct + seller_pct must equal 100.
dispute_idstringDispute id (disp_…). Identifies which dispute to view or act on for message / accept / reject / counter / withdraw / escalate.
execution_idstringOrder / execution id (exec_…). Required for 'open'. With no action, pass this to check whether a specific order has a dispute. May also stand in for dispute_id on actions — the dispute on that order is looked up.
image_base64stringFor 'message': LAST RESORT — an evidence photo as a base64 data-URI, only for bytes that exist at no URL and in no file. NEVER for a chat attachment: use firestarter_upload_image with dispute_id, which is lossless and takes seconds.
image_urlsarrayFor 'message': evidence photos that ALREADY EXIST at a public https URL — pass those straight through, up to 5. For a photo ATTACHED IN THE CHAT there is no such URL: do not ask the buyer for one, call firestarter_upload_image with dispute_id instead (it displays a drop zone and posts the photo to this thread). Never rebuild an image as a base64 data-URI — a photo is far too large to survive being printed into a tool call, which is why attaching used to fail.
messagestringFor 'message': the text to post to the dispute thread.
offer_idstringFor 'accept' / 'reject': the specific offer id to respond to. Omit to act on the latest pending seller offer.
reasonstringFor 'open': what went wrong, in the buyer's words (e.g. 'Package never arrived, tracking stuck for two weeks'). Also used as the optional note on a 'counter' or 'escalate'.
seller_pctnumberFor 'counter': the percent the seller keeps. buyer_pct + seller_pct must equal 100.
typestringFor 'open': the category of problem. Use 'not_received' when the order never arrived. Defaults to 'not_as_described'.
firestarter_drop_requestsList the community-sponsored drop requests waiting on YOUR decision as a seller: a community owner has proposed a per-claim discount on one of your listings, and it stays invisible to buyers and unclaimable until you approve or reject it (or expires on its own). Shows the requesting community, the listing, the discount, how many members can claim it, and the deadline to decide. Use firestarter_approve_drop or firestarter_reject_drop with a request's drop id — or firestarter_trust_community_drops to stop reviewing this community's requests one by one.

Parameters not published.

firestarter_dropsCommunity-sponsored drops: a community owner funds a discount on a specific listing for the first N members, sometimes opening it to higher tiers first. Use action 'list' with a listing_id to see any live drops on it — each shows the per-claim discount, how many slots remain, and whether it is still in a tier-gated early-access window. Use action 'claim' with a drop_id to reserve a slot for the buyer before checkout — first-come, first-served, one per member; the reserved discount then applies to that buyer's purchase of the listing. test/live follows the API key's environment.
ParameterTypeDescription
action *string'list' the live drops on a listing, or 'claim' a specific drop_id.
drop_idstringDrop to claim (required for action 'claim').
listing_idstringListing to list drops for (required for action 'list').
firestarter_executeStart a purchase. Step 1 of the buy flow: it finds products matching a natural-language request (or pins to an exact listing), verifies the seller, computes real pricing + shipping, and returns ranked OPTIONS that are AWAITING APPROVAL — it does NOT pay yet. Full flow: firestarter_execute (find/price) → firestarter_approve (confirm + pay) → firestarter_receipt (proof of payment) and firestarter_track_order (delivery). Each purchasable option lists real DELIVERY OPTIONS (Standard / Express / Same-Day with prices and ETAs); the delivery speed is the buyer's choice, selected at approval via shipping_option_index (firestarter_shipping_options re-fetches or previews a speed's total; firestarter_shipping_estimate quotes shipping on a listing BEFORE any purchase starts). No budget, address, or payment method is needed to call this — a card is requested only at the very end, after the buyer approves; browsing, quoting, and comparing shipping never require one. A saved shipping address is used automatically — the buyer's street, zip, and phone are already on file, and the response's `default_delivery` shows a masked view of the ship-to. A new address matters only when none is saved or the order ships somewhere else; a saved `address_id` (from firestarter_addresses) is accepted in place of a re-typed address. When the buyer's `location` (country, and city if known) is provided, results are localized to their country so a buyer in Kenya sees locally-deliverable options first instead of an empty or US-only list. An exact listing id (lst_..., e.g. from a firestarter.network/l/<id> share link or firestarter_catalog_search) can be passed as listing_id to skip search and pin to that exact product. Results may include browse-only options (external, or not buyable right now) that can't be approved — each carries a link that can be shared instead. auto_pay presumes the buyer's explicit prior authorization to buy without a confirmation step.
ParameterTypeDescription
address_idstringA saved address id (addr_...) to ship to, from firestarter_addresses. Optional — omit to use the buyer's default saved address. Localizes search + shipping to that destination.
auto_paybooleanIf true, automatically pay for the best option within budget WITHOUT a confirmation step — only when the buyer explicitly pre-authorized it. If false (default), options are returned for approval.
budget_maxnumberMaximum budget in USD. Optional — omit to see all options regardless of price.
delivery_addressanyOptional shipping address — pass EITHER a single-line string (e.g. "123 Main St, Austin, TX 78701, US") OR an object { name?, street1, street2?, city, state?, zip?, country? } (country is an ISO code, e.g. US/TH; defaults to US). The buyer's saved default address is used automatically at approval, so only pass one here if they have none saved or want it shipped elsewhere; prefer a saved address_id. A COMPLETE address (ZIP + state for US/CA/AU) lets execute quote a REAL carrier rate up front instead of the flat placeholder; a partial or odd-shaped address is accepted anyway (never rejected for shape) and the response's `needs_more` names exactly what to collect.
hold_at_deliveredbooleanKeep the escrow hold in place after delivery, instead of releasing it the moment the order is marked delivered, so the order can still be disputed — which is what firestarter_disputes needs to open a dispute at all. The order still ships and delivers normally; only the payout is held, on the same inspection window a live order gets. REQUIRES the organization's test mode to be ON as well as a test key: a test key on its own runs the mock sandbox, which never creates an escrow hold for this to act on, and the API now refuses the flag there (HOLD_AT_DELIVERED_UNAVAILABLE) rather than accepting a purchase whose hold would be silently dropped. Inert on a live key, where escrow already holds for the full window.
hold_at_shippedbooleanTEST MODE ONLY (fs_test_ keys): park the order at 'shipped' instead of auto-delivering it ~2s later. The mock shipment, tracking number and 'shipped' status all still happen; only the auto-deliver timer is skipped, so the order can be inspected mid-flight and then delivered explicitly with firestarter_confirm_delivery. Ignored on a live key. Use it to stage a shipped-but-not-delivered order for QA.
listing_idstringExact Firestarter listing id (lst_...) to buy — from a listing or a share link (firestarter.network/l/<id>). Pins the purchase to that listing, skipping product search. Always pass it when you have one.
locationobjectWhere the buyer is. Pass this whenever you know it (from the conversation, profile, or a prior message) even without a full delivery address — it makes search location-aware so local marketplaces are shown first.
prioritystringOptimization priority: cost (cheapest), speed (fastest delivery), quality (best rated). Default cost — shipping is quoted and shipped at the cheapest carrier rate unless the buyer asks for speed/quality.
request *stringNatural language description of what to buy (e.g. 'specialty coffee beans under $30'). This is the only required field — call with just this and refine later.
requested_byobjectWho asked for this purchase, when relaying someone else's request (e.g. a teammate in chat). Stored as execution metadata so the buyer's dashboard can attribute the order. Integrations set this programmatically; pass it whenever you know the requester.
voucher_codestringA discount code the buyer already has (voucher / coupon / promo code). Only meaningful for a code the buyer supplied — the best publicly available voucher is applied automatically, so searching for codes is unnecessary; this field exists for private or targeted codes that auto-apply cannot find. If the code can't be used the order still proceeds at the best price available, and the response explains why it didn't apply.
firestarter_fund_walletDeposit money into your drop wallet via Stripe Checkout — the prepaid balance that self-funds drops you create (firestarter_create_drop). Once a drop's whole pot (max_claims x discount) is covered by your wallet balance, it goes LIVE IMMEDIATELY with no seller approval needed, because you're paying for the discount yourself rather than asking the seller to eat it. $1.00 minimum deposit. Returns a Stripe Checkout link to open in a browser; the wallet credits once payment completes (the credit shows up in firestarter_wallet_balance). Use when an owner asks to fund/top up/add money to their drop wallet.
ParameterTypeDescription
amount_cents *integerAmount to deposit, in cents. Minimum 100 ($1.00).
firestarter_importImport a seller's EXISTING listing from another marketplace (Craigslist, Gumtree, their own site) into Firestarter. Give it the listing URL, or pasted listing text plus photo URLs, and it creates a DRAFT listing for the seller to review - not live, not buyable, no share link yet. Amazon, Walmart, eBay, Etsy, Facebook Marketplace, OfferUp, Mercari and Shopee usually block server fetches: a fetch is still attempted, but for these platforms a call carrying BOTH source_url (for provenance) AND raw_text + photo_urls succeeds in one round trip where the fetch alone rarely does. Other sites that fail return PLATFORM_BLOCKED or EXTRACTION_EMPTY - a retry with the seller's pasted listing text in raw_text (plus photo_urls) recovers the import. Activation (firestarter_update_listing, status 'active') requires a positive price (firestarter_reprice if the import found none) and at least one photo.
ParameterTypeDescription
photo_urlsarrayPhoto URLs for the listing, e.g. image links the seller PASTED as text. Seller photos lead the images array. A photo ATTACHED to the message is not a URL and cannot go here — import first, then call firestarter_upload_image with the new listing_id to display a drop zone for it.
raw_textstringPasted listing text (title, price, description - at least 10 characters). Send this alongside source_url up front for known bot-blocking platforms (Amazon, eBay, etc.) - a fetch will still be tried but is unlikely to succeed. Required whenever source_url is omitted or a fetch fails; also fills gaps URL extraction missed.
source_urlstringURL of the seller's existing listing (e.g. a Craigslist post). For known bot-blocking platforms (Amazon, eBay, Etsy, Facebook, OfferUp, Mercari, Walmart, Shopee), still include this for provenance, but pair it with raw_text up front.
firestarter_join_marketJoin a community market using its share code, so the caller's purchases (and, when enabled, their sales) are attributed to that community and it earns its share. Joining REPLACES any community the buyer already supports — their attribution moves to the new community for all future orders. Use when a user pastes a Firestarter join/market code or asks to join a community's market. The community's picks are visible before joining via firestarter_market_preview.
ParameterTypeDescription
code *stringThe market share code the community gave you.
firestarter_leave_marketDisconnect (delink) the buyer from their current community market so future orders no longer credit it. Use when a buyer asks to leave/disconnect a community, or wants to switch to another one. Already-earned credit on past orders still clears; only future activity stops being attributed. This is an account-level change.

Parameters not published.

firestarter_listList (create) a product for sale on Firestarter. ONLY two fields are required: product_name and base_price (USD). Everything else is OPTIONAL with sensible defaults, so a listing can be created from minimal information and refined afterwards; the response echoes the resulting settings. Defaults when omitted: inventory unlimited, shipping = estimated live at checkout by the delivery provider (based on the buyer's destination; sellers no longer set a flat/free rate), ship-from = account default address, ships worldwide (cross-border buyers get a duties disclosure; restrict with shipping_policy). Also optionally settable: brand, condition, sku, return policy, dispatch time, country of origin, physical dimensions/weight, materials, tags, and size/color variants — all of them can be filled in later with firestarter_update_listing. image_urls accepts photo URLs that already exist (e.g. hosted URLs returned by firestarter_upload_image); for a photo ATTACHED IN THE CHAT, create the listing WITHOUT image_urls — the draft response displays a drop zone the seller drops the photo onto, which attaches it losslessly and activates the listing (never re-encode an attachment as base64). The listing goes live instantly unless something blocks activation (e.g. no product photo yet — see allow_imageless), in which case it's saved as a draft and the response lists exactly what to fix. To VIEW or edit listings you already have, use firestarter_listings / firestarter_update_listing instead; to BROWSE other sellers' products, use firestarter_catalog_search.
ParameterTypeDescription
allow_duplicatebooleanCreate this listing even though the seller already has one with the same name. Only pass true if the seller confirms they genuinely want a second, separate listing.
allow_imagelessbooleanOverride the NEEDS_IMAGE activation gate and let this listing go live with no photo. Only pass true if the seller explicitly can't provide one right now.
base_price *numberREQUIRED. Sale price in USD, e.g. 49.99.
brandstringManufacturer or brand name, e.g. 'Logitech'.
categorystringOptional. Product category (e.g. 'electronics/audio/earbuds'). Infer a reasonable one from the product name if obvious; otherwise omit — don't ask.
ceiling_pricenumberNever surge above this price
conditionstringItem condition. Omit for new/unspecified.
country_of_originanyISO 3166-1 alpha-2 country code where the item was made, e.g. 'US', 'VN'.
descriptionstringProduct description shown to buyers on the listing page. Pass the seller's own wording when they gave one; when they ask you to WRITE one, pass the text you wrote HERE — a description that exists only in the chat is never saved. Can be edited later with firestarter_update_listing.
dynamic_pricingbooleanEnable demand-based pricing
floor_pricenumberNever sell below this price
fulfillment_modestringHow orders for this listing get shipped. 'seller_managed' = NO platform label is ever bought: each paid order holds in awaiting_shipment until the seller ships it with their own carrier and enters tracking via firestarter_ship_order. 'platform' = the platform always books the carrier label. Omit for auto: platform label when a carrier-ratable ship-from exists, otherwise seller-managed. Pass 'seller_managed' when the seller says they ship orders themselves / with their own courier.
height_inanyPackaged height, in inches.
image_urlsarrayPublic product photo URLs (first is the primary image), e.g. hosted URLs returned by firestarter_upload_image. For a photo the seller ATTACHED IN THE CHAT, do NOT try to pass it here — create the listing without photos and the draft response displays a drop zone that uploads the original file losslessly. Never rebuild an attachment as a base64 data-URI, and never ask the seller to re-send a photo already in the conversation.
inventory_qtynumberOptional. Available quantity. Omit for unlimited — don't ask the seller unless they mention stock limits.
length_inanyPackaged length, in inches.
materialsarrayMaterials the item is made of, e.g. ['cotton', 'polyester'].
product_name *stringREQUIRED. What's being sold, e.g. 'Logitech MX Master 3S Wireless Mouse'.
return_policystringFree-text return policy shown to buyers, e.g. '30-day returns, buyer pays return shipping.'
ship_fromobjectShip-from (origin) address — where this item ships FROM. Used to compute real shipping rates (#332). Omit to use your account's default fulfillment address.
ship_time_daysanyTypical number of days from order to dispatch (handling time), not transit time.
shippingnumberDeprecated and ignored — shipping is always estimated live from a delivery service provider based on the buyer's destination; sellers no longer set a flat/free shipping price. Accepted for backward compatibility only.
shipping_policyobjectWhere the seller is willing to ship this item. Omit to default to WORLDWIDE (ships anywhere the platform hard rules allow; cross-border buyers are shown a duties disclosure). mode 'domestic' = home country only; mode 'list' with countries:['CA','GB',...] = home country plus those ISO alpha-2 destinations; mode 'worldwide' (optionally exclude:['BR',...]) = everywhere except excluded codes. Sanctioned/embargoed destinations are always blocked regardless of this setting.
skustringSeller's own inventory/stock-keeping code for this listing. Distinct from any barcode/UPC — seller-internal, never shown to buyers.
source_urlstringOptional. If the seller mentions or pastes a link to their OWN existing listing for this product elsewhere (their Etsy/eBay/Shopify page, etc.), pass it here. Firestarter will fetch it once and fill in whatever descriptive details (description, category, brand, materials, tags, condition) the seller didn't already give you — it never overwrites anything you explicitly set. Best-effort: if the fetch fails or finds nothing, the listing is still created normally.
tagsarrayFreeform search/discovery tags, e.g. ['summer', 'unisex'].
variantsarraySize/color/option variants for display and inventory tracking (not a checkout-level construct — orders still resolve at the listing level).
video_urlsarrayProduct video URLs (MP4, MOV, or WebM, up to 25 MB and about 60 seconds each, max 3). The server fetches and re-hosts each one, so pass any public https URL — NEVER a base64 form: a 25 MB video does not survive being emitted as a tool argument. For a video ATTACHED IN THE CHAT, the drop zone accepts it (call firestarter_upload_image with NO image to display one); a local video file goes through firestarter_upload_video's video_path on the local build. Omit to leave existing videos untouched; pass an empty array to remove them. Videos are shown alongside the photos on the listing page and the share page.
weight_ozanyPackaged weight, in ounces.
width_inanyPackaged width, in inches.
firestarter_listingsView your own product listings (seller side): name, current price, inventory, status, demand, and live share link when available. Pass listing_id for full detail on one listing; omit it to list every listing you have, including drafts that still need to be activated. Use this when a seller wants to see, verify, or share what they have listed. Active live listings have a public share link; sandbox and draft listings do not.
ParameterTypeDescription
listing_idstringSpecific listing ID (lst_...) for full detail. Omit to list every listing you have, drafts included.
firestarter_market_dropsList the community-sponsored drops on a market you OWN (created with firestarter_create_drop): each drop's id, discount, how many slots have been claimed vs the cap, its status (active, exhausted, expired, or still pending_seller_approval for a drop on another seller's listing), the listing it discounts, any tier gate, and when it expires. The drop id shown is what firestarter_cancel_drop needs to withdraw a still-pending request. Use when an owner asks 'how are my drops doing?', 'how many people claimed my drop?', or wants to see what drops are still live before creating another. Read-only. This is the OWNER view; buyers discover and claim drops on a specific listing with firestarter_drops.
ParameterTypeDescription
program_id *stringThe market/program id you own (from firestarter_my_markets).
firestarter_market_earningsShow the earnings of the markets you own: override earnings pending vs paid out, and transaction counts. Use when a community owner asks how much they have earned or wants their attribution dashboard.

Parameters not published.

firestarter_market_linkMint a shareable join code for a market you own (from firestarter_create_market). Give the code to your community — when a member redeems it (firestarter_join_market) they are attributed to your program so you earn on their activity. Optionally tag a channel/campaign for tracking.
ParameterTypeDescription
campaignstringOptional campaign tag for tracking.
channelstringOptional channel tag, e.g. 'discord', 'x', 'telegram'.
program_id *stringThe market/program id from firestarter_create_market.
firestarter_market_previewPreview a community market BEFORE joining — read-only, no join. Given a share code or vanity handle, returns what a signed-out visitor sees on firestarter.network/m/<handle>: the community name, tagline, its curated shelf (the owner's picks of OTHER sellers' products), and what the community itself sells (its own listings) — every item with a listing_id that firestarter_execute accepts for purchase. Use when a buyer pastes a market code/link or asks 'what is this community / what do they recommend / what's in this market' — the preview shows both surfaces before any commitment, and joining (firestarter_join_market) remains a separate optional step; items are buyable without joining. JOINING itself gives the buyer no automatic discount or cashback — their price is unchanged and the community earns a share of Firestarter's platform fee at no extra cost to the buyer, never from the seller's payout; the buyer's benefit is curation and supporting the community. A community MAY separately fund drops (real discounts the buyer claims before checkout) and reward members with tiered early access; both appear in the preview when present — joining alone still grants no discount.
ParameterTypeDescription
code *stringThe community's share code or vanity handle (e.g. the <code> in firestarter.network/m/<code>).
firestarter_marketplace_searchSearch EXTERNAL marketplaces and the Firestarter catalog at once — Shopee (Thailand first; no login or connection needed — results come from localized Google Shopping filtered to shopee.co.th, or Shopee's affiliate API when the server has credentials), Lazada, seeded Shopify stores — and return one ranked comparison with photos, prices, ratings and sold counts, rendered like firestarter_catalog_search. Ranked by price, rating and popularity; on-network items get a small bonus. Each external row carries a Buy link that opens the item in that marketplace's app, where the buyer picks the variant and pays with what the app already holds; Firestarter never touches their account. After they pay, record the order with firestarter_record_purchase. Usually answers in seconds; if a source is still running you get what's back so far plus a job_id — call again with that job_id to collect the rest (never treat a partial answer as 'no results'). Admin-only while the feature is proven.
ParameterTypeDescription
countrystringStorefront country (MY, SG, TH). Default: the buyer's connected marketplace's country.
currencystringCurrency of max_price (MYR, SGD, THB). Default: the storefront's.
job_idstringRe-poll an earlier search instead of starting a new one — pass the job_id from a partial result.
limitintegerMax results per source (default 20).
marketplacesarrayRestrict sources. Default: every connected marketplace plus Shopify stores and the Firestarter catalog.
max_pricenumberMaximum price in the storefront currency (e.g. 15 for RM15 / ฿15).
query *stringWhat the buyer wants, in their words, e.g. 'cotton buds 200pcs' or 'สำลีก้าน'. Put price limits in max_price, not the query.
firestarter_marketplacesWhich of the buyer's OWN marketplace accounts (Shopee, Lazada) are connected for marketplace search and checkout, with the countries supported (MY, SG, TH). A connected marketplace is searched by firestarter_marketplace_search and can be bought from with the payment method already saved on that marketplace. `needs_login` means the saved sign-in expired — reconnect with firestarter_connect_marketplace. Read-only. Admin-only while the feature is proven; other callers get a plain refusal.

Parameters not published.

firestarter_messageSend a follow-up message to an active execution. Use this to refine the search, change requirements, or ask questions about the options.
ParameterTypeDescription
execution_id *stringThe execution ID to message
message *stringFollow-up message (e.g. 'I prefer organic options' or 'Can you find something cheaper?')
firestarter_my_marketShow which community market the buyer is currently connected to (if any): the community name, join code, program status, AND its products — what the community recommends (its curated shelf) and what it sells (its own listings), each buyable via firestarter_execute. Use when a buyer asks 'what market am I in?', 'am I connected to a community?', 'what can I buy here?', or before joining/leaving so you can confirm the current state — it doubles as a re-discovery of the community's picks. Read-only.

Parameters not published.

firestarter_my_marketsList the community markets you OWN (created with firestarter_create_market): each one's program id, buyer-facing name, community URL/handle, share code, status, your fee share, and current member count. Use when an owner asks 'what markets do I have?', needs a market's program_id for another tool (firestarter_market_link, firestarter_set_market_handle, firestarter_set_market_picks), or wants an at-a-glance view. Read-only. For earnings use firestarter_market_earnings; to preview a community's public shelf use firestarter_market_preview.

Parameters not published.

firestarter_payment_methodCheck the buyer's payment method status and get a link to add or update their card. The card is the LAST step of a purchase, NOT a precondition: search (firestarter_execute), shipping estimates, and delivery-speed selection (shipping_option_index) all happen before any card is collected, and browsing, quoting, and comparing shipping never require one. A card is genuinely needed only once an order is parked at awaiting_payment_method (after approval), or when the buyer explicitly asks to add one now. Use this tool when the buyer asks about payment or an order is waiting on a card. Returns a no-login Stripe setup link (works from any channel - WhatsApp, Slack, Telegram) plus a dashboard link.

Parameters not published.

firestarter_payout_eligibilityCheck whether Firestarter can pay a seller in a given country BEFORE they invest any effort — no seller account required. Takes an ISO 3166-1 alpha-2 country code and returns each payout rail's verdict for it. PayPal publishes its own payouts country list, so its 'unsupported' verdict is authoritative; Stripe decides eligibility per seller at connect time, so it comes back 'unknown' for any country outside a small documented snapshot — never treat 'unknown' as 'no'. Use this whenever someone asks 'can I sell on Firestarter from <country>' or before walking a seller through registration, so an unsupported country is caught up front instead of after earnings accrue that cannot be withdrawn. A seller in an unsupported (or still-undetermined) country can still register, list, and sell — earnings wait in escrow — but selling eventually pauses once held earnings pass a cap or the oldest hold has been waiting a long time (call firestarter_payouts for the current thresholds), which is exactly why checking first is worth it.
ParameterTypeDescription
country *stringISO 3166-1 alpha-2 country code, e.g. 'PK', 'NG', 'MY'.
firestarter_payoutsManage seller payout method — this is how a seller RECEIVES money, not permission to sell. A seller with no payout method lists and sells normally; earnings wait in escrow, and selling pauses automatically only once held earnings pass a cap or the oldest hold has been waiting a long time — call this tool for the current thresholds rather than quoting one, they are set by the API and change. Two providers, and NEITHER reaches everywhere: Stripe pays into bank accounts in ~44 documented recipient countries (incl. much of Europe, JP, SG, HK, MY, TH, IN) and its reach is UNKNOWN — not necessarily no — outside that list; PayPal covers more (~92) but excludes Pakistan, Bangladesh, Nigeria and Egypt among others. Do not promise either rail for a country without checking. Call with no arguments to check current status. Pass `provider` to set up a new method. Stripe eligibility is decided by Stripe from the seller's real country — there is no client-side ineligible-country list. To check a specific country before the seller invests any effort, call firestarter_payout_eligibility.
ParameterTypeDescription
countrystringISO 3166-1 alpha-2 code of the country the seller's business BANKS IN, e.g. 'MY', 'TH', 'SG', 'US'. REQUIRED for provider='stripe' unless the seller recorded one at registration: the API refuses to guess, because Stripe locks the country permanently at account creation and a wrong one can only be fixed by discarding the account. If Stripe does not support it you get a clear 422 naming the country — do not pre-filter on the seller's behalf. Irrelevant for PayPal.
paypal_emailstringPayPal email for receiving payouts. Required when provider='paypal'.
providerstringWhich payout provider to set up. Omit to check current status. 'stripe' = Stripe Connect (eligibility is Stripe's call, not a fixed list), 'paypal' = PayPal email (global, needs only the account email).
firestarter_previewPreview real products for a natural-language request WITHOUT starting a purchase. Returns live options with prices, whether each can be bought through Firestarter (vs browse-only), shipping, and per-option eligibility — in budget, can arrive by the deadline, and ships to the destination. Answers "what can you get me?" — a view of what's available before any purchase starts (firestarter_execute). Read-only: nothing is bought and no approval is created.
ParameterTypeDescription
citystringDestination city
contextobjectStructured buyer context: destination, locale, currency, and intent.
countrystringDestination country (ISO alpha-2 or common name) — enables shipping/serviceability checks
cursorstringOpaque pagination cursor from a prior preview's page.next_cursor to fetch the next page.
deadlinestringDelivery deadline, e.g. 'Friday', 'in 3 days', '2026-07-03'
limitnumberMax options per page (1-50, default 10).
max_pricenumberBudget ceiling in USD
min_pricenumberPrice floor in USD
quantitynumberHow many units (1-100)
query *stringWhat to look for, e.g. 'polo t-shirt' or 'wireless earbuds under $50'
firestarter_productShow one product from the Firestarter catalog in full detail — all photos, description, attributes, price, buyability, and the seller's trust profile (rating, review count, units sold, time on platform). This is the buyer's ZOOM-IN after firestarter_catalog_search or firestarter_preview: pass the listing id (lst_..., also parsed from a firestarter.network/l/<id> share link). Read-only — to buy, pass the same listing_id to firestarter_execute; for a shipping quote first, use firestarter_shipping_estimate.
ParameterTypeDescription
listing_id *stringThe listing to show (lst_..., from catalog search, preview, or a share link).
firestarter_purchasesOFF-NETWORK purchases only — the pilot log of purchases an agent completed on OTHER stores and recorded with firestarter_record_purchase. This is NOT the buyer's Firestarter order history: orders placed through Firestarter ("my orders", "order history", "what did I buy here") live in firestarter_status, which works on every key. This pilot log is test-environment keys only for now; live keys get a TEST_MODE_ONLY refusal — that refusal says nothing about Firestarter order history, which remains fully available via firestarter_status.
ParameterTypeDescription
limitnumberMax results (default 20, max 50)
purchase_idstringGet one purchase (pur_...) with full details. Omit to list.
querystringFilter by words in the title or seller name
sourcestringOnly purchases from one marketplace (e.g. "lazada")
firestarter_receiptGet the payment receipt for an order the buyer has already paid for (after firestarter_approve completed). Returns an itemized breakdown — item, subtotal, shipping, tax, total — plus payment method and date, suitable for expense or invoice records. Use whenever the buyer asks for a receipt, invoice, proof of payment, or expense documentation. If the order hasn't been paid yet, there's no receipt: check firestarter_status instead. For delivery progress use firestarter_track_order; to send the item back use firestarter_return.
ParameterTypeDescription
execution_id *stringThe execution/order ID to get a receipt for (exec_...)
firestarter_record_purchaseRecord a purchase completed OUTSIDE the network — e.g. after driving checkout on Lazada, a Shopify storefront, or any other store — so Firestarter keeps one purchase history across every marketplace and can reorder the item later. Call this right after an off-network checkout succeeds, with whatever details are visible on the confirmation page. Test-environment keys only for now: live keys get a TEST_MODE_ONLY refusal.
ParameterTypeDescription
amountnumberTotal paid, in the purchase currency
currencystringISO currency code (e.g. "MYR", "USD")
external_order_refstringThe store's order id/reference from the confirmation
image_urlstringProduct image URL
product_urlstringDirect product page URL — reorders reopen this
purchased_atstringISO 8601 purchase timestamp; omit for 'just now'
raw_payloadobjectAny extra captured details (confirmation-page fields, shipping, options)
seller_domainstringSeller's domain (e.g. "watsons.com.my") — powers later reorders and seller discovery
seller_namestringStore / seller name
source *stringWhere the purchase happened, lowercase (e.g. "lazada", "shopify", "shopee", "amazon", "other")
title *stringProduct title as shown by the store
firestarter_register_sellerRegister the current account as a seller on Firestarter. Registration is the precondition for creating listings (firestarter_list), importing products (firestarter_import), and connecting a store (firestarter_connect_shopify): a NO_SELLER_PROFILE error from those tools means this registration hasn't happened yet, and they succeed once it has. Only requires a business_name. Idempotent: if the account is already a seller, returns the existing profile without error. After registration the seller can immediately list products - payouts (firestarter_payouts) can be set up later.
ParameterTypeDescription
business_name *stringREQUIRED. The seller's business or brand name, e.g. "Tania's Art Studio" or "QuickShip Electronics".
countrystringOptional. ISO 3166-1 alpha-2 code of the country the seller's business BANKS IN, e.g. 'MY', 'TH', 'US'. Pass it if the seller has already mentioned where they are — it is required later for Stripe payouts and recording it now saves an extra round-trip. Never invent one: omit it rather than guessing from language or timezone, because Stripe locks it permanently at account creation.
typestringOptional. Seller type. Defaults to 'retailer'. Only ask if the seller mentions they're a wholesaler/manufacturer.
firestarter_reject_dropDecline a pending community drop request on one of your listings (from firestarter_drop_requests). It never goes live, nothing is charged against your proceeds, and the requesting community owner is notified — optionally with your reason. This decides only this one request; the same community can still ask again later unless you also revoke standing trust with firestarter_untrust_community_drops.
ParameterTypeDescription
drop_id *stringThe drop id to reject (from firestarter_drop_requests).
reasonstringOptional short reason shown to the requesting community owner (e.g. 'discount too deep for this item').
firestarter_repriceAdjust pricing or rules for an existing listing. Update base price, floor/ceiling limits, dynamic pricing settings, or pricing rules. Shipping is always estimated live from a delivery service provider and can no longer be set per-listing. Repricing re-fires the possession-verification gate whenever the listing would END UP at or above $500, or is in a luxury category at ANY price - so it can trip on a price CUT too (e.g. a watch dropped from $40 to $30), and it applies to paused and out-of-stock listings, not just live ones. When it trips, the new price is saved but the listing is moved back to draft and stops being buyable until the seller submits a photo via firestarter_verify; the tool output states this explicitly whenever it happens, so such a response is a conditional success, not a plain one.
ParameterTypeDescription
base_pricenumberNew base price in USD
ceiling_pricenumberNew ceiling price
dynamic_pricingbooleanEnable/disable dynamic pricing
floor_pricenumberNew floor price
listing_id *stringThe listing ID to reprice
shippingnumberDeprecated and ignored — shipping is always estimated live from a delivery service provider based on the buyer's destination. Accepted for backward compatibility only.
firestarter_request_escrowBUYER-side tool: the user found a listing on another site (Craigslist, Facebook Marketplace, Gumtree, ...) and wants to pay through Firestarter escrow instead of cash/wire. Creates an escrow invite with a claim link for the SELLER, plus a ready-to-send message. Firestarter never contacts external sellers: the invite reaches the seller only when the buyer sends that message themselves through the platform where they found the listing. Needs the listing URL and the buyer's email (that is where the goes-live notification lands). Facebook Marketplace / eBay / Etsy / OfferUp / Mercari usually block the fetch - a fetch is still attempted, and a call that also carries the item title and price yields an invite with real data even when the fetch fails.
ParameterTypeDescription
buyer_email *stringBuyer's email address - notified when the seller claims and the listing goes live
buyer_namestringBuyer's first name (shown to the seller on the claim page)
pricenumberAsking price in the listing's currency, buyer-supplied (for platforms that usually block fetches)
source_url *stringURL of the external listing the buyer wants to purchase
titlestringItem title, buyer-supplied. Ask for this up front for platforms that usually block fetches (Facebook Marketplace etc.) - the fetch is tried but is unlikely to succeed.
firestarter_returnInitiate a return for a purchased order. Creates a return shipping label and processes the refund. Use when a buyer wants to return an item, get a refund, or reports a problem with their purchase.
ParameterTypeDescription
execution_id *stringThe execution/order ID to return (exec_...)
reasonstringReason for the return (e.g. 'wrong size', 'damaged', 'not as described')
firestarter_reviewSubmit a review for a delivered/completed order. Use when the buyer wants to rate their purchase experience (1-5 stars with optional comment). Only one review per order is allowed.
ParameterTypeDescription
commentstringOptional text review (max 1000 chars)
execution_id *stringThe execution/order ID to review (exec_...)
rating *integerRating from 1 (poor) to 5 (excellent)
firestarter_save_addressSave a delivery address to the buyer's address book for reuse on future orders. Use this after a purchase when the buyer gave a new address, or when they explicitly ask to save an address. Pass an optional label (e.g. 'Home', 'Office', 'Mom's house') — if omitted, a default label is assigned. Set `is_default: true` to make it the default shipping address for future orders. Returns the saved address id.
ParameterTypeDescription
city *stringCity
countrystringISO country code (e.g. US, PK, KE, NG). Recommended whenever the buyer's country is known or named anywhere in the address — when omitted, the API infers the country from the address text, falling back to US only as a last resort.
is_defaultbooleanSet to true to make this the default shipping address.
labelstringLabel for this address (e.g. 'Home', 'Office', 'Warehouse'). If omitted, a default label is assigned.
namestringRecipient name
phonestringPhone number for delivery
statestringState / province / region
street1 *stringStreet address line 1
street2stringStreet address line 2 (apt, suite, etc.)
zipstringPostal / ZIP code
firestarter_save_ship_fromAdd or update a seller ship-from (fulfillment) location — the address shipping rates are quoted FROM. Three forms: (1) no location_id → create (street1 + city required; state/zip also required for US/CA/AU origins); (2) location_id + address fields → update that location; (3) location_id + is_primary true and NO address fields → just make it the primary. Set is_primary on the address parcels actually dispatch from — the primary drives every quote's origin. Seller accounts only.
ParameterTypeDescription
citystringCity (required when creating)
countrystringISO country code (e.g. US, TH). Defaults to US.
is_primarybooleanMake this the primary (rate-quote origin).
labelstringLabel, e.g. 'Bangkok warehouse'
location_idstringExisting location id (floc_...) to update or promote. Omit to create a new location.
phonestringPickup contact phone
statestringState/province — required for US/CA/AU origins
street1stringStreet address line 1 (required when creating)
street2stringStreet address line 2
zipstringPostal/ZIP — required for US/CA/AU origins
firestarter_seller_analyticsView seller revenue and order analytics - total revenue, order count, average order value, and 30-day daily breakdown. Use when a seller asks about their performance, earnings, or sales trends.

Parameters not published.

firestarter_seller_disputesView and resolve disputes on orders the user is SELLING (their own catalog/store). This is the SELLER side only. If the user is asking about something they BOUGHT — 'is there a dispute on my order?', a purchase that didn't arrive or arrived wrong — use firestarter_disputes instead. Call with NO arguments to list open disputes on the seller's sales (each shows its dispute_id). Pass dispute_id ALONE to read the full thread - what the buyer actually claimed, and any photos they attached. To act, add an action: 'message' (reply with a note and/or evidence photos, e.g. the packing shot taken before dispatch — for a photo ATTACHED IN THE CHAT call firestarter_upload_image with dispute_id and dispute_side 'seller' instead, which displays a drop zone and posts it to this thread), 'refund' (refund the buyer in full and lift the escrow freeze), 'contest' (reject the claim and state your case), or 'split' (propose a partial refund - include buyer_pct and seller_pct that sum to 100). Use when a seller mentions a dispute, complaint, refund, chargeback, or return on something they sell.
ParameterTypeDescription
actionstringWhat to do with the dispute: 'message' = reply to the buyer with a note and/or evidence photos (no money moves); 'refund' = full refund to the buyer; 'contest' = reject the claim; 'split' = propose a partial refund (also set buyer_pct + seller_pct).
buyer_pctnumberFor action 'split': percent refunded to the buyer. buyer_pct + seller_pct must equal 100.
dispute_idstringDispute ID to act on (disp_...). Omit to list all disputes. Pass it with NO action to read the full thread first.
image_base64stringFor 'message': LAST RESORT — an evidence photo as a base64 data-URI, only for bytes that exist at no URL and in no file. NEVER for a chat attachment: use firestarter_upload_image with dispute_id, which is lossless and takes seconds.
image_urlsarrayFor 'message': evidence photos that ALREADY EXIST at a public https URL — a packing shot on a CDN, proof of postage. Pass those straight through, up to 5. A photo ATTACHED IN THE CHAT has no such URL: do not ask the seller for one, call firestarter_upload_image with dispute_id and dispute_side 'seller' (it displays a drop zone and posts the photo to this thread). Never rebuild an image as a base64 data-URI — it is far too large to survive being printed into a tool call.
messagestringFor 'message': the text to post to the dispute thread, in the seller's words.
reasoningstringOptional note explaining the decision, recorded on the dispute and shown to the buyer.
seller_pctnumberFor action 'split': percent the seller keeps. buyer_pct + seller_pct must equal 100.
firestarter_seller_ordersView the seller's incoming orders — product, quantity, amount, net payout, order status, payout status, and carrier tracking when shipped. This is the start of the fulfillment flow: firestarter_seller_orders (see what sold) → firestarter_confirm_order (accept a pending order) → firestarter_ship_order (add tracking; the buyer is notified automatically). Use whenever a seller asks about their orders, sales, what sold, or recent activity. Covers all orders including those from a connected Shopify store. Each order line carries the order_id you pass to confirm/ship. Read-only: never changes anything.

Parameters not published.

firestarter_set_auto_approve_limitSet or disable the buyer's PERSISTENT, account-level auto-approval limit for purchases. Orders at or below the limit are auto-approved and paid without a manual confirmation step; anything above pauses for approval. It applies to EVERY future order on the account, across all surfaces (chat, dashboard, API), until changed. Pass set_limit_usd (e.g. 50 for '$50 per order'; 0 makes every order require manual approval) OR disable=true to turn auto-approval off entirely. The maximum limit is $10,000. Because orders under the limit are paid with no confirmation step, the exact dollar amount is safety-critical: the tool stores precisely the value passed, and success is confirmed by the response's echo of the stored setting. Use firestarter_auto_approve_limit to read the current value without changing it.
ParameterTypeDescription
disablebooleanSet true to turn OFF auto-approval entirely (every order requires manual approval). Mutually exclusive with set_limit_usd.
set_limit_usdnumberNew auto-approve limit in USD. Orders at or below this amount auto-approve; anything above pauses for approval. 0 = require manual approval for every order.
firestarter_set_developer_marginSet or change this organization's DEVELOPER MARGIN — the markup added on top of the item total for purchases made through its own API keys (e.g. 'set my developer margin to 10%', 'change my margin', 'take a 5% cut on my integration'). Applies to future purchases only; existing orders keep the margin frozen at the time they were paid. Pass margin_percent: 0 to turn it off. The platform ceiling is 10% and $50 per transaction. NOT the same thing as a community market's share_bps (firestarter_create_market): that is a cut of Firestarter's own platform fee, this is money the buyer pays on top of the item.
ParameterTypeDescription
margin_percent *numberMargin as a percentage of the item total, 0 to 10 (e.g. 10 = 10%, 2.5 = 2.5%). 0 turns the margin off. The API stores basis points; this is converted for you (10% = 1000 bps).
firestarter_set_market_avatarSet the avatar image on a community market you own. FOR A PICTURE ATTACHED IN THE CHAT, call this with program_id and NO image input: an interactive DROP ZONE is displayed, the owner drops the file onto it, and the ORIGINAL uploads at full quality and is set as the avatar automatically. Never re-encode a chat attachment as base64 yourself — model-emitted base64 is fabricated or truncated. Use image_url when the picture already exists at a public URL (the server fetches and re-hosts it — always prefer this). image_base64 is a last resort for bytes that exist at no URL. To change the market's name, tagline or discoverability use firestarter_update_market.
ParameterTypeDescription
image_base64stringLAST RESORT — only for bytes that exist at no URL. NEVER for a chat-attached picture: call with no image instead to display the lossless drop zone. Data-URI format, max 6 MB.
image_urlstringPREFERRED when a URL exists. Public URL of the image; the server fetches and re-hosts it (JPEG, PNG, WebP or GIF under 6 MB).
market_namestringOptional market name, used only to title the drop zone so the owner sees which market the avatar is for.
program_id *stringThe market/program id (from firestarter_create_market or firestarter_my_markets).
firestarter_set_market_handleClaim or change the vanity handle for a market you already own (from firestarter_create_market), so its URL is firestarter.network/m/<handle> instead of a random share code. Use when an owner wants a memorable community link, or to rename an existing handle. The handle is stable even if the underlying share code is rotated, and resolves to the same market as the code. It must be unique across Firestarter; the API rejects one that is already taken, reserved, or shaped like a share code.
ParameterTypeDescription
handle *stringVanity handle for the community URL — firestarter.network/m/<handle>. 2-31 chars: letters, digits and hyphens, must start with a letter or digit. Case is ignored (normalized to lowercase). Must be unique; reserved words and share-code-shaped strings are rejected.
program_id *stringThe market/program id from firestarter_create_market.
firestarter_set_market_picksCurate the shelf ('Recommends') for a community market you own — the products buyers see first on your join page and in the agent (firestarter_market_preview / firestarter_join_market). Picks are OTHER sellers' listings you recommend; your OWN listings already appear under what you sell and are rejected here. Up to 15 picks. Use when an owner wants to add, remove, reorder, or replace what their community recommends. Takes listing ids (lst_..., as returned by firestarter_catalog_search). `action`: 'replace' (default — the picks you pass become the exact shelf, in the order given), 'add' (append to the current shelf), or 'remove' (drop the given listing ids). Each pick may carry a short `note` ('why I picked it') that buyers see.
ParameterTypeDescription
actionstringreplace (default): the picks become the exact shelf, in order. add: append to the current shelf. remove: drop the given listing ids.
picks *arrayThe picks to set/add/remove. For 'remove', only each listing_id is used.
program_id *stringThe market/program id (from firestarter_create_market or firestarter_my_markets).
firestarter_set_market_tiersConfigure member tiers for a community market you own. Tiers reward members with ACCESS, never money or discounts — a higher tier sees picks you've staged early (firestarter_set_market_picks with min_tier). A member's tier is derived from their qualifying orders in your community over the last 12 months; nothing is stored per member, so there is no balance to top up and nothing expires. Every market already has working defaults (Member 0 / Regular 2 / Insider 5) — this tool renames rungs, changes how many orders each needs, adds a 4th rung, or switches tiers off. Raising a threshold never demotes an existing member for 30 days.
ParameterTypeDescription
enabledbooleanSet false to switch tiers off entirely for this market. Default true.
program_id *stringThe market/program id (from firestarter_my_markets).
tiersarray2-4 rungs, cheapest first. Omit to keep the platform defaults.
firestarter_set_shipping_policySet where a seller is willing to ship a listing. Use this when a buyer wants delivery to a country the listing does not yet cover (a checkout came back 'seller not shipping to that destination') and the seller agrees to ship there — or whenever the seller wants to change their shipping reach. mode 'domestic' = ship-from country only (the default); mode 'list' = the home country plus the countries you name (ISO alpha-2, e.g. ['CA','GB','AU']); mode 'worldwide' = everywhere except any you exclude. Sanctioned/embargoed destinations stay blocked regardless. Sets the policy for one listing — pass its ID.
ParameterTypeDescription
countriesarraymode 'list' only: ISO alpha-2 destination codes to serve, e.g. ['CA','GB']. The ship-from country is always included automatically.
excludearraymode 'worldwide' only: ISO alpha-2 codes to carve out, e.g. ['BR'].
listing_id *stringThe listing ID whose shipping policy to set
mode *string'domestic' = ship-from country only; 'list' = home country plus the named countries; 'worldwide' = everywhere except excluded
firestarter_set_spend_capRaise, lower, set, or remove the buyer's monthly spend cap - the safety limit on total monthly spend. Covers any request to increase, raise, bump, set, lower, or change the cap (e.g. 'increase my spending cap to $100', 'raise my limit to $X', 'cap my spending at $X'). The cap is always buyer-adjustable: a purchase rejected with SPEND_CAP_EXCEEDED goes through once the cap is raised here with a higher spend_cap_dollars and the purchase is retried. Set disable:true to remove the cap entirely. Use firestarter_spend_cap to read the current value without changing it.
ParameterTypeDescription
alert_threshold_pctintegerFire a warning when monthly spend reaches this % of the cap. Default 80.
disablebooleanSet to true to remove the spend cap entirely (no limit).
spend_cap_dollarsnumberNew monthly spend cap in dollars (e.g. 500 = $500/month).
firestarter_ship_from_locationsList the seller's ship-from (fulfillment) locations. The PRIMARY location is the origin every shipping quote is rated from — wrong shipping prices or 'can't ship there' reports usually trace back to it. Use firestarter_save_ship_from to add/correct one and firestarter_delete_ship_from to remove one. Seller accounts only.

Parameters not published.

firestarter_ship_orderMark an order shipped by attaching a carrier and tracking number — the final step of the seller fulfillment flow (firestarter_seller_orders → firestarter_confirm_order → firestarter_ship_order). The buyer is notified and can track delivery automatically; no separate buyer message is needed. Call once the seller has actually handed the package to the carrier and has a tracking number. ONLY order_id and tracking_number are required. carrier is inferred from the number when its format identifies the carrier (UPS 1Z…, USPS); for any other number the API asks for it (CARRIER_REQUIRED) — then ask the seller which courier they used and call again with carrier. Pass the order_id exactly as firestarter_seller_orders shows it (NOT the exec_... execution id).
ParameterTypeDescription
carrierstringCarrier name (e.g. 'USPS', 'UPS', 'FedEx', 'DHL', or a regional courier's own name such as 'Kerry Express'). Pass it whenever the seller named one. May be omitted only when the tracking number identifies the carrier by itself (UPS 1Z…, USPS) — otherwise the API answers CARRIER_REQUIRED and the seller has to be asked.
order_id *stringREQUIRED. The order_id from firestarter_seller_orders (the seller_earnings id, not the exec_... execution id).
tracking_number *stringREQUIRED. The carrier's tracking number for the shipment.
firestarter_shipping_estimateEstimate shipping for a listing BEFORE starting a purchase — read-only: no execution is created, no approval, nothing is bought. Given a listing id (lst_...) and a destination — a saved address_id, or just a country + ZIP (or city); a full street address is NOT needed — returns the rated delivery options (price, ETA, carrier when known) the buyer would see at checkout. Use it to answer "how much is shipping?" or "can this ship to me?" while the buyer is still browsing, e.g. from firestarter_preview / firestarter_catalog_search results or a firestarter.network/l/<id> share link. The rows are informational, NOT a menu to approve from: buying at a speed happens through firestarter_execute with the listing_id, with the speed selected at approval via shipping_option_index (or firestarter_shipping_options once the order exists). Street-less destinations may get estimate tiers; exact carrier rates are re-quoted at approval.
ParameterTypeDescription
address_idstringA saved buyer address id (addr_..., from firestarter_addresses) to estimate delivery to. Prefer this when the buyer has one on file — no need to ask where they live.
citystringDestination city — an alternative locality when the buyer has no ZIP handy.
countrystringDestination country — ISO code or common name (e.g. 'US', 'Thailand'). Pair it with zip or city; used only when address_id is not passed.
listing_id *stringThe listing to estimate shipping for (lst_..., from firestarter_preview, firestarter_catalog_search, firestarter_listings, or a firestarter.network/l/<id> share link).
zipstringDestination ZIP/postal code. Country + ZIP is enough for a real estimate — no street needed.
firestarter_shipping_optionsShow and compare the delivery speeds for an order awaiting approval, and preview the re-priced total for a chosen speed — before paying. Returns the numbered 'Delivery options' menu (Standard / Express / Same-Day, each with its price, ETA, and all-in total); the [number] of the buyer's pick is what firestarter_approve takes as shipping_option_index to place the order at that speed. Use this when the buyer asks about delivery speed/cost, wants it faster, or the speed/price trade-off is in question before approval — firestarter_execute already lists these inline, and approving without a pick uses the cheapest rate. Pass refresh:true to re-fetch live carrier rates (e.g. if the quote is stale), and select_index to preview one speed's new total. For a listing the buyer hasn't started buying yet (no execution), use firestarter_shipping_estimate instead.
ParameterTypeDescription
execution_id *stringThe execution ID (exec_...) to show delivery options for — an order that is awaiting approval.
option_idstringWhich option's delivery methods to show (opt_...). Omit to use the pre-selected option (the one the buyer is about to approve).
refreshbooleanRe-fetch live carrier rates and persist them before showing the menu. Use when the stored rates may be stale (e.g. >30 min old). Off by default.
select_indexintegerPreview a specific delivery speed: the [number] from the menu. Shows that speed's new all-in total and the exact shipping_option_index to approve with. Does NOT select or pay — it's a preview.
firestarter_spend_capRead the buyer's monthly spend cap - the safety limit on total monthly spend - and the alert threshold at which a warning fires. Read-only: use firestarter_set_spend_cap to raise, lower, set, or remove the cap (including after a purchase is rejected with SPEND_CAP_EXCEEDED).
ParameterTypeDescription
alert_threshold_pctanyIGNORED here — this tool only reads. Use firestarter_set_spend_cap.
disableanyIGNORED here — this tool only reads. Use firestarter_set_spend_cap.
spend_cap_dollarsanyIGNORED here — this tool only reads. Use firestarter_set_spend_cap.
firestarter_statusThe buyer's ORDER HISTORY and order status on Firestarter — check one order, or list recent orders ("my orders", "order history", "past orders", "what did I buy"); works on every key, live and test. Also reports the current ENVIRONMENT (test vs live) plus the ACCOUNT the configured API key belongs to (user + organization). Use this to check on orders, see what options were found, get tracking updates, confirm whether you are in test/sandbox mode, or answer 'which account/user am I operating as?' (call it with no arguments for the environment + account summary). Firestarter DOES have a test mode: it runs every purchase through a fully simulated sandbox (mock payment, shipping, and tracking — no real money moves and no real seller is contacted). The mode belongs to the connected credential, not to a per-call option, and it is NOT always spelled by the key: an `fs_test_…` / `fs_live_…` API key says so in its prefix, but a connector grant (`fs_oauth_…`) carries its environment server-side and can be either. Do not infer the mode from the credential string — the Environment line this tool returns is the authoritative answer.
ParameterTypeDescription
execution_idstringSpecific execution ID to check (e.g. 'exec_abc123'). Omit to list recent executions.
status_filterstringFilter executions by status: finding, awaiting_approval, approved, paid, shipping, completed, failed, cancelled
firestarter_sync_shopifyRe-sync a connected store's catalog into Firestarter — pulls the latest products, prices, and inventory from Shopify (or another connected platform) so changes the seller made in their store show up on Firestarter. Use whenever the seller says they added/edited/removed products, prices look stale, a previous sync errored, or items aren't appearing. Requires an already-connected store (firestarter_connect_shopify creates the connection). Syncing runs in the background and returns immediately; the refreshed products appear in firestarter_listings once the sync completes, which can take a moment. Read-mostly: it imports/updates Firestarter listings from the store but never changes the seller's Shopify store. By default it syncs the seller's connected Shopify store; pass connection_id to target a specific connection when several platforms are linked.
ParameterTypeDescription
connection_idstringOptional. The platform connection id (conn_...) to re-sync. Omit to sync the seller's Shopify store automatically — only needed to disambiguate when the seller has connected more than one platform.
firestarter_track_orderTrack a shipped order's delivery status. Returns carrier, tracking number, estimated delivery, and current location/events. Use when a buyer asks 'where's my order?' or 'when will it arrive?'. Only works after an order has been paid and shipped — for unpaid/unshipped orders, use firestarter_status instead.
ParameterTypeDescription
execution_id *stringThe execution/order ID to track (exec_...)
firestarter_trust_community_dropsGrant a community program standing approval to run drops on your listings: from now on, its drop requests go live immediately with no per-request review, and any of its requests you're currently sitting on get auto-approved right away. Use this once you're comfortable a community's asks are reasonable and you'd rather not approve/reject each one — you can always revoke it later with firestarter_untrust_community_drops (that only stops NEW requests from auto-approving; anything already live stays live). Every approved drop's discount still comes out of YOUR proceeds per claim, trust or no trust.
ParameterTypeDescription
program_id *stringThe community/market program id to trust — appears on each request from firestarter_drop_requests, or shared directly by the community owner.
firestarter_untrust_community_dropsRevoke a standing approval you granted with firestarter_trust_community_drops: this community's NEW drop requests on your listings go back to needing your manual decision via firestarter_approve_drop / firestarter_reject_drop. Anything already live from this community before the revoke keeps running until it expires or is exhausted — this does not cancel existing drops.
ParameterTypeDescription
program_id *stringThe community/market program id to stop trusting.
firestarter_unwatchPause or delete a monitor. Paused monitors can be resumed later; deleted monitors are permanent.
ParameterTypeDescription
action *stringAction to take: pause (stop checks, keep history), resume (restart checks), delete (permanent)
monitor_id *stringThe monitor ID to pause or delete
firestarter_update_listingUpdate a listing's product details — name, description, category, inventory, status, brand, condition, sku, return policy, dispatch time, country of origin, physical dimensions/weight, materials, tags, or variants. Use this to rename a product, change its description, update stock levels, pause/reactivate a listing, or fill in/correct any of those detail fields. Also activates imported drafts (status 'active') - drafts need a positive price and at least one photo. High-value (>= $500) and luxury-category drafts additionally require a possession-verification photo: activation returns the instructions and an FS-XXXX code for the seller, and firestarter_verify submits the seller's photo. For pricing changes, use firestarter_reprice instead.
ParameterTypeDescription
allow_imagelessbooleanOverride the NEEDS_IMAGE activation gate and let this listing go live with no photo. Only pass true if the seller explicitly can't provide one right now.
brandstringManufacturer or brand name, e.g. 'Logitech'.
categorystringNew category (e.g. 'sports/tennis')
conditionstringItem condition. Omit for new/unspecified.
country_of_originanyISO 3166-1 alpha-2 country code where the item was made, e.g. 'US', 'VN'.
descriptionstringNew product description
fulfillment_modeanyHow orders for this listing get shipped. 'seller_managed' = NO platform label is ever bought: each paid order holds in awaiting_shipment until the seller ships it with their own carrier and enters tracking via firestarter_ship_order. 'platform' = the platform always books the carrier label. Pass null to clear back to auto (platform label when a carrier-ratable ship-from exists, otherwise seller-managed).
height_inanyPackaged height, in inches.
image_urlsarrayReplace the listing's photos with these public image URLs (replaces the WHOLE gallery — include existing photos to keep them). For a photo the seller ATTACHED IN THE CHAT, call firestarter_upload_image with NO image and this listing_id instead: a drop zone appears and the original file attaches losslessly. Never rebuild an attachment as a base64 data-URI, and never ask the seller to re-send a photo already in the conversation.
inventory_qtynumberUpdated inventory quantity
length_inanyPackaged length, in inches.
listing_id *stringThe listing ID to update
materialsarrayMaterials the item is made of, e.g. ['cotton', 'polyester'].
product_namestringNew product name/title
return_policystringFree-text return policy shown to buyers, e.g. '30-day returns, buyer pays return shipping.'
ship_time_daysanyTypical number of days from order to dispatch (handling time), not transit time.
skustringSeller's own inventory/stock-keeping code for this listing. Distinct from any barcode/UPC — seller-internal, never shown to buyers.
statusstringNew listing status
tagsarrayFreeform search/discovery tags, e.g. ['summer', 'unisex'].
variantsarraySize/color/option variants for display and inventory tracking (not a checkout-level construct — orders still resolve at the listing level).
video_urlsarrayProduct video URLs (MP4, MOV, or WebM, up to 25 MB and about 60 seconds each, max 3). The server fetches and re-hosts each one, so pass any public https URL — NEVER a base64 form: a 25 MB video does not survive being emitted as a tool argument. For a video ATTACHED IN THE CHAT, the drop zone accepts it (call firestarter_upload_image with NO image to display one); a local video file goes through firestarter_upload_video's video_path on the local build. Omit to leave existing videos untouched; pass an empty array to remove them. Videos are shown alongside the photos on the listing page and the share page.
weight_ozanyPackaged weight, in ounces.
width_inanyPackaged width, in inches.
firestarter_update_marketUpdate a community market you own: its buyer-facing display_name, its tagline (the one-line 'what this community is about' shown on the join page and in firestarter_market_preview), and/or whether it appears in the public 'Discover communities' list (discoverable). Pass at least one field. Pass an empty string for display_name or tagline to CLEAR it. To change the vanity handle/URL use firestarter_set_market_handle; to change the recommended products use firestarter_set_market_picks.
ParameterTypeDescription
discoverablebooleanWhether this market appears in the public 'Discover communities' list (firestarter_discover_markets).
display_namestringBuyer-facing community name. Empty string clears it (buyers then see the owner org name).
program_id *stringThe market/program id (from firestarter_create_market or firestarter_my_markets).
taglinestringOne-line description shown under the name. Empty string clears it.
firestarter_update_voucherPause, resume, extend, or adjust the limits on an existing voucher. Pausing (active=false) stops it being redeemed without deleting it, so its history is kept. The code and the discount VALUE cannot be changed — buyers may already hold the code, and repricing an offer someone was given is a different voucher — the supported path is pausing this one and creating another.
ParameterTypeDescription
activebooleanfalse pauses it, true resumes it.
discoverablebooleanWhether buyer agents may surface and auto-apply it.
expires_atstringNew expiry. Natural language ('next Friday') or ISO.
max_usesintegerNew total redemption cap.
min_order_centsintegerNew minimum order subtotal in cents.
per_buyer_limitintegerNew per-buyer cap.
voucher_id *stringThe voucher id (promo_...) from firestarter_vouchers.
firestarter_upload_imageUpload a product photo and get back a permanent hosted URL, accepted by firestarter_list and firestarter_update_listing image_urls. FOR A PHOTO OR VIDEO ATTACHED IN THE CHAT, call this tool with NO image input (plus listing_id when a draft listing needs the photo): an interactive DROP ZONE is displayed in the chat — it accepts photos AND videos (MP4/MOV/WebM ≤ 25 MB) — the seller drops the file onto it, and the ORIGINAL uploads at full quality, attaches to the listing, and activation is requested automatically. EXCEPTION: a firestarter_list or firestarter_update_listing reply that reports a photoless draft ALREADY displays that drop zone — do not call this tool on top of it (that opens a duplicate zone); just tell the seller to drop the photo and end the turn. Never re-encode a chat attachment as base64 yourself, even via a code sandbox that can read it: model-emitted base64 is fabricated or truncated (a real 360 KB photo arrived as 9.7 KB) and can stall for minutes; the drop zone takes seconds and is lossless. The direct inputs are for other cases: image_url when the photo already exists at a public URL (the server fetches and re-hosts it — always prefer this over any base64); image_base64 (data-URI, max 6 MB) ONLY for bytes produced programmatically that exist nowhere else — in practice it is unreliable above ~1 MB. On a host without interactive widgets, direct the seller to the dashboard (https://firestarter.network/seller) or ask for a public URL. On ChatGPT, a photo the user attached to their message is bound into image_file by the host automatically — do not fill that field yourself, and do not ask for a URL when it is present. ALSO HANDLES POSSESSION VERIFICATION: pass verify_listing_id to display the drop zone for a listing that asked for a photo of the item beside its handwritten FS-XXXX code — the dropped photo is submitted for verification, not added to the gallery. ALSO HANDLES DISPUTE EVIDENCE: pass dispute_id (and dispute_side 'seller' for an order they sold) to display the drop zone for that dispute — every photo dropped is uploaded AND posted to the dispute thread. Use that for a photo attached in the chat instead of asking the user for a publicly hosted image link, which they usually cannot produce.
ParameterTypeDescription
dispute_idstringDISPUTE EVIDENCE (disp_...). With no image input this displays the drop zone for that dispute; with an image the photo is uploaded AND posted to the dispute thread in one step. Use this instead of asking for a publicly hosted image link — a photo attached in the chat has no URL, and that dead end is why attaching evidence kept failing.
dispute_notestringFor dispute evidence only: the text to post alongside the photo, in the user's words (e.g. 'the corner arrived crushed'). Posted once, with the first photo. Ignored without dispute_id.
dispute_sidestringWhich side of the dispute the user is on — 'buyer' for an order they bought (firestarter_disputes), 'seller' for one they sold (firestarter_seller_disputes). Defaults to 'buyer'. The two are separate endpoints; the wrong one answers 'dispute not found'.
filenamestringOptional original filename, kept only as a label. It does NOT decide the image format — the server reads that from the bytes — so a .jpg name on PNG data is harmless and a wrong extension can no longer mislabel the stored photo.
image_base64stringLAST RESORT — only for bytes produced programmatically that exist at no URL and in no file. NEVER for a chat-attached photo: model-emitted base64 is fabricated or truncated; call with NO image instead to display the lossless drop zone. Data-URI format, max 6 MB, unreliable above ~1 MB; the server rejects a payload that arrives cut short.
image_fileobjectDO NOT FILL THIS IN. ChatGPT populates it automatically with the photo the user attached to their message. If it is absent, the host did not attach a file — use the drop zone (call with no image) or image_url instead.
image_urlstringPREFERRED when a URL exists. Public URL of the photo; the server fetches and re-hosts it (JPEG, PNG, WebP, GIF, or AVIF under 6 MB).
listing_idstringWhen displaying the drop zone for a listing that needs its photo: the listing (lst_...) to attach uploads to. The widget attaches every dropped photo to it and requests activation automatically.
product_namestringOptional product name to title the drop zone with, so the seller sees which listing the photo is for.
verify_listing_idstringPOSSESSION VERIFICATION (lst_...). The listing whose activation asked for a photo of the item next to the handwritten FS-XXXX code. With no image input this displays the drop zone for it; the dropped photo is submitted for verification and is NOT added to the listing's gallery. This is the normal path — that photo was taken on a phone seconds ago and has no URL.
firestarter_upload_videoUpload a product video (MP4, MOV, or WebM, max 25 MB / ~60s) and get back a permanent hosted URL, accepted by firestarter_list and firestarter_update_listing video_urls. FOR A VIDEO ATTACHED IN THE CHAT: do NOT call this tool with bytes — call firestarter_upload_image with NO image instead, which displays the drop zone; it accepts videos too, and the seller's ORIGINAL file uploads at full quality. NEVER emit video_base64 yourself under any circumstances: 25 MB of base64 is far past any model's output budget and the result is always fabricated or truncated. The direct inputs are for other cases: video_url when the clip already exists at a public URL (the server fetches and re-hosts it). video_base64 exists ONLY for programmatic callers (the drop-zone widget) — max 25 MB data-URI.
ParameterTypeDescription
filenamestringOptional original filename, kept only as a label — the server reads the real format from the bytes.
video_base64stringPROGRAMMATIC CALLERS ONLY (the drop-zone widget). Never model-emitted: 25 MB of base64 cannot survive being written as a tool argument. Data-URI or raw base64, max 25 MB decoded.
video_urlstringPublic URL of the clip; the server fetches and re-hosts it (MP4, MOV, or WebM under 25 MB). Prefer this whenever the video exists at any URL — or simply pass it straight to video_urls on firestarter_list / firestarter_update_listing.
firestarter_verifySubmit a possession-verification photo for a listing whose activation asked for one (high-value >= $500, luxury category, or a source-URL conflict). The seller writes the FS-XXXX code by hand, photographs the paper next to the item, and sends the photo in chat — which means it has NO URL. For that (the normal case) call `firestarter_upload_image` with verify_listing_id instead: a drop zone appears and the dropped photo is submitted for verification automatically. Use THIS tool only when the photo genuinely already lives at a public https URL. A match verifies instantly (then activate via firestarter_update_listing); a mismatch is flagged and the seller can resubmit a clearer photo; an unreadable photo is held for review.
ParameterTypeDescription
listing_id *stringThe listing ID (lst_...) that needs possession verification
photo_url *stringPublic https URL of the seller's photo showing the item next to the handwritten verification code
firestarter_vouchersList your vouchers (coupons / promo codes / discount codes) with their status and what each one has cost you so far. Status is one of active, scheduled (start date not reached), expired, exhausted (hit its usage cap), or paused. Use this to answer 'what discounts am I running?' or 'how is SUMMER20 doing?'.

Parameters not published.

firestarter_wallet_balanceShow your drop wallet's balance: the spendable balance (available to fund new drops or withdraw), funds reserved against live self-funded drops that have been claimed but not yet released to the seller, funds already spent (paid out to sellers for claims that converted into a completed purchase), and lifetime totals deposited and withdrawn. Use when an owner asks what's in their drop wallet, before firestarter_withdraw_wallet, or to check whether a firestarter_fund_wallet deposit has cleared yet. Read-only.

Parameters not published.

firestarter_watchCreate a price/stock monitor that watches products on a schedule. Get notified via webhook when prices drop, items restock, or new listings appear.
ParameterTypeDescription
goalstringNatural language goal for AI-powered meaningful change detection (e.g. 'price drops below $180')
name *stringName for this monitor (e.g. 'AirPods price watch')
price_drop_pctnumberMinimum price drop percentage to notify (e.g. 10 = notify on 10%+ drops)
query *stringWhat to watch — natural language (e.g. 'AirPods Pro 2 under $200')
schedulestringHow often to check: 'hourly', 'daily', 'daily at 9am', 'every 6 hours', or a cron expression. Default: 'daily'
webhook_urlstringWebhook URL to receive change notifications
firestarter_watchesList active monitors and their recent check results. Shows what you're watching, last check status, and any recent price changes or alerts.
ParameterTypeDescription
include_checksbooleanInclude recent check history (default: true for single monitor, false for list)
monitor_idstringGet details for a specific monitor ID. Omit to list all monitors.
firestarter_withdraw_walletCash out unused drop-wallet balance to your connected Stripe payout account (from firestarter_connect_payouts). Only your SPENDABLE balance can be withdrawn — funds reserved against live, unreleased claims on your self-funded drops aren't withdrawable until those claims resolve; firestarter_wallet_balance shows the split. $1.00 minimum. Not idempotent: each call is an INDEPENDENT withdrawal attempt, never a deduped replay of a prior call, so two calls withdraw twice — including a retry after a timeout or error whose outcome is unknown. A completed withdrawal reduces the balance reported by firestarter_wallet_balance, which is how an uncertain outcome is distinguished from a failed one before any further withdrawal.
ParameterTypeDescription
amount_cents *integerAmount to withdraw, in cents. Minimum 100 ($1.00).

Ask AI

✦

Ask AI about Firestarter

Powered by Claude · Grounded in docs

I know everything about Firestarter. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

6 checks have not been run yet.

Releases

v2.19.0v2.19.0 · 4 Sep 2026What's Changed fix(disputes): report what a withdrawal did to the hold, and point a frozen hold at its dispute by @taniasaleem in https://github.com/Analog-Labs/firestarter-mcp/pull/110 feat(mcp): marketplace scout tools — Shopee/Lazada…
v2.18.1v2.18.1 · 2 Sep 2026What's Changed fix(tracking): replace the ETA with the real date once an order is delivered by @taniasaleem in https://github.com/Analog-Labs/firestarter-mcp/pull/100 feat(markets): set a community market avatar from chat by @taniasaleem…
v2.17.4v2.17.4 · 1 Sep 2026What's Changed fix(tracking): replace the ETA with the real date once an order is delivered by @taniasaleem in https://github.com/Analog-Labs/firestarter-mcp/pull/100 feat(markets): set a community market avatar from chat by @taniasaleem…
v2.17.3v2.17.3 · 31 Aug 2026What's Changed fix(tools): outlast the server's own image-ingest budget, and stop advising a blind retry by @taniasaleem in https://github.com/Analog-Labs/firestarter-mcp/pull/95 feat(widget): keep the product detail in the chat, open…
v2.16.0v2.16.0 · 27 Aug 2026What's Changed fix(tools): outlast the server's own image-ingest budget, and stop advising a blind retry by @taniasaleem in https://github.com/Analog-Labs/firestarter-mcp/pull/95 feat(widget): keep the product detail in the chat, open…
Questions

About Firestarter

How do I install Firestarter?

Run claude mcp add firestarter -- npx -y @analog-labs/firestarter-mcp, then add the server to your MCP client's configuration.

Is Firestarter safe to use with an AI agent?

Its trust score is 37 out of 100 (low). Conduid hasn't run static security checks on this repository yet, so review the source yourself before granting it credentials. It has no ConduID identity yet, so agent calls to it are not receipted.

Is Firestarter still maintained?

Yes — the latest release is v2.19.0 (4 Sep 2026), and the last commit was a month ago. The repository has 0 stars.