Skip to content

Preflight

Before running a saved chain you often want to know what it will try to use — which tools, MCP servers, and AgentSkills — so you can register or install the missing pieces. CARL exposes static introspection on ReasoningChain.

chain.required_tools() # de-duplicated tool names from ToolStep configs
chain.required_mcp_servers() # MCP server names referenced by MCP steps
chain.required_skills() # AgentSkill identifiers (URI or source string)

These are pure static reads — no execution, no LLM.

chain.preflight(context) compares the requirements against a context’s registry and returns a PreflightReport:

report = chain.preflight(context)
print(report.format_text())
if not report.all_present:
print("register first:", report.missing_tools)
Field / memberMeaning
required_tools / required_mcp_servers / required_skillsEverything the chain references.
missing_toolsTools referenced but not registered in the context (MAESTRO’s “register before running” list).
missing_mcp_servers / missing_skillsReserved (currently always empty — MCP carries its own config; skill resolution is async/network-bound).
all_present (property)True when nothing is missing.
format_text()One-line summary when OK, multi-line breakdown otherwise.

The report is structured, not narrated — MAESTRO turns it into a modal; CLIs and CI read the raw lists.