@fluf/mcp
OfficialAn MCP server for FLUF Connect that lets AI agents manage marketplace listings, orders, and support for a seller account.
List channels: see connected marketplaces and which ones the plan can list to.
List products: browse inventory with vids, prices, stock, source, and live channels; filter to find crosslist candidates.
Crosslist products: list existing products onto one or more marketplaces, with honest queued vs listed status.
Get orders: retrieve unified orders across all connected marketplaces with filters by date, status, platform, etc.
Ask Intesa: ask FLUF's in-account assistant diagnostic or open-ended questions; it runs multi-step investigations.
Report bugs: file support tickets for problems the user can't fix or when the agent gets stuck.
Run recipes: use MCP prompts like
dead_stock,morning_sales,listing_failures,expansion, andsupportto chain tools for common outcomes.
Allows listing products on eBay, managing inventory, and reading orders across connected marketplaces via FLUF Connect.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@fluf/mcpList products that aren't on eBay yet"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fluf-mcp — FLUF Connect for AI agents
A Model Context Protocol server that lets an AI agent (Claude, Cursor, Windsurf, Cline, and anything else that speaks MCP) work a FLUF Connect account: read inventory, list items across marketplaces, read orders, ask FLUF's own assistant a question, and raise a support ticket.
One account, one token, every marketplace you've connected — the agent never has to learn a per-marketplace API, and never handles your marketplace credentials.
Six tools are the primitives. Five recipes are the outcomes — named workflows that chain the tools in the right order, surfaced in your client as slash commands. Most people want a recipe.
Recipes
Recipes ship as MCP prompts. In Claude Desktop and Claude Code they appear as slash commands; in Cursor and other clients, in the prompt picker.
Recipe | Outcome | Arguments |
| Finds stock that isn't listed on the channels actually selling for you, ranked by what to crosslist first. |
|
| Yesterday's trading in ninety seconds: orders, revenue, channel mix, what changed against a fair baseline. |
|
| Investigates failed and stuck listings, groups them by root cause, and proposes a fix per cause. |
|
| Decides what to seed onto a newly connected marketplace, chosen to match what already sells for you. |
|
| Diagnoses a problem through Intesa, then files a support ticket with the evidence attached. |
|
Every argument is optional unless marked, and every recipe has a sensible
default — /dead_stock on its own works.
/dead_stock period="30 days" limit=10
/morning_sales compare=previous_week
/expansion channel=vinted batch_size=25Two things the recipes are deliberately strict about, because getting them wrong is how an agent loses a seller's trust:
Nothing gets listed without confirmation.
dead_stockandexpansionresearch and recommend; they callcrosslistonly after you say yes.Queued is reported as queued. Extension-first channels finish in your own browser, so an item can be accepted but not yet live. The recipes say so rather than claiming success, and they don't re-push (a repeat can duplicate the listing).
Related MCP server: CommerceHub MCP
Tools
Tool | What it does |
| Which marketplaces this account has connected, and which it can list to. |
| Your products, with the channels each one is already live on. |
| List one or more products on one or more marketplaces. |
| Your orders across every connected marketplace, in one shape. |
| Listings a marketplace refused for a fixable reason (size, brand, category, price, wording), with the reason and the editable fields — plus anything waiting for your go-ahead. |
| Correct a draft's fields and send it to the marketplace. |
| Ask FLUF's own assistant an open-ended question about your account — why a channel stopped syncing, what a listing error means, what sold and where. |
| Raise a bug with FLUF support on your behalf — either when you report a problem, or when the agent itself gets stuck and can't finish the job. |
Get a token
Create one at https://fluf.io/connect/developers — in FLUF Connect that's More → Developers in the left sidebar. It's shown once, so store it like a password. Revoke it on the same screen any time.
You need a FLUF Connect account on an active plan; the API is a paid feature.
Install
Two ways in. Pick the first unless you have a reason not to.
Claude Desktop — one click, no Node (recommended)
Download fluf-mcp-<version>.mcpb from the
latest release and open it.
Claude Desktop shows an install dialog, asks for your token in a form field, and
that's it — no terminal, no JSON, and no Node install: Claude Desktop ships
its own Node runtime and uses it for installed bundles.
Everything else — npx
For Cursor, Claude Code, Windsurf, Cline, or if you'd rather manage it yourself.
This route does need Node 18+ on your machine — the
runtime bundled with Claude Desktop is only used for installed .mcpb bundles,
not for claude_desktop_config.json entries, which spawn command from your
system PATH.
npm install -g fluf-mcpConfigure
Only needed for the npx route — the .mcpb bundle configures itself.
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"fluf": {
"command": "npx",
"args": ["-y", "fluf-mcp"],
"env": { "FLUF_API_TOKEN": "fluf_pat_..." }
}
}
}Claude Code
claude mcp add fluf --env FLUF_API_TOKEN=fluf_pat_... -- npx -y fluf-mcpCursor
~/.cursor/mcp.json (or a per-project .cursor/mcp.json):
{
"mcpServers": {
"fluf": {
"command": "npx",
"args": ["-y", "fluf-mcp"],
"env": { "FLUF_API_TOKEN": "fluf_pat_..." }
}
}
}Environment variables
Var | Required | Default | Notes |
| yes | — | Your personal access token. |
| no |
| Override for staging. |
Using it
Reach for a recipe when you want an outcome — they encode the tool order and the caveats. Otherwise ask in plain language and the agent picks the tools:
"What have I got in stock that isn't on eBay yet? List the ten cheapest."
"Show me everything that sold last week and which channel it sold on."
"Why did my last five Vinted listings fail?"
Three things worth knowing:
Always call
list_channelsfirst. The available marketplaces differ per account and change over time; don't hardcode a list.crosslistis not always instant. Some channels are handed to your own browser session to complete, so the response may say queued rather than listed. Read the per-channel status; don't assume success.ask_intesais the slow, clever one. It hands the question to Intesa, the assistant inside FLUF, which runs its own multi-step investigation before answering — so it can explain why something happened, not just report what is. Replies can take up to a minute. Use the direct tools for simple reads; reach for this when the question is diagnostic or open-ended.
Develop
npm install
npm run build
FLUF_API_TOKEN=... node dist/index.jsSmoke-test without an MCP client:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' \
| FLUF_API_TOKEN=... node dist/index.js
echo '{"jsonrpc":"2.0","id":1,"method":"prompts/list"}' \
| FLUF_API_TOKEN=... node dist/index.jsRecipes live in src/prompts.ts — one entry in RECIPES per
recipe, no registration step. They're plain text aimed at the agent, so editing
one needs no client change.
Support
License
MIT — see LICENSE. © FLUF.io.
The server itself is open; the account it talks to is not. You'll still need a FLUF Connect account on an active plan for any of it to do anything.
Available Tools
9 toolsapprove_draftA
Approve a review draft and send it to the marketplace, optionally correcting fields first — the way to resolve a failed draft. Read the draft with list_drafts before calling this, take the new value from the product's own details (its measured size, its actual brand), and confirm with the user before you send: this publishes a real listing. state comes back as listed (live now), pending (accepted, publishes shortly — do not resend) or failed (the marketplace refused again; message says why and draft is the refreshed draft to try once more). Requires Pro plan (API tokens on lower plans are read-only and the request will return a 403 'plan limit' error).
| Name | Required | Description | Default |
|---|---|---|---|
| edits | No | Field name → new value, using the keys from the draft's `fields` (only fields marked `editable: true`). For a `select` field send one of its `options` values; a multi-select field (colours) takes an array of them. Omit to send the draft exactly as it stands. | |
| draft_id | Yes | The draft's `id` from list_drafts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: it warns this publishes a real listing, discloses the Pro-plan requirement and the resulting 403 'plan limit' error, and explains the return contract for every `state` value (listed/pending/failed) including that `failed` refreshes the draft and that `pending` must not be resent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and every sentence carries operational content. It is dense rather than padded, though the long single paragraph packs several distinct concerns (precondition, sourcing, confirmation, plan gating, return states) that could be marginally tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description compensates by fully enumerating the `state` outcomes and the `message`/`draft` fields carried on failure. For a nested-object, plan-gated mutation tool, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the `edits` semantics are already documented. The description still adds value by framing `edits` as optional correction and telling the agent where new values should come from (measured size, actual brand), which is guidance the schema does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Approve a review draft and send it to the marketplace') with an explicit secondary capability ('optionally correcting fields first'). It also distinguishes itself from the sibling list_drafts, which is framed as the read step that precedes it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('the way to resolve a `failed` draft'), a required precondition (read the draft with list_drafts first), a data-sourcing rule (take the value from the product's own details), and a gating action (confirm with the user before sending). It also names a when-not-to-act case: re-sending on a `pending` result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ask_intesaA
Ask Intesa, the FLUF assistant that runs inside the seller's own account. Intesa can do things this MCP server cannot: diagnose why a channel stopped syncing, explain a listing error, run bulk jobs, search the seller's history and read FLUF's support docs. Prefer the direct tools (list_products, crosslist, get_orders) for simple reads and writes — they are faster and cheaper. Reach for this when the question is diagnostic or open-ended, e.g. 'why did my last five Vinted listings fail?'. Replies can take up to a minute because Intesa runs its own multi-step tool loop.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | What to ask or tell Intesa, in plain language. | |
| conversation_id | No | Continue an existing conversation. Omit to start a new one — the id is returned so follow-up calls can thread onto it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses that Intesa runs inside the seller's account, takes up to a minute due to a multi-step tool loop, and can perform bulk jobs, search history, and read support docs. This provides useful context about latency and scope, though it does not explicitly warn about potential side effects of bulk actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each earning its place: defining the assistant, listing capabilities, contrasting with direct tools, and setting latency expectations. It is front-loaded with the name and purpose, and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of this open-ended assistant tool and the absence of an output schema, the description covers the key aspects: capabilities, use case, latency, and relationship to sibling tools. It hints at return values by mentioning the conversation_id, but does not detail the reply format, which would be difficult for such a flexible tool. Overall, it is sufficiently complete for practical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both message and conversation_id fully documented in the schema. The description adds no additional parameter-level detail; the only extra is the mention that conversation_id allows threading, but this is already in the schema description. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as an assistant to be asked questions, using the verb 'Ask' with the resource 'Intesa'. It distinguishes from siblings by explicitly stating it can do things the MCP server cannot, such as diagnosing sync issues and explaining listing errors, making its purpose specific and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to prefer direct tools like list_products, crosslist, and get_orders for simple reads and writes, and to use this tool for diagnostic or open-ended questions. It even provides an example ('why did my last five Vinted listings fail?'), giving clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crosslistA
List existing FLUF products on one or more marketplaces. IMPORTANT: this is not always synchronous. Some channels are completed by the seller's own browser extension, so they come back queued and go live minutes later — report that honestly rather than telling the user the item is listed. Read status per channel in the response. Repeats of the same (product, channel) pair within 30s are ignored as accidental double-submits.
| Name | Required | Description | Default |
|---|---|---|---|
| vids | Yes | Product handles to crosslist, taken verbatim from the `vid` field of list_products (e.g. 'shopify_123456_0'). Not a bare numeric id. | |
| targets | Yes | Channels to list on. Use the ids from list_channels. To target a specific account when the seller has several on one channel, append the connection id: 'depop:208'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses asynchronous behavior, queued status, and dedup logic. Adds valuable context beyond basic listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with purpose and follows with caveats. Each sentence adds value, though slightly verbose with repetition of honesty instruction. Efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description mentions reading 'status' per channel. However, lacks full response structure details. Adequate for a 2-param list tool but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description does not add additional parameter semantics beyond schema; schema already describes vids and targets clearly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List existing FLUF products on one or more marketplaces' with specific verb and resource. It distinguishes from sibling tools like list_products and list_channels by focusing on cross-listing to marketplaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes when to use (list products on marketplaces) and provides important caveats (async behavior, queued status, 30-second dedup). Lacks explicit alternatives or when-not-to-use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_productsA
Delete FLUF products. By default only the FLUF record is removed and every marketplace listing is left untouched; pass also_delist: true to also end the listings on every marketplace they are live on, which cannot be undone. Deleted FLUF records go to Recently Deleted in the dashboard and can be restored for 60 days. Always confirm with the user first and list which products will be deleted (by title or id). Suited to sold-out or obsolete inventory. Requires Pro plan (API tokens on lower plans are read-only and the request will return a 403 'plan limit' error).
| Name | Required | Description | Default |
|---|---|---|---|
| fluf_ids | Yes | FLUF product ids to delete (e.g. [12345, 67890]). Max 100 per call. Obtain these from list_products — it returns each product's `fluf_id` field. | |
| also_delist | No | If true, also end the listing on every marketplace the product is live on (cannot be undone). Default false: only the FLUF record is deleted and live marketplace listings stay up. Only set true when the user explicitly asks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it explains the default (record-only removal, listings untouched), the destructive opt-in (also_delist ends live listings, irreversible), recoverability (Recently Deleted, 60-day restore), and the auth/plan prerequisite (Pro plan, 403 'plan limit' on read-only tokens). This is exactly the behavioral context an agent needs before a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action, then the default behavior, then the destructive opt-in, then recovery and prerequisites. Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive tool with no annotations and no output schema, yet the description covers default vs opt-in behavior, irreversibility, recovery window, and plan gating. Nothing an agent needs to call this safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema, including the default false and the irreversibility of also_delist. The description reinforces but does not extend that meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Delete FLUF products') and immediately scopes it. No sibling tool performs deletion, so there is no ambiguity to resolve; the agent knows exactly what this does from the first sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context ('Suited to sold-out or obsolete inventory') and a mandatory workflow step ('Always confirm with the user first and list which products will be deleted'). No sibling alternative exists to route to, so no exclusions are needed, but the when-to-use guidance is concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ordersB
Get the seller's orders across every connected marketplace, in one unified shape.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-indexed page. Default 1. | |
| search | No | Search buyer, item or order reference. | |
| status | No | Filter by order status. | |
| date_end | No | Only orders on/before this date (YYYY-MM-DD). | |
| per_page | No | Results per page. Default 25, max 100. | |
| platform | No | Filter by the channel the order came from (e.g. 'depop'). Call list_channels for valid values. Omit for all channels. | |
| date_start | No | Only orders on/after this date (YYYY-MM-DD). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It mentions a 'unified shape' but lacks details on pagination, data freshness, authentication, or rate limits. Minimal behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence (15 words), front-loading the purpose. Every word is necessary and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 optional parameters and no output schema, the description is too brief. It does not explain what 'unified shape' means, pagination behavior, or how filters interact. The agent lacks sufficient context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds no additional meaning beyond the schema; it does not elaborate on parameters or their usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the seller's orders across every connected marketplace, in one unified shape,' specifying the verb and resource. It distinguishes from siblings like list_products (products vs. orders) and list_channels (channels vs. orders).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving orders from all marketplaces but does not explicitly state when to use it versus siblings or when not to use it, missing alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_channelsA
List the marketplace channels available on this account: which are already connected, and which this seller's plan can list to. Call this before crosslist rather than guessing channel names — the roster differs per account and changes over time.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description discloses that the roster differs per account and changes over time, offering useful behavioral context. However, it does not mention any permissions or potential side effects, which is acceptable for a read-only listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action, no wasted words. Perfectly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While there is no output schema, the description hints at the return format by mentioning connected vs. listable channels. For a simple listing with no parameters, this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters (empty schema), so the description does not need to add parameter meaning. A baseline of 4 is appropriate given the absence of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists marketplace channels available on the account, distinguishing between connected and listable. It contrasts with siblings like 'crosslist' which posts to channels, and 'list_products' which lists products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises calling this before 'crosslist' instead of guessing channel names, noting that the roster varies per account and over time. This provides clear when-to-use and when-not-to guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_draftsA
List the seller's review drafts: listings FLUF has prepared but not sent. A failed draft is one a marketplace refused for a reason the seller can fix — the reason says what it objected to, and fields holds every value with editable: true on the ones that can be changed (a select field lists its options). A pending_review draft is simply waiting for a go-ahead. Read a draft, decide the corrected value from the product itself (never invent one), then call approve_draft with the edits. Once the item is live on that marketplace its draft leaves this list on its own.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-indexed page. Default 1. | |
| search | No | Match on the product title. | |
| status | No | 'failed' = a marketplace refused the listing for something an edit fixes (size, brand, category, price, wording); 'pending_review' = the seller asked to review that marketplace before anything goes live; 'open' (default) = both. | |
| channel | No | Only drafts for this marketplace (e.g. 'ebay', 'vinted'). Omit for all; the response's `by_channel` says where the drafts are. | |
| per_page | No | Results per page. Default 50, max 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it explains that `failed` means a marketplace refused for a fixable reason, that `reason` holds the objection and `fields` carries editable values, that `pending_review` is merely awaiting go-ahead, and that drafts disappear from the list once the item goes live. It stops short of stating pagination behavior or any permission/auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then layers state semantics and the next action in four tight sentences. Dense but every clause carries information; no filler or repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description usefully documents the meaningful return shape (reason, fields, editable flags, select options) as well as the lifecycle behavior. Missing only minor items such as pagination echo or sorting, which is acceptable for a filtered-list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema, including the status enum meanings and by_channel note. The description adds workflow meaning around statuses but no syntax or format detail beyond what the schema supplies, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('List the seller's review drafts') and immediately scopes it as 'listings FLUF has prepared but not sent', which separates it from sibling list_products and from approve_draft. The definition of each draft state makes the object of the tool unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent onward: read the draft, derive the corrected value from the product itself ('never invent one'), then call approve_draft with the edits. That is clear when-to-use context and names the next tool. It does not, however, contrast with alternatives like list_products or discuss when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_productsA
List the authenticated seller's FLUF products. Each row carries a vid — the product handle the crosslist tool takes — plus title, price, stock, source channel and the channels it is already live on.
IMPORTANT for audits and counts: status is what the channel last told FLUF, not a live check, so an ended listing keeps reading 'active'. Each row also carries liveness ('confirmed' | 'unconfirmed' | 'unknown'), last_seen_at and last_seen_age_hours — when a channel scan last returned that listing. When counting a seller's live catalogue, or deciding whether two rows are duplicates, pass liveness: "confirmed" and say so. Do not filter the rows yourself and quote total — total counts everything the filter did not exclude, so an unfiltered call reports the seller's whole index history as if it were live. Two 'active' rows for the same item are usually one listing that ended and its relist, not a duplicate — channels mint a new listing id on relist. Never advise ending a listing on the strength of this tool alone; tell the seller to confirm on the channel first.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-indexed page. Default 1. | |
| search | No | Search by title or SKU. | |
| source | No | Filter by the channel a product came FROM (e.g. 'shopify', 'depop'). Call list_channels for the values valid on this account. Omit for all sources. | |
| status | No | Listing status. Omit to get in-stock products only (a `search` with no status covers sold ones too). 'sold' = products FLUF holds as out of stock, i.e. sold on some channel; 'all' = in and out of stock. Note that `status` is FLUF's record of what the channel last said, so a listing that has since ended still reads 'active'. Use each row's `liveness` field to tell live from stale. | |
| liveness | No | Filter by whether the channel has recently confirmed the listing still exists. Use 'confirmed' whenever you are COUNTING a seller's live catalogue or deciding whether two rows are duplicates — it narrows `total` as well as the rows, which `status` does not. | |
| per_page | No | Results per page. Default 20, max 100. | |
| crosslisted_to | No | Only products already live on these channels. | |
| not_on_platforms | No | Only products NOT yet on these channels — the usual way to find crosslist candidates. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: `status` is a stale channel record, not a live check; `total` counts everything the filter did not exclude; relists mint new listing ids so two 'active' rows are usually not duplicates. It also surfaces the downstream risk (never advise ending a listing from this tool alone).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the caveats are dense but each earns its place (staleness, counting, duplicates, safety). It is longer than typical and the bolded middle block leans heavy, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming the fields returned (vid, liveness, last_seen_at, last_seen_age_hours) and their semantics. For an 8-param read tool with no annotations, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema alone leaves implicit: that `liveness` narrows `total` while `status` does not, and that omitting status yields in-stock plus, via search, sold items. That interplay is genuinely useful beyond the per-field text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the authenticated seller's FLUF products') plus scope, and immediately enumerates the row payload (vid, title, price, stock, source channel, live channels). This clearly separates it from siblings like list_drafts and list_channels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to use `liveness: "confirmed"` (counting a live catalogue, judging duplicates), warns against filtering rows manually and quoting `total`, and states the tool must not be used alone to justify ending a listing. Alternatives and exclusions are all named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_bugA
Raise a bug with FLUF support. Two situations call for it, and the second is the one that gets missed:
The user describes a problem with FLUF that you can't resolve yourself.
YOU hit the problem — a FLUF tool keeps failing, returns something that contradicts itself or the user's account, or leaves you unable to finish the task. The user never has to mention it first, and being stuck is not a reason to keep retrying quietly. File the report, then tell the user what you filed. KEEP IT SHORT. This arrives as a direct message in a human inbox: a title, two or three sentences, and the identifiers. Long reports get read last. Don't file for things the user can fix themselves (expired token, lapsed plan, a channel needing reauthorisation) — tell them the fix instead. Their account identity is attached automatically — don't ask for it. Replies arrive in the user's FLUF inbox.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | One line naming the broken thing. No preamble, no severity word. | |
| context | No | Identifiers and raw error text only — FID/EID/VID, channel, listing id, the exact error string, a URL. One per line, no sentences. HARD LIMIT 500 characters. | |
| severity | No | How blocking is this for the user. Default: medium. | |
| description | Yes | What broke and what you expected instead. HARD LIMIT 500 characters — aim for two or three sentences. This is a support DM a person reads, not an incident report: no background, no restating the conversation, no rationale for why it matters, no summary of what you already tried. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the delivery destination (a human inbox as a direct message), the reply channel (the user's FLUF inbox), that account identity is auto-attached, and that retrying quietly instead of filing is wrong. These are non-obvious operational facts an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then conditions, then constraints; every sentence contributes something (trigger conditions, exclusions, length, identity handling, reply path). It runs somewhat long for a four-parameter tool, but the density is justified rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, yet the description covers what the agent needs: when to file, when not to, how long the report should be, what the fields should contain in spirit, that identity is auto-attached, and where the reply lands. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real meaning beyond the schema: the 'keep it short' constraint, the rationale (long reports get read last), and the explicit prohibition on asking for identity or including background/retried steps. It stops short of documenting each field individually, which the schema already handles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Raise a bug with FLUF support.' The two enumerated triggering situations make the scope unambiguous, and no sibling tool (list_products, crosslist, approve_draft, etc.) overlaps with this function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names both when-to-use conditions, including the counterintuitive one (agent hit the problem itself), and adds a clear when-NOT-to-use exclusion list (expired token, lapsed plan, channel reauthorisation) with the alternative action ('tell them the fix instead').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.2.7- Added
approve_draft - Added
delete_products - Added
list_drafts - Changed
list_products2 fields changed- added
Input schema / properties / livenessAdded value: +{ + "description": "Filter by whether the channel has recently confirmed the listing still exists. Use 'confirmed' whenever you are COUNTING a seller's live catalogue or deciding whether two rows are duplicates — it narrows `total` as well as the rows, which `status` does not.", + "enum": [ + "confirmed", + "unconfirmed", + "unknown" + ], + "type": "string" +} - changed
Input schema / properties / status / descriptionPrevious value: -"Listing status. Default: active."New value: +"Listing status. Omit to get in-stock products only (a `search` with no status covers sold ones too). 'sold' = products FLUF holds as out of stock, i.e. sold on some channel; 'all' = in and out of stock. Note that `status` is FLUF's record of what the channel last said, so a listing that has since ended still reads 'active'. Use each row's `liveness` field to tell live from stale."
- Changed
report_bug3 fields changed- changed
Input schema / properties / context / descriptionPrevious value: -"Optional extra context — URLs, channel, product ID (FID/EID/VID), error messages, screenshots referenced by URL."New value: +"Identifiers and raw error text only — FID/EID/VID, channel, listing id, the exact error string, a URL. One per line, no sentences. HARD LIMIT 500 characters." - changed
Input schema / properties / description / descriptionPrevious value: -"What went wrong, what you expected, and steps to reproduce."New value: +"What broke and what you expected instead. HARD LIMIT 500 characters — aim for two or three sentences. This is a support DM a person reads, not an incident report: no background, no restating the conversation, no rationale for why it matters, no summary of what you already tried." - changed
Input schema / properties / title / descriptionPrevious value: -"Short bug title"New value: +"One line naming the broken thing. No preamble, no severity word."
1 tool update
v0.2.2- Added
ask_intesa
5 tool updates
v0.1.0- First observed
crosslist - First observed
get_orders - First observed
list_channels - First observed
list_products - First observed
report_bug
TDQS
Scored across 9 tools
Most tools target clearly different resources/actions, and the ask_intesa description explicitly tells the agent to prefer the direct tools, which removes the biggest potential confusion. The one soft overlap is crosslist vs approve_draft, both of which publish listings (one for existing products, one for prepared drafts), but the descriptions draw that line well enough.
The set is overwhelmingly consistent snake_case verb_noun (report_bug, list_products, delete_products, list_drafts, approve_draft, get_orders, list_channels, ask_intesa). Minor deviation: crosslist is a bare verb with no noun, breaking the pattern slightly.
Nine tools is well within the sweet spot, and each one has a distinct job in the listing/audit/diagnosis workflow. Nothing looks like filler or accidental duplication.
Core flows (list/delete products, list/approve drafts, crosslist, orders, channels, bug report, escalation) are covered, but there is no create_product, get_product, or update_product/edit tool, and no way to discard or reject a draft. Agents can partially work around this (creation/edit presumably happens in the dashboard or via Intesa), but the lifecycle surface has clear holes.
Maintenance
Related MCP Connectors
Run storefronts, listings, orders, content, fulfillment, and analytics through AI.
Connect AI to store orders, products and inventory with scoped access and human approvals.
Enable AI assistants to interact seamlessly with Feeef e-commerce stores, products, and orders usi…
Hosted MCP for e-commerce: live product catalog, stock, and pricing for AI agents.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI to view and manage e-commerce data such as products, orders, and coupons, and perform actions like updating prices, stock, and generating sales reports.-
- AlicenseCqualityDmaintenanceEnables AI agents to manage e-commerce operations across multiple platforms (Shopify, WooCommerce, Stripe, MercadoLibre) through a conversational interface.4114 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search, compare, buy, and sell products across multiple e-commerce platforms through 13 marketplace tools.1MIT
- FlicenseNot gradedqualityDmaintenanceEnables eBay sellers to manage inventory, view orders, handle messages, and browse listings through AI assistants using eBay seller APIs.-