Skip to content

StewAI

by stewai.com · remote · no sign-in to list tools · v1.1.0 · published by com.stewai

Discover, run, inspect, build, test, and privately reuse AI workflows.

Deletes · 3Changes · 5

14 tools: 3 can delete or cancel things, 5 change things and 6 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http stewai https://api.stewai.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn1 info
  • The server marks "check_recipe_build" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "run": a word for a change.

    What this check looks for
  • The description is 2,300 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...quest with the same idempotency key; do not create duplicate work with a new key."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

14 tools

Deletes or cancels 3Claude Code: deny
  • commit_recipe_buildPreflight and privately publish only the exact fully qualified recipe revision.No findings

    Why it is in this group

    • The name "commit_recipe_build" says "commit": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Preflight and privately publish only the exact fully qualified recipe revision. A successful commit returns a private editor URL and, when current run access permits it, a recipe_ref. Preview that reference before any dry run: authoring contract handles and node IDs are not the positional input_N run handles. The recipe stays private, unlisted, and unreviewed; commit never lists, prices, or publishes it in the public marketplace.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
  • run_recipeEstimate or run a previewed public or account-authorized published recipe.No findings

    Why it is in this group

    • The name "run_recipe" says "run": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Estimate or run a previewed public or account-authorized published recipe. dry_run foregrounds history (recent charges or median and p90), fees, balance, and can_start. safety_ceiling_credits is a pathological bound when available, not a quote or admission threshold; a null ceiling means provider search has no request-side query limit and does not block a run. estimated_credits and sufficient are deprecated compatibility aliases. can_start=true permits the approved real run even when the ceiling exceeds the wallet. can_start=false is reserved for a genuine admission blocker such as an unaffordable Marketplace fee. If credits run out during a run, it pauses and can be resumed after adding credits. On recipe_ref_expired, search or preview again and retry.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
  • update_recipe_buildApply bounded optimistic changes to an owned private recipe build.1 finding

    Why it is in this group

    • The name "update_recipe_build" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    Findings

    • Info

      The description is 2,300 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...quest with the same idempotency key; do not create duplicate work with a new key."

      What this check looks for
    Description, as the server wrote it
    Apply bounded optimistic changes to an owned private recipe build. After an uncertain response, inspect the build and replay the identical request with the same idempotency key; a new key duplicates the work. Use only the exact op names and payload keys in inputSchema: set_metadata takes metadata, upsert_schema takes schema_id and schema, and acceptance uses set_acceptance_cases with suite. Never invent set_schema or set_acceptance_suite. If an op appears unknown, read get_recipe_build view='authoring_schema', schema_name='update_recipe_build'; read schema_name='acceptance_suite' for the complete suite shape and every assertion operator with its required, allowed and forbidden fields. Do not guess them. Use set_contracts to replace the declared executable input and output contracts; this changes the revision and invalidates qualification. For a supervised acceptance handoff, use bind_resource only to approve an exact selector already frozen in the draft, then resume_activity or cancel_activity with the returned opaque handoff and activity references. Each handoff control operation must be the only op in its request. An acceptance suite is {version:1,cases:[{case_id,label,kind,fixtures,assertions}]}. Each fixture is {target,content_type,value}. A minimal assertion is {assertion_id:'result_exists',type:'scalar',operator:'exists',path:'/result'}. JSON Pointer paths start with '/'. A metamorphic case also requires pair_with naming another case. Use a paired assertion such as {assertion_id:'stable',type:'paired',operator:'fields_unchanged',path:'',pair_case_id:'base',fields:['/summary']}; pair_case_id is not valid on a scalar assertion. Client transport recommendation, not a server limit: keep serialized tool arguments below 32 KiB including JSON escaping and the request envelope. For larger spec, suite, or research content use begin_chunk, ordered append_chunk (seq starts at 0), then commit_chunk. Keep each complete append request below 12 KiB; split text further after measuring escaped JSON bytes. Hash the exact assembled UTF-8 text with SHA-256. Begin/append do not change the revision; commit changes it once. After an uncertain response, inspect the build and replay the identical request with the same idempotency key; do not create duplicate work with a new key.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
Changes things 5Claude Code: ask
  • check_recipe_buildRun free deterministic lint, render, policy, and compiler checks.1 finding

    Why it is in this group

    • The description's first verb is "run": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "check_recipe_build" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "run": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Run free deterministic lint, render, policy, and compiler checks. Omit fixtures for the normal structural check; a supplied fixture probe must also provide every referenced upstream dependency value.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • discover_stewaiLearn how any MCP agent can authenticate, discover, preview, run, author, qualify, commit, inspect, and recover StewAI recipes.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Learn how any MCP agent can authenticate, discover, preview, run, author, qualify, commit, inspect, and recover StewAI recipes. Call this first.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • review_recipe_buildQuote or run a bounded semantic quality review of the exact private draft revision.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Quote or run a bounded semantic quality review of the exact private draft revision.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • run_recipe_acceptanceQuote or run selected or complete behavioral acceptance cases for an exact private draft revision.No findings

    Why it is in this group

    • The name "run_recipe_acceptance" says "run": a word for a change.
    Description, as the server wrote it
    Quote or run selected or complete behavioral acceptance cases for an exact private draft revision. Quotes explain enforced input bounds, output caps and retry allowances in acceptance_cost. Preserve representative fixtures and assertions; remove unnecessary model stages rather than weakening tests to lower a quote. Paid work requires an approved budget. A full run that needs user approval returns supervised_required before any case, reservation, or external effect; first bind every returned required resource with update_recipe_build bind_resource, then open action_url for user approval, and finally resume the same activity with update_recipe_build resume_activity.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • start_recipe_buildCreate a private recipe build from a bounded intent and declared contract.No findings

    Why it is in this group

    • The name "start_recipe_build" says "start": a word for a change.
    Description, as the server wrote it
    Create a private recipe build from a bounded intent and declared contract. Recipe inputs are strings: use type:string, positive maxLength, and only minLength:1 on required inputs. Richer input constraints must be handled in recipe logic and tested, not claimed as enforced by the input node. The response returns the stored contracts when they fit the bounded result; the archetype bundle is optional guidance, not the build contract. Optionally provide source_recipe_ref to adapt an owned recipe or a fully viewable public-open recipe into a new private draft.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Only reads 6Claude Code: allow
  • get_recipe_buildList or inspect only the authenticated creator's private recipe builds.No findings

    Why it is in this group

    • The name "get_recipe_build" says "get": a word for reading.
    Description, as the server wrote it
    List or inspect only the authenticated creator's private recipe builds. To list builds omit both build_ref and view; limit/cursor paginate that list. With or without build_ref, use view='authoring_schema' and schema_name='update_recipe_build', 'acceptance_suite', or 'start_recipe_build' to read the complete executable JSON Schema when a client hides nested operation or assertion fields. Large acceptance_plan reads return data.suite_page JSON fragments: append content in offset order, pass data.next_cursor as cursor until null, then parse the complete suite and verify its sha256. Small plans retain data.suite. Use view='capabilities' to discover the complete 24-handler authoring and automatic-acceptance capability catalog.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_recipe_build_activityPoll a review or acceptance batch through a bounded, disclosure-safe view.No findings

    Why it is in this group

    • The name "get_recipe_build_activity" says "get": a word for reading.
    Description, as the server wrote it
    Poll a review or acceptance batch through a bounded, disclosure-safe view.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_recipe_previewInspect a safe summary with bounded method and limitations excerpts, output-contract state, and evidence context.No findings

    Why it is in this group

    • The name "get_recipe_preview" says "get": a word for reading.
    Description, as the server wrote it
    Inspect a safe summary with bounded method and limitations excerpts, output-contract state, and evidence context. For complete authorized published details and executable contracts, use view=details. Concatenate content fragments in offset order per section; decode JSON sections after completion. Use next_cursor with the same recipe_ref until null. Opaque internals remain withheld.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_resultsAfter a finished run, read view=steps with detail=full first and follow next_cursor; every step the user paid for is part of the result.No findings

    Why it is in this group

    • The name "get_results" says "get": a word for reading.
    Description, as the server wrote it
    After a finished run, read view=steps with detail=full first and follow next_cursor; every step the user paid for is part of the result. Declared outputs are the pinned summary, not the whole result. Read declared outputs or a sanitized per-step trace from an owned run, including signed chunks for oversized steps. view=steps returns compact summaries, 10 per page by default and at most 20 (limit 1-20); follow next_cursor until it is null, pass detail=full for whole steps, or use view=step with step_id for one full step. Open recipes expose all authorized steps; closed recipes expose only input and output steps. Sensitive values stay redacted. Step reads are provisional until get_run reports a finished status. If outputs is empty, read view=steps; for a failed run, read the failed step and let the user decide. Present completed outputs as polished Markdown or text: lead with the useful outcome, add At a glance, supported strengths, impact-ordered findings, and concrete next steps; end with evidence, uncertainty, limitations, charged credits, and a clickable run link using run_url with the run ID as its label. Render JSON as readable tables or bullets and HTML as content, not markup. Cross-check material claims against supplied source and cited evidence; describe unsupported or high-stakes conclusions as findings to verify. Say blocking only when the recipe explicitly classifies the item that way and evidence supports it. Keep diagnostics, safety ceilings, and platform plumbing out of the main answer; billing receipt issues stay quiet and never suppress ready results.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_runRead an owned run, view=history to resume normal runs (recipe_ref/status/cursor/limit), or view=diagnostics for its settled UI receipt.No findings

    Why it is in this group

    • The name "get_run" says "get": a word for reading.
    Description, as the server wrote it
    Read an owned run, view=history to resume normal runs (recipe_ref/status/cursor/limit), or view=diagnostics for its settled UI receipt. Default status requires run_id and includes live progress: updated_at is the run record time, progress.last_step_activity_at is the latest step activity. A blocked run paused for credits reports credit_pause.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_recipesFind safe public recipes and published recipes available to the current account.No findings

    Why it is in this group

    • The name "search_recipes" says "search": a word for reading.
    Description, as the server wrote it
    Find safe public recipes and published recipes available to the current account. results are direct fits (exact or strong); related_results are adjacent recipes, not direct fits. Each row states its output contract, past-run cost history and, for reviewed public recipes, that safety review is not output-quality validation. required_inputs and required_outputs match exact handles or normalized labels, never meanings. When paging.has_more is true, repeat the identical call with cursor=next_cursor.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http stewai https://api.stewai.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__stewai__get_recipe_build",
      "mcp__stewai__get_recipe_build_activity",
      "mcp__stewai__get_recipe_preview",
      "mcp__stewai__get_results",
      "mcp__stewai__get_run",
      "mcp__stewai__search_recipes"
    ],
    "ask": [
      "mcp__stewai__check_recipe_build",
      "mcp__stewai__discover_stewai",
      "mcp__stewai__review_recipe_build",
      "mcp__stewai__run_recipe_acceptance",
      "mcp__stewai__start_recipe_build"
    ],
    "deny": [
      "mcp__stewai__commit_recipe_build",
      "mcp__stewai__run_recipe",
      "mcp__stewai__update_recipe_build"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as stewai. Review it before you use it.