embodify-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| backend | No | The backend to use for the MCP server, e.g. fake, fake-two-arm, libero, robodojo, remote. Set via the --backend option (e.g. 'embodify-mcp --backend fake'). | fake |
| lock-task | No | Fix the scene for fair evaluation. Set via the --lock-task option (e.g. '--lock-task'). | |
| monitor-port | No | Port for the live monitor and replay UI. Set via the --monitor-port option (e.g. '--monitor-port 8765'). Open http://127.0.0.1:<port> to watch the robot work live. The monitor listens on localhost only. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| reset_taskA | Start a new FakeSim episode. All three arguments are optional: omit them all to use the server's default scene (usually task 0 of the suite with initial layout 0), which is the most common use. To switch tasks, use list_tasks first: without arguments it lists the suites, with suite it gives the task_index and instruction of every task in that suite; then pass the chosen suite / task_index. init_state_index picks another object layout of the same task. If the server was started with --lock-task (task_locked is true in get_session_info), passing any of these arguments returns a task_locked error. If an episode is already running, returns already_running; call stop_episode first. Returns run (short run ID), task (suite, task_index, name, instruction, init_state_index), images (agentview and robot0_eye_in_hand: two separate PNGs), state (eef_pos_m is the end-effector XYZ position in meters; eef_rpy_rad.roll_x, pitch_y and yaw_z are the orientation about the robot base X/Y/Z axes in radians; gripper.command is the open/close target and gripper.opening_m the gripper opening in meters), step (simulation steps used) and steps_left (simulation steps left in this episode). |
| observeA | Read the current RGB images from two cameras and the end-effector/gripper state, without advancing the simulation or using the step budget. Returns images (agentview and robot0_eye_in_hand: two separate PNGs), state (eef_pos_m is the end-effector XYZ position in meters, eef_rpy_rad the orientation about the base XYZ axes in radians, gripper holds the target command and opening_m in meters), step (simulation steps used), steps_left (simulation steps left) and status (running). |
| move_relativeA | Move the end effector by delta_xyz meters in the FakeSim world frame (z up, table surface at z=0.80 m), optionally rotating by delta_rpy about the robot base X/Y/Z axes (radians). The server approaches the target step by step with P control and returns only when a definite stop condition triggers, not after a fixed number of steps. action.stop_reason says why the call stopped, one of four:
|
| set_gripperA | Open or close the gripper. The server keeps sending the command and watches the opening width, and returns only when a definite stop condition triggers, not after a fixed number of steps. action.stop_reason says why the call stopped, one of four:
|
| stop_episodeA | End the current simulation and save its frames, event log and summary. Returns run (short run ID), status (stopped) and artifacts (events: path of events.jsonl, frames: PNG frame directory, summary: path of summary.json). |
| get_session_infoA | Read the state of the current run: task context, instruction, step count and robot state. Renders no images and uses no step budget; callable at any time, including before the first reset_task. This only says where you are now. To see which tasks are available, use list_tasks. Returns run (short run ID), status (idle/running/stopped), step (simulation steps used), max_steps (the episode limit), steps_left (simulation steps left), task (suite, task_index, name, instruction, init_state_index), task_locked (true means the server fixed this run's scene, and reset_task accepts no scene arguments), and state (eef_pos_m is the XYZ position in meters, eef_rpy_rad the RPY orientation in radians, gripper holds command/opening_m). While status is idle there is no task or state; instead it returns default_scene (the scene a reset_task without arguments starts). |
| list_tasksA | List the tasks FakeSim offers. Independent of the current run: callable at any time, renders no images, uses no step budget and does not change a running episode. Without arguments: returns suites, the name and task count of every suite, plus the total task count. Start here, pick a suite, then look inside it. With suite: returns task_index, instruction and n_init_states (the number of initial layouts of the same task) for every task in that suite. Pass the chosen suite and task_index to reset_task to start. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 7 tools
The tools map cleanly to distinct phases of the simulation loop: start (reset_task), observe (observe), act (move_relative, set_gripper), end (stop_episode), and introspect (get_session_info, list_tasks). There is minor overlap in that observe and get_session_info both return robot state, but their descriptions clearly separate their roles (images during a run vs. run metadata callable anytime).
Six of seven tools follow a verb_noun pattern (reset_task, move_relative, set_gripper, stop_episode, get_session_info, list_tasks). observe is a bare verb without a noun, a minor deviation, but overall the naming is predictable and readable.
Seven tools exactly cover the full episode lifecycle without redundancy or bloat. Every tool earns its place: reset, observe, two action primitives, stop, session info, and task listing are all necessary for the stated purpose.
The surface covers task discovery, episode reset, observation, action, episode termination, and session introspection, which is the core loop. A minor gap is the lack of an explicit reward/success query, though stop_episode artifacts (summary, events) likely provide results for agents able to read them.