Skip to main content
Glama

mpfb_set_macro_details

DestructiveIdempotent

Change a MakeHuman character's phenotype sliders and rebuild its shape from them; omit any slider to leave it unchanged.

Instructions

Change a MakeHuman character's macro details - its phenotype sliders - and rebuild the shape from them, exactly as MPFB's own sliders do.

Every slider is optional and an omitted one is left alone, so a relative change is one call: read the character with mpfb_get_macro_details, then pass only what should differ. Passing a slider its current value is not the same as omitting it - it is reported in changes with previous_value equal to new_value.

Sliders are 0.0-1.0, and 0.5 is neutral for all but the three race weights, whose neutral is 0.33 each. age runs 0.0 = baby, 0.1875 = child, 0.5 = young adult, 1.0 = old; gender 0.0 = fully female, 1.0 = fully male. The three race weights are independent and MPFB does not normalize them: setting race_asian to 1.0 does not reduce the other two, and the default sums to 0.99. Set all three when changing one, or read race_sum in the response and decide.

prune (default true, MPFB's own) deletes macro shape keys whose weight falls to zero, keeping the shape key list from growing as sliders move. refit (default false, MPFB's own) re-fits the mesh assets and the rig to the new body shape. The default is false because a refit is expensive, not because it is unnecessary: leave it false, read assets_possibly_stale, and call mpfb_refit_human once after a series of changes rather than paying for a refit per slider.

result carries changes (one {name, previous_value, new_value} per slider named), the full macro_details after the change, race_sum, macro_shapekeys_before/_after with shapekeys_removed and shapekeys_added - all four naming shape keys as the mesh stores them ($md-$as-$fe-$yn), so a name from here can be looked up rather than only read - plus recalculated, refit_performed, assets_possibly_stale and basemesh_name.

Two situations answer rather than fail, both with changes: []: a subject that resolves to no basemesh (found: false, subject_not_found), and a basemesh that is not ready to be modified - left in edit mode, or with no shape keys at all (ready: false, blocked_by naming which). A call that names no slider also does nothing, deliberately, rather than paying for a shape rebuild that would change nothing; it comes back performed: false.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ageNo
nameNo
pruneNo
refitNo
genderNo
heightNo
muscleNo
weightNo
cupsizeNo
firmnessNo
race_asianNo
proportionsNo
race_africanNo
race_caucasianNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.7/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: omitted sliders are left alone, race weights are independent and not normalized (default sums to 0.99), prune/refit defaults and their rationale, plus the blocked/not-found/empty-call answer-rather-than-fail cases. This is far more than the annotations' readOnly/destructive/idempotent hints.

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?

Long, but front-loaded and organized with bold lead-ins so each block is scannable. Some content, notably the enumeration of result fields, is arguably redundant given an output schema exists, but the length is largely justified by 14 undocumented parameters.

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?

Comprehensive for a mutation tool with 14 params: covers ranges, defaults, non-obvious semantics, side effects, and failure modes. It goes beyond the minimum by detailing return fields, though those are already in the output schema.

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 0%, so the description carries the burden and does so well for the hard cases: 0.0-1.0 ranges, 0.5 neutral vs 0.33 for race weights, age/gender scales, race-weight independence, and prune/refit defaults. It is weaker on the generic sliders (height, muscle, weight, cupsize, firmness, proportions) and on name, which are only covered by the blanket 'sliders' 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 (change macro details / phenotype sliders, rebuild the shape) and immediately names the read counterpart mpfb_get_macro_details. An agent can distinguish it from sibling setters 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?

Explicitly prescribes the workflow: read with mpfb_get_macro_details, then pass only what should differ. It also gives when-to-use guidance for refit (leave false, call mpfb_refit_human once after a series of changes) and names the alternative sibling, 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.