Skip to main content
Glama

mpfb_save_preset

Destructive

Save a MakeHuman character as an MPFB preset file, capturing phenotype, rig, body parts, clothes, skin and eyes for later rebuilding. Refuses to replace an existing preset unless overwrite is true.

Instructions

Save a character as an MPFB preset - phenotype, modeling targets, rig, body parts, garments, skin and eye materials - to be rebuilt later with mpfb_create_human_from_preset or from MPFB's own preset panel. This writes a file outside the .blend, and nothing in Blender can undo it.

preset_name is a name, never a path: the file is always human.<preset_name>.json in MPFB's user config directory, and path in the response says which file that was. Letters, digits, _, - and . only, at most 64 characters, no leading dot - stricter than MPFB's own panel, which rejects only a space, so that a name cannot become a path.

basemesh_name says which character was actually serialized.

overwrite (default false) is the only thing standing between a call and the loss of an existing preset. With it false and the preset present, the tool refuses - blocked_by: "preset_exists", nothing written - and file_before carries that file's size and age so the decision can be made from the response.

A generated Rigify rig does not round-trip. MPFB stores the meta rig it was generated from, so loading the preset back gives you the meta rig and mpfb_generate_rigify_rig finishes the job. Nothing is lost and nothing fails; rig_identified_as and rig_saved_as show the substitution on the call where it happened.

On saved: true (and so performed: true), result carries path, size_bytes, modified, overwrote, file_before (the replaced file's facts, or null), config_dir, basemesh_name, rig_object_name, rig_identified_as/rig_saved_as, and contents - what the written file actually holds, read back from it: rig, proxy, bodyparts, clothes, skin_mhmat, skin_material_type, eyes_material_type, target_count, expression_count, makeup_count.

Refusals come back as saved: false with a blocked_by, having written nothing: subject_not_found, preset_exists, not_a_human_project (MPFB only serializes characters made within MPFB, not imported meshes), rig_not_identifiable (an armature MPFB cannot name - for a custom rig, its definition is no longer in your user data), config_dir_missing and serialize_failed.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameNo
overwriteNo
preset_nameYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true / readOnlyHint=false, but the description goes well beyond: it warns the write lands outside the .blend and is un-undoable, explains the overwrite gate and blocked_by/file_before semantics, and documents the Rigify meta-rig substitution that surprises users on round-trip. That is substantive disclosure beyond the structured 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?

Front-loads the critical warning (external, un-undoable write) before mechanics, and each paragraph is dense and purposeful. It is nonetheless very long and re-enumerates the entire `result` field set, some of which overlaps the output schema rather than adding new meaning.

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 write with 0% schema description coverage, the description is remarkably complete: side effects, overwrite behavior, all refusal reasons, and the Rigify caveat are all covered. It even explains response fields beyond what the output schema alone would convey.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the load, and it does for `preset_name` (name-not-path rule, allowed charset, 64-char cap, no leading dot) and `overwrite` (default false, destructive consequence). It does not explain the `name` property in the schema, and references `basemesh_name` which is not actually a parameter, leaving a minor mismatch/gap.

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 ('Save a character as an MPFB preset') plus the exact bundle of what gets serialized (phenotype, targets, rig, bodyparts, garments, materials), and names the consuming sibling `mpfb_create_human_from_preset`. An agent can distinguish this from sibling list/save tools without opening a 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?

Routes explicitly: this preset is what `mpfb_create_human_from_preset` (or MPFB's own panel) rebuilds, and overwrite=false is framed as the gate protecting an existing file. It also enumerates the refusal conditions (`subject_not_found`, `preset_exists`, `not_a_human_project`, etc.), giving clear when-it-will-and-won't-work guidance.

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