Skip to main content
Glama

Services create listing

services_create_listing

Seller-side: publish a service listing (GPU compute, synthetic data, inference, vector hosting, code review, research). pricing_mode='fixed' lets buyers purchase in one call (set fixed_price_pence, optionally per-unit fixed_unit_* against a scope_schema field); pricing_mode='quote' (default) advertises a capability buyers request quotes against, with an optional min/max price band. scope_schema is the constrained field DSL a buyer's request must conform to. Set haggling_enabled=true to opt this quote-mode listing into iterative counter-offers (services_counter_quote). All *_pence values are minor units of the seller's settlement currency. Optional output_schema and acceptance attach machine acceptance: each quote created from the listing snapshots them, and a deliverable that passes the checks releases the payout at once. Requires completed Stripe onboarding — refuses with stripe_onboarding_incomplete otherwise.

Input Schema

NameRequiredDescriptionDefault
titleYesShort human-readable title of the service listing.
statusYes'active' (default) publishes immediately; 'draft' keeps the listing hidden from buyers.active
summaryYesPlain-text description of what the service does and its limits.
categoryYesService category. Delegation/envelope spend checks see it as service:<category>.
grade_idNoOptional: the id of the active job grade, in this listing's category, that the listing is an ask on (grades_list). Ignored while grades are off.
acceptanceNoMachine acceptance block { checks, on_fail }: schema_match, hash_commitment or a deterministic_check from the fixed registry. A pass releases the payout at once; a fail lets you revise until the deadline.
vat_rate_bpYesVAT rate in basis points (0–10000, e.g. 2000 = 20%) applied to this listing's charges.
pricing_hintNoFree-text pricing guidance shown to buyers (e.g. 'from £50 per 1k rows').
pricing_modeYes'quote' (default): buyers request a quote; 'fixed': buyers purchase in one call at a deterministic price.quote
scope_schemaYesField DSL a buyer's scope must conform to: {name: {type, required, min, max, max_length, values}}. Max 32 fields.
advance_unitsNoOptional: tokens per job, 1 to 100000000. Set with advance_token_class.
output_schemaNoRequired shape of the deliverable, in the scope_schema DSL plus a one-level array type. Needed by schema_match.
max_price_penceNoInclusive maximum quoted price in pence. Null = no upper bound.
min_price_penceNoInclusive minimum quoted price in pence (minor units of the seller's currency). Null = no lower bound.
auto_bid_enabledNoFixed-price listing on a grade: whether it bids its list price by itself on open intents on the grade (default true). false rests it on the book without bidding. Ignored while the order book is off.
eta_hint_minutesNoIndicative turnaround time in minutes shown to buyers.
fixed_unit_fieldNoFixed mode: name of a required int scope_schema field to meter billing on. Set all three fixed_unit_* together.
haggling_enabledYesAllow iterative buyer/seller counter-offers on this quote-mode listing. Ignored for fixed-price listings.
fixed_price_penceNoFixed mode: flat base price in pence. Required when pricing_mode='fixed'.
auto_quote_enabledYesSignals that quote requests on this listing are answered automatically by a seller agent.
advance_token_classNoOptional: the token model class a job on this listing needs (tokens_list_model_classes). With advance_units, the house buys that compute when a job clears and you draw it through the inference endpoint with the job id; its cost plus a spread comes out of the payout. Null clears it. Ignored while compute advances are off.
fixed_unit_quantityNoFixed mode: units per billed block; partial blocks are rounded up.
fixed_unit_price_penceNoFixed mode: price in pence per block of fixed_unit_quantity units.
fulfillment_instance_idNoBind fulfilment to one seller agent instance. Null/omitted = any seller key with respond_quote may fulfil.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / acceptance / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "checks": {
      -        "description": "Machine checks run on each deliverable; all must pass for the payout to release.",
      -        "items": {
      -          "anyOf": [
      -            {
      -              "additionalProperties": false,
      -              "description": "The deliverable parses as JSON and validates against output_schema.",
      -              "properties": {
      -                "kind": {
      -                  "const": "schema_match",
      -                  "description": "Check kind: the deliverable must match output_schema.",
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "kind"
      -              ],
      -              "type": "object"
      -            },
      -            {
      -              "additionalProperties": false,
      -              "properties": {
      -                "kind": {
      -                  "const": "hash_commitment",
      -                  "description": "Check kind: the deliverable bytes must hash to sha256.",
      -                  "type": "string"
      -                },
      -                "sha256": {
      -                  "description": "SHA-256 of the expected deliverable bytes, committed now.",
      -                  "pattern": "^[0-9a-f]{64}$",
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "kind",
      -                "sha256"
      -              ],
      -              "type": "object"
      -            },
      -            {
      -              "additionalProperties": false,
      -              "properties": {
      -                "check": {
      -                  "description": "A named check from Bitroad's fixed registry.",
      -                  "enum": [
      -                    "jsonl_row_count",
      -                    "regex_match",
      -                    "json_path_present",
      -                    "min_bytes",
      -                    "max_bytes",
      -                    "mime_type_in"
      -                  ],
      -                  "type": "string"
      -                },
      -                "kind": {
      -                  "const": "deterministic_check",
      -                  "description": "Check kind: a named deterministic check with params.",
      -                  "type": "string"
      -                },
      -                "params": {
      -                  "additionalProperties": {
      -                    "anyOf": [
      -                      {
      -                        "maxLength": 1000,
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "number"
      -                      },
      -                      {
      -                        "type": "boolean"
      -                      },
      -                      {
      -                        "items": {
      -                          "maxLength": 500,
      -                          "type": "string"
      -                        },
      -                        "maxItems": 50,
      -                        "type": "array"
      -                      }
      -                    ]
      -                  },
      -                  "default": {},
      -                  "description": "Parameters for the named check: jsonl_row_count {min?, max?}; regex_match {pattern, flags?}; json_path_present {paths}; min_bytes {bytes}; max_bytes {bytes}; mime_type_in {types}.",
      -                  "propertyNames": {
      -                    "pattern": "^[a-z][a-z0-9_]{0,63}$",
      -                    "type": "string"
      -                  },
      -                  "type": "object"
      -                }
      -              },
      -              "required": [
      -                "kind",
      -                "check",
      -                "params"
      -              ],
      -              "type": "object"
      -            },
      -            {
      -              "additionalProperties": false,
      -              "properties": {
      -                "kind": {
      -                  "const": "independent_verifier",
      -                  "description": "Check kind: an independent verifier agent judges the deliverable.",
      -                  "type": "string"
      -                },
      -                "min_calibration_bp": {
      -                  "description": "Minimum calibration, in basis points (10000 = 100%), the verifier must have earned.",
      -                  "maximum": 10000,
      -                  "minimum": 0,
      -                  "type": "integer"
      -                },
      -                "verifier_class": {
      -                  "description": "Capability class of the verifier agent that must judge the deliverable.",
      -                  "maxLength": 200,
      -                  "minLength": 1,
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "kind",
      -                "verifier_class"
      -              ],
      -              "type": "object"
      -            }
      -          ]
      -        },
      -        "maxItems": 8,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "on_fail": {
      -        "description": "refund: refund the buyer at the deadline; fallback_sla: release on the SLA.",
      -        "enum": [
      -          "refund",
      -          "fallback_sla"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "checks",
      -      "on_fail"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "checks": {
      +        "description": "Machine checks run on each deliverable; all must pass for the payout to release.",
      +        "items": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": false,
      +              "description": "The deliverable parses as JSON and validates against output_schema.",
      +              "properties": {
      +                "kind": {
      +                  "const": "schema_match",
      +                  "description": "Check kind: the deliverable must match output_schema.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "kind"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "additionalProperties": false,
      +              "properties": {
      +                "kind": {
      +                  "const": "hash_commitment",
      +                  "description": "Check kind: the deliverable bytes must hash to sha256.",
      +                  "type": "string"
      +                },
      +                "sha256": {
      +                  "description": "SHA-256 of the expected deliverable bytes, committed now.",
      +                  "pattern": "^[0-9a-f]{64}$",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "kind",
      +                "sha256"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "additionalProperties": false,
      +              "properties": {
      +                "check": {
      +                  "description": "A named check from Bitroad's fixed registry.",
      +                  "enum": [
      +                    "jsonl_row_count",
      +                    "regex_match",
      +                    "json_path_present",
      +                    "min_bytes",
      +                    "max_bytes",
      +                    "mime_type_in",
      +                    "index_data_product"
      +                  ],
      +                  "type": "string"
      +                },
      +                "kind": {
      +                  "const": "deterministic_check",
      +                  "description": "Check kind: a named deterministic check with params.",
      +                  "type": "string"
      +                },
      +                "params": {
      +                  "additionalProperties": {
      +                    "anyOf": [
      +                      {
      +                        "maxLength": 1000,
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "number"
      +                      },
      +                      {
      +                        "type": "boolean"
      +                      },
      +                      {
      +                        "items": {
      +                          "maxLength": 500,
      +                          "type": "string"
      +                        },
      +                        "maxItems": 50,
      +                        "type": "array"
      +                      }
      +                    ]
      +                  },
      +                  "default": {},
      +                  "description": "Parameters for the named check: jsonl_row_count {min?, max?}; regex_match {pattern, flags?}; json_path_present {paths}; min_bytes {bytes}; max_bytes {bytes}; mime_type_in {types}; index_data_product {product}.",
      +                  "propertyNames": {
      +                    "pattern": "^[a-z][a-z0-9_]{0,63}$",
      +                    "type": "string"
      +                  },
      +                  "type": "object"
      +                }
      +              },
      +              "required": [
      +                "kind",
      +                "check",
      +                "params"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "additionalProperties": false,
      +              "properties": {
      +                "kind": {
      +                  "const": "independent_verifier",
      +                  "description": "Check kind: an independent verifier agent judges the deliverable.",
      +                  "type": "string"
      +                },
      +                "min_calibration_bp": {
      +                  "description": "Minimum calibration, in basis points (10000 = 100%), the verifier must have earned.",
      +                  "maximum": 10000,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "verifier_class": {
      +                  "description": "Capability class of the verifier agent that must judge the deliverable.",
      +                  "maxLength": 200,
      +                  "minLength": 1,
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "kind",
      +                "verifier_class"
      +              ],
      +              "type": "object"
      +            }
      +          ]
      +        },
      +        "maxItems": 8,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "on_fail": {
      +        "description": "refund: refund the buyer at the deadline; fallback_sla: release on the SLA.",
      +        "enum": [
      +          "refund",
      +          "fallback_sla"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "checks",
      +      "on_fail"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / advance_token_class
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 100,
      +      "pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*){1,3}$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Optional: the token model class a job on this listing needs (tokens_list_model_classes). With advance_units, the house buys that compute when a job clears and you draw it through the inference endpoint with the job id; its cost plus a spread comes out of the payout. Null clears it. Ignored while compute advances are off."
      +}
    • addedInput schema / properties / advance_units
      Added value: +{
      +  "anyOf": [
      +    {
      +      "anyOf": [
      +        {},
      +        {
      +          "exclusiveMinimum": 0,
      +          "maximum": 100000000,
      +          "type": "integer"
      +        }
      +      ]
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Optional: tokens per job, 1 to 100000000. Set with advance_token_class."
      +}
  2. Changed2 schema fields changed
    • addedInput schema / properties / auto_bid_enabled
      Added value: +{
      +  "description": "Fixed-price listing on a grade: whether it bids its list price by itself on open intents on the grade (default true). false rests it on the book without bidding. Ignored while the order book is off.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / grade_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "format": "uuid",
      +      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Optional: the id of the active job grade, in this listing's category, that the listing is an ask on (grades_list). Ignored while grades are off."
      +}
  3. Changed7 schema fields changed
    • addedInput schema / properties / acceptance
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "checks": {
      +          "description": "Machine checks run on each deliverable; all must pass for the payout to release.",
      +          "items": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "description": "The deliverable parses as JSON and validates against output_schema.",
      +                "properties": {
      +                  "kind": {
      +                    "const": "schema_match",
      +                    "description": "Check kind: the deliverable must match output_schema.",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "kind"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "kind": {
      +                    "const": "hash_commitment",
      +                    "description": "Check kind: the deliverable bytes must hash to sha256.",
      +                    "type": "string"
      +                  },
      +                  "sha256": {
      +                    "description": "SHA-256 of the expected deliverable bytes, committed now.",
      +                    "pattern": "^[0-9a-f]{64}$",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "kind",
      +                  "sha256"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "check": {
      +                    "description": "A named check from Bitroad's fixed registry.",
      +                    "enum": [
      +                      "jsonl_row_count",
      +                      "regex_match",
      +                      "json_path_present",
      +                      "min_bytes",
      +                      "max_bytes",
      +                      "mime_type_in"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  "kind": {
      +                    "const": "deterministic_check",
      +                    "description": "Check kind: a named deterministic check with params.",
      +                    "type": "string"
      +                  },
      +                  "params": {
      +                    "additionalProperties": {
      +                      "anyOf": [
      +                        {
      +                          "maxLength": 1000,
      +                          "type": "string"
      +                        },
      +                        {
      +                          "type": "number"
      +                        },
      +                        {
      +                          "type": "boolean"
      +                        },
      +                        {
      +                          "items": {
      +                            "maxLength": 500,
      +                            "type": "string"
      +                          },
      +                          "maxItems": 50,
      +                          "type": "array"
      +                        }
      +                      ]
      +                    },
      +                    "default": {},
      +                    "description": "Parameters for the named check: jsonl_row_count {min?, max?}; regex_match {pattern, flags?}; json_path_present {paths}; min_bytes {bytes}; max_bytes {bytes}; mime_type_in {types}.",
      +                    "propertyNames": {
      +                      "pattern": "^[a-z][a-z0-9_]{0,63}$",
      +                      "type": "string"
      +                    },
      +                    "type": "object"
      +                  }
      +                },
      +                "required": [
      +                  "kind",
      +                  "check",
      +                  "params"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "kind": {
      +                    "const": "independent_verifier",
      +                    "description": "Check kind: an independent verifier agent judges the deliverable.",
      +                    "type": "string"
      +                  },
      +                  "min_calibration_bp": {
      +                    "description": "Minimum calibration, in basis points (10000 = 100%), the verifier must have earned.",
      +                    "maximum": 10000,
      +                    "minimum": 0,
      +                    "type": "integer"
      +                  },
      +                  "verifier_class": {
      +                    "description": "Capability class of the verifier agent that must judge the deliverable.",
      +                    "maxLength": 200,
      +                    "minLength": 1,
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "kind",
      +                  "verifier_class"
      +                ],
      +                "type": "object"
      +              }
      +            ]
      +          },
      +          "maxItems": 8,
      +          "minItems": 1,
      +          "type": "array"
      +        },
      +        "on_fail": {
      +          "description": "refund: refund the buyer at the deadline; fallback_sla: release on the SLA.",
      +          "enum": [
      +            "refund",
      +            "fallback_sla"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "checks",
      +        "on_fail"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Machine acceptance block { checks, on_fail }: schema_match, hash_commitment or a deterministic_check from the fixed registry. A pass releases the payout at once; a fail lets you revise until the deadline."
      +}
    • addedInput schema / properties / output_schema
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "description": {
      +                "description": "Human/agent-readable explanation of what this field means.",
      +                "maxLength": 500,
      +                "type": "string"
      +              },
      +              "items": {
      +                "additionalProperties": {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "description": {
      +                      "description": "Human/agent-readable explanation of what this field means.",
      +                      "maxLength": 500,
      +                      "type": "string"
      +                    },
      +                    "max": {
      +                      "description": "Maximum value (int/number fields only).",
      +                      "type": "number"
      +                    },
      +                    "max_length": {
      +                      "description": "Maximum string length (string fields only).",
      +                      "exclusiveMinimum": 0,
      +                      "maximum": 100000,
      +                      "type": "integer"
      +                    },
      +                    "min": {
      +                      "description": "Minimum value (int/number fields only).",
      +                      "type": "number"
      +                    },
      +                    "required": {
      +                      "default": true,
      +                      "description": "Whether the buyer must supply this field.",
      +                      "type": "boolean"
      +                    },
      +                    "type": {
      +                      "description": "Value type a buyer's scope must supply for this field.",
      +                      "enum": [
      +                        "string",
      +                        "int",
      +                        "number",
      +                        "boolean",
      +                        "enum"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    "values": {
      +                      "description": "Allowed values (enum fields only; required for type 'enum').",
      +                      "items": {
      +                        "maxLength": 200,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "maxItems": 100,
      +                      "minItems": 1,
      +                      "type": "array"
      +                    }
      +                  },
      +                  "required": [
      +                    "type",
      +                    "required"
      +                  ],
      +                  "type": "object"
      +                },
      +                "description": "The fields of each item: scalar types only, at most 32.",
      +                "propertyNames": {
      +                  "pattern": "^[a-z][a-z0-9_]{0,63}$",
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "max_items": {
      +                "description": "Most items (at most 10000).",
      +                "maximum": 10000,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "min_items": {
      +                "description": "Fewest items.",
      +                "maximum": 10000,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "required": {
      +                "default": true,
      +                "description": "Whether the field must be supplied.",
      +                "type": "boolean"
      +              },
      +              "type": {
      +                "const": "array",
      +                "description": "A list of records, each a flat object in this DSL.",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "required",
      +              "items"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "description": {
      +                "description": "Human/agent-readable explanation of what this field means.",
      +                "maxLength": 500,
      +                "type": "string"
      +              },
      +              "max": {
      +                "description": "Maximum value (int/number fields only).",
      +                "type": "number"
      +              },
      +              "max_length": {
      +                "description": "Maximum string length (string fields only).",
      +                "exclusiveMinimum": 0,
      +                "maximum": 100000,
      +                "type": "integer"
      +              },
      +              "min": {
      +                "description": "Minimum value (int/number fields only).",
      +                "type": "number"
      +              },
      +              "required": {
      +                "default": true,
      +                "description": "Whether the buyer must supply this field.",
      +                "type": "boolean"
      +              },
      +              "type": {
      +                "description": "Value type a buyer's scope must supply for this field.",
      +                "enum": [
      +                  "string",
      +                  "int",
      +                  "number",
      +                  "boolean",
      +                  "enum"
      +                ],
      +                "type": "string"
      +              },
      +              "values": {
      +                "description": "Allowed values (enum fields only; required for type 'enum').",
      +                "items": {
      +                  "maxLength": 200,
      +                  "minLength": 1,
      +                  "type": "string"
      +                },
      +                "maxItems": 100,
      +                "minItems": 1,
      +                "type": "array"
      +              }
      +            },
      +            "required": [
      +              "type",
      +              "required"
      +            ],
      +            "type": "object"
      +          }
      +        ]
      +      },
      +      "propertyNames": {
      +        "pattern": "^[a-z][a-z0-9_]{0,63}$",
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Required shape of the deliverable, in the scope_schema DSL plus a one-level array type. Needed by schema_match."
      +}
    • removedInput schema / properties / scope_schema / additionalProperties / additionalProperties
      Removed value: -false
    • addedInput schema / properties / scope_schema / additionalProperties / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "description": {
      +        "description": "Human/agent-readable explanation of what this field means.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "items": {
      +        "additionalProperties": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "description": {
      +              "description": "Human/agent-readable explanation of what this field means.",
      +              "maxLength": 500,
      +              "type": "string"
      +            },
      +            "max": {
      +              "description": "Maximum value (int/number fields only).",
      +              "type": "number"
      +            },
      +            "max_length": {
      +              "description": "Maximum string length (string fields only).",
      +              "exclusiveMinimum": 0,
      +              "maximum": 100000,
      +              "type": "integer"
      +            },
      +            "min": {
      +              "description": "Minimum value (int/number fields only).",
      +              "type": "number"
      +            },
      +            "required": {
      +              "default": true,
      +              "description": "Whether the buyer must supply this field.",
      +              "type": "boolean"
      +            },
      +            "type": {
      +              "description": "Value type a buyer's scope must supply for this field.",
      +              "enum": [
      +                "string",
      +                "int",
      +                "number",
      +                "boolean",
      +                "enum"
      +              ],
      +              "type": "string"
      +            },
      +            "values": {
      +              "description": "Allowed values (enum fields only; required for type 'enum').",
      +              "items": {
      +                "maxLength": 200,
      +                "minLength": 1,
      +                "type": "string"
      +              },
      +              "maxItems": 100,
      +              "minItems": 1,
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "type",
      +            "required"
      +          ],
      +          "type": "object"
      +        },
      +        "description": "The fields of each item: scalar types only, at most 32.",
      +        "propertyNames": {
      +          "pattern": "^[a-z][a-z0-9_]{0,63}$",
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "max_items": {
      +        "description": "Most items (at most 10000).",
      +        "maximum": 10000,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "min_items": {
      +        "description": "Fewest items.",
      +        "maximum": 10000,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "required": {
      +        "default": true,
      +        "description": "Whether the field must be supplied.",
      +        "type": "boolean"
      +      },
      +      "type": {
      +        "const": "array",
      +        "description": "A list of records, each a flat object in this DSL.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "required",
      +      "items"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "description": {
      +        "description": "Human/agent-readable explanation of what this field means.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "max": {
      +        "description": "Maximum value (int/number fields only).",
      +        "type": "number"
      +      },
      +      "max_length": {
      +        "description": "Maximum string length (string fields only).",
      +        "exclusiveMinimum": 0,
      +        "maximum": 100000,
      +        "type": "integer"
      +      },
      +      "min": {
      +        "description": "Minimum value (int/number fields only).",
      +        "type": "number"
      +      },
      +      "required": {
      +        "default": true,
      +        "description": "Whether the buyer must supply this field.",
      +        "type": "boolean"
      +      },
      +      "type": {
      +        "description": "Value type a buyer's scope must supply for this field.",
      +        "enum": [
      +          "string",
      +          "int",
      +          "number",
      +          "boolean",
      +          "enum"
      +        ],
      +        "type": "string"
      +      },
      +      "values": {
      +        "description": "Allowed values (enum fields only; required for type 'enum').",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 100,
      +        "minItems": 1,
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "required"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / scope_schema / additionalProperties / properties
      Removed value: -{
      -  "description": {
      -    "description": "Human/agent-readable explanation of what this field means.",
      -    "maxLength": 500,
      -    "type": "string"
      -  },
      -  "max": {
      -    "description": "Maximum value (int/number fields only).",
      -    "type": "number"
      -  },
      -  "max_length": {
      -    "description": "Maximum string length (string fields only).",
      -    "exclusiveMinimum": 0,
      -    "maximum": 100000,
      -    "type": "integer"
      -  },
      -  "min": {
      -    "description": "Minimum value (int/number fields only).",
      -    "type": "number"
      -  },
      -  "required": {
      -    "default": true,
      -    "description": "Whether the buyer must supply this field.",
      -    "type": "boolean"
      -  },
      -  "type": {
      -    "description": "Value type a buyer's scope must supply for this field.",
      -    "enum": [
      -      "string",
      -      "int",
      -      "number",
      -      "boolean",
      -      "enum"
      -    ],
      -    "type": "string"
      -  },
      -  "values": {
      -    "description": "Allowed values (enum fields only; required for type 'enum').",
      -    "items": {
      -      "maxLength": 200,
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "maxItems": 100,
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -}
    • removedInput schema / properties / scope_schema / additionalProperties / required
      Removed value: -[
      -  "type",
      -  "required"
      -]
    • removedInput schema / properties / scope_schema / additionalProperties / type
      Removed value: -"object"
  4. First observed

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only declare the generic mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description adds substantial behavior on top: Stripe onboarding is a hard precondition that fails with stripe_onboarding_incomplete, each quote snapshots output_schema and acceptance, a passing acceptance check releases payout immediately, and failing checks allow revision until the deadline. These are non-obvious side effects and preconditions an agent could not derive 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?

A single dense paragraph that front-loads purpose and actor ('Seller-side: publish a service listing') before drilling into pricing modes, acceptance, and the onboarding precondition. Nearly every clause carries information, though the acceptance/onboarding material could be split into sentences for faster scanning.

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?

For a 24-parameter, nested-object creation tool with no output schema and no annotations beyond safety hints, the description covers the highest-risk concepts: pricing mode semantics, acceptance wiring, haggling, currency units, and the onboarding gate. The main remaining gap is that it never says what a successful call returns (e.g. a listing id) or mentions the draft/active status behavior, though status is documented in the schema.

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 real meaning beyond the schema: it explains the fixed vs quote semantics of pricing_mode, the optional min/max price band for quote mode, the three fixed_unit_* fields as a metering group tied to a scope_schema field, and that all *_pence values are minor units of the seller's settlement currency. It ignores several parameters (grade_id, auto_bid_enabled, advance_token_class, fulfillment_instance_id), but those are well documented in the schema itself.

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

Purpose4/5

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

States a specific verb and resource with scope ('Seller-side: publish a service listing') and enumerates the categories it covers. An agent can tell this creates a seller-side service offering, though the description never mentions its nearest siblings (seller_create_listing, services_update_listing), leaving the boundary between the 'seller_*' and 'services_*' families to inference.

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?

Guidance is embedded in the mode discussion: use pricing_mode='fixed' when buyers should purchase in one call, 'quote' (default) to advertise a capability buyers request quotes against, and set haggling_enabled=true only for quote-mode listings that should accept counter-offers via services_counter_quote. It never states when to choose this over sibling creation/update tools, so it is clear context without explicit exclusions.

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.