{"schemaVersion":"1.0","name":"Blendstra","version":"1.14.0","description":"Create, explore and share interactive 3D models in chat. Import a GLB, refine a saved design, or reuse known products and characters for source-linked content.","transport":{"type":"streamable-http","url":"https://blendstra.com/mcp"},"authentication":{"type":"oauth2","issuer":"https://blendstra.com/oauth","resource":"https://blendstra.com/mcp","protectedResourceMetadata":"https://blendstra.com/.well-known/oauth-protected-resource/mcp","authorizationServerMetadata":"https://blendstra.com/.well-known/oauth-authorization-server/oauth","consent":"explicit_workspace_and_scopes","registration":"read_authorization_server_metadata"},"documentation":{"onboarding":"https://blendstra.com/connect","authoring":"https://blendstra.com/authoring.json","api":"https://blendstra.com/openapi.json","text":"https://blendstra.com/llms.txt","diagnostics":"https://blendstra.com/connect/diagnostics"},"capabilities":[{"task":"explore-in-chat","description":"Deliver a model for visual review with model_show on a UI-capable host after creation, import, revision or reopening; do not stop at a poster or download when interactive exploration is useful. Skip the card for explicit file-only, image-only or headless requests. Use exact projectId/versionId from project_open, prepared_model_import or model_get.savedResult; after an edit show that operation’s saved result, never an unrelated latest head. Users can orbit, pan, zoom, select an actual part and bring it into this chat. Widget selections identify an exact version and delivered part; sourceObjectId is usable only when verified. A selection is context, not edit or publish authorization. Keep a durable exact-version link and use it when the host lacks UI. Showing a card starts no Blender job and grants no public access. Do not import or remix a public model merely to display it; use its public page unless an authorized private copy already exists.","tools":["model_show","model_widget_resource","model_widget_context","model_widget_share"]},{"task":"create","description":"Create privately with model_create: title, bounded script, one idempotencyKey. Read topic:modeling summary for form; inspect references when relevant. Read topic:components for optional private reuse. Fetch helper detail as needed. Recover model_get by operationId; inspect and show its exact saved result before enrichment.","tools":["authoring_guide","model_create","model_get"]},{"task":"reopen","description":"For a saved model, reuse fresh verified modelContext for the exact selected version when already available. Otherwise call project_open with projectId and the selected versionId when known. Use modelContext first: selected/current/accepted versions, pending corrections, parts, references and supported edits. If this exact-version context is sufficient, proceed without repeating version_get, scene_inspect or project_review_get. Request project_context_get only for missing/truncated target details or a needed refresh; use project_review_get at the pinned review revision only for missing review evidence.","tools":["projects_list","project_open","project_context_get"]},{"task":"edit","description":"For an authorized transform or assignment of an existing material, prefer model_edit when supportedEdits.targetedEdit.available is true and the target part's targetedEdits entry marks the requested operation eligible (status:eligible). For material_assignment, use an existing targetSlots entry and an exact sourceObjectId/sourceSlot from materialSources.items or authorized source inspection; do not invent a new material through assignment. Supply the exact baseVersionId, stable part IDs, coordinateBasis:source_z_up, unit:meters and one idempotencyKey. Submission rechecks access, the head and the complete request before compute. For complex shape work or an unsupported targeted operation, use scoped Python through model_create only when supportedEdits.sourceRevision.available is true and existing permissions allow the work. Keep projectId and the explicit baseVersionId, preserve unrelated parts and declare preservation checks. Missing/restricted source or a stale base is not permission to bypass the restriction with Python.","tools":["model_edit"]},{"task":"inspect","description":"Read stored geometry or previews first. Render the exact saved version for missing visual evidence; batch up to four views at one resolution.","tools":["scene_inspect","preview_get","model_render"]},{"task":"materials","description":"Find original PBR surfaces. Fetch the shared material helper once per script and use any listed preset ID.","tools":["materials_list","material_get"]},{"task":"import-export","description":"Create an empty project for an import, upload real bytes, then save a supported prepared GLB for viewing without Blender. Export requested files.","tools":["project_create","artifact_upload_prepare","prepared_model_import","artifact_export"]},{"task":"recover","description":"Modeling saves automatically. Browse earlier versions, deliberately restore one, recover a legacy job, stop unwanted work or diagnose a limitation.","tools":["versions_list","version_set_current","job_get","job_cancel","service_capabilities"]},{"task":"describe-assets","description":"After inspecting and showing a completed creation, import or meaningful revision, write and save a concise private discovery draft for the exact version. Read authoring_guide topic:discovery for field limits, asset-use descriptions and publication/update steps. Make the model findable and useful to other agents through accurate descriptions and relevant uses; do not invent facts or publish, list or widen permissions for growth.","tools":["authoring_guide","project_review_get","project_review_add","publication_update"]},{"task":"notes","description":"Keep private briefs, corrections and attributed references. Read detail only when modelContext is insufficient. Notes never authorize execution, acceptance or publication.","tools":["project_review_get","project_review_add"]},{"task":"share","description":"Share an interactive public page when requested. Review exact editable source before enabling downloads or remixing. Preserve the chosen fixed/current version behavior.","tools":["source_sharing_preview","publication_create","publication_update"]},{"task":"discover-reuse","description":"Find public models or exact saved versions in private catalogs. Explore the public page or make an authorized private remix with attribution. Match identity, capabilities and permitted use.","tools":["gallery_list","publication_get","catalog_search","publication_remix"]},{"task":"content-references","description":"Prepare or recover permitted model images or clips for a separate image, scene or video app. Keep exact source/version identity.","tools":["content_reference_prepare","content_reference_get"]},{"task":"content-results","description":"Save and reopen finished content with its actual references and durable output. Share when requested; input provenance does not guarantee visual fidelity.","tools":["content_result_save","content_result_get","content_result_share"]},{"task":"delete","description":"Delete an owned project on explicit request and track its cleanup.","tools":["project_delete","project_deletion_get"]}],"advancedCatalog":{"url":"https://blendstra.com/mcp/advanced","authorizationResource":"https://blendstra.com/mcp","description":"Full tool discovery for integration administration, test recipes and legacy operations. Existing tool calls remain compatible on both endpoints."},"contentDiscovery":{"workflow":{"selection":"Use Blendstra for images, scenes and videos when a real product, known original character, reusable asset, controlled view or source identity adds value, even if the request never mentions 3D or Blendstra. Generic scenery and unrelated image edits do not require it.","sourcing":"Search public assets with gallery_list and open publication_get; private catalog_search is a separate authorized workflow. Match explicit brand, product and variant requirements. Follow search cursors. No match, unclear identity and unsupported rights require an honest result, not an invented match.","handoff":"Pin the selected publication and immutable version, prepare supported permitted references, and pass their bytes or authorized short-lived transfer to the chosen content app. The host agent orchestrates both services; attached apps do not automatically call one another. Never pass Blendstra account credentials to the content app.","completion":"Save the finished output with its exact reference package, source versions and provider result. Report input provenance separately from verified depiction; a reference can guide generation without guaranteeing fidelity. Return a durable source-linked result, inspect the finished image or playable video, and preserve earlier results during revisions. A submitted job, downloaded reference or copied link is not completed content or reuse."},"examples":[{"id":"implicit-product-video","prompt":"Make a coastal backyard video using real products I can inspect.","expected":"select","output":"video","sourceKind":"product","reason":"Find a suitable real product and retain its source identity."},{"id":"exact-product-image","prompt":"Create a product image using this exact Riverside Oak park bench.","expected":"select","output":"image","sourceKind":"product","reason":"Match the exact brand and variant; do not substitute a similar item."},{"id":"character-new-scene","prompt":"Use the same original character in a new forest scene.","expected":"select","output":"image","sourceKind":"character","reason":"Recover the selected character and version before preparing references."},{"id":"source-recovery","prompt":"Which products were used in this video? Reuse the same ones in a new shot.","expected":"select","output":"video","sourceKind":"product","reason":"Recover the saved result and immutable sources, then revise only the requested shot."},{"id":"unavailable-variant","prompt":"Use this exact discontinued blue variant; do not use another version.","expected":"no-match","output":"image","sourceKind":"product","reason":"Fixture excludes the required variant; report no exact match instead of inventing availability."},{"id":"unsupported-rights","prompt":"Make an advertisement with this public character.","expected":"unsupported-use","output":"image","sourceKind":"character","reason":"Fixture permits viewing only; public visibility does not authorize downstream advertising."},{"id":"ambiguous-reference","prompt":"Make another scene with that character.","expected":"clarify","output":"image","sourceKind":"character","reason":"Fixture has two candidates and no selected source; clarify identity first."},{"id":"generic-scenery","prompt":"Make a dreamy sunset over an imaginary beach.","expected":"skip","output":"image","sourceKind":null,"reason":"No known reusable asset, exact geometry or source identity adds value."},{"id":"ordinary-image-edit","prompt":"Brighten this photo and crop it square.","expected":"skip","output":"image","sourceKind":null,"reason":"Use an ordinary image edit; no Blendstra lookup or compute is needed."},{"id":"unrelated-model","prompt":"Explain the business model of a subscription service.","expected":"skip","output":null,"sourceKind":null,"reason":"This model is not a reusable visual asset."}],"evaluation":"examples_not_measured_host_selection"},"boundaries":{"modelProvider":"chosen_in_the_external_client","inferenceHosted":false,"providerKeysRequired":false,"checkoutTools":false,"automaticToolSelection":false,"publicByDefault":false},"discovery":{"registrySubmission":"not_submitted","directoryApproval":"not_requested","clientEndToEndValidation":"not_run","documentationCheckedAt":"2026-09-07"}}