Skip to main content
Glama

emptysock-mcp

Model Context Protocol-Server für die EmptySock-Spiel-Engine. Stellt die Engine-Systeme — NavMesh, Physics, Scene, Save und Actor — als MCP-Tools bereit, die von Claude Desktop, KI-Agenten und der Claude-API genutzt werden können.


Voraussetzungen

  • Node.js 20+

  • npm 9+


Related MCP server: Hayba

Installation

git clone https://github.com/eleferrets/emptysock-mcp.git
cd emptysock-mcp
npm install
npm run build

Konfiguration

Kopiere die Beispiel-Umgebungsdatei und fülle alle benötigten Werte aus:

cp .env.example .env

Variable

Erforderlich

Beschreibung

EMPTYSOCK_API_TOKEN

Nein

Bearer-Token für authentifizierte Engine-API-Aufrufe

MCP_AUTH_TOKEN

Nein

Erforderliches Bearer-Token für SSE-Transportanfragen. Leer lassen, um die Authentifizierung zu deaktiveren.

SAVE_BASE_DIR

Nein

Absoluter Pfad, den die Speicher-Tools lesen/schreiben dürfen. Standardmäßig das Arbeitsverzeichnis des Prozesses. In der Produktion explizit festlegen.

Commite .env niemals — es ist in der .gitignore enthalten. Speichere Geheimnisse in deinem CI/CD-Secret-Manager auf, nicht im Repository.


Den Server starten

stdio (empfohlen für die lokale Verwendung und Claude Desktop)

npm run dev          # development — tsx, no build step
# or after building:
node dist/server.js

Der Server kommuniziert über stdin/stdout. Es gibt keinen Netzwerkport und keine Authentisierungsschnittstelle.

Claude Desktop

Füge den Server zu deiner Claude-Desktop-Konfiguration hinzu (~/Library/Application Support/Claude/claude_desktop_config.json unter macOS):

{
  "mcpServers": {
    "emptysock": {
      "command": "node",
      "args": ["/absolute/path/to/emptysock-mcp/dist/server.js"],
      "env": {
        "SAVE_BASE_DIR": "/absolute/path/to/your/saves"
      }
    }
  }
}

Starte Claude Desktop neu. Die EmptySock-Tools erscheinen dann in der Tool-Auswahl.


Verfügbare Tools

NavMesh

Tool

Beschreibung

navmesh_find_path

A*-Pfad zwischen zwei 2D-Weltpunkten auf einem geladenen NavMesh. Gibt geordnete Wegpunkte oder [] zurück, wenn kein Pfad existiert.

navmesh_nearest_node

Nächstgelegener begehbaer NavMesh-Knoten zu einem gegebenen Weltpunkt.

Beispiel — Pfad finden:

{
  "from": { "x": 0, "y": 0 },
  "to":   { "x": 100, "y": 50 },
  "mapId": "level1"
}

Physics

Tool

Beschreibung

physics_raycast_2d

Wirft einen Strahl im 2D-Physikraum; gibt die erste getrofene Entität, den Treffpunkt und die Normale zurück.

physics_raycast_3d

Wirft einen Strahl im 3D-Physikraum (Rapier3D); gibt den ersten Treffer zurück.

physics_overlap_circle

Alle Entitäts-IDs, deren 2D-Collider einen Kreis überlappen.

physics_body_state

Aktuelle Position, Geschwindigkeit und Winkelgeschwindigkeit eines Physik-Körpers anhand der Entitäts-ID.

Beispiel — Kreisüberlappung:

{
  "center": { "x": 50, "y": 50 },
  "radius": 20,
  "layerMask": 3
}

Scene

Tool

Beschreibung

scene_list_entities

Alle in einer Szene aktiven Entitäts-IDs.

scene_entity_info

Tag, Aktivzustand und Komponentenliste für eine bestimmte Entität.

scene_get_component

Serialsierter Zustand einer bestimmten Komponente auf einer Entität.

Beispiel — Komponente abrufen:

{
  "sceneId": "gameplay",
  "entityId": "player-001",
  "componentType": "Transform"
}

Save

Alle Speicher-Tools sind per Sandbox auf SAVE_BASE_DIR beschränkt. Pfad-Traversal (.., absolute Pfade) wird bereits auf Schema-Ebene und erneut beim Auflösen abgelehnt.

Tool

Beschreibung

save_read

Liest einen Speicherstand von der Festplatte und gibt seine JSON-Daten zurück.

save_write

Schreibt ein JSON-Objekt in einen benannten Speicherstand.

save_delete

Löscht einen Speicherstand.

save_list

Listet alle verfügbaren Speicherstände auf.

Beispiel — Schreiben:

{
  "slot": "autosave",
  "data": { "level": 3, "score": 4200, "checkpoint": "bridge" }
}

Slotnamen dürfen nur alphanumerische Zeichen, Bindestriche und Unterstriche enthalten (z. B. slot1, autosave, new-game-plus).


Actor

Tool

Beschreibung

actor_send_message

Stellt eine Nachricht in den Posteingang eines bestimmten Actors. Wird beim nächsten ActorSystem-Flush verarbeitet.

actor_broadcast

Sendet eine Nachricht per Broadcast an alle registrierten Actors.

actor_inbox_size

Anzahl der ausstehenden Nachrichten im Posteingang eines Actors.

Beispiel — Nachricht senden:

{
  "actorId": "enemy-spawner",
  "message": { "type": "SPAWN_WAVE", "payload": { "wave": 3 } }
}

Hinweis zur Reihenfolge: ActorSystem leert den Posteingang jedes Actors, bevor update() aufgerufen wird. Nachrichten, die während Frame N gesendet werden, werden vollständig verarbeitet, bevor die Update-Logik von Frame N ausgeführt wird.


Entwicklung

npm run lint        # TypeScript type-check (no emit)
npm test            # run Vitest suite
npm run test:watch  # watch mode

Die Tests befinden sich in src/tests/. Sie decken Eingabevalidierung, Tool-Dispatch und Sicherheitsinvarianen ab (Pfad-Traversal, Shell-Metazeichen-Injektion, unbekannte Toolnamen).


Ein Tool hinzufügen

  1. Erstelle src/tools/<domain>.ts — exportiere einen toolDef-Array-Eintrag und eine handler- Funktion.

  2. Registriere beide in src/tools/index.ts über den register()- Aufruf in buildRegistry().

  3. Füge einen Eintrag zu api-reference.json in emptysock-engine hinzu.

  4. Füge eine Skill-Datei zu eleferrets/emptysock-ai-skills hinzu.

Verwende die gemeinsamen Helfer in src/lib/:

  • parse(schema, raw) — Zod-Parse, der bei einem Fehler McpError(InvalidParams) wirft

  • SafeRelPath, SafeId, Vec2, Vec3, GameNum — wiederverwendbare Zod-Schemas

  • textResponse(data) — erstellt die standardmäßige MCP-Textinhalts-Antwort

  • wrapError(err) — protokolliert auf stderr und wirft ihn als McpError(InternalError) erneut


Sicherheitsmodell

Risiko

Gegenmaßnahme

Fehlerhafte Argumente

Zod-safeParse für jede Eingabe; bei Fehlern wird McpError(InvalidParams) zurückgegeben

Pfad-Traversal

Schema SafeRelPath + Eingrenzungsprüfung über path.resolve im Speicher-Handler

Shell-Injektion

Kein exec() mit Template-Strings; execFile mit argv-Arrays, wenn Subprozesse benötigt werden

Leakage von Zugangsdaten

Geheimnisse nur aus process.env; Stacktraces werden nach stderr protokolliert, nie an den Client

Übergroße Eingaben

Stringlängen sind auf jedem Schema-Feld begrenzt

Unbekannte Tools

McpError(MethodNotFound) — kein Durchreichen an unbeabschtigte Handler

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLM-driven text game state management by exposing MCP tools for managing players, locations, items, entities, and abstract concepts.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server enabling AI agents to author Unreal Engine 5 scenes directly, with tools for spawning actors, building PCG graphs, validating physics, generating terrain, and more through a single MCP connection.
    13
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Connects Claude Code to the Unity Editor via MCP, enabling AI-driven control of scenes, assets, components, UI, animations, and more through 91 tools.
    2
    -
  • A
    license
    C
    quality
    A
    maintenance
    Enables AI-driven game development by providing MCP tools to interact with the Godot editor, including scene editing, node manipulation, script attachment, and scene execution.
    28
    27
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/eleferrets/emptysock-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server