Skip to content

Motor Control

Motor Control — mvp.motor_control

Cluster: Physical AI | Type: component | MCP Tools: 28

Overview

Action-safety metaphor, not physical motor control

motor_control gates software actions using an impedance-style confidence model. It does not send commands to physical motors.

Impedance-style action gating block that governs simulated software action execution through a stiffness/damping model and a human-in-the-loop safety gate. Maintains a library of reusable action primitives, records motor memory for sequence replay, and enforces a safe-state fallback when risk thresholds are exceeded. Action types span file writes, code execution, API calls, PLC writes, and G-code execution - all subject to impedance and approval checks, but returned execution is simulated.

When to use:

  • Dry-running high-risk software, G-code, or PLC-style actions before a separate executor performs real side effects
  • Tuning stiffness/damping parameters to model confidence and conservatism in an action pipeline
  • Recording and replaying named action sequences across sessions via motor memory

Example:

from mvp.motor_control import MotorControlBlock, MotorControlInput

block = MotorControlBlock(name="motor_control")
result = block.infer(MotorControlInput(
    op="safety_check",
    action_type="gcode_execute",
    action_params={"gcode": "G0 X10 Y10 Z5"},
))
# result.value.safety_approved -> bool; result.value.safety_reason -> str

Works well with: action_gating, integration

Public API

MotorControlBlock(AIBlock[MotorControlInput, MotorControlOutput, dict])

Impedance-based motor control block (15 ops).

Field Type Default
name str 'motor_control'
state dict field(default_factory=dict)
resource_bounds ResourceBounds field(default_factory=ResourceBounds)
usage ResourceUsage field(default_factory=ResourceUsage)
impedance_bounds ImpedanceBounds field(default_factory=ImpedanceBounds)

Methods:

infer(data: MotorControlInput) -> Result[MotorControlOutput]

MotorControlInput(BaseModel)

Input to MotorControlBlock.

Field Type Default
op Literal['execute_action', 'plan_action', 'set_impedance', 'get_impedance', 'adjust_impedance', 'add_primitive', 'list_primitives', 'get_motor_memory', 'record_action', 'safety_check', 'batch_approve', 'get_safe_state', 'enter_safe_state', 'get_info', 'reset', 'ops', 'help'] required
action_type str ''
action_params dict Field(default_factory=dict)
k float 0.6
c float 0.2
primitive_name str ''
primitive_cost float 0.0
primitive_risk float 0.0
actions list[dict] Field(default_factory=list)
sequence_name str ''
metadata dict Field(default_factory=dict)

MotorControlOutput(BaseModel)

Output from MotorControlBlock.

Field Type Default
op str required
action_executed bool False
action_result dict Field(default_factory=dict)
k float 0.0
c float 0.0
impedance_mode str ''
safety_approved bool False
safety_reason str ''
primitives list[dict] Field(default_factory=list)
motor_memory list[dict] Field(default_factory=list)
batch_results list[dict] Field(default_factory=list)
is_safe_state bool False
metadata dict Field(default_factory=dict)
completion_state Literal['verified', 'qualified-draft', 'blocked-escalated'] 'qualified-draft'
warning_card dict Field(default_factory=dict)
evidence dict Field(default_factory=dict)
degraded bool False
degradation_reason str \| None None

MotorControlMCPBlock(AIBlock[MCPMotorControlInput, MCPMotorControlOutput, dict])

26-op motor control MCP block with SQLite persistence.

Field Type Default
name str 'motor_control_mcp'
state dict field(default_factory=dict)
db_path str field(default_factory=lambda: os.environ.get('MOTOR_CONTROL_DB_PATH', _DEFAULT_DB))
resource_bounds ResourceBounds field(default_factory=ResourceBounds)
usage ResourceUsage field(default_factory=ResourceUsage)

Methods:

infer(data: MCPMotorControlInput) -> Result[MCPMotorControlOutput]

MCPMotorControlInput(BaseModel)

Input to MotorControlMCPBlock — 26 ops.

Field Type Default
op Literal['execute_action', 'plan_action', 'set_impedance', 'get_impedance', 'adjust_impedance', 'add_primitive', 'list_primitives', 'get_motor_memory', 'record_action', 'safety_check', 'batch_approve', 'get_safe_state', 'enter_safe_state', 'get_info', 'reset', 'ops', 'help', 'store_impedance_profile', 'load_impedance_profile', 'list_impedance_profiles', 'store_action_sequence', 'list_action_sequences', 'replay_sequence', 'search_primitives', 'get_action_stats', 'compare_impedance', 'export_motor_config', 'list_patterns'] required
action_type str ''
action_params dict Field(default_factory=dict)
k float 0.6
c float 0.2
primitive_name str ''
primitive_cost float 0.0
primitive_risk float 0.0
actions list[dict] Field(default_factory=list)
sequence_name str ''
metadata dict Field(default_factory=dict)
profile_name str ''
query str ''
top_k int 10
compare_id str ''
sequence_json str ''

MCPMotorControlOutput(BaseModel)

Output from MotorControlMCPBlock.

Field Type Default
op str required
action_executed bool False
action_result dict Field(default_factory=dict)
k float 0.0
c float 0.0
impedance_mode str ''
safety_approved bool False
safety_reason str ''
primitives list[dict] Field(default_factory=list)
motor_memory list[dict] Field(default_factory=list)
batch_results list[dict] Field(default_factory=list)
is_safe_state bool False
metadata dict Field(default_factory=dict)
message str ''
count int 0
retrieved list[dict] Field(default_factory=list)
completion_state Literal['qualified-draft', 'blocked-escalated'] 'qualified-draft'
warning_card dict Field(default_factory=dict)
evidence dict Field(default_factory=dict)
degraded bool False
degradation_reason str \| None None

MotorControlStore

SQLite-backed store for the motor_control MCP sub-package.

Constructor:

Parameter Type Default
db_path str ':memory:'

Methods:

store_impedance_profile(name: str, k: float, c: float, mode: str = '', tags: str = '') -> str

load_impedance_profile(name: str) -> dict | None

list_impedance_profiles(limit: int = 50) -> list[dict]

store_action_sequence(name: str, sequence: list, tags: str = '') -> str

load_action_sequence(name: str) -> dict | None

list_action_sequences(limit: int = 50) -> list[dict]

log_action(action_type: str, params: dict, k: float, c: float, approved: bool, reason: str = '') -> str

get_action_stats() -> dict

log_safety_check(action_type: str, k: float, risk: float, approved: bool, reason: str = '') -> None

store_motor_memory(name: str, actions: list, metadata: dict | None = None) -> str

list_motor_memory(limit: int = 50) -> list[dict]

log_error(op: str, error_message: str, params: dict | None = None) -> None

count_all() -> dict[str, int]

MCP Tools

Operation Source
execute_action motor_control_mcp
plan_action motor_control_mcp
set_impedance motor_control_mcp
get_impedance motor_control_mcp
adjust_impedance motor_control_mcp
add_primitive motor_control_mcp
list_primitives motor_control_mcp
get_motor_memory motor_control_mcp
record_action motor_control_mcp
safety_check motor_control_mcp
batch_approve motor_control_mcp
get_safe_state motor_control_mcp
enter_safe_state motor_control_mcp
get_info motor_control_mcp
reset motor_control_mcp
ops motor_control_mcp
help motor_control_mcp
store_impedance_profile motor_control_mcp
load_impedance_profile motor_control_mcp
list_impedance_profiles motor_control_mcp
store_action_sequence motor_control_mcp
list_action_sequences motor_control_mcp
replay_sequence motor_control_mcp
search_primitives motor_control_mcp
get_action_stats motor_control_mcp
compare_impedance motor_control_mcp
export_motor_config motor_control_mcp
list_patterns motor_control_mcp