whoami · Who am I
Returns the Orbix360 account this connection acts for: user id, display name, email, plan, and the permissions the token carries. Call it to check the connection works.
No inputs.
Example: whoami {}
Orbix360 has an MCP server: the open standard AI assistants such as Claude, ChatGPT and Cursor use to work with other apps. Connect one, and you can ask it in plain words to build and edit your 360° tours.
Server address
https://orbix360.com/mcpCreate, rename and delete tours, and make them public or private.
Add 360° photos from a web address or from your computer, and check when they are ready.
Rename and reorder the photos in a tour, and choose the view each photo opens on.
Look at a photo, so it can find doorways and objects before it places anything.
Add scenes made with your own AI image generator, such as a staging concept or a "what it could look like" view.
Add navigation hotspots between photos, info hotspots and flat images.
Get the links to view, share and embed a tour.
It cannot buy anything, start or cancel a subscription, or change your account settings. Your plan's limits apply exactly as in the web app: see Pricing.
Most assistants sign in through your browser: you approve the connection on an Orbix360 page, and nothing secret is copied anywhere.
Open Settings → Connectors and choose Add custom connector.
Name it Orbix360 and paste the server address.
Choose Connect. A browser window opens on Orbix360: sign in if asked, check what the app may do and choose Allow.
A connector you add on claude.ai is available in Claude Desktop too.
Or, in Claude Desktop, open Settings → Connectors, choose Add custom connector and paste the server address.
Choose Connect. A browser window opens on Orbix360: sign in if asked, check what the app may do and choose Allow.
Run the command below in a terminal.
In Claude Code, type /mcp, pick orbix360 and choose Authenticate.
A browser window opens on Orbix360: sign in if asked, check what the app may do and choose Allow.
Run in a terminal:
claude mcp add --transport http orbix360 https://orbix360.com/mcpAdd the configuration below to ~/.cursor/mcp.json (or the project's .cursor/mcp.json).
Open Cursor Settings → MCP and choose Connect next to orbix360.
A browser window opens on Orbix360: sign in if asked, check what the app may do and choose Allow.
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"orbix360": {
"url": "https://orbix360.com/mcp"
}
}
}Turn on developer mode: Settings → Apps & Connectors → Advanced settings.
Choose Create, name the connector Orbix360, paste the server address and pick OAuth as the authentication.
A browser window opens on Orbix360: sign in if asked, check what the app may do and choose Allow.
Look in the assistant's settings for MCP servers, connectors, custom apps or integrations, and an option to add a remote server by its address (it may be called HTTP or Streamable HTTP). There is nothing to install.
Paste the server address. If it asks how to sign in, choose OAuth (or "sign in" / "authenticate") and leave any client ID and secret empty: Orbix360 registers the assistant by itself. If it can only send a fixed header or API key, use a personal access token instead (see Personal access tokens below).
A browser window opens on Orbix360: sign in if asked, check what the app may do and choose Allow.
Scripts and assistants that cannot sign in through the browser can use a personal access token. Create one on Account → AI Tools / MCP, replace <YOUR_TOKEN> below with it, and treat it like a password: it is shown only once. Go to Account → AI Tools / MCP
Claude Code. Run in a terminal:
claude mcp add --transport http orbix360 https://orbix360.com/mcp --header "Authorization: Bearer <YOUR_TOKEN>"Cursor. Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"orbix360": {
"url": "https://orbix360.com/mcp",
"headers": {
"Authorization": "Bearer <YOUR_TOKEN>"
}
}
}
}Other clients. Point any MCP client that takes a request header (Streamable HTTP) at the address, with this header:
URL: https://orbix360.com/mcp
Header: Authorization: Bearer <YOUR_TOKEN>Steps checked in October 2026; menus in these apps change from time to time.
60 tool calls per minute and 300 changes per hour for each account.
20 rendered views per minute and 300 per hour.
Every tool answers within about 45 seconds. Longer work, such as processing a photo, returns at once with a status the assistant checks again.
Your plan's limits on tours, photos per tour and file size apply as in the web app; making a tour private or embedding it needs a Pro account or a Premium Tour.
Assistants name places in a photo with two angles in degrees, measured on the 360° photo itself:
yaw goes left to right: 0 is the centre of the photo and it grows to the right, up to 180 at the right edge (which is also the left edge, -180).
pitch goes up and down: 0 is the horizon, +90 straight up and -90 straight down.
They do not depend on the direction a photo opens on, so a hotspot stays put when you change the opening view. The rendered views an assistant asks for carry labelled 30° gridlines, so it can read a place's yaw and pitch off the picture.
Your assistant can add a 360° scene made with your own AI image generator: ChatGPT or Gemini image generation, an image-generation MCP server, or your own image API key. Orbix360 never generates the image and never calls an AI model for it, so it costs nothing extra and works on every plan, under your plan's usual photo limits.
How the image gets to Orbix360:
An assistant that can run commands (Claude Code, Cursor): it saves the image and uploads it with the command create_photo_upload gives it.
A chat assistant with an image tool that answers a web address: add_photo_from_url.
A chat app that generates the image in the conversation (ChatGPT): download the image, then open the upload link the assistant gives you, signed in to Orbix360, and drop the file there. The link works once, for 2 hours.
Either way the assistant sends the image with generated: true. Most generators do not make the 2:1 equirectangular shape a 360° photo needs, and their left and right edges do not quite meet. Orbix360 accepts any shape from 1.74:1 to 2.40:1, stretches it to 2:1 and blends the edges so no seam shows. A generator that makes true 2:1 equirectangular panoramas, such as Blockade Labs Skybox, needs no stretch; only its seam is smoothed. Other shapes are refused. PNG and WebP are accepted as well as JPEG.
The add_generated_scene prompt below walks an assistant through it.
Make a tour called "Lake House" from these 6 listing photos, link the rooms through their doorways and add a note on the wood stove in the living room.
In my "Downtown Loft" tour, put the photos in walking order from the entrance and give each one a title from what it shows.
Add an info hotspot on the fireplace in the second photo of "Lake House" that says "Restored 1920s mantel".
Make "Lake House" open on the view of the lake, then give me the share link and the embed code.
Look at every photo in "Office Fit-out" and tell me which rooms are not linked to each other yet.
Don't edit the same tour in the Orbix360 web editor while an assistant is working on it. The editor's Save stores the tour as it was when you opened it, so it would overwrite the assistant's changes.
Revoke its access at any time: disconnect the app under Connected apps, or revoke its personal access token, both on Account → AI Tools / MCP. It loses access on its next request.
Every tool the server offers, generated from the server's own definitions. Assistants pick the tools themselves; this list is for people building or checking an agent.
whoami · Who am IReturns the Orbix360 account this connection acts for: user id, display name, email, plan, and the permissions the token carries. Call it to check the connection works.
No inputs.
Example: whoami {}
get_account · Account and plan limitsReturns the plan this account is on, whether it may make tours private and use its own branding (no watermark, embedding), how many multi-image and single-image tours it has and may still create (including any bonus and its cap), the photo-count and file-size caps for one tour (null = no cap), and the Pricing and Billing page addresses. Call it before creating a tour or adding photos.
No inputs.
Example: get_account {}
list_tours · List my toursLists this account's tours, newest created first, a page at a time. Each tour has its id, name, kind (single- or multi-image), scene count, visibility, last-changed time and a thumbnail. Pass nameContains to search by name (case-insensitive) and the previous answer's nextCursor as cursor for the next page; nextCursor is null on the last page. A filtered search reads a bounded number of tours per call: when scanLimited is true, continue with nextCursor.
limit · integer · optionalcursor · string · optionalnameContains · string · optional| Input | Type | Required | What it is |
|---|---|---|---|
limit | integer | no | Tours per page, 1–50 (default 20). (at least 1, at most 50) |
cursor | string | no | nextCursor from the previous answer of the same search. (at least 1 character, up to 2048 characters) |
nameContains | string | no | Only tours whose name contains this text (case-insensitive). (up to 200 characters) |
Example: list_tours { "nameContains": "lake house" }
get_tour · Read a tourReturns one of your tours as the viewer shows it: name, visibility, autorotate, the premium state, stateRevision (quote it when you edit the tour), the scenes in order (title, whether the title is only a "Photo N" placeholder, photo type, thumbnail, processing status ready / processing / missing / unknown, heading = the yaw the scene opens on, and generated = sent as AI-generated), and every navigation hotspot, info hotspot and flat image with its position as yaw / pitch in degrees on the scene's panorama: yaw 0 = the photo's centre column, positive to the right, in (-180, 180]; pitch 0 = the horizon, +90 = straight up.
tourId · string · required| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours returns it. (up to 32 characters, a fixed format) |
Example: get_tour { "tourId": "…" }
create_tour · Create tourCreates a new 360° virtual tour in the account. kind "multi" holds several photos linked by navigation hotspots; "single" holds one photo. Visibility defaults to public; private needs a Pro plan. Free accounts can create a limited number of tours. Returns the tour id, links to view and edit it, and what to do next.
Counts toward the plan's tour allowance.
name · string · requiredkind · one of: multi, single · requiredvisibility · one of: public, private · optional| Input | Type | Required | What it is |
|---|---|---|---|
name | string | yes | The tour name, up to 200 characters. (at least 1 character, up to 200 characters) |
kind | one of: multi, single | yes | "multi" for a multi-image tour, "single" for a single-image tour. |
visibility | one of: public, private | no | Defaults to "public". "private" needs a Pro plan. |
Example: create_tour { "name": "Lake House", "kind": "multi" }
update_tour · Update tourChanges a tour's name, visibility and/or auto-rotation. Give at least one of them. All the given settings change together, or none do when one is refused. Making a tour private needs a Pro plan or a Premium Tour on that tour. Settings the tour already has are left as they are, so repeating a call changes nothing.
Private tours need a Pro account or a Premium Tour.
tourId · string · requiredname · string · optionalvisibility · one of: public, private · optionalautorotate · boolean · optional| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id. (a fixed format) |
name | string | no | A new name, up to 200 characters. (at least 1 character, up to 200 characters) |
visibility | one of: public, private | no | "private" needs a Pro plan or a Premium Tour on this tour. |
autorotate | boolean | no | Whether the tour turns slowly on its own when opened. |
Example: update_tour { "tourId": "…", "visibility": "private" }
delete_tour · Delete tourPermanently deletes a tour and its photos. This cannot be undone. confirmName must be the tour's exact current name, as the owner confirmed it. A Premium Tour subscription on the tour stops renewing; the answer says so.
Cannot be undone. Needs the tour's exact current name as confirmName, so confirm with the owner first.
tourId · string · requiredconfirmName · string · required| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id. (a fixed format) |
confirmName | string | yes | The tour's exact current name, confirmed with the owner. |
Example: delete_tour { "tourId": "…", "confirmName": "Lake House" }
get_share_links · Share links for a tourReturns the addresses to share one of your tours: the public page, the short link (null when the tour has none), the share link the Orbix360 share box copies, the viewer link, your editor link and, when this tour may be embedded (Pro plan or a Premium Tour for the tour), an embed snippet; otherwise embedUnavailable says what unlocks it. These links are not tracked, so sharing them does not earn shared-tour credit.
The embed snippet is offered only to a Pro account or a Premium Tour.
tourId · string · required| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours returns it. (up to 32 characters, a fixed format) |
Example: get_share_links { "tourId": "…" }
add_photo_from_url · Add a photo from a URLAdd a 360° photo to one of the user's tours from a public https URL. The server downloads the image (JPEG, PNG or WebP), checks it, and adds it as the last scene of the tour. 360_mono photos must be equirectangular: twice as wide as tall (2:1). Use 360_pano for a wider panorama. For an image made by an AI image generator (yours or the user's), set generated: true: a 360_mono image from 1.74:1 to 2.40:1 (16:9 to 2.4:1) is then stretched to 2:1 and its left and right edges blended so no seam shows. Returns status "processing": call get_photo_status with the photo id until it is "ready" before placing hotspots on it. For a file on this computer, use create_photo_upload instead.
With generated: true, an AI-generated image from 1.74:1 to 2.40:1 is stretched to 2:1 and its seam blended.
tourId · string · requiredurl · string · requiredtitle · string · optionalphotoType · one of: 360_mono, 360_pano · requiredgenerated · boolean · optional| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours returns it. (up to 32 characters, a fixed format) |
url | string | yes | A public https URL of the image itself (not a web page showing it). (up to 2048 characters) |
title | string | no | The scene title, e.g. "Kitchen". (at least 1 character, up to 200 characters) |
photoType | one of: 360_mono, 360_pano | yes | 360_mono for an equirectangular 2:1 photo; 360_pano for a wider panorama. |
generated | boolean | no | Set true for an image made by an AI image generator. A 360_mono image from 1.74:1 to 2.40:1 is then stretched to 2:1 and its seam blended; without it, a 360_mono image must already be 2:1. |
Example: add_photo_from_url { "tourId": "…", "url": "https://example.com/living-room.jpg", "photoType": "360_mono" }
create_photo_upload · Upload a photo from this computer or the browserPrepare an upload of a photo file into one of the user's tours. It works in every client, including web and chat apps that cannot run commands. In a chat or web app, and whenever the user attached the photos to the conversation: you cannot send the file yourself and do not need to. Call this tool once per photo, give the user each uploadPage.url, and ask them to open it in a browser signed in to Orbix360 and drop that photo there (each link takes one file, once, within 2 hours). Do not ask the user to run commands. Agents that can run shell commands on the computer holding the file: run the returned command exactly as given, from the folder the filename is relative to. Either way, then call get_photo_status with the photo id until it is "ready". The file must be a JPEG; a 360_mono photo must be equirectangular (2:1). Size, format and shape are checked after the upload: a file that fails is removed and get_photo_status says why. The upload address and the page link work for this one photo only. If they expire before the file is sent, call create_photo_upload again with the same photoId for new ones (nothing new is added to the tour). For an image on the web, use add_photo_from_url instead. For an image made by an AI image generator, set generated: true: the file may then also be a PNG or WebP, and a 360_mono image from 1.74:1 to 2.40:1 (16:9 to 2.4:1) is stretched to 2:1 with its left and right edges blended.
Works in every client: answers an uploadPage link (signed-in owner, 2 hours, one file) that chat and web apps hand to the user, and an upload command for agents that can run shell commands.
With generated: true the file may also be a PNG or WebP; pass photoId to get a new command and link for a photo still waiting for its file.
tourId · string · requiredfilename · string · requiredphotoType · one of: 360_mono, 360_pano · optionaltitle · string · optionalgenerated · boolean · optionalphotoId · string · optional| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours returns it. (up to 32 characters, a fixed format) |
filename | string | yes | The .jpg / .jpeg file (or .png / .webp with generated: true). In a chat or web app, its name as the user attached it or will drop it, e.g. R0010027.jpg. For an agent with a shell, its local path, as the upload command should name it. (at least 1 character, up to 255 characters) |
photoType | one of: 360_mono, 360_pano | no | 360_mono for an equirectangular 2:1 photo; 360_pano for a wider panorama. Required unless photoId is given. |
title | string | no | The scene title, e.g. "Living room". (at least 1 character, up to 200 characters) |
generated | boolean | no | Set true for an image made by an AI image generator: PNG / WebP are accepted, and a 360_mono image from 1.74:1 to 2.40:1 is stretched to 2:1 and its seam blended. |
photoId | string | no | To get a new command and page link for a photo that is still waiting for its file (e.g. after the link expired). Returns the same photo id; nothing new is added to the tour. (a fixed format) |
Example: create_photo_upload { "tourId": "…", "filename": "kitchen.jpg", "photoType": "360_mono" }
get_photo_status · Check photo statusCheck whether photos added with add_photo_from_url or create_photo_upload are ready. Each photo is pending_upload (run its upload command), processing (call again in a few seconds), ready, failed (with a reason; the photo has been removed from the tour), or not_found. generated says whether the photo was sent as AI-generated. One call waits up to about 10 seconds for photos that are still processing. Keep calling until every photo is ready or failed (allSettled is true).
tourId · string · requiredphotoIds · list of string · required| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours returns it. (up to 32 characters, a fixed format) |
photoIds | list of string | yes | Up to 20 photo ids returned by add_photo_from_url or create_photo_upload. (at least 1 item, up to 20 items) |
Example: get_photo_status { "tourId": "…", "photoIds": ["…"] }
update_scene · Rename a sceneSets the title of one photo (scene) in a tour, as Organize Photos does in the Orbix360 web editor. Get the tour id and scene ids from get_tour. The title is trimmed and may be up to 200 characters. Returns the tour's scenes in order afterwards.
tourId · string · requiredsceneId · string or integer · requiredtitle · string · required| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours and get_tour list it. (at least 1 character) |
sceneId | string or integer | yes | The scene (photo) id, as get_tour lists it. |
title | string | yes | The new scene title. |
Example: update_scene { "tourId": "…", "sceneId": "…", "title": "Kitchen" }
reorder_scenes · Reorder scenesSets the order of a multi-image tour's photos (scenes), as Organize Photos does in the Orbix360 web editor. `order` must list every scene id from get_tour exactly once, first scene first. A photo still shown under a position placeholder such as "Photo 3" keeps that title. Returns the scenes in the new order.
Every scene id exactly once.
tourId · string · requiredorder · list of string or integer · required| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours and get_tour list it. (at least 1 character) |
order | list of string or integer | yes | Every scene id of the tour exactly once, in the new order. (at least 1 item, up to 500 items) |
Example: reorder_scenes { "tourId": "…", "order": ["…", "…", "…"] }
set_scene_heading · Set the direction a scene opens onSets the direction a visitor first faces when a scene opens, as Change Orientation does in the Orbix360 web editor, and regenerates the scene's thumbnail from the photo looking that way. yaw is in degrees on the scene's photo (0 = the photo's centre column, positive to the right; any value is wrapped into (-180, 180]), the same coordinates render_view draws: find the place with render_view and pass its yaw. pitch (default 0) only tilts the thumbnail; every scene opens level with the horizon. The tour's first scene's thumbnail is the tour's card image and share image. The photo must be ready (see get_photo_status). Look at the result with render_view centred on the heading if needed.
Also regenerates the scene's thumbnail; the first scene's is the tour's card.
tourId · string · requiredsceneId · string or integer · requiredyaw · number · requiredpitch · number · optional| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours returns it. (up to 32 characters, a fixed format) |
sceneId | string or integer | yes | The scene (photo) id, as get_tour lists it. |
yaw | number | yes | The direction to open on, degrees; 0 = the photo's centre column, positive to the right. Wrapped into (-180, 180]. |
pitch | number | no | Tilts the thumbnail only, degrees; 0 = horizon, +90 = straight up. Not stored. Default 0. (at least -90, at most 90) |
Example: set_scene_heading { "tourId": "…", "sceneId": "…", "yaw": 40 }
delete_scene · Delete a scenePermanently deletes one photo (scene) from a multi-image tour, with its image files and every navigation hotspot that leads to it. This cannot be undone. A tour always keeps at least one photo. Get the tour id and scene ids from get_tour. Returns the remaining scenes in order.
Cannot be undone; a tour always keeps one photo.
tourId · string · requiredsceneId · string or integer · required| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours and get_tour list it. (at least 1 character) |
sceneId | string or integer | yes | The scene (photo) id, as get_tour lists it. |
Example: delete_scene { "tourId": "…", "sceneId": "…" }
render_panorama · See a whole sceneRenders one of your scenes' whole 360° photo, flattened into a 2048 × 1024 picture (equirectangular: x is yaw from -180 at the left through 0 at the centre to 180 at the right, where yaw 0 = the photo's centre column, not the scene's opening direction; y is pitch from +90 at the top to -90 at the bottom), with a yaw scale every 30° along the top, pitch marks on the left, and the existing navigation hotspots (N1…), info hotspots (I1…) and flat-image outlines (F1…) labelled and listed with their full ids and coordinates. A cheap first look to see the room layout; then use render_view to look closer before placing anything, since the panorama is distorted near the top and bottom. Clients that limit picture size may shrink it. Works on your private tours; the photo must be ready (see get_photo_status).
tourId · string · requiredsceneId · string or integer · required| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours returns it. (up to 32 characters, a fixed format) |
sceneId | string or integer | yes | The scene (photo) id, as get_tour lists it. |
Example: render_panorama { "tourId": "…", "sceneId": "…" }
render_view · Look at a sceneRenders what a visitor sees in one of your scenes looking in a direction, as a JPEG picture you can look at, so you can find things (a door, a fireplace) and read their position before placing a hotspot. The picture is an undistorted 4:3 view centred on yaw / pitch (degrees on the scene's panorama: yaw 0 = the photo's centre column, not the scene's opening direction, positive to the right; pitch 0 = the horizon, +90 = straight up), fov degrees wide (horizontal, 30-120, default 90). Gridlines every 30° are labelled with their yaw (meridians) and pitch (parallels) values, so a point between two lines can be interpolated; existing navigation hotspots (N1…), info hotspots (I1…) and flat-image outlines (F1…) are drawn and listed with their full ids and coordinates in the answer. To check a position, render again centred on it: the point is then at the centre of the picture. Use render_panorama first for a cheap look at the whole scene. Works on your private tours; the photo must be ready (see get_photo_status).
Renders have their own per-minute and per-hour limit.
tourId · string · requiredsceneId · string or integer · requiredyaw · number · optionalpitch · number · optionalfov · number · optionalwidth · integer · optionalshowHotspots · boolean · optionalgrid · boolean · optional| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours returns it. (up to 32 characters, a fixed format) |
sceneId | string or integer | yes | The scene (photo) id, as get_tour lists it. |
yaw | number | no | Direction to look, degrees; 0 = the photo's centre column, positive to the right. Any value is wrapped into (-180, 180]. Default 0. |
pitch | number | no | Up / down, degrees; 0 = horizon, +90 = straight up. Default 0. (at least -90, at most 90) |
fov | number | no | Horizontal field of view in degrees (30-120); smaller zooms in. Default 90. (at least 30, at most 120) |
width | integer | no | Picture width in pixels (256-1568); the height is three quarters of it. Default 1024. (at least 256, at most 1568) |
showHotspots | boolean | no | Draw existing hotspots and flat-image outlines with their labels. Default true. |
grid | boolean | no | Draw the 30° yaw / pitch gridlines. Default true. |
Example: render_view { "tourId": "…", "sceneId": "…", "yaw": 40, "pitch": -5, "fov": 60 }
add_nav_hotspot · Link two scenesAdds a navigation hotspot in one scene of a multi-image tour that takes visitors to another scene, as the web editor's Navigation Hotspots panel does. Get scene ids from get_tour and read the place (a doorway, a path) off render_view first. A pair of scenes has at most one link each way: calling again for the same pair moves the existing link. Give returnYaw and returnPitch to also place the link back from toSceneId to fromSceneId in the same call. Returns the hotspot(s) and a link that opens the tour on the scene.
tourId · string · requiredfromSceneId · string or integer · requiredtoSceneId · string or integer · requiredyaw · number · requiredpitch · number · requiredreturnYaw · number · optionalreturnPitch · number · optional| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours and get_tour list it. (at least 1 character) |
fromSceneId | string or integer | yes | The scene the hotspot is placed in. |
toSceneId | string or integer | yes | The scene the hotspot leads to (another scene of the same tour). |
yaw | number | yes | Where the hotspot sits in fromSceneId: degrees on the scene's photo: 0 = the photo's centre column, positive to the right; any value is wrapped into (-180, 180]. |
pitch | number | yes | Where the hotspot sits in fromSceneId: degrees: 0 = the horizon, +90 = straight up, -90 = straight down. (at least -90, at most 90) |
returnYaw | number | no | Optional: where the way back sits in toSceneId (give with returnPitch): degrees on the scene's photo: 0 = the photo's centre column, positive to the right; any value is wrapped into (-180, 180]. |
returnPitch | number | no | Optional: where the way back sits in toSceneId (give with returnYaw): degrees: 0 = the horizon, +90 = straight up, -90 = straight down. (at least -90, at most 90) |
Example: add_nav_hotspot { "tourId": "…", "fromSceneId": "…", "toSceneId": "…", "yaw": 40, "pitch": -5, "returnYaw": -150, "returnPitch": -3 }
add_info_hotspot · Add an info hotspotAdds an info hotspot to a scene: an icon visitors open to read a title and a description, as the web editor's Info Hotspots panel does. Get scene ids from get_tour and read the place off render_view first. Title: up to 50 characters; description: up to 2,000 characters, newlines kept. Text is plain: any HTML markup is removed. iconStyle "dark" draws a dark icon for bright backgrounds (default "light"). Works on single-image tours too. Returns the stored hotspot.
tourId · string · requiredsceneId · string or integer · requiredyaw · number · requiredpitch · number · requiredtitle · string · requireddescription · string · optionaliconStyle · one of: light, dark · optional| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours and get_tour list it. (at least 1 character) |
sceneId | string or integer | yes | A scene (photo) id, as get_tour lists it. |
yaw | number | yes | Where the hotspot sits: degrees on the scene's photo: 0 = the photo's centre column, positive to the right; any value is wrapped into (-180, 180]. |
pitch | number | yes | Where the hotspot sits: degrees: 0 = the horizon, +90 = straight up, -90 = straight down. (at least -90, at most 90) |
title | string | yes | Up to 50 characters of plain text. (up to 1000 characters) |
description | string | no | Up to 2,000 characters of plain text; newlines are kept. (up to 20000 characters) |
iconStyle | one of: light, dark | no | "light" (default) or "dark". |
Example: add_info_hotspot { "tourId": "…", "sceneId": "…", "yaw": 10, "pitch": -20, "title": "Wood stove" }
update_info_hotspot · Change an info hotspotChanges an existing info hotspot: any of title (up to 50 characters), description (up to 2,000), iconStyle, and its place (yaw with pitch). Only the fields you give change. Get hotspot ids from get_tour (infoHotspots). An info hotspot stays in its scene: to put it in another scene, remove it and add a new one. Returns the hotspot as stored.
tourId · string · requiredhotspotId · string · requiredsceneId · string or integer · optionaltitle · string · optionaldescription · string · optionaliconStyle · one of: light, dark · optionalyaw · number · optionalpitch · number · optional| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours and get_tour list it. (at least 1 character) |
hotspotId | string | yes | The info hotspot id, as get_tour lists it. (at least 1 character, up to 200 characters) |
sceneId | string or integer | no | Optional: the hotspot's own scene (refused if it is another scene). |
title | string | no | Up to 50 characters of plain text. (up to 1000 characters) |
description | string | no | Up to 2,000 characters of plain text. (up to 20000 characters) |
iconStyle | one of: light, dark | no | "light" or "dark". |
yaw | number | no | The new place (give with pitch): degrees on the scene's photo: 0 = the photo's centre column, positive to the right; any value is wrapped into (-180, 180]. |
pitch | number | no | The new place (give with yaw): degrees: 0 = the horizon, +90 = straight up, -90 = straight down. (at least -90, at most 90) |
Example: update_info_hotspot { "tourId": "…", "hotspotId": "…", "description": "Installed 2024." }
remove_hotspot · Remove a hotspotRemoves one navigation or info hotspot from a tour. Get hotspot ids from get_tour (navHotspots, infoHotspots). Removing a navigation link leaves the link back from the other scene in place; remove it too if you want both gone. Flat images are removed with remove_flat_image.
tourId · string · requiredhotspotId · string · required| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours and get_tour list it. (at least 1 character) |
hotspotId | string | yes | The navigation or info hotspot id, as get_tour lists it. (at least 1 character, up to 200 characters) |
Example: remove_hotspot { "tourId": "…", "hotspotId": "…" }
add_flat_image · Place a flat imagePlaces a flat picture (a logo, a sign, a floor plan) in a scene, as the web editor's Flat Images panel does. url must be a public https address of a JPEG, PNG or WebP image of at most 20 MB; it is stored with the tour (shrunk to at most 4096 px; PNG and WebP keep their transparency). Get scene ids from get_tour and choose the place with render_view; render_view then shows the picture's outline. scale 0.5 – 2 (default 1) sets its size, rotation (degrees) turns it in its own plane. Returns the stored flat image.
tourId · string · requiredsceneId · string or integer · requiredurl · string · requiredyaw · number · requiredpitch · number · requiredscale · number · optionalrotation · number · optional| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours and get_tour list it. (at least 1 character) |
sceneId | string or integer | yes | A scene (photo) id, as get_tour lists it. |
url | string | yes | A public https address of a JPEG, PNG or WebP image (at most 20 MB). (at least 1 character, up to 2048 characters) |
yaw | number | yes | Where the picture's centre sits: degrees on the scene's photo: 0 = the photo's centre column, positive to the right; any value is wrapped into (-180, 180]. |
pitch | number | yes | Where the picture's centre sits: degrees: 0 = the horizon, +90 = straight up, -90 = straight down. (at least -90, at most 90) |
scale | number | no | Size: 0.5 – 2, default 1. (at least 0.5, at most 2) |
rotation | number | no | Turn in the picture's own plane, degrees (stored in [0, 360)); default 0. |
Example: add_flat_image { "tourId": "…", "sceneId": "…", "url": "https://example.com/floor-plan.png", "yaw": 0, "pitch": 0 }
update_flat_image · Change a flat imageChanges an existing flat image: scale (0.5 – 2), rotation (degrees, absolute) and its place (yaw with pitch). Only the fields you give change. Get flat image ids from get_tour (flatImages). To use another picture, remove this one and add a new one.
tourId · string · requiredflatImageId · string · requiredscale · number · optionalrotation · number · optionalyaw · number · optionalpitch · number · optional| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours and get_tour list it. (at least 1 character) |
flatImageId | string | yes | The flat image id, as get_tour lists it. (at least 1 character, up to 200 characters) |
scale | number | no | Size: 0.5 – 2. (at least 0.5, at most 2) |
rotation | number | no | Turn in the picture's own plane, degrees (absolute, stored in [0, 360)). |
yaw | number | no | The new place (give with pitch): degrees on the scene's photo: 0 = the photo's centre column, positive to the right; any value is wrapped into (-180, 180]. |
pitch | number | no | The new place (give with yaw): degrees: 0 = the horizon, +90 = straight up, -90 = straight down. (at least -90, at most 90) |
Example: update_flat_image { "tourId": "…", "flatImageId": "…", "scale": 1.5 }
remove_flat_image · Remove a flat imageRemoves one flat image from its scene. Get flat image ids from get_tour (flatImages).
tourId · string · requiredflatImageId · string · required| Input | Type | Required | What it is |
|---|---|---|---|
tourId | string | yes | The tour id, as list_tours and get_tour list it. (at least 1 character) |
flatImageId | string | yes | The flat image id, as get_tour lists it. (at least 1 character, up to 200 characters) |
Example: remove_flat_image { "tourId": "…", "flatImageId": "…" }
Ready-made instructions some assistants offer in a menu (for example the + or / menu in Claude). Pick one, fill in the blanks, and the assistant follows the whole workflow.
add_generated_scene)Makes a 360° scene with your own AI image generator (a staging concept, a "what it could look like" view) and adds it to one of your tours; Orbix360 stretches it to 2:1 and blends its seam.
Fill in
tour (required): The tour's name or id (up to 200 characters).
brief (required): What the scene should show, e.g. "the living room staged in mid-century modern" (up to 2,000 characters).
add_hotspots_to_tour)Looks at every scene of one of your tours, links the scenes with navigation hotspots and adds the info hotspots you ask for.
Fill in
tour (required): The tour's name or id (up to 200 characters).
brief (optional): Optional: which rooms connect and what to point out (up to 2,000 characters).
build_tour_from_photos)Creates a tour from your 360° photos, links the scenes, adds notes, sets each scene's opening view and hands back the share links.
Fill in
name (required): The tour name (up to 200 characters).
photos (required): The photos: public https URLs, local file paths and/or the names of photos attached in the chat, one per line or comma-separated (up to 50).
kind (optional): "multi" (default) for a walkable tour of several photos, "single" for one photo.
brief (optional): Optional: which rooms connect, what to point out, anything else the tour should show (up to 2,000 characters).
The Model Context Protocol (MCP) is an open standard that lets AI assistants use other apps. The Orbix360 MCP server lets an assistant you connect create and edit the 360° tours in your account.
Claude, ChatGPT, Cursor and any other assistant that supports remote MCP servers. Most sign in through your browser; the others can use a personal access token.
No. It works on every plan at no extra cost, and your plan's limits on tours, photos and file size apply exactly as in the web app.
You approve each assistant on an Orbix360 page, and it cannot buy anything, change a subscription or change your account settings. You can disconnect it at any time under Connected apps.
Yes. It can add photos from a web address, or give you an upload link where you drop each photo in your browser.
New to this? Read the step-by-step help article: Connect an AI assistant to Orbix360