This repository exposes a large local MCP surface for LichtFeld Studio. When the task is to drive the app, inspect runtime state, manipulate the GUI, run training, edit selections, or export data, prefer MCP discovery before reading C++.
- MCP server config lives in
.mcp.json. - Repo MCP config launches
scripts/lichtfeld_mcp_bridge.py, which starts LichtFeld Studio and then proxies MCP over the local HTTP endpoint. - Default HTTP endpoint after startup:
http://localhost:45677/mcp. - Initialize first, then use
tools/listandresources/list. - Read these resources before guessing tool names or argument shapes:
lichtfeld://runtime/cataloglichtfeld://runtime/statelichtfeld://ui/statelichtfeld://scene/statelichtfeld://selection/current
Pull narrower resources only when needed:
lichtfeld://ui/toolslichtfeld://ui/menuslichtfeld://ui/panelslichtfeld://operators/registrylichtfeld://operators/modal_statelichtfeld://scene/nodeslichtfeld://scene/selected_nodeslichtfeld://runtime/jobs/<job_id>lichtfeld://runtime/events/<event_type>
- Prefer the bridge-backed
.mcp.jsonentry when you want Codex to start LichtFeld for you. Use the raw HTTP endpoint only if LichtFeld is already running. - Prefer resources for discovery and current state; use tools for mutations.
- Check tool metadata before invoking:
category,kind,runtime,thread_affinity,destructive,long_running,user_visible. - For long-running operations, pair the mutating call with
runtime.job.describe,runtime.job.wait, orruntime.events.tailinstead of sleeping. - Do not guess operator ids, menu paths, panel ids, or UI tool ids. Read
operators/registry,ui/tools, orui/menusfirst. - After selection writes, confirm with
selection.getorlichtfeld://selection/current. - Scene exports are synchronous in the current GUI implementation.
scene.export_statusreports idle semantics andscene.export_cancelcannot stop an export once started. editor.runcan wait inline. For longer scripts, useeditor.is_running,editor.wait, andeditor.get_output.
training.maineditor.pythonimport.datasetexport.sceneexport.videooperator.modal
scene.load_datasetorscene.load_checkpoint- read
lichtfeld://scene/state training.start- watch
training.mainthroughruntime.job.*orruntime.events.tail
- read
lichtfeld://ui/state - inspect
lichtfeld://ui/tools,lichtfeld://ui/menus, orlichtfeld://operators/registry - call
ui.*oroperator.* - if the tool goes modal, watch
operator.modalandlichtfeld://operators/modal_state
- use
selection.rect,selection.click,selection.brush,selection.lasso, orselection.by_description - verify via
selection.getorlichtfeld://selection/current - then call
gaussians.read,gaussians.write,transform.*,scene.*, oroperator.invoke
See docs/docs/development/mcp/ for the repo-local MCP guide and workflow recipes.