Skip to main content
Glama

IA-QA — 152 QA & Dev Tools for AI Agents

generate_ci_workflow

Read-onlyIdempotent

Generate a ready-to-commit GitHub Actions workflow that gates a build on IA-QA: "eval_contract" runs a .ia-eval.yaml through ia-qa-com/eval-action@v1 (needs a provider key as a repo secret), "cli_checks" runs deterministic tools via npx @ia-qa/cli and fails the build on their verdict, "selector_drift" gates E2E selectors with @ia-qa/self-healing. Deterministic template, no LLM. Returns the YAML, the secrets to create and the next steps. Pair with generate_eval_yaml for the contract.

Input Schema

NameRequiredDescriptionDefault
cronNoFor schedule (default '0 6 * * 1').
gateNoDefault eval_contract. both = CLI checks + eval; all = CLI checks, drift, eval.
providerNoDecides which repo secret is wired (default groq).
triggersNoDefault push + pull_request.
cli_toolsNoTools to gate on, e.g. ["secret_scan","prompt_injection_scan"].
min_scoreNoOverride the contract min_score (0-100).
app_base_urlNo[selector_drift] Default http://127.0.0.1:3000; must match .ia-qa/config.json.
fail_on_failNoDefault true; false reports without gating.
node_versionNoDefault "20".
contract_pathNoDefault evals/smoke.ia-eval.yaml.
workflow_nameNo
app_start_commandNo[selector_drift] Boots the app, e.g. "npm run start:ci". Never guessed: omitted, the step is a TODO.

Output Schema

NameRequiredDescriptionDefault
gateNo
pathNo
yamlNo
notesNo
next_stepsNo
secrets_requiredNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed13 schema fields changed
    • addedInput schema / examples
      Added value: +[
      +  {}
      +]
    • changedInput schema / properties / app_base_url / description
      Previous value: -"URL the drift gate waits for before capturing (default: http://127.0.0.1:3000). Must match config.baseUrl in .ia-qa/config.json."New value: +"[selector_drift] Default http://127.0.0.1:3000; must match .ia-qa/config.json."
    • changedInput schema / properties / app_start_command / description
      Previous value: -"Command that boots the app for the selector_drift gate, e.g. \"npm run start:ci\". Cannot be guessed — omitted, the step carries an explicit TODO and the note says so, because a plausible default would silently map nothing."New value: +"[selector_drift] Boots the app, e.g. \"npm run start:ci\". Never guessed: omitted, the step is a TODO."
    • changedInput schema / properties / cli_tools / description
      Previous value: -"IA-QA tool names to run as deterministic gates, e.g. [\"secret_scan\",\"prompt_injection_scan\"]. Tools with no known CI recipe get a --stdin step flagged in notes."New value: +"Tools to gate on, e.g. [\"secret_scan\",\"prompt_injection_scan\"]."
    • changedInput schema / properties / contract_path / description
      Previous value: -"Path to the .ia-eval.yaml contract, relative to the repo root (default: evals/smoke.ia-eval.yaml). Only used when the gate includes eval_contract."New value: +"Default evals/smoke.ia-eval.yaml."
    • changedInput schema / properties / cron / description
      Previous value: -"Cron expression when triggers include 'schedule' (default: '0 6 * * 1' — Mondays 06:00 UTC)."New value: +"For schedule (default '0 6 * * 1')."
    • changedInput schema / properties / fail_on_fail / description
      Previous value: -"Fail the build on a FAIL/PARTIAL verdict (default: true). Set false to report without gating."New value: +"Default true; false reports without gating."
    • changedInput schema / properties / gate / description
      Previous value: -"Which gate to emit. eval_contract = LLM eval via the action (default). cli_checks = deterministic CLI assertions. selector_drift = an E2E selector-drift gate via @ia-qa/self-healing (boots the app, captures, diffs against the committed baseline, branches on exit code 0/1/2). both = CLI checks + eval. all = CLI checks, then drift, then eval."New value: +"Default eval_contract. both = CLI checks + eval; all = CLI checks, drift, eval."
    • changedInput schema / properties / min_score / description
      Previous value: -"Override the contract min_score (0-100). Omit to use the value in the contract."New value: +"Override the contract min_score (0-100)."
    • changedInput schema / properties / node_version / description
      Previous value: -"Node version for the CLI steps (default: \"20\")."New value: +"Default \"20\"."
    • changedInput schema / properties / provider / description
      Previous value: -"LLM provider the contract runs against — decides which repository secret the workflow wires (default: groq)."New value: +"Decides which repo secret is wired (default groq)."
    • changedInput schema / properties / triggers / description
      Previous value: -"Workflow triggers (default: push + pull_request)."New value: +"Default push + pull_request."
    • removedInput schema / properties / workflow_name / description
      Removed value: -"Workflow display name (default: \"IA-QA Quality Gate\")."
  2. Changed4 schema fields changed
    • addedInput schema / properties / app_base_url
      Added value: +{
      +  "description": "URL the drift gate waits for before capturing (default: http://127.0.0.1:3000). Must match config.baseUrl in .ia-qa/config.json.",
      +  "type": "string"
      +}
    • addedInput schema / properties / app_start_command
      Added value: +{
      +  "description": "Command that boots the app for the selector_drift gate, e.g. \"npm run start:ci\". Cannot be guessed — omitted, the step carries an explicit TODO and the note says so, because a plausible default would silently map nothing.",
      +  "type": "string"
      +}
    • changedInput schema / properties / gate / description
      Previous value: -"Which gate to emit. eval_contract = LLM eval via the action (default). cli_checks = deterministic CLI assertions. both = CLI checks first, eval last."New value: +"Which gate to emit. eval_contract = LLM eval via the action (default). cli_checks = deterministic CLI assertions. selector_drift = an E2E selector-drift gate via @ia-qa/self-healing (boots the app, captures, diffs against the committed baseline, branches on exit code 0/1/2). both = CLI checks + eval. all = CLI checks, then drift, then eval."
    • changedInput schema / properties / gate / enum
      Previous value: -[
      -  "eval_contract",
      -  "cli_checks",
      -  "both"
      -]New value: +[
      +  "eval_contract",
      +  "cli_checks",
      +  "both",
      +  "selector_drift",
      +  "all"
      +]
  3. Added

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds useful behavioral context beyond annotations: it is a deterministic template with no LLM, requires a provider key as a repo secret, and returns YAML, secrets to create, and next steps.

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

Conciseness5/5

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

The description is front-loaded with the core purpose and then efficiently explains the gate modes, deterministic behavior, return values, and pairing recommendation. Every clause contributes useful selection or invocation context.

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?

Given the 12 optional parameters, 92% schema description coverage, annotations, and an output schema, the description is complete enough. It covers the tool's purpose, main modes, secret requirement, output expectations, and sibling pairing without redundantly documenting every parameter.

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 description coverage is 92%, so the schema does most parameter-level work. The description still adds meaning by explaining the gate modes, noting that provider determines which repo secret is wired, and clarifying that app_start_command is never guessed and becomes a TODO if omitted.

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?

The description states a specific verb and resource: generate a ready-to-commit GitHub Actions workflow that gates a build on IA-QA. It distinguishes the three gate modes (eval_contract, cli_checks, selector_drift) and names a sibling tool, generate_eval_yaml, so the agent can differentiate it from alternatives.

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?

It gives clear context for when to use the tool and how gate modes map to CI behaviors, and it explicitly says to pair it with generate_eval_yaml for the contract. However, it does not name when to use this versus run_eval_contract or other eval-running siblings, so exclusions are implied rather than explicit.

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.