Skip to main content
Glama

Consult

consult

Ask the Director for editing advice on the project's CURRENT composition — it NEVER writes your composition (you stay the decider). Async: returns a consultJobId; then wait_job(kind="consult", id=consultJobId, projectId=...) surfaces the advisory envelope (assessment / proposals / principles / plan). body.mode: 'advise' = the planner agent (fast, ~30s-2min) returns a plan (framing/cuts/captions/graphics intents) as GUIDANCE you re-author from — no grounded scores, nothing to adopt; 'amend' (default) = the full author→judge→refine loop (minutes) returns a graded assessment + a fix candidate you ADOPT via select_candidate with its candidateIndex. ('explore' is coming soon → use amend.) body.intent = your goal in plain English; optional body.focus (editorial|spatial|brand|caption); body.ifMatch binds to your current etag. Use advise for a fast directional nudge, amend for a grounded, adoptable fix.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "projectId": "<projectId>",
      "body": "<body>"
    },
    "name": "consult"
  }
}

Input Schema

NameRequiredDescriptionDefault
bodyYesPOST /projects/:id/consult body.
commandIdNoRetry identity. A call repeated with the same commandId returns the first result instead of acting twice.
projectIdYesprojectId (path).

Output Schema

NameRequiredDescriptionDefault
statusNoqueued = normal; failed = startup failed and the job is already terminal.
projectIdNo
streamUrlNoRelative SSE endpoint to stream this job's events.
consultJobIdNoOpaque consult job id; poll it for the advisory result.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed21 schema fields changed
    • addedInput schema / $defs
      Added value: +{
      +  "__schema0": {
      +    "description": "Plain-English goal — what you're trying to achieve with this edit.",
      +    "maxLength": 2000,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "__schema1": {
      +    "description": "advise = proposer-only (no render/judge, no grounded assessment); amend (default) = grade the current composition + author the fix for the weakest criterion; explore = ranked slate of diverse directions. All modes are async — poll the returned job.",
      +    "enum": [
      +      "advise",
      +      "amend",
      +      "explore"
      +    ],
      +    "type": "string"
      +  },
      +  "__schema2": {
      +    "description": "Optional criterion to concentrate the advice on.",
      +    "enum": [
      +      "editorial",
      +      "spatial",
      +      "brand",
      +      "caption"
      +    ],
      +    "type": "string"
      +  },
      +  "__schema3": {
      +    "description": "Etag of the composition the advice is computed against. Proposals are bound to it; apply a proposal BEFORE any other edit or it will 409.",
      +    "type": "string"
      +  },
      +  "__schema4": {
      +    "maxLength": 128,
      +    "minLength": 1,
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / body / properties / focus / $ref
      Added value: +"#/$defs/__schema2"
    • removedInput schema / properties / body / properties / focus / description
      Removed value: -"Optional criterion to concentrate the advice on."
    • removedInput schema / properties / body / properties / focus / enum
      Removed value: -[
      -  "editorial",
      -  "spatial",
      -  "brand",
      -  "caption"
      -]
    • removedInput schema / properties / body / properties / focus / type
      Removed value: -"string"
    • addedInput schema / properties / body / properties / ifMatch / $ref
      Added value: +"#/$defs/__schema3"
    • removedInput schema / properties / body / properties / ifMatch / description
      Removed value: -"Etag of the composition the advice is computed against. Proposals are bound to it; apply a proposal BEFORE any other edit or it will 409."
    • removedInput schema / properties / body / properties / ifMatch / type
      Removed value: -"string"
    • addedInput schema / properties / body / properties / intent / $ref
      Added value: +"#/$defs/__schema0"
    • removedInput schema / properties / body / properties / intent / description
      Removed value: -"Plain-English goal — what you're trying to achieve with this edit."
    • removedInput schema / properties / body / properties / intent / maxLength
      Removed value: -2000
    • removedInput schema / properties / body / properties / intent / minLength
      Removed value: -1
    • removedInput schema / properties / body / properties / intent / type
      Removed value: -"string"
    • addedInput schema / properties / body / properties / mode / $ref
      Added value: +"#/$defs/__schema1"
    • removedInput schema / properties / body / properties / mode / description
      Removed value: -"advise = proposer-only (no render/judge, no grounded assessment); amend (default) = grade the current composition + author the fix for the weakest criterion; explore = ranked slate of diverse directions. All modes are async — poll the returned job."
    • removedInput schema / properties / body / properties / mode / enum
      Removed value: -[
      -  "advise",
      -  "amend",
      -  "explore"
      -]
    • removedInput schema / properties / body / properties / mode / type
      Removed value: -"string"
    • addedInput schema / properties / commandId / $ref
      Added value: +"#/$defs/__schema4"
    • removedInput schema / properties / commandId / maxLength
      Removed value: -128
    • removedInput schema / properties / commandId / minLength
      Removed value: -1
    • removedInput schema / properties / commandId / type
      Removed value: -"string"
  2. Changed1 schema field changed
    • addedInput schema / properties / commandId
      Added value: +{
      +  "description": "Retry identity. A call repeated with the same commandId returns the first result instead of acting twice.",
      +  "maxLength": 128,
      +  "minLength": 1,
      +  "type": "string"
      +}
  3. First observed

TDQS

A4.3/5.0
Behavior3/5

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

The description adds substantial beyond-annotation context: async job semantics, a returned consultJobId, per-mode latency estimates (~30s-2min vs minutes), and the etag/409 binding on ifMatch. However, it never reconciles readOnlyHint=false with the framing that the tool 'never writes' — the agent gets the composition-safety story but not an explicit statement that calling consult itself creates a job and consumes compute. Useful context, but the mutation profile is left implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded correctly — the purpose and the 'never writes' guarantee come first. But the body is a dense block of parentheticals and backticked mode names that duplicates the schema's enum documentation (mode semantics are explained twice), and the advise/amend distinction is split across two separated sentences rather than stated once. Informative, but over-packed.

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?

For a tool with a nested body, an output schema, and an async continuation, the description covers the full round trip: intent, mode selection, focus, etag conflict behavior, the job id, and how to poll and adopt the result. Nothing material is missing; commandId retry semantics are already 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. The description earns a bump by adding meaning the schema lacks: 'explore is coming soon → use amend' steers the enum choice, and per-mode latency and output shape (plan vs graded assessment + candidateIndex) tell the agent what each mode actually yields. It largely restates intent/focus/ifMatch, however.

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 + scope: 'Ask the Director for editing advice on the project's CURRENT composition', and immediately negates the most likely confusion ('it NEVER writes your composition'). That distinguishes it cleanly from apply_composition, compose, and score_composition without requiring the agent to open their schemas.

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 routing: use 'advise' for a fast directional nudge, 'amend' for a grounded adoptable fix, and pins 'explore' as unavailable ('coming soon → use amend'). It also names the follow-up call (wait_job with kind="consult") and the adoption path (select_candidate), so the agent knows both when to call this and what to do next.

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.