Skip to main content
Glama
Analog-Labs

Firestarter MCP Server

by Analog-Labs

firestarter_approve

Destructive

Approve and pay for an order awaiting confirmation, shipping to the buyer's default address with the chosen delivery speed to complete the purchase.

Instructions

Confirm 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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
option_idNoExact 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.
address_idNoA 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.
execution_idNoThe 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.
confirm_totalNoExact 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_nonceNoThe 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.
selected_optionNo0-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.
delivery_addressNoOptional — 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.
shipping_option_indexNo0-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.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (destructiveHint, readOnlyHint=false), the description discloses critical behavioral traits: it actually executes a financial transaction and pays, uses the buyer's saved default address automatically, handles price changes via a nonce-based confirmation flow, resolves a single pending purchase automatically, and rejects non-purchasable items. It also details the consequence of no saved address ('approval of physical goods is rejected'). All traits are consistent with the destructiveHint annotation; there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-organized: it front-loads the core purpose and then systematically covers lifecycle, address handling, option selection, shipping, price changes, and edge cases. Each paragraph addresses a distinct concern, and every sentence contributes concrete operational detail. While it could be trimmed slightly, the density is justified given the tool's complexity (8 parameters, multiple fallback behaviors). It earns its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers nearly every operational scenario an agent might face: missing address, price-change confirmation, auto-resolving single pending orders, multiple pending candidates, informational vs. purchasable options, and shipping-speed selection. It references response elements like PRICE_CHANGED and masked ship-to views, but does not fully specify the successful response structure (e.g., order confirmation details). Given the absence of an output schema, a bit more detail on the exact success response would round it out, but the coverage is already substantial for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds substantial semantic depth beyond schema entries. For example, it explains that option_id is preferred because it 'identifies the product itself rather than a position that can shift,' warns never to guess confirm_total, stresses consent_nonce is single-use and echoed verbatim, clarifies delivery_address can be a string or object and that it's saved as default on first orders, and details shipping_option_index semantics. This guidance is essential for correct invocation and goes far beyond the schema's already-descriptive parameter definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear, action-oriented statement: 'Confirm and place an order that is awaiting approval — this is the step that actually BUYS and pays.' It explicitly names the resource (an order awaiting approval) and distinguishes the tool from siblings like firestarter_execute (which returns options) and firestarter_receipt/track_order (post-purchase steps). The lifecycle context reinforces the unique purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly sequences usage: after firestarter_execute or a listing_id buy returns options, this tool places and pays; afterwards use receipt and track. It also gives clear when-not guidance: 'Only Firestarter-purchasable options can be approved — browse-only results are rejected.' It explains when to omit execution_id and how the tool resolves pending purchases, and when to use option_id vs selected_option, plus when to pass delivery_address/address_id. This is comprehensive and leaves little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Analog-Labs/firestarter-mcp'

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