Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

BlenderLens

PYPI · BLENDERLENS-MCP · 2 COMPONENTS

MCP server that lets AI agents build, check, preview and export game assets in Blender

+5 this week 86 Trust /100

Last scanned (7 hours ago)

Scores higher than 88% of PyPI servers

Category Design and Media

Trust breakdown (7 categories)

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
Changelog

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.

Diagnostics

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 →

MCP tools · 40 exposed · ~4,670 tokens

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 →

Tool Tokens
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.

NameTypeReqDescription
namestring–Default from type
objectstringyesName
settingsobject–Blender's names (width, count, levels, operation...); objects by name
typestringyesbevel, array, boolean, subdivision, mirror, solidify...

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
clipstringyesAnimation name, shared across objects
interpolationstring–Default linear
keysarrayyes{frame, location, rotation (degrees), scale, shape_key: {name: value}}; null skips an axis
loopboolean–Repeat; default as Godot reads the name
objectstringyesName

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
modifierstringyesName
objectstringyesName

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
locationboolean–Default false
objectstringyesName
origin––New origin, or a world point
rotationboolean–Default true; false with origin
scaleboolean–Default true; false with origin

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
from_objectsarray–High-poly sources
objectstringyesName
pathstringyes*.png, only over a PNG
samplesinteger–Default 32
sizeinteger–Pixels a side (1024)
timeoutnumber–Seconds (120)
typestring–Default diffuse; ao multiplies base colour
use_in_materialboolean–Default true
uv_mapstring–Default active

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
budgetinteger–Total triangle limit
evaluatedboolean–After modifiers (true)
objectsarray–With children (default: all export_glb writes)
rulesobject–The project's rules
rules_filestring–Rules as a .json file

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
discardboolean–Allow losing unsaved or busy work

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
namingstring–godot (default): -colonly, convex -convcolonly; plain: _collision
objectstringyesName
rationumber–decimated: faces kept (0.25)
shapestring–Default convex

No output schema declared.

No examples provided.

create_file ~63

Start a new, unsaved file in place of the open one. Returns: the scene. WHEN TO CALL: for a new model.

NameTypeReqDescription
discardboolean–Allow losing unsaved changes
emptyboolean–Default true; else Blender's default scene

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
collectionstring–Created if missing
edgesarray–Loose edges
facesarray–Vertex indices around each
locationarray–Metres
namestringyesObject and mesh
parentstring–location relative to it
recalc_normalsboolean–Outward (default true)
rotationarray–Degrees
scale––Default 1
verticesarrayyesMetres

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
bevel_resolutioninteger–tube: 4+2n sides (2)
collectionstring–Created if missing
depthnumber–Cylinder, cone height (2)
extrudenumber–text depth (size/10)
fillboolean–Caps (true; circle: false)
kindstringyesempty has no mesh
locationarray–Metres
minor_radiusnumber–Torus tube (0.25)
namestring–Default from kind
parentstring–location relative to it
pointsarray–tube path, mesh space
profilearray–lathe: [radius, z] about Z
radiusnumber–Default 1; tube 0.05
radius_topnumber–Cone top (0)
ringsinteger–uv_sphere 16, torus 12
rotationarray–Degrees
scale––Default 1
segmentsinteger–Default 32, torus 48
size––cube edges (2); plane, grid [x, y]; monkey, empty, text: a number
smoothboolean–tube: curved (true) or straight
subdivisionsinteger–ico_sphere 2, grid 10
textstring–Its words

No output schema declared.

No examples provided.

delete_object ~50

Delete objects and unused mesh data. Returns: the names deleted. WHEN TO CALL: to remove parts.

NameTypeReqDescription
objectsarrayyesNames
with_childrenboolean–Else they stay in place

No output schema declared.

No examples provided.

duplicate_object ~78

Copy an object with modifiers, materials and children. Returns: the copies. WHEN TO CALL: for repeated parts.

NameTypeReqDescription
linkedboolean–Share the mesh
namestring–For the copy
objectstringyesName
offsetarray–Metres
with_childrenboolean–Default true

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
amountnumber–extrude distance, inset border, bevel width, merge distance, solidify thickness (inward)
anglenumber–Degrees: sharper edges stay sharp (shade_smooth), bevel, seam (30); dissolve_planar (5)
cutsinteger–subdivide (1)
depthnumber–inset: in (-) or out
direction––extrude this way; bisect plane normal (world)
facesarray–Indices from get_mesh
facing––World direction
factor––scale by
fillboolean–bisect: cap the cut (true)
individualboolean–inset each face alone
keepstring–bisect: side kept (below)
objectstringyesName
offsetarray–translate by
operationstringyesWhat to do
pivotarray–scale, rotate about; bisect plane point (default center)
rotationarray–rotate by, degrees
segmentsinteger–bevel (1)
tolerancenumber–Degrees off facing (30)

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
collectionstring–Its objects
objectsarray–With children (default all)
pathstringyes.fbx .obj .stl .ply .usd(a|c|z)
visible_onlyboolean–Default true

No output schema declared.

No examples provided.

export_glb ~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.

NameTypeReqDescription
animationsboolean–Default true
apply_modifiersboolean–Default true
at_originboolean–Roots written at 0,0,0
camerasboolean–Default false
clean_namesboolean–Drop .001 where unique (true for godot)
collectionstring–Its objects
dracoboolean–Compress meshes
extrasboolean–Custom properties (default true)
image_formatstring–Default auto
lightsboolean–Default false
objectsarray–With children (default all)
pathstringyesEnds in .glb
tangentsboolean–For normal maps
targetstring–Default generic; threejs drops -colonly proxies
texcoordsboolean–UVs (default true)
vertex_colorsstring–Default material: those a material reads
visible_onlyboolean–Default true

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
evaluatedboolean–After modifiers
include_verticesboolean–List vertices too
limitinteger–Default 200
materialinteger|string–Its faces only: slot or name
objectstringyesName
spacestring–Default world

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
objectstringyesName

No output schema declared.

No examples provided.

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 ~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 ~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.

NameTypeReqDescription
collectionstring–For what it adds
collectionsarray–.blend
materialsarray–.blend
objectsarray–.blend: with children
pathstringyesFile

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
objectsarrayyesThe first stays

No output schema declared.

No examples provided.

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 ~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.

NameTypeReqDescription
direction––Ray, world
objectsarray–2 to 16; a ray may hit only these
originarray–Ray start

No output schema declared.

No examples provided.

open_file ~53

Open a .blend in place of the open file. Returns: the scene. WHEN TO CALL: to resume work.

NameTypeReqDescription
discardboolean–Allow losing unsaved changes
pathstringyes.blend

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
discardboolean–Allow losing unsaved or busy work
filestring–.blend to open
modestring–auto (default): live if the add-on replies

No output schema declared.

No examples provided.

remove_modifier ~47

Remove a modifier unapplied. Returns: the stack left, counts. WHEN TO CALL: to undo add_modifier.

NameTypeReqDescription
modifierstringyesName
objectstringyesName

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
azimuthnumber–Degrees, front 0, right 90
contextarray–Shown, not framed
elevationnumber–Degrees up
enginestring–Default auto: cycles (CPU); eevee needs GPU
hide_from_cameraarray–Unseen, still casting shadows
inlineboolean–Return the image too
lightingstring–Default studio
marginnumber–Framing slack (1.1)
markersarray–Return their pixels
objectsarray–Default all visible
ortho_scalenumber–Metres on long side
pathstring–*.png, only over a PNG (default render_dir)
projectionstring–Default perspective
resolution––Pixels (768)
samplesinteger–Default 32
stylestring–clay, random use workbench
timeoutnumber–Seconds (120)
transparentboolean–Background
viewstring–Default three_quarter
viewsarray–Several, in one PNG

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
codestringyesPython source
timeoutnumber–Seconds (120)

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
argsobject–The script's args
discardboolean–Allow losing unsaved changes
freshboolean–Start from an empty file
pathstringyes.py file
timeoutnumber–Seconds (120)

No output schema declared.

No examples provided.

save_file ~62

Save the open file. Returns: path, size. WHEN TO CALL: at milestones; before closing a background session.

NameTypeReqDescription
copyboolean–A checkpoint; the open file keeps its path
pathstring–.blend; default the last save

No output schema declared.

No examples provided.

set_collection ~69

Move objects into a collection. Returns: their collections. WHEN TO CALL: to group parts.

NameTypeReqDescription
collectionstringyesCreated if missing
keep_otherboolean–Stay in others too
objectsarrayyesNames
parentstring–Parent of a new one

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
alphanumber–Below 1 blends
alpha_cutoffnumber–clip below (0.5)
alpha_modestring–With an image or vertex_color, their alpha
backface_cullingboolean–Hide back faces (true for new)
base_color––[r, g, b(, a)] linear, or '#RRGGBB' sRGB
base_color_imagestring–Image file
emission_color––Alone sets strength 1
emission_imagestring–Image file
emission_strengthnumber–Above 1 glows
facesarray–Indices from get_mesh
facing––World direction
materialstringyesCreated if missing
metallicnumber–0 to 1
normal_imagestring–Image file
objectstring–Mesh to put it on
roughnessnumber–0 to 1
tolerancenumber–Degrees off facing (30)
vertex_colorstring–Color attribute as base colour

No output schema declared.

No examples provided.

set_modifier ~84

Change a modifier's settings, place or visibility. Returns: as add_modifier. WHEN TO CALL: to tune one.

NameTypeReqDescription
indexinteger–Stack position, 0 first
modifierstringyesName
objectstringyesName
settingsobject–By Blender's property names
showboolean–In viewport and render

No output schema declared.

No examples provided.

set_object ~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.

NameTypeReqDescription
displaystring–Viewport
empty_displaystring–An empty's shape: ARROWS, CUBE, SPHERE...
hideboolean–Viewport; export skips it
hide_renderboolean–Renders
objectstringyesName
propertiesobject–JSON values, 8 levels deep; null removes
renamestring–New name
rename_databoolean–Unshared mesh too (default true)

No output schema declared.

No examples provided.

set_parent ~65

Parent an object, or clear its parent. Returns: the transform. WHEN TO CALL: to assemble parts into one node tree.

NameTypeReqDescription
keep_transformboolean–Keep world position (true)
objectstringyesName
parentstring|null–null clears

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
dimensionsarray–Metres, reached by scale
dropboolean|string–Then move along Z to rest on what is below, or on this object
locationarray–Metres, parent space
objectstringyesName
rotationarray–Degrees
scale––Factors

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
attributestring–Default Col, made white
color–yesAs base_color
facesarray–Indices from get_mesh
facing––World direction
objectstringyesName
tolerancenumber–Degrees off facing (30)
use_in_materialboolean–Wire into its materials (true)

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
forceboolean–Undo steps whatever made them
listboolean–Name the steps; undo none
stepsinteger–Default 1

No output schema declared.

No examples provided.

unwrap_uv ~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).

NameTypeReqDescription
marginnumber–Between islands, to 0.1; lightmap to 0.01 (0.01)
methodstring–Default smart
objectstringyesName
uv_mapstring–Made if missing (default active)

No output schema declared.

No examples provided.

Install

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

# add to Claude Code
claude mcp add pzalutski-pixel-blenderlens -- uvx blenderlens-mcp
Common questions

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.