Skip to main content
Glama

Server Details

AI-powered life cycle assessment and modelling: connect to LCA databases, build and analyze systems

Ownership verified
Status
Healthy
Uptime
73.7% over 42 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.4/5.0

Scored across 23 tools

Disambiguation4/5

Each tool targets a distinct resource+action, and the potentially confusing pairs (compose_assembly vs compose_linked, edit_assembly vs edit_linked, engine_get vs lca_get, knowledge_search vs get_excerpts vs get_full_document) are explicitly cross-referenced in their descriptions. The deliberate 'two ways to build/edit a system' pairs still require careful reading, so it's not perfectly frictionless, but boundaries are well drawn.

Naming Consistency5/5

Consistent prefix_verb_noun pattern throughout: engine_*, knowledge_*, lca_*, and load_skill all follow verb_noun with a clear domain prefix. No mixing of camelCase/snake_case or verb styles; the taxonomy is predictable and readable.

Tool Count4/5

23 tools is on the heavier side, but the server spans genuinely broad sub-domains (engine catalog browsing, literature library, workspace management, system composition, assessment, analysis, import). Each tool appears to earn its place, though the count is slightly high and would benefit from tighter consolidation.

Completeness4/5

Strong lifecycle coverage: search/browse, compose, edit, assess, analyze, compare, import, delete, and workspace/engine switching. Reports are referenced (r<N> refs, report_writing skill) but no report-creation tool is present, leaving one minor gap an agent would have to work around.

Available Tools

23 tools
engine_getGet database itemA
Read-onlyIdempotent
Inspect

Detail for one engine-catalog object by ref: p<N>, e<N>, f<N> or m<N>. Refs come from engine_search and name objects in the connected engine database. Polymorphic on the prefix: p<N> → process, e<N> → engine product system, f<N> → flow, m<N> → LCIA method. A workspace s<N> is a different object, read with lca_get(ref='s<N>'); this tool rejects it. Process detail defaults to a summary of both sides (top 20 each: product flows first, then elementary, grouped by unit, largest amount first); section='inputs'|'outputs' with offset pages one side, and limit (max 100) sizes the page. Every heading states the true total; a follow-up hint appears whenever rows remain. include_providers=true on a flow ref lists the processes that produce it. An m<N> returns the method's categories; section='factors' adds their characterization factors (rarely needed). A process's exchange rows and reference product carry f<N> refs, which the compose and edit tools accept directly.

NameRequiredDescriptionDefault
refYesThe item to look up — a reference like p1, e3 or f7 taken from an earlier search. Run `engine_search` first if you don't have one.
limitNoHow many rows to show per side. Default 20, up to 100.
engineNoName of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine. Not combined with `scope_ref`, which picks the database a ref came from.
offsetNoSkip this many rows to page further down the list. Starts at 0 (the top).
sectionNoProcesses: show only the inputs (what the process uses) or only the outputs (what it makes or emits), one page at a time; leave unset for a short summary of both. Methods: `factors` adds the characterization factors of each impact category (heavy; rarely needed).
include_providersNoAlso list the processes that produce this flow — i.e. where it comes from. Flows only.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly/idempotent/non-destructive/closed-world), yet the description still adds substantial behavior: the default two-sided summary with top-20-per-side ordering, grouping by unit, largest-amount-first, true totals in headings, follow-up hints when rows remain, and paging semantics for section+offset. This is well beyond what structured fields convey.

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?

One dense paragraph, but it is front-loaded with the purpose and ref-prefix legend before the paging and edge-case detail. Almost every sentence carries operational content; a mild deduction for length and for re-covering limit/section behavior already present in the schema.

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 must describe returns, and it does — default summary composition, pagination, totals, and hints. For a read-only lookup with 6 params, nothing an agent needs to call it correctly appears to be missing.

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%, so the baseline is 3, but the description adds real meaning the schema lacks — notably what each ref prefix resolves to (p=process, e=product system, f=flow, m=LCIA method) and that process exchange rows carry f<N> refs usable by compose/edit tools. It largely restates limit/offset/include_providers behavior that the schema already documents.

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?

Opens with a specific verb+resource ('Detail for one engine-catalog object by ref') and immediately decodes the four ref prefixes (p/e/f/m). It explicitly separates itself from siblings: refs come from engine_search, and workspace s<N> objects belong to lca_get, not this tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the prerequisite (run engine_search first for a ref), the exclusion (rejects s<N>, use lca_get instead), and per-type usage guidance (section='factors' is 'rarely needed'; include_providers only applies to flow refs). An agent can route correctly without opening any schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_get_excerptsGet literature excerptsA
Read-onlyIdempotent
Inspect

Search the library and return abstracts with matching passages. Three modes: (1) query only → discover documents AND return each one's abstract + relevant chunk excerpts in one call; (2) document_refs only → abstract + first chunks per doc as a table-of-contents glimpse; (3) both → re-rank chunks against the query, scoped to those refs. At least one of query or document_refs is required. In query-discovery mode you may also scope by journal / year_from / year_to (ignored when document_refs is given).

NameRequiredDescriptionDefault
limitNoMax documents (only applies when document_refs is omitted, default: 10).
queryNoSearch text. Required when no documents are selected (discovery mode) — finds matching documents. Optional once document_refs are given: include it to rank those documents' chunks by relevance, or omit it to pull each document's abstract + opening chunks. The library is English-language: technical terms and scientific names match best.
journalNoOptional. Restrict the search to ONE journal, by its full name (e.g. "Journal of Cleaner Production"). A distinctive fragment also works ("Cleaner Production"), but a fragment matching several journals is rejected with the candidates listed — never guessed at — so prefer the full name. To compare journals, run one search per journal. Omit to search every document this session can reach — including the user's own uploads and anything else with no journal recorded, which a journal filter would exclude.
year_toNoOptional inclusive upper bound on publication year. Omit for no upper bound.
year_fromNoOptional inclusive lower bound on publication year (e.g. 2020 for "recent"). Omit for no lower bound.
document_refsNoSpecific documents to pull from, as knowledge refs from a recent knowledge_search (e.g. ["k1", "k7"]). Provide these to fetch those exact documents (abstract + chunks) instead of discovering by query — the metadata filters (Scope / years) then no longer apply. Required if query is omitted.
top_k_chunks_per_docNoMax chunks to return per document (default: 3).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: the library is English-language so technical terms/scientific names match best, a multi-journal fragment is rejected with candidates rather than guessed, omitting journal widens scope to uploads and journal-less documents, and filters are inert in document_refs mode. Return shape (abstract + chunks) is also sketched.

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?

Front-loaded with the core action, then a tight numbered enumeration of the three modes, then the input requirement and the filter-scoping caveat. Every sentence earns its place and the parenthetical constraints are load-bearing rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, no required params, and no output schema, the description does the important work of explaining mode interactions and mutual constraints, which is what an agent needs to call it correctly. It could say a bit more about what a returned excerpt/chunk actually contains (ordering, sizing) and about behavior when a ref is invalid, but the essentials are present.

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%, so the baseline is 3, but the description adds real semantic value beyond the schema: the trade-off of omitting journal (includes the user's own uploads), the fragment-resolution/rejection behavior, and the interaction where scope filters are ignored once document_refs are given. It does not add anything for limit/top_k_chunks_per_doc or the year bounds, which the schema already handles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb+resource ('Search the library and return abstracts with matching passages') and enumerates three operating modes keyed on which inputs are supplied. It is very clear about what the tool produces, but it never names sibling tools (knowledge_search, knowledge_get_full_document), so differentiation from them is only implied by the 'discover AND return excerpts in one call' framing.

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?

Strong mode-selection guidance: query-only for discovery+excerpts, document_refs-only for a table-of-contents glimpse, both for re-ranking scoped to refs, plus the hard constraint that at least one of query/document_refs is required. It also states when metadata filters are ignored. It stops short of naming an alternative tool for pure document discovery (e.g. knowledge_search), which would be the 5-level signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_get_full_documentGet full documentA
Read-onlyIdempotent
Inspect

Full text of one library document, by its k<N> ref. The ref comes from a recent knowledge_search (k1, k7). knowledge_get_excerpts returns abstracts and matching passages, which usually suffice; this returns the whole paper. Refs marked [ref-only] have no full text, so for those it returns the same abstract knowledge_get_excerpts does.

NameRequiredDescriptionDefault
document_idYesRef like `k1`/`k7` from a recent knowledge_search. Titles, DOIs and document uuids are rejected.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, yet the description adds real behavioral context: [ref-only] documents return only an abstract rather than failing or returning empty. It could go further on size/truncation behavior for large full texts, hence not a 5.

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?

Four tight sentences, front-loaded with what the tool returns and the ref contract, then the sibling comparison and the edge case. No padding or repetition.

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 still tells the agent what comes back (full text, or the same abstract as excerpts for ref-only entries) and where the input ref originates. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents the k<N> format and the rejection of titles/DOIs/uuids. The description restates the ref origin ('comes from a recent knowledge_search') without adding format or syntax detail beyond the schema, so the baseline 3 applies.

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+resource ('Full text of one library document') and scopes it precisely by ref type. It explicitly contrasts itself with knowledge_get_excerpts and knowledge_search, so an agent can distinguish it from siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use-this-vs-alternative rule: excerpts 'usually suffice', this tool is for the whole paper, and it names which refs are even eligible ([ref-only] excluded). That is a genuine routing decision, not vague context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_analyze_contributionsAnalyze contributionsAInspect

Break down what drives an impact category. ref is a<N> (analyses a saved assessment's setup) or s<N> (analyses a saved system directly, with no prior assessment needed; method and amount then shape the solve). Returns a b<N> breakdown ref, a separate object from the a<N> it analyses. Modes: by='process' ranks contributing processes (total_amount = per-process total, loop-corrected); by='flow' ranks substance drivers by amount × CF; by='upstream' walks the supply chain. For composed (bill-of-materials) systems only process via an a<N> is available; flow, upstream and an s<N> return 422. The first call per solve prepares the engine in the background (about 3–5 s); later calls on the same solve reuse it. Rows carry p<N>/f<N> refs for further detail.

NameRequiredDescriptionDefault
byNoHow to break down the result: rank contributing processes, rank substance flows, or walk the upstream supply-chain tree. Composed (bill-of-materials) systems support process only.process
refYes`a<N>` — analyse that saved assessment's setup (its system, method and functional unit); `s<N>` — analyse the saved system directly, with NO prior assessment (`method` / `amount` apply only here). List current ones with `lca_get(kind='assessments')` / `lca_get(kind='systems')` — never pass UUIDs.
depthNoUpstream only: maximum depth of the supply-chain walk (1–6).
top_nNoMaximum number of rows to return (default 20).
amountNo`s<N>` only: how many of the system's DECLARED functional units to analyse (N). The solve scales by N x the declared amount, the same way `lca_run_assessment` does. Omit to analyse at the system's declared functional unit (N=1); an explicit value overrides. Ignored with an `a<N>`, which inherits its functional unit — and ignores `amount` entirely — from the saved assessment.
cutoffNoUpstream only: drop nodes contributing less than this fraction of the total impact (0–1, default 0.01).
methodNo`s<N>` only: preferred LCIA method — fuzzy-matched (substring) against the methods in the connected database; free text is accepted. Defaults to the same house preference `lca_run_assessment` uses. Ignored with an `a<N>`, which inherits its method from the saved assessment.
categoryNoImpact category to break down. Defaults to the first category of the method.
directionNoFlow only: which exchange direction to keep — 'input' = substances taken from the environment (resources, land, water intake); 'output' = released to it (emissions like CO₂ to air); 'both' (the default) applies no filter. Most categories are dominated by one direction anyway; narrow mainly for net-balance categories like water consumption, where withdrawals (input) and returns (output) carry opposite signs and would otherwise both rank as top 'drivers' while largely cancelling.both
workspaceYesName of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work.
compartmentNoFlow only: filter substances to one environmental compartment (medium) — e.g. 'air', 'water', 'soil'. Case-insensitive substring against the compartment path.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations declare a non-read-only, non-idempotent operation but say nothing about cost or side effects; the description fills that gap by disclosing that the first call per solve prepares the engine in the background (~3–5 s) and later calls reuse it, plus the 422 failure modes. It also notes the returned b<N> is a new object separate from the analysed a<N>. Rich disclosure beyond annotations.

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?

Dense but front-loaded: the core purpose, the ref scheme, and mode behavior come first, with latency and error caveats at the end. Backtick refs compact a lot into one paragraph, though the density borders on cryptic for a first-time reader.

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?

For an 11-parameter tool with no output schema, the description explains the return shape (b<N> breakdown ref, p<N>/f<N> row refs for further detail), all mode-dependent parameter applicability, engine-preparation latency, and error conditions. Nothing essential for a correct invocation is missing.

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%, so baseline is 3, but the description adds real meaning: `ref` `a<N>` vs `s<N>` semantics, that `method`/`amount` only shape an `s<N>` solve, and the per-mode meaning of results (`total_amount` loop-corrected for process, `amount × CF` for flow, supply-chain walk for upstream). Adds value over the schema without fully documenting every param (e.g. depth/top_n/cutoff stay schema-only).

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+resource (break down what drives an impact category) and immediately disambiguates from siblings by naming the three modes and the b<N> output object distinct from the a<N> input. An agent can distinguish this from lca_analyze_sensitivity or lca_run_assessment without opening the schema.

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 explicit when-to-use routing: `a<N>` analyses a saved assessment's setup, `s<N>` analyses a saved system with no prior assessment, and it names lca_get for enumerating refs. It also states when-not (composed systems support only 'process' via `a<N>`; flow/upstream/s<N> return 422). Lacks an explicit comparison to lca_analyze_sensitivity, so 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_analyze_sensitivityAnalyze sensitivityAInspect

Quantify which inputs drive a system's result, and by how much. ref is a saved assessment (a<N>). Composed (bill-of-materials) systems are analysed exactly and instantly; engine-backed tornado uses one cached contribution solve, and engine sweep/scenarios re-solve openLCA param:<name> parameters. Every result states its nature, source and limits. Pass at most one study (none = default tornado): tornado: {variables?, variation_pct?} ranks each variable's ±swing; sweep: {variable, range_min, range_max, steps?, reference_ref | threshold} walks one variable (a break-even needs reference_ref or threshold); scenarios: [{name, overrides}] compares named overrides (id → multiplier). Variable ids come from a default tornado run, or a unique name fragment. member:<slug> = composed member; driver:<slug> = engine driver; param:<name> = engine parameter (sweepable); system:amount scales a whole composed system. Returns a durable v<N>, separate from the a<N> it analyses.

NameRequiredDescriptionDefault
refYesSaved-assessment ref in the form `a<N>` (e.g. `a3`) — study the setup this composed assessment captured. List current assessments with `lca_get(kind='assessments')` — never pass UUIDs.
sweepNoSweep study: walk ONE variable across [`range_min`, `range_max`] (add `reference_ref` or `threshold` for a break-even).
tornadoNoTornado study: rank each variable's ±`variation_pct` swing. The default when no study is given.
categoryNoImpact category to analyse. Defaults to the method's first.
scenariosNoScenarios study: named override sets vs the same baseline, e.g. [{name: 'worst case', overrides: {'member:steel': 1.5}}]. Keys are composed `member:<slug>` / `system:amount` ids (analytic) OR, for an engine target, engine `param:<name>` ids (re-solves the model, deferred) — name fragments resolve server-side either way, but a scenario set may not MIX driver/member and param keys. An unresolvable key 422s.
workspaceYesName of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work.

TDQS

A4.5/5.0
Behavior4/5

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

Goes well beyond the annotations, which only declare it mutates and is non-idempotent. The description discloses performance traits ('analysed exactly and instantly', 'one cached contribution solve', 're-solve openLCA param:<name> parameters', 'deferred'), notes id-namespace rules, 422 behaviour on unresolvable ids, mixing restrictions, and that it returns a durable v<N> separate from the analysed a<N>. It doesn't explain permissions or persistence lifetime beyond 'durable', keeping it below a 5.

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?

Dense and front-loaded with the core purpose, then study modes, id forms, and return value. Every clause carries information, though the run-on sentence packing multiple constraints is dense enough to require careful reading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the complex nested schema (three study modes, overrides, reference_ref vs threshold) and the deferred/instant behavioral split well. No output schema exists, so it notes the return is a durable v<N>, but doesn't describe the result shape (e.g. per-variable swing rows) that an agent might need.

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%, so baseline is 3, but the description adds meaningful semantics: which variable id forms are valid per study (member:/driver:/param:/system:amount), that omission defaults to all, and how fragments resolve. It doesn't fully restate every nested field (e.g. category, variation_pct defaults), so it earns a 4 rather than 5.

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: 'Quantify which inputs drive a system's result, and by how much.' It clearly distinguishes itself from siblings like lca_analyze_contributions by framing the output as ranked drivers/swings rather than contribution shares.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states 'Pass at most one study (none = default tornado)' and specifies when to use each mode: tornado for ranking swings, sweep for walking one variable, scenarios for named override sets. It also names the constraints (e.g. 'a break-even needs reference_ref or threshold', 'system:amount is NOT valid here (use sweep/scenarios)').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_apply_nw_setApply normalization/weighting setA
Idempotent
Inspect

Apply a normalization/weighting set to a saved assessment (a<N>). ref is an a<N> in the workspace named by workspace; nw_set names one of its method's sets, and an unknown name is refused with the sets the method offers. Nothing is recalculated: the set's factors are read from the engine that calculated the assessment, and normalized and weighted results per category plus a single score are stored beside the unchanged characterized results. Applying the same set again refreshes it. A set may cover only some of the categories; the result names the ones it leaves out of the single score. lca_compare_assessments with nw_set compares assessments that all carry the same set. Weighting expresses value choices, and ISO 14044 §4.4.5 bars it from a comparative assertion disclosed to the public.

NameRequiredDescriptionDefault
refYesThe saved assessment `a<N>` to re-score.
nw_setYesName of one of the assessment method's normalization/weighting sets (exact, or a unique part of the name). An unknown name is refused with the sets the method offers.
workspaceYesName of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: nothing is recalculated, factors are read from the engine that produced the assessment, results are stored beside unchanged characterized results, re-application refreshes (consistent with idempotentHint), partial category coverage is possible, and it cites the ISO 14044 restriction on public comparative assertions. This is unusually rich behavioral disclosure.

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-loads the core action and keeps every sentence substantive, but it is dense with several distinct topics (storage semantics, refresh, partial coverage, ISO caveat) that could be tightened. No filler sentences, so it stays efficient.

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 burden of explaining what gets produced: normalized/weighted results per category plus a single score, stored alongside unchanged characterized results, with omitted categories named. An agent has everything needed to invoke and interpret the call.

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%, so the baseline is 3, but the description adds real meaning: ref is an a<N> in the named workspace, nw_set must match one of the method's sets (exact or unique part), and workspace is mandatory per call because connections are shared. It reinforces and contextualizes the schema rather than merely repeating it.

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 precise verb+resource: applying a normalization/weighting set to a saved assessment. It explicitly distinguishes itself from lca_compare_assessments (which uses nw_set only to compare assessments all carrying the same set), so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use conditions: apply to a saved assessment, unknown set names are refused, re-applying refreshes rather than duplicates, and comparison of sets belongs to lca_compare_assessments. Alternatives and preconditions are named, not implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_compare_assessmentsCompare assessmentsAInspect

Save a comparison across 2–8 saved assessments. Each target is an a<N> ref (listable with lca_get(kind='assessments')); every lca_run_assessment call already saves one, so there is no separate save step. Two preconditions are enforced (400): all targets share one LCIA method, and all are one product at one amount unless function states the function they all deliver. Differences in allocation, database or provider linking are not refused; they are returned as equivalence warnings alongside the result. The comparison is saved into the workspace named by workspace and returned as primary_ref (c<N>), which holds the full matrix. The matrix does not rank the targets; it reports each impact category separately. nw_set adds the targets' stored single scores for that set beside the matrix; every target must already carry it (lca_apply_nw_set). The assessment_interpretation skill (load_skill) documents comparison discipline.

NameRequiredDescriptionDefault
nw_setNoCompare by the single score of this normalization/weighting set (its name, or a unique part of it); every target must carry it, see `lca_apply_nw_set`. A target missing it, or carrying a different copy, is refused with what to do. Omit for the characterized matrix only.
targetsYesSaved-assessment refs to compare, e.g. ['a1', 'a2']. Must have ≥2 items.
functionNoThe function every target delivers, quantified — e.g. 'packaging for 1 L of beverage'. Needed when the targets are not the same product at the same amount: take it from the user's stated goal, or ask them. Saved with the comparison and shown wherever it is read.
workspaceYesName of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work.

TDQS

A4.4/5.0
Behavior5/5

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

Far exceeds the annotations: it discloses two enforced 400-level preconditions (single LCIA method; single product/amount unless function is stated), that allocation/database/provider differences do not fail but return equivalence warnings, that the result is persisted to a named workspace as primary_ref c<N>, that the matrix is unranked and per-category, and that nw_set only adds already-stored scores. This is a write operation (readOnlyHint=false), and the description makes its side effects and failure modes explicit.

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?

The paragraph is front-loaded with the core action and follows a logical order: what is saved, what a target is, preconditions, non-refused differences, return value, nw_set, skill. It is dense but several clauses paraphrase the schema descriptions, which is mild redundancy.

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 still names the returned artifact (primary_ref c<N>) and describes the matrix's semantics (unranked, per-category, optional nw_set column). Preconditions, failure modes, and prerequisites are all covered, so nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter already carries a detailed inline description (nw_set's refusal behavior, targets' a<N> pattern and ≥2 requirement, function's quantified-goal guidance, workspace naming rationale). The prose largely restates that same material, adding little syntax or format information the schema does not already provide.

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+resource ('Save a comparison across 2–8 saved assessments') and immediately distinguishes itself from lca_run_assessment by noting every run already saves one, so no separate save step exists. An agent can tell exactly what this creates and from what inputs.

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 concrete usage conditions: targets must number 2–8, function is required when targets are not the same product at the same amount, and nw_set requires every target to already carry that set (via lca_apply_nw_set). It points to the assessment_interpretation skill, but never contrasts itself with sibling analysis tools such as lca_analyze_contributions or lca_analyze_sensitivity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_compose_assemblyBuild product system (bill of quantities)AInspect

Build a product system as a bill of quantities of database processes. Each member's amount is sent in one call. Structure only; no LCIA runs. The assembled product is the functional unit; each member is linked to its full upstream when assessed, so the total is a full-upstream figure for the declared scope, with a per-material breakdown. Takes inputs (flat) or stages (a DAG of life-cycle stages), not both. The system is validated against the database; if valid it is saved and system_ref is returned for lca_run_assessment. If invalid, the response lists errors[], missing_required[] and warnings[] and nothing is saved; a corrected call carries the complete system. dry_run: true validates without saving. A tool error, not an invalid result, means the engine is unavailable. Members are p<N> refs; UUIDs are not accepted. lca_compose_linked builds explicit supply edges instead. The product_system_authoring skill (load_skill) documents build order and common failures.

NameRequiredDescriptionDefault
scopeNoSystem boundary. 'cradle_to_gate' (default) = materials through manufacture. 'cradle_to_grave' = ALSO include end-of-life (add disposal/treatment process leaves). 'end_of_life' = treatment of a product at end of life only; the functional unit is the treated product, e.g. '1 kg of end-of-life PV module, treated'. A cradle-to-grave system spans life-cycle phases — prefer `stages` over a flat `inputs` list so each phase gets its own subtotal.
titleYesName for the assembly, e.g. 'Wooden house assembly, 100 m²'.
engineNoName of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine.
inputsNoFLAT bill of quantities: one entry per member. Use for a single cradle-to-gate group of parts with no phases to separate. If the system spans life-cycle phases (materials/transport/use/end-of-life) or is a comparison, prefer `stages` instead — same total, per-phase subtotals. Set this OR `stages`, not both.
stagesNoMULTI-STAGE DAG (preferred for cradle-to-grave, multi-phase, or comparison systems — same total as a flat list, but each phase gets its own subtotal): named stages, each consuming process leaves and/or other stages. Declare stages + what each consumes; DO NOT wire links or name the final product — the compiler derives the edges and the final (sink) stage. Cycles are rejected. Set this OR `inputs`, not both.
dry_runNoWhen true, validate ONLY — return the envelope without persisting (and without a confirmation prompt). Default false: a valid system is built and its s-ref returned in this one call.
workspaceYesName of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work.
output_nameYesName for the assembled product, e.g. 'Wooden house, 100 m²'.
output_unitNoDeclared unit for the assembled product (e.g. 'house', 'm2', 'tonne'). Used as the functional-unit unit in the scope editor.
target_amountNoFunctional-unit amount (default 1.0).
temporal_scopeNoTemporal scope of the system (e.g. '2020-2024', 'Reference year 2022').
cutoff_criteriaNoExplicit cutoff criteria (e.g. 'Mass cutoff 1%; energy cutoff 1%'). Overrides the scope-derived default.
geographical_scopeNoExplicit geographical scope (e.g. 'Switzerland'). Overrides location codes derived from member processes.
functional_unit_descriptionNoFree-text description of the functional unit (e.g. 'One house, 160 m², 50-year service life').

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the write/non-idempotent/non-destructive profile, but the description adds substantial context the annotations cannot: validation against the database before saving, the errors[]/missing_required[]/warnings[] failure contract with 'nothing is saved', the requirement that a corrected call carry the complete system, and the distinction between a tool error (engine unavailable) and an invalid result. Not covered: permissions/auth prerequisites for writing into a workspace.

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 action, then validation and failure semantics, then sibling routing. Every sentence is functional, though the block is dense and the member-ref/UUID rule could be tightened.

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?

For a 14-parameter, no-output-schema, non-idempotent mutation tool, the description covers construction (inputs vs stages), validation/failure contract, the returned system_ref, dry_run, and sign/unit conventions. Nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already carries the per-parameter meaning; the description correctly gets baseline 3. It adds a small amount of non-duplicative constraint ('Members are p<N> refs; UUIDs are not accepted', and the inputs-vs-stages exclusivity), but most parameter guidance is repeated from the schema.

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 first sentence gives a specific verb and resource: 'Build a product system as a bill of quantities of database processes.' It explicitly names the sibling it is not (lca_compose_linked builds explicit supply edges instead), so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing rules: inputs OR stages but not both, with a stated preference for stages when the system spans life-cycle phases; dry_run for validate-only; and lca_run_assessment named as the consumer of system_ref. It even points to the product_system_authoring skill for build order.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_compose_linkedBuild linked product systemAInspect

Build a product system as an explicit process network with supply edges. Every member and supply edge is sent in one call. Structure only; no LCIA runs. For a list of materials and quantities, lca_compose_assembly is simpler. A link may route a waste output to its treatment (consumer_ref outputs it, provider_ref treats it). ref_process_ref is the functional unit's process and also appears in member_process_refs. It is validated against the database; if valid it is saved and system_ref is returned for lca_run_assessment. If invalid, the response lists errors[], missing_required[] and warnings[] and nothing is saved; a corrected call carries the complete system. dry_run: true validates without saving. A tool error (not an invalid result) means the engine is unavailable. Takes p<N>/f<N> refs; UUIDs are not accepted. Requires the user's own writable engine; an unreachable member blocks the build. The product_system_authoring skill (load_skill) covers build order and failures.

NameRequiredDescriptionDefault
linksNoSupply edges connecting members: a supplier's product into a consumer's input, or a consumer's waste output into its treatment.
titleNoHuman title for the authored system.
engineNoName of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine.
dry_runNoWhen true, validate ONLY — return the envelope without persisting (and without a confirmation prompt). Default false: a valid system is built and its s-ref returned in this one call.
workspaceYesName of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work.
ref_flow_refNo`f<N>` ref of the reference product flow (a product OUTPUT of the ref process). Omitted, it is the reference process's own quantitative reference.
target_amountNoFunctional-unit amount (default 1.0).
temporal_scopeNoTemporal scope of the system (e.g. '2020-2024', 'Reference year 2022').
cutoff_criteriaNoExplicit cutoff criteria (e.g. 'Mass cutoff 1%; energy cutoff 1%'). Overrides the scope-derived default.
ref_process_refYes`p<N>` ref of the reference process (the functional unit). It must also be listed in `member_process_refs`.
target_unit_refNoThe functional unit's unit, when it is NOT the reference exchange's own unit (which is derived for you). A unit NAME as the engine spells it ('t', 'kg', 'MJ'), resolved against the reference flow's unit group — NOT a ref: there is no `u<N>` kind, and an f/p/s ref here is rejected.
geographical_scopeNoExplicit geographical scope (e.g. 'Switzerland'). Overrides location codes derived from member processes.
member_process_refsYes`p<N>` refs of every process in the system — include the reference process.
functional_unit_descriptionNoFree-text description of the functional unit (e.g. 'One house, 160 m², 50-year service life').

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare write/non-idempotent/non-open-world; the description goes much further, disclosing atomicity ('Every member and supply edge is sent in one call', corrected calls must resend the complete system), validation semantics (validated against the DB; on failure nothing is saved and errors[]/missing_required[]/warnings[] are returned), dry_run behavior, that a tool error means the engine is unavailable, that an unreachable member blocks the build, and that the user's own writable engine is required.

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?

Dense but front-loaded: the core purpose and the 'structure only' scope lead, followed by routing, semantics, and failure behavior. It is long, and the middle sentences about link routing and ref_process_ref sit far from the corresponding schema fields, but for a 14-parameter tool nearly every sentence carries information.

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?

No output schema exists, yet the description specifies the return contract: system_ref on success, and errors[]/missing_required[]/warnings[] on invalid input, plus the dry_run envelope. Combined with the validation and permission constraints, an agent has everything needed 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%, so the baseline is 3, but the description adds real meaning beyond it: the waste-routing semantics of consumer_ref/provider_ref, that ref_process_ref must also appear in member_process_refs, that target_unit_ref is a unit name and not a ref (f/p/s refs rejected), and that p<N>/f<N> refs are required with UUIDs not accepted.

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 ('Build a product system as an explicit process network with supply edges') and immediately scopes it ('Structure only; no LCIA runs'). It differentiates from the sibling lca_compose_assembly by naming it and the condition that selects it.

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?

Explicitly routes the agent: use lca_compose_assembly for a flat list of materials/quantities, and lca_run_assessment to run LCIA on the returned system_ref. It also points to the product_system_authoring skill. It does not, however, address when to use this versus lca_edit_linked for modifying an existing system.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_create_workspaceCreate workspaceAInspect

Create a workspace and return the name later calls pass as workspace. The workspace is the user's own, and later calls work in it by passing that name. By default it creates a new, empty workspace and makes it the connection's default — the workspace a call naming none reads, shared by every conversation on the connection; tools that save still take workspace on every call. With adopt_sandbox: true, the default workspace, when it is a sandbox created for this connection, becomes that workspace instead: renamed to name and made an ordinary workspace, with everything already saved in it kept in place and every workspace ref still valid; a later connection starts in a new sandbox. Either way the workspace counts toward the account's workspace limit and appears in the Aevia app. A name the user already has is refused rather than reused; an existing workspace is used by passing its name as workspace. goal_statement records the study's goal (ISO 14040 §4.2).

NameRequiredDescriptionDefault
nameYesName for the workspace. Must differ from every workspace the user already has (matched exactly, including case). With `adopt_sandbox`, the sandbox's current name is also accepted.
descriptionNoShort free-text description of the workspace.
adopt_sandboxNoWhen true, the connection's default workspace, when it is a sandbox, becomes the new workspace, keeping everything already saved there and every workspace ref. Refused when the default is not a sandbox. Default false: a new, empty workspace.
goal_statementNoThe study's goal (ISO 14040 §4.2): intended application, reasons, audience, and whether comparative assertions are intended. Shown with the workspace in the Aevia app.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only cover the safety profile (non-read-only, non-idempotent, non-destructive). The description adds substantial context beyond them: the workspace counts toward the account limit, appears in the Aevia app, duplicate names are refused rather than reused, adoption renames and preserves the sandbox contents with refs still valid, and a later connection starts fresh in a new sandbox.

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

Conciseness3/5

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

Front-loaded with the outcome, but the prose is long-winded and redundant, restating the workspace-name-passing idea twice ('return the name later calls pass as `workspace`' and 'later calls work in it by passing that name'). Several clauses could be tightened without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 correctly states the return value (the workspace name). It covers side effects, limits, and adoption semantics thoroughly, though the interaction between the connection's default workspace and per-call `workspace` passing remains slightly tangled.

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%, so the schema already defines each parameter; a baseline of 3 would be defensible. The description nonetheless adds meaning: why `adopt_sandbox` matters behaviorally, that `workspace` name is the handle future calls use, and the ISO 14040 §4.2 framing for `goal_statement`.

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 (create a workspace) and goes further by naming the return value that later calls pass as `workspace`. It implicitly separates itself from sibling lca_switch_workspace by noting an existing workspace is used by passing its name instead.

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 clear conditions for the two modes: default creates a new empty workspace and makes it the connection default, while `adopt_sandbox: true` converts an existing sandbox. It also states the refusal case (duplicate name) and how to use an existing workspace. It stops short of naming sibling tools like lca_switch_workspace explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_deleteDelete saved objectA
Destructive
Inspect

Delete a saved system, assessment, comparison, analysis or report. ref is an s<N> system, a<N> assessment, c<N> comparison, b<N> contribution analysis, v<N> sensitivity analysis or r<N> report in the workspace named by workspace. The deletion cannot be undone. A system takes its assessments with it; they leave any comparison they belong to. An assessment leaves its system, its comparisons and its analyses (kept, detached). A comparison takes only itself. Reports citing a deleted object are kept, but those citations stop resolving. Without confirm: true the call returns a preview listing what goes by ref, and deletes nothing. For an s<N>, its copy in the openLCA engine is kept unless delete_engine_copy: true, which deletes it only when Aevia created it and the engine is writable; that changes the openLCA database, so it needs the Execute access level. A process or flow authored into an engine is deleted by engine_delete.

NameRequiredDescriptionDefault
refYesThe saved object to delete: `s<N>` system, `a<N>` assessment, `c<N>` comparison, `b<N>` contribution analysis, `v<N>` sensitivity analysis or `r<N>` report.
confirmNoDelete it. Without it the call returns a preview of everything the delete takes with it, and deletes nothing.
workspaceYesName of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work.
delete_engine_copyNo`s<N>` only: also delete the system's copy in its openLCA engine — honoured only when Aevia created that copy and the engine is writable. Kept by default. Needs the Execute access level (it changes the openLCA database); below it the call is refused.

TDQS

A4.6/5.0
Behavior5/5

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

Goes far beyond the annotations (destructiveHint=true, idempotentHint=false) by spelling out irreversibility and the precise cascade per object type: a system absorbs its assessments, assessments detach from comparisons, reports survive with dead citations. It also discloses the Execute access-level requirement and the Aevia-authored/writable-engine preconditions for `delete_engine_copy`.

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 verb and ref grammar, and the consequence sentences are information-dense rather than padded. It runs long and repeats a few schema descriptions almost verbatim, so it is efficient but not maximally tight.

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?

For a destructive, non-idempotent tool with no output schema, the description covers everything needed: what is removed, what is preserved, what the no-confirm call returns, and the privilege level required. Nothing an agent needs to call this safely is missing.

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%, so the 3-baseline applies, and the description genuinely adds meaning by tying each `ref` prefix to a specific deletion cascade and by explaining that `delete_engine_copy` is honoured only under two conditions. Some content (confirm preview wording, ref prefix list) duplicates the schema verbatim, capping this below 5.

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?

Opens with a specific verb+resource ("Delete a saved system, assessment, comparison, analysis or report") and enumerates the exact object namespace via the `s<N>`/`a<N>`/`c<N>`/`b<N>`/`v<N>`/`r<N>` prefix scheme. An agent can distinguish this from lca_get or engine_delete without opening any schema.

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 clear operating context: without `confirm: true` the call is a no-op preview, and a process or flow authored into an engine must go through `engine_delete` instead. It names the alternative tool and the condition that routes to it, but offers no explicit exclusion guidance for the objects it does own (e.g., how to inspect before deleting).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_edit_assemblyEdit product systemA
Destructive
Inspect

Patch a saved composed (bill-of-materials) system (s<N>). Ops: replace_provider (swap a member everywhere it is used), set_target_amount (rescale the functional unit), set_title (rename), add_member / remove_member, set_member_amount (rescale an existing member), add_stage / remove_stage (grow or shrink the stage DAG, e.g. an amortization layer; it must stay acyclic with one sink). mode (default edit): edit patches in place, keeping the same s<N>; fork derives a new s<M>. A drift-tracked mirror is forked automatically on edit, with a warning. Each member is linked cradle-to-gate independently when assessed, so swaps and additions bring their own background; only unit compatibility is checked, so a swap can change a dataset's geography, technology and reference year. Members are p<N> refs; UUIDs are not accepted. Linked and single-process systems are edited with lca_edit_linked. The returned ref can be assessed with lca_run_assessment.

NameRequiredDescriptionDefault
opsYesOrdered list of edits to apply in one call.
refYesSaved product-system ref `s<N>` to patch.
modeNo`edit` (default) → edit the system IN PLACE, appending a new content version and keeping the same `s<N>` (self-contained systems; a drift-tracked mirror auto-forks to a new `s<M>` with a warning, since it can't be mutated in place). `fork` → always derive a NEW `s<M>`, leaving the baseline `s<N>` untouched.edit
workspaceYesName of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work.
base_version_seqNoREQUIRED here: the system's current content `version_seq`, as `lca_get s<N>` reports it — the version you computed this edit against. Rejected (409) if the system has moved on since, and nothing is changed. Re-read the system between edits: a successful in-place edit advances the version. (Kept optional in the schema so an omission gets the backend's instructive 422 rather than a bare validation error.)

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the destructiveHint/readOnlyHint annotations: discloses the drift-tracked mirror auto-fork warning, that only unit compatibility is checked on swaps (geography/technology/year can change), that each member is linked cradle-to-gate independently, the negative-amount sign-flip semantics, and the 409 rejection tied to base_version_seq. This is rich operational 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?

Dense but front-loaded: the verb, op list, mode semantics, and ref-routing all arrive before the finer behavioral notes. It is long for a description, yet nearly every clause carries distinct operational information with little redundancy.

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?

No output schema exists, and the description closes that loop by naming the returned ref and the tool that consumes it (lca_run_assessment). Combined with mode, versioning, mirror-drift, and unit-handling details, an agent has everything needed to call this 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%, so the baseline is 3, but the description adds meaning the schema does not: members are `p<N>` refs and UUIDs are rejected, and the stage DAG must remain acyclic with a single sink. These constraints clarify how ops may be combined, pushing above baseline.

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 ('Patch a saved composed (bill-of-materials) system') and enumerates every supported op with parenthetical glosses. It explicitly names the sibling it is not ('Linked and single-process systems are edited with lca_edit_linked'), so an agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use and when-not-to-use guidance: names lca_edit_linked as the alternative for linked/single-process systems, distinguishes `mode=edit` (in place, with auto-fork of drift-tracked mirrors) from `mode=fork` (new `s<M>`), and points to lca_run_assessment for the returned ref.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_edit_linkedEdit linked product systemA
Destructive
Inspect

Patch a saved linked or single-process system (s<N>). A linked system is an explicit process network. Graph ops: add_link (wire a supplier onto a consumer input, or a waste output onto its treatment; the provider joins automatically), remove_link (drop matching edges; orphans are pruned), rewire_link (repoint one edge). Also replace_provider (swap a supplier on every edge it feeds; a bare unit_process swap warns: its background is unwired), set_target_amount and set_title. A swap checks only unit compatibility, so geography, technology and vintage can change. lca_get(ref='s<N>', form='authored') shows every edge and the consumer_input_index needed when a consumer has one flow on several exchanges. A link's amount only validates. mode edit (default) patches in place; fork derives a new s<M>; a mirror is forked automatically. A single-process system takes only the two setters. Composed systems use lca_edit_assembly. Takes p<N>/f<N> refs; UUIDs are not accepted.

NameRequiredDescriptionDefault
opsYesOrdered list of edits to apply in one call.
refYesSaved product-system ref `s<N>` to patch.
modeNo`edit` (default) → edit the system IN PLACE, appending a new content version and keeping the same `s<N>` (self-contained systems; a drift-tracked mirror auto-forks to a new `s<M>` with a warning, since it can't be mutated in place). `fork` → always derive a NEW `s<M>`, leaving the baseline `s<N>` untouched.edit
workspaceYesName of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work.
base_version_seqNoREQUIRED here: the system's current content `version_seq`, as `lca_get s<N>` reports it — the version you computed this edit against. Rejected (409) if the system has moved on since, and nothing is changed. Re-read the system between edits: a successful in-place edit advances the version. (Kept optional in the schema so an omission gets the backend's instructive 422 rather than a bare validation error.)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare mutation/destructive/non-idempotent; the description adds substantial context beyond that: in-place edits append a content version, mirrors auto-fork with a warning, orphans are pruned on removal, a provider swap checks only unit compatibility so geography/technology/vintage can change, and a bare `unit_process` swap warns its background is unwired.

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 action, then dense semicolon-separated clauses. Nearly every sentence carries distinct information (ops semantics, mode behavior, ref format), though the wall-of-text style is slightly heavy even for a tool this complex.

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?

For a tool with a nested `ops` array, six op types, and no output schema, the description is remarkably complete: it enumerates each op, the mode semantics, ref format constraints, the authored-view workflow, and the single-process caveat. Nothing essential for correct invocation is missing.

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%, so the baseline is 3, but the description adds real meaning: refs take `p<N>`/`f<N>` and 'UUIDs are not accepted', `amount` on a link is validation-only, and `consumer_input_index` is required when a consumer has 2+ exchanges of a flow. These clarify usage beyond the schema text.

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 ('Patch') and resource (a saved linked or single-process `s<N>` system), and explicitly distinguishes itself from `lca_edit_assembly` for composed systems and notes the single-process restriction. An agent can tell it apart from siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use routing: 'A single-process system takes only the two setters' and 'Composed systems use `lca_edit_assembly`'. It also points to `lca_get(ref='s<N>', form='authored')` as the way to discover edges and the required `consumer_input_index`, and explains when `fork` vs `edit` applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_getGet workspace itemA
Read-onlyIdempotent
Inspect

Read a saved workspace object by ref, or list systems, results or workspaces. Takes exactly one of ref (one object's detail) or kind (a list). A ref is read in the workspace named by workspace, which it requires: each workspace numbers its objects from 1. A kind list reads that workspace, else this connection's default. Refs: s/a/c/b/v/r<N> → system / assessment / comparison / contribution analysis / sensitivity analysis / report. An s<N> read also states the system's kind and its edit tool; form='authored' returns the authored shape the compose and edit tools accept. Kinds: 'systems' / 'assessments' / 'comparisons' / 'contribution_analyses' / 'sensitivity_analyses' / 'reports' return paginated lists of this workspace (filters: query, system_ref, method, assessment_status); 'workspaces' / 'engines' list those available, marking the default. UUIDs are not accepted.

NameRequiredDescriptionDefault
refNoSingle-entity ref: `s`/`a`/`c`/`b`/`v`/`r<N>`. Mutually exclusive with `kind`.
formNoref='s<N>' only. 'snapshot' (default) is the structural read. 'authored' returns the system lifted back to the AUTHORED form — the shape `lca_compose_assembly` / `lca_compose_linked` speak, tagged with its `kind`, carrying a multi-stage bill of quantities' stage DAG unflattened and a linked system's `links[]` (neither of which the snapshot has). Read this before editing a system you did not just author.
kindNoCollection mode. Mutually exclusive with `ref`. 'workspaces' and 'engines' are the odd ones out: they list the WORKSPACES / ENGINE DATABASES available to you rather than the contents of the current one.
limitNo
queryNoFree-text match on name/description (case-insensitive).
methodNokind='assessments': substring match on method_name.
offsetNo
workspaceNoName of the workspace to read, as `lca_get(kind='workspaces')` lists it. Required with `ref`: each workspace numbers its objects from 1, so a ref is read in the workspace it came from. Omitted with `kind`: this connection's default workspace, which every conversation on the connection shares and which is often an empty sandbox.
system_refNokind='assessments': filter to assessments on a single system.
assessment_statusNokind='assessments': filter by status.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description's job is narrower; it still adds real behavioral context: refs are numbered per-workspace and UUIDs are rejected, 'workspaces'/'engines' list globally rather than per-workspace, and the default workspace is shared across the connection and often an empty sandbox. It does not describe pagination mechanics or error behavior when both ref and kind are omitted.

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?

The dual-mode purpose is front-loaded in the opening clause, and the following sentences are densely informative rather than redundant. It is long and run-on in places (the ref-prefix mapping is packed inline), but nearly every clause carries load-bearing constraint or identifier information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, dual-mode read tool with no output schema, the description covers the ref/kind split, ref syntax, workspace resolution, filter options, and the authored-vs-snapshot distinction. What remains thin is the return shape of snapshot reads and pagination behavior, though the annotations and schema carry much of the rest.

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?

With 80% schema description coverage the baseline is 3, but the description goes further by mapping ref prefixes to their meanings (s/a/c/b/v/r<N> → system/assessment/comparison/contribution analysis/sensitivity analysis/report) and enumerating the list filters (query, system_ref, method, assessment_status), which the schema only partially documents. It also clarifies that ref/kind are mutually exclusive, adding constraint semantics absent from the flat schema.

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 first sentence states a specific verb and resource with both operating modes: 'Read a saved workspace object by ref, or list systems, results or workspaces.' It is immediately distinguishable from siblings like lca_delete, lca_compose_assembly, or lca_get_task_status because it names exactly what is read and what is listed.

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 a clear selection rule between the two modes ('Takes exactly one of `ref` ... or `kind`'), states that `ref` requires `workspace` while `kind` falls back to the connection default, and notes the auth/form caveat via 'Read this before editing a system you did not just author' in the schema. It stops short of explicitly naming alternative sibling tools (e.g. lca_edit_assembly) as the route for modification.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_get_task_statusCheck task statusA
Read-onlyIdempotent
Inspect

Poll a long-running call that returned a task_id instead of a result. Takes that id and waits up to 45 seconds for the task to finish. Returns status: 'pending' (still running after that wait; calling again waits again), 'success' (result holds the tool's result text and its ref; the saved object is read with lca_get) or 'error' (with can_retry). Only calls that returned a task_id have one; a tool that returned its result directly has nothing to poll. A task_id is readable only by the session that started it, and only for a day.

NameRequiredDescriptionDefault
task_idYesThe task id a previous tool call returned, e.g. `df_a1b2…`.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds rich behavior beyond that: a 45-second bounded wait, re-calling extends the wait, the three status outcomes with their payloads, the `can_retry` flag on error, and the session-scoped, one-day task_id lifetime.

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?

Four dense sentences, front-loaded with the action and the wait semantics, then the return contract, then the eligibility and lifetime caveats. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates well by enumerating status values and their payloads. A minor gap remains around whether/how `result` refs should be passed back to `lca_get`, but overall an agent has what it needs.

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% and the schema already documents the id format, so baseline would be 3; the description adds genuine semantic value by explaining where the id originates (a previous tool call that returned a task_id) and its session/TTL constraints.

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+resource: polls a long-running call identified by a `task_id` that was returned instead of a result. Clearly separable from siblings like `lca_get`, which it explicitly routes to for reading the saved object.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both the when ('only calls that returned a `task_id` have one') and the when-not ('a tool that returned its result directly has nothing to poll'), plus names `lca_get` as the alternative for retrieving the finished object.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_import_projectImport openLCA projectAInspect

Import an openLCA project: assess each variant and save one comparison. project is the project's name as engine_search(kind='project') lists it, or a unique part of it, in the database named by engine, else this connection's default, which must be writable. Each enabled variant's product system is imported into workspace as an s<N> (one already there is refreshed) and assessed once as an a<N> with the variant's amount, unit and allocation and the project's method and normalization/weighting set; the variants are saved as one comparison c<N>, returned as primary_ref. openLCA's API cannot calculate a project; this reproduces it variant by variant, each at its own amount (functional equivalence is not checked). Without confirm: true the call returns a preview and starts nothing. A run within 45 seconds returns its result; a longer one returns a task_id for lca_get_task_status. Refused: fewer than 2 or more than 8 enabled variants, or parameter redefinitions. Disabled variants are skipped.

NameRequiredDescriptionDefault
engineNoName of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine.
confirmNoRun the import: the systems, one assessment per variant and the comparison. Without it the call returns a preview of what would be imported and starts nothing.
projectYesThe openLCA project's name as `engine_search(kind='project')` lists it (backticks optional), or a unique part of it.
workspaceYesName of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work.

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: preview-only without confirm, the ~45s synchronous window versus task_id escalation to lca_get_task_status, the s<N>/a<N>/c<N> materialization and refresh semantics, per-variant functional-equivalence caveat, and who is skipped or refused. The non-idempotent, non-destructive hints are neither repeated nor contradicted.

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 purpose, then constraints, then refusal conditions — a sensible order for a complex tool. It is dense and parenthetical-heavy, but nearly every clause carries a fact an agent needs; only minor tightening is possible.

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?

For a mutating multi-step import with no output schema, the description covers everything material: return value (primary_ref), async escape hatch, confirmation semantics, failure modes, and skip behavior. An agent can call it correctly without further probing.

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 already 100%, so the baseline is 3, but the description still contributes: project may be a unique substring, the engine default must be writable, and the workspace/element naming conventions (s<N>, a<N>, c<N>) clarify what the parameters actually produce. It does not restate syntax the schema omits nothing of.

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?

Opens with a precise verb+resource ('Import an openLCA project') and immediately states the composite outcome: assess each enabled variant and save one comparison. The scope (project variants, not a single product system) cleanly distinguishes it from the sibling lca_import_system.

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 operational context: it names engine_search(kind='project') and lca_get(kind='workspaces') for resolving parameters, states the confirm gate, and lists explicit refusal conditions (<2 or >8 enabled variants, parameter redefinitions). It never explicitly contrasts itself with lca_import_system or lca_run_assessment, so the alternative-selection guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_import_systemImport product systemA
Idempotent
Inspect

Import an engine product system (e<N>) into a workspace as a saved system. The e<N> from engine_search is imported from its own database; the saved copy gets a stable s<N>. Captures the system's full definition server-side (no need to read its graph) and mirrors it — the copy tracks the engine original for drift and is immediately assessable (lca_run_assessment s<N>) and comparable. Idempotent: re-importing the same engine system returns the existing s<N>. Only accepts e<N> (engine systems) — a workspace s<N> is already imported, and a process p<N> is not a system. To RESTRUCTURE it: read lca_get(ref='s<N>', form='authored'), then either targeted lca_edit_linked ops (add_link/remove_link/rewire_link/replace_provider/set_target_amount/set_title — a new version of the same s<N>) or lca_compose_linked (a new s<M> from the restructured topology). The mirror stays fully assessable/comparable. On this rail lca_edit_linked also needs the base_version_seq lca_get reports.

NameRequiredDescriptionDefault
refYesEngine product-system ref `e<N>` from `engine_search(kind='system')`.
modeNo`full` (default) mirrors the full definition — assessable + editable. `link_only` stores just a reference that calculates against the live engine (advanced; can't be reopened for editing).full
confirmNoOver the Aevia MCP connector this call PREVIEWS by default — it reports what would be imported and writes nothing. Read the preview, then call again with `confirm:true` to apply. Ignored in the Aevia app, where the confirmation dialog plays this role.
workspaceYesName of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work.

TDQS

A4.5/5.0
Behavior4/5

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

Adds real behavior beyond the annotations: server-side capture of the full definition (no graph read needed), drift tracking against the engine original, and the `mode=link_only` consequence (calculates live but cannot be reopened for editing). Idempotency is restated from the annotation and no permission/auth context is given, keeping it short of a 5.

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

Conciseness3/5

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

Purpose and constraints are front-loaded, but the tail paragraph on restructuring steps is post-import workflow that belongs with `lca_edit_linked`/`lca_compose_linked`. It also repeats the assessable/comparable claim twice ('immediately assessable and comparable' and 'The mirror stays fully assessable/comparable').

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?

For a 4-param import with no output schema, the description covers the returned stable `s<N>`, idempotent behavior, mode tradeoffs, and the confirm preview flow. An agent has everything needed 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%, so the parameters are already documented, but the description adds meaning the schema lacks — why only `e<N>` is valid for `ref`, and the editability tradeoff behind `mode` (full vs link_only). The `confirm` preview flow is explained but largely mirrors the schema text.

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 precise verb+resource: import an engine product system `e<N>` into a workspace as a saved `s<N>`. It distinguishes itself from siblings by spelling out the accepted ref type and by routing to `lca_run_assessment`, `lca_edit_linked`, and `lca_compose_linked` for downstream work.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when this is the right tool and what it rejects: only `e<N>` is accepted, a workspace `s<N>` is already imported, and a `p<N>` is not a system. It also names the concrete alternatives for restructure via `lca_edit_linked`/`lca_compose_linked`, so selection is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_run_assessmentRun impact assessmentAInspect

Run LCIA on a target and save the result as a durable assessment (a<N>). ref is a saved workspace system (s<N>), or an engine-catalog process (p<N>) or system (e<N>) from engine_search; it is calculated on the database it belongs to. Runs the calculation with the given parameters and returns the impact result; a run that finishes within 45 seconds returns its result directly, and a longer one returns a task_id for lca_get_task_status; the assessment is always saved into the workspace named by workspace, with no separate save step. A catalog e<N> is assessed as a one-off result and not imported as a tracked system (lca_import_system does that). nw_set names one of the method's normalization/weighting sets, applied after the calculation for a single score. lca_analyze_contributions breaks a result down. The assessment_interpretation skill (load_skill) documents what a result means and comparison discipline.

NameRequiredDescriptionDefault
refYesTarget ref: a saved system `s<N>`, or a catalog process `p<N>` / engine system `e<N>` from `engine_search`.
amountNoHow many of the target's DECLARED functional units to assess (N). The calc scales by N x the declared amount, the SAME way for every target kind — a saved `s<N>` (composed, linked, or still mirrored to its remote openLCA copy), an imported `e<N>`, or a catalog process `p<N>`. Omit it to assess exactly one declared functional unit (a catalog `p<N>`/`e<N>` records no declared FU, so its declared amount is 1 reference unit and N is the whole scalar). Must be > 0 and finite.
nw_setNoName of one of the method's normalization/weighting sets (e.g. 'EF 3.0 normalization and weighting set'), applied after the calculation: adds normalized and weighted results and a single score beside the per-category table. Omit for characterized results only; the result lists the sets the method offers.
workspaceYesName of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work.
allocationNoAllocation for multi-output processes. Applies to EVERY target kind — a saved `s<N>` (composed or linked) as much as a catalog `p<N>`/`e<N>`. Omit it (or pass `as_declared`) to apply each dataset's OWN declared allocation procedure, resolved per process by openLCA — the same thing openLCA desktop does, and the default here. Naming any other value overrides every dataset in the system, which is a methodological choice you must report.
method_preferenceNoPreferred LCIA method (e.g., 'ReCiPe', 'CML'). Default: ReCiPe 2016.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses the sync/async split (runs under 45s return the result directly, longer runs return a `task_id` for `lca_get_task_status`) and the persistence semantics (the assessment is always saved into `workspace` with no separate save step). These are the behaviors an agent most needs and none are in the structured fields.

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 action and outcome, then the ref taxonomy, then async behavior, then sibling routing — a sensible priority order with no filler. The sentences are long and clause-heavy (semicolon-chained), which costs a little readability.

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?

For a complex 6-parameter mutation-style tool with no output schema, the description covers the return shape (impact result or `task_id`), persistence, target kinds, and where to go for interpretation via the `assessment_interpretation` skill. Nothing an agent needs to invoke it correctly is missing.

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%, so the baseline is 3, but the description adds real meaning beyond the schema: the ref 'is calculated on the database it belongs to', `nw_set` is applied after the calculation for a single score, and the assessment lands in the named workspace. The `amount` and `allocation` parameters are left to the schema, but the added ref/nw_set semantics justify a bump.

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?

Opens with a specific verb+resource+outcome: 'Run LCIA on a target and save the result as a durable assessment (`a<N>`)'. It clearly separates this from siblings like `lca_import_system` (one-off vs tracked system) and `lca_analyze_contributions` (breakdown, not run).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states which ref kinds are valid (`s<N>`, `p<N>`, `e<N>` from `engine_search`) and when to use alternatives: 'a catalog `e<N>` is assessed as a one-off result and not imported as a tracked system (`lca_import_system` does that)' and '`lca_analyze_contributions` breaks a result down'. It even routes agents to `load_skill` for interpretation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_switch_engineSwitch databaseA
Idempotent
Inspect

Set this connection's default engine database. The default is the database browsing and composing use when a call names no engine. The default is shared by every conversation on the connection. name is the engine name as shown, matched case-insensitively (a code span, accepted with or without its backticks). Nothing saved moves: no s<N>/a<N>/c<N>/b<N>/v<N> ref is affected, and saved systems keep solving on their own engine. Catalog refs (p<N>, e<N>, f<N>, m<N>) stay bound to the database that minted them: reading one still works, since engine_get and lca_run_assessment follow the ref back to its own database, but lca_compose_* and lca_edit_* refuse a member ref from another database, so members for a new system come from searches run after the switch.

NameRequiredDescriptionDefault
nameYesName of the engine connection to bind to, copied verbatim from any result that named it — the `# Engines` listing or a search result's header (matched case-insensitively; the surrounding backticks are optional).

TDQS

A4.4/5.0
Behavior5/5

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

Annotations declare mutation (readOnlyHint=false), idempotency, and non-destructiveness; the description substantiates these with concrete behavior: nothing saved moves, no s/a/c/b/v refs are affected, and catalog refs stay bound to their minting database, with lca_compose_*/lca_edit_* refusing cross-database member refs. This is exactly the kind of beyond-annotation detail that earns a 5.

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?

Purpose is front-loaded in the first sentence, and the subsequent sentences on ref behavior all earn their place. It is dense and fairly long, but no sentence is filler, so it stays near the top of the range.

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?

For a single-parameter mutation tool with no output schema, the description covers the non-obvious consequences (shared default, unaffected saved systems, ref binding, compose/edit refusals) thoroughly enough that an agent needs nothing more to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already documents case-insensitive matching, optional backticks, and verbatim copying. The description's 'as shown, matched case-insensitively' note largely restates the schema, so the baseline 3 applies.

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: 'Set this connection's default engine database.' It further defines the scope of that default and implicitly distinguishes itself from the sibling lca_switch_workspace by operating on the engine rather than the workspace.

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?

Explains the context in which the default matters (browsing/composing calls that name no engine) and the downstream conditions that follow a switch, e.g. members for a new system must come from searches run afterward. It does not state explicit when-not-to-use or name an alternative switch tool directly, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lca_switch_workspaceSwitch workspaceA
Idempotent
Inspect

Set this connection's default workspace. The default is the workspace a call that names no workspace reads. name is the workspace name as lca_get(kind='workspaces') shows it (a code span; backticks optional). The default is shared by every conversation on the connection, so another conversation can move it too; tools that save take workspace on every call and are unaffected by it. Workspace refs (s<N>, a<N>, c<N>, b<N>, v<N>) are per-workspace ordinals, so on a call naming no workspace the same number now names an object in the new default; each still names its own object on a call that names its workspace. Engine-catalog refs (p<N>, e<N>, f<N>, m<N>) are unaffected.

NameRequiredDescriptionDefault
nameYesName of the workspace to work in, copied verbatim from the `# Workspaces` listing. Names are rendered as code spans and never escaped, so what you read is what resolves; the surrounding backticks are optional. Matched exactly, INCLUDING case — a real workspace name is unique per user, and that uniqueness is case-sensitive.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare it is a non-destructive, idempotent, non-read-only mutation; the description adds that the default is shared across all conversations on the connection and can be moved by another conversation. It also warns that workspace refs are per-workspace ordinals whose meaning shifts after the switch, a consequence an agent could not infer from annotations.

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 action and the definition of 'default', and every sentence carries real information. The ref-ordinal passage is dense but earns its place by explaining changed resolution semantics; still, the paragraph is long enough to test an agent's parsing.

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?

For a one-parameter, annotation-covered, no-output-schema state mutation, the description covers the operation's scope, sharing behavior, and downstream reference-resolution effects. Nothing an agent needs to call it correctly is missing.

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%, so the baseline is 3, but the description adds meaning beyond the schema: the name is what lca_get(kind='workspaces') shows, backticks are optional, and the value's effect is the connection-wide default. The case-sensitivity nuance is already in the schema, so credit is partial.

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 ('Set this connection's default workspace') and immediately defines what 'default' means, which is the crux of the tool. An agent can distinguish it from lca_create_workspace and lca_switch_engine without opening any schema.

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?

Explains clearly when the setting matters ('the workspace a call that names no workspace reads') and when it does not ('tools that save take `workspace` on every call and are unaffected'), which is real routing guidance. It stops short of naming sibling tools as alternatives, but the conditional framing is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_skillLoad workflow guideA
Read-onlyIdempotent
Inspect

How this Aevia connection works, plus playbooks for results, reports, systems. Returns a skill's playbook as the result; takes no action itself. A playbook is step-by-step guidance for a multi-step job, too long for a description. connector_guide covers how this connection works: workspaces, refs, finding data, the library, building, calculating and failures. assessment_interpretation covers reading and comparing results: what an indicator result is and is not, a figure's anchors, functional-unit equivalence and comparison discipline. report_writing covers writing results up as a document, from a screening note to an ISO 14044 study. product_system_authoring covers building a new product system with lca_compose_assembly / lca_compose_linked: build order, which of the two fits, and failure modes. A loaded playbook stays in context; one load per session suffices. Skills are gated on what the token can call; an unavailable request returns the available list.

NameRequiredDescriptionDefault
skill_idYesId of the skill to load, e.g. `product_system_authoring`. An unknown or ungated id returns the list of skills available to this session.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive/closed-world, so the description correctly focuses on what annotations cannot say: the tool takes no action, a loaded playbook persists in context, and skills are token-gated with an explicit fallback ('an unavailable request returns the available list'). That last point is valuable error-behavior disclosure, though it does not describe the playbook's size or format.

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 behavior and result semantics before the enumeration. The per-skill sentences are the value-add rather than filler, though the block is long enough that it could be tightened slightly.

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 return-value burden and does so: it states the result is a playbook and that an unknown/gated id returns the available list. Combined with the routing detail and session guidance, nothing an agent needs to call this correctly is missing.

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% so the baseline is 3, but the schema defines no enum and the description compensates by naming the concrete valid skill_ids and their subject matter. This adds real selection value beyond the schema's single generic string description.

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 ('Returns a skill's playbook as the result') with an explicit scope disclaimer ('takes no action itself'). The enumeration of skill_ids makes it unmistakable from siblings like knowledge_get_full_document or engine_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Goes well beyond 'when to use': it routes the agent to the correct skill_id by describing what each covers ('connector_guide covers how this connection works', 'assessment_interpretation covers reading and comparing results'). It also gives the operational rule 'one load per session suffices'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updates
    • Changedengine_get2 fields changed
      • changedInput schema / properties / section / description
        Previous value: -"Show only the inputs (what the process uses) or only the outputs (what it makes or emits), one page at a time. Leave unset for a short summary of both. Processes only."New value: +"Processes: show only the inputs (what the process uses) or only the outputs (what it makes or emits), one page at a time; leave unset for a short summary of both. Methods: `factors` adds the characterization factors of each impact category (heavy; rarely needed)."
      • changedInput schema / properties / section / enum
        Previous value: -[
        -  "inputs",
        -  "outputs"
        -]New value: +[
        +  "inputs",
        +  "outputs",
        +  "factors"
        +]
    • Removedengine_list_methods
    • Changedengine_search2 fields changed
      • changedInput schema / properties / kind / description
        Previous value: -"What to search for. 'all' queries processes, systems, and flows in parallel. 'project' lists openLCA projects — a project is addressed by its name, which `lca_import_project` takes."New value: +"What to search for. 'all' queries processes, systems, and flows in parallel. 'project' lists openLCA projects — a project is addressed by its name, which `lca_import_project` takes. 'method' lists the LCIA methods whose name contains every word of `query` (`*` lists all); not part of 'all'."
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "process",
        -  "system",
        -  "flow",
        -  "project",
        -  "all"
        -]New value: +[
        +  "process",
        +  "system",
        +  "flow",
        +  "project",
        +  "method",
        +  "all"
        +]
    • Changedlca_analyze_contributions7 fields changed
      • changedInput schema / properties / amount / description
        Previous value: -"`system_ref` only: how many of the system's DECLARED functional units to analyse (N). The solve scales by N x the declared amount, the same way `lca_run_assessment` does. Omit to analyse at the system's declared functional unit (N=1); an explicit value overrides. Ignored with `assessment_ref`, which inherits its functional unit — and ignores `amount` entirely — from the saved assessment."New value: +"`s<N>` only: how many of the system's DECLARED functional units to analyse (N). The solve scales by N x the declared amount, the same way `lca_run_assessment` does. Omit to analyse at the system's declared functional unit (N=1); an explicit value overrides. Ignored with an `a<N>`, which inherits its functional unit — and ignores `amount` entirely — from the saved assessment."
      • removedInput schema / properties / assessment_ref
        Removed value: -{
        -  "description": "Saved-assessment ref in the form `a<N>` (e.g. `a3`) — analyse the setup this assessment captured (its system, method and functional unit). Mutually exclusive with `system_ref`. List current assessments with `lca_get(kind='assessments')` to pick the right one — never pass UUIDs.",
        -  "pattern": "^a\\d+$",
        -  "type": "string"
        -}
      • changedInput schema / properties / method / description
        Previous value: -"`system_ref` only: preferred LCIA method — fuzzy-matched (substring) against the methods in the connected database; free text is accepted. Defaults to the same house preference `lca_run_assessment` uses. Ignored with `assessment_ref`, which inherits its method from the saved assessment."New value: +"`s<N>` only: preferred LCIA method — fuzzy-matched (substring) against the methods in the connected database; free text is accepted. Defaults to the same house preference `lca_run_assessment` uses. Ignored with an `a<N>`, which inherits its method from the saved assessment."
      • addedInput schema / properties / ref
        Added value: +{
        +  "description": "`a<N>` — analyse that saved assessment's setup (its system, method and functional unit); `s<N>` — analyse the saved system directly, with NO prior assessment (`method` / `amount` apply only here). List current ones with `lca_get(kind='assessments')` / `lca_get(kind='systems')` — never pass UUIDs.",
        +  "pattern": "^[as]\\d+$",
        +  "type": "string"
        +}
      • removedInput schema / properties / source
        Removed value: -{
        -  "description": "Which kind of target this analysis runs on — set it to match the ref you pass: 'assessment' with `assessment_ref`, 'system' with `system_ref`.",
        -  "enum": [
        -    "assessment",
        -    "system"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / system_ref
        Removed value: -{
        -  "description": "Saved-system ref in the form `s<N>` (e.g. `s1`) — analyse this system directly, with NO prior assessment. Mutually exclusive with `assessment_ref`. List current systems with `lca_get(kind='systems')` — never pass UUIDs.",
        -  "pattern": "^s\\d+$",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "workspace"
        -]New value: +[
        +  "workspace",
        +  "ref"
        +]
    • Changedlca_analyze_sensitivity16 fields changed
      • removedInput schema / properties / assessment_ref
        Removed value: -{
        -  "description": "Saved-assessment ref in the form `a<N>` (e.g. `a3`) — study the setup this composed assessment captured. List current assessments with `lca_get(kind='assessments')` — never pass UUIDs.",
        -  "pattern": "^a\\d+$",
        -  "type": "string"
        -}
      • removedInput schema / properties / mode
        Removed value: -{
        -  "default": "tornado",
        -  "description": "Analysis type.",
        -  "enum": [
        -    "tornado",
        -    "sweep",
        -    "scenarios"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / range_max
        Removed value: -{
        -  "description": "Sweep: upper multiplier.",
        -  "type": "number"
        -}
      • removedInput schema / properties / range_min
        Removed value: -{
        -  "description": "Sweep: lower multiplier.",
        -  "type": "number"
        -}
      • addedInput schema / properties / ref
        Added value: +{
        +  "description": "Saved-assessment ref in the form `a<N>` (e.g. `a3`) — study the setup this composed assessment captured. List current assessments with `lca_get(kind='assessments')` — never pass UUIDs.",
        +  "pattern": "^a\\d+$",
        +  "type": "string"
        +}
      • removedInput schema / properties / reference_ref
        Removed value: -{
        -  "description": "Sweep: break-even vs another assessment's total (`a<N>`). Mutually exclusive with `threshold`.",
        -  "pattern": "^a\\d+$",
        -  "type": "string"
        -}
      • changedInput schema / properties / scenarios / description
        Previous value: -"Scenarios: named override sets vs the same baseline, e.g. [{name: 'worst case', overrides: {'member:steel': 1.5}}]. Keys are composed `member:<slug>` / `system:amount` ids (analytic) OR, for an engine target, engine `param:<name>` ids (re-solves the model, deferred) — name fragments resolve server-side either way, but a scenario set may not MIX driver/member and param keys. An unresolvable key 422s."New value: +"Scenarios study: named override sets vs the same baseline, e.g. [{name: 'worst case', overrides: {'member:steel': 1.5}}]. Keys are composed `member:<slug>` / `system:amount` ids (analytic) OR, for an engine target, engine `param:<name>` ids (re-solves the model, deferred) — name fragments resolve server-side either way, but a scenario set may not MIX driver/member and param keys. An unresolvable key 422s."
      • addedInput schema / properties / scenarios / minItems
        Added value: +1
      • removedInput schema / properties / steps
        Removed value: -{
        -  "default": 9,
        -  "description": "Sweep: number of points.",
        -  "maximum": 25,
        -  "minimum": 3,
        -  "type": "integer"
        -}
      • addedInput schema / properties / sweep
        Added value: +{
        +  "description": "Sweep study: walk ONE variable across [`range_min`, `range_max`] (add `reference_ref` or `threshold` for a break-even).",
        +  "properties": {
        +    "range_max": {
        +      "description": "Upper multiplier.",
        +      "type": "number"
        +    },
        +    "range_min": {
        +      "description": "Lower multiplier.",
        +      "type": "number"
        +    },
        +    "reference_ref": {
        +      "description": "Break-even vs another assessment's total (`a<N>`). Mutually exclusive with `threshold`.",
        +      "pattern": "^a\\d+$",
        +      "type": "string"
        +    },
        +    "steps": {
        +      "default": 9,
        +      "description": "Number of points.",
        +      "maximum": 25,
        +      "minimum": 3,
        +      "type": "integer"
        +    },
        +    "threshold": {
        +      "description": "Break-even vs a fixed value. Mutually exclusive with `reference_ref`.",
        +      "type": "number"
        +    },
        +    "variable": {
        +      "description": "The single variable to walk — a composed `member:<slug>` id (analytic), an engine `param:<name>` id (openLCA dataset parameter — re-solves the model, deferred), a unique name fragment (resolved server-side), or `system:amount` (scale the whole system: service-life / replacement-count). An engine `driver:<slug>` is NOT sweepable (tornado only) — use `param:<name>` instead. Unresolvable → 422 with the valid list.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "variable",
        +    "range_min",
        +    "range_max"
        +  ],
        +  "type": "object"
        +}
      • removedInput schema / properties / threshold
        Removed value: -{
        -  "description": "Sweep: break-even vs a fixed value. Mutually exclusive with `reference_ref`.",
        -  "type": "number"
        -}
      • addedInput schema / properties / tornado
        Added value: +{
        +  "description": "Tornado study: rank each variable's ±`variation_pct` swing. The default when no study is given.",
        +  "properties": {
        +    "variables": {
        +      "description": "Variables to rank: composed `member:<slug>` ids, engine `driver:<slug>` ids, OR unique name fragments (resolved server-side; a default tornado's rows list every id). Naming ONLY engine `param:<name>` knobs instead re-solves the model under those parameters (deferred) rather than ranking drivers — mixing `driver:`/`param:` ids in one call 422s. Omit for all (composed members, or the E1 driver tornado). `system:amount` is NOT valid here (use sweep/scenarios).",
        +      "items": {
        +        "type": "string"
        +      },
        +      "maxItems": 16,
        +      "type": "array"
        +    },
        +    "variation_pct": {
        +      "default": 20,
        +      "description": "Perturb each variable by ±this percent.",
        +      "maximum": 90,
        +      "minimum": 1,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • removedInput schema / properties / variable
        Removed value: -{
        -  "description": "Sweep: the single variable to walk — a composed `member:<slug>` id (analytic), an engine `param:<name>` id (openLCA dataset parameter — re-solves the model, deferred), a unique name fragment (resolved server-side), or `system:amount` (scale the whole system: service-life / replacement-count). An engine `driver:<slug>` is NOT sweepable (tornado only) — use `param:<name>` instead. Unresolvable → 422 with the valid list.",
        -  "type": "string"
        -}
      • removedInput schema / properties / variables
        Removed value: -{
        -  "description": "Variables to rank: composed `member:<slug>` ids, engine `driver:<slug>` ids, OR unique name fragments (resolved server-side; a default tornado's rows list every id). Naming ONLY engine `param:<name>` knobs instead re-solves the model under those parameters (deferred) rather than ranking drivers — mixing `driver:`/`param:` ids in one call 422s. Omit for all (composed members, or the E1 driver tornado). `system:amount` is NOT valid here (use sweep/scenarios).",
        -  "items": {
        -    "type": "string"
        -  },
        -  "maxItems": 16,
        -  "type": "array"
        -}
      • removedInput schema / properties / variation_pct
        Removed value: -{
        -  "default": 20,
        -  "description": "Tornado: perturb each variable by ±this percent.",
        -  "maximum": 90,
        -  "minimum": 1,
        -  "type": "number"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "workspace",
        -  "assessment_ref"
        -]New value: +[
        +  "workspace",
        +  "ref"
        +]
    • Addedlca_delete
    • Removedlca_delete_assessment
    • Removedlca_delete_system
    • Changedlca_get2 fields changed
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "systems",
        -  "assessments",
        -  "comparisons",
        -  "workspaces",
        -  "engines"
        -]New value: +[
        +  "systems",
        +  "assessments",
        +  "comparisons",
        +  "contribution_analyses",
        +  "sensitivity_analyses",
        +  "reports",
        +  "workspaces",
        +  "engines"
        +]
      • changedInput schema / properties / ref / description
        Previous value: -"Single-entity ref. `s<N>` system, `a<N>` assessment, `c<N>` comparison. Mutually exclusive with `kind`."New value: +"Single-entity ref: `s`/`a`/`c`/`b`/`v`/`r<N>`. Mutually exclusive with `kind`."
  2. 1 tool update
    • Changedlca_compare_assessments2 fields changed
      • removedInput schema / properties / allow_mismatched_fu
        Removed value: -{
        -  "default": false,
        -  "description": "Compare targets that declare DIFFERENT functional units (e.g. 1 kg vs 1 unit). Default false refuses with a 400 naming both. Setting it true does NOT make the comparison valid — it stamps a warning onto the result. Only set it when the user has said the two functional units are equivalent for their question, and say so in your answer.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / function
        Added value: +{
        +  "description": "The function every target delivers, quantified — e.g. 'packaging for 1 L of beverage'. Needed when the targets are not the same product at the same amount: take it from the user's stated goal, or ask them. Saved with the comparison and shown wherever it is read.",
        +  "maxLength": 500,
        +  "minLength": 1,
        +  "type": "string"
        +}
  3. 5 tool updates
    • Changedengine_search2 fields changed
      • changedInput schema / properties / kind / description
        Previous value: -"What to search for. 'all' queries processes, systems, and flows in parallel."New value: +"What to search for. 'all' queries processes, systems, and flows in parallel. 'project' lists openLCA projects — a project is addressed by its name, which `lca_import_project` takes."
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "process",
        -  "system",
        -  "flow",
        -  "all"
        -]New value: +[
        +  "process",
        +  "system",
        +  "flow",
        +  "project",
        +  "all"
        +]
    • Changedlca_compose_linked1 field changed
      • changedInput schema / properties / ref_flow_ref / description
        Previous value: -"`f<N>` ref of the reference product flow (a product OUTPUT of the ref process)."New value: +"`f<N>` ref of the reference product flow (a product OUTPUT of the ref process). Omitted, it is the reference process's own quantitative reference."
    • Addedlca_delete_assessment
    • Changedlca_get1 field changed
      • removedInput schema / properties / include_stale
        Removed value: -{
        -  "description": "kind='systems': when true, also returns OUT_OF_SYNC / NOT_FOUND / UNREACHABLE / ARCHIVED rows.",
        -  "type": "boolean"
        -}
    • Addedlca_import_project
  4. 5 tool updates
    • Changedknowledge_get_excerpts2 fields changed
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / top_k_chunks_per_doc / type
        Previous value: -"number"New value: +"integer"
    • Changedknowledge_search1 field changed
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
    • Changedlca_get1 field changed
      • changedInput schema / properties / workspace / description
        Previous value: -"Name of the workspace to read, as `lca_get(kind='workspaces')` lists it. Omitted: this connection's default workspace, which every conversation on the connection shares and which is often an empty sandbox."New value: +"Name of the workspace to read, as `lca_get(kind='workspaces')` lists it. Required with `ref`: each workspace numbers its objects from 1, so a ref is read in the workspace it came from. Omitted with `kind`: this connection's default workspace, which every conversation on the connection shares and which is often an empty sandbox."
    • Changedlca_import_system1 field changed
      • removedInput schema / properties / engine
        Removed value: -{
        -  "description": "Name of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine.",
        -  "maxLength": 255,
        -  "minLength": 1,
        -  "type": "string"
        -}
    • Changedlca_run_assessment1 field changed
      • removedInput schema / properties / engine
        Removed value: -{
        -  "description": "Name of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine.",
        -  "maxLength": 255,
        -  "minLength": 1,
        -  "type": "string"
        -}
  5. 3 tool updates
    • Addedlca_apply_nw_set
    • Changedlca_compare_assessments1 field changed
      • addedInput schema / properties / nw_set
        Added value: +{
        +  "description": "Compare by the single score of this normalization/weighting set (its name, or a unique part of it); every target must carry it, see `lca_apply_nw_set`. A target missing it, or carrying a different copy, is refused with what to do. Omit for the characterized matrix only.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Changedlca_run_assessment1 field changed
      • addedInput schema / properties / nw_set
        Added value: +{
        +  "description": "Name of one of the method's normalization/weighting sets (e.g. 'EF 3.0 normalization and weighting set'), applied after the calculation: adds normalized and weighted results and a single score beside the per-category table. Omit for characterized results only; the result lists the sets the method offers.",
        +  "maxLength": 200,
        +  "type": "string"
        +}
  6. 1 tool update
    • Changedengine_search1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"Free-text query against names/categories. Use `*` (or an empty string) to list everything of the given `kind` — the way to enumerate what a database contains."New value: +"Free-text query, matched word by word against dataset names, categories and location codes — there is no meaning-based matching, so the nouns a dataset is named by (a material, a process, a product) find more than a description of the use (`polypropylene injection moulding`, not `plastic plate`). A place matches by name or code (`Switzerland`, `CH`). When no hit contains every word, the closest partial matches come back, labelled as such. Use `*` (or an empty string) to list everything of the given `kind` — the way to enumerate what a database contains."
  7. 3 tool updates
    • Changedlca_compose_linked6 fields changed
      • changedInput schema / properties / links / description
        Previous value: -"Supply edges connecting members."New value: +"Supply edges connecting members: a supplier's product into a consumer's input, or a consumer's waste output into its treatment."
      • changedInput schema / properties / links / items / properties / amount / description
        Previous value: -"Quantity consumed (in the consumer input's unit)."New value: +"Quantity on this edge (in the consumer exchange's unit)."
      • changedInput schema / properties / links / items / properties / consumer_input_index / description
        Previous value: -"When the consumer has 2+ input exchanges of `flow_ref`, the 0-based index (ordered by exchange id) of which one this edge feeds. Omit when unambiguous."New value: +"When the consumer has 2+ input exchanges of `flow_ref` (for a waste: 2+ output exchanges of it), the 0-based index (ordered by exchange id) of which one this edge pins. Omit when unambiguous."
      • changedInput schema / properties / links / items / properties / consumer_ref / description
        Previous value: -"`p<N>` of the process consuming the flow."New value: +"`p<N>` of the process consuming the flow — for a waste flow, the process that OUTPUTS the waste."
      • changedInput schema / properties / links / items / properties / flow_ref / description
        Previous value: -"`f<N>` of the product flow routed along this edge."New value: +"`f<N>` of the product flow routed along this edge, or of a waste routed from its generator to its treatment."
      • changedInput schema / properties / links / items / properties / provider_ref / description
        Previous value: -"`p<N>` of the upstream process supplying the flow."New value: +"`p<N>` of the upstream process supplying the flow — for a waste flow, its treatment (reference = that waste as an input)."
    • Addedlca_delete_system
    • Changedlca_edit_linked4 fields changed
      • changedInput schema / properties / ops / items / properties / consumer_input_index / description
        Previous value: -"Which of the consumer's input exchanges of `flow_ref` this edge feeds — the 0-based index `lca_get form='authored'` reports per link. add_link: REQUIRED when the consumer has 2+ input exchanges of that flow (the call tells you the valid range if it is). remove_link/rewire_link: optional, narrows the match to one edge."New value: +"Which of the consumer's input exchanges of `flow_ref` this edge feeds (for a waste: which OUTPUT exchange of it) — the 0-based index `lca_get form='authored'` reports per link. add_link: REQUIRED when the consumer has 2+ such exchanges of that flow (the call tells you the valid range if it is). remove_link/rewire_link: optional, narrows the match to one edge."
      • changedInput schema / properties / ops / items / properties / consumer_ref / description
        Previous value: -"add_link/remove_link/rewire_link: `p<N>` of the process that CONSUMES the flow. It must already be a member of this system."New value: +"add_link/remove_link/rewire_link: `p<N>` of the process that CONSUMES the flow (for a waste: the process that OUTPUTS it). It must already be a member of this system."
      • changedInput schema / properties / ops / items / properties / flow_ref / description
        Previous value: -"add_link/remove_link/rewire_link: `f<N>` of the product flow on the edge."New value: +"add_link/remove_link/rewire_link: `f<N>` of the product flow on the edge, or of a waste routed to its treatment."
      • changedInput schema / properties / ops / items / properties / provider_ref / description
        Previous value: -"add_link: `p<N>` of the process that SUPPLIES the flow (it joins the system's members automatically). remove_link: OPTIONAL — narrows the removal to edges from this supplier; omit to remove every supplier of that flow into the consumer."New value: +"add_link: `p<N>` of the process that SUPPLIES the flow — for a waste, its treatment (it joins the system's members automatically). remove_link: OPTIONAL — narrows the removal to edges from this supplier; omit to remove every supplier of that flow into the consumer."
  8. 2 tool updates
    • Changedknowledge_get_excerpts1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"Search text. Required when no documents are selected (discovery mode) — finds matching documents. Optional once document_refs are given: include it to rank those documents' chunks by relevance, or omit it to pull each document's abstract + opening chunks."New value: +"Search text. Required when no documents are selected (discovery mode) — finds matching documents. Optional once document_refs are given: include it to rank those documents' chunks by relevance, or omit it to pull each document's abstract + opening chunks. The library is English-language: technical terms and scientific names match best."
    • Changedknowledge_search1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"Search query"New value: +"Search query. The library is English-language: technical terms and scientific names match best."
  9. 10 tool updates
    • Changedlca_analyze_contributions1 field changed
      • changedInput schema / properties / workspace / description
        Previous value: -"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace."New value: +"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work."
    • Changedlca_analyze_sensitivity1 field changed
      • changedInput schema / properties / workspace / description
        Previous value: -"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace."New value: +"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work."
    • Changedlca_compare_assessments1 field changed
      • changedInput schema / properties / workspace / description
        Previous value: -"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace."New value: +"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work."
    • Changedlca_compose_assembly1 field changed
      • changedInput schema / properties / workspace / description
        Previous value: -"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace."New value: +"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work."
    • Changedlca_compose_linked1 field changed
      • changedInput schema / properties / workspace / description
        Previous value: -"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace."New value: +"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work."
    • Changedlca_edit_assembly1 field changed
      • changedInput schema / properties / workspace / description
        Previous value: -"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace."New value: +"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work."
    • Changedlca_edit_linked1 field changed
      • changedInput schema / properties / workspace / description
        Previous value: -"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace."New value: +"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work."
    • Changedlca_get1 field changed
      • changedInput schema / properties / workspace / description
        Previous value: -"Name of the workspace to read, as `lca_get(kind='workspaces')` lists it. Omitted: this connection's default workspace, which every conversation on the connection shares."New value: +"Name of the workspace to read, as `lca_get(kind='workspaces')` lists it. Omitted: this connection's default workspace, which every conversation on the connection shares and which is often an empty sandbox."
    • Changedlca_import_system1 field changed
      • changedInput schema / properties / workspace / description
        Previous value: -"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace."New value: +"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work."
    • Changedlca_run_assessment1 field changed
      • changedInput schema / properties / workspace / description
        Previous value: -"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace."New value: +"Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work."
  10. 21 tool updates
    • Changedengine_get3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / offset / maximum
        Added value: +9007199254740991
    • Changedengine_list_methods2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedengine_search3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / offset / maximum
        Added value: +9007199254740991
    • Changedknowledge_get_excerpts6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / year_from / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / year_from / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / year_to / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / year_to / minimum
        Added value: +-9007199254740991
    • Changedknowledge_get_full_document2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedknowledge_search6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / year_from / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / year_from / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / year_to / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / year_to / minimum
        Added value: +-9007199254740991
    • Changedlca_analyze_contributions2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlca_analyze_sensitivity4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / scenarios / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / scenarios / items / properties / overrides / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedlca_compare_assessments2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlca_compose_assembly5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / inputs / items / additionalProperties
        Removed value: -false
      • removedInput schema / properties / stages / items / additionalProperties
        Removed value: -false
      • removedInput schema / properties / stages / items / properties / inputs / items / additionalProperties
        Removed value: -false
    • Changedlca_compose_linked4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / links / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / links / items / properties / consumer_input_index / maximum
        Added value: +9007199254740991
    • Changedlca_create_workspace2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlca_edit_assembly5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / base_version_seq / maximum
        Added value: +9007199254740991
      • removedInput schema / properties / ops / items / additionalProperties
        Removed value: -false
      • removedInput schema / properties / ops / items / properties / inputs / items / additionalProperties
        Removed value: -false
    • Changedlca_edit_linked5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / base_version_seq / maximum
        Added value: +9007199254740991
      • removedInput schema / properties / ops / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / ops / items / properties / consumer_input_index / maximum
        Added value: +9007199254740991
    • Changedlca_get4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / offset / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / system_ref / maximum
        Added value: +9007199254740991
    • Changedlca_get_task_status2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlca_import_system2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlca_run_assessment2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlca_switch_engine2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlca_switch_workspace2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedload_skill2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
  11. 1 tool update
    • Changedlca_compose_assembly2 fields changed
      • changedInput schema / properties / scope / description
        Previous value: -"System boundary. 'cradle_to_gate' (default) = materials through manufacture. 'cradle_to_grave' = ALSO include end-of-life (add disposal/treatment process leaves). A cradle-to-grave system spans life-cycle phases — prefer `stages` over a flat `inputs` list so each phase gets its own subtotal."New value: +"System boundary. 'cradle_to_gate' (default) = materials through manufacture. 'cradle_to_grave' = ALSO include end-of-life (add disposal/treatment process leaves). 'end_of_life' = treatment of a product at end of life only; the functional unit is the treated product, e.g. '1 kg of end-of-life PV module, treated'. A cradle-to-grave system spans life-cycle phases — prefer `stages` over a flat `inputs` list so each phase gets its own subtotal."
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "cradle_to_gate",
        -  "cradle_to_grave"
        -]New value: +[
        +  "cradle_to_gate",
        +  "cradle_to_grave",
        +  "end_of_life"
        +]
  12. 14 tool updates
    • Changedengine_get1 field changed
      • addedInput schema / properties / engine
        Added value: +{
        +  "description": "Name of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine. Not combined with `scope_ref`, which picks the database a ref came from.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Changedengine_list_methods1 field changed
      • addedInput schema / properties / engine
        Added value: +{
        +  "description": "Name of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine. Not combined with `scope_ref`, which picks the database a ref came from.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Changedengine_search1 field changed
      • addedInput schema / properties / engine
        Added value: +{
        +  "description": "Name of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine. Not combined with `scope_ref`, which picks the database a ref came from.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Changedlca_analyze_contributions2 fields changed
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "workspace"
        +]
    • Changedlca_analyze_sensitivity2 fields changed
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "assessment_ref"
        -]New value: +[
        +  "workspace",
        +  "assessment_ref"
        +]
    • Changedlca_compare_assessments2 fields changed
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "targets"
        -]New value: +[
        +  "workspace",
        +  "targets"
        +]
    • Changedlca_compose_assembly3 fields changed
      • addedInput schema / properties / engine
        Added value: +{
        +  "description": "Name of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "title",
        -  "output_name"
        -]New value: +[
        +  "workspace",
        +  "title",
        +  "output_name"
        +]
    • Changedlca_compose_linked3 fields changed
      • addedInput schema / properties / engine
        Added value: +{
        +  "description": "Name of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "ref_process_ref",
        -  "member_process_refs"
        -]New value: +[
        +  "workspace",
        +  "ref_process_ref",
        +  "member_process_refs"
        +]
    • Changedlca_create_workspace1 field changed
      • changedInput schema / properties / adopt_sandbox / description
        Previous value: -"When true, the sandbox this session is currently in becomes the new workspace, keeping everything already saved there and every workspace ref. Refused when the current workspace is not a sandbox. Default false: a new, empty workspace."New value: +"When true, the connection's default workspace, when it is a sandbox, becomes the new workspace, keeping everything already saved there and every workspace ref. Refused when the default is not a sandbox. Default false: a new, empty workspace."
    • Changedlca_edit_assembly2 fields changed
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "ref",
        -  "ops"
        -]New value: +[
        +  "workspace",
        +  "ref",
        +  "ops"
        +]
    • Changedlca_edit_linked2 fields changed
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "ref",
        -  "ops"
        -]New value: +[
        +  "workspace",
        +  "ref",
        +  "ops"
        +]
    • Changedlca_get1 field changed
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Name of the workspace to read, as `lca_get(kind='workspaces')` lists it. Omitted: this connection's default workspace, which every conversation on the connection shares.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Changedlca_import_system3 fields changed
      • addedInput schema / properties / engine
        Added value: +{
        +  "description": "Name of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "ref"
        -]New value: +[
        +  "workspace",
        +  "ref"
        +]
    • Changedlca_run_assessment3 fields changed
      • addedInput schema / properties / engine
        Added value: +{
        +  "description": "Name of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace.",
        +  "maxLength": 255,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "ref"
        -]New value: +[
        +  "workspace",
        +  "ref"
        +]
  13. 1 tool update
    • Addedlca_create_workspace

Publisher details

Operator
Sistemik SpA · Publisher source
Vendor relationship
Unknown
Trust center
Unknown
Restrictions
There is a free Demo plan, and then paid plans and features. · Publisher source

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources