Skip to main content
Glama

emptysock-mcp

Сервер Model Context Protocol для игрового движка EmptySock. Предоставляет системные компоненты движка — NavMesh, Physics, Scene, Save и Actor — как инструменты MCP, доступные для Claude Desktop, AI-агентов и Claude API.


Требования

  • Node.js 20+

  • npm 9+


Related MCP server: Hayba

Установка

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

Конфигурация

Скопируйте пример env-файла и заполните нужные значения:

cp .env.example .env

Переменная

Обязательно

Описание

EMPTYSOCK_API_TOKEN

Нет

Bearer-токен для аутентифицированных вызовов к API движка

MCP_AUTH_TOKEN

Нет

Обязательный Bearer-токен для запросов на SSE-транспорте. Оставьте пустым, чтобы отключить аутентификацию.

SAVE_BASE_DIR

Нет

Абсолютный путь, который инструменты сохранения могут читать/записывать. По умолчанию — рабочая директория процесса. В продакшене задавайте явно.

Никогда не коммитьте .env — он в .gitignore. Храните секреты в менеджере секретов CI/CD, а не в репозитории.


Запуск сервера

stdio (рекомендуется для локального использования и Claude Desktop)

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

Сервер общается через stdin/stdout. Сетевого порта и поверхности аутентификации нет.

Claude Desktop

Добавьте сервер в конфиг Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json на macOS):

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

Перезапустите Claude Desktop. Инструменты EmptySock появятся в выборе инструментов.


Доступные инструменты

NavMesh

Инструмент

Описание

navmesh_find_path

Путь A* между двумя 2D-точками мира по загруженной навмеше. Возвращает упорядоченные путевые точки или [], если путь не существует.

navmesh_nearest_node

Ближайший проходимый узел навмеша к заданной точке мира.

Пример — поиск пути:

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

Physics

Инструмент

Описание

physics_raycast_2d

Запускает луч в 2D-физическом пространстве; возвращает первую задетую сущность, точку попадания и нормаль.

physics_raycast_3d

Запускает луч в 3D-физическом пространстве (Rapier3D); возвращает первое попадание.

physics_overlap_circle

Все идентификаторы сущностей, чьи 2D-коллайдеры пересекают окружность.

physics_body_state

Текущая позиция, скорость и угловая скорость физического тела по идентификатору сущности.

Пример — перекрытие окружности:

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

Scene

Инструмент

Описание

scene_list_entities

Все идентификаторы сущностей, активных в сцене.

scene_entity_info

Тег, состояние активности и список компонентов для конкретной сущности.

scene_get_component

Сериализованное состояние конкретного компонента на сущности.

Пример — получение компонента:

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

Save

Все инструменты сохранения изолированы в SAVE_BASE_DIR. Обход пути (.., абсолютные пути) отклоняется на уровне схемы и повторно на этапе разрешения.

Инструмент

Описание

save_read

Читает слот сохранения с диска и возвращает его JSON-данные.

save_write

Записывает JSON-объект в именованный слот сохранения.

save_delete

Удаляет слот сохранения.

save_list

Перечисляет все доступные слоты сохранения.

Пример — запись:

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

Имена слотов — только алфавитно-цифровые символы, дефисы и подчёркивания (например, slot1, autosave, new-game-plus).


Actor

Инструмент

Описание

actor_send_message

Ставит сообщение в очередь входящих сообщений конкретного актора. Обрабатывается при следующем сбросе ActorSystem.

actor_broadcast

Рассылает сообщение всем зарегистрированным акторам.

actor_inbox_size

Количество ожидающих сообщений во входящих актора.

Пример — отправка сообщения:

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

Примечание о порядке: ActorSystem обрабатывает входящие каждого актора перед вызовом update(). Сообщения, отправленные во время кадра N, полностью обрабатываются до выполнения логики обновления кадра N.


Разработка

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

Тесты находятся в src/tests/. Они покрывают валидацию входных данных, диспетчеризацию инструментов и инварианты безопасности (обход пути, инъекция шелл-метасимволов, неизвестные имена инструментов).


Добавление инструмента

  1. Создайте src/tools/<domain>.ts — экспортируйте запись массива toolDef и функцию handler.

  2. Зарегистрируйте оба в src/tools/index.ts через вызов register() в buildRegistry().

  3. Добавьте запись в api-reference.json в emptysock-engine.

  4. Добавьте файл навыка в eleferrets/emptysock-ai-skills.

Используйте общие помощники в src/lib/:

  • parse(schema, raw) — Zod-разбор, который выбрасывает McpError(InvalidParams) при сбое

  • SafeRelPath, SafeId, Vec2, Vec3, GameNum — переиспользуемые Zod-схемы

  • textResponse(data) — формирует стандартный текстовый ответ MCP

  • wrapError(err) — логирует в stderr и повторно выбрасывает как McpError(InternalError)


Модель безопасности

Угроза

Меры защиты

Некорректные аргументы

Zod safeParse на каждом входе; при сбое возвращается McpError(InvalidParams)

Обход пути

Схема SafeRelPath + проверка ограничения path.resolve в обработчике сохранения

Шелл-инъекция

Никаких exec() с шаблонными строками; execFile с массивами argv, когда нужны подпроцессы

Утечка учётных данных

Секреты только из process.env; стеки логируются в stderr, никогда клиенту

Чрезмерно большой вход

Длины строк ограничены для каждого поля схемы

Неизвестные инструменты

McpError(MethodNotFound) — нет проваливания к непредусмотренным обработчикам

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.
    12
    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