Skip to main content
Glama
FLUF-io

@fluf/mcp

Official
by FLUF-io

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

dead_stock

Finds stock that isn't listed on the channels actually selling for you, ranked by what to crosslist first.

period, limit

morning_sales

Yesterday's trading in ninety seconds: orders, revenue, channel mix, what changed against a fair baseline.

date, compare

listing_failures

Investigates failed and stuck listings, groups them by root cause, and proposes a fix per cause.

channel, period

expansion

Decides what to seed onto a newly connected marketplace, chosen to match what already sells for you.

channel (required), batch_size

support

Diagnoses a problem through Intesa, then files a support ticket with the evidence attached.

problem (required)

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=25

Two 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_stock and expansion research and recommend; they call crosslist only 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

list_channels

Which marketplaces this account has connected, and which it can list to.

list_products

Your products, with the channels each one is already live on.

crosslist

List one or more products on one or more marketplaces.

get_orders

Your orders across every connected marketplace, in one shape.

list_drafts

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.

approve_draft

Correct a draft's fields and send it to the marketplace.

ask_intesa

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.

report_bug

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.

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-mcp

Configure

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-mcp

Cursor

~/.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

FLUF_API_TOKEN

yes

—

Your personal access token.

FLUF_BASE_URL

no

https://fluf.io

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_channels first. The available marketplaces differ per account and change over time; don't hardcode a list.

  • crosslist is 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_intesa is 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.js

Smoke-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.js

Recipes 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

info@fluf.io

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 tools
approve_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).

ParametersJSON Schema
NameRequiredDescriptionDefault
editsNoField 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_idYesThe draft's `id` from list_drafts.

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesWhat to ask or tell Intesa, in plain language.
conversation_idNoContinue an existing conversation. Omit to start a new one — the id is returned so follow-up calls can thread onto it.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
vidsYesProduct handles to crosslist, taken verbatim from the `vid` field of list_products (e.g. 'shopify_123456_0'). Not a bare numeric id.
targetsYesChannels 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

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
fluf_idsYesFLUF 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_delistNoIf 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

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-indexed page. Default 1.
searchNoSearch buyer, item or order reference.
statusNoFilter by order status.
date_endNoOnly orders on/before this date (YYYY-MM-DD).
per_pageNoResults per page. Default 25, max 100.
platformNoFilter by the channel the order came from (e.g. 'depop'). Call list_channels for valid values. Omit for all channels.
date_startNoOnly orders on/after this date (YYYY-MM-DD).

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-indexed page. Default 1.
searchNoMatch on the product title.
statusNo'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.
channelNoOnly drafts for this marketplace (e.g. 'ebay', 'vinted'). Omit for all; the response's `by_channel` says where the drafts are.
per_pageNoResults per page. Default 50, max 100.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-indexed page. Default 1.
searchNoSearch by title or SKU.
sourceNoFilter 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.
statusNoListing 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.
livenessNoFilter 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_pageNoResults per page. Default 20, max 100.
crosslisted_toNoOnly products already live on these channels.
not_on_platformsNoOnly products NOT yet on these channels — the usual way to find crosslist candidates.

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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:

  1. The user describes a problem with FLUF that you can't resolve yourself.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesOne line naming the broken thing. No preamble, no severity word.
contextNoIdentifiers 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.
severityNoHow blocking is this for the user. Default: medium.
descriptionYesWhat 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

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 5 tool updatesv0.2.7
    • Addedapprove_draft
    • Addeddelete_products
    • Addedlist_drafts
    • Changedlist_products2 fields changed
      • addedInput schema / properties / liveness
        Added 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"
        +}
      • changedInput schema / properties / status / description
        Previous 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."
    • Changedreport_bug3 fields changed
      • changedInput schema / properties / context / description
        Previous 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."
      • changedInput schema / properties / description / description
        Previous 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."
      • changedInput schema / properties / title / description
        Previous value: -"Short bug title"New value: +"One line naming the broken thing. No preamble, no severity word."
  2. 1 tool updatev0.2.2
    • Addedask_intesa
  3. 5 tool updatesv0.1.0
    • First observedcrosslist
    • First observedget_orders
    • First observedlist_channels
    • First observedlist_products
    • First observedreport_bug

TDQS

A4/5.0

Scored across 9 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers