Skip to main content
Glama

cyclesite-mcp-server

Publish a listing

publish_listing
DestructiveIdempotent

Publish a Cyclesite listing on the user's behalf. Multi-step: the first call (no draftId) returns step:'photos_required' with a phone-friendly photo upload URL for the seller. Once 3+ photos are uploaded, a call with the same draftId returns either step:'live' (listing is free, no payment needed) or step:'payment_required' with a checkout URL. Idempotent: each call with the same draftId returns the current step. Requires OAuth scope listings:publish. When the listing goes live the seller receives a confirmation email with a 24h undo link. Example: 'sell my Trek Domane'.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "publish_listing"
  }
}

Input Schema

NameRequiredDescriptionDefault
cityNoUK city.
yearNo
brandNo
modelNo
titleNoListing title (10-160 chars).
draftIdNoReturned by a previous call. Omit on first call.
isEbikeNoTrue for an electric bike.
categoryNo
groupsetNo
priceGbpNo
willShipNo
conditionNo
frameSizeNo
motorBrandNoE-bike motor make, e.g. "Bosch", "Shimano", "Bafang".
motorModelNoE-bike motor model, e.g. "Performance Line CX".
descriptionNoListing description (30-5000 chars).
frameSerialNoFrame/serial number — runs a stolen-bike check before publish.
knownIssuesNo
batteryCyclesNoCharge cycles as the seller reports them.
itemConditionNoWhether the bike is new (never ridden) or used. Defaults to used.
motorPositionNo
ebikeBatteryWhNoBattery capacity in watt-hours (100-3000).
rangeEstimateMilesNoRange the seller claims on one charge, in miles.
batteryHealthPercentNoBattery health as the seller reports it, 0-100.

Output Schema

NameRequiredDescriptionDefault
stepYes
draftIdNo
messageYes
listingUrlNo
paymentUrlNo
photosNeededNo
listingFeeGbpNoPrice in GBP.
photoUploadUrlNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • addedInput schema / properties / batteryCycles
      Added value: +{
      +  "description": "Charge cycles as the seller reports them.",
      +  "type": "number"
      +}
    • addedInput schema / properties / batteryHealthPercent
      Added value: +{
      +  "description": "Battery health as the seller reports it, 0-100.",
      +  "type": "number"
      +}
    • addedInput schema / properties / ebikeBatteryWh
      Added value: +{
      +  "description": "Battery capacity in watt-hours (100-3000).",
      +  "type": "number"
      +}
    • addedInput schema / properties / isEbike
      Added value: +{
      +  "description": "True for an electric bike.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / itemCondition
      Added value: +{
      +  "description": "Whether the bike is new (never ridden) or used. Defaults to used.",
      +  "enum": [
      +    "new",
      +    "used"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / motorBrand
      Added value: +{
      +  "description": "E-bike motor make, e.g. \"Bosch\", \"Shimano\", \"Bafang\".",
      +  "type": "string"
      +}
    • addedInput schema / properties / motorModel
      Added value: +{
      +  "description": "E-bike motor model, e.g. \"Performance Line CX\".",
      +  "type": "string"
      +}
    • addedInput schema / properties / motorPosition
      Added value: +{
      +  "enum": [
      +    "Mid-drive",
      +    "Rear hub",
      +    "Front hub"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / rangeEstimateMiles
      Added value: +{
      +  "description": "Range the seller claims on one charge, in miles.",
      +  "type": "number"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / category / enum
      Previous value: -[
      -  "road",
      -  "mtb",
      -  "gravel",
      -  "hybrid",
      -  "ebike",
      -  "kids",
      -  "bmx",
      -  "folding",
      -  "city",
      -  "touring",
      -  "triathlon",
      -  "track",
      -  "cyclocross",
      -  "cargo",
      -  "other"
      -]New value: +[
      +  "road",
      +  "mtb",
      +  "gravel",
      +  "hybrid",
      +  "ebike",
      +  "kids",
      +  "bmx",
      +  "folding",
      +  "city",
      +  "touring",
      +  "triathlon",
      +  "track",
      +  "cyclocross",
      +  "cargo",
      +  "adaptive",
      +  "other"
      +]
  3. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare idempotentHint, destructiveHint and openWorldHint, but the description adds substantial context beyond them: the multi-step state machine, the OAuth scope requirement, the free-vs-paid branch, and the confirmation email with a 24h undo link (which mitigates the destructive hint). It doesn't state what happens to the draft if the user abandons the flow or whether a re-publish overwrites a live listing.

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 purpose, then the call sequence, then constraints and the scope requirement, in six tight sentences with no filler. The final intent example ('sell my Trek Domane') earns its place by giving the agent a matching phrase for tool selection.

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?

The output schema exists and the description rightly summarizes its step values rather than restating return shapes, and the multi-step flow is fully traceable. The notable omission is that with 0 required parameters across 24 fields, the description never says what minimum set of fields a first call needs, which is the main decision an agent faces here.

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?

Draft-level semantics matter most and are covered: draftId is explained as the resumption token from a prior call, and the 3+ photo threshold is a behavioral rule the schema can't express. With 24 parameters at 54% coverage, roughly a dozen fields (brand, model, year, priceGbp, willShip, groupset, knownIssues, frameSize) are undocumented in both schema and description, so the gap is only partly compensated.

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 ("Publish a Cyclesite listing on the user's behalf") and immediately disambiguates it from draft_listing by describing the publish-then-photo-then-live lifecycle. An agent can tell what this does and roughly where it sits in the flow without opening the schema.

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 conditional usage: call with no draftId first, then re-call with the same draftId as photos are uploaded, and the call resolves to 'live' or 'payment_required'. It never explicitly names a sibling alternative (e.g. draft_listing for staging, check_stolen for the serial check) or says when not to call it, so it stops short of full routing guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources