Skip to main content
Glama

Check rules

check_rules
Read-only

Check a draft against the rulesets on the current step of an open workflow run, without saving it and without refusing. Rules are checked by TypeSafe, a separate provider: a check sends it the draft record, the text of each Rule, and the project context a Rule refers to, such as Dictionary terms, Features, and declined Ideas, and never the account name, email address, or identifier. Rules run only inside workflow runs: runId names the run, and record.kind picks idea, batch, work, or delivery, which must be the kind of write that step's connection checks. Pass a record's id to start from the saved record; any fields you pass override the saved values. Batch rules check the plan, so a saved Batch can be rechecked only until one of its Works is done. Returns passed and failed rules, each with its probability (a rule passes at 0.75 or above), any rules that could not be checked with the reason, and how many rules were sent to TypeSafe (sentToTypeSafe) or answered from saved verdicts (fromSavedVerdicts). Unchanged records reuse earlier verdicts.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
runIdYesId of the Workflow run.
recordYesDraft to check; kind is idea, batch, work, or delivery.
projectIdYesId of the Project.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / record / oneOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "content": {
      -        "maxLength": 40000,
      -        "type": "string"
      -      },
      -      "id": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "impact": {
      -        "enum": [
      -          "minor",
      -          "major"
      -        ],
      -        "type": "string"
      -      },
      -      "kind": {
      -        "const": "idea",
      -        "type": "string"
      -      },
      -      "summary": {
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "title": {
      -        "maxLength": 20,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "kind"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "id": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "kind": {
      -        "const": "batch",
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      },
      -      "works": {
      -        "items": {
      -          "properties": {
      -            "description": {
      -              "maxLength": 40000,
      -              "type": "string"
      -            },
      -            "labels": {
      -              "items": {
      -                "type": "string"
      -              },
      -              "type": "array"
      -            },
      -            "size": {
      -              "enum": [
      -                "small",
      -                "medium",
      -                "large"
      -              ],
      -              "type": "string"
      -            },
      -            "title": {
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "title",
      -            "size"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "kind"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "batchId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "description": {
      -        "maxLength": 40000,
      -        "type": "string"
      -      },
      -      "id": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "kind": {
      -        "const": "work",
      -        "type": "string"
      -      },
      -      "labels": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "size": {
      -        "enum": [
      -          "small",
      -          "medium",
      -          "large"
      -        ],
      -        "type": "string"
      -      },
      -      "title": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "kind"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "batchIds": {
      -        "items": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "kind": {
      -        "const": "delivery",
      -        "type": "string"
      -      },
      -      "rationale": {
      -        "maxLength": 40000,
      -        "type": "string"
      -      },
      -      "summary": {
      -        "maxLength": 40000,
      -        "type": "string"
      -      },
      -      "version": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "kind"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "content": {
      +        "maxLength": 40000,
      +        "type": "string"
      +      },
      +      "id": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "impact": {
      +        "enum": [
      +          "minor",
      +          "major"
      +        ],
      +        "type": "string"
      +      },
      +      "kind": {
      +        "const": "idea",
      +        "type": "string"
      +      },
      +      "summary": {
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "title": {
      +        "maxLength": 20,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "id": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "kind": {
      +        "const": "batch",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "works": {
      +        "items": {
      +          "properties": {
      +            "description": {
      +              "maxLength": 40000,
      +              "type": "string"
      +            },
      +            "labels": {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            "size": {
      +              "enum": [
      +                "small",
      +                "medium",
      +                "large"
      +              ],
      +              "type": "string"
      +            },
      +            "title": {
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "title",
      +            "size"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "batchId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "description": {
      +        "maxLength": 40000,
      +        "type": "string"
      +      },
      +      "id": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "kind": {
      +        "const": "work",
      +        "type": "string"
      +      },
      +      "labels": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "size": {
      +        "enum": [
      +          "small",
      +          "medium",
      +          "large"
      +        ],
      +        "type": "string"
      +      },
      +      "title": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "batchIds": {
      +        "items": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "id": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "kind": {
      +        "const": "delivery",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "rationale": {
      +        "maxLength": 40000,
      +        "type": "string"
      +      },
      +      "summary": {
      +        "maxLength": 40000,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the readOnly/openWorld annotations: it discloses that checking is done by TypeSafe, exactly what data is transmitted and what is explicitly never sent (account name, email, identifier), the 0.75 pass threshold, and that unchanged records reuse earlier verdicts. This is unusually rich behavioral context.

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-loaded with the core purpose and dense with useful detail; every sentence (privacy disclosure, kind constraint, id override, return values, saved-verdict reuse) earns its place. It is a single long paragraph that would read better with structure, which keeps it from a 5.

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?

With no output schema, the description carries the full burden of the return shape and does so: passed/failed rules with probability, unchecked rules with reasons, and the sentToTypeSafe/fromSavedVerdicts counts. Combined with the workflow and kind constraints, an agent has what it needs to call it correctly.

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% (baseline 3), but the description adds real semantics: record.kind must match the kind of write checked by that step's connection, and passing a record id starts from the saved record while any supplied fields override it. That clarifies the id-vs-fields interaction the schema does not.

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 ('Check a draft against the rulesets') and immediately scopes it ('on the current step of an open workflow run, without saving it and without refusing'). This clearly distinguishes it from write siblings like update_rule, create_rule, or list_rulesets.

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 strong conditions: rules run only inside workflow runs, runId names the run, and record.kind must match the kind the step's connection checks. It also notes batch recheck limits ('only until one of its Works is done'). It stops short of naming an explicit alternative for a non-workflow check, but the 'without saving' framing effectively separates it from update tools.

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