Skip to main content
Glama
maximedns5

freecad-mcp

by maximedns5

place

Position FreeCAD objects by their real bounding-box corner, avoiding manual offset calculations and automatically handling PartDesign body placement for correct results.

Instructions

Position an object by its real bounding box instead of a derived offset.

Pass exactly one of bbox_min or origin:
- bbox_min: the object's bounding-box minimum corner is moved to this
  point. The server computes the offset from the object's CURRENT real
  bounding box, so you express intent ("put this corner here") instead
  of deriving a translation yourself and getting it wrong.
- origin: sets the placement's base position directly.

rotation ({"Axis": {"x","y","z"}, "Angle": degrees}) is applied before
the bbox/origin move, so a subsequent bbox_min still lands correctly.

IMPORTANT: if obj_name is a feature inside a PartDesign::Body (e.g. a
Pad), this tool automatically moves the owning Body instead — a
feature's own Placement is silently reverted by its Body on recompute,
so setting it directly on the feature appears to work and does nothing.
Check the response's movedBody/placementOwner fields to see when this
substitution happened.

Pass expect_size ([x, y, z]) to verify the resulting bounding box matches
what you intended — this catches the common mistake of mapping a
sketch/pad's width/height/length onto the wrong real-world axis (e.g.
building a 320mm-long rail as 22x22x320 instead of 22x320x22).

Args:
    doc_name: The name of the document containing the object.
    obj_name: The name of the object to place.
    bbox_min: [x, y, z] target for the object's bounding-box minimum corner.
    origin: [x, y, z] target for the placement's base position.
    rotation: {"Axis": {"x","y","z"}, "Angle": degrees} to set before moving.
    expect_size: [x, y, z] expected bounding box, checked after placement.
    rotation_center: [x, y, z] to rotate ABOUT, instead of about the
        object's own origin. This is what posing a linkage needs — a
        connecting rod swings about its wrist pin, a crank arm sweeps
        about the main-bearing axis. Without it you would have to
        pre-compute the compensating translation yourself, which is the
        derived-number mistake this tool exists to prevent.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
originNo
bbox_minNo
doc_nameYes
obj_nameYes
rotationNo
expect_sizeNo
rotation_centerNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes
Behavior5/5

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

With no annotations provided, the description carries full responsibility for behavioral disclosure. It thoroughly explains how bbox_min is computed from the current real bounding box, the order of rotation relative to bbox/origin moves, the silent Body substitution in PartDesign, the expect_size verification, and the role of rotation_center. This is exceptional transparency.

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?

The description is long but every sentence carries unique information. It is well-organized with a purpose statement, mode options, rotation order, an important warning, and a parameter list. All information is relevant and necessary for correct usage, and it is front-loaded with the core concept.

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?

Given the tool's complexity (7 parameters, no annotations, output schema present), the description is remarkably complete. It covers all parameters, edge cases (PartDesign body substitution), verification (expect_size), and advanced usage (rotation_center). It even references response fields for confirmation, which is appropriate since the output schema exists.

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

Parameters5/5

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

Input schema has 0% description coverage, so the description must fully compensate. It explains every parameter: doc_name, obj_name, bbox_min vs origin, rotation structure, rotation_center purpose, and expect_size as a validation aid. It adds real semantic value beyond the raw schema, including usage examples and common mistakes.

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 description opens with a specific verb+resource: 'Position an object by its real bounding box instead of a derived offset.' It clearly distinguishes the tool's purpose from simple offset-based placement and outlines two distinct modes (bbox_min and origin), making its function unambiguous relative to siblings.

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?

The description provides clear usage context: 'Pass exactly one of bbox_min or origin,' rotation behavior, and specific use cases for rotation_center (posing a linkage). It also cautions about PartDesign Body substitution. However, it does not explicitly name alternative sibling tools or state when NOT to use this tool, so it stops short of full alternative guidance.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/maximedns5/freecad-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server