PlayCanvas Editor MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | The port number for the MCP server to listen on | 52000 |
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": true
} |
| prompts | {} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_entitiesA | Create one or more entities (optionally nested hierarchies) in the current scene. Use this to add new objects: cameras, lights, models, UI, empty groups, etc. Coordinates are local to the parent; rotation is euler degrees; scale is a multiplier. Returns the created entity summaries inline (resource_id, name, path, components) so you do NOT need a follow-up list_entities call to recover the new ids. Physics note: rigidbody/collision components only simulate if the project has the Ammo physics module enabled (Editor: click IMPORT AMMO / enable physics in project settings). Without it, rigidbodies are created but stay frozen at launch — enable Ammo before relying on physics rather than pausing to ask. When NOT to use: to change an existing entity (use modify_entities), to add a component to an existing entity (use add_components), or to instantiate a template asset (use instantiate_template_assets). |
| modify_entitiesA | Set or unset properties on existing entities by dot-notation path. Valid top-level paths: "name", "enabled", "position" ([x,y,z] local), "rotation" ([x,y,z] euler degrees), "scale" ([x,y,z]), "tags". Component properties use "components..", e.g. "components.light.intensity", "components.camera.fov", "components.render.castShadows", "components.script.scripts..attributes." (the entity must already have that component; add it with add_components first). Each edit targets one entity id + one path. Returns the post-edit summaries of the affected entities. Edits are validated on write: an unknown top-level path, or a component path for a component the entity does not have, fails immediately with a message listing the entity's valid paths/components — so you can fix it in one shot instead of retrying blind. When NOT to use: to create entities (use create_entities), to add/remove components (use add_components/remove_components), or to change scene-wide settings (use modify_scene_settings). |
| duplicate_entitiesA | Duplicate existing entities (including their children) in place under the same parent. Returns the new entity summaries. Set rename=true to auto-suffix names to avoid duplicates. When NOT to use: to create a reusable prefab across scenes (create a template asset instead) or to build a brand-new entity (use create_entities). |
| reparent_entityA | Move an entity to a new parent in the hierarchy, optionally at a specific child index. Set preserveTransform=true to keep the entity at the same world position after moving. Returns the moved entity summary (including its new hierarchy path). When NOT to use: to change position/rotation values directly (use modify_entities). |
| delete_entitiesA | Permanently delete entities and all of their descendants. This is destructive and not undoable via this tool. The scene root cannot be deleted. Returns { deleted: }. When NOT to use: to temporarily hide an entity (set enabled=false via modify_entities instead) or to remove a single component (use remove_components). |
| get_entityA | Get the complete edit-time JSON for one entity by resource_id. |
| list_entitiesA | List entities in the current scene, returning compact summaries by default (resource_id, name, hierarchy path, parent, enabled, tags, component names). Results are paginated: use limit (default 50) and offset to page through large scenes; the response meta includes total, count, hasMore and nextCursor. Filter with name (case-insensitive contains), component (only entities with that component) and/or tag. Use full=true only when you need the complete entity JSON (large; prefer summaries). An empty result is a successful, empty list (not an error). When NOT to use: when you already know an entity id and just need to act on it; for runtime/play-mode state (this returns edit-time data only). |
| resolve_entitiesA | Resolve entities by name into their resource_ids and hierarchy paths, so you can drive follow-up calls without shuttling UUIDs. By default matches case-insensitive substrings; set exact=true to match the full name. Returns summaries (resource_id, name, path, components). An empty result is a successful, empty list (not an error). When NOT to use: when you need filtering by component/tag or pagination (use list_entities). |
| add_componentsA | Add one or more components to an existing entity (camera, light, render, collision, rigidbody, element, screen, script, sound, etc.). Pass each component's initial data under its name. Returns the updated entity summary. Physics note: rigidbody/collision components only simulate when the project has the Ammo physics module enabled (Editor: IMPORT AMMO / enable physics in project settings). If it is not enabled, add the components then enable Ammo — do not stall on the decision. When NOT to use: to create a new entity (use create_entities), to tweak an existing component property (use modify_entities), or to attach a script to a script component (use attach_script). |
| remove_componentsA | Remove one or more components from an entity by component name. Returns the updated entity summary. When NOT to use: to delete the whole entity (use delete_entities) or to just disable a component (set components..enabled=false via modify_entities). |
| add_script_component_scriptA | Add a named script to an entity that ALREADY has a script component. Returns the updated entity summary. When NOT to use: if the entity has no script component yet, prefer attach_script, which creates the component and attaches the script in one call. |
| attach_scriptA | Attach a script to an entity in one step: creates the script component if missing, then adds the named script. This consolidates the common "add script component" + "add script" flow. Returns the updated entity summary. Note: the script must already exist as a parsed script asset (create one with create_assets type="script", set its code with set_script_text, then script_parse). When NOT to use: to write the script's source code (use set_script_text) or to set script attribute values (use modify_entities on components.script.scripts..attributes). |
| add_entity_scriptsB | Attach a parsed script to one or more entities, creating script components when needed. |
| remove_entity_scriptsC | Remove a script from one or more entities. |
| move_entity_scriptA | Move a script to a new execution-order index on an entity. |
| search_entitiesA | Fuzzy-search entities by name and return the best matches ranked by relevance (each as a compact summary). Use this to find an entity when you only know part of its name. When NOT to use: to filter by component or tag (use list_entities) or to find entities using a script (use find_entities_by_script). |
| find_entities_by_scriptA | List the entities whose script component uses a given (registered) script name. Returns compact entity summaries. When NOT to use: to search entities by name (use search_entities) or to read a script's source (use get_asset_text). |
| create_assetsA | Create one or more native data/text assets. Imported binary assets use upload_assets. Each asset is { type, options }; options vary by type (e.g. material takes data, script takes filename/text, template takes an entity id). Successful batches return the existing asset-summary array. Failed batches retain error status and expose succeeded and failed entries in response metadata. When NOT to use: to add an existing asset to an entity (use add_components/modify_entities) or to change a material's look after creation (use set_material_properties). |
| list_assetsA | List project assets, returning compact summaries by default (id, name, type, folder, tags). Results are paginated: use limit (default 50) and offset; the response meta includes total, count, hasMore and nextCursor. Filter with type, name (case-insensitive contains) and/or tag. Use full=true only when you need the complete asset JSON (large). An empty result is a successful, empty list (not an error). When NOT to use: to search the public asset store (use store_search). |
| get_assetA | Get the complete JSON for one project asset by id. |
| get_asset_referencesA | List the project assets, entities, or settings that reference an asset. |
| delete_assetsA | Permanently delete assets by id. This is destructive; entities referencing the deleted assets will lose those references. Returns { deleted: }. When NOT to use: to remove an asset reference from an entity without deleting the asset itself (use modify_entities). |
| instantiate_template_assetsA | Instantiate template assets into the scene, creating entity hierarchies from them. Returns the created entity summaries. When NOT to use: for non-template assets (only type="template" assets can be instantiated) or to build an entity from scratch (use create_entities). |
| upload_assetsA | Upload local files into the designated project, or replace an existing asset source by providing its id. Files are limited to 512 MiB each; the result separates succeeded and failed entries. |
| modify_assetsA | Edit asset name, tags, preload, or data paths. Array operations are supported under data.*. Anim state graph structure and animation events require their dedicated mutation tools. |
| move_assetsA | Move assets to a folder in the designated project and wait until their paths update. Omit folderId to move them to the root. |
| duplicate_assetsA | Duplicate assets in their current folders and return the created asset summaries. |
| replace_assetA | Replace references to one asset with another asset. |
| reimport_assetsA | Re-run the import pipeline for existing source assets and return succeeded and failed entries. |
| download_assetA | Download an asset to a local file. Downloads are limited to 512 MiB and never overwrite unless overwrite=true. |
| get_template_overridesA | Read the current apply/revert override records for a template instance. |
| apply_template_overridesC | Apply all overrides from a template instance, or only the supplied override records. |
| revert_template_overridesA | Revert all overrides on a template instance, or only the supplied override records. |
| unlink_template_instancesA | Unlink template instances while keeping their current entity data. |
| set_material_diffuseA | Set only the diffuse (base) color of a material. Color is [r,g,b] in 0-1. When NOT to use: to change any other material property, or to set several properties at once (use set_material_properties). |
| set_material_propertiesA | Set any combination of properties on a material asset in one call (diffuse, emissive, metalness, gloss/shininess, opacity, maps, etc.). Only the provided fields are changed; all fields are optional. Colors are [r,g,b] 0-1; map fields take asset ids. Returns the updated asset summary. When NOT to use: to change only the diffuse color (set_material_diffuse is a shorthand) or to create a new material (use create_assets type="material"). |
| get_asset_textA | Read the full text contents of a text-based asset (script, text, json, css, html, or shader), returned as text. When NOT to use: to read a script's declared name or attribute definitions (use script_parse), to read binary assets like textures or models, or to list assets (use list_assets). |
| set_asset_textC | Overwrite the full contents of a CSS, HTML, JSON, script, shader, or text asset. |
| set_script_textA | Overwrite the source code of an existing script asset. Provide the full file contents in text. After changing the code, call script_parse so the editor re-reads the script's name and attributes. When NOT to use: to attach a script to an entity (use attach_script) or to create the script asset itself (use create_assets type="script"). |
| script_parseA | Parse a script asset to extract its declared script name(s) and attribute definitions. Run this after set_script_text. Returns the parsed script metadata. When NOT to use: to read entity-level script attribute values (use list_entities/modify_entities). |
| get_animation_eventsA | Get the stable-id event map for a GLB animation asset, including time and optional number/string payloads. |
| modify_animation_eventsA | Add, update, or remove GLB animation events as one undoable transaction. Times are normalized from 0 to 1. Event ids remain stable and generated ids are returned. |
| get_anim_state_graphA | Get the complete structural data for an anim state graph asset, including layers, states, transitions, conditions, and parameters. |
| modify_anim_state_graphA | Apply a validated batch of structural operations to an anim state graph as one undoable transaction. Add operations may omit id to allocate one; generated ids and the resulting graph are returned. State deletion also deletes attached transitions. Parameter deletion is rejected while conditions use it. Use layer.update defaultStateId to change a layer default before removing its old default state. |
| bake_lightmapsA | Bake scene lightmaps, optionally limited to the given entities. Returns only after baking finishes and reports model assets missing UV1. |
| unwrap_model_assetA | Generate UV1 data for a model asset using the editor's unwrap worker and update its source file. |
| cancel_model_unwrapA | Cancel an in-progress UV1 unwrap for a model asset. |
| convert_texture_assetA | Convert a texture source to a new AVIF, JPEG, PNG, or WebP texture asset. |
| create_texture_atlasA | Duplicate a texture asset as an editable texture atlas and return the new asset. |
| create_cubemap_from_textureB | Convert an equirectangular texture to six face textures and a cubemap asset. |
| process_font_assetA | Rebuild a font asset for an explicit character set and optional inversion setting. |
| generate_texture_metadataB | Generate missing pipeline metadata for a texture asset. |
| process_texture_variantsB | Compress or remove explicit texture variants and wait for processing to settle. |
| prefilter_cubemapC | Generate runtime lighting data for a cubemap. |
| clear_cubemap_prefilterA | Remove generated runtime lighting data from a cubemap. |
| modify_sprite_assetA | Modify sprite data (atlas, frame order, pixels per unit, render mode) or replace a texture atlas frame map in one undoable edit. |
| modify_bundle_assetA | Add or remove project assets from a bundle. Returns accepted and rejected ids; invalid asset types and duplicates are rejected. |
| list_buildsC | List publish and download builds for the designated project, including durable job status and artifacts. |
| get_buildA | Get a publish or download build job by id from the designated project. |
| create_buildB | Create a published PlayCanvas build for scenes in the designated project. Returns the created durable build job. |
| download_buildA | Create a static or NPM download build, wait for its artifact, and save the archive to an explicit local path. Existing files are not overwritten unless overwrite=true. |
| set_primary_buildA | Set a completed publish build as the project primary build. |
| delete_buildA | Permanently delete a build job and its linked artifact from the designated project. |
| modify_scene_settingsA | Modify scene-wide settings such as physics gravity and rendering (fog, ambient light, skybox, tonemapping, exposure, lightmapping). Only the provided fields are changed. Returns the full resulting scene settings snapshot. When NOT to use: to change a single entity (use modify_entities) or to read settings without changing them (use query_scene_settings). |
| query_scene_settingsA | Read the current scene-wide settings (physics + rendering). Returns the full settings object. When NOT to use: to change settings (use modify_scene_settings). |
| rename_sceneB | Rename the currently loaded scene. Load another scene first to rename it. |
| list_scenesA | List the scenes in the current project/branch. Returns scene records including id, uniqueId and name. Use uniqueId with load_scene to switch scenes, and id with get_scene / duplicate_scene / delete_scene. When NOT to use: to list assets (use list_assets). |
| get_sceneA | Get a single scene by its id (not uniqueId). Returns the full scene record. When NOT to use: to load/switch to a scene in the editor (use load_scene) or to list scenes (use list_scenes). |
| load_sceneA | Load (switch the editor to) a scene by its uniqueId. This unloads the current scene and opens the target one. By default the tool returns after queuing the load. Set wait=true to return only after the requested scene is active. When NOT to use: to read a scene without switching (use get_scene) or to create a new scene (use create_scene). |
| create_sceneA | Create a new empty scene in the current project/branch. Returns the created scene record. This does not switch to the new scene; call load_scene with its uniqueId to open it. When NOT to use: to copy an existing scene (use duplicate_scene). |
| duplicate_sceneA | Duplicate an existing scene by its id, giving the copy a new name. Returns the created scene record. When NOT to use: to create an empty scene (use create_scene). |
| delete_sceneA | Permanently delete a scene by its id. This is destructive and cannot be undone. When NOT to use: to switch away from a scene without deleting it (use load_scene). |
| modify_project_settingsA | Modify project-wide settings such as physics engine, rendering device (WebGL2/WebGPU), layers, loading screen, script loading order, input, and resolution. Pass a partial object of setting path/value pairs (nested objects or dot-paths, e.g. { enableWebGpu: true, "layers.0.name": "World" }); only the provided fields change. Returns the full resulting project settings snapshot. When NOT to use: to change per-scene settings like fog or gravity (use modify_scene_settings) or a single entity (use modify_entities). |
| query_project_settingsA | Read the current project-wide settings (physics, rendering device, layers, loading screen, script loading order, input, resolution). Returns the full settings object. When NOT to use: to change settings (use modify_project_settings) or to read per-scene settings (use query_scene_settings). |
| query_settingsA | Read any Editor settings scope: project, current scene, per-project user preferences (including editor.pipeline asset import defaults), global user preferences, session settings, or private project settings. Omit path for the complete scope or provide a dot path for one value. |
| modify_settingsA | Set or unset arbitrary Editor settings by dot path in project, scene, projectUser, user, session, or projectPrivate scope. Asset import defaults are in projectUser under editor.pipeline.*. Project, scene, and private settings require project write access. Query the scope first to discover current paths and values. |
| store_searchA | Search the public PlayCanvas asset store by keyword. Results are paginated via skip + limit. Reaches an external service over the network. Use store_get for full details of a result, then store_download to import it. When NOT to use: to search assets already in this project (use list_assets). |
| store_getA | Get full details (including license info needed to download) for a single public store asset by id. Reaches an external service over the network. When NOT to use: to fetch a project-local asset (use list_assets). |
| store_downloadA | Clone/import a public store asset into the current project. Requires the license fields returned by store_get. Reaches an external service over the network and adds new assets to the project. When NOT to use: for assets already in the project. |
| list_store_licensesA | List valid Store licenses for project imports. |
| sketchfab_searchB | Search downloadable Sketchfab models. |
| sketchfab_getA | Get a Sketchfab model by uid. |
| sketchfab_importB | Import a downloadable Sketchfab model into the current project. |
| my_assets_searchC | Search assets owned by the current user. |
| my_assets_importA | Import an asset owned by the current user into the current project. |
| query_viewport_stateA | Read the exact editor viewport camera and overlay state so it can be restored after visual inspection. |
| set_viewport_stateA | Set the editor viewport camera transform, projection, grid, bones, icon size, and expanded state. This controls the editor view, not an entity's persisted enabled state. |
| query_viewport_visibilityA | List entities hidden only in the editor viewport. This does not read or change persisted entity enabled values. |
| set_viewport_visibilityA | Hide or show entities only in the editor viewport without changing their persisted enabled values. |
| capture_viewportA | Capture a screenshot of the editor viewport (the current editing camera view) as a downscaled WebP image, for visual verification of edit-time state. Tip: call focus_viewport first to frame the entities you care about. Note: this renders the editor preview only (scripts/physics/animation are NOT running). When NOT to use: to verify play-mode/runtime behavior (use capture_runtime after launch_start). |
| focus_viewportA | Frame the editor camera on the given entities, optionally from a preset view (top/front/etc.) or a custom yaw/pitch. Useful before capture_viewport. Returns { focused: }. When NOT to use: to move an in-scene camera entity (use modify_entities on its transform). |
| focus_cameraA | Aim the current editor camera to look at a world-space point from a given distance. Useful for framing an exact location before capture_viewport. When NOT to use: to frame specific entities (use focus_viewport) or to move an in-scene camera entity (use modify_entities on its transform). |
| launch_startA | Start a real Launch runtime instance of the current scene (the editor's Launch button) so scripts, physics, animation and input actually run. Opens the launch page in a new browser window with debug logging on; the editor bridges it automatically. Returns { url, sceneId, ready, adopted } where ready=true means the runtime is usable by capture_runtime / read_runtime_logs, and adopted=true means it attached to an app that was already running instead of starting a new one (which happens only when no options are passed, so pass an option to force a fresh launch). This is the prerequisite for all runtime tools. If ready=false, the page may still be loading or popups were blocked; poll read_runtime_logs or retry. When NOT to use: to screenshot the editor (use capture_viewport); to change the scene (edit-time tools). |
| launch_stopA | Stop the running Launch instance started by launch_start (closes the launch window). Returns { stopped }. When NOT to use: there is no need to call this between captures — keep the instance running and re-capture. |
| capture_runtimeA | Screenshot the RUNNING Launch instance (not the editor preview) as a downscaled WebP image — the agent's "eye" for visually verifying play-mode behavior. Requires launch_start first. Captures the live frame buffer, so what you see reflects scripts/physics/animation actually running. When NOT to use: before launch_start (use capture_viewport for edit-time visuals). |
| read_runtime_logsA | Read console output (log/info/warn/error), uncaught exceptions and unhandled rejections from the RUNNING Launch instance — the first-line signal for runtime bugs. Requires launch_start first. Returns the most recent entries first, paginated (meta has total/count/hasMore/nextCursor). Defaults to warnings + errors; set level="all" (or debug/info/warn/error as a minimum severity) to widen, and keyword to filter. An empty result is success, not an error. When NOT to use: to read edit-time editor logs (this is the launched app only). |
| query_runtime_stateA | Read the LIVE runtime state of entities in the RUNNING Launch instance — the non-visual ground-truth read-back for verifying play-mode behaviour without guessing screenshot timing. Requires launch_start first. For each matched entity returns world position, local position, euler rotation, scale, enabled, component names, plus rigidbody (type/mass/linearVelocity/angularVelocity) and element (type/text, e.g. a HUD score label) when present. Filter with ids (editor resource_ids — the runtime uses the same GUIDs) or name (case-insensitive substring); omit both to page through every entity. Paginated via limit (default 50) + offset (meta has total/count/hasMore/nextCursor). Use this to answer questions the camera cannot: "did the ball actually move / fall through the floor?", "is the rigidbody simulating (velocity != 0)?", "what does the score HUD say?". An empty result is success, not an error. When NOT to use: for edit-time scene data (use list_entities); before launch_start; to change state (use modify_entities / inject_input). |
| inject_inputA | Dispatch keyboard / mouse / touch input to the RUNNING Launch instance so you can drive end-to-end interactions ("press W to move", "click a button", "tap the screen"). Requires launch_start first. Events run in order; coordinates are CSS pixels from the canvas top-left (match capture_runtime's framing). Returns { dispatched }. Patterns: key press with holdMs to move for a duration; mouse click at (x,y); a down→move…→up sequence for dragging; touch tap for mobile UI. After injecting, use capture_runtime / read_runtime_logs / query the scene to observe the effect. When NOT to use: to change entity data directly (use modify_entities) or before launch_start. |
| undoA | Undo the last edit in the editor. Returns whether anything was undone plus the resulting { canUndo, canRedo } state. Use this to roll back a change you just made. When NOT to use: to switch scenes (use load_scene). |
| redoA | Redo the last undone edit in the editor. Returns whether anything was redone plus the resulting { canUndo, canRedo } state. When NOT to use: to repeat an arbitrary action (redo only re-applies an edit that was just undone). |
| get_selectionA | Read the editor's current selection. Returns { type: "entity" | "asset" | null, ids: [...] }. Entity ids are resource_ids (strings); asset ids are numbers. When NOT to use: to list all entities/assets (use list_entities/list_assets). |
| set_selectionA | Replace the editor's selection with the given entities or assets. Selecting shows them in the inspector and highlights them in the viewport/tree. Pass type "entity" (ids are resource_ids) or "asset" (ids are numbers). An empty ids array clears the selection. When NOT to use: to modify the selected items (use modify_entities) or to frame them in the viewport (use focus_viewport). |
| clear_selectionA | Clear the editor's current selection. |
| read_editor_logsA | Read recent edit-time Editor console logs with filters and pagination. |
| set_transform_gizmoA | Set the viewport transform gizmo: mode (translate/rotate/scale/resize), coordinate space (world/local), and/or snapping. Only the provided fields change. Returns the resulting { mode, space }. When NOT to use: to actually move/rotate/scale an entity (use modify_entities on its transform). |
| vcs_statusA | Read the current version-control state: the active branch ({ id, name, latestCheckpointId }), the projectId, and whether a merge is in progress. Use this to confirm which branch you are on, especially after create_branch/switch_branch/restore_checkpoint/hard_reset_checkpoint (which reload the editor). When NOT to use: to list branches (use list_branches) or checkpoints (use list_checkpoints). |
| list_branchesA | List the project's branches. Returns branch records ({ id, name, createdAt, closed, permanent, latestCheckpointId, user }). Paginates via limit + cursor (meta.nextCursor); set closed:true to include closed branches, favorite:true for your favourites. When NOT to use: to read the current branch (use vcs_status). |
| create_branchA | Create a new branch (scope a feature on its own branch) and switch the editor to it. Branches from the current branch by default. This RELOADS the editor; the tool waits for it to reconnect and returns the resulting vcs_status on the new branch. Name must be unique in the project and at most 1000 characters. When NOT to use: to switch to an existing branch (use switch_branch). |
| switch_branchA | Switch (checkout) the editor to an existing branch by its id (from list_branches). This RELOADS the editor; the tool waits for it to reconnect and returns the resulting vcs_status on the target branch. When NOT to use: to create a new branch (use create_branch). |
| list_checkpointsA | List checkpoints on a branch (the current branch by default), newest first. Returns records ({ id, createdAt, description, user }). Paginates via limit + cursor (meta.nextCursor); backend default limit 25, max 50. Use a checkpoint id with restore_checkpoint / hard_reset_checkpoint. When NOT to use: to list branches (use list_branches). |
| create_checkpointA | Create a checkpoint (an immutable snapshot of the current branch's scenes/assets/settings) with a description. Returns the created checkpoint ({ id, createdAt, description }). Does not reload the editor. Snapshotting is asynchronous; for very large projects it may exceed the request timeout, in which case the checkpoint usually still completes — confirm with list_checkpoints. When NOT to use: to roll back to a checkpoint (use restore_checkpoint). |
| restore_checkpointA | Restore (soft revert) the current branch's working state to a checkpoint. History is preserved — later checkpoints remain. This RELOADS the editor; the tool waits for it to reconnect and returns the resulting vcs_status. When NOT to use: to permanently erase later checkpoints (use hard_reset_checkpoint). |
| hard_reset_checkpointA | DESTRUCTIVE: reset the branch head back to a checkpoint and PERMANENTLY ERASE every checkpoint created after it. Cannot be undone. This RELOADS the editor; the tool waits for it to reconnect and returns the resulting vcs_status. When NOT to use: to roll back working state while keeping history (use restore_checkpoint). |
| get_checkpointA | Get a single checkpoint by its id. Returns the checkpoint record ({ id, createdAt, description, user }). When NOT to use: to list a branch's checkpoints (use list_checkpoints). |
| close_branchA | Close a branch (a soft, reversible archive — reopen it later with open_branch). Cannot close the current branch or a permanent branch. Does not reload the editor. When NOT to use: to permanently remove a branch (use delete_branch). |
| open_branchA | Re-open a previously closed branch. Find closed branches with list_branches({ closed: true }). Does not reload the editor. When NOT to use: to switch the editor onto the branch (use switch_branch). |
| delete_branchA | DESTRUCTIVE: permanently delete a branch and its checkpoints. Cannot be undone. Cannot delete the current branch or a permanent branch. Does not reload the editor. When NOT to use: to archive a branch reversibly (use close_branch). |
| start_mergeA | Start merging a source branch into the CURRENT branch (the destination is always the branch the editor is on). Waits for the auto-merge to finish and returns the merge ({ id, mergeProgressStatus, conflicts, numConflicts }). If conflicts is non-empty, resolve them with resolve_conflicts, then apply_merge. Does not reload the editor. When NOT to use: to inspect an in-progress merge (use get_merge). |
| get_mergeA | Get the current state of a merge, including its status and full conflict list ({ id, mergeProgressStatus, conflicts, numConflicts }). Use to re-check which conflicts are still unresolved before apply_merge. When NOT to use: to start a merge (use start_merge). |
| resolve_conflictsA | Resolve one or more merge conflicts by picking a side, or revert them to unresolved. resolution "source" keeps the merged-in branch's version, "dest" keeps the current branch's version, "revert" un-resolves. Returns the updated conflict records. Repeat until get_merge shows no unresolved conflicts, then apply_merge. When NOT to use: to inspect a conflict's content first (use get_conflict_file). |
| get_conflict_fileA | Read the content of one side of a conflicting file so you can decide how to resolve it. Read-only; does not resolve anything. When NOT to use: to choose a resolution (use resolve_conflicts). |
| apply_mergeA | Apply a merge whose conflicts are all resolved. Call twice: first with finalize:false to prepare and review, then finalize:true to commit. finalize:true writes the merge checkpoint onto the current branch and RELOADS the editor (the tool waits for reconnect and returns vcs_status); finalize:false does not reload. When NOT to use: to abort a merge (use cancel_merge). |
| cancel_mergeA | Force-stop an in-progress merge, discarding the merge and its conflicts. Project data is untouched. Does not reload the editor. When NOT to use: to commit a merge (use apply_merge). |
| diff_checkpointsA | Compute the diff between two checkpoints and return the change data. Branch ids default to the current branch. Read-only; does not reload the editor. Use to inspect what changed before merging or restoring. When NOT to use: to roll back to a checkpoint (use restore_checkpoint). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/playcanvas/editor-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server