Skip to main content
Glama

Intents post

intents_post
Idempotent

Post an open intent: describe the job instead of picking a listing. Give a category (optionally a capability_class such as code_review.security), the input scope, an optional output_schema and acceptance block, a budget_ceiling_pence, a deadline_at and a bid_window_seconds (10 to 3600, default 60). The ceiling must pass your delegation's caps as a dry run, and must sit below its confirmation threshold (budget_over_confirmation_threshold otherwise). currency is required unless your delegation is already pinned to one. The intent is a quote thread with status 'open' and no seller; read it with services_get_quote or services_list_my_quotes (kind 'intent'), withdraw it with services_withdraw_quote. An intent with no fill ends 'unfilled' with an unfilled_reason. Pass client_intent_ref to make a retry return the same intent.

Input Schema

NameRequiredDescriptionDefault
scopeYesInput scope of the job, as a flat object (at most 32 keys).
categoryYesService category the work belongs to. Delegation category rules see service:<category>.
currencyNoRequired unless your delegation is already pinned to a currency; must match the pin if both.
grade_idNoOptional: the id of the active job grade, in this category, the intent is placed against (grades_list). Ignored while grades are off.
acceptanceNoMachine-checkable acceptance block: { checks: [...], on_fail: refund | fallback_sla }. Run on every deliverable while acceptance is enabled; a pass releases at once.
deadline_atYesISO 8601 delivery deadline; must be after the bid window closes.
output_schemaNoRequired output shape, in the listing scope-schema DSL.
capability_classNoOptional refinement of the category; its first segment must equal category.
client_intent_refNoYour own reference. Posting again with the same ref returns the same intent.
requested_summaryNoFree-text description of the job.
bid_window_secondsYesHow long sellers may bid, 10 to 3600 seconds (default 60).
budget_ceiling_penceYesMost you will pay, inc-VAT, in minor units of the intent's currency.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / acceptance / properties / checks / items / anyOf
      Previous value: -[
      -  {
      -    "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"
      -  }
      -]New value: +[
      +  {
      +    "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"
      +  }
      +]
  2. Added

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, idempotentHint=true) by disclosing real operational constraints: the ceiling must pass the delegation's caps as a dry run and sit below the confirmation threshold, otherwise budget_over_confirmation_threshold is returned, and currency is required unless the delegation is pinned. It also explains the idempotency mechanism (client_intent_ref makes a retry return the same intent) and the terminal 'unfilled' state with an unfilled_reason.

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-loads the core action and the key constraint sentences, with zero filler phrasing. It is dense — a single long paragraph mixing submission requirements, error codes, and lifecycle follow-ups — so scanning takes some effort, but no sentence is redundant.

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 12-parameter write tool with a nested acceptance block and no output schema, the description covers the resulting state, how to retrieve it, and what happens when it goes unfilled. The only gap is that it never says what the post call itself returns (e.g. the intent identifier), leaving the agent to guess at the response shape.

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 already 100%, so the baseline is 3, but the description adds cross-field meaning the schema cannot express: the conditional currency requirement, the ceiling being inc-VAT and subject to caps/threshold, and the retry semantics of client_intent_ref. It cannot add much on category/capability_class beyond what the enum and pattern already encode.

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 ("Post an open intent") and immediately contrasts it with the alternative mode of working ("describe the job instead of picking a listing"), which separates it from listing-based purchase flows. The resulting object is characterized precisely as a quote thread with status 'open' and no seller.

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 routing for the follow-on lifecycle: read via services_get_quote or services_list_my_quotes (kind 'intent'), withdraw via services_withdraw_quote, and the unfilled terminal state. It does not, however, say when to prefer this over the request/quote siblings such as services_request_quote or purchase_create_intent, so the choice between posting an intent versus requesting a quote is left implicit.

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.