Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FIGMA_TOKENNoOptional Figma API token for asset creation tools.

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_environment_statusA

Vollständiger Umgebungsstatus: Hub-Pfad/-Version, installierte Editoren, neue unity-CLI, Standard-Projektordner, erlaubte Roots, ob Hub/Editor laufen. Idealer Einstiegspunkt.

check_hub_runningA

Prüft, ob Unity Hub aktuell läuft (Prozessliste).

list_unity_processesA

Listet alle laufenden Unity-Prozesse (Hub und Editoren getrennt).

launch_hubA

Startet die Unity-Hub-GUI (losgelöster Prozess).

close_hubA

Beendet alle Unity-Hub-Prozesse (NICHT die Editoren). Erfordert confirm=true.

stop_editorA

Beendet laufende Unity-Editor-Prozesse (Unity.exe), ohne den Hub. Erfordert confirm=true.

list_installed_editorsA

Listet installierte Unity-Editoren (Hub-CLI 'editors --installed').

list_available_releasesA

Listet von Unity beworbene installierbare Releases (Hub-CLI, Online — kann dauern).

resolve_editor_changesetA

Löst eine Editor-Version (z.B. '6000.4.10f1') über die Unity-Release-API zu Changeset + unityhub://-Deep-Link auf. Nötig für install_editor bei nicht-gelisteten Versionen.

get_editor_install_pathA

Gibt das aktuelle Editor-Installationsverzeichnis zurück (Hub-CLI 'install-path --get').

set_editor_install_pathA

Setzt das Editor-Installationsverzeichnis (Hub-CLI 'install-path --set'). confirm=true nötig.

install_editorA

Installiert einen Unity-Editor (+ optionale Module) als Hintergrund-Job. changeset wird für nicht-gelistete Versionen benötigt (siehe resolve_editor_changeset). Module z.B.: android, ios, webgl, windows-il2cpp, mac-mono, linux-il2cpp, documentation. Fortschritt via get_job_status/read_job_output verfolgen. confirm=true nötig (großer Download).

install_editor_modulesA

Fügt Module zu einem bereits installierten Editor hinzu (Hub-CLI 'install-modules'). Läuft als Hintergrund-Job. confirm=true nötig.

add_existing_editorB

Bindet einen außerhalb des Hubs installierten Editor ein (Hub-CLI 'editors --add'). confirm=true.

install_editor_via_deeplinkA

Startet die Editor-Installation über einen unityhub://-Deep-Link in der Hub-GUI (Alternative zur headless-Installation; nützlich wenn GUI-Bestätigung gewünscht).

list_recent_projectsA

Listet die im Hub bekannten Projekte (aus projects-v1.json), nach Datum sortiert.

get_project_infoA

Liest Projekt-Metadaten aus Dateien (schnell, ohne Editor-Start): Unity-Version, Changeset, productName/companyName/bundleVersion, Paketanzahl, Build-Szenen, Assets-Größe.

get_project_info_liveB

Startet den Editor headless und liest Live-Infos (aktives BuildTarget, Scripting-Defines, aktive Szenen) via injiziertem C#-Skript. Läuft als Job; Ergebnis aus result_file lesen.

create_projectA

Erstellt ein neues, leeres Unity-Projekt (Unity.exe -createProject) als Job. version optional (sonst neuester installierter Editor). confirm=true nötig.

open_projectA

Öffnet ein Projekt in der Editor-GUI. Nutzt die neue unity-CLI ('unity open') falls vorhanden, sonst 'Unity.exe -projectPath' (Editor-Version aus ProjectVersion.txt).

register_project_in_hubA

Trägt ein vorhandenes Projekt in die Hub-Recents ein (schreibt projects-v1.json). Hub sollte geschlossen sein (sonst überschreibt er die Änderung). confirm=true nötig.

unregister_project_from_hubA

Entfernt ein Projekt aus der Hub-Liste (löscht NICHT die Projektdateien). confirm=true nötig.

set_project_favoriteB

Setzt/entfernt den Favoriten-Stern eines Projekts in der Hub-Liste. confirm=true nötig.

build_playerB

Baut einen Player (BuildPipeline.BuildPlayer via injiziertem C#) als Hintergrund-Job. build_target z.B.: win64, StandaloneWindows64, android, webgl, ios, linux64, osxuniversal. scenes optional (sonst aktivierte Build-Settings-Szenen). Ergebnis nach Jobende aus result_file lesen (get_build_result). confirm=true nötig.

run_testsA

Führt Unity-Tests via Test Framework aus (Job). platform: EditMode | PlayMode | StandaloneWindows64. Schreibt NUnit-XML; danach get_test_results aufrufen.

get_test_resultsA

Parst eine NUnit3-Ergebnis-XML (von run_tests) und liefert Pass/Fail-Zahlen + Fehlerdetails.

check_compileA

Kompiliert alle Skripte des Projekts headless (öffnet+quittiert den Editor), als Job. Danach get_compile_result(log_file) für strukturierte Compiler-Fehler/Warnungen — funktioniert auch, wenn der Code NICHT kompiliert. Ideal für Schreiben→Prüfen→Auto-Fix-Schleifen.

get_compile_resultA

Parst Compiler-Fehler/Warnungen (Datei/Zeile/Spalte/CS-Code/Meldung) aus einem Editor-Log (von check_compile, build_scene, build_player …).

import_unitypackageB

Importiert ein .unitypackage headless in ein Projekt (Unity.exe -importPackage), als Job. confirm=true nötig (verändert Projekt-Assets).

export_unitypackageA

Exportiert Assets als .unitypackage (AssetDatabase.ExportPackage via C#), als Job. asset_paths sind projektrelativ (z.B. ['Assets/Prefabs']). confirm=true nötig.

run_editor_methodA

Führt eine BELIEBIGE statische Editor-Methode headless aus (-executeMethod), als Job. Mächtig und potenziell riskant (führt projektinternen Code aus) — confirm=true nötig. method als 'Namespace.Klasse.Methode'. extra_args werden unverändert angehängt.

remove_automation_scriptC

Entfernt das vom Server injizierte C#-Automationsskript (Assets/Editor/MCP) wieder. confirm=true.

list_project_packagesA

Listet die direkten Paket-Abhängigkeiten eines Projekts aus Packages/manifest.json.

add_project_packageA

Fügt ein Paket zu Packages/manifest.json hinzu/ändert die Version (Backup wird erstellt). version kann SemVer, git-URL oder 'file:'-Pfad sein. confirm=true nötig.

remove_project_packageA

Entfernt ein Paket aus Packages/manifest.json (Backup wird erstellt). confirm=true nötig.

get_hub_settingsA

Liest die Unity-Hub-Einstellungen (user-settings.json): Theme, Tray, Download-Limit, Channel …

update_hub_settingA

Setzt einen Hub-Einstellungswert (verschachtelt per '.', z.B. 'download.maxConcurrentDownloads' oder 'themeSource'). Backup wird erstellt; wirksam nach Hub-Neustart. confirm=true nötig.

get_default_project_dirA

Gibt den Standardordner für neue Projekte zurück (projectDir.json).

set_default_project_dirB

Setzt den Standardordner für neue Projekte (projectDir.json). confirm=true nötig.

read_editor_logB

Liest die Unity-Editor-Logdatei (Editor.log bzw. Editor-prev.log), letzte tail_lines Zeilen.

read_hub_logsA

Liest die Unity-Hub-Logs. which: 'info' (info-log.json) oder 'install' (install-log.json).

detect_errors_in_logA

Scannt ein Log auf Fehler/Exceptions. source: 'editor' | 'hub' | 'job' (mit job_id).

get_job_statusB

Status eines Hintergrund-Jobs (Install/Build/Test/Import/Export/Methode).

read_job_outputC

Liest die Ausgabe eines Jobs. stream: 'stdout' | 'stderr'.

list_jobsB

Listet die letzten Hintergrund-Jobs mit Status.

stop_jobB

Bricht einen laufenden Job ab. confirm=true nötig.

get_build_resultC

Liest das von build/export/info erzeugte Ergebnis-JSON (result_file aus dem jeweiligen Tool).

get_license_statusB

Best-effort Lizenzstatus über den Unity Licensing Client (read-only).

create_manual_activation_fileB

Erzeugt eine manuelle Aktivierungsdatei (.alf) zum Hochladen auf license.unity3d.com. confirm=true.

apply_license_fileB

Wendet eine heruntergeladene .ulf-Lizenzdatei an (manuelle Aktivierung, Schritt 3). confirm=true.

open_create_project_uiA

Öffnet die 'Neues Projekt'-Oberfläche im Hub (Deep-Link).

open_package_install_uiA

Öffnet im aktiven Editor den Package-Manager-Install für ein Paket (Deep-Link), z.B. 'com.unity.cinemachine@2.9.7'.

open_deep_linkC

Öffnet einen beliebigen unityhub://-Deep-Link.

screenshot_desktopA

Erstellt einen Desktop-Screenshot (PNG) zur Sichtprüfung des aktuellen GUI-Zustands.

list_backupsB

Listet die vom Server erstellten Datei-Backups (neueste zuerst).

restore_backupA

Stellt eine gesicherte Datei an target_path wieder her (die aktuelle Datei wird vorher erneut gesichert). confirm=true nötig.

write_scriptA

Schreibt ein C#-Skript (MonoBehaviour etc.) ins Projekt, z.B. rel_path='Assets/Scripts/PlayerController.cs'. Überschreibt mit Backup. Path-Sandbox aktiv. Kernbaustein für Game-Logik; danach via build_scene als Komponente per Klassenname anhängbar.

write_text_assetC

Schreibt eine beliebige Textdatei ins Projekt (JSON, .asmdef, .shader, .txt, .csv …). Path-Sandbox + Backup.

read_project_fileB

Liest eine Projektdatei als Text (z.B. ein Skript oder eine Config).

import_external_assetA

Kopiert eine externe Datei (Modell/Textur/Audio …) nach dest_rel (unter Assets/) ins Projekt. Unity importiert sie beim nächsten Editor-Lauf; Feintuning danach via configure_asset_import.

list_project_assetsC

Listet Asset-Dateien eines Projekts (rekursiv, ohne .meta). pattern z.B. '*.cs'.

create_project_folderB

Erstellt einen Ordner im Projekt (z.B. 'Assets/Scripts'). Path-Sandbox aktiv.

delete_project_assetA

Löscht eine Asset-Datei (+ .meta) nach Backup. confirm=true nötig.

build_sceneA

Baut aus einer JSON-Spezifikation eine echte .unity-Szene (via injiziertes C#), als Job.

spec = { "scenePath": "Assets/Scenes/Game.unity", "addToBuildSettings": true, "gameObjects": [ {"name":"Main Camera","camera":true,"position":[0,1,-10]}, {"name":"Sun","light":{"type":"Directional","intensity":1.0},"rotation":[50,-30,0]}, {"name":"Floor","primitive":"Plane","scale":[5,1,5]}, {"name":"Player","primitive":"Capsule","position":[0,1,0],"tag":"Player", "components":["Rigidbody","PlayerController"]} ] } components dürfen eingebaute Typen (Rigidbody, BoxCollider …) ODER eigene MonoBehaviour- Klassennamen sein (vorher per write_script anlegen).

PROFI-Features pro gameObject (optional): "material": {"color":[r,g,b],"metallic":0.0,"smoothness":0.6,"emission":[r,g,b],"emissionIntensity":2.0, "mainTexture":"Assets/.../baseColor.png","normalMap":"Assets/.../normal.png", "occlusionMap":"Assets/.../ao.png","metallicGlossMap":"Assets/.../mask.png","normalScale":1.0} (URP-aware, wird als .mat gespeichert+zugewiesen; PBR-Maps automatisch korrekt importiert: normalMap→NormalMap+_NORMALMAP, ao/mask→linear. Maps z.B. via download_pbr_material / download_polyhaven_texture holen = Premium-Look) "physicMaterial": {"bounciness":0.8,"dynamicFriction":0.3,"staticFriction":0.4} "props": Komponenten-Properties setzen (Werte/Referenzen/Assets/Enums/Vektoren/Farben), z.B. {"component":"Rigidbody","name":"mass","value":2.0} {"component":"Rigidbody","name":"linearDamping","value":0.5} # Unity-6-Name (alt: drag) {"component":"Rigidbody","name":"constraints","enum":"FreezeRotationX|FreezeRotationZ"} {"component":"CameraFollow","name":"target","ref":"Player"} # Referenz auf Scene-Objekt {"component":"AudioSource","name":"clip","asset":"Assets/Audio/x.wav"} {"component":"Light","name":"color","color":[1,0.9,0.7]} "prefab": "Assets/Prefabs/X.prefab" # statt primitive eine Prefab-Instanz erzeugen "isStatic": true, "tag":"Player", "layer":8, "parent":"OtherObjectName" Top-Level optional: "environment": {"ambientMode":"Trilight","ambient":[r,g,b],"skyboxMaterial":"Assets/...","fog":true,"fogColor":[..],"fogDensity":0.01} "postProcessing": {"bloom":{"intensity":1.2,"threshold":0.9,"scatter":0.7}, "colorAdjustments":{"postExposure":0.2,"contrast":10,"saturation":15}, "vignette":{"intensity":0.3},"tonemapping":{"mode":"ACES"}, "antialiasing":"SubpixelMorphologicalAntiAliasing"} (URP; Bloom braucht emissive/HDR-Quellen) "saveAsPrefabs": [{"object":"Enemy","path":"Assets/Prefabs/Enemy.prefab"}] Ergebnis via get_build_result(result_file).

configure_projectA

Setzt Projekt-Einstellungen (Job): PlayerSettings (productName/companyName/bundleVersion/ Auflösung/fullScreenMode/runInBackground/colorSpace), Quality-Level, sowie eigene Tags und Layer.

config = { "productName":"My Game","companyName":"My Studio","bundleVersion":"1.0.0", "defaultWidth":1920,"defaultHeight":1080,"fullScreenMode":"FullScreenWindow", "runInBackground":true,"colorSpace":"Linear","qualityLevel":5, "tags":["Player","Enemy"],"layers":{"8":"Ground","9":"Interactable"} } Layer-Indizes müssen 8..31 sein (0..7 sind reserviert).

capture_scene_renderB

Rendert die Kamera einer Szene headless in eine PNG (Job) — für visuelle Prüfung: Claude kann die PNG anschließend per Bild-Werkzeug ansehen und Shader-/Clipping-/Layout-Fehler erkennen. Läuft bewusst OHNE -nographics (mit -force-d3d11), sonst schwarzes Bild. Nach Jobende output_png mit dem Read-/Bildwerkzeug öffnen.

analyze_scene_performanceA

Statische Performance-Analyse einer Szene (Job): Dreiecke/Vertices, Mesh-/Renderer-Anzahl, eindeutige Materialien (Draw-Call-Proxy), Lichter/Echtzeitlichter. Ergebnis via get_build_result(result_file) — liefert Budget-Daten zum Optimieren ohne Play-Modus.

profile_playA

Laufzeit-Profiling SCHRITT 1 (Job): baut einen Development-Player der Szene (inkl. Profiling- Probe). Echte Draw-Call-/Frame-Zeit-Werte gibt es nur im laufenden Player (Headless-Editor liefert 0 Render-Zähler). Liefert exe_path + perf_file. Nach Build-Ende → run_profiled_player, dann get_profile_result.

run_profiled_playerA

Laufzeit-Profiling SCHRITT 2 (Job): startet den von profile_play gebauten Player im Fenster (mit GPU), misst N Frames (Frame-Zeit/FPS/Draw Calls/Speicher/GC) und schreibt das Perf-JSON; der Player beendet sich selbst. Danach get_profile_result(perf_file).

get_profile_resultB

Liest das Profiling-Ergebnis: avgFrameMs, avgFps, maxMemMB, avgGcAllocBytes, maxDrawCalls/ maxSetPass/maxTriangles, renderCountersValid.

configure_asset_importB

Setzt Import-Einstellungen eines Assets (Job) und reimportiert. asset_path ist projektrelativ (z.B. 'Assets/Textures/hero.png'). settings_props = Liste von {name, value} oder {name, enum}: Texturen: maxTextureSize(int), textureCompression(enum Uncompressed/Compressed/CompressedHQ/LQ), crunchedCompression(bool), mipmapEnabled(bool), isReadable(bool), textureType(enum) Modelle: globalScale(float), meshCompression(enum Off/Low/Medium/High), materialImportMode(enum), animationType(enum), optimizeMeshPolygons(bool), optimizeMeshVertices(bool) Audio: forceToMono(bool)

create_animation_clipA

Erzeugt eine AnimationClip (.anim, Job) aus Keyframe-Kurven — prozedurale Animation ohne externe Assets (z.B. Idle-Bob, Pulsieren, Rotation). spec = {"path":"Assets/Anims/Bob.anim","frameRate":30,"loop":true, "curves":[{"relativePath":"Visual","type":"Transform","property":"localPosition.y", "keys":[{"t":0,"v":0},{"t":0.5,"v":0.25},{"t":1,"v":0}]}]}

build_animator_controllerA

Baut einen Animator-Controller (.controller, Job) mit States, Parametern und Transitions — macht Charaktere animiert (Idle/Run/Jump). Clips referenzieren via '.anim'-Pfad oder 'Pfad.fbx::ClipName'. Danach den Controller per build_scene an einen Animator hängen: components:["Animator"], props:[{"component":"Animator","name":"runtimeAnimatorController", "asset":"Assets/Animators/Player.controller"}]. spec = {"path":"...","parameters":[{"name":"Speed","type":"Float"}],"defaultState":"Idle", "states":[{"name":"Idle","clip":"..."},{"name":"Run","clip":"..."}], "transitions":[{"from":"Idle","to":"Run","conditions":[{"param":"Speed","mode":"Greater","threshold":0.1}]}]} Parameter-Typen: Float/Int/Bool/Trigger. Condition-Modi: Greater/Less/If/IfNot/Equals/NotEqual.

create_spriteB

Erzeugt einen prozeduralen Platzhalter-Sprite (PNG → als Sprite importiert, Job) für 2D-Spiele ohne externe Art. shape: 'square' | 'circle'. Danach via build_scene an einen 'SpriteRenderer' hängen (components:['SpriteRenderer'], props:[{component:'SpriteRenderer',name:'sprite',asset:path}]). 2D-Kamera: props {component:'Camera',name:'orthographic',value:true} + 'orthographicSize'. 2D-Physik: Komponenten 'Rigidbody2D' / 'BoxCollider2D' / 'CircleCollider2D'.

list_animation_clipsB

Listet die AnimationClip-Namen in einem importierten Asset (FBX/.anim, Job) — z.B. um die Clip-Namen eines Mixamo-/Asset-Pack-Charakters für build_animator_controller zu erfahren. Ergebnis via get_build_result(result_file) -> result.clips.

gui_list_windowsA

Listet sichtbare Top-Level-Fenster (Titel, Klasse, Handle, Position). Filter z.B. 'Unity'.

gui_inspect_windowA

Listet den UIA-Steuerelementbaum eines Fensters (Buttons/Texte/IDs) — ideal für den Hub.

gui_focus_windowB

Bringt ein Fenster in den Vordergrund (Teil-Titel genügt).

gui_clickA

Klickt an Bildschirmkoordinaten (button: left|right|middle). Für den selbst gezeichneten Editor der Fallback; vorher screenshot_desktop zur Orientierung nutzen.

gui_type_textC

Tippt literalen Text in das fokussierte Fenster.

gui_send_keysA

Sendet rohe Tastenfolgen (pywinauto-Syntax), z.B. '^s' = Strg+S, '{ENTER}', '%{F4}'.

blender_statusA

Prüft, ob Blender (headless) verfügbar ist (Version, Python, glTF/FBX-Export).

blender_run_pythonA

Führt ein bpy-Python-Skript headless in Blender aus → eigene 3D-Assets erzeugen (Mesh/Material/UV/Bake/Export GLB+FBX/Render) für Unity. Das mächtige Primitiv der 3D-Erstellung.

Im Skript verfügbar: mcp_args() (Argumente nach '--') und mcp_result(dict) (Ergebnis-JSON). Exportiere für Unity nach Assets/ (dann import_external_asset/build_scene). Beispiel-Skriptkern: import bpy bpy.ops.mesh.primitive_cube_add(size=2) ob = bpy.context.active_object bpy.ops.export_scene.gltf(filepath=mcp_args()[0], export_format='GLB', use_selection=True) mcp_result({"ok": True, "out": mcp_args()[0]})

blender_render_previewA

Rendert eine Vorschau-PNG eines 3D-Modells (GLB/FBX/OBJ) headless in Blender (CYCLES) — damit Claude generierte/importierte 3D-Assets per Bild prüfen kann.

blender_bake_pbrA

Erzeugt prozedural einen tileable PBR-Textursatz (baseColor/normal/roughness/ao) via Blender-CYCLES-Bake — eigene Premium-Texturen ohne Download, für Dinge, die keine CC0-Bibliothek hat. preset: 'brick' | 'rock' | 'wood' | 'metal'. resolution z.B. 512/1024/2048. Danach in Unity via build_scene material (mainTexture=baseColor, normalMap=normal, occlusionMap=ao) verbaubar.

pack_sprite_atlasA

Packt alle PNGs eines Ordners (rekursiv) in einen kohärenten Sprite-Atlas (atlas.png + atlas.json/JsonHash, POT, getrimmt) via free-tex-packer-core. Für 2D-Kohärenz

  • weniger Draw Calls. In Unity als Sprite (Multiple) slicen.

figma_export_imagesA

Exportiert Figma-Frames/Components als PNG/SVG (für Game-UI) und lädt sie nach output_dir. node_ids aus der Figma-URL (?node-id=…); '-' wird zu ':' konvertiert. Token via Parameter oder FIGMA_TOKEN. ⚠️ Free-Tier ~6 Calls/Monat → alle Nodes in EINEM Aufruf batchen.

figma_get_outlineA

Holt die obere Struktur einer Figma-Datei (Frame-/Node-IDs + Namen finden), sparsam (depth).

krita_exportA

Konvertiert eine .kra/.psd/.tiff … in PNG/JPG (Endung von out_path) via Krita.

krita_openB

Öffnet Krita (GUI) zum Hand-Polieren von 2D-Art; danach als .kra speichern → krita_export.

search_pbr_materialsA

Sucht hochwertige CC0-PBR-Materialien auf ambientCG (z.B. 'brick', 'wood', 'metal', 'rock', 'fabric'). Liefert Asset-IDs für download_pbr_material.

download_pbr_materialB

Lädt ein CC0-PBR-Set von ambientCG (gescannt, kostenlos) und entpackt die Maps (baseColor/normal/roughness/ao/height/metallic). asset_id z.B. 'Bricks075A'; resolution z.B. '1K-PNG','2K-PNG','4K-PNG'. Danach in Unity (build_scene material mainTexture = baseColor, NormalMap importieren) oder Blender verbauen. Premium-Qualität ohne eigene Erstellung.

search_polyhaven_texturesA

Sucht CC0-Texturen auf Poly Haven (zweite Premium-Quelle, oft schöner für Natur/Stein/Holz; Tags/Kategorien). Liefert Asset-Slugs für download_polyhaven_texture.

download_polyhaven_textureB

Lädt ein CC0-PBR-Set von Poly Haven und klassifiziert die Maps (baseColor/normal(nor_gl)/ roughness/ao/height/metallic/arm). asset_id z.B. 'brick_wall_02'; resolution '1k'/'2k'/'4k'/'8k'; fmt 'png'/'jpg'. Danach in Unity via build_scene material (mainTexture=baseColor, normalMap=normal, occlusionMap=ao) verbaubar — volle PBR-Qualität ohne eigene Erstellung.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/MauricePutinas/Unity-MCP-Claude-Code'

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