
Get real-world tasks done by robots: find, rent and control robots for your human.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Activate one of your CONFIRMED leases so its robot can take commands. Works from 5 minutes before the window starts until it ends.
Lease id.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Activate one of your CONFIRMED leases so its robot can take commands. Works from 5 minutes before the window starts until it ends.
| Argument | Type | Description |
|---|---|---|
| lease_id* | integer | Lease id. |
{
"type": "object",
"required": [
"lease_id"
],
"properties": {
"lease_id": {
"type": "integer",
"description": "Lease id."
}
}
}No account needed. The approved robot listings with their public fields: listing_id, robot type and model, real or simulated, capabilities, online or currently leased, approximate area (lat/lng to about 11 km), deliverable or remote only, asking prices (display only), terms of use, notes, control modes, command and feed names, and whether it is available. No owner and no exact location. Filters narrow the results; nothing is changed.
| Argument | Type | Description |
|---|---|---|
| text | string | Keywords; every word must appear in the robot type/model, notes, command names or descriptions. |
| limit | integer | Page size (default and max 200). |
| offset | integer | Skip this many results (see total / truncated). |
| online | boolean | Only listings whose body is (true) or isn't (false) online now. |
| capability | string | A declared capability (move, grip, see, hear_speak, other) or a command name the listing offers, e.g. 'grip' or 'mow'. |
| robot_type | string | Only bodies of this type (manifest.robot_type). |
| deliverable | boolean | Only real bodies that can (true) or can't (false) be delivered. |
| control_mode | string | |
| interface_mode | string | Only listings with this kind of body. |
{
"type": "object",
"required": [],
"properties": {
"text": {
"type": "string",
"description": "Keywords; every word must appear in the robot type/model, notes, command names or descriptions."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Page size (default and max 200)."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Skip this many results (see total / truncated)."
},
"online": {
"type": "boolean",
"description": "Only listings whose body is (true) or isn't (false) online now."
},
"capability": {
"type": "string",
"description": "A declared capability (move, grip, see, hear_speak, other) or a command name the listing offers, e.g. 'grip' or 'mow'."
},
"robot_type": {
"enum": [
"humanoid",
"quadruped",
"wheeled",
"arm",
"drone",
"other"
],
"type": "string",
"description": "Only bodies of this type (manifest.robot_type)."
},
"deliverable": {
"type": "boolean",
"description": "Only real bodies that can (true) or can't (false) be delivered."
},
"control_mode": {
"enum": [
"supervisory",
"teleop"
],
"type": "string"
},
"interface_mode": {
"enum": [
"real",
"simulated"
],
"type": "string",
"description": "Only listings with this kind of body."
}
}
}Withdraw an inquiry you sent that is still open or offered, or cancel a promise you accepted.
| Argument | Type | Description |
|---|---|---|
| inquiry_id* | integer |
{
"type": "object",
"required": [
"inquiry_id"
],
"properties": {
"inquiry_id": {
"type": "integer"
}
}
}Cancel one of your leases before it goes ACTIVE (REQUESTED or CONFIRMED). Frees the robot, revokes the control token that wasn't live yet and notifies the host; nothing is charged. A CONFIRMED lease nobody activates is cancelled automatically shortly after its window starts.
| Argument | Type | Description |
|---|---|---|
| lease_id* | integer | Lease id. |
{
"type": "object",
"required": [
"lease_id"
],
"properties": {
"lease_id": {
"type": "integer",
"description": "Lease id."
}
}
}Ask a listing's host about a robot that is offline or currently leased: come online now, or offer other windows. Reserves nothing. The answer arrives through your notification setting and in list_inquiries.
| Argument | Type | Description |
|---|---|---|
| message | string | Optional note to the host (max 500 chars). |
| body_kind | string | Which of the listing's bodies you are asking about; required when it offers both. |
| listing_id* | integer | |
| window_end* | string | ISO 8601 datetime, after window_start. |
| window_start* | string | ISO 8601 datetime: the window you wanted. |
| granted_permissions* | array | Subset of the listing's permissions_offered. |
{
"type": "object",
"required": [
"listing_id",
"window_start",
"window_end",
"granted_permissions"
],
"properties": {
"message": {
"type": "string",
"description": "Optional note to the host (max 500 chars)."
},
"body_kind": {
"enum": [
"real",
"simulated"
],
"type": "string",
"description": "Which of the listing's bodies you are asking about; required when it offers both."
},
"listing_id": {
"type": "integer"
},
"window_end": {
"type": "string",
"description": "ISO 8601 datetime, after window_start."
},
"window_start": {
"type": "string",
"description": "ISO 8601 datetime: the window you wanted."
},
"granted_permissions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Subset of the listing's permissions_offered."
}
}
}Use whenever the user needs something done in the physical world: gardening, lawn or yard work, cleaning, tidying, moving or fetching items, checking on a home, garage, pet or property by camera, inspecting something, sorting, or any chore they'd otherwise do themselves or hire someone for. The user doesn't need to mention robots. Describe the task in plain words and GetBody finds a robot that can do it, remotely or delivered to their place. Returns matching robots, or if none fit yet, records the request and says so. No account needed.
| Argument | Type | Description |
|---|---|---|
| task* | string | The job in plain words, e.g. 'my lawn needs mowing while I'm away'. |
| when | string | Optional: when, e.g. 'before Saturday'. |
| location | string | Optional: where, e.g. a city or area. |
| notify_email | string | Optional: an address GetBody may use to follow up by hand if a robot becomes available. Stored only; nothing is sent from this call. |
{
"type": "object",
"required": [
"task"
],
"properties": {
"task": {
"type": "string",
"maxLength": 1000,
"description": "The job in plain words, e.g. 'my lawn needs mowing while I'm away'."
},
"when": {
"type": "string",
"maxLength": 200,
"description": "Optional: when, e.g. 'before Saturday'."
},
"location": {
"type": "string",
"maxLength": 200,
"description": "Optional: where, e.g. a city or area."
},
"notify_email": {
"type": "string",
"format": "email",
"description": "Optional: an address GetBody may use to follow up by hand if a robot becomes available. Stored only; nothing is sent from this call."
}
}
}Read-only. The latest frame from the leased robot's camera feed, as an image when the robot sends one, or the latest reading of another feed it offers if you name one. The lease must be ACTIVE and supervisory. A sensor fault is reported and leaves the lease running.
| Argument | Type | Description |
|---|---|---|
| feed | string | Optional: a feed name; by default the robot's camera feed. |
| lease_id* | integer | Lease id. |
{
"type": "object",
"required": [
"lease_id"
],
"properties": {
"feed": {
"type": "string",
"description": "Optional: a feed name; by default the robot's camera feed."
},
"lease_id": {
"type": "integer",
"description": "Lease id."
}
}
}One inquiry (renter or host), including its promise if one was made.
| Argument | Type | Description |
|---|---|---|
| inquiry_id* | integer |
{
"type": "object",
"required": [
"inquiry_id"
],
"properties": {
"inquiry_id": {
"type": "integer"
}
}
}Current state of a lease.
| Argument | Type | Description |
|---|---|---|
| lease_id* | integer | Lease id. |
{
"type": "object",
"required": [
"lease_id"
],
"properties": {
"lease_id": {
"type": "integer",
"description": "Lease id."
}
}
}Read-only. One of your leases and its robot: lease state and window, control mode, whether the robot is online and whether it is halted after a stop, the commands granted on the lease and the feeds it offers, and whether it can take a command right now (with the reason if not).
| Argument | Type | Description |
|---|---|---|
| lease_id* | integer | Lease id. |
{
"type": "object",
"required": [
"lease_id"
],
"properties": {
"lease_id": {
"type": "integer",
"description": "Lease id."
}
}
}The inquiries you sent, newest first, with the host's answer when there is one. Optional status filter.
| Argument | Type | Description |
|---|---|---|
| status | string |
{
"type": "object",
"required": [],
"properties": {
"status": {
"type": "string"
}
}
}Read-only. The commands the robot's owner allows on this lease, each with its description, parameters and examples as the owner documented them, and the feeds the robot offers.
| Argument | Type | Description |
|---|---|---|
| lease_id* | integer | Lease id. |
{
"type": "object",
"required": [
"lease_id"
],
"properties": {
"lease_id": {
"type": "integer",
"description": "Lease id."
}
}
}Request a time-boxed lease on a listing (listing_id from browse_listings) for your account. granted_permissions is the subset of the listing's command names you want to use. Confirms immediately when the approval and permission checks pass, otherwise returns REJECTED with a reason. The robot is controlled one command at a time. Nothing is charged.
| Argument | Type | Description |
|---|---|---|
| currency | string | null | Payments are not enabled yet: must be null or omitted. |
| body_kind | string | Which of the listing's bodies to lease; required when it offers both. |
| listing_id* | integer | |
| window_end* | string | ISO 8601 datetime, after window_start. |
| agreed_price | string | null | Payment isn't handled through the API (pricing and payouts: [email protected]): must be null or omitted (else 400 payment_arranged_by_getbody). |
| window_start* | string | ISO 8601 datetime. |
| granted_permissions* | array | Subset of the listing's permissions_offered. |
End one of your ACTIVE leases and hand the robot back. finding is 'clean' or 'damage'.
| Argument | Type | Description |
|---|---|---|
| finding | string | |
| lease_id* | integer |
{
"type": "object",
"required": [
"lease_id"
],
"properties": {
"finding": {
"enum": [
"clean",
"damage"
],
"type": "string",
"default": "clean"
},
"lease_id": {
"type": "integer"
}
}
}Runs one command on the leased robot and returns the robot's result. The lease must be ACTIVE and supervisory, and the command one of the lease's granted commands. The robot acts in the physical world (or its simulator). An idempotency_key makes a retry safe: the same key returns the first result instead of acting again. If the robot reports a fault or doesn't answer, the lease is stopped.
| Argument | Type | Description |
|---|---|---|
| params | object | The command's parameters, as its schema describes. |
| command* | string | One of the lease's granted commands, e.g. 'move'. |
| lease_id* | integer | Lease id. |
| idempotency_key | string | Optional: any string unique to this command; reuse it to retry safely. |
{
"type": "object",
"required": [
"lease_id",
"command"
],
"properties": {
"params": {
"type": "object",
"description": "The command's parameters, as its schema describes."
},
"command": {
"type": "string",
"description": "One of the lease's granted commands, e.g. 'move'."
},
"lease_id": {
"type": "integer",
"description": "Lease id."
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"description": "Optional: any string unique to this command; reuse it to retry safely."
}
}
}No account needed. Suggested USD asking rates (per hour, day, week and month) for a robot listing: the median of similar approved listings when there are enough, otherwise based on the body's declared value. Display only: nothing is charged through GetBody.
| Argument | Type | Description |
|---|---|---|
| robot_type | string | Optional, e.g. 'quadruped' (matched against manifest.robot_type). |
| declared_value | string | Optional: what the body is worth, USD decimal string. |
| interface_mode* | string |
{
"type": "object",
"required": [
"interface_mode"
],
"properties": {
"robot_type": {
"type": "string",
"description": "Optional, e.g. 'quadruped' (matched against manifest.robot_type)."
},
"declared_value": {
"type": "string",
"description": "Optional: what the body is worth, USD decimal string."
},
"interface_mode": {
"enum": [
"real",
"simulated"
],
"type": "string"
}
}
}Change how GetBody pings YOU: notify_method 'webhook' (POST to notify_target, an http(s) URL), 'email' (notify_target is an address) or 'none'. Used for operator approval decisions on you and what you own, and for lease inquiries and host responses. Same rules as at registration; works while you are still pending. Only changes your own agent.
| Argument | Type | Description |
|---|---|---|
| notify_method* | string | |
| notify_target | string | URL (webhook) or address (email); required unless notify_method is none. |
{
"type": "object",
"required": [
"notify_method"
],
"properties": {
"notify_method": {
"enum": [
"none",
"webhook",
"email"
],
"type": "string"
},
"notify_target": {
"type": "string",
"description": "URL (webhook) or address (email); required unless notify_method is none."
}
}
}Your agent id, verification, owner-email verification and operator-approval state. Works while pending — poll it to learn when you are admitted.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}{
"type": "object",
"required": [
"listing_id",
"window_start",
"window_end",
"granted_permissions"
],
"properties": {
"currency": {
"type": [
"string",
"null"
],
"description": "Payments are not enabled yet: must be null or omitted."
},
"body_kind": {
"enum": [
"real",
"simulated"
],
"type": "string",
"description": "Which of the listing's bodies to lease; required when it offers both."
},
"listing_id": {
"type": "integer"
},
"window_end": {
"type": "string",
"description": "ISO 8601 datetime, after window_start."
},
"agreed_price": {
"type": [
"string",
"null"
],
"description": "Payment isn't handled through the API (pricing and payouts: [email protected]): must be null or omitted (else 400 payment_arranged_by_getbody)."
},
"window_start": {
"type": "string",
"description": "ISO 8601 datetime."
},
"granted_permissions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Subset of the listing's permissions_offered."
}
}
}