Skip to main content
Glama

rigor_plan

Read-onlyIdempotent

Before executing a complex task, get a structured workflow plan with per-step cost estimates. Classifies your task, selects the optimal framework sequence, and returns the full plan without executing anything. The response's allowed_modes tells you whether this plan is eligible for direct execution. Free — no credits charged.

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": {
      "task_description": "<task_description>"
    },
    "name": "rigor_plan"
  }
}

Input Schema

NameRequiredDescriptionDefault
contextNoAdditional context for the workflow. Persisted with a plan, so an execute by workflow_id inherits it unless it sends its own.
agent_idNoYour own label for the calling agent, at most 200 characters. Recorded on the workflow and its cost rows; never used for routing or authorization.
languageNoBCP 47 language code for the deliverable (for example "fr", "ja", "pt-BR"). Overrides the organization default.
task_typeNoOptional hint to bypass automatic classification. Passing it also removes the slowest classification tiers from the critical path, so send it whenever you know the shape. Multi-step deliverable types: solution_design, requirements_analysis, code_implementation, code_review, bug_fix, root_cause_analysis, incident_response, deployment_execution, competitive_scan, financial_analysis, research_task, documentation, governance_change, compliance_audit, data_security_assessment, performance_optimization, user_story_definition, implementation_prompt_generation. Atomic single-call types, which auto-select direct execution: tag, score, rerank, compose, extract_entities, parse_query, quick_research, quick_classification, quick_extraction, quick_scoring. GET /api/rigor/task-types lists the full vocabulary with each type's shape.
preferencesNoOptional workflow preferences. The same shape on plan and execute; a plan stores them, and an execute by workflow_id inherits them.
context_fieldsNoOptional, with prior_workflow_id: the fields to carry over. Pass ["full_step_results"] for every step output in full.
task_descriptionYesNatural language description of the task, at least 2 words and at most 4,000 characters (200,000 across it and context.additional_context when task_type is compose). Be specific: include what you want produced, constraints, and context. Example: 'Design a caching layer for our API gateway with Redis integration.'
prior_workflow_idNoOptional: the workflow_id (wr_…) of a finished workflow in your workspace to build on. Its results are passed to this run as context. It is charged as a new run at the normal quote.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed24 schema fields changed
    • addedInput schema / properties / agent_id
      Added value: +{
      +  "description": "Your own label for the calling agent, at most 200 characters. Recorded on the workflow and its cost rows; never used for routing or authorization.",
      +  "maxLength": 200,
      +  "type": "string"
      +}
    • addedInput schema / properties / context
      Added value: +{
      +  "description": "Additional context for the workflow. Persisted with a plan, so an execute by workflow_id inherits it unless it sends its own.",
      +  "properties": {
      +    "additional_context": {
      +      "description": "Free-form context the workflow steps can reference, at most 16,000 characters (more for compose, see task_description).",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / language
      Added value: +{
      +  "description": "BCP 47 language code for the deliverable (for example \"fr\", \"ja\", \"pt-BR\"). Overrides the organization default.",
      +  "type": "string"
      +}
    • changedInput schema / properties / preferences / description
      Previous value: -"Optional workflow preferences."New value: +"Optional workflow preferences. The same shape on plan and execute; a plan stores them, and an execute by workflow_id inherits them."
    • changedInput schema / properties / preferences / properties / add_frameworks / description
      Previous value: -"Inject additional frameworks into the plan."New value: +"Frameworks to inject into the sequence: a name, or { name, before_step } to choose the position."
    • addedInput schema / properties / preferences / properties / add_frameworks / items / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "properties": {
      +      "before_step": {
      +        "description": "Zero-based index into the filtered sequence before which to insert it.",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "name": {
      +        "description": "Framework display name or ID.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "before_step"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / preferences / properties / add_frameworks / items / type
      Removed value: -"string"
    • addedInput schema / properties / preferences / properties / approval_before_step / items / minimum
      Added value: +0
    • changedInput schema / properties / preferences / properties / approval_before_step / items / type
      Previous value: -"number"New value: +"integer"
    • addedInput schema / properties / preferences / properties / cache_prefix_chars
      Added value: +{
      +  "description": "How many leading characters of task_description stay the same across your calls. Direct execution marks that prefix for the provider's prompt cache, so repeated calls read it from cache. Absent or 0 declares nothing.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedInput schema / properties / preferences / properties / execution / description
      Previous value: -"Set to 'direct' to compose the plan's content frameworks into a single LLM call and route cost-first, using a per-task-type model floor that moves when a cheaper model earns the work. Research steps, process steps (classification-verify, review protocol, synthesis) and the quality review each remain separate calls, so this is not a one-call-per-workflow guarantee: for atomic task types, which have a single content framework, the call count matches standard execution and the saving is the model. Supplying output_contract replaces the quality-review call with deterministic validation, which is one fewer call. No intermediate outputs. Available at every tier. Auto-selected for atomic task types when no execution preference is given. Falls back to standard execution when combined with require_approval or interactive mode, or when the plan exceeds the composition size limit. With attachments or prior_workflow_id, the workflow runs as standard execution instead, so the attachments and the earlier results are applied."New value: +"Set to 'direct' to compose the plan's content frameworks into a single LLM call and route cost-first, using a per-task-type model floor that moves when a cheaper model earns the work. Research steps, process steps (classification-verify, review protocol, synthesis) and the quality review each remain separate calls, so this is not a one-call-per-workflow guarantee: for atomic task types, which have a single content framework, the call count matches standard execution and the saving is the model. Supplying output_contract replaces the quality-review call with deterministic validation, which is one fewer call. No intermediate outputs. Available at every tier. Auto-selected for atomic task types when no execution preference is given. Some atomic task types (for example cluster) run in direct mode only and are refused with 422 direct_mode_unavailable rather than falling back. Others fall back to standard execution when combined with require_approval or interactive mode, or when the plan exceeds the composition size limit. With attachments or prior_workflow_id, the workflow runs as standard execution instead, so the attachments and the earlier results are applied."
    • addedInput schema / properties / preferences / properties / independent_of
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Model creators and model ids that must not receive this workflow's content (for example when it grades output one model family produced). Covers every model call Rigor makes for the workflow: planning (classification, intent extraction, title), every step, research agents, review and quality checks, retrieval over files attached to the workflow, and per-step quality grading after the workflow ends. Not covered: processing when a file is uploaded (text extraction, audio and video transcription, indexing) and POST /api/rigor/enhance. A hard constraint: an excluded model, or one whose creator cannot be confirmed, is skipped; a step with no model left fails the workflow with policy_rule no_independent_model and is refunded; an optional planning or grading call with no model left is skipped. Not relaxed by any workspace policy enforcement mode. Fixed when the workflow is planned: an execute call on a stored plan that sends a different value is refused with 400; entry order does not matter.",
      +  "minProperties": 1,
      +  "properties": {
      +    "families": {
      +      "description": "Model creators: anthropic, deepseek, google, minimax, mistral, moonshot, openai, qwen, xai or zhipu. Case does not matter; any other name is refused with 400.",
      +      "items": {
      +        "maxLength": 64,
      +        "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$",
      +        "type": "string"
      +      },
      +      "maxItems": 20,
      +      "type": "array"
      +    },
      +    "models": {
      +      "description": "Model ids. A dated version or -latest alias of a listed id is excluded too.",
      +      "items": {
      +        "maxLength": 200,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "maxItems": 20,
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / preferences / properties / max_budget_usd / description
      Previous value: -"Spending ceiling in USD. If the plan's quote is still above it after Rigor fits the plan (cheaper models, optional steps dropped), rigor_plan returns a max_budget_exceeded warning and rigor_execute refuses with 402 max_budget_exceeded before anything runs or is charged."New value: +"Spending ceiling in USD. If the plan's quote is still above it after Rigor fits the plan (cheaper models, optional steps dropped), the plan returns a max_budget_exceeded warning and execute refuses with 402 max_budget_exceeded before anything runs or is charged."
    • addedInput schema / properties / preferences / properties / max_budget_usd / exclusiveMinimum
      Added value: +0
    • addedInput schema / properties / preferences / properties / model_preference
      Added value: +{
      +  "description": "LLM model selection bias.",
      +  "enum": [
      +    "quality_first",
      +    "cost_optimized",
      +    "balanced"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / preferences / properties / only_frameworks / description
      Previous value: -"Restrict the plan to these frameworks (display name or ID). Applied before skip_frameworks; unknown names are reported in warnings."New value: +"Restrict the plan to these frameworks (display name or ID). Applied before skip_frameworks; unknown names are reported in warnings, and if none resolves the request is refused with 400 UNKNOWN_FRAMEWORK."
    • changedInput schema / properties / preferences / properties / output_contract / description
      Previous value: -"Only read when execution is \"direct\". Declares the JSON shape you want back, so the answer is generated against your schema and validated against it before return, instead of returned as prose you have to parse. A conforming run also skips the quality-review call, costing 1 LLM call rather than 2. The schema is closed: a record carrying an undeclared key is rejected exactly like one missing a required key."New value: +"Only read when execution is \"direct\". Declares the JSON shape you want back, so the answer is generated against your schema (Anthropic forced tool-use, or an OpenAI-compatible json_schema response format) and validated against it before return, instead of returned as prose you have to parse. A conforming run also skips the quality-review call, costing 1 LLM call rather than 2. The schema is closed: a record carrying an undeclared key is rejected exactly like one missing a required key. Persists with the plan, so a later execute against the stored workflow_id inherits it. Not the same shape as the inference gateway's output_contract, which carries the items an answer must account for rather than a record schema."
    • addedInput schema / properties / preferences / properties / output_contract / properties / fields / items / properties / items
      Added value: +{
      +  "description": "The element schema, a field entry of this same shape. Only read when type is \"array\".",
      +  "type": "object"
      +}
    • addedInput schema / properties / preferences / properties / output_contract / properties / fields / items / properties / properties
      Added value: +{
      +  "description": "The nested field entries, each of this same shape. Only read when type is \"object\".",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / preferences / properties / rigor_level / description
      Previous value: -"Review depth. Default auto-detected from task complexity."New value: +"Review depth. Default auto-detected from the task type. Controls analysis depth and cost."
    • addedInput schema / properties / preferences / properties / tool_scope
      Added value: +{
      +  "description": "Which framework tiers to include.",
      +  "enum": [
      +    "mandatory",
      +    "recommended",
      +    "all"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / preferences / properties / use_connections
      Added value: +{
      +  "description": "Whether the plan may read your connected sources (a GitHub repository, an MCP server). false attaches none; true attaches all. Omitted, a source is attached only when the task is work on code or names a file, your own code, or the source itself.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / task_description / description
      Previous value: -"Natural language description of the task, at most 4,000 characters. Be specific — include what you want produced, constraints, and context. Example: 'Design a caching layer for our API gateway with Redis integration.'"New value: +"Natural language description of the task, at least 2 words and at most 4,000 characters (200,000 across it and context.additional_context when task_type is compose). Be specific: include what you want produced, constraints, and context. Example: 'Design a caching layer for our API gateway with Redis integration.'"
    • changedInput schema / properties / task_type / description
      Previous value: -"Optional hint to bypass automatic classification. Passing it also removes the slowest classification tiers from the critical path, so send it whenever you know the shape. Multi-step deliverable types: solution_design, requirements_analysis, code_implementation, code_review, bug_fix, root_cause_analysis, incident_response, deployment_execution, competitive_scan, financial_analysis, research_task, documentation, governance_change, compliance_audit, data_security_assessment, performance_optimization, user_story_definition, implementation_prompt_generation. Atomic single-call types, which auto-select direct execution: tag, score, rerank, compose, extract_entities, parse_query, quick_research, quick_classification, quick_extraction, quick_scoring. Call GET /api/rigor/task-types for the full vocabulary with each type's shape."New value: +"Optional hint to bypass automatic classification. Passing it also removes the slowest classification tiers from the critical path, so send it whenever you know the shape. Multi-step deliverable types: solution_design, requirements_analysis, code_implementation, code_review, bug_fix, root_cause_analysis, incident_response, deployment_execution, competitive_scan, financial_analysis, research_task, documentation, governance_change, compliance_audit, data_security_assessment, performance_optimization, user_story_definition, implementation_prompt_generation. Atomic single-call types, which auto-select direct execution: tag, score, rerank, compose, extract_entities, parse_query, quick_research, quick_classification, quick_extraction, quick_scoring. GET /api/rigor/task-types lists the full vocabulary with each type's shape."
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "generated_title": {
      -      "type": "string"
      -    },
      -    "ok": {
      -      "type": "boolean"
      -    },
      -    "plan": {
      -      "properties": {
      -        "allowed_modes": {
      -          "description": "Execution modes available for this plan beyond the standard multi-call default. Contains 'direct' when the plan is eligible for direct execution; empty array when it is not.",
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "alternatives": {
      -          "type": "object"
      -        },
      -        "classification": {
      -          "properties": {
      -            "task_type": {
      -              "type": "string"
      -            },
      -            "value_class": {
      -              "type": "string"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "cost": {
      -          "properties": {
      -            "credits": {
      -              "type": "number"
      -            },
      -            "range": {
      -              "type": "object"
      -            },
      -            "usd": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "info": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "rigor_level": {
      -          "type": "string"
      -        },
      -        "sequence": {
      -          "items": {
      -            "properties": {
      -              "estimated_credits": {
      -                "type": "number"
      -              },
      -              "name": {
      -                "type": "string"
      -              },
      -              "step": {
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "warnings": {
      -          "items": {
      -            "properties": {
      -              "code": {
      -                "type": "string"
      -              },
      -              "message": {
      -                "type": "string"
      -              },
      -              "suggestion": {
      -                "type": "string"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "workflow_id": {
      -          "type": "string"
      -        }
      -      },
      -      "type": "object"
      -    }
      -  },
      -  "type": "object"
      -}New value: +null
  3. First observed

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds real value beyond them — no execution side effects, zero credit cost, and an allowed_modes field in the response — but says nothing about plan persistence, expiry, or what happens on a later execute against the returned plan.

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?

Four short sentences, front-loaded with the core action, then the no-execution guarantee, the allowed_modes hint, and the cost note. No filler; each sentence carries a distinct fact.

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?

For an eight-parameter tool with nested objects, the description covers purpose and the plan-versus-execute boundary, while the schema carries the heavy parameter detail. Missing are the follow-up flow (that the plan's workflow_id feeds rigor_execute and inherits preferences) and any note on plan lifetime, which an agent needs to chain the calls correctly.

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%, and the description mentions only classification and cost estimation, which the task_type and preferences fields already document in depth. Baseline 3 applies; the description adds no parameter-level meaning the schema lacks.

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 concrete verb and resource: it gets a structured workflow plan with per-step cost estimates, classifies the task, and selects a framework sequence. 'Returns the full plan without executing anything' distinguishes it from an execution sibling like rigor_execute, though it never names that sibling explicitly.

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?

'Before executing a complex task' gives a clear trigger point, and 'Free — no credits charged' reinforces calling it first. It also points to allowed_modes for deciding whether direct execution is eligible. It stops short of stating when not to use it (for example, simple tasks that need no plan).

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