open77-devkit
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OPEN77_CDN_BASE | No | Base URL for the CDN used to refresh the dev-index (default is https://cdn.open2077.net/dev-index). | |
| OPEN77_INDEX_DIR | No | Serve this index directory. | |
| OPEN77_MCP_CACHE | No | Cache directory (default is ~/.open77/mcp). | |
| OPEN77_MCP_OFFLINE | No | Set to 1 to enable offline mode, using the cached or snapshot index without refreshing from the CDN. |
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 | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| open77_searchA | Lexical search over the Open77 Lua natives, guides, open77:* events, manifest permissions and FiveM equivalents. Use it first; then open77_api / open77_guide for the full text. Returns the build it answers for. Pass runtime=server (or client) when writing one side: several names (RegisterCommand, TriggerEvent, Open77.vehicles.get) exist on both with different contracts; a query containing the word server or client applies that filter itself. |
| open77_apiA | The full card of one Lua native: signature, description, permissions the manifest must declare, reasons it can return, the first build that has it, example, related guides. Accepts a qualified name (Open77.map.getWaypoint, TriggerClientEvent) or a side-pinned name (server:Open77.vehicles.spawn, client:Open77.camera.attach). |
| open77_namespaceA | Every native under a namespace (Open77.vehicles, Open77.players, _G for globals), one line each with permissions and since. Omit the namespace to list the namespaces. |
| open77_guideA | A guide or one of its sections, as Markdown. Slugs come from open77_search (guide results) or the list returned when slug is omitted. |
| open77_eventsA | Events by prefix (open77:map, open77:chat) or all of them; each with its sides, documented payload and guide. Host lifecycle and bus events without a prefix are included: onResourceStart, onPlayerReady, onPlayerDisconnected, playerDropped, chat:ready... (pass prefix=lifecycle for just those). Also lists the reserved prefixes a resource may not raise. |
| open77_permissionsA | One permission (what it gates, which natives, which guides declare it) or the whole list. These are the strings a manifest's permissions { } block declares. |
| open77_dataA | Look up game-data names; animation inventories are discovery data, not playback allowlists. Arguments: |
| open77_fivem_equivalentA | What an Open77 resource uses in place of a FiveM native or Citizen call, and what is deliberately absent. Falls back to a search when the name is not in the alias table. |
| open77_manifest_schemaA | Every directive of the resource manifest with its form, default and rule, plus a complete example. |
| open77_server_config_schemaA | The JSON schema the dedicated server validates server.jsonc with. Pass a top-level key (network, resources, warden, voice...) for that section only. |
| open77_changesA | Which natives a newer server build adds compared to an older one, from the since field. Useful to answer 'what do I gain by updating' or 'why does this work on my dev box and not on the owner's server'. |
| open77_buildA | The index build, where it came from (CDN cache, embedded snapshot), the newest published server build, and the package version. |
| open77_workspaceA | Where the Open77 server next to this session is, its build, its config, its resources root and the resources in it. Re-detects when called. |
| open77_validateA | Static checks of one resource directory against the served build: manifest grammar, script files, Lua syntax (5.3-compatible parser; exact 5.4 via the server's --lint when present), unknown Open77.* natives, client natives in server scripts and the reverse, permissions used but not declared, natives newer than the build or unreleased, and command names another resource of this server already registers (a warning; literal RegisterCommand names only). Argument |
| open77_new_resourceA | Creates a resource that is correct by construction: manifest, lifecycle handlers, and for kinds that need it a WebUI page or the export ownership guard. Kinds: blank, gamemode, hud, service. Writes under the resources root (or |
| open77_server_statusA | Warden's dashboard for the server next to this session: build, uptime, players, resources, load. Needs a Warden session (open77-mcp warden-login). |
| open77_resourcesA | The resources the running server discovered, with their state, as Warden reports them. |
| open77_resourceA | Runs one resource action on the live server through Warden. |
| open77_console_tailA | Recent server log entries, optionally filtered by a regex and a resource name. Use after a reload to read what the server said; errors carry the resource in brackets. |
| open77_console_commandA | Runs one line at the server console with operator authority (e.g. |
| open77_tunablesA | Read the live tunables every resource declared, or set one (resource + key + value). A set is applied live when the resource accepts it; the server answers whether it is pending a restart. |
| open77_workshop_searchA | Browse the OPEN//77 Workshop (community resources, gamemodes, maps, UI, tools) through this server's Warden, or resolve a pasted link (https://open2077.net/workshop/ or workshop:). |
| open77_workshop_releaseB | Every release of a project with its state, files, tested builds and declared dependencies; the release id is what a plan needs. |
| open77_workshop_planA | Creates an installation plan for one release (Warden inspects the package and lists permissions, dependencies, files it would replace and blockers), or reads an existing plan by id. SHOW THE PLAN TO THE HUMAN; the plan's sha256 is what open77_workshop_install needs, together with their consent. |
| open77_workshop_installA | Installs a plan the human has read and accepted. Requires consent=true and the plan's sha256 exactly as open77_workshop_plan returned it; Warden refuses anything else. Returns the job id; follow it with open77_workshop_job. Never call this without the human's explicit yes. |
| open77_workshop_jobA | Follows an installation job by id (done when it reports committed), or lists the packages installed through the Workshop when no id is given. |
| open77_workshop_statusA | Whether this server can browse, install and publish through the Workshop (masterServer and warden.hubFileGatewayOrigin settings). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| new_resource | Walks the agent through designing a resource for a described feature: which runtime does what, which natives, which permissions, the manifest, the test plan. |
| port_fivem_resource | Maps a FiveM resource onto Open77: aliases that work as-is, natives to replace, and the parts Open77 deliberately does without. |
| explain_reason | Why a native returned nil, <reason> or false, <reason>, and what to change. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| skill | How to build Open77 resources with this MCP: the method, the rules, the loop. |
| Open77 resource documentation | Build multiplayer gameplay and interfaces as resources: directories containing a manifest, Lua scripts, declared permissions, dependencies and optional web assets. |
| Ability activation leases | Activation leases let clients start an ability without waiting for a network round trip. The server grants a small, expiring activation budget and validates each use against authoritative state and mo |
| Autonomous agent testing | Use the agent testing toolkit to launch the local stack, connect a game client, run actions and inspect results from an external automation harness. |
| Armed vehicle spawn catalogue | Spawn weapon-equipped vehicles with the `Vehicle.*` records listed below. The catalogue covers Cyberpunk 2077 **2.31 / build 23100**, including Phantom Liberty. |
| Synchronized attachments | Attach a server-owned prop to a player or vehicle, optionally at a skeletal slot. Clients follow their rendered parent and animated slot; the server replicates the attachment binding and its revisions |
| Vanilla blips and mappins | `Open77.blips` creates native mappins for the HUD, minimap and world map. Visibility depends on the sprite's native profile. Client resources require `ui.vanilla.map`: |
| Network callbacks: asking the other side a question | Network callbacks provide asynchronous request/response communication between client and server. A call returns an `Open77.Promise` that resolves with the response or rejects with an error. |
| Scripted cameras | Use `camera.script` to control cinematic cameras. For the playable F7 view, shoulder framing, movement FOV and camera shake, use [Third-person camera styles](third-person-camera.md) with `camera.style |
| Chat, slash commands, and completion | `open77_chat` provides chat, authenticated slash commands, command suggestions, history and keyboard completion. Its interface text is in English. |
| Client persistent KVP | `Open77.kvp` persists small values on the client. Data is isolated by connection address, resource name and key: |
| Players around you (client) | `Open77.players` reads the identities, positions and distances of players rendered by the client. These client-side queries require no permission. |
| Clipboard API and transform commands | Copy text to the operating-system clipboard with a client resource. The API is write-only and is intended for explicit actions such as copying coordinates, IDs or configuration snippets. |
| Manage Workshop resources with Warden | Use Warden to install, update, remove or roll back resources from the OPEN//77 Workshop. Warden displays a plan before applying changes, including dependencies, permissions and affected files. |
| Connection control: connect events, whitelists and bans | Control server admission with connection events, deferred checks, whitelists and bans. Resources can reject a connection with a player-facing message or remove an active player. See the [server Lua AP |
| Generic context menu — open77_contextmenu | `open77_contextmenu` provides a resource-extensible ALT/click menu. It has no Freeroam dependency, built-in admin permissions or default gameplay actions; consumer resources register the available act |
| Cordon — battle royale | Cordon is a 64-slot battle royale with staging, equipment collection and a moving exclusion zone. Solo, Duo and Squad formats share the same match rules. |
| Cyberware | Define and install persistent cyberware through the server-owned implant framework. Supported slots include Gorilla Arms (`arms`), double jump (`legs`) and the [hacking](hacking.md) implants (`operati |
| Native Dash and Air Dash | Grant native ground or air dashes for a player session. The server controls stamina, charges, cooldowns and the one-Air-Dash-per-airtime limit. Dash grants do not replace installed cyberware. |
| Game data catalogues — Open77.data | `Open77.data` resolves TweakDB IDs such as `Items.Preset_Lexington_Default` and `Vehicle.v_sport1_rayfield_caliburn_player` into display names and structured metadata for inventories, shops and garage |
| Game data reference | Find identifiers for Open77 APIs: NPCs, vehicles, seats, damage indexes, weapons, appearances, effects, sounds, animations and map sprites. Catalogues target Cyberpunk 2077 **2.31** unless stated othe |
| Deathmatch — running the Kabuki Arena PvP mode | Configure and run the Kabuki Arena PvP mode. This guide covers installation, match settings, dependencies and troubleshooting. |
| Privileged in-game Lua laboratory | The bundled `open77_debug` resource provides ACL-controlled tools for client Lua, native diagnostics and the REDscript polling bridge. |
| Overriding a vanilla device prompt | Disable a native device prompt before replacing it with a resource-owned interaction. Supported targets include vending machines, ATMs, terminals, computers and door panels. |
| Networked world doors | `open77_doors` synchronizes native doors through a server-owned registry. Automatic doors use routing-bucket proximity; elevator landing doors follow the cabin. Native animations, sound and collision |
| Visual and audio effects | Play world VFX, entity effects and spatial audio from client Lua with `world.effects`. Handles belong to the calling resource and are released on stop, reload, world exit or plugin unload. |
| Network elevators | Synchronize elevators through the dedicated server while retaining native platform movement, sounds, collision and floor markers. |
| FiveM compatibility aliases | Port FiveM resources using Open77's compatibility aliases for threads, timers, events, commands, key mappings, exports and promises. This guide lists supported aliases and the APIs needed where engine |
| The gamemode kernel and shared server services | Organize gamemode rules in server resources and expose reusable services through [server exports](server-exports.md). Open77 does not ship a universal `open77_gamemode` resource. |
| Gorilla Arms | Install native Gorilla Arms through the [Cyberware framework](cyberware.md). The server stores the implant, validates normal and charged punches, and controls damage and knockback. |
| Ground Slam / Quake | Grant Ground Slam to players using blunt melee weapons. Players can activate it on the ground or in the air; the server validates each impact and controls damage, knockback and ability costs. |
| Hacking and counterplay | Build multiplayer hacking abilities with server-owned definitions, grants and target validation. The following sections describe the supported implants, upload rules and Lua interfaces. |
| Blue holocall eyes | Apply the native blue eye-glow effect to multiplayer players, including the local third-person body. The server owns this cosmetic state; clients display it on streamed bodies. |
| Vanilla HUD visibility | Use `Open77.hud` to hide selected native HUD modules and replace them with resource-owned interfaces. Client resources require `ui.vanilla.hud`: |
| Player identity and username | Each installation has a persistent cryptographic identity. The Master verifies the username used by chat, nameplates, presence events and server scripts. |
| Blocking player input | Block individual input actions or the complete control stream from a client resource. Use resource-owned claims for menus, cutscenes, progress bars and gameplay restrictions. |
| Contextual world interactions | `open77_interactions` attaches client-side action prompts to world positions or streamed entities. A transparent WebUI displays the marker, distance and action card; an allowlisted input key triggers |
| Key mappings | Register a named action, default key and Lua callback with `RegisterKeyMapping`. Players can rebind it under **Pause → Settings → KEY BINDINGS**. Bindings persist across servers and launcher restarts. |
| Server loot and ground drops | Ground loot is server-authoritative. Native containers and drops display the server's items; Take and Take All send pickup requests checked against the drop, routing bucket and player distance. The lo |
| Lua modules and require | Split resource code into modules with `require`. A module returns its public value, typically a function table. Libraries such as [PolyZone](polyzone.md) execute inside the importing resource. |
| 3D world markers | Use `Open77.markers` in a client resource to place checkpoints, rental locations, objectives and other indicators in the world. Markers are native REDengine meshes with depth testing and a translucent |
| Mods: the complete guide | Configure the mods required by a server and understand how the launcher installs them. For trust and review rules, see [Server-required mods](server-mods.md); for Lua packages, see [Server resources]( |
| Native map and player waypoints | `Open77.map` is a **client-side** API for the native world map: read player waypoints, pick destinations, control the map camera and add resource-owned WebUI tabs. Pair it with [vehicle AI](vehicle-ai |
| WebUI notifications | `open77_notifications` displays resource-owned WebUI toasts. Client resources can create notifications directly; server resources can request them through the package's server interface. |
| NPC AI, combat and voice control | Control individual spawned NPCs from server Lua with `Open77.npcs`. Behavior settings apply to the selected NPC, not its gang, other NPCs using the same record, player characters or global audio. |
| NPC record catalogue | Browse **6,582 `Character.*` records** from Cyberpunk 2077 **2.31**, including Phantom Liberty. The index describes game data, not guaranteed multiplayer compatibility. The downloadable CSV also inclu |
| Server-owned NPCs | Create server-owned NPCs and control their identity, routing bucket, health, tasks and simulation authority. Clients project nearby NPCs into the world but cannot create or mutate their canonical stat |
| Package audio: 2D and spatial sounds | Play `.mp3` and PCM `.wav` files bundled with a resource, without a WebUI surface. Decoding is asynchronous. For named engine/Wwise events, see [Visual and audio effects](effects.md). |
| Third person | Open77's third-person view renders a local character body using the replication system. The player entity retains gameplay authority: aiming, hit detection and network state are unchanged. |
| Photo mode | Control native photo mode through the client-only `Open77.photoMode` API. Vanilla keyboard and controller shortcuts are disabled; resources explicitly open and close the mode. |
| Freezing a player | Freeze a player's position with a server-authoritative state or a client-local claim. Use this for restraints, cutscenes and interfaces that require the player to remain stationary. |
| Player interactions | `Open77.playerInteractions` coordinates two-player actions with participant reservations, consent, presentation readiness, a shared start and cleanup. Gameplay effects such as item transfer, healing o |
| Player morph catalogue | Browse **6,582 `Character.*` records** extracted from Cyberpunk 2077 **2.31** with Phantom Liberty. Each ID can be passed to the player-model API; this catalogue is a discovery index, **not a guarante |
| Player models: NPC impersonation | Select an NPC model as a player's visible body while retaining player identity and gameplay state. Find 6,582 `Character.*` IDs in the [morph catalogue](player-model-catalogue.md). |
| Player health and stamina | The server owns player health, stamina, regeneration and maximum values. One versioned state per connected player is replicated to clients; resources do not need a separate synchronization service. |
| Player checks and controls | Read native player state and apply client-local controls. Player IDs are network IDs, not entity handles. Omit the ID to target the local player. Failed reads return `nil, reason`; failed controls ret |
| PolyZone | Use the PolyZone API in an Open77 client resource with ordinary `{x, y, z}` coordinates. Queries and watchers run inside the importing resource. Names follow [PolyZone 2.6.2](https://github.com/mkafri |
| Server-owned world props | Create server-owned props, lights and effects that stream to nearby players. The server controls identity, transform, routing bucket and lifetime. Client resources can query projections or create loca |
| Reflex overdrive | Reflex overdrive increases the owner's movement, attack and reload speeds through temporary stat modifiers. It does not slow other players, bullets or the simulation clock. |
| Remote cameras and world screens | Render another viewpoint without replacing the player's camera. Use remote cameras for a security monitor, a picture-in-picture HUD, a world-space screen or a feed behind a transparent WebUI. |
| Official resource exports | Use official resource exports for shared services such as interfaces, lifecycle management and gameplay helpers. These exports are separate from runtime-native methods such as `Open77.vehicles.get`. |
| RP animation catalogue | <!-- Generated by scripts/animations/build_profiles.py. --> |
| Role-play animations | Play server-authoritative RP actions for inventory use, jobs and social gestures. Use upper-body profiles such as `smoke_walk`, `drink_walk` and `wave` while moving, or full-body workspots such as `sm |
| The role-play kit | `open77_rp_basics` is a sample role-play resource combining player freeze, input blocking, synchronized animations, weapon queries and placement. It exposes cuff, escort and search actions: |
| Screen picking and cursor utilities | Use client-side screen-picking and cursor APIs to select a world point or entity from a 2D interface. Check API availability when supporting clients without these helpers. |
| Native screen transitions | Native screen transitions require client **2.31.13+op77.56** or later. They are client-local and do not require a matching server feature. |
| Screenshots and mugshots | Capture the rendered game frame, upload an image or create a player mugshot. Client and server entry points have separate permissions: |
| Public identity, server commands, and ACL | Register server commands with `RegisterCommand` and control access through ACL rules. Commands entered in the in-game developer terminal (`²`) are forwarded over the authenticated session when they ar |
| Complete server Lua API | Reference for the dedicated server's Lua runtime. These methods are available in `server_script` files and the server half of `shared_script` files. Client APIs are listed separately in the [API refer |
| Cross-resource server exports | Publish and call cross-resource server functions synchronously with `exports.resource:name(...)` or asynchronously with `Open77.exports.call(...)`. Each resource retains its own Lua VM; calls do not s |
| Mods your server requires | Declare, host and manage the mods required by your server. This guide covers Warden, trust levels and review. For installation flow and troubleshooting, see [Mods](mods.md). |
| Lua resources loaded by the server | Package server and client Lua scripts, permissions, dependencies and web assets in an Open77 resource. The server loads the declared resources and distributes their client files to joining players. |
| Sky hologram advertisements | Replace supported sky-advertising textures with a custom resource pack. The following sections describe the asset layout, build process and deployment requirements. |
| Resource audio | `open77_sound` plays audio files bundled with a resource, with controls for volume and pitch. Use it for custom interface sounds, ambient audio, radios and positional emitters. |
| Replicated state bags | Replicate structured state with server-authoritative state bags. Resources can read snapshots and subscribe to changes instead of defining separate synchronization events for each value. |
| Third-person camera styles | Configure the playable third-person camera through `Open77.camera`: framing, movement response and resource-owned styles. Cinematic camera ownership is documented separately in [Scripted cameras](came |
| Travel | Move players with the server-owned travel APIs. Use teleportation and placement operations that coordinate client streaming instead of writing transforms directly. |
| The UI kit | `open77_uikit` provides shared dialogs and HUD widgets: progress bars, hints, confirmations, input forms, context and keyboard menus, radial wheels, world text and letterboxing. |
| Vectors and quaternions | `vector2`, `vector3`, `vector4`, `vec` and `quat` are global constructors in both Lua runtimes. They provide arithmetic, magnitude (`#`), swizzles, distance helpers and quaternion operations: |
| Networked vehicle AI | `Open77.vehicles.ai` is a server API requiring `world.vehicles`. The server owns destinations, seat reservations and task lifecycle. One nearby ready client executes native driving; observers receive |
| Authoritative vehicle paint | Set vehicle paint through the server's canonical state. The selected color is replicated to current viewers, late joiners and clients that stream the vehicle back in. |
| Armed vehicles and weapon Lua API | Read mounted armament from client Lua for vehicle HUDs and diagnostics. The API distinguishes declared model mounts, attached weapon objects and the driver's selected weapons. Find model IDs in the [s |
| Network vehicles | Create and manage network vehicles on the server. Resources with `world.vehicles` control canonical state and lifecycle; clients render nearby projections. |
| Voice lipsync | Open77's native voice renderer can drive a small mouth-only animation on player heads. Lua controls the policy; no Lua loop, custom animation bank or Redscript resource is needed. The existing body lo |
| Integrated voice chat | Open77 voice captures 48 kHz mono audio and encodes it as 20 ms Opus frames. A frame can be routed through proximity and up to four selected channels without duplicating microphone bandwidth. PCM and |
| The Players tab in Warden | Manage connected players in Warden's **Players** tab. The live roster refreshes automatically and provides warnings, kicks, bans, in-game permissions, healing, freezing and movement controls. |
| Weapon Lua API | Manage the local player's three `EquipmentArea.Weapon` slots with the asynchronous client API. Use `open77_weapons` for authenticated server-to-owner requests and exact TweakDB IDs such as `Items.Pres |
| Synchronised time and weather | `open77_weather` synchronizes the session's clock and weather. The server owns the canonical state; clients apply it locally. |
| WebUI selective keyboard capture | Use `page:setConsumedKeys(keys)` to reserve selected keyboard keys for a WebUI while keeping movement and mouse look active. Key consumption is client-local, per surface, and requires `webui.keep_inpu |
| World queries: raycast, ground height, objects around the player, entity axes, district | Query raycasts, ground height, nearby objects and district data with client-side `world.query` methods. Calls execute synchronously on the game thread. |
| Time scale: slow motion for a scripted beat | Use `Open77.world.setTimeScale` for local cinematic slow motion. Server-side time scale is replicated per routing bucket. It affects the client's simulation, including the local body, and is not suita |
| World-anchored POIs | `open77_worldui` combines a native ground marker and an [interaction prompt](interactions.md) under one resource-owned handle. Creation and cleanup cover both elements. |
| Zones | Define world-space areas for shops, safe zones, checkpoints and other gameplay rules. Zone queries determine whether a position is inside a shape. |
| client _G | Every native of one namespace on one runtime |
| client Citizen | Every native of one namespace on one runtime |
| client Open77.Promise | Every native of one namespace on one runtime |
| client Open77.abilities | Every native of one namespace on one runtime |
| client Open77.anchors | Every native of one namespace on one runtime |
| client Open77.animations | Every native of one namespace on one runtime |
| client Open77.appearance | Every native of one namespace on one runtime |
| client Open77.assets | Every native of one namespace on one runtime |
| client Open77.audio | Every native of one namespace on one runtime |
| client Open77.blips | Every native of one namespace on one runtime |
| client Open77.callbacks | Every native of one namespace on one runtime |
| client Open77.camera | Every native of one namespace on one runtime |
| client Open77.character | Every native of one namespace on one runtime |
| client Open77.chute | Every native of one namespace on one runtime |
| client Open77.clipboard | Every native of one namespace on one runtime |
| client Open77.cyberware | Every native of one namespace on one runtime |
| client Open77.dash | Every native of one namespace on one runtime |
| client Open77.data | Every native of one namespace on one runtime |
| client Open77.debug | Every native of one namespace on one runtime |
| client Open77.debugDraw | Every native of one namespace on one runtime |
| client Open77.doors | Every native of one namespace on one runtime |
| client Open77.elevators | Every native of one namespace on one runtime |
| client Open77.environment | Every native of one namespace on one runtime |
| client Open77.equipment | Every native of one namespace on one runtime |
| client Open77.events | Every native of one namespace on one runtime |
| client Open77.exports | Every native of one namespace on one runtime |
| client Open77.hacking | Every native of one namespace on one runtime |
| client Open77.hud | Every native of one namespace on one runtime |
| client Open77.input | Every native of one namespace on one runtime |
| client Open77.inspector | Every native of one namespace on one runtime |
| client Open77.json | Every native of one namespace on one runtime |
| client Open77.kvp | Every native of one namespace on one runtime |
| client Open77.log | Every native of one namespace on one runtime |
| client Open77.loot | Every native of one namespace on one runtime |
| client Open77.map | Every native of one namespace on one runtime |
| client Open77.markers | Every native of one namespace on one runtime |
| client Open77.motion | Every native of one namespace on one runtime |
| client Open77.movement | Every native of one namespace on one runtime |
| client Open77.nameplates | Every native of one namespace on one runtime |
| client Open77.net | Every native of one namespace on one runtime |
| client Open77.network | Every native of one namespace on one runtime |
| client Open77.npcs | Every native of one namespace on one runtime |
| client Open77.perspective | Every native of one namespace on one runtime |
| client Open77.photoMode | Every native of one namespace on one runtime |
| client Open77.playerInteractions | Every native of one namespace on one runtime |
| client Open77.players | Every native of one namespace on one runtime |
| client Open77.prevention | Every native of one namespace on one runtime |
| client Open77.props | Every native of one namespace on one runtime |
| client Open77.puppets | Every native of one namespace on one runtime |
| client Open77.reflex | Every native of one namespace on one runtime |
| client Open77.resource | Every native of one namespace on one runtime |
| client Open77.runtime | Every native of one namespace on one runtime |
| client Open77.screen | Every native of one namespace on one runtime |
| client Open77.session | Every native of one namespace on one runtime |
| client Open77.settings | Every native of one namespace on one runtime |
| client Open77.sfx | Every native of one namespace on one runtime |
| client Open77.state | Every native of one namespace on one runtime |
| client Open77.stats | Every native of one namespace on one runtime |
| client Open77.time | Every native of one namespace on one runtime |
| client Open77.travel | Every native of one namespace on one runtime |
| client Open77.vehicles | Every native of one namespace on one runtime |
| client Open77.vfx | Every native of one namespace on one runtime |
| client Open77.voice | Every native of one namespace on one runtime |
| client Open77.wardrobe | Every native of one namespace on one runtime |
| client Open77.weapons | Every native of one namespace on one runtime |
| client Open77.webui | Every native of one namespace on one runtime |
| client Open77.world | Every native of one namespace on one runtime |
| client Open77.zones | Every native of one namespace on one runtime |
| client WebUI.Page | Every native of one namespace on one runtime |
| client promise | Every native of one namespace on one runtime |
| server _G | Every native of one namespace on one runtime |
| server Citizen | Every native of one namespace on one runtime |
| server Open77.EventVerdict | Every native of one namespace on one runtime |
| server Open77.Promise | Every native of one namespace on one runtime |
| server Open77.abilities | Every native of one namespace on one runtime |
| server Open77.access | Every native of one namespace on one runtime |
| server Open77.acl | Every native of one namespace on one runtime |
| server Open77.animations | Every native of one namespace on one runtime |
| server Open77.appearance | Every native of one namespace on one runtime |
| server Open77.audio | Every native of one namespace on one runtime |
| server Open77.callbacks | Every native of one namespace on one runtime |
| server Open77.chat | Every native of one namespace on one runtime |
| server Open77.clothing | Every native of one namespace on one runtime |
| server Open77.combat | Every native of one namespace on one runtime |
| server Open77.convars | Every native of one namespace on one runtime |
| server Open77.cyberware | Every native of one namespace on one runtime |
| server Open77.dash | Every native of one namespace on one runtime |
| server Open77.data | Every native of one namespace on one runtime |
| server Open77.database | Every native of one namespace on one runtime |
| server Open77.effects | Every native of one namespace on one runtime |
| server Open77.elevators | Every native of one namespace on one runtime |
| server Open77.environment | Every native of one namespace on one runtime |
| server Open77.events | Every native of one namespace on one runtime |
| server Open77.exports | Every native of one namespace on one runtime |
| server Open77.hacking | Every native of one namespace on one runtime |
| server Open77.heldItems | Every native of one namespace on one runtime |
| server Open77.http | Every native of one namespace on one runtime |
| server Open77.io | Every native of one namespace on one runtime |
| server Open77.kvp | Every native of one namespace on one runtime |
| server Open77.log | Every native of one namespace on one runtime |
| server Open77.loot | Every native of one namespace on one runtime |
| server Open77.motion | Every native of one namespace on one runtime |
| server Open77.net | Every native of one namespace on one runtime |
| server Open77.notifications | Every native of one namespace on one runtime |
| server Open77.npcs | Every native of one namespace on one runtime |
| server Open77.npcs.tasks | Every native of one namespace on one runtime |
| server Open77.perspective | Every native of one namespace on one runtime |
| server Open77.playerInteractions | Every native of one namespace on one runtime |
| server Open77.players | Every native of one namespace on one runtime |
| server Open77.props | Every native of one namespace on one runtime |
| server Open77.ready | Every native of one namespace on one runtime |
| server Open77.reflex | Every native of one namespace on one runtime |
| server Open77.resource | Every native of one namespace on one runtime |
| server Open77.routingBuckets | Every native of one namespace on one runtime |
| server Open77.runtime | Every native of one namespace on one runtime |
| server Open77.sound | Every native of one namespace on one runtime |
| server Open77.state | Every native of one namespace on one runtime |
| server Open77.stats | Every native of one namespace on one runtime |
| server Open77.statuses | Every native of one namespace on one runtime |
| server Open77.time | Every native of one namespace on one runtime |
| server Open77.tunables | Every native of one namespace on one runtime |
| server Open77.vehicles | Every native of one namespace on one runtime |
| server Open77.vehicles.ai | Every native of one namespace on one runtime |
| server Open77.voice | Every native of one namespace on one runtime |
| server Open77.weapons | Every native of one namespace on one runtime |
| server Open77.world | Every native of one namespace on one runtime |
| server Open77.zones | Every native of one namespace on one runtime |
| server json | Every native of one namespace on one runtime |
| server promise | Every native of one namespace on one runtime |
| client Open77.remoteCamera | Every native of one namespace on one runtime |
| open77-client.d.lua | ---@meta stubs generated from the catalogue |
| open77-server.d.lua | ---@meta stubs generated from the catalogue |
TDQS
Scored across 27 tools
Tools fall into clear families: Workshop lifecycle, documentation/reference, and live-server operations. The main ambiguity is between open77_validate and the validate action of open77_resource, and between open77_search, open77_api, and open77_guide, though the descriptions do enough to point an agent to the right tool.
All names share the open77_ prefix and snake_case, but the pattern after the prefix is mixed: workshop tools consistently use open77_workshop_<action>, while documentation tools are mostly bare nouns and operational tools mix verbs with noun phrases. This is readable and grouped, but not a uniform verb_noun convention.
With 27 tools, the server exceeds the 25-tool threshold and feels heavy for a single MCP surface. Several lookups overlap or could be consolidated, such as open77_build, open77_workspace, and open77_server_status, making the full list harder for an agent to scan efficiently.
The main workflows are covered: documentation search, API/event/permission reference, resource creation and validation, reloading resources, viewing logs, and the full Workshop plan/install/job flow. Gaps like no uninstall or publish action for Workshop and no direct file-editing tool exist, but they are workable around with console commands or external edits.