Adapt Synthetic World¶
Adapt Synthetic World — mvp.adapt_synthetic_world
Cluster: Physical AI | Type: component | MCP Tools: 31
Overview¶
Paid computer-use API
computer_use_click, computer_use_type, and computer_use_screenshot are blocked unless allow_paid_api=True. When ANTHROPIC_API_KEY is configured, these operations may call the Anthropic API and incur billing per input/output token. Set ADAPT_SYNTHETIC_WORLD_COMPUTER_USE_MODEL to control the default model, or pass tool_args["model"] per call. Without an API key, the component uses a simulation fallback.
Heightmap mesh output
heightmap_to_mesh returns full vertex and face arrays in metadata.vertices and metadata.faces. The text field is only a preview for display/logging.
Pilot readiness
This component is suitable for pilot workflows that need procedural scenes, terrain generation, named world snapshots, MCP-accessible state, and constrained backend discovery/native calls. It is not a full simulation engine, robotics stack, renderer, browser-control product, or complete adapter over every backend dependency. Treat computer-use operations as a guarded beta path, and treat scene/query persistence as lightweight workflow state rather than an audit-grade datastore.
Backend adapter lane
The backend adapter ops (backend_capabilities, backend_op_schema, backend_probe, backend_native_call) expose a constrained, typed, audited passthrough layer for procedural_terrain, scene_graph, sqlite_store, and anthropic_computer_use. Native calls are allowlisted by backend and operation, support dry_run=True, and surface degraded/blocked states through completion_state, warning_card, and evidence. Capability discovery should be used before native calls.
Synthetic world builder that generates procedural terrains (diamond-square and Perlin noise algorithms), manages a scene graph of named 3D objects with transform operations, and supports guarded computer-use automation (click, type, screenshot) for headless UI interaction. Worlds can be exported as JSON or mesh data, saved and loaded by name, merged together, and queried by natural-language descriptions. The scene graph is persistent within a block instance, making it suitable for stateful simulation loops.
When to use:
- Generating heightmap terrains for synthetic training datasets or reinforcement-learning environments
- Building and manipulating a scene graph of objects for physical-AI simulation
- Automating UI interactions (form filling, navigation) through the computer-use operations
- Creating and persisting named world states that can be shared across agent steps
- Discovering backend capabilities and running constrained dry-run/native calls with branchable degradation evidence
Example:
from mvp.adapt_synthetic_world import AdaptSyntheticWorldBlock, SyntheticWorldInput
block = AdaptSyntheticWorldBlock(name="world")
result = block.infer(SyntheticWorldInput(
op="generate_terrain",
width=64,
height=64,
algorithm="diamond_square",
roughness=0.6,
seed=42,
))
# result.value.heightmap → 64×64 list of float elevation values
Works well with: adapt_physical_ai, adapt_blender, adapt_generative_art
Production Notes¶
This component is useful when a user needs a simple synthetic environment that can be built up over several MCP calls. For first-user and design-partner pilots, the strongest paths are:
generate_terrainandgenerate_perlinfor bounded procedural heightmapsadd_object, transform operations,set_parent, andexport_scenefor scene-graph workflowsworld_save,world_load,world_list, andworld_deletefor named snapshots backed by SQLite in the MCP packageheightmap_to_meshfor exporting terrain into a simple triangle mesh representation
Known caveats:
- This is a lightweight procedural scene builder, not a physics simulator. Use
adapt_physical_ai,physics_prediction, or a dedicated simulator when physical dynamics matter. - Computer-use operations require
allow_paid_api=True. With an Anthropic API key they may incur API charges; without a key they return a simulation fallback. Do not present these operations as mature browser automation. - MCP persistence stores world snapshots and logs in SQLite. Object/query tables are intentionally lightweight and should not be treated as complete observability or compliance records.
- Scene queries are simple name/type matching, not semantic search over arbitrary scene meaning.
- Terrain generation is bounded to protect local resources. Very large scenes or high-fidelity rendering should be delegated to a dedicated renderer or asset pipeline.
- Backend-native calls are an advanced passthrough adapter layer, not raw provider passthrough. Unknown backends, operations, parameters, oversized payloads, timeout overages, paid/network calls without opt-in, and unavailable dependencies return
completion_state="blocked-escalated"with a non-emptywarning_cardandevidence.
Backend adapter examples:
block.infer(SyntheticWorldInput(op="backend_capabilities"))
block.infer(SyntheticWorldInput(
op="backend_op_schema",
backend_id="anthropic_computer_use",
target_op="screenshot",
))
block.infer(SyntheticWorldInput(
op="backend_native_call",
backend_id="scene_graph",
target_op="add_object",
params={"name": "preview_cube"},
dry_run=True,
))
Public API¶
SyntheticWorldInput(BaseModel)¶
Input to AdaptSyntheticWorldBlock.
| Field | Type | Default |
|---|---|---|
op | Literal['generate_terrain', 'generate_perlin', 'set_roughness', 'add_object', 'remove_object', 'move_object', 'rotate_object', 'scale_object', 'list_objects', 'get_object', 'set_parent', 'export_scene', 'import_scene', 'computer_use_click', 'computer_use_type', 'computer_use_screenshot', 'world_save', 'world_load', 'world_list', 'world_delete', 'query_scene', 'merge_worlds', 'heightmap_to_mesh', 'stats', 'get_info', 'backend_capabilities', 'backend_op_schema', 'backend_probe', 'backend_native_call'] | 'generate_terrain' |
width | int | 64 |
height | int | 64 |
seed | int | -1 |
algorithm | str | 'diamond_square' |
roughness | float | 0.5 |
objects | list[dict] | Field(default_factory=list) |
object_name | str | '' |
transform | dict | Field(default_factory=dict) |
parent | str | '' |
command | str | '' |
tool_name | str | '' |
tool_args | dict | Field(default_factory=dict) |
world_name | str | '' |
export_format | str | 'json' |
export_path | str | '' |
query | str | '' |
name | str | '' |
scene_data | dict | Field(default_factory=dict) |
allow_paid_api | bool | False |
backend_id | str | '' |
target_op | str | '' |
params | dict[str, Any] | Field(default_factory=dict) |
allow_network | bool | False |
dry_run | bool | False |
timeout_ms | int | 5000 |
max_response_bytes | int | 65536 |
request_id | str | '' |
task_id | str | '' |
run_id | str | '' |
SyntheticWorldOutput(BaseModel)¶
Output from AdaptSyntheticWorldBlock.
| Field | Type | Default |
|---|---|---|
op | str | required |
heightmap | list[list[float]] | Field(default_factory=list) |
objects | list[dict] | Field(default_factory=list) |
scene_graph | dict | Field(default_factory=dict) |
output_path | str | '' |
data_base64 | str | '' |
text | str | '' |
metadata | dict | Field(default_factory=dict) |
backend | str | '' |
simulation | bool | False |
degraded | bool | False |
degradation_reason | str | '' |
completion_state | str | 'qualified-draft' |
warning_card | str | '' |
evidence | dict[str, Any] | Field(default_factory=dict) |
request_id | str | '' |
task_id | str | '' |
run_id | str | '' |
AdaptSyntheticWorldBlock(AIBlock[SyntheticWorldInput, SyntheticWorldOutput, dict])¶
Synthetic world generation and management block (25 ops).
| Field | Type | Default |
|---|---|---|
name | str | 'adapt_synthetic_world' |
state | dict | field(default_factory=dict) |
resource_bounds | ResourceBounds | field(default_factory=ResourceBounds) |
usage | ResourceUsage | field(default_factory=ResourceUsage) |
Methods:
infer(data: SyntheticWorldInput) -> Result[SyntheticWorldOutput]¶
MCPSyntheticWorldInput(BaseModel)¶
Input to AdaptSyntheticWorldMCPBlock — 27 ops (25 core + 2 advisory).
| Field | Type | Default |
|---|---|---|
op | Literal['generate_terrain', 'generate_perlin', 'set_roughness', 'add_object', 'remove_object', 'move_object', 'rotate_object', 'scale_object', 'list_objects', 'get_object', 'set_parent', 'export_scene', 'import_scene', 'computer_use_click', 'computer_use_type', 'computer_use_screenshot', 'world_save', 'world_load', 'world_list', 'world_delete', 'query_scene', 'merge_worlds', 'heightmap_to_mesh', 'stats', 'get_info', 'recommend_terrain_algorithm', 'list_patterns', 'backend_capabilities', 'backend_op_schema', 'backend_probe', 'backend_native_call'] | required |
width | int | 64 |
height | int | 64 |
seed | int | -1 |
algorithm | str | 'diamond_square' |
roughness | float | 0.5 |
objects | list[dict] | Field(default_factory=list) |
object_name | str | '' |
transform | dict | Field(default_factory=dict) |
parent | str | '' |
command | str | '' |
tool_name | str | '' |
tool_args | dict | Field(default_factory=dict) |
world_name | str | '' |
name | str | '' |
export_format | str | 'json' |
export_path | str | '' |
scene_data | dict | Field(default_factory=dict) |
query | str | '' |
top_k | int | 10 |
allow_paid_api | bool | False |
target_op | str | 'generate_terrain' |
roughness_controlled | bool | False |
terrain_character | str | '' |
backend_id | str | '' |
params | dict[str, Any] | Field(default_factory=dict) |
allow_network | bool | False |
dry_run | bool | False |
timeout_ms | int | 5000 |
max_response_bytes | int | 65536 |
request_id | str | '' |
task_id | str | '' |
run_id | str | '' |
MCPSyntheticWorldOutput(BaseModel)¶
Output from AdaptSyntheticWorldMCPBlock.
| Field | Type | Default |
|---|---|---|
op | str | required |
heightmap | list[list[float]] | Field(default_factory=list) |
objects | list[dict] | Field(default_factory=list) |
scene_graph | dict | Field(default_factory=dict) |
output_path | str | '' |
data_base64 | str | '' |
text | str | '' |
metadata | dict | Field(default_factory=dict) |
backend | str | '' |
simulation | bool | False |
message | str | '' |
count | int | 0 |
retrieved | list[dict] | Field(default_factory=list) |
degraded | bool | False |
degradation_reason | str | '' |
completion_state | str | 'qualified-draft' |
warning_card | str | '' |
evidence | dict[str, Any] | Field(default_factory=dict) |
request_id | str | '' |
task_id | str | '' |
run_id | str | '' |
patterns | list[dict] | Field(default_factory=list) |
SyntheticWorldStore¶
SQLite-backed store for the adapt_synthetic_world MCP sub-package.
Constructor:
| Parameter | Type | Default |
|---|---|---|
db_path | str | ':memory:' |
Methods:
save_world(name: str, scene: dict, heightmap: list = None, roughness: float = 0.5, tags: str = '') -> str¶
load_world(name: str) -> dict | None¶
list_worlds(limit: int = 50) -> list[dict]¶
delete_world(name: str) -> bool¶
store_scene(world_name: str, scene: dict, fmt: str = 'json') -> str¶
log_terrain(world_name: str, algorithm: str, width: int, height: int, roughness: float, seed: int) -> str¶
register_object(name: str, mesh_type: str, transform: dict, parent: str = '__root__', world_name: str = '') -> str¶
log_computer_use(action: str, tool_name: str, args: dict, result: str = '') -> None¶
log_query(query: str, result_count: int) -> None¶
log_error(op: str, error_message: str, params: dict | None = None) -> None¶
count_all() -> dict[str, int]¶
AdaptSyntheticWorldMCPBlock(AIBlock[MCPSyntheticWorldInput, MCPSyntheticWorldOutput, dict])¶
27-op synthetic world MCP block with SQLite persistence (25 core + 2 advisory).
| Field | Type | Default |
|---|---|---|
name | str | 'adapt_synthetic_world_mcp' |
state | dict | field(default_factory=dict) |
db_path | str | field(default_factory=lambda: os.environ.get('SYNTHETIC_WORLD_DB_PATH', _DEFAULT_DB)) |
resource_bounds | ResourceBounds | field(default_factory=ResourceBounds) |
usage | ResourceUsage | field(default_factory=ResourceUsage) |
agentic_planner | TerrainPlanner \| None | None |
Methods:
infer(data: MCPSyntheticWorldInput) -> Result[MCPSyntheticWorldOutput]¶
MCP Tools¶
| Operation | Source |
|---|---|
generate_terrain | synthetic_world_mcp |
generate_perlin | synthetic_world_mcp |
set_roughness | synthetic_world_mcp |
add_object | synthetic_world_mcp |
remove_object | synthetic_world_mcp |
move_object | synthetic_world_mcp |
rotate_object | synthetic_world_mcp |
scale_object | synthetic_world_mcp |
list_objects | synthetic_world_mcp |
get_object | synthetic_world_mcp |
set_parent | synthetic_world_mcp |
export_scene | synthetic_world_mcp |
import_scene | synthetic_world_mcp |
computer_use_click | synthetic_world_mcp |
computer_use_type | synthetic_world_mcp |
computer_use_screenshot | synthetic_world_mcp |
world_save | synthetic_world_mcp |
world_load | synthetic_world_mcp |
world_list | synthetic_world_mcp |
world_delete | synthetic_world_mcp |
query_scene | synthetic_world_mcp |
merge_worlds | synthetic_world_mcp |
heightmap_to_mesh | synthetic_world_mcp |
stats | synthetic_world_mcp |
get_info | synthetic_world_mcp |
recommend_terrain_algorithm | synthetic_world_mcp |
list_patterns | synthetic_world_mcp |
backend_capabilities | synthetic_world_mcp |
backend_op_schema | synthetic_world_mcp |
backend_probe | synthetic_world_mcp |
backend_native_call | synthetic_world_mcp |