Summer Engine
NPM · SUMMER-ENGINE · 2 COMPONENTS
The game engine built for AI. Any agent makes a multiplayer game and publishes it.
Available components
Last scanned (37 minutes ago)
Scores higher than 50% of npm servers
Category Entertainment and Games
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security81
- No malware found by supply-chain analysis.Pass
- CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
- No install/post-install scripts declared.Pass
- 32 of 105 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 7 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability75
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 21329 tokens (~229/item across 93 items; 93 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management67
- Stability observed for 20 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 94 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.
- 3 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.
- 30 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.
- 25 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.
- 24 Oct 26 −5
- CVE-2023-54404 affects this package: high ▼ security
- Known CVEs: pass → fail ▼ security
- 23 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed npm/summer-engine@4.5.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Vulnerabilities 1 finding
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| GHSA-mrhx-c7xc-m3w5 | CVE-2023-54404 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | yes |
Background: What a vulnerability scan can and cannot prove →
Dependencies 105 packages
| Packages resolved | 105 |
|---|---|
| Stale | 32 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
summer_measure Measure between nodes ~343
Measure the gap or overlap on each axis between two placed nodes, or check that one face of many nodes lies on one plane. Finds facade gaps and modules that stand out. Changes nothing. Guide: summer_docs_read {"id":"tool/measure"}
| Name | Type | Req | Description |
|---|---|---|---|
| a | string | – | pair mode, first node: exact node path relative to the scene root, e.g. './Facade/Wall_01'. |
| axis | string | – | pair mode: report only this axis (x, y or z of the chosen space). |
| b | string | – | pair mode, second node: exact node path relative to the scene root, e.g. './Facade/Wall_01'. |
| face | string | – | plane mode: which face, e.g. '+z' for the face pointing along +z (a facade front that looks toward +z). |
| mode | string | – | pair: gap or overlap per axis between nodes a and b. plane: whether one face of every node in `nodes` lies on one plane. |
| nodes | array | – | plane mode: 2-32 nodes whose face is checked, e.g. every module of one facade line. |
| scenePath | string | yes | Exact scene to read or change, e.g. 'res://levels/street.tscn'. It must be open in the editor (any tab). |
| space | string | – | world: world axes. local: the axes of a (pair) or nodes[0] (plane), for rotated facades. |
| tolerance | number | – | Distance in scene units treated as touching (pair) or coplanar (plane). Default 5 mm. |
No output schema declared.
No examples provided.
summer_navigation_probe Check a navigation route ~156
Check whether two world points are connected on the scene's navigation map: readiness, snapped end points, route length and route points. ready false means no evidence, not no route. Guide: summer_docs_read {"id":"tool/navigation-probe"}
| Name | Type | Req | Description |
|---|---|---|---|
| end | array | yes | Requested world-space route destination [x,y,z]. |
| navigationLayers | integer | – | Godot navigation-layer bitmask; only enabled matching regions are used. |
| optimize | boolean | – | Use Godot's corridor-funnel path post-processing; false uses edge-centered points. |
| scenePath | string | yes | Exact 3D scene whose World3D navigation map should be queried. |
| start | array | yes | Requested world-space route start [x,y,z]. |
No output schema declared.
No examples provided.
summer_open_main_scene Open the main scene ~46
Open the project's main scene (from project settings) in the editor, instead of guessing a scene file name. Guide: summer_docs_read {"id":"tool/open-main-scene"}
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
summer_open_scene Open a scene in the editor ~97
Open a scene file in the editor and show its tab. A visible tab change for the person, not a target for edits: edits take scenePath. Take paths from summer_get_project_context; never guess them. Guide: summer_docs_read {"id":"tool/open-scene"}
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Scene path, e.g. 'res://main.tscn' or 'res://levels/level1.tscn' |
No output schema declared.
No examples provided.
summer_place_adjacent Place a node against another ~323
Move one node so its bounds face sits against another node's, lining up the other axes: modules edge to edge, storeys stacked. Saves the scene and verifies the gap. Guide: summer_docs_read {"id":"tool/place-adjacent"}
| Name | Type | Req | Description |
|---|---|---|---|
| alignOtherAxes | – | – | How to line up the other two axes: min, center, max or none (keep). One mode for both, or per axis, e.g. {y: 'min', z: 'max'} for same base height and one front plane. |
| axis | string | yes | Axis along which the two pieces meet (x, y or z of the chosen space). |
| gap | number | – | Distance between the two faces along axis. 0 = flush; negative = overlap (inset). |
| reference | string | yes | Node that stays put: exact node path relative to the scene root, e.g. './Facade/Wall_01'. |
| scenePath | string | yes | Exact scene to read or change, e.g. 'res://levels/street.tscn'. It must be open in the editor (any tab). |
| side | string | yes | max: subject goes on the reference's +axis side (its min face against the reference's max face). min: the -axis side. |
| space | string | – | world: world axes. local: the reference's own axes, for a rotated facade. |
| subject | string | yes | Node to move: exact node path relative to the scene root, e.g. './Facade/Wall_01'. |
No output schema declared.
No examples provided.
summer_play Play the game ~527
Play the game in the editor's real window (agents may; quiet: the editor keeps its tab and focus): main scene or a given one, embedded or a hidden offscreen instance, optional seed and fixed frame rate, or local multiplayer (players). Next: summer_is_running, summer_get_diagnostics. Guide: summer_docs_read {"id":"tool/play"}
| Name | Type | Req | Description |
|---|---|---|---|
| deterministic | boolean | – | Offscreen only: launch with --fixed-fps 60 --summer-seed <seed> --audio-driver Dummy so the run is reproducible and input replays with seed are accepted. |
| fixed_fps | integer | – | Fixed timestep for this launch (child gets --fixed-fps <n>): scene time decouples from the wall clock, the game runs as fast as it renders, frame-count-derived state repeats run to run, and at_ms… |
| focus | boolean | – | Default false = QUIET play (PlayGame agent:true): the editor does not switch to the Game tab or grab focus for the embedded game, so the user keeps working. |
| instance | string | – | Name a game instance. 'main' (default) = the editor's embedded game. Any other name with mode:'offscreen' spawns a disposable parallel instance (at most 3) that the runtime tools address by this name. |
| mode | string | – | 'embedded' (default) plays in the editor; 'offscreen' spawns a hidden child process (requires instance != 'main'). |
| players | integer | – | Local Play for a Summer multiplayer game (engine with Local Play): start the game's authority headless plus this many clients on this machine, each joining through the game's own Summer.client.join. |
| queue | string | – | Local Play: the summer.build.json queue the local World stands in for (default: the first declared queue). |
| scene | string | – | Scene to run instead of main scene, e.g. 'res://levels/test_level.tscn' |
| seed | integer | – | Pin the game's GLOBAL RNG for this launch (child gets --summer-seed <seed>; default 20260725 when deterministic:true and seed is omitted). |
| spectators | integer | – | Local Play: also start this many spectator clients (only with players). |
| speed | number | – | User time scale applied on session start, (0, 100] — e.g. 0.5 for half speed. |
| time_scale | number | – | Engine time scale for this launch (child gets --time-scale <f>). Not a determinism pin on its own. |
No output schema declared.
No examples provided.
summer_project_setting Set a project setting ~72
Set one project.godot setting, such as application/run/main_scene, the window size, the renderer or the default gravity. Guide: summer_docs_read {"id":"tool/project-setting"}
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Setting key path, e.g. 'application/config/name' |
| value | – | yes | Setting value |
No output schema declared.
No examples provided.
summer_projects_create_local Create a project on this computer ~155
Create a project on this computer. Writes a template (3d-basic by default) to a folder, no shell needed. Returns projectPath. Next: summer_projects_open_local.
| Name | Type | Req | Description |
|---|---|---|---|
| dir | string | – | The project folder: a new or empty folder, not inside another project; ~ is home. Default <name> next to the session's project, in the session's folder, or in ~/Documents/Summer. |
| name | string | – | The project's name and folder name. Default my-game (or the template's name). |
| template | string | – | Template slug (docs.search finds them): 3d-basic (default), empty, 3d-third-person-controller, 2d-platformer, ... |
No output schema declared.
No examples provided.
summer_projects_open_local Open a project in Summer Engine ~100
Open a project in Summer Engine. Waits until it connects; installs the engine only with install: true (the person's yes). Next: summer_get_project_context.
| Name | Type | Req | Description |
|---|---|---|---|
| install | boolean | – | Install Summer Engine first when it is missing. Set true only after the person said yes. |
| path | string | – | The project folder (holds project.godot), e.g. projectPath from summer_projects_create_local. Default this session's project. |
No output schema declared.
No examples provided.
summer_raycast Cast a ray in a scene ~251
Cast one ray from any point in a scene: the node it hits, the point and the normal. Physics first, visible bounds as a declared fallback. Changes nothing. Guide: summer_docs_read {"id":"tool/raycast"}
| Name | Type | Req | Description |
|---|---|---|---|
| collideWithAreas | boolean | – | Also hit Area3D volumes (physics only). |
| collisionMask | integer | – | Godot 3D physics layer mask for physics queries. |
| direction | array | yes | Ray direction [x, y, z]; normalized for you. |
| evidence | string | – | auto: physics first, visual AABB fallback when physics finds nothing (declared). physics or visual_aabb: that channel only. |
| exclude | array | – | Nodes (with their descendants) the ray ignores, e.g. the piece you are about to move. |
| maxDistance | number | – | Maximum ray length in scene units. |
| origin | array | yes | Ray start in scene (world) space [x, y, z]. Nothing needs to be placed there. |
| scenePath | string | yes | Exact scene to read or change, e.g. 'res://levels/street.tscn'. It must be open in the editor (any tab). |
No output schema declared.
No examples provided.
summer_read_file Read a project file ~326
Read a text file of the project (res://), a line or byte window of it, or parts of a .json, with the whole file's sha256. Pass that sha256 to summer_write_file or summer_replace_text to change the file safely. Guide: summer_docs_read {"id":"tool/read-file"}
| Name | Type | Req | Description |
|---|---|---|---|
| json_path | string | – | For a JSON file: return only this value, e.g. 'pieces.wall_a', 'pieces["a b"]', 'items[3].size_m'. |
| keys | array | – | For a JSON object (the file root or the json_path value): keep only these keys; * and ? wildcards, e.g. ['wall_*']. |
| keys_only | boolean | – | For a JSON object: return only its key names (after the keys filter), not the values — a cheap table of contents. |
| limit | integer | – | Return at most this many units (lines by default). The result's window.next_offset continues the read. |
| max_bytes | integer | – | Most bytes of content to return (UTF-8). Default 200000. A window or JSON selection is cut at this size too. |
| offset | integer | – | Skip this many units (lines by default, see unit) before returning content. 0 = from the start. |
| path | string | yes | Project path, e.g. res://scripts/player.gd |
| unit | string | – | What offset/limit count: 'lines' (default) or 'bytes' (cut on UTF-8 character boundaries). |
No output schema declared.
No examples provided.
summer_recent_events Read recent engine events ~176
Read the newest engine events (saves, plays, op results, script errors, imports) at once, and next_seq, the cursor to pass to summer_wait_for_event. Guide: summer_docs_read {"id":"tool/recent-events"}
| Name | Type | Req | Description |
|---|---|---|---|
| kinds | array | – | Event kinds to deliver (default: all). v1 kinds: op.applied, op.failed, script.error, play.started, play.stopped, scene.saved, scene.opened, import.completed, selection.changed, snapshot.published. |
| limit | integer | – | Maximum events to return (default 50, cap 200). |
| since | integer | – | Deliver events with seq > since. Omit = the newest `limit` sequence numbers. 0 = the whole retained ring from the oldest (paged: pass next_seq back while truncated is true). |
No output schema declared.
No examples provided.
summer_remove_node Remove a node ~102
Remove a node and all its children from the scene at scenePath and save it. The root cannot be removed. One undo step. Remove top-level nodes only when the person asked for it. Guide: summer_docs_read {"id":"tool/remove-node"}
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Node path to remove, e.g. './World/OldEnemy' |
| scenePath | string | yes | Target scene path, e.g. 'res://main.tscn' |
No output schema declared.
No examples provided.
summer_repeat_along Repeat a scene along a line ~353
Place copies of one scene along a line in one call: fence posts, clamps, a row of windows (at most 64). Returns the created node paths and saves the scene once. Guide: summer_docs_read {"id":"tool/repeat-along"}
| Name | Type | Req | Description |
|---|---|---|---|
| align | string | – | With end + spacing: where the leftover length goes. start = first copy at start; center = leftover split; end = last copy at end. |
| count | integer | – | Number of copies (1-64). |
| direction | array | – | Instead of end: direction of the row; needs count and spacing. |
| end | array | – | Line end. With spacing: as many copies as fit; with count: count copies spread from start to end. |
| namePrefix | string | – | Copies are named <namePrefix>_<n> (default: the template file name). |
| parent | string | yes | Parent for the copies; start/end/direction are in this parent's local space (same as position). |
| rotationDegrees | array | – | rotation_degrees for every copy [x, y, z]. |
| scale | array | – | scale for every copy [x, y, z]. |
| scenePath | string | yes | Exact scene to read or change, e.g. 'res://levels/street.tscn'. It must be open in the editor (any tab). |
| spacing | number | – | Distance between neighbouring copies' origins. |
| start | array | yes | First copy's position [x, y, z] in the parent's space. |
| template | string | yes | Scene to instance for every copy, e.g. 'res://kit/pipes/wall_clamp_a.tscn'. |
No output schema declared.
No examples provided.
summer_replace_node Replace a node ~173
Replace a node with another scene or node type, keeping its parent, index, name, transform and children; the saved file is read back to prove it. Next: summer_get_scene_tree. Guide: summer_docs_read {"id":"tool/replace-node"}
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Node path to replace, e.g. './House3/Front/G_f2_door' |
| scene | string | – | Scene or model to replace with, e.g. 'res://kit/wall_door_02.tscn'. Give exactly one of type or scene. |
| scenePath | string | yes | Target scene path, e.g. 'res://main.tscn' |
| type | string | – | New node type, e.g. 'RigidBody3D'. Give exactly one of type or scene. |
No output schema declared.
No examples provided.
summer_replace_text Replace text in a project file ~125
Replace text in an existing project file. The text must match exactly once unless replace_all is set; the write is guarded by the file's sha256. Then check scripts with summer_get_script_errors. Guide: summer_docs_read {"id":"tool/replace-text"}
| Name | Type | Req | Description |
|---|---|---|---|
| new_text | string | yes | Replacement text; may be empty. |
| old_text | string | yes | Exact text to replace. |
| path | string | yes | Project path, e.g. res://scripts/player.gd |
| replace_all | boolean | – | Replace every exact occurrence instead of requiring one unique match. |
No output schema declared.
No examples provided.
summer_run_editor_script Run a script in a headless editor ~189
Run an EditorScript func _run() in a fresh headless editor against the project on disk: batch and project-wide jobs such as re-saving many scenes. It cannot see unsaved edits. For the open scene use summer_run_script. Guide: summer_docs_read {"id":"tool/run-editor-script"}
| Name | Type | Req | Description |
|---|---|---|---|
| checkpoint | boolean | – | Take a SummerGit checkpoint before the child editor runs. The result confesses (no_rewind_point) when none could be taken. |
| max_seconds | number | – | Time budget in seconds for the child editor (default 120, clamped 15-600). Include boot time — large projects can take 30s+ just to start. |
| source | string | yes | EditorScript GDScript source with `func _run():`. '@tool' / 'extends EditorScript' are optional — missing lines are prepended and reported in normalizations. |
No output schema declared.
No examples provided.
summer_run_script Run a script on a scene ~285
Run one GDScript func run(ctx) in the live editor on the scene at scenePath: the way to make 3 or more scene edits, loops, grids and procedural meshes. Returns reports, output and errors. Loop: summer_world_snapshot, this, summer_snapshot_diff, summer_screenshot. Guide: summer_docs_read {"id":"tool/run-script"}
| Name | Type | Req | Description |
|---|---|---|---|
| checkpoint | boolean | – | Take a SummerGit checkpoint before running (default true). The result confesses (no_rewind_point) when no checkpoint could be taken. |
| max_seconds | number | – | Time budget in seconds (default 20, clamped 5-120). The script blocks the editor while it runs — keep it short. |
| scenePath | string | – | The scene to run against, e.g. 'res://main.tscn'. Opened first when it is not the edited scene, then the person's tab is restored. Omit only to run against whatever scene is open. |
| source | string | yes | GDScript source containing `func run(ctx):`. No extends/@tool line — just the function (plus any helpers). |
| undo | string | – | Transaction mode (newer engines). 'action' (engine default): the whole run is ONE named undo action, and a mid-script runtime error rolls it back before returning (result rolled_back:true) — no… |
No output schema declared.
No examples provided.
summer_runtime_animate Drive animation in the running game ~539
Read and drive animation in the RUNNING game: AnimationPlayer clips, AnimationTree states and Skeleton3D bone poses. cmd state only reads. Prove motion with two reads around summer_game_control step. Guide: summer_docs_read {"id":"tool/runtime-animate"}
| Name | Type | Req | Description |
|---|---|---|---|
| blend | number | – | target:'player' play — custom blend time in seconds. |
| bones | array | – | target:'bones' — bone names to read (omit for the first 256; page larger rigs with this filter). |
| cmd | string | – | Default 'state' (read-only). target:'player': state|play|pause|stop|seek|speed. target:'tree': state|travel|start|stop|set_param|get_param. Ignored for target:'bones'. |
| from_end | boolean | – | target:'player' play — start from the end (backwards). |
| include_rest | boolean | – | target:'bones' — also return each bone's rest Transform3D. |
| instance | string | – | Game instance to address (default 'main' = the editor's embedded game). |
| name | string | – | target:'player' play — clip name (unknown_animation lists the clips). |
| param | string | – | target:'tree' set_param/get_param — parameter path, e.g. 'parameters/Blend/blend_amount'. |
| path | string | yes | ABSOLUTE runtime path of the AnimationPlayer / AnimationTree / Skeleton3D. |
| playback_path | string | – | target:'tree' — state machine playback parameter (default 'parameters/playback'; nested machines use 'parameters/<Node>/playback'). |
| position | number | – | target:'player' seek — position in seconds. |
| reset | boolean | – | target:'tree' travel/start — reset the destination clip (default true). |
| space | string | – | target:'bones' — 'global' (default, skeleton-space global_pose), 'local' (pose), or 'both'. |
| speed | number | – | target:'player' speed — speed_scale (1.0 = normal, negative plays backwards). |
| state | string | – | target:'tree' travel/start — state machine node name (unknown_state lists them). |
| target | string | yes | 'player' = AnimationPlayer (RuntimeAnimation), 'tree' = AnimationTree state machine (RuntimeAnimationTree), 'bones' = Skeleton3D poses (GetRuntimeBones). |
| update | boolean | – | target:'player' seek — apply the pose immediately (default true). |
| value | – | – | target:'tree' set_param — new value (JSON scalar or Godot literal string). |
No output schema declared.
No examples provided.
summer_runtime_call Call a method in the running game ~180
Call one method on a node in the RUNNING game and return its result, to trigger gameplay code directly. A call is an action, not proof: check what it did with summer_game_probe. Guide: summer_docs_read {"id":"tool/runtime-call"}
| Name | Type | Req | Description |
|---|---|---|---|
| args | array | – | Positional arguments. JSON scalars, arrays and objects pass as-is; math values as Godot literal strings ('Vector3(0, 1, 0)'). Object and RID arguments are refused (bad_args). |
| instance | string | – | Game instance to address (default 'main' = the editor's embedded game). |
| method | string | yes | Method name to call on the node, e.g. 'take_damage', 'get_velocity'. |
| path | string | yes | ABSOLUTE runtime node path, e.g. '/root/Main/Player'. |
No output schema declared.
No examples provided.
summer_runtime_set Set a property in the running game ~234
Set one property on a node in the RUNNING game (the live object, never the scene file) and read back whether it applied: move the player, set health, flip a flag. Then check with summer_game_probe. Guide: summer_docs_read {"id":"tool/runtime-set"}
| Name | Type | Req | Description |
|---|---|---|---|
| field | string | – | Optional sub-field to set instead of the whole value, e.g. 'x' on a Vector3 property. |
| instance | string | – | Game instance to address (default 'main' = the editor's embedded game). |
| path | string | yes | ABSOLUTE runtime node path, e.g. '/root/Main/Player' (from summer_game_probe tree). |
| property | string | yes | Property name, e.g. 'position', 'health', 'visible'. 'script' and 'owner' are refused. |
| value | – | yes | New value. JSON scalars for primitives; Godot literal strings for math types ('Vector3(1, 2, 3)', 'Color(1, 0, 0, 1)', 'Vector2(10, 0)'). |
No output schema declared.
No examples provided.
summer_runtime_spawn Spawn or free in the running game ~315
Spawn a scene into the RUNNING game (action spawn) or free a live node (action free) to set up a test. The scene file is not touched. Then check with summer_game_probe. Guide: summer_docs_read {"id":"tool/runtime-spawn"}
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | 'spawn' instantiates a PackedScene under parent (SpawnRuntimeScene); 'free' removes a node (FreeRuntimeNode). |
| instance | string | – | Game instance to address (default 'main' = the editor's embedded game). |
| mode | string | – | action:'free' — 'queue_free' (default, safe: frees at the end of the frame) or 'free' (immediate). |
| name | string | – | action:'spawn' — node name; the engine renames on collision and reports renamed_to. |
| parent | string | – | action:'spawn' — ABSOLUTE runtime path of the parent, e.g. '/root/Main/Enemies'. |
| path | string | – | action:'free' — ABSOLUTE runtime path of the node to free. |
| props | object | – | action:'spawn' — properties set on the new node before it enters the tree ({position: 'Vector3(0, 1, 0)', health: 50}). Unknown ones land in prop_warnings, never fail the spawn. |
| scene | string | – | action:'spawn' — PackedScene to instantiate, e.g. 'res://enemies/goblin.tscn'. |
No output schema declared.
No examples provided.
summer_save_scene Save a scene ~101
Save the scene at scenePath, or save it under a new path. Scene edits already save once; use this for a standalone save or a save-as. Guide: summer_docs_read {"id":"tool/save-scene"}
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | – | Optional save-as path, e.g. 'res://levels/level2.tscn' |
| scenePath | string | yes | Scene to save, e.g. 'res://main.tscn' |
No output schema declared.
No examples provided.
summer_scene_audit Audit a 3D scene ~452
Check a saved 3D scene for visual and placement problems: holes, exposed edges, floor gaps, floating or sunken props, overlaps, z-fighting, light limits. Returns issues by severity, each with the next tool. Changes nothing. Guide: summer_docs_read {"id":"tool/scene-audit"}
| Name | Type | Req | Description |
|---|---|---|---|
| accept | array | – | Accept look or warn items you judged fine (up to 50 per call): [{key, reason}] with keys from this scene's issues. |
| budget_ms | integer | – | Editor time for the whole audit (default 3000 ms, 250-60000). |
| checks | array | – | Only these checks (default: all 15). through_hole, floor_gap, floating, sunken, interpenetration, exposed_edge, open_fixture_end, orientation, uv_stretch, duplicate, z_fight, depth_step, lights,… |
| limit | integer | – | Issues per page (default 15, max 50). The result is capped at 5 KB; a page that does not fit is cut and says so. |
| min_severity | string | – | "error" (only errors), "warn" (errors and warnings) or "look" (default: everything, including look items that only ask you to look). |
| offset | integer | – | Skip this many issues of the sorted, filtered list (paging; the result names the next offset). |
| render | string | – | "sheet": also return ONE inline image of the first 6 issues of this page framed up close from their open side, each tile labelled with its issue number. Default "none" (no image). |
| root | string | – | Report only issues under this node (subtree), e.g. "Block3". The whole scene is still loaded so walls and floors outside it count as surroundings. |
| scenePath | string | – | Scene to audit, e.g. "res://levels/town.tscn" (the SAVED file). Omit for the scene open in the editor. |
| show_accepted | boolean | – | List accepted items too (each with its accepted reason). Default false: hidden, only counted. |
No output schema declared.
No examples provided.
summer_screenshot Take a screenshot ~718
Return a frame as an image you see, to check your work by eye: the editor viewport, an offscreen render of a scene (preset, camera, bookmark or free pose, numbered marks) or the running game. A blank viewport frame means no redraw yet: capture again. Guide: summer_docs_read {"id":"tool/screenshot"}
| Name | Type | Req | Description |
|---|---|---|---|
| bookmark_name | string | – | framing:"bookmark" only (implies it when framing is omitted). Name of a bookmark saved with summer_engine_save_camera_bookmark (list: summer_engine_list_camera_bookmarks). |
| camera_look_at | string | – | framing:"free" only. Point the camera looks at, e.g. "Vector3(0, 1, 0)". Must differ from camera_position. |
| camera_path | string | – | framing:"camera" only. Path of the Camera3D to render through (relative to the scene root) when the scene has several cameras or none marked current. Omit to use the scene's current/first Camera3D. |
| camera_position | string | – | framing:"free" only (implies it when framing is omitted). Camera position as a Godot literal, e.g. "Vector3(0, 5, 12)". Goes together with camera_look_at. |
| compare_previous | boolean | – | framing:"bookmark" only. Return ONE image of [previous render | now | difference map] for the bookmark, with the share of changed pixels (summer_shot_sheet compare_previous with this one bookmark);… |
| fov | number | – | framing:"free" / "bookmark" only. Vertical field of view in degrees (1..179; default 60 for "free", the bookmark's own for "bookmark"). |
| framing | string | – | target:"scene" only, 3D scenes. Camera direction preset: "iso" = 3/4 diagonal view, "top" = straight down, "front" = camera at +Z, "back" = camera at -Z, "left" = camera at -X, "right" = camera at +X. |
| marks | boolean | – | target:"scene" only, 3D scenes. Draw a Set-of-Mark overlay: numbered tags + box outlines over the largest visible VisualInstance3D nodes (lights excluded), ranked by projected screen area. |
| max_marks | integer | – | marks:true only. Cap on numbered labels (engine default 32, at most 128). The caption says when the cap truncated the list. |
| nodePath | string | – | target:"scene" only. Node path relative to the scene root (e.g. "Player/Mesh") to frame INSTEAD of the whole scene — the camera fits that node's combined bounds (3D visual AABBs or 2D rects, children… |
| scenePath | string | – | target:"scene" only. Full scene path, e.g. "res://main.tscn". Omit to render the currently-open scene. |
| size | array | – | target:"scene" only. Output image [width, height] in pixels. |
| target | string | – | "viewport" = editor current view (default), "scene" = offscreen render of a scene file, "game" = running game frame |
| update_previous | boolean | – | framing:"bookmark" only. Replace the bookmark's previous image (its compare baseline) with this clean render. Default false: an existing baseline is kept. |
No output schema declared.
No examples provided.
summer_search ~114
Find any Summer operation by describing the job in plain words: engine, assets, store, pricing, analytics and the rest. Returns the best matches with their exact input schema, effect and approval. Next: summer_call with the name.
| Name | Type | Req | Description |
|---|---|---|---|
| area | string | – | Only this area: engine, assets, store, pricing, analytics... |
| limit | integer | – | Most results (default 5). |
| query | string | yes | The job in plain words: "lower my game's price", "add a light to the scene". |
No output schema declared.
No examples provided.
summer_select_node Select a node in the editor ~78
Select a node in the editor's scene tree and show it in the inspector, so the person sees it. The scene does not change. Guide: summer_docs_read {"id":"tool/select-node"}
| Name | Type | Req | Description |
|---|---|---|---|
| nodePath | string | yes | Node path to select |
| scenePath | string | – | Open this scene first, then select the node |
No output schema declared.
No examples provided.
summer_set_prop Set a node property ~173
Set one property of a node in the scene at scenePath and save it. Values use Godot syntax: "Vector3(0, 1, 0)", "Color(1, 0, 0, 1)", or a resource class such as "BoxMesh". For 3 or more edits, write one summer_run_script. Guide: summer_docs_read {"id":"tool/set-prop"}
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Property name, e.g. 'position', 'mesh', 'visible' |
| path | string | yes | Node path, e.g. './World/Player' |
| scenePath | string | yes | Target scene path, e.g. 'res://main.tscn' |
| value | – | yes | Value in Summer Engine variant-string format for complex types, native JSON for primitives |
No output schema declared.
No examples provided.
summer_set_resource_property Set a property of a node's resource ~173
Set a property inside a resource a node holds, such as a collision shape's size or a material's albedo_color, and save the scene. The resource must exist first: assign it with summer_set_prop. Guide: summer_docs_read {"id":"tool/set-resource-property"}
| Name | Type | Req | Description |
|---|---|---|---|
| nodePath | string | yes | Node path, e.g. './Player/CollisionShape3D' |
| resourceProperty | string | yes | Resource property on the node, e.g. 'shape', 'mesh', 'material_override' |
| scenePath | string | yes | Target scene path, e.g. 'res://main.tscn' |
| subProperty | string | yes | Property on the resource, e.g. 'size', 'radius', 'albedo_color' |
| value | – | yes | Value in Summer Engine variant-string format |
No output schema declared.
No examples provided.
summer_shot_sheet Render a sheet of views ~387
Render several bookmarks or poses into one labelled grid with real lighting, and compare each bookmark with its last render (difference map). The quick look at every hero view after a change. Guide: summer_docs_read {"id":"tool/shot-sheet"}
| Name | Type | Req | Description |
|---|---|---|---|
| aspect | number | – | Frame width/height (default 1.7778 = 16:9). Every tile uses it. |
| compare_previous | boolean | – | For bookmark shots: one row per bookmark of [previous render | now | difference map], with the share of changed pixels in the caption. |
| max_size | integer | – | Longest edge of the returned JPEG in pixels (default 1536). Bigger costs more context; up to 4096 for detail work on a PC. |
| save_to | string | – | Also write the returned image to res://.summer/shots/saved/<name>.jpg (1-64 of A-Z a-z 0-9 _ -; needs max_size <= 1024). |
| scenePath | string | – | Scene to look at, e.g. "res://levels/town.tscn" (the SAVED file). Omit for the scene open in the editor. |
| shots | array | yes | 1-12 shots, each a bookmark_name OR camera_position + camera_look_at (+ fov), with an optional label. Rendered in this order, left to right, top to bottom. |
| update_previous | boolean | – | Replace each bookmark's previous image (its compare baseline) with this render without comparing. |
| view | string | – | "beauty" (default: real environment, lights, fog, tonemap), "lighting" (light only), "unshaded" (albedo/texture only), "normals" (world normals, x red y green z blue), "overdraw", "wireframe". |
No output schema declared.
No examples provided.
summer_snap_to_surface Snap a node onto a surface ~212
Move one 3D node along a ray until it sits at the given gap on the first surface (floor, ramp, shelf, table), then save the scene. Returns before and after transforms and the evidence. Guide: summer_docs_read {"id":"tool/snap-to-surface"}
| Name | Type | Req | Description |
|---|---|---|---|
| alignUp | boolean | – | Rotate the subject's current world up toward an exact physics contact normal before seating it. |
| direction | array | – | Finite world-space cast direction [x,y,z] whose squared length exceeds 0.00001. Defaults downward. |
| gap | number | – | Requested separation from the support surface; must not exceed maxDistance. |
| maxDistance | number | – | Maximum cast and overlap-recovery distance in scene units. |
| scenePath | string | yes | Exact scene containing the subject, e.g. 'res://levels/market.tscn' |
| subjectPath | string | yes | Exact Node3D path relative to the scene root, e.g. './Props/Crate' |
No output schema declared.
No examples provided.
summer_snapshot_diff Compare two scene snapshots ~112
Compare two scene snapshots: added, removed and changed nodes and count changes. The proof that a change did what you meant; an empty diff after a change means it did not land. Next: summer_screenshot. Guide: summer_docs_read {"id":"tool/snapshot-diff"}
| Name | Type | Req | Description |
|---|---|---|---|
| from_id | string | yes | snapshot_id of the BEFORE snapshot (from summer_world_snapshot). |
| to_id | string | – | snapshot_id of the AFTER snapshot. Omit to snapshot the current state now and diff against that. |
No output schema declared.
No examples provided.
summer_starcast Read the space around a node ~365
Read the clearance around one 3D node in 26 directions: what blocks each side and how far, contact, grounding and nearby objects. Changes nothing. Use it before and after placing. Guide: summer_docs_read {"id":"tool/starcast"}
| Name | Type | Req | Description |
|---|---|---|---|
| collideWithAreas | boolean | – | Include Area3D objects as well as physics bodies. |
| collisionMask | integer | – | Godot 3D physics layer mask queried by rays, shape contacts/overlaps, and nearby-collider scans. |
| detail | string | – | summary: compact placement report (at most 5 KB). full: adds bounded hit geometry, an objects table, and nearby lists (at most 12 KB; the engine downgrades to summary rather than exceed it). |
| directionSpace | string | – | Cast along world axes, or along the subject's orthonormalized local axes when 'front', 'side', or 'up' mean the rotated subject's own orientation. |
| margin | number | – | Tolerance for exact-geometry physics shape intersection queries; touching and candidates within this margin are reported as contact_or_overlap. |
| maxDistance | number | – | Maximum outward cast distance in scene units. |
| maxHitsPerDirection | integer | – | Maximum physics hits and visual AABB hits retained for each direction. |
| maxResults | integer | – | Maximum retained contact/overlap and nearby entries per evidence channel. |
| nearbyRadius | number | – | Maximum gap from the subject bounds for the nearby-object lists (full detail). |
| path | string | yes | Exact Node3D path relative to the scene root, e.g. './World/Crate'. |
| scenePath | string | yes | Exact scene containing the subject, e.g. 'res://levels/level1.tscn'. |
No output schema declared.
No examples provided.
summer_stop Stop the game ~72
Stop the running game, or one offscreen instance by name. Scene edits stay as they are; nothing is undone or saved. Guide: summer_docs_read {"id":"tool/stop"}
| Name | Type | Req | Description |
|---|---|---|---|
| instance | string | – | Offscreen instance name to stop (from summer_play {instance}); omit for the main embedded game. |
No output schema declared.
No examples provided.
summer_store_tools Load the hosted Summer tools ~64
The Summer store, publishing, board and Grow tools come from the hosted Summer Engine MCP and are not loaded. Call this to see why and how to fix it (usually: run "summer login --store" in a terminal); it loads them when the sign-in works.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
summer_test_placement Test a placement without moving ~278
Test one 3D node at a candidate world position and rotation without moving it: overlaps, grounded state and the gap to the floor. Changes nothing. Then place it with summer_set_prop or summer_snap_to_surface. Guide: summer_docs_read {"id":"tool/test-placement"}
| Name | Type | Req | Description |
|---|---|---|---|
| candidateGlobalPosition | array | yes | Candidate global/world position as [x, y, z]. |
| candidateGlobalRotationDegrees | array | yes | Candidate global/world Euler rotation in degrees as [x, y, z]; current global scale is preserved. |
| collideWithAreas | boolean | – | Include Area3D objects as placement obstacles/support candidates. |
| collisionMask | integer | – | Godot 3D physics layers included in overlap and floor queries. |
| groundTolerance | number | – | Absolute floor-gap tolerance used to classify grounded support. |
| margin | number | – | Physics shape-intersection margin; only an exact physics support collider+shape contact is excluded from overlaps. |
| maxFloorDistance | number | – | Maximum world-space distance searched below the candidate footprint; range 0.001..1000. |
| scenePath | string | yes | Exact scene path containing the subject, e.g. 'res://levels/workshop.tscn'. |
| subjectPath | string | yes | Exact node path relative to the scene root, e.g. './World/Crate'. |
No output schema declared.
No examples provided.
summer_ui_activate Use an editor control ~347
Use one editor control by its tree path (press, toggle, focus, select a tab, type text, set a value) or dismiss a dialog; the control's state is read back. Only when no named action fits. Guide: summer_docs_read {"id":"tool/ui-activate"}
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | Default 'press'. press = synthetic left click on a button / ItemList item / PopupMenu item (index); toggle = flip a toggle-mode button; focus = grab_focus on any control; select_tab =… |
| button | string | – | dismiss_dialog only. 'cancel' (default — the safe close: cancel button / hide / OS close request), 'ok', or the exact text of a button in the dialog's row. |
| index | integer | – | select_tab: tab index; press on an ItemList / PopupMenu: item index. |
| path | string | – | A control `path` from summer_ui_tree (required for every action except dismiss_dialog, which may use title instead), or 'main_screen' with action:'select_tab'. |
| submit | boolean | – | set_text on a LineEdit only: also emit text_submitted (the Enter key), e.g. to run a search box. |
| title | string | – | dismiss_dialog only: a visible window title (case-insensitive; exact wins, one substring match accepted, otherwise ambiguous_dialog) — from summer_ui_tree root:'dialogs'. |
| value | – | – | select_tab: tab title (or the main-screen editor name: '2D', '3D', 'Script', 'Game', 'AssetLib'); set_text: the text; set_value: the number. |
No output schema declared.
No examples provided.
summer_ui_screenshot Screenshot the editor UI ~151
Return an image of the editor window, or of one dock, dialog or control: the last resort to look at the UI, never to pick click points. For scene views use summer_screenshot. Guide: summer_docs_read {"id":"tool/ui-screenshot"}
| Name | Type | Req | Description |
|---|---|---|---|
| max_size | integer | – | Longest edge in pixels after downscale (engine default 1024, clamped 16-4096). Smaller is cheaper to look at; the result reports scale. |
| root | string | – | Same grammar as summer_ui_tree root — 'window' (default; the whole editor window), 'main', 'dock:<title|id>', 'dialog:<title>', 'path:<node path>'. |
No output schema declared.
No examples provided.
summer_ui_tree Read the editor UI ~206
Read the live editor UI as a tree (controls, paths, text, state), or every visible dialog and whether one blocks input. Its paths are what summer_ui_activate takes. Guide: summer_docs_read {"id":"tool/ui-tree"}
| Name | Type | Req | Description |
|---|---|---|---|
| depth | integer | – | Tree depth (engine default 4, max 32). Plain Nodes between Controls do not consume depth. |
| limit | integer | – | Maximum Control nodes emitted (engine default 500, max 5000). The result carries truncated + child_count so a cut is visible. |
| root | string | – | Where to start. 'main' (default) = the whole editor chrome; 'window' = the SceneTree root incl. every sub-window; 'dock:<title|id>' = one dock (ids file_system | scene_tree | inspector, or any dock… |
| visible_only | boolean | – | Default true. false also emits hidden controls — readable, but summer_ui_activate refuses them with not_visible. |
No output schema declared.
No examples provided.
summer_wait_for_event Wait for an engine event ~239
Wait for an engine event (game started, op applied or failed, script error, scene saved) instead of sleeping; it says so honestly at the timeout. Take a cursor with summer_recent_events first. Guide: summer_docs_read {"id":"tool/wait-for-event"}
| Name | Type | Req | Description |
|---|---|---|---|
| kinds | array | – | Event kinds to deliver (default: all). v1 kinds: op.applied, op.failed, script.error, play.started, play.stopped, scene.saved, scene.opened, import.completed, selection.changed, snapshot.published. |
| match | object | – | Extra client-side filters applied after the kinds filter. |
| max_events | integer | – | Maximum matched events to return (default 20, cap 500). |
| since | integer | – | Deliver events with seq > since. Omit = live from now (an event that already fired is NOT delivered — take a cursor with summer_recent_events first and pass its next_seq here). |
| timeout_seconds | number | – | How long to wait for a match (default 30, clamped 1-120). The call long-polls in slices of at most 25 s. |
No output schema declared.
No examples provided.
summer_world_snapshot Take a scene snapshot ~294
Take a structured snapshot of the edited scene: node paths, transforms, world bounds, fingerprints and counts, filtered by subtree, class or field. Returns snapshot_id, the baseline to diff after a change. Next: summer_snapshot_diff. Guide: summer_docs_read {"id":"tool/world-snapshot"}
| Name | Type | Req | Description |
|---|---|---|---|
| classes | array | – | Only nodes of these classes, e.g. ['MeshInstance3D', 'OmniLight3D'] (* wildcards allowed). |
| fields | array | – | Only these per-node fields (path is always kept): class, name, pos, rot_deg, scale, visible, aabb, scene_file, script_fp, material_fps, z_index, rect, view_rect, limit_rect. |
| max_nodes | integer | – | Most node entries to return (default 200). The engine still snapshots the whole scene for the diff baseline; the result says when the list is cut (truncated, next_offset). |
| offset | integer | – | Skip this many matching nodes (path-sorted) before listing — page with the result's next_offset. |
| path_prefix | string | – | Only this subtree: the node at this scene-relative path and everything below it, e.g. 'House3' or 'Lane2/Props'. |
| scene_path | string | – | Scene to snapshot, e.g. 'res://main.tscn'. Omit for the currently edited scene. |
No output schema declared.
No examples provided.
summer_write_file Write a project file ~148
Create a text file (create_only true) or overwrite one (expected_sha256 from summer_read_file); exactly one guard is required, so a stale write fails. Scripts, scenes, resources, JSON. Then check scripts with summer_get_script_errors. Guide: summer_docs_read {"id":"tool/write-file"}
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | Complete new UTF-8 file content. |
| create_only | boolean | – | Required for a new file; refuses if the path already exists. |
| expected_sha256 | string | – | Required for overwriting an existing file; obtain from summer_read_file. |
| path | string | yes | Project path, e.g. res://scenes/player.tscn |
No output schema declared.
No examples provided.
summer_zoom Zoom into part of a frame ~550
Render a close-up of part of a frame (a region, or mark N of a marks render) at full resolution: real detail, seams and gaps, not enlarged pixels. Guide: summer_docs_read {"id":"tool/zoom"}
| Name | Type | Req | Description |
|---|---|---|---|
| bookmark_name | string | – | Pose from a camera bookmark (summer_engine_save_camera_bookmark (list: summer_engine_list_camera_bookmarks)). Use INSTEAD of camera_position/camera_look_at. |
| camera_look_at | string | – | Explicit pose: point the camera looks at, "Vector3(x, y, z)". |
| camera_position | string | – | Explicit pose: camera position, "Vector3(x, y, z)". Goes with camera_look_at. |
| fov | number | – | Vertical field of view in degrees (1..179). Default: the bookmark's own, or 60. |
| mark | integer | – | A label number from a marks:true render of the SAME pose and reference_size (summer_frame_nodes, or summer_screenshot framing free/bookmark at that size). |
| max_size | integer | – | Longest edge of the returned JPEG in pixels (default 1024). Bigger costs more context; up to 4096 for detail work on a PC. |
| pad | number | – | Margin added around the region on each side, as a fraction of its size (0..1; default 0 for region, 0.15 for mark). The caption's widened_because says when the rendered window is larger than asked. |
| reference_size | array | – | [width, height] of the frame region/mark refer to (default [1024, 576]). Sets the zoom's aspect. |
| region | array | – | [x, y, w, h] as fractions (0..1) of the frame from the same pose, x/y from the TOP-LEFT. Use this OR mark. |
| save_to | string | – | Also write the returned image to res://.summer/shots/saved/<name>.jpg (1-64 of A-Z a-z 0-9 _ -; needs max_size <= 1024). |
| scenePath | string | – | Scene to look at, e.g. "res://levels/town.tscn" (the SAVED file). Omit for the scene open in the editor. |
| view | string | – | "beauty" (default: real environment, lights, fog, tonemap), "lighting" (light only), "unshaded" (albedo/texture only), "normals" (world normals, x red y green z blue), "overdraw", "wireframe". |
No output schema declared.
No examples provided.
How do I install the Summer Engine MCP server?
Summer Engine runs locally as an npm package, launched with npx -y summer-engine. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · summer-engine
claude mcp add summerengine-summer -- npx -y summer-engine
What is the Summer Engine MCP server?
Summer Engine is an MCP server listed in the public MCP registry as io.github.SummerEngine/summer. The game engine built for AI. Any agent makes a multiplayer game and publishes it. This page covers its npm package (summer-engine).
Is the Summer Engine MCP server safe to use?
Summer Engine scores 75 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Summer Engine MCP server expose?
Summer Engine exposes 93 tools: summer_create_scene, summer_add_node, summer_set_prop, summer_set_resource_property, summer_remove_node, and 88 more. Their descriptions and schemas cost roughly 21,136 tokens of context every time the server is loaded.
Is the Summer Engine MCP server still maintained?
Summer Engine is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Summer Engine MCP server under?
Summer Engine declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.