Structured multi-step workflows that produce production-quality deliverables. Plan any task free.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Execute a structured workflow end-to-end. Call rigor_plan first (free) to preview the step sequence and cost estimate before committing credits. Classifies the task, selects the optimal tool sequence, and executes each step with the right LLM model. Returns a complete deliverable — solution designs, competitive analyses, governance documents, and more. Supports SSE streaming for real-time progress, webhook callback, or polling. For atomic work — classification, scoring, ranking, entity extraction, query parsing — set preferences.execution to 'direct' and declare preferences.output_contract to get validated JSON records from a single call, routed to the cheapest model that holds the schema.
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.'
Additional context for the workflow.
Delivery method. Default: polling (MCP clients typically can't handle SSE).
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.
Optional workflow preferences.
Optional, with prior_workflow_id: the fields to carry over. Pass ["full_step_results"] for every step output in full.
Optional: 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.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Execute a structured workflow end-to-end. Call rigor_plan first (free) to preview the step sequence and cost estimate before committing credits. Classifies the task, selects the optimal tool sequence, and executes each step with the right LLM model. Returns a complete deliverable — solution designs, competitive analyses, governance documents, and more. Supports SSE streaming for real-time progress, webhook callback, or polling. For atomic work — classification, scoring, ranking, entity extraction, query parsing — set preferences.execution to 'direct' and declare preferences.output_contract to get validated JSON records from a single call, routed to the cheapest model that holds the schema.
| Argument | Type | Description |
|---|---|---|
| context | object | Additional context for the workflow. |
| delivery | object | Delivery method. Default: polling (MCP clients typically can't handle SSE). |
| task_type | string | 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. |
| preferences | object | Optional workflow preferences. |
| context_fields | array | Optional, with prior_workflow_id: the fields to carry over. Pass ["full_step_results"] for every step output in full. |
| task_description* | string | 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.' |
| prior_workflow_id | string | Optional: 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. |
{
"type": "object",
"required": [
"task_description"
],
"properties": {
"context": {
"type": "object",
"properties": {
"additional_context": {
"type": "string",
"description": "Free-form context the workflow steps can reference."
}
},
"description": "Additional context for the workflow."
},
"delivery": {
"type": "object",
"properties": {
"method": {
"type": "string",
"description": "sse | webhook | polling. Default for MCP: polling."
},
"webhook_url": {
"type": "string",
"description": "Required if method is webhook. Must be HTTPS."
}
},
"description": "Delivery method. Default: polling (MCP clients typically can't handle SSE)."
},
"task_type": {
"type": "string",
"description": "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."
},
"preferences": {
"type": "object",
"properties": {
"execution": {
"enum": [
"direct"
],
"type": "string",
"description": "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."
},
"rigor_level": {
"type": "string",
"description": "quick | standard (default) | thorough. Controls analysis depth and cost."
},
"max_budget_usd": {
"type": "number",
"description": "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."
},
"output_contract": {
"type": "object",
"required": [
"task_type",
"shape",
"fields"
],
"properties": {
"count": {
"type": "object",
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
}
},
"description": "Bounds on the number of entries. Only read when shape is \"array\"."
},
"shape": {
"enum": [
"object",
"array"
],
"type": "string",
"description": "\"object\" for 1 record, \"array\" for 1 entry per input item."
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"enum": {
"type": "array",
"items": {
"type": "string"
},
"description": "Restricts a string field to a fixed set of values."
},
"name": {
"type": "string",
"description": "The JSON key."
},
"type": {
"enum": [
"string",
"number",
"integer",
"boolean",
"array",
"object"
],
"type": "string",
"description": "The value's type."
},
"maximum": {
"type": "number",
"description": "Upper bound for a numeric field."
},
"minimum": {
"type": "number",
"description": "Lower bound for a numeric field."
},
"required": {
"type": "boolean",
"description": "Defaults to true. Set false for a field that may be absent."
},
"description": {
"type": "string",
"description": "Passed to the model as the field's description."
}
}
},
"description": "The schema for 1 record."
},
"selection": {
"type": "object",
"properties": {
"maxCount": {
"type": "number"
},
"minCount": {
"type": "number"
},
"minScore": {
"type": "number"
},
"scoreField": {
"type": "string"
}
},
"description": "Use when you want the model to over-generate candidates and Rigor to sort, threshold, and cap them before the count bounds are checked."
},
"task_type": {
"type": "string",
"description": "Your own label for the work. Echoed into telemetry. Not read as a framework name and does not change routing."
}
},
"description": "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."
}
},
"description": "Optional workflow preferences."
},
"context_fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional, with prior_workflow_id: the fields to carry over. Pass [\"full_step_results\"] for every step output in full."
},
"task_description": {
"type": "string",
"description": "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.'"
},
"prior_workflow_id": {
"type": "string",
"description": "Optional: 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."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| task_type | string | 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. |
| preferences | object | Optional workflow preferences. |
| context_fields | array | Optional, with prior_workflow_id: the fields to carry over. Pass ["full_step_results"] for every step output in full. |
| task_description* | string | 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.' |
Check the status of a running or completed Rigor workflow. Returns progress, step results, and the full deliverable when complete. Use after rigor_execute with polling delivery to retrieve results.
| Argument | Type | Description |
|---|---|---|
| workflow_id* | string | The workflow ID returned by rigor_execute (format: wr_xxx). |
{
"type": "object",
"required": [
"workflow_id"
],
"properties": {
"workflow_id": {
"type": "string",
"description": "The workflow ID returned by rigor_execute (format: wr_xxx)."
}
},
"additionalProperties": false
}List and search Rigor workflows for your organization, with filtering and pagination. Returns status, progress, capacity usage, and available actions per workflow. Use to monitor workflow state, understand concurrent limit usage, identify stuck or completed workflows, and — via q — find prior work on a subject before commissioning it again. Pair a q hit with rigor_status to read that workflow's deliverable.
| Argument | Type | Description |
|---|---|---|
| q | string | Search the workflow title and task description. Every whitespace-separated term must appear in one or the other, as a case-insensitive substring — so "vector search postgres" matches a task described as "add vector search to an existing Postgres-backed SaaS app". Substring matching, not full-text: there is no stemming and no ranking, so "migrating" does not match "migration". Max 200 characters and 8 terms; punctuation is treated as a separator and wildcards are not supported. |
| limit | number | Page size (default 20, max 100) |
| cursor | string | Pagination cursor (created_at timestamp from previous page) |
| status | string | Filter by status (comma-separated). Valid values: executing, step_executing, completed, failed, halted, pending_approval, cancelled. E.g. "halted,failed,pending_approval" |
| folder_id | string | Filter by folder ID. Pass "unassigned" for workflows in no folder |
| task_type |
| prior_workflow_id | string | Optional: 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. |
{
"type": "object",
"required": [
"task_description"
],
"properties": {
"task_type": {
"type": "string",
"description": "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."
},
"preferences": {
"type": "object",
"properties": {
"execution": {
"enum": [
"direct"
],
"type": "string",
"description": "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."
},
"rigor_level": {
"enum": [
"quick",
"standard",
"thorough"
],
"type": "string",
"description": "Review depth. Default auto-detected from task complexity."
},
"add_frameworks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Inject additional frameworks into the plan."
},
"max_budget_usd": {
"type": "number",
"description": "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."
},
"only_frameworks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Restrict the plan to these frameworks (display name or ID). Applied before skip_frameworks; unknown names are reported in warnings."
},
"output_contract": {
"type": "object",
"required": [
"task_type",
"shape",
"fields"
],
"properties": {
"count": {
"type": "object",
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
}
},
"description": "Bounds on the number of entries. Only read when shape is \"array\"."
},
"shape": {
"enum": [
"object",
"array"
],
"type": "string",
"description": "\"object\" for 1 record, \"array\" for 1 entry per input item."
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"enum": {
"type": "array",
"items": {
"type": "string"
},
"description": "Restricts a string field to a fixed set of values."
},
"name": {
"type": "string",
"description": "The JSON key."
},
"type": {
"enum": [
"string",
"number",
"integer",
"boolean",
"array",
"object"
],
"type": "string",
"description": "The value's type."
},
"maximum": {
"type": "number",
"description": "Upper bound for a numeric field."
},
"minimum": {
"type": "number",
"description": "Lower bound for a numeric field."
},
"required": {
"type": "boolean",
"description": "Defaults to true. Set false for a field that may be absent."
},
"description": {
"type": "string",
"description": "Passed to the model as the field's description."
}
}
},
"description": "The schema for 1 record."
},
"selection": {
"type": "object",
"properties": {
"maxCount": {
"type": "number"
},
"minCount": {
"type": "number"
},
"minScore": {
"type": "number"
},
"scoreField": {
"type": "string"
}
},
"description": "Use when you want the model to over-generate candidates and Rigor to sort, threshold, and cap them before the count bounds are checked."
},
"task_type": {
"type": "string",
"description": "Your own label for the work. Echoed into telemetry. Not read as a framework name and does not change routing."
}
},
"description": "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."
},
"skip_frameworks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Frameworks to exclude, by the display name the plan shows or by ID, any case. Unknown names are reported in warnings."
},
"require_approval": {
"type": "boolean",
"description": "Pause at pending_approval before the final step."
},
"approval_before_step": {
"type": "array",
"items": {
"type": "number"
},
"description": "Zero-based step indices where approval gates are inserted."
}
},
"description": "Optional workflow preferences."
},
"context_fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional, with prior_workflow_id: the fields to carry over. Pass [\"full_step_results\"] for every step output in full."
},
"task_description": {
"type": "string",
"description": "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.'"
},
"prior_workflow_id": {
"type": "string",
"description": "Optional: 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."
}
},
"additionalProperties": false
}| string |
| Filter by classified task type |
| created_after | string | ISO timestamp — only workflows created after this time |
| created_before | string | ISO timestamp — only workflows created before this time |
| counts_toward_limit | string | Filter to workflows counting toward the concurrent limit |
{
"type": "object",
"required": [],
"properties": {
"q": {
"type": "string",
"description": "Search the workflow title and task description. Every whitespace-separated term must appear in one or the other, as a case-insensitive substring — so \"vector search postgres\" matches a task described as \"add vector search to an existing Postgres-backed SaaS app\". Substring matching, not full-text: there is no stemming and no ranking, so \"migrating\" does not match \"migration\". Max 200 characters and 8 terms; punctuation is treated as a separator and wildcards are not supported."
},
"limit": {
"type": "number",
"description": "Page size (default 20, max 100)"
},
"cursor": {
"type": "string",
"description": "Pagination cursor (created_at timestamp from previous page)"
},
"status": {
"type": "string",
"description": "Filter by status (comma-separated). Valid values: executing, step_executing, completed, failed, halted, pending_approval, cancelled. E.g. \"halted,failed,pending_approval\""
},
"folder_id": {
"type": "string",
"description": "Filter by folder ID. Pass \"unassigned\" for workflows in no folder"
},
"task_type": {
"type": "string",
"description": "Filter by classified task type"
},
"created_after": {
"type": "string",
"description": "ISO timestamp — only workflows created after this time"
},
"created_before": {
"type": "string",
"description": "ISO timestamp — only workflows created before this time"
},
"counts_toward_limit": {
"enum": [
"true",
"false"
],
"type": "string",
"description": "Filter to workflows counting toward the concurrent limit"
}
},
"additionalProperties": false
}