BlenderLens
PYPI · BLENDERLENS-MCP · 2 COMPONENTS
MCP server that lets AI agents build, check, preview and export game assets in Blender
Available components
Last scanned (7 hours ago)
Scores higher than 88% of PyPI servers
Category Design and Media
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- No production dependencies, so there is no dependency health to assess. View diagnostics → Pass
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to pzalutski-pixel/blenderlens-mcp). View diagnostics → Pass
- Clear OSI-approved license (Apache-2.0).Pass
- Actively maintained (last published 13 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability78
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 5206 tokens (~126/item across 41 items; 40 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management33
- Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 42 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 23 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.
- 22 Oct 26 +4
- Stability: unverified → 0.27 ▲ functional
- 14 Oct 26 +32
- Injection markers: unverified → pass ▲ security
- First check of Judged manipulation: pass security
- Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
- Tool coverage: unverified → 100 ▲ functional
- Schema quality: unverified → 100 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- First check of Schema quality: good functional
- First check of Tool coverage: 100 functional
- First check of Schema quality: fail functional
- First check of Schema quality: fail functional
- First check of Destructive annotations: 100 functional
- 12 Oct 26 49
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 24 Oct 2026 · Analysed pypi/blenderlens-mcp@0.2.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | pypi |
| Reason | Verified |
| Discovered via | GitHub artifact attestations |
| Source repo | pzalutski-pixel/blenderlens-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/pzalutski-pixel/blenderlens-mcp/.github/workflows/release.yml@refs/tags/v0.2.0 |
| Rekor log index | 3191548771 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha256:f38c2ce44d1399aa8754c855a20652e3b89fc02bcd9eccd98382a5cb19816d14 |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 0 packages
| Packages resolved | 0 |
|---|---|
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_modifier Add Modifier ~96
Add a modifier to an object's stack. Returns: its settings, the stack, counts. WHEN TO CALL: for detail that stays editable.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | Default from type |
| object | string | yes | Name |
| settings | object | – | Blender's names (width, count, levels, operation...); objects by name |
| type | string | yes | bevel, array, boolean, subdivision, mirror, solidify... |
No output schema declared.
No examples provided.
animate_object Animate Object ~143
Key an object's transform and shape keys into a named clip on an NLA track, exported as one glTF animation; a call replaces the object's keys in it. Returns: channels, frames, seconds, Godot warnings. WHEN TO CALL: for doors, rotors, morphs.
| Name | Type | Req | Description |
|---|---|---|---|
| clip | string | yes | Animation name, shared across objects |
| interpolation | string | – | Default linear |
| keys | array | yes | {frame, location, rotation (degrees), scale, shape_key: {name: value}}; null skips an axis |
| loop | boolean | – | Repeat; default as Godot reads the name |
| object | string | yes | Name |
No output schema declared.
No examples provided.
apply_modifier Apply Modifier ~60
Bake a modifier into the mesh; refused for a shared mesh or in edit mode. Returns: the stack, counts. WHEN TO CALL: when edit_mesh must see its result.
| Name | Type | Req | Description |
|---|---|---|---|
| modifier | string | yes | Name |
| object | string | yes | Name |
No output schema declared.
No examples provided.
apply_transform Apply Transform ~110
Bake rotation and scale into the mesh, or move its origin, mesh and children staying put; refused for a shared mesh or in edit mode. Returns: the transform. WHEN TO CALL: after scaling, before bevel or solidify.
| Name | Type | Req | Description |
|---|---|---|---|
| location | boolean | – | Default false |
| object | string | yes | Name |
| origin | – | – | New origin, or a world point |
| rotation | boolean | – | Default true; false with origin |
| scale | boolean | – | Default true; false with origin |
No output schema declared.
No examples provided.
bake_texture Bake Texture ~163
Bake a mesh's materials into a PNG through a UV map with Cycles (CPU), wired into them; render settings and selection are put back. Returns: path, size, seconds, image_driven channels. WHEN TO CALL: for procedural materials, AO.
| Name | Type | Req | Description |
|---|---|---|---|
| from_objects | array | – | High-poly sources |
| object | string | yes | Name |
| path | string | yes | *.png, only over a PNG |
| samples | integer | – | Default 32 |
| size | integer | – | Pixels a side (1024) |
| timeout | number | – | Seconds (120) |
| type | string | – | Default diffuse; ao multiplies base colour |
| use_in_material | boolean | – | Default true |
| uv_map | string | – | Default active |
No output schema declared.
No examples provided.
check_asset Check Asset ~134
Check meshes as exported: topology, normals, scale, origin, UVs, textures, morphs, overlaps; and a project's rules or rules_file (the guide lists the keys). Returns: passed; per object stats, issues {code, severity, count, faces}. WHEN TO CALL: before export_glb.
| Name | Type | Req | Description |
|---|---|---|---|
| budget | integer | – | Total triangle limit |
| evaluated | boolean | – | After modifiers (true) |
| objects | array | – | With children (default: all export_glb writes) |
| rules | object | – | The project's rules |
| rules_file | string | – | Rules as a .json file |
No output schema declared.
No examples provided.
close_session Close Session ~51
Disconnect: a background Blender exits, a live one stays open. Returns: the mode closed. WHEN TO CALL: when the work is saved.
| Name | Type | Req | Description |
|---|---|---|---|
| discard | boolean | – | Allow losing unsaved or busy work |
No output schema declared.
No examples provided.
create_collision Create Collision ~114
Add a collision proxy over a mesh, wire-drawn and parented; named for Godot, three.js exports leave it out. Returns: its name, counts, closed, volume_ratio. WHEN TO CALL: for physics props.
| Name | Type | Req | Description |
|---|---|---|---|
| naming | string | – | godot (default): -colonly, convex -convcolonly; plain: _collision |
| object | string | yes | Name |
| ratio | number | – | decimated: faces kept (0.25) |
| shape | string | – | Default convex |
No output schema declared.
No examples provided.
create_file Create File ~63
Start a new, unsaved file in place of the open one. Returns: the scene. WHEN TO CALL: for a new model.
| Name | Type | Req | Description |
|---|---|---|---|
| discard | boolean | – | Allow losing unsaved changes |
| empty | boolean | – | Default true; else Blender's default scene |
No output schema declared.
No examples provided.
create_mesh Create Mesh ~138
Build a mesh object from vertices and faces in its own space. Returns: as create_object. WHEN TO CALL: for a shape no primitive gives.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | – | Created if missing |
| edges | array | – | Loose edges |
| faces | array | – | Vertex indices around each |
| location | array | – | Metres |
| name | string | yes | Object and mesh |
| parent | string | – | location relative to it |
| recalc_normals | boolean | – | Outward (default true) |
| rotation | array | – | Degrees |
| scale | – | – | Default 1 |
| vertices | array | yes | Metres |
No output schema declared.
No examples provided.
create_object Create Object ~353
Add a primitive (tube, lathe and text too) or an empty, sized in the mesh so scale stays 1. Returns: its name (.001 on a clash), transform, counts. WHEN TO CALL: to start a part.
| Name | Type | Req | Description |
|---|---|---|---|
| bevel_resolution | integer | – | tube: 4+2n sides (2) |
| collection | string | – | Created if missing |
| depth | number | – | Cylinder, cone height (2) |
| extrude | number | – | text depth (size/10) |
| fill | boolean | – | Caps (true; circle: false) |
| kind | string | yes | empty has no mesh |
| location | array | – | Metres |
| minor_radius | number | – | Torus tube (0.25) |
| name | string | – | Default from kind |
| parent | string | – | location relative to it |
| points | array | – | tube path, mesh space |
| profile | array | – | lathe: [radius, z] about Z |
| radius | number | – | Default 1; tube 0.05 |
| radius_top | number | – | Cone top (0) |
| rings | integer | – | uv_sphere 16, torus 12 |
| rotation | array | – | Degrees |
| scale | – | – | Default 1 |
| segments | integer | – | Default 32, torus 48 |
| size | – | – | cube edges (2); plane, grid [x, y]; monkey, empty, text: a number |
| smooth | boolean | – | tube: curved (true) or straight |
| subdivisions | integer | – | ico_sphere 2, grid 10 |
| text | string | – | Its words |
No output schema declared.
No examples provided.
delete_object Delete Objects ~50
Delete objects and unused mesh data. Returns: the names deleted. WHEN TO CALL: to remove parts.
| Name | Type | Req | Description |
|---|---|---|---|
| objects | array | yes | Names |
| with_children | boolean | – | Else they stay in place |
No output schema declared.
No examples provided.
duplicate_object Duplicate Object ~78
Copy an object with modifiers, materials and children. Returns: the copies. WHEN TO CALL: for repeated parts.
| Name | Type | Req | Description |
|---|---|---|---|
| linked | boolean | – | Share the mesh |
| name | string | – | For the copy |
| object | string | yes | Name |
| offset | array | – | Metres |
| with_children | boolean | – | Default true |
No output schema declared.
No examples provided.
edit_mesh Edit Mesh ~324
Run one operation on the faces picked (faces, facing) or all. bevel: the picked faces' rim edges (all edges if all faces), or with angle the edges sharper than it. amount, offset, pivot: mesh space. Returns: result_faces (extrude: the cap; inset: inner faces), counts. WHEN TO CALL: to shape a primitive.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | – | extrude distance, inset border, bevel width, merge distance, solidify thickness (inward) |
| angle | number | – | Degrees: sharper edges stay sharp (shade_smooth), bevel, seam (30); dissolve_planar (5) |
| cuts | integer | – | subdivide (1) |
| depth | number | – | inset: in (-) or out |
| direction | – | – | extrude this way; bisect plane normal (world) |
| faces | array | – | Indices from get_mesh |
| facing | – | – | World direction |
| factor | – | – | scale by |
| fill | boolean | – | bisect: cap the cut (true) |
| individual | boolean | – | inset each face alone |
| keep | string | – | bisect: side kept (below) |
| object | string | yes | Name |
| offset | array | – | translate by |
| operation | string | yes | What to do |
| pivot | array | – | scale, rotate about; bisect plane point (default center) |
| rotation | array | – | rotate by, degrees |
| segments | integer | – | bevel (1) |
| tolerance | number | – | Degrees off facing (30) |
No output schema declared.
No examples provided.
export_file Export File ~119
Write FBX, OBJ, STL, PLY or USD (by extension), objects chosen as export_glb does; the file is read back in a scratch scene. Returns: path, bytes, read_back counts. WHEN TO CALL: for tools that take no glTF.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | – | Its objects |
| objects | array | – | With children (default all) |
| path | string | yes | .fbx .obj .stl .ply .usd(a|c|z) |
| visible_only | boolean | – | Default true |
No output schema declared.
No examples provided.
export_glb Export glTF Binary ~265
Write a .glb, Y-up (-Y front becomes +Z), for a target engine; what it cannot load is refused, as is edit mode. Returns: the file read back, with warnings for the target. WHEN TO CALL: to deliver.
| Name | Type | Req | Description |
|---|---|---|---|
| animations | boolean | – | Default true |
| apply_modifiers | boolean | – | Default true |
| at_origin | boolean | – | Roots written at 0,0,0 |
| cameras | boolean | – | Default false |
| clean_names | boolean | – | Drop .001 where unique (true for godot) |
| collection | string | – | Its objects |
| draco | boolean | – | Compress meshes |
| extras | boolean | – | Custom properties (default true) |
| image_format | string | – | Default auto |
| lights | boolean | – | Default false |
| objects | array | – | With children (default all) |
| path | string | yes | Ends in .glb |
| tangents | boolean | – | For normal maps |
| target | string | – | Default generic; threejs drops -colonly proxies |
| texcoords | boolean | – | UVs (default true) |
| vertex_colors | string | – | Default material: those a material reads |
| visible_only | boolean | – | Default true |
No output schema declared.
No examples provided.
get_mesh Get Mesh ~107
List a mesh's faces. Returns: each face's index, center, normal, side, area, material slot. WHEN TO CALL: for face indices; again after faces change.
| Name | Type | Req | Description |
|---|---|---|---|
| evaluated | boolean | – | After modifiers |
| include_vertices | boolean | – | List vertices too |
| limit | integer | – | Default 200 |
| material | integer|string | – | Its faces only: slot or name |
| object | string | yes | Name |
| space | string | – | Default world |
No output schema declared.
No examples provided.
get_object Get Object ~53
Read one object in full. Returns: transform, bounds, properties, counts before and after modifiers, modifier settings by Blender's names, slots. WHEN TO CALL: before set_modifier.
| Name | Type | Req | Description |
|---|---|---|---|
| object | string | yes | Name |
No output schema declared.
No examples provided.
get_scene Get Scene ~47
Read the scene. Returns: file state, units, and each object's type, parent, location, dimensions, counts, materials, modifiers. WHEN TO CALL: before building; after not_found.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_status Get Status ~54
Report the attached Blender without starting one. Returns: the session (busy: what it runs), add-on, Blender, render_dir, recovery copies. WHEN TO CALL: first; after not_connected, connection_lost, busy.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
import_file Import File ~111
Import a .glb, .gltf, .obj, .fbx, .stl or .ply, or append from a .blend what is named. Returns: what it added. WHEN TO CALL: for a reference, or to check an export.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | – | For what it adds |
| collections | array | – | .blend |
| materials | array | – | .blend |
| objects | array | – | .blend: with children |
| path | string | yes | File |
No output schema declared.
No examples provided.
join_objects Join Objects ~53
Join meshes into the first, keeping each piece's materials and faces. Returns: the object, slots and their faces. WHEN TO CALL: to make one part of pieces.
| Name | Type | Req | Description |
|---|---|---|---|
| objects | array | yes | The first stays |
No output schema declared.
No examples provided.
list_materials List Materials ~39
List materials. Returns: each one's values (linear, as glTF) and users. WHEN TO CALL: before set_material, to reuse one.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
measure_objects Measure Objects ~99
Measure between objects' surfaces as exported, in world space, or cast a ray. Returns: per pair distance, closest points, touching, overlapping, overlap_faces, inside; ray object, location, normal, face. WHEN TO CALL: to fit parts, find gaps.
| Name | Type | Req | Description |
|---|---|---|---|
| direction | – | – | Ray, world |
| objects | array | – | 2 to 16; a ray may hit only these |
| origin | array | – | Ray start |
No output schema declared.
No examples provided.
open_file Open File ~53
Open a .blend in place of the open file. Returns: the scene. WHEN TO CALL: to resume work.
| Name | Type | Req | Description |
|---|---|---|---|
| discard | boolean | – | Allow losing unsaved changes |
| path | string | yes | .blend |
No output schema declared.
No examples provided.
open_session Open Session ~90
Attach to the live Blender window or start a background one. Returns: the session. WHEN TO CALL: to pick a mode or file; else the first call attaches by BLENDERLENS_MODE.
| Name | Type | Req | Description |
|---|---|---|---|
| discard | boolean | – | Allow losing unsaved or busy work |
| file | string | – | .blend to open |
| mode | string | – | auto (default): live if the add-on replies |
No output schema declared.
No examples provided.
remove_modifier Remove Modifier ~47
Remove a modifier unapplied. Returns: the stack left, counts. WHEN TO CALL: to undo add_modifier.
| Name | Type | Req | Description |
|---|---|---|---|
| modifier | string | yes | Name |
| object | string | yes | Name |
No output schema declared.
No examples provided.
render_preview Render Preview ~289
Render a PNG of objects (and children) or all visible geometry, framed, others hidden, the scene unchanged. Returns: its path (open it, or inline). WHEN TO CALL: after each build step.
| Name | Type | Req | Description |
|---|---|---|---|
| azimuth | number | – | Degrees, front 0, right 90 |
| context | array | – | Shown, not framed |
| elevation | number | – | Degrees up |
| engine | string | – | Default auto: cycles (CPU); eevee needs GPU |
| hide_from_camera | array | – | Unseen, still casting shadows |
| inline | boolean | – | Return the image too |
| lighting | string | – | Default studio |
| margin | number | – | Framing slack (1.1) |
| markers | array | – | Return their pixels |
| objects | array | – | Default all visible |
| ortho_scale | number | – | Metres on long side |
| path | string | – | *.png, only over a PNG (default render_dir) |
| projection | string | – | Default perspective |
| resolution | – | – | Pixels (768) |
| samples | integer | – | Default 32 |
| style | string | – | clay, random use workbench |
| timeout | number | – | Seconds (120) |
| transparent | boolean | – | Background |
| view | string | – | Default three_quarter |
| views | array | – | Several, in one PNG |
No output schema declared.
No examples provided.
run_python Run Python ~69
Run Python in Blender (bpy, bmesh, mathutils); names persist; set result to return it. Returns: stdout, stderr, result. WHEN TO CALL: only for what no tool covers.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | Python source |
| timeout | number | – | Seconds (120) |
No output schema declared.
No examples provided.
run_script Run Script ~126
Run a .py file in Blender as run_python does, with args; its folder, and parents up to a blenderlens.toml, are importable afresh each run. Returns: result, stdout, stderr, objects added, removed, changed. WHEN TO CALL: to build a model from its script.
| Name | Type | Req | Description |
|---|---|---|---|
| args | object | – | The script's args |
| discard | boolean | – | Allow losing unsaved changes |
| fresh | boolean | – | Start from an empty file |
| path | string | yes | .py file |
| timeout | number | – | Seconds (120) |
No output schema declared.
No examples provided.
save_file Save File ~62
Save the open file. Returns: path, size. WHEN TO CALL: at milestones; before closing a background session.
| Name | Type | Req | Description |
|---|---|---|---|
| copy | boolean | – | A checkpoint; the open file keeps its path |
| path | string | – | .blend; default the last save |
No output schema declared.
No examples provided.
set_collection Set Collection ~69
Move objects into a collection. Returns: their collections. WHEN TO CALL: to group parts.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | yes | Created if missing |
| keep_other | boolean | – | Stay in others too |
| objects | array | yes | Names |
| parent | string | – | Parent of a new one |
No output schema declared.
No examples provided.
set_material Set Material ~285
Create or update a material, optionally on an object or its picked faces; all its users change; '' clears an image or vertex_color. Returns: its values, slot, faces. WHEN TO CALL: after shaping.
| Name | Type | Req | Description |
|---|---|---|---|
| alpha | number | – | Below 1 blends |
| alpha_cutoff | number | – | clip below (0.5) |
| alpha_mode | string | – | With an image or vertex_color, their alpha |
| backface_culling | boolean | – | Hide back faces (true for new) |
| base_color | – | – | [r, g, b(, a)] linear, or '#RRGGBB' sRGB |
| base_color_image | string | – | Image file |
| emission_color | – | – | Alone sets strength 1 |
| emission_image | string | – | Image file |
| emission_strength | number | – | Above 1 glows |
| faces | array | – | Indices from get_mesh |
| facing | – | – | World direction |
| material | string | yes | Created if missing |
| metallic | number | – | 0 to 1 |
| normal_image | string | – | Image file |
| object | string | – | Mesh to put it on |
| roughness | number | – | 0 to 1 |
| tolerance | number | – | Degrees off facing (30) |
| vertex_color | string | – | Color attribute as base colour |
No output schema declared.
No examples provided.
set_modifier Set Modifier ~84
Change a modifier's settings, place or visibility. Returns: as add_modifier. WHEN TO CALL: to tune one.
| Name | Type | Req | Description |
|---|---|---|---|
| index | integer | – | Stack position, 0 first |
| modifier | string | yes | Name |
| object | string | yes | Name |
| settings | object | – | By Blender's property names |
| show | boolean | – | In viewport and render |
No output schema declared.
No examples provided.
set_object Set Object Properties ~148
Rename or hide an object, or set its display or custom properties (exported as glTF extras). Returns: its state. WHEN TO CALL: to name, hide or tag parts.
| Name | Type | Req | Description |
|---|---|---|---|
| display | string | – | Viewport |
| empty_display | string | – | An empty's shape: ARROWS, CUBE, SPHERE... |
| hide | boolean | – | Viewport; export skips it |
| hide_render | boolean | – | Renders |
| object | string | yes | Name |
| properties | object | – | JSON values, 8 levels deep; null removes |
| rename | string | – | New name |
| rename_data | boolean | – | Unshared mesh too (default true) |
No output schema declared.
No examples provided.
set_parent Set Parent ~65
Parent an object, or clear its parent. Returns: the transform. WHEN TO CALL: to assemble parts into one node tree.
| Name | Type | Req | Description |
|---|---|---|---|
| keep_transform | boolean | – | Keep world position (true) |
| object | string | yes | Name |
| parent | string|null | – | null clears |
No output schema declared.
No examples provided.
set_transform Set Transform ~116
Set an object's location, rotation, scale or dimensions; null keeps a component. Returns: the transform; after drop, landed_on and moved_by. WHEN TO CALL: to place parts.
| Name | Type | Req | Description |
|---|---|---|---|
| dimensions | array | – | Metres, reached by scale |
| drop | boolean|string | – | Then move along Z to rest on what is below, or on this object |
| location | array | – | Metres, parent space |
| object | string | yes | Name |
| rotation | array | – | Degrees |
| scale | – | – | Factors |
No output schema declared.
No examples provided.
set_vertex_color Set Vertex Color ~134
Paint the faces picked (faces, facing) or all into a color attribute. Returns: faces painted, materials wired, and not_wired (setups not BlenderLens's). WHEN TO CALL: for colour without textures; exports as COLOR_0.
| Name | Type | Req | Description |
|---|---|---|---|
| attribute | string | – | Default Col, made white |
| color | – | yes | As base_color |
| faces | array | – | Indices from get_mesh |
| facing | – | – | World direction |
| object | string | yes | Name |
| tolerance | number | – | Degrees off facing (30) |
| use_in_material | boolean | – | Wire into its materials (true) |
No output schema declared.
No examples provided.
undo_change Undo Change ~84
Step back through undo steps, one per call that changed something; Python references go stale. Returns: steps undone, counts, unsaved_changes. WHEN TO CALL: to take back calls that went wrong.
| Name | Type | Req | Description |
|---|---|---|---|
| force | boolean | – | Undo steps whatever made them |
| list | boolean | – | Name the steps; undo none |
| steps | integer | – | Default 1 |
No output schema declared.
No examples provided.
unwrap_uv Unwrap UVs ~125
Unwrap a mesh into a UV map; projections are packed. Returns: islands, area used, overlapping and out-of-bounds faces, texel density (px/m at 1024). WHEN TO CALL: before texturing or baking; unwrap needs seams (edit_mesh mark_seams).
| Name | Type | Req | Description |
|---|---|---|---|
| margin | number | – | Between islands, to 0.1; lightmap to 0.01 (0.01) |
| method | string | – | Default smart |
| object | string | yes | Name |
| uv_map | string | – | Made if missing (default active) |
No output schema declared.
No examples provided.
How do I install the BlenderLens MCP server?
BlenderLens runs locally as a PyPI package, launched with uvx blenderlens-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · blenderlens-mcp
claude mcp add pzalutski-pixel-blenderlens -- uvx blenderlens-mcp
What is the BlenderLens MCP server?
BlenderLens is an MCP server listed in the public MCP registry as io.github.pzalutski-pixel/blenderlens. MCP server that lets AI agents build, check, preview and export game assets in Blender. This page covers its PyPI package (blenderlens-mcp).
Is the BlenderLens MCP server safe to use?
BlenderLens scores 86 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 24 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the BlenderLens MCP server expose?
BlenderLens exposes 40 tools: get_status, open_session, close_session, get_scene, get_object, and 35 more. Their descriptions and schemas cost roughly 4,670 tokens of context every time the server is loaded.
Is the BlenderLens MCP server still maintained?
BlenderLens is still listed as active in the MCP registry. We last reached this channel on 24 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the BlenderLens MCP server under?
BlenderLens declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.