Your compute
Your agent or model sends bounded movements over the internet. Local drivers/controllers enforce limits. Network latency constrains the control loop; WAN timing and physical stops need qualification.
DEVELOPER GUIDE / 23 OCTOBER 2026
Give your agent the room contracts. Keep your model, controller and decisions. Retrieve the original evidence.
The working prototype runs in local software simulation. This website hosts documentation and a concept of the planned service. It exposes no robot API or hosted MCP endpoint.
01 / CONNECT
The MCP host starts a Python process over stdio. That process talks to an existing room API. Start with the onboarding tool profile to inspect access guidance, candidates and their documentation.
physical-ai-lab/, use Python 3.11+ and an existing environment where possible. Install the MCP extra with .venv/bin/python -m pip install -e '.[mcp]'. The getting-started guide covers service startup, native qualification and owner setup./console. Discovery needs read. Supply PAL_API_KEY using your MCP host's secret mechanism. Keep it out of prompts, source files and shared config.{
"mcpServers": {
"actuator-science": {
"command": "/absolute/path/physical-ai-lab/.venv/bin/python",
"args": ["-m", "physical_ai_lab.mcp_server"],
"env": {
"PAL_API_URL": "http://127.0.0.1:8000",
"PAL_MCP_TOOL_PROFILE": "onboarding"
}
}
}
}Configure PAL_API_KEY separately on the MCP host. Without it, workshop_room_onboarding still returns packaged guidance; API tools return credential_required without making an API call. The default room profile has only the twelve booked-room tools, so select onboarding for discovery.
02 / DISCOVERY
Start with the customer's actual implementation and fixed experiment requirements. Ask the server for published candidates, then read each promising configuration's exact contract and documents. Follow pagination; the first page is not necessarily the complete catalogue.
| Tool | Purpose |
|---|---|
workshop_room_onboarding | Keyless access and selection guidance. |
workshop_room_catalog | Published candidates, qualification, preview availability and prices. Parameters: project_id, limit, offset. |
workshop_room_capabilities | Exact room_id + configuration_id under the project: channels, cameras, timing, state policy and gaps. |
workshop_room_documentation | Version-matched guide by doc_id returned in the capabilities. |
workshop_find_farm_capacity | Check the intended UTC window. Reading a candidate's preview window reserves nothing. |
workshop_observe_room_booking | Read original images, interface and outcome from an existing booking. |
workshop_export_room_booking | Retrieve original result/export references, including failures. |
Supported documentation IDs are selection, so100, nexarm-pair, nexarm-continuous and python-policy. Use the schemas discovered from your running server; this table is a guide, not a replacement for them.
“Inspect my policy's action units, camera inputs and timing. Compare published room configurations. Explain any adapter work or missing evidence. If none fits, stop and tell me why. Do not book or run yet.”
03 / COMPATIBILITY
A matching tensor shape or robot name is insufficient. Check embodiment and gripper meaning, named action channels and units, coordinate frames, camera mounts and calibration, inference/control timing, initial-state promises and the required outcome measurements.
| Configuration family | Control & observations | Client fit |
|---|---|---|
| SO100 paused | Six radian position-target channels. Physics pauses between actions. Camera sources depend on the published scene. | Booked starter or generic paused ExecutionLoop with an explicit adapter. |
| Paired NexArm paused | Twelve radian target channels. Overview + left/right wrist RGB. Physics pauses between actions. | Generic paused loop and explicit NexArm sensing/decoder integration. |
| Paired NexArm continuous | Twelve channels at 20 Hz. One overview RGB source. Physics continues during inference. | Existing RobotClient forecast/feedback runner; wrist views are absent. |
These are simulation contracts, not physical equipment offers. Nominal camera targets are not delivered minimum-rate guarantees. A custom multiview model integration ran locally but missed its fixed 2 Hz source requirement. Qualification, experiment fit and slot availability are separate checks. “No compatible room” is a valid answer.
04 / AUTHORITY
A key or installed tool does not establish spending consent. Obtain any missing scoped access, a finite owner-approved limit and execution consent. The current prototype uses development-credit grants; monetary funding and a full USD approval journey remain planned.
After compatibility and model warmup: save the exact configuration, prepare its declared state, obtain a quote, check capacity, hold and confirm the finite booking. The existing tools include workshop_save_room_experiment, workshop_prepare_room_experiment, workshop_quote_room_experiment, workshop_hold_farm_capacity and workshop_confirm_farm_hold.
Read the confirmed booking's starter, limits and original observation before control. Preserve exact request bodies and idempotency keys for uncertain retries. Inspect applied commands, failures, stop evidence, final results and reconciled usage. Installing this integration grants no physical authority.
05 / PYTHON
The standalone actuator-rooms-sdk development wheel exposes actuator_sdk. The current local version is 0.1.10; this is not a published PyPI release. Install the reviewed local wheel using the SDK source guide.
import asyncio
import os
from actuator_sdk import RoomDirectory
async def inspect():
async with RoomDirectory(
os.environ["ACTUATOR_URL"],
os.environ["PROJECT_ID"],
os.environ["ACTUATOR_TOKEN"],
) as rooms:
offset = 0
while True:
page = await rooms.catalog(limit=25, offset=offset)
for candidate in page["candidates"]:
details = await rooms.capabilities(
candidate["room_id"],
candidate["configuration_id"],
)
print(details)
for doc_id in details["document_ids"]:
print(await rooms.documentation(doc_id))
if not page["pagination"]["has_more"]:
break
offset += page["pagination"]["limit"]
asyncio.run(inspect())ObservationClient reads original named RGB cameras independently of arm control. Device adapters declare hardware-specific channels, units and limits. Customer policies supply preprocessing, inference and decoding. The generic paused loop and the NexArm-specific continuous runner have different contracts; neither is a universal model adapter.
06 / EXECUTION LOCATION
The on-site option requires an all-in room/workstation/staging quote, finite runtime and separate admission. No model upload, hosted GPU rental or physical control is available through this website. The existing local software-simulation paths above can be developed and tested now.
07 / PRICING STATUS
The website's single-arm examples use the owner's US$80/hour rate: six minutes is US$8. Optional US$5 preparation is another design example. Dual-arm US$70, dexterity US$115, humanoid US$225 and mobile US$105 per hour come from the saved Pro business-model research, dated 22 October 2026. They are unvalidated hypotheses, not approved commercial prices or measured willingness to pay.
The current local service separately previews US$20 per room-hour and settles development credits; it collects no money. The website estimator does not modify it. A real quote must pin the configuration, state, window, compute and all charges, then be compared with the owner's cap. Unknown compute costs cannot be treated as zero.
SOURCE GUIDES
Download the current repository guides as Markdown. These source copies include their repository-relative cross-references; the web guide above provides the self-contained starting path.