MCP 服务器

GripForge

io.github.gripforgeai/mcp
设计与创意 开发者工具 游戏 公开且可连接 MCP 2025-11-25

此 MCP 可以做什么

Generates, rigs, animates, analyzes, and packages game characters, weapons, armor, effects, environments, and engine-ready assets.

getAttachmentFrame
Skeleton attachment frame
Return the skeleton frame for a limb. Outward = R_Thigh−L_Thigh (never ask the LLM). Up = Knee→Hip / Ankle→Knee. Match getWearableFrame axes — no Euler.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['character_url', 'bodyPart'], 'properties': {'bodyPart': {'enum': ['right_thigh', 'left_thigh', 'right_shin', 'left_shin'], 'type': 'string', 'description': 'Limb to seat'}, 'character_url': {'type': 'string', 'description': 'URL of the rigged character'}}}
getWearableFrame
Wearable asset frame
Analyze an armor asset once: up, bodyFacing, outward, anchor. Never returns rotate X = 180°.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['asset_url'], 'properties': {'side': {'enum': ['left', 'right'], 'type': 'string'}, 'type': {'enum': ['thigh', 'greave'], 'type': 'string'}, 'asset_url': {'type': 'string', 'description': 'URL of the armor piece'}}}
gripforge_abilities
Abilities / skills · four engines
combat.abilities: inspect schema, get an editable Chrono Crab example, validate a pack or export executable Three.js, Godot, Unity and Unreal source adapters. Shared costs, cooldowns, conditions, targeting, windup/active/recovery and presentation cues. Native adapters require the game combat backend and asset bindings. Returns relative path/content files; no rig/animation/VFX generation or automatic installation. Persist through gripforge_gamekit_configure config.pack or project data. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['action'], 'properties': {'pack': {'type': 'object', 'description': 'Versioned ability pack. Read schema/example first; author a reusable pack then validate it.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'action': {'enum': ['schema', 'example', 'validate', 'export'], 'type': 'string'}, 'target': {'enum': ['threejs', 'godot', 'unity', 'unreal', 'all'], 'type': 'string'}, 'model_asset': {'type': 'string', 'pattern': '^lib_[A-Za-z0-9_-]{8,64}$', 'description': 'Library model id bound to the example. Does not rig or animate it.'}}}
gripforge_aim
Aim-offset poses (two-bone IK per hand)
Aim-offset poses for a Library character/armed bind (0 credits): per hand, two-bone IK + wrist alignment so the WEAPON AXIS (gf_muzzle locator from loadout, else the seat forward) points at every direction of a yaw×pitch grid. Returns bone-local quaternions per pose + rest, and a Three.js/Godot blend snippet. Dual wield ready (independent hands).
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'yaws': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Default [-60,-30,0,30,60]'}, 'hands': {'type': 'array', 'items': {'enum': ['left', 'right'], 'type': 'string'}}, 'pitches': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Default [-40,-20,0,20,40]'}, 'attach_id': {'type': 'string', 'description': 'Armed bind / loadout id (lib_â\x80¦) â\x80\x94 preferred'}, 'extension': {'type': 'number', 'description': 'Arm extension 0.5â\x80\x930.98 (default 0.9)'}, 'character_id': {'type': 'string', 'description': 'Character id if no bind'}}}
gripforge_animate
Apply standard animation pack
Retarget the Universal Animation Library pack onto a Mixamo-named Library character/enemy/armed bind. Base slots + extras (taunt, stinger, knockback, block, jump_start/loop/land, idle_guns, shoot). archetype remaps the base slots: sword (default), claws, heavy, brawler, puppet. Opt-in slots fire_breath (mouth exhalation) and energy_cast (two-hand azure wave) use the Studio VFX character motions. Saves kind=animation. 0 credits.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['character_id'], 'properties': {'name': {'type': 'string', 'description': 'Library name for the animated GLB'}, 'slots': {'type': 'array', 'items': {'enum': ['idle', 'walk', 'run', 'attack1', 'attack2', 'attack3', 'hit', 'death', 'dodge', 'taunt', 'stinger', 'knockback', 'block', 'jump_start', 'jump_loop', 'jump_land', 'idle_guns', 'shoot', 'fire_breath', 'energy_cast'], 'type': 'string'}, 'description': 'Subset of clips (default: all)'}, 'archetype': {'enum': ['sword', 'claws', 'heavy', 'brawler', 'puppet'], 'type': 'string', 'description': 'Movement/strike archetype â\x80\x94 remaps the base slots (default sword)'}, 'character_id': {'type': 'string', 'description': 'Library character, enemy, or armed bind id'}}}
gripforge_architecture_schema
Architecture · schema
Read the reusable Meshy building and district contract, example, limits and plan → build workflow. Separate immutable Library assets, scene instances and shared SceneDocument. No paid generation.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
gripforge_armor_generate
Generate a modular armor kit
Queue a durable armor-kit job: one shared concept, isolated Imagine references, Meshy PBR models, bounded Blender interior preparation and paired GLB exports, then actual GripForge wearer review. Types: helmet, chest, belt, pauldron, bracer, glove, thigh, greave, boot, upperarm, gorget, tasset, undersuit. coverage=full adds a durable anatomical decomposition of the concept, rejects missing planned roles before mesh generation and records per-instance coverage fits. A piece count alone never proves body coverage. The optional undersuit is a locally manufactured adaptive textile which retains each wearer’s skin weights. Meshy pieces cost 11 credits per canonical type; the textile has no image/mesh charge. A new concept costs 1 credit; mirrors are included. concept_item must be an owned Library image. source_kit + explicit pieces regenerates only those types into a NEW work kit and pins unchanged pieces. Closing the call/page does not cancel. Poll gripforge_generation_read. Success is a work version, never automatic visual approval. The result includes a Grip Studio link, review scene, concepts, source models and Blender source.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'name': {'type': 'string', 'maxLength': 100}, 'pieces': {'type': 'array', 'items': {'enum': ['helmet', 'chest', 'belt', 'pauldron', 'bracer', 'glove', 'thigh', 'greave', 'boot', 'upperarm', 'gorget', 'tasset', 'undersuit'], 'type': 'string'}, 'maxItems': 13, 'minItems': 1}, 'prompt': {'type': 'string', 'maxLength': 2000, 'minLength': 3}, 'coverage': {'enum': ['modular', 'full'], 'type': 'string'}, 'polycount': {'type': 'integer', 'maximum': 30000, 'minimum': 3000}, 'source_kit': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'concept_item': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'textile_color': {'type': 'string', 'pattern': '^#[a-fA-F0-9]{6}$'}, 'character_items': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'maxItems': 3}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_armor_read
Read a modular armor kit
Read an owned kit manifest, semantic slots and immutable piece revisions. Equipment and instances remain independent. Returns the Grip Studio link. To correct selected types, call gripforge_armor_generate with source_kit and pieces.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_armor_repair
Repair unfinished armor pieces
Fork a failed/cancelled armor job into a new work kit. Preserve completed pieces and the exact shared concept; recreate only unfinished types by default. Optional pieces chooses types explicitly. Use prompt for targeted corrections. Original checkpoints and artifacts remain intact. Costs 11 credits per regenerated canonical type (plus a concept credit only if none survived). Use generation_retry instead for a transient provider or worker error to reuse the exact same steps without another charge.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['source_job'], 'properties': {'pieces': {'type': 'array', 'items': {'enum': ['helmet', 'chest', 'belt', 'pauldron', 'bracer', 'glove', 'thigh', 'greave', 'boot', 'upperarm', 'gorget', 'tasset', 'undersuit'], 'type': 'string'}, 'maxItems': 13, 'minItems': 1}, 'prompt': {'type': 'string', 'maxLength': 2000, 'minLength': 3}, 'source_job': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_asset_clone
Copy a Community asset to the workspace
Copy a published Community asset into the connected workspace. First take costs 1 generation credit; an armor set costs 1 per piece. Repeated takes are not billed again but may create another copy: reuse an existing workspace id when possible. Returns the private Library item and signed file URL. Download it with gripforge_library_pull, then import into the actual game.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^lib_[A-Za-z0-9_-]+$', 'description': 'Published Community Library id.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Authorized workspace; defaults to the connected workspace.'}}}
gripforge_asset_search
Search workspace and Community assets
Search actual asset models, materials and animations, independently of Game Kit modules. Returns provenance, import requirements and Library ids. Results are ranked best first by fitness for a GripForge game (score/100, grade A–D, reasons: triangle budget for the target, rigged and clean rig, clips, empty-handed characters, attachable weapons, classified, file size, adoption); `best` is the top pick across sources. Prefer grade A/B; read the reasons before choosing a C/D. Search both sources before manufacturing missing roles. An empty kit search does not mean there are no assets. Search is free; never substitutes proxy geometry for finished models.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['q'], 'properties': {'q': {'type': 'string', 'maxLength': 200, 'description': 'Visual role or style, e.g. sci-fi turret, rock, soldier.'}, 'kind': {'enum': ['character', 'fps-arms', 'enemy', 'weapon', 'equipment', 'prop', 'texture', 'skybox', 'vfx', 'animation', 'audio', 'kit'], 'type': 'string', 'description': 'Optional asset kind.'}, 'sort': {'enum': ['rank', 'newest'], 'type': 'string', 'description': 'rank (default): best fit first; newest: most recent first.'}, 'limit': {'type': 'integer', 'maximum': 48, 'minimum': 1, 'description': 'Results per source; default 12.'}, 'offset': {'type': 'integer', 'maximum': 10000, 'minimum': 0, 'description': 'Pagination offset per source; default 0.'}, 'source': {'enum': ['workspace', 'community', 'both'], 'type': 'string', 'description': 'Defaults to both.'}, 'target': {'enum': ['mobile', 'desktop'], 'type': 'string', 'description': 'Platform the game ships on: sets the triangle and file budgets of the rank. Defaults to mobile.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Authorized workspace; defaults to the connected workspace.'}}}
gripforge_attach
Attach weapon to character
Attach a prop (sword, shield, gun, staff/scythe…) onto a rigged character. Finds the hand bone across naming schemes, scales the prop to the character, seats the grip, closes the fist, and returns a bind + ready-to-paste Three.js / Unity / Godot snippets. Pass Library ids (character_id / prop_id) or https URLs. attach_id reuses an existing armed bind GLB as the character. prop_id_2 attaches a second held item (off-hand) onto the first result. The bind (+ armed GLB when export_glb) is saved in Library — not a second credit. To write files into an open repo, use the npm MCP package gripforge_library_pull.
可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'fist': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Fist closing 0â\x86\x921 (default 1)'}, 'hand': {'enum': ['right', 'left'], 'type': 'string', 'description': 'Hand side (default right)'}, 'style': {'enum': ['melee', 'gun', 'shield', 'staff'], 'type': 'string', 'description': 'Grip style (default: geometric classification)'}, 'prop_id': {'type': 'string', 'description': 'Library id of a prop (lib_â\x80¦)'}, 'prop_url': {'type': 'string', 'description': 'URL of the prop mesh'}, 'ai_refine': {'type': 'boolean', 'description': 'Vision check of the grip (+10-30s)'}, 'attach_id': {'type': 'string', 'description': 'Library bind id â\x80\x94 armed GLB used as the character (second prop, or continue a kit)'}, 'prop_id_2': {'type': 'string', 'description': 'Optional second held item (off-hand) attached after the first'}, 'export_glb': {'type': 'boolean', 'description': 'Bake attached.glb into Library and return its signed URL'}, 'prop_url_2': {'type': 'string', 'description': 'https URL of a second held item (off-hand)'}, 'character_id': {'type': 'string', 'description': 'Library id of a character (lib_â\x80¦)'}, 'height_ratio': {'type': 'number', 'maximum': 1.5, 'minimum': 0.05, 'description': 'Prop size as a fraction of body height'}, 'character_url': {'type': 'string', 'description': 'URL of the rigged character (.glb .gltf .fbx .obj)'}}}
输出模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'bind': {'type': 'object', 'description': 'Bind result: resolved bone, position/rotation, grip pose, notes', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'credits': {'type': 'object', 'properties': {'plan': {'type': 'string'}, 'used': {'type': 'number'}, 'limit': {'type': 'number'}, 'period': {'type': 'string'}, 'remaining': {'type': 'number'}}, 'description': 'Account usage after this call', 'additionalProperties': False}, 'exports': {'type': 'object', 'description': 'Ready-to-paste engine snippets keyed by target (three, unity, godot, json)', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'glb_download_url': {'type': 'string', 'description': 'Download URL of the armed GLB (when export_glb is true)'}}, 'additionalProperties': False}
gripforge_audio_kit
Audio kit for a game style
Search locker + Community audio. Prompt matches name, description, tags and use (gunshot, ui, magic, footsteps, announcer, dinosaure, magie, pas…). Each hit has id, description, use[], pack, file_url. Community hits: clone with /api/v1/community/{id}/clone (1 credit first take) then pull. Free to search.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'prompt': {'type': 'string', 'description': 'What you need, e.g. "gunshot", "ui click", "dinosaur roar", "magie", "annonceur fps". Omit for a short catalog.'}}}
gripforge_blender_fabricate
Fabricate editable assets with Blender
Queue a bounded Blender recipe, never arbitrary Python. Saves GLB and .blend in the workspace as an unvalidated work version with a shared Scene Studio link. Read gripforge_scene_schema for recipe fields. Supports original primitive/custom meshes, PBR colors and keyed transforms. Poll gripforge_generation_read; final visual approval must use GripForge rendering, not Blender screenshots.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['recipe'], 'properties': {'recipe': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_boss
Boss kit (stats + phases + optional mesh)
Create a playable boss for a game look: stats, phases, attacks bound to anim-pack slots, arena, and Three / Godot / Unity / Unreal snippets. Kit is 0 credits. Reuses a locker enemy when one exists. Pass character_id to bind a Library mesh. Pass generate=true to forge a NEW kind=enemy boss mesh (10 credits, 2–8 min) — only if style_kit / locker is empty. Then gripforge_animate(archetype) + gripforge_hitbox. Name stays text.
可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'description': 'Boss display name'}, 'role': {'enum': ['mini', 'mid', 'final'], 'type': 'string', 'description': 'mini | mid | final (inferred from the prompt)'}, 'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "devil may cry like phantom boss"'}, 'generate': {'type': 'boolean', 'description': 'Forge a new enemy mesh (10 credits). Skip if locker already has one.'}, 'provider': {'enum': ['tripo', 'meshy'], 'type': 'string', 'description': 'Only used when generate=true (default tripo)'}, 'character_id': {'type': 'string', 'description': 'lib_â\x80¦ character/enemy/bind to bind â\x80\x94 0 credits'}}}
gripforge_bot_kit
Server-owned navmesh bots
Navmesh bots as server-owned player scenes so spawner/synchronizer/net-kit damage apply unchanged. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'difficulty: easy, normal, hard'}}}
gripforge_build_deploy
Deploy a build
Not implemented. Returns 501 until artifact upload exists.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game build id (bld_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_build_get
Get a dedicated build
Read one game build. Upload/deploy of Linux dedicated artifacts is not implemented yet.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game build id (bld_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_build_list
List dedicated builds
List game_builds (not Godot kit zips at /api/v1/builds).
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_build_rollback
Rollback a build
Not implemented. Returns 501. Mutating / production-sensitive.
可能执行破坏性操作
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game build id (bld_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_cape
Rig a cape onto a character (bones + skinning + spring params)
Cape rig v2: generates a 3-column bone grid (gf_cape_c*r*) anchored to the neck/upper-spine bone, skins the cape mesh onto it (vertical blend × gaussian columns), and bakes attached_cape.glb (character + skinned cape). The cape then ANIMATES: run the returned Godot script (spring bones, attach to the Skeleton3D) or the Three.js verlet snippet — the engine simulates, the bind carries structure + suggested spring params. Inputs: Library ids (lib_…) or https URLs of GLBs. CONSUMER RECIPE — (1) call with character_id/cape_id; (2) download the baked glb from library.file_url; (3) drop cape-godot.gd next to it and attach to the Skeleton3D node. 1 credit.
可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'rows': {'type': 'integer', 'maximum': 8, 'minimum': 2, 'description': 'bone rows below anchor (default 5)'}, 'save': {'type': 'boolean', 'description': 'save attached_cape.glb into Library (default true)'}, 'cape_id': {'type': 'string', 'description': 'Library id of the cape mesh (lib_â\x80¦)'}, 'columns': {'type': 'integer', 'maximum': 5, 'minimum': 2, 'description': 'bone columns (default 3)'}, 'cape_url': {'type': 'string', 'description': 'https URL of the cape GLB (static mesh)'}, 'character_id': {'type': 'string', 'description': 'Library id of a rigged character (lib_â\x80¦)'}, 'character_url': {'type': 'string', 'description': 'https URL of a rigged character GLB'}}}
输出模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['bind', 'files', 'library', 'notes'], 'properties': {'bind': {'type': 'object', 'description': 'cape bind v1 â\x80\x94 anchor bone, gf_cape_* grid, stiffness per bone, spring params', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'files': {'type': 'object', 'description': 'cape-bind.json, cape-godot.gd (spring bones script), cape-three.js (verlet snippet)', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'library': {'anyOf': [{'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'Library item of the baked attached_cape.glb (skinned, ready to load)'}}, 'additionalProperties': False}
gripforge_character_concepts
Three character / enemy / boss concept pictures
Three LOOK pictures (3/4, Imagine low 1K) of a named character, enemy or boss BEFORE any 3D. Pass weapon to show it on the looks; 3D later is T-pose empty hands. Pick one, then gripforge_generate_character with concept_item. 1 credit per image (default 3).
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name', 'prompt'], 'properties': {'n': {'type': 'number', 'maximum': 4, 'minimum': 1, 'description': 'Default 3'}, 'kind': {'enum': ['character', 'enemy', 'boss'], 'type': 'string', 'description': 'Default character'}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 2, 'description': 'Creation name, stored on each concept'}, 'prompt': {'type': 'string', 'maxLength': 600, 'minLength': 3, 'description': 'Look, outfit, silhouette'}, 'weapon': {'type': 'string', 'maxLength': 160, 'description': 'Shown on the looks only; empty hands if omitted'}}}
输出模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'kind': {'type': 'string'}, 'name': {'type': 'string'}, 'items': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'recipe': {'type': 'string'}, 'credits': {'type': 'number'}}, 'additionalProperties': False}
gripforge_concept_correct
Correct a character concept
Turn a character concept image into a strict T-pose sheet (optional: remove flowing cape/train only — sleeved jacket stays; outfit or sport base). Saves PNG to Library. 1 credit. Hosted MCP takes https file_url.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['file_url'], 'properties': {'cape': {'type': 'boolean', 'description': 'Remove flowing cape/train only; keep sleeved jacket (outfit only, default true)'}, 'name': {'type': 'string', 'description': 'Library name'}, 'notes': {'type': 'string', 'description': 'Extra direction'}, 'clothes': {'enum': ['outfit', 'base'], 'type': 'string', 'description': 'outfit = keep clothes; base = grey athletic sportswear'}, 'file_url': {'type': 'string', 'description': 'https URL of the concept image'}}}
gripforge_creature_analyze
Creature rig · detect anatomy
Queue multiview mesh inspection and vision anatomy detection for an OWNED GLB. Detect actual body, legs, arms, claws, wings or tail without imposing a humanoid/eight-leg template. Returns a persistent job_id. Poll gripforge_generation_read with include_preview=true for the annotated views, editable profile and uncertainty flags. No rig mutation. 0 GripForge credits; configured server vision/Blender required.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['source_id'], 'properties': {'kind': {'enum': ['enemy', 'character'], 'type': 'string'}, 'name': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'source_id': {'type': 'string', 'pattern': '^lib_[A-Za-z0-9_-]{8,64}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100}, 'idempotency_key': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:-]{8,160}$'}}}
gripforge_creature_rig
Creature rig · manufacture
Create a NEW private draft character/enemy from a completed creature analysis and optional corrected anatomy. Blender builds the skeleton, surface-smoothed skin weights and procedural starting/diagnostic clips. Grounded leg chains get in-place walk/run with IK. Returns job_id; poll gripforge_generation_read for the Character Studio link, skinned GLB, editable .blend, anatomy and deformation report. Never automatically replaces or validates the source. Every anatomy proposal requires explicit review; use generation_cancel/retry to control durable work. Finger/facial authoring and finished combat choreography are outside v1. 0 GripForge credits.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['analysis_job'], 'properties': {'name': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'profile': {'type': 'object', 'description': 'Optional corrected anatomy in the exact coordinate system returned by analyze. Read the schema and inspect the multiview preview first.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'allow_rerig': {'type': 'boolean', 'description': 'Explicitly create a NEW rigged copy if the source already contains bones. The source is never overwritten.'}, 'analysis_job': {'type': 'string', 'pattern': '^gen_[A-Za-z0-9_-]{8,64}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100}, 'idempotency_key': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:-]{8,160}$'}, 'reviewed_anatomy': {'type': 'boolean', 'description': 'Required: true only after inspecting/correcting the anatomy and its skeleton overlay.'}}}
gripforge_creature_rig_schema
Creature rig · schema
Read the reusable creature anatomy/rig workflow, coordinate contract, limits and export formats. Detect anatomy before authoring; source GLB, asset instances and draft rig stay separate. Blender is the worker, GripForge is the review renderer.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
gripforge_flexible_chain
Simulate and bake a flexible chain
Queue a persistent 240 Hz XPBD simulation using GripForge Scene Engine. Read flexible_chain_schema first. recipe version=1: preset whip|rope|tail, duration<=10s, fps=30|60, physics {length,segments,damping,bendCompliance,gravity,radius,floor,iterations}; choose motion [{time,position,direction,capsules}] OR source {asset:{assetId,revisionId},clip,mount_node,offset,axis,colliders}. Source assets are immutable and workspace-scoped. Returns a job ID; poll generation_read for a new draft skinned-chain GLB, sampled joints, recipe, physics metrics and Character Studio link. This is a neutral physics preview, not a Meshy weapon redesign or automatic rebind of the source weapon. No runtime world collision or seamless loop guarantee. Cancel/retry keeps completed steps. Does not replace or visually validate an existing asset. 0 credits; storage quota applies.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['recipe'], 'properties': {'recipe': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_flexible_chain_schema
Flexible chain recipes and examples
Read the bounded recipe schema for the shared FlexibleChain solver. Presets: whip, rope, tail. Input can follow an exact named mount in a pinned GLB animation or sampled world-space motion. Includes units, collision capsules, limits and a runnable example.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_flexible_weapon_schema
Flexible weapon manufacturing recipes
Read the bounded recipe and concept-first workflow for Meshy + Blender flexible weapons, costs, pinned component reuse and source animation requirements.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_font
HUD webfont + rank copy
Google-font CSS + exact HUD copy for a game look (DMC: Cinzel D–SSS, kart: Teko, CS: Barlow Condensed). Put letters in HTML/Text nodes. Do NOT rasterize ranks, km/h, or HUD numbers with an image model. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "devil may cry like"'}}}
gripforge_formats
Supported formats
List the mesh formats and grip styles GripForge supports.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
输出模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['formats', 'styles', 'docs'], 'properties': {'mcp': {'type': 'object', 'required': ['client', 'latest', 'outdated', 'npm', 'hosted'], 'properties': {'npm': {'type': 'string'}, 'client': {'type': 'string'}, 'hosted': {'type': 'string'}, 'latest': {'type': 'string'}, 'outdated': {'type': 'boolean'}}, 'additionalProperties': False}, 'docs': {'type': 'string', 'description': 'Documentation URL'}, 'styles': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Supported grip styles'}, 'formats': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Supported mesh file formats'}}, 'additionalProperties': False}
gripforge_fps_animation
Manufacture first-person weapon animations
Queue a persistent Blender job for paired FPS arms and an articulated pistol: idle, draw, fire, tactical reload and empty reload. Recipe: {version:1,preset:"pistol",name:"Pistol FPS",tempo:1}; tempo 0.7–1.3. Returns job_id immediately; poll gripforge_generation_read for the private Library asset, .blend source, event markers and Character Studio FPS link. Generated variants are work revisions, never automatically validated. Use gripforge_generation_cancel/retry; completed steps survive closing the page.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['recipe'], 'properties': {'recipe': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_fps_kit
Tactical FPS engine
Reusable FPS rules, map and runtime exports for Godot and web: weapons, reload markers, viewmodel, camera, bots, grenades and bomb rounds. Offline bots. Persist changes with gripforge_kit. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'map': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'rules': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'action': {'enum': ['get', 'validate', 'export'], 'type': 'string', 'default': 'get'}, 'kit_id': {'type': 'string'}, 'target': {'enum': ['web', 'godot', 'both'], 'type': 'string', 'default': 'both'}, 'asset_slots': {'type': 'array', 'items': {'type': 'string'}}}}
gripforge_game_broadcast
Broadcast to a match
Requires the Unity SDK. Currently returns 501. Never runs a shell on the host.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'message': {'type': 'string', 'maxLength': 500}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_game_capabilities
Capabilities report of a project
Report the capabilities a Game Kit project provides, what is still missing for a goal (a preset id from gripforge_gamekit_search or a comma-separated list of capabilities) and which catalogue kits would fill each gap. The installed kits (gripforge_gamekit_installed) come first; call this BEFORE gripforge_gamekit_install to pick the next kit. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project_id'], 'properties': {'goal': {'type': 'string', 'maxLength': 400, 'description': 'Preset id (e.g. from gripforge_gamekit_search presets) or comma-separated capabilities to reach. Default: the projectâ\x80\x99s own preset.'}, 'project_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game Kit project id (gkp_â\x80¦). Not a dedicated-server project (gpj_â\x80¦) nor a Library item.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_game_concepts
Game concepts
Concept art for a whole game, reused before generated. Use it when a user asks for a game "like God of War", "a GTA", "a Zelda": call stage=plan with the game they named. The plan lists concepts that already exist for that game (GripForge community catalog or the workspace) and theme assets already in the library: reuse them first. It then prices the missing concepts: one style bible, heroes and bosses one image each, enemies, NPCs, weapons, vehicles, buildings, props and VFX in sheets of 6 cut automatically, textures in sheets of 2 turned into seamless 1024 px textures. Show the plan and price to the user; only call stage=build with a budget after they agree. Concepts are private review images; nothing is sent to 3D. The plan also returns ambient_kits: the kits of the theme's atmosphere (weather, lighting, snow tracks) with their config; install them in the game project next to the blueprint's gameplay kits.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'game': {'type': 'string', 'maxLength': 120, 'minLength': 2, 'description': 'The game the user named, as written ("God of War", "like Dark Souls", "a GTA"). Matched against titles and aliases of the catalog.'}, 'stage': {'enum': ['catalog', 'plan', 'build'], 'type': 'string', 'description': 'catalog: known games, blueprints (slot counts) and theme packs. plan (default, free): what already exists and is reused, what would be generated, and the price. build: generate the missing concepts, requires budget.'}, 'budget': {'type': 'object', 'properties': {'usd': {'type': 'number', 'minimum': 0}, 'credits': {'type': 'number', 'minimum': 0}}, 'description': 'Required for build: maximum credits OR USD, at least the plan price.', 'additionalProperties': False}, 'counts': {'type': 'object', 'properties': {'vfx': {'type': 'integer', 'maximum': 96, 'minimum': 0}, 'npcs': {'type': 'integer', 'maximum': 96, 'minimum': 0}, 'props': {'type': 'integer', 'maximum': 96, 'minimum': 0}, 'bosses': {'type': 'integer', 'maximum': 96, 'minimum': 0}, 'heroes': {'type': 'integer', 'maximum': 96, 'minimum': 0}, 'enemies': {'type': 'integer', 'maximum': 96, 'minimum': 0}, 'weapons': {'type': 'integer', 'maximum': 96, 'minimum': 0}, 'textures': {'type': 'integer', 'maximum': 96, 'minimum': 0}, 'vehicles': {'type': 'integer', 'maximum': 96, 'minimum': 0}, 'buildings': {'type': 'integer', 'maximum': 96, 'minimum': 0}}, 'description': 'Concepts to generate per slot. Default: what the blueprint needs minus what is already reusable.', 'additionalProperties': False}, 'custom': {'type': 'object', 'required': ['title', 'blueprint', 'pack', 'build'], 'properties': {'pack': {'type': 'string', 'maxLength': 60, 'description': 'Closest theme pack from stage=catalog, e.g. nordic-mythology, cyberpunk.'}, 'build': {'type': 'string', 'maxLength': 300, 'minLength': 10, 'description': 'One sentence describing the original game to make.'}, 'title': {'type': 'string', 'maxLength': 80, 'minLength': 2}, 'blueprint': {'type': 'string', 'maxLength': 60, 'description': 'Closest blueprint from stage=catalog, e.g. third-person-action, open-world-rpg.'}}, 'description': 'Only when `game` is not in the catalog: describe the game with the closest blueprint and pack.', 'additionalProperties': False}, 'provider': {'enum': ['openai', 'xai'], 'type': 'string', 'description': 'Default openai (GPT Image 2.5 sunburst: final quality for style bible, heroes and bosses, medium-quality sheets of 6 for the rest).'}, 'workspace_id': {'type': 'string', 'maxLength': 100}, 'idempotency_key': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:-]{8,160}$'}}}
gripforge_game_creation
Prepare and resume a game
The website and CLI share this saved 3D game creation workflow. Ask which engine (Unity, Godot, Unreal, Three.js) if unspecified; do not choose silently. create saves a brief without spending. quote(operation=plan) estimates AI preparation, accept(quote_token) starts its durable job ONLY after user approval of the shown price. get returns a persistent operation log, slots, studio_url and the same project to resume. Planning can select an appropriate preset OR compose real engine-compatible modules. A missing preset never means the genre needs a native engine. composition.modules pins all module versions; composition.tasks lists the custom logic still to implement. Assembly is a foundation, not a completed custom game: use the coding agent to finish those tasks on the selected engine (including web/Three.js). quote refine with message updates the same plan after approval, preserves selected assets and reviewed work, and persists the conversation. use_reference with slot_id and an owned image asset_id supplies an uploaded concept for visual review. assets searches compatible workspace/community items ranked by the brief and role; select chooses one or sets mode=generate with a prompt. For generation: quote concept, obtain approval, accept, poll get, show the concept, approve_concept only after visual user review; quote generate, obtain approval, accept, poll, show the model in its studio, approve_asset only after visual review. Never infer visual approval from technical success. quote build then accept acquires the selected community assets and binds them to a Game Kit prototype, without generating extra assets. With explicit allow_incomplete=true on the build quote, unreviewed models are excluded and missing slots use module defaults where available or remain empty. Show missing_assets before approval; never imply that an incomplete prototype is finished. Native engine projects still need CLI delivery/import; a web project has a play_url. Revision required for edits. Cancel/retry preserve completed steps. 2D unsupported. No automatic spending, invented asset IDs, or unrelated template substitutions.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['action'], 'properties': {'q': {'type': 'string', 'maxLength': 100}, 'id': {'type': 'string', 'maxLength': 100}, 'mode': {'enum': ['select', 'generate', 'default'], 'type': 'string'}, 'action': {'enum': ['list', 'get', 'assets', 'create', 'select', 'use_reference', 'approve_concept', 'approve_asset', 'quote', 'accept', 'cancel', 'retry', 'dismiss'], 'type': 'string'}, 'engine': {'enum': ['web', 'unity', 'godot', 'unreal'], 'type': 'string'}, 'prompt': {'type': 'string', 'maxLength': 2000}, 'source': {'enum': ['all', 'workspace', 'community'], 'type': 'string'}, 'message': {'type': 'string', 'maxLength': 1500, 'minLength': 3}, 'slot_id': {'type': 'string', 'maxLength': 100}, 'asset_id': {'type': 'string', 'maxLength': 100}, 'operation': {'enum': ['plan', 'refine', 'concept', 'generate', 'build'], 'type': 'string'}, 'quote_token': {'type': 'string', 'maxLength': 100}, 'workspace_id': {'type': 'string', 'maxLength': 100}, 'allow_incomplete': {'type': 'boolean'}, 'expected_revision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}
gripforge_gamekit_configure
Configure an installed Game Kit
Tune an installed kit: merge config values validated against the kit configSchema (read it with gripforge_gamekit_get), or toggle enabled to switch the kit off without uninstalling it. Configure installed kits freely rather than recoding what they do. Returns { kit, project } with the new project revision. Call this AFTER gripforge_gamekit_install. 0 credits.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project_id', 'id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9._-]*$', 'maxLength': 120, 'minLength': 2, 'description': 'Kit id from the catalogue, dotted (e.g. vehicle.driveable, mission.objectives).'}, 'config': {'type': 'object', 'description': 'Kit config values, validated against the kit configSchema returned by gripforge_gamekit_get. Merged over the current config.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'reason': {'type': 'string', 'maxLength': 300, 'description': 'One sentence: why you do this, recorded in the project history (required in spirit when you go against the installed-kits rule).'}, 'enabled': {'type': 'boolean', 'description': 'false to disable the kit at runtime while keeping it installed; true to re-enable.'}, 'project_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game Kit project id (gkp_â\x80¦). Not a dedicated-server project (gpj_â\x80¦) nor a Library item.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_gamekit_deliver
Deliver Game Kits into an engine project
Turn catalogue kits, or the enabled kits of a Game Kit project, into engine files: Godot gets GDScript, scenes and config under gripforge/kits/<kit>/, Unity gets an embedded UPM package plus C# files and Unreal a Blueprint-first plugin for every kit with an engine delivery (gameplay and net.* kits; recipes otherwise), web needs nothing. Kits always deliver at their latest version; a kit the project copied locally is delivered from its copy. Call with dry_run=true FIRST: it returns the plan (files to add / keep / modify / delete, conflicts, dependencies, post-install steps) and never charges. Pass project_state (the current gripforge/gamekits.lock.json, path → sha256 of the files under gripforge/, engineVersion) so updates keep your edits and detect conflicts. Then call without dry_run to get the bundle. The hosted endpoint cannot write into your project: write bundle.files following plan.actions in order (backup, write, writeBin from bundle.binaries, delete with .uid / .import siblings, writeLock with bundle.lock), or use the npm client with project_dir (gripforge_gamekit_deliver_local), or the editor bridge. A blocked plan answers 409 with the plan: a file edited in the engine project is reported (modified_file), never overwritten silently; force backs it up then overwrites it. Credits: the first delivery of a kit major version to an engine costs 1 credit per workspace; re-deliveries, updates within a major, dry runs and the web target are free.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['target'], 'properties': {'kits': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9._-]*$', 'maxLength': 120, 'minLength': 2, 'description': 'Kit id from the catalogue, dotted (e.g. vehicle.driveable, mission.objectives).'}, 'config': {'type': 'object', 'description': 'Kit config, validated against its configSchema.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'bindings': {'type': 'object', 'description': 'Asset slot â\x86\x92 Library item id (lib_â\x80¦).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}}, 'maxItems': 16, 'description': 'Kits to deliver (at most 16). Omit to deliver the enabled kits of project_id.'}, 'mode': {'enum': ['install', 'update', 'uninstall'], 'type': 'string', 'description': 'install (default), update to the latest catalogue version, or uninstall (needs project_state.lock).'}, 'force': {'type': 'boolean', 'description': 'true â\x86\x92 back up then overwrite edited managed files and existing seed files.'}, 'target': {'enum': ['godot', 'unity', 'unreal', 'web'], 'type': 'string', 'description': 'Engine to deliver to: godot (addon + kit files), unity (UPM package + C# files), unreal (plugins), web (native, nothing to write). Kits without an engine delivery get recipes.'}, 'dry_run': {'type': 'boolean', 'description': 'true â\x86\x92 plan only: no bundle, never charged. Do this first.'}, 'project_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game Kit project (gkp_â\x80¦) whose enabled kits, config and slot bindings are delivered when kits is omitted.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}, 'project_state': {'type': 'object', 'properties': {'lock': {'anyOf': [{'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'Current gripforge/gamekits.lock.json content, null when absent.'}, 'files': {'type': 'object', 'description': 'path â\x86\x92 sha256 hex of every file under gripforge/ and assets/gripforge/ (at most 5000).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'engineVersion': {'type': 'string', 'maxLength': 80, 'description': 'Engine version, e.g. 4.3.stable.'}}, 'description': 'What the engine project contains now. Without it the plan assumes an empty project (add-only).'}}}
gripforge_gamekit_dependencies
Dependency graph of a project or kit
Dependency graph of a Game Kit project: nodes (installed kits with version, provides, requires), edges labelled by capability, same-scene overlaps (conflicts: several enabled providers of one exclusive capability) and unresolved requirements. Pass project_id for the installed graph; pass a kit id instead to read the declared requires / provides tree of a catalogue kit before installing it. Call this BEFORE gripforge_gamekit_remove with force. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9._-]*$', 'maxLength': 120, 'minLength': 2, 'description': 'Catalogue kit id to inspect instead of a project (returns its manifest tree).'}, 'project_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game Kit project id (gkp_â\x80¦). Default: the workspaceâ\x80\x99s most recently updated project when id is not given.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_gamekit_get
Read one Game Kit
Read one Game Kit: its manifest (provides / requires capabilities, asset slots, data collections, events), README docs, config JSON schema with defaults, version and changelog (information only: projects always run the latest version), and summary { tagline, tags, targets, status, cover, coverUrl } with the featured image URL. Pass with_usage=true to also list the workspace projects that have it installed. Call this BEFORE gripforge_gamekit_configure to know which config keys exist. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9._-]*$', 'maxLength': 120, 'minLength': 2, 'description': 'Kit id from the catalogue, dotted (e.g. vehicle.driveable, mission.objectives).'}, 'version': {'type': 'string', 'maxLength': 40, 'description': 'Exact version to read (e.g. 1.0.0). Default: latest.'}, 'with_usage': {'type': 'boolean', 'description': 'true to include usedBy: the workspace projects where this kit is installed.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_gamekit_install
Install a Game Kit into a project
Add a gameplay kit (a brick) to a Game Kit project (gkp_…); installing marks that the game uses it. Decide it yourself, no confirmation needed. Always the latest version; dependencies are added automatically. Kits are bricks that go together: two kits handling the same thing (e.g. two lightings) are a same-scene overlap, never a game-level conflict — only one is active in a scene. Returns { plan, applied, project }; dry_run=true previews without writing. Check gripforge_gamekit_installed first, then gripforge_gamekit_search; tune with gripforge_gamekit_configure. Legacy genre kits (legacy.*) use gripforge_kit. 0 credits.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project_id', 'id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9._-]*$', 'maxLength': 120, 'minLength': 2, 'description': 'Kit id from the catalogue, dotted (e.g. vehicle.driveable, mission.objectives).'}, 'config': {'type': 'object', 'description': 'Kit config values, validated against the kit configSchema returned by gripforge_gamekit_get. Merged over the current config.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'reason': {'type': 'string', 'maxLength': 300, 'description': 'One sentence: why you do this, recorded in the project history (required in spirit when you go against the installed-kits rule).'}, 'dry_run': {'type': 'boolean', 'description': 'true to return the install plan without writing the project.'}, 'project_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game Kit project id (gkp_â\x80¦). Not a dedicated-server project (gpj_â\x80¦) nor a Library item.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}, 'allow_planned': {'type': 'boolean', 'description': 'true to accept kits still marked planned (0.x, no runtime yet). Default false.'}}}
gripforge_gamekit_installed
Installed kits of a project (use these first)
Start here for an existing project. Lists the kits installed in a Game Kit project (gkp_…), first and marked priority: id, name, enabled, addedBy (user / agent / auto / preset / default — the interface kits every new game gets), provides, requires and config, plus the rule that goes with them. Versions are for your information (projects always follow the latest): each kit also has version (in the project), latest, delivered { godot | unity | unreal } (the version the last engine delivery carries — a delivered game can run an older one) and pendingMigrations (manual migrations left to you). Installed kits are choices already made for this game: build on them for what they cover and configure them as needed; search the catalogue only for what they do not cover. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game Kit project id (gkp_â\x80¦). Not a dedicated-server project (gpj_â\x80¦) nor a Library item.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_gamekit_remove
Uninstall a Game Kit from a project
Uninstall a kit from a Game Kit project (gkp_…). Remove a kit the user installed (addedBy user in gripforge_gamekit_installed) only when the user asks. The default interface kits (ui.menu, input.remap, settings.graphics, addedBy default: present in every new game) are removed only when the user asks; the game then falls back to its own default keys, pause and graphics. Refused with 409 kit_in_use while other installed kits still require one of its capabilities; pass force=true to remove it anyway and prune=true to also drop the dependencies nothing else needs. Returns { removed[], project }. Call gripforge_gamekit_dependencies BEFORE forcing to see who depends on it. 0 credits.
可能执行破坏性操作
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project_id', 'id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9._-]*$', 'maxLength': 120, 'minLength': 2, 'description': 'Kit id from the catalogue, dotted (e.g. vehicle.driveable, mission.objectives).'}, 'force': {'type': 'boolean', 'description': 'true to remove even when other kits depend on it (their requirements become unresolved).'}, 'prune': {'type': 'boolean', 'description': 'true to also remove dependencies that no remaining kit requires.'}, 'reason': {'type': 'string', 'maxLength': 300, 'description': 'One sentence: why you do this, recorded in the project history (required in spirit when you go against the installed-kits rule).'}, 'project_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game Kit project id (gkp_â\x80¦). Not a dedicated-server project (gpj_â\x80¦) nor a Library item.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_gamekit_search
Search the Game Kit catalogue
Start here. Search the modular Game Kit catalogue (vehicle.driveable, mission.objectives, npc.wanted, …) by free text, capability, tag or engine target. Pass project_id to score kits against that project: each hit then carries state { installed, enabled, fills, reason } and kits that fill one of its missing capabilities rank first. Kits are bricks that go together: a kit handling the same thing as an installed one is a same-scene overlap (only one active in a scene), never a reason to skip it. Returns { kits, presets }; each kit carries its presentation: name, tagline (one-line hook), tags, targets and status per engine (web / godot / unity / unreal), and cover / coverUrl, the featured landscape image (WebP) to show the user when proposing kits. legacy.* kits play through their existing client. Kart Racing is native: compose world.racetrack + vehicle.driveable + race.kart; edit race_tracks through project data. world.lighting adds shared sun/fill, point lights and spots, presets, bounded light budgets and bloom; edit world_lights through project data. world.fluids adds interactive mud / blood surfaces, displaced 3D wheel ruts and footprints; edit fluid_surfaces through project data (web renderer). Call this BEFORE gripforge_gamekit_install. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'maxLength': 200, 'description': 'Free text matched on id, name, description and tags (e.g. "drive a car", "wanted level").'}, 'tag': {'type': 'string', 'maxLength': 60, 'description': 'Tag filter (e.g. vehicle, mission, npc, legacy).'}, 'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Max kits returned (default 20).'}, 'target': {'enum': ['web', 'godot', 'unity', 'unreal'], 'type': 'string', 'description': 'Engine target the kit must support. For game creation, use the engine chosen by the user or identified in their project; ask Unity / Godot / Unreal Engine / Three.js if unknown. The API web default is not user consent.'}, 'capability': {'type': 'string', 'maxLength': 120, 'description': 'Capability the kit must provide (exact id or prefix, e.g. vehicle.drive).'}, 'project_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game Kit project id (gkp_â\x80¦) to score results against. Default: the workspaceâ\x80\x99s most recently updated project.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_gamekit_update
Bring Game Kits to their latest version
Projects always follow the latest version of their kits: the studio updates them automatically when a project is opened. Use this to do it now. Dry-run by default: returns the plan (from / to version, migrations). Pass apply=true to apply it. A migration with auto=false is never applied by itself: it is your task — apply its note (config, data) then call again. Omit id to check every installed kit. 0 credits.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project_id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9._-]*$', 'maxLength': 120, 'minLength': 2, 'description': 'Installed kit to update. Omit to check every installed kit.'}, 'apply': {'type': 'boolean', 'description': 'true to apply the update to the latest version (automatic migrations run). Default false = plan only.'}, 'project_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game Kit project id (gkp_â\x80¦). Not a dedicated-server project (gpj_â\x80¦) nor a Library item.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_game_play_url
Play URL of a Game Kit project
Get the browser play URL of a Game Kit project so a human (or a screenshot step) can run its current revision in the web runtime. Reads the project bundle and returns { url, absolute }; absolute is built on the GripForge origin of this key. Call it AFTER gripforge_gamekit_install or gripforge_game_project bind to check the result live. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game Kit project id (gkp_â\x80¦). Not a dedicated-server project (gpj_â\x80¦) nor a Library item.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_game_project
List, create, read, bind, feed or delete Game Kit projects
Manage Game Kit projects (gkp_…): the container holding installed kits, their lockfile, asset bindings and data collections. action=list lists the workspace projects; create needs name and takes a preset (see gripforge_gamekit_search) or an explicit kits map — every new project also gets the default interface kits ui.menu (title / pause / options), input.remap (key remapping) and settings.graphics (graphics options), addedBy default: keep and configure them, leave one out ({ "ui.menu": false }) or remove it only if the user asks; get returns the full ProjectDetail (installed kits, bindings, capabilities, missing, playUrl); bind maps asset slots to Library items (lib_…, null to clear); data reads a collection or upserts / removes documents validated against the kits’ schemas (replace=true swaps the whole collection); delete needs confirm=true. Call this first to create or pick the project, then gripforge_gamekit_installed (existing project) or gripforge_gamekit_install. 0 credits.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['action'], 'properties': {'kits': {'type': 'object', 'description': 'create: explicit kit toggles { "vehicle.driveable": true, â\x80¦ } on top of the preset. Unchecking a required kit fails with toggle_requires. The default interface kits (ui.menu, input.remap, settings.graphics) are included unless set to false here â\x80\x94 only when the user asked for it.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'boolean'}}, 'name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'create: project name.'}, 'action': {'enum': ['list', 'create', 'get', 'bind', 'data', 'delete'], 'type': 'string', 'description': 'list | create | get | bind | data | delete.'}, 'preset': {'type': 'string', 'maxLength': 80, 'description': 'create: preset id whose default kits are installed (gripforge_gamekit_search returns presets).'}, 'remove': {'type': 'array', 'items': {'type': 'string', 'maxLength': 120}, 'maxItems': 500, 'description': 'data: document ids to remove.'}, 'target': {'enum': ['web', 'godot', 'unity', 'unreal'], 'type': 'string', 'description': 'create: pass the confirmed engine explicitly (Three.js=web). Ask the user to choose Unity / Godot / Unreal Engine / Three.js before creating if unknown. API default web is for compatibility, not an engine choice.'}, 'confirm': {'type': 'boolean', 'description': 'delete: must be true. The project, its revisions and data are removed.'}, 'replace': {'type': 'boolean', 'description': 'data: true to replace the whole collection with documents.'}, 'bindings': {'type': 'object', 'description': 'bind: { slot: lib_â\x80¦ | null } â\x80\x94 Library item per asset slot declared by the installed kits, null clears.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'documents': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'maxItems': 500, 'description': 'data: documents to upsert (each with its id), validated against the kit schema.'}, 'collection': {'type': 'string', 'maxLength': 80, 'description': 'data: collection name declared by an installed kit (e.g. missions, npcs, zones).'}, 'project_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game Kit project id (gkp_â\x80¦). Required for get, bind, data and delete.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_generate
Generate a game asset — one door for every mesh kind
CREATE any mesh asset and save it to Library — the canonical generation door. kind decides the pipeline: character/enemy/boss are auto-rigged (pass concept_item or file_url for image-to-3D; otherwise text-to-3D), weapon and prop are direct text-to-model (no rig, no concept step). The workspace Style DNA is applied to the prompt. If the look may already exist, call gripforge_style_kit FIRST. Costs 10 credits. Returns a persistent job_id immediately; poll gripforge_generation_read for progress and the Library/Studio result. Closing this call does not cancel it.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt', 'kind'], 'properties': {'kind': {'enum': ['character', 'enemy', 'boss', 'weapon', 'prop'], 'type': 'string', 'description': 'What to forge â\x80\x94 rigged (character/enemy/boss) or static mesh (weapon/prop)'}, 'name': {'type': 'string', 'maxLength': 160, 'description': 'Library item name (default: the prompt)'}, 'prompt': {'type': 'string', 'maxLength': 600, 'minLength': 3, 'description': 'Description of the asset.'}, 'file_url': {'type': 'string', 'description': 'https URL of a concept or T-pose image. Image-to-3D.'}, 'provider': {'enum': ['tripo', 'meshy'], 'type': 'string', 'description': 'Generation provider (default tripo; meshy when concept_item)'}, 'polycount': {'type': 'number', 'description': 'Target triangles.'}, 'underwear': {'type': 'boolean', 'description': 'Characters: false = keep the described outfit'}, 'concept_item': {'type': 'string', 'description': 'Library concept / T-pose id (lib_â\x80¦). Image-to-3D â\x80\x94 not text-to-3D.'}, 'idempotency_key': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:-]{8,160}$', 'description': 'Stable key per asset role. Reuse after an uncertain response to avoid duplicate paid jobs.'}}}
输出模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'job': {'type': 'string'}, 'item': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'stage': {'type': 'string'}, 'job_id': {'type': 'string'}, 'status': {'type': 'string'}, 'provider': {'type': 'string'}, 'status_url': {'type': 'string'}, 'studio_url': {'type': 'string'}, 'library_url': {'type': 'string'}}, 'additionalProperties': {}}
gripforge_generate_building
Generate a building
Reusable plan → artistic concept → isolated reference views → review → Meshy build workflow. Generate 1–4 coherent images through OpenAI (1536×1024 high quality, default) or Imagine (2K), saved as private Library drafts; alternate views reference one master. Separate explicit budgets for concepts and 3D. Accepts text, owned single/multiple concept views or an owned static GLB. Meshy PBR/geometry quality, bounded geometry and uniform metric fit. Durable jobs return workspace links; poll generation_read, cancel/retry preserves finished steps. Review images before building and the real Studio render before publishing. No guaranteed interiors, collisions or LODs. Never substitutes procedural geometry or automatically replaces a game asset.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['recipe'], 'properties': {'stage': {'enum': ['plan', 'concept', 'build'], 'type': 'string', 'description': 'plan is free: exact prompts and separate image/3D quotes. concept creates reviewable workspace images. First review artistic scene, then isolated views of the SAME building, then build 3D from chosen isolated references.'}, 'budget': {'type': 'object', 'properties': {'usd': {'type': 'number', 'minimum': 0}, 'credits': {'type': 'number', 'minimum': 0}}, 'description': 'Required for paid concept/build: maximum GripForge credits OR subscription USD accepted. Use the quote funding currency: insufficient AI allowance falls back to GripForge credits for the whole new job, never both. Use plan.concept_quote for images, plan.quote for Meshy. Provider credits are separate.', 'additionalProperties': False}, 'recipe': {'type': 'object', 'required': ['prompt'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_-]{0,47}$'}, 'use': {'enum': ['residential', 'retail', 'office', 'industrial', 'mixed'], 'type': 'string'}, 'name': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'roof': {'enum': ['flat', 'pitched'], 'type': 'string'}, 'style': {'enum': ['realistic', 'stylized', 'lowpoly', 'handpainted'], 'type': 'string'}, 'facade': {'type': 'string', 'maxLength': 120}, 'floors': {'type': 'integer', 'maximum': 30, 'minimum': 1}, 'prompt': {'type': 'string', 'maxLength': 300, 'minLength': 3}, 'source': {'type': 'object', 'required': ['assetId', 'revisionId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'fileRole': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}}, 'description': 'Reuse an owned static GLB revision instead of paying for this building. The source is never modified.', 'additionalProperties': False}, 'concept': {'type': 'object', 'required': ['assetId', 'revisionId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'fileRole': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}}, 'description': 'Owned PNG/JPEG/WebP revision for Meshy image-to-3D. At most 12 MiB. Mutually exclusive with source.', 'additionalProperties': False}, 'concepts': {'type': 'array', 'items': {'type': 'object', 'required': ['assetId', 'revisionId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'fileRole': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}}, 'additionalProperties': False}, 'maxItems': 4, 'minItems': 1, 'description': 'Coherent views of ONE building, front first, for Meshy multi-image-to-3D. Exclusive with concept/source. Review coherence before building.'}, 'polycount': {'type': 'integer', 'maximum': 80000, 'minimum': 4000}, 'dimensions': {'type': 'object', 'properties': {'depth': {'type': 'number', 'maximum': 100, 'minimum': 3}, 'width': {'type': 'number', 'maximum': 100, 'minimum': 3}, 'height': {'type': 'number', 'maximum': 150, 'minimum': 3}}, 'description': 'Maximum footprint and height in metres. Uniform fit preserves proportions; actual dimensions are returned.', 'additionalProperties': False}, 'meshQuality': {'type': 'object', 'properties': {'texture': {'enum': ['2k', '4k', '8k'], 'type': 'string'}, 'geometry': {'enum': ['standard', '2k', '4k'], 'type': 'string'}}, 'description': 'Meshy 7.1 quality. Defaults standard geometry and 2K PBR. Multi-image supports standard/2k geometry only. Texture resolution is preserved during optimization. Read the updated quote.', 'additionalProperties': False}}, 'additionalProperties': False}, 'workspace_id': {'type': 'string', 'maxLength': 100}, 'concept_views': {'type': 'array', 'items': {'enum': ['front_right', 'front_left', 'rear_right', 'rear_left'], 'type': 'string'}, 'maxItems': 4, 'minItems': 1, 'description': 'Unique views starting with front_right. Default one view for scene, three for isolated. Alternate views edit the SAME master. recipe.concept reuses an existing master; concept_reference guides a NEW master.'}, 'idempotency_key': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:-]{8,160}$'}, 'concept_provider': {'enum': ['openai', 'xai'], 'type': 'string', 'description': 'Default openai (GPT Image 2.5 Sunburst, high quality). xai explicitly selects Imagine. Provider is pinned in the durable job; never silently falls back. Read the provider-specific concept_quote.'}, 'concept_reference': {'type': 'object', 'required': ['assetId', 'revisionId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'fileRole': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}}, 'description': 'Owned artistic reference to EDIT into new scene/isolated views. Distinct from recipe.concept, which reuses an existing front view without generation. Exclusive with recipe.concept/concepts/source and stage=build.', 'additionalProperties': False}, 'concept_presentation': {'enum': ['scene', 'isolated'], 'type': 'string', 'description': 'Default scene: artistic concept in its neighbourhood preserving the user atmosphere and lighting. isolated: technical views of the SAME building for Meshy. Keep rich architectural detail in both.'}}}
gripforge_generate_character
Generate a ready-to-use character
CREATE a Mixamo T-pose auto-rigged character, enemy or boss and save it to Library. NEVER describe a handheld weapon, staff or shield in the prompt: characters and enemies are forged empty-handed (the forge enforces it); make the weapon apart with gripforge_generate (kind=weapon) and put it in the hand with gripforge_attach. polycount is honoured (default 8000; keep it at or under 10000 for a mobile game).To sculpt from a picture (image-to-3D): pass concept_item (lib_… from gripforge_concept_correct / character_concepts) or file_url. Without an image this is text-to-3D. If the look may already be in the locker, call gripforge_style_kit FIRST. For knives/guns use gripforge_generate_weapon. Alias of gripforge_generate (the canonical door). Costs 10 credits. Returns a persistent job_id immediately; poll gripforge_generation_read. Closing this call does not cancel it.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'kind': {'enum': ['character', 'enemy', 'boss'], 'type': 'string', 'description': 'character | enemy | boss (boss â\x86\x92 enemy + meta.boss)'}, 'name': {'type': 'string', 'maxLength': 160, 'description': 'Library item name (default: the prompt)'}, 'prompt': {'type': 'string', 'maxLength': 600, 'minLength': 3, 'description': 'Description. "Devil May Cry like enemy" â\x86\x92 tagged devil-may-cry, kind=enemy.'}, 'file_url': {'type': 'string', 'description': 'https URL of a concept or T-pose image. Image-to-3D.'}, 'provider': {'enum': ['tripo', 'meshy'], 'type': 'string', 'description': 'Default tripo. Forced meshy when concept_item / file_url is set.'}, 'polycount': {'type': 'number', 'description': 'Target triangles. Meshy characters default 8000 (low-poly FPS).'}, 'underwear': {'type': 'boolean', 'description': 'false = keep the described outfit. Implied false when an image is passed.'}, 'concept_item': {'type': 'string', 'description': 'Library concept / T-pose sheet id (lib_â\x80¦). Image-to-3D from that picture â\x80\x94 not text-to-3D.'}, 'idempotency_key': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:-]{8,160}$', 'description': 'Stable key per asset role. Reuse after an uncertain response to avoid duplicate paid jobs.'}}}
输出模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'job': {'type': 'string'}, 'item': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'stage': {'type': 'string'}, 'job_id': {'type': 'string'}, 'status': {'type': 'string'}, 'provider': {'type': 'string'}, 'status_url': {'type': 'string'}, 'studio_url': {'type': 'string'}, 'library_url': {'type': 'string'}}, 'additionalProperties': {}}
gripforge_generate_district
Generate a district
Plan then build a straight-street district from 1–8 distinct Meshy buildings, each manufactured once and reused as separate editable instances. Includes road, pavements, spawn, daylight and camera in the shared Map SceneDocument. Optional owned PBR road/pavement maps; otherwise simple solid surfaces. Plan returns layout, provider-credit count and account quote without spending. Build requires a budget and returns a persistent job, then Map Studio link. Private work version requiring visual review; no automatic Community publication or game replacement.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['recipe'], 'properties': {'stage': {'enum': ['plan', 'build'], 'type': 'string', 'description': 'Default plan is free and does not generate. Read its quote, then explicitly build.'}, 'budget': {'type': 'object', 'properties': {'usd': {'type': 'number', 'minimum': 0}, 'credits': {'type': 'number', 'minimum': 0}}, 'description': 'Required for paid concept/build: maximum GripForge credits OR subscription USD accepted. Use the quote funding currency: insufficient AI allowance falls back to GripForge credits for the whole new job, never both. Use plan.concept_quote for images, plan.quote for Meshy. Provider credits are separate.', 'additionalProperties': False}, 'recipe': {'type': 'object', 'required': ['buildings'], 'properties': {'gap': {'type': 'number', 'maximum': 30, 'minimum': 1}, 'name': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'version': {'type': 'number', 'const': 1}, 'buildings': {'type': 'array', 'items': {'type': 'object', 'required': ['prompt'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_-]{0,47}$'}, 'use': {'enum': ['residential', 'retail', 'office', 'industrial', 'mixed'], 'type': 'string'}, 'name': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'roof': {'enum': ['flat', 'pitched'], 'type': 'string'}, 'style': {'enum': ['realistic', 'stylized', 'lowpoly', 'handpainted'], 'type': 'string'}, 'facade': {'type': 'string', 'maxLength': 120}, 'floors': {'type': 'integer', 'maximum': 30, 'minimum': 1}, 'prompt': {'type': 'string', 'maxLength': 300, 'minLength': 3}, 'source': {'type': 'object', 'required': ['assetId', 'revisionId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'fileRole': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}}, 'description': 'Reuse an owned static GLB revision instead of paying for this building. The source is never modified.', 'additionalProperties': False}, 'concept': {'type': 'object', 'required': ['assetId', 'revisionId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'fileRole': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}}, 'description': 'Owned PNG/JPEG/WebP revision for Meshy image-to-3D. At most 12 MiB. Mutually exclusive with source.', 'additionalProperties': False}, 'concepts': {'type': 'array', 'items': {'type': 'object', 'required': ['assetId', 'revisionId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'fileRole': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}}, 'additionalProperties': False}, 'maxItems': 4, 'minItems': 1, 'description': 'Coherent views of ONE building, front first, for Meshy multi-image-to-3D. Exclusive with concept/source. Review coherence before building.'}, 'polycount': {'type': 'integer', 'maximum': 80000, 'minimum': 4000}, 'dimensions': {'type': 'object', 'properties': {'depth': {'type': 'number', 'maximum': 100, 'minimum': 3}, 'width': {'type': 'number', 'maximum': 100, 'minimum': 3}, 'height': {'type': 'number', 'maximum': 150, 'minimum': 3}}, 'description': 'Maximum footprint and height in metres. Uniform fit preserves proportions; actual dimensions are returned.', 'additionalProperties': False}, 'meshQuality': {'type': 'object', 'properties': {'texture': {'enum': ['2k', '4k', '8k'], 'type': 'string'}, 'geometry': {'enum': ['standard', '2k', '4k'], 'type': 'string'}}, 'description': 'Meshy 7.1 quality. Defaults standard geometry and 2K PBR. Multi-image supports standard/2k geometry only. Texture resolution is preserved during optimization. Read the updated quote.', 'additionalProperties': False}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 1, 'description': 'Unique building definitions with distinct ids. Each new model is manufactured once.'}, 'materials': {'type': 'object', 'properties': {'road': {'type': 'object', 'description': 'SceneMaterialOverride: color, roughness, metalness, map/normalMap/roughnessMap/metalnessMap as owned immutable SceneAssetRef, repeat:[u,v]. Validated by the shared Scene Engine.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'sidewalk': {'type': 'object', 'description': 'SceneMaterialOverride: color, roughness, metalness, map/normalMap/roughnessMap/metalnessMap as owned immutable SceneAssetRef, repeat:[u,v]. Validated by the shared Scene Engine.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'additionalProperties': False}, 'repetitions': {'type': 'integer', 'maximum': 4, 'minimum': 1, 'description': 'Instances per definition, without additional model generation cost.'}, 'streetWidth': {'type': 'number', 'maximum': 30, 'minimum': 6}, 'sidewalkWidth': {'type': 'number', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, 'workspace_id': {'type': 'string', 'maxLength': 100}, 'idempotency_key': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:-]{8,160}$'}}}
gripforge_generate_flexible_weapon
Generate an articulated flexible weapon
Persistent concept → isolated handle/segment references → Meshy PBR components → FlexibleChain XPBD → Blender assembly/rig → actual GripForge renderer review. Read flexible_weapon_schema first. recipe stage=concept returns an image before 3D; build can reuse that concept and owned pinned components. Up to 12 existing source clips or sampled motions; character choreography is not generated by this tool. Returns job_id immediately; poll generation_read for weapon GLB, Blender source, physics reports, separate character/weapon review scene and Studio links. Max 23 credits when all art is new; reused components are free. Cancel/retry retains successful provider and fabrication steps. Always private work: no automatic replacement, promotion or Community publication.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['recipe'], 'properties': {'recipe': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_generate_prop
Generate a prop (Meshy)
CREATE a game-ready prop GLB (kart, crate, barrel, banana…) and save it to Library as kind=prop. Default Meshy, no T-pose, no biped rig. polycount defaults to 4000. Quoted against the shared subscription, or 10 GripForge credits if it cannot cover the complete operation. Returns a persistent job_id immediately; poll gripforge_generation_read, then download and import the completed model.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'name': {'type': 'string', 'maxLength': 160, 'description': 'Library name'}, 'prompt': {'type': 'string', 'maxLength': 600, 'minLength': 3, 'description': 'e.g. compact orange open-cockpit racing kart, isolated'}, 'subtype': {'enum': ['vehicle', 'none'], 'type': 'string', 'description': 'vehicle: made as the Vehicles prop sub-kind â\x80\x94 no grip style, nose on +Z, the four wheels split with hub pivots so it drives. Detected from the prompt (car, truck, van, kartâ\x80¦) when omitted; none opts out.'}, 'optimize': {'type': 'boolean', 'description': 'Default true; false retains the provider mesh for close-up review.'}, 'provider': {'enum': ['meshy', 'tripo'], 'type': 'string', 'description': 'Default meshy'}, 'polycount': {'type': 'number', 'description': 'Target triangles (default 4000)'}, 'meshQuality': {'type': 'object', 'required': ['geometry', 'texture'], 'properties': {'texture': {'enum': ['2k', '4k', '8k'], 'type': 'string'}, 'geometry': {'enum': ['standard', '2k', '4k'], 'type': 'string'}}, 'description': 'Meshy geometry and PBR texture quality. Requested texture resolution is retained through optimization.'}, 'concept_item': {'type': 'string', 'maxLength': 160, 'minLength': 1, 'description': 'Owned concept image in this workspace; forces Meshy image-to-3D.'}, 'idempotency_key': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:-]{8,160}$', 'description': 'Stable key per asset role. Reuse after an uncertain response to avoid duplicate paid jobs.'}}}
gripforge_generate_vehicle
Generate a vehicle as functional parts
stage=plan quotes the whole pipeline without spending. concept makes the master image. build makes isolated Meshy body, cabin, doors and wheel, then assembles independent instances with pivots, sockets and open/close GLB clips. Pinned parts can come from Meshy, Tripo or Blender; omit one source to regenerate only that role. Explicit quote budget required. Returns durable job_id; poll generation_read for editable parts and closed/open Studio scenes. Work draft only: matching seams, source orientation and open door bays need visual review. Does not automatically replace game assets. Read vehicle_schema first.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['recipe'], 'properties': {'stage': {'enum': ['plan', 'concept', 'build'], 'type': 'string', 'default': 'plan'}, 'budget': {'type': 'object', 'properties': {'usd': {'type': 'number', 'minimum': 0}, 'credits': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}}, 'recipe': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_generate_weapon
Generate a weapon (Meshy)
CREATE a game-ready weapon GLB (knife, gun, sword…) and save it to Library as kind=weapon. Default provider Meshy, no T-pose, no biped rig. polycount defaults to 4000. style=melee|gun is written to meta.style for gripforge_attach. 10 credits. Returns a persistent job_id; poll gripforge_generation_read. Do NOT write one-off Meshy scripts.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'name': {'type': 'string', 'maxLength': 160, 'description': 'Library name (default: prompt)'}, 'style': {'enum': ['melee', 'gun', 'shield', 'staff'], 'type': 'string', 'description': 'Grip style for attach (inferred if omitted)'}, 'prompt': {'type': 'string', 'maxLength': 600, 'minLength': 3, 'description': 'e.g. "CS2 default CT combat knife, silver blade, black grip"'}, 'provider': {'enum': ['meshy', 'tripo'], 'type': 'string', 'description': 'Default meshy'}, 'polycount': {'type': 'number', 'description': 'Target triangles (default 4000)'}, 'idempotency_key': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:-]{8,160}$', 'description': 'Stable key per asset role. Reuse after an uncertain response to avoid duplicate paid jobs.'}}}
输出模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'job': {'type': 'string'}, 'item': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'stage': {'type': 'string'}, 'job_id': {'type': 'string'}, 'status': {'type': 'string'}, 'provider': {'type': 'string'}, 'status_url': {'type': 'string'}, 'studio_url': {'type': 'string'}, 'library_url': {'type': 'string'}}, 'additionalProperties': {}}
gripforge_generate_weapon_catalog
Generate a weapon catalogue
Plan then manufacture 1–64 original static weapon models using the existing Meshy PBR pipeline. plan is free and returns an exact aggregate quote and plan_hash. build requires that hash, an explicit budget covering the quote and a stable idempotency_key. One durable job, two bounded fabrication lanes, per-weapon checkpoints and billing; cancellation/retry preserves finished work and provider task IDs. Results remain private work assets. Inspect geometry, textures and actual renderer output before publishing. Does not create attack/reload animations, grip bindings, or flexible-chain physics. Poll gripforge_generation_read; result.items contains Library IDs and Studio links.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['stage', 'entries'], 'properties': {'stage': {'enum': ['plan', 'build'], 'type': 'string'}, 'budget': {'type': 'object', 'properties': {'usd': {'type': 'number', 'minimum': 0}, 'credits': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, 'entries': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name', 'prompt', 'subtype'], 'properties': {'key': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9_-]{0,47}$'}, 'name': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'tags': {'type': 'array', 'items': {'type': 'string', 'maxLength': 60, 'minLength': 1}, 'maxItems': 16}, 'style': {'enum': ['gun', 'melee', 'shield', 'staff'], 'type': 'string'}, 'prompt': {'type': 'string', 'maxLength': 600, 'minLength': 3}, 'subtype': {'type': 'string', 'maxLength': 60, 'minLength': 1}, 'polycount': {'type': 'integer', 'maximum': 20000, 'minimum': 500}}, 'additionalProperties': False}, 'maxItems': 64, 'minItems': 1}, 'plan_hash': {'type': 'string', 'pattern': '^[a-f0-9]{64}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Authorized workspace; defaults to the connected workspace.'}, 'idempotency_key': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:-]{8,160}$'}}}
gripforge_generation_cancel
Cancel generation
Request worker cancellation while retaining completed steps and artifacts. Closing a page alone does not cancel a job.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_generation_list
List persistent generation jobs
List workspace jobs. Jobs and completed steps survive closing the studio or restarting the web server and worker.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_generation_quote
Estimate generation usage before spending
Free quote for a model, concept, texture, rig or animation. Reports the account funding mode, available balance and estimated operation cost. A subscription combines AI and paid asset generation in one monthly limit without also charging generation credits. Quote every missing role, propose the plan, and obtain a generation budget before submitting paid jobs. Estimates cover one operation, not the full concept/rig/review pipeline.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['kind'], 'properties': {'kind': {'enum': ['model', 'concept', 'texture', 'rig', 'animation'], 'type': 'string'}, 'count': {'type': 'integer', 'maximum': 20, 'minimum': 1}, 'provider': {'enum': ['meshy', 'tripo', 'xai', 'openai'], 'type': 'string'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Authorized workspace; defaults to the connected workspace.'}}}
gripforge_generation_read
Read generation progress and result
Poll a job returned by a generation tool. Includes durable steps, progress, failure/retry state and the resulting work revision with a Studio link. include_preview returns saved map/building concept images (at most 4). Set preview_view to return one chosen view. Concepts are generated illustrations, not verified 3D renders. Success does not mean visual approval or promotion.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'preview_view': {'enum': ['overview', 'top_down', 'entrance', 'objective', 'front_right', 'front_left', 'rear_right', 'rear_left'], 'type': 'string'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'include_preview': {'type': 'boolean'}}}
gripforge_generation_retry
Retry interrupted generation
Retry a failed or cancelled job, reusing completed steps. An unconfirmed interrupted provider call may be executed again when explicitly retried.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_hitbox
Gameplay hitboxes
Body capsules (head/torso/limbs) plus weapons[] — one reach capsule per gf_prop_ wrapper on a loadout/armed bind. Pass id of a loadout GLB (or character_id / attach_id). 0 credits. Use weapons[] not the single weapon field for dual-wield.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'description': 'Library id of a loadout / bind / character (lib_â\x80¦)'}, 'attach_id': {'type': 'string', 'description': 'Library armed bind id'}, 'character_id': {'type': 'string', 'description': 'Library character/enemy id'}}}
gripforge_hud
Generate a survivor HUD (json + PNG + tscn + snippets)
Generate a ready-to-drop survivor HUD: hud.json (layout/anchors, no pixels), original GripForge cartoon PNGs (hearts full/half/empty, portrait frame, currency chips, empty hex slot), a Godot 4 .tscn (Control with named nodes Health/XP/Portrait/Currencies/Minimap), and Three.js / Unity / Unreal snippets. 1 credit per successful generate. CONSUMER RECIPE — (1) call gripforge_hud; (2) write the PNGs (download the asset URLs) + hud.json (+ hud.tscn) into the game repo, same folder; (3) Godot: instance the tscn, add_child, then get_node("Health").set_health(current, max) and set XP.value; (4) Unreal: the GripForgeHUD plugin must already be in the project (unreal_plugin_url) — point UGFHudWidget::CreateFromFolder at the folder and call BindHealth on your health component. DO NOT redraw the hearts. DO NOT open a UI editor. This hosted endpoint returns file CONTENTS + URLs; pass out_dir only with the npm MCP package, which writes the files for you.
可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'preset': {'type': 'string', 'const': 'survivor', 'description': 'v1: survivor only (default)'}, 'minimap': {'type': 'boolean', 'description': 'default false'}, 'out_dir': {'type': 'string', 'description': 'Suggested folder (hosted returns contents only; npm writes)'}, 'portrait': {'type': 'boolean', 'description': 'default true'}, 'currencies': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'default ["gem","mushroom","drop"] â\x80\x94 unknown ids get the empty hex chip'}, 'health_max': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'default 5'}, 'health_type': {'enum': ['hearts', 'bar'], 'type': 'string', 'description': 'default hearts'}, 'health_style': {'type': 'string', 'description': 'skin of the health display. For hearts: round, pixel, shield, star, orb, potion, skull, croix, goutte, eclair, feuille, losange, soleil, lune, patte, os, flamme, flocon, trefle, couronne, anneau, pomme, viande, bonbon, oeil, plume, gland, cloche, poing, aile, hexplaque, rune, bougie, champi, bouclier_pique, coeur_gel, coeur_or, coeur_ombre, batterie, retro. For bar: ronde, segments, scifi, pixel_bar, fantasy, tube, fleches, cellules_hex, oblique, double, fine, crantee, crochets, capsule, rivets, retro_rouge, retro_vert, retro_bleu, retro_jaune, gothique, scifi_energie, cartoon_aventure, horreur. Also accepts "custom:<slug>" from gripforge_hud_bar. Default: round (hearts) / ronde (bar).'}}}
输出模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['hud', 'files', 'assets', 'unreal_plugin_url', 'preview_url'], 'properties': {'hud': {'type': 'object', 'description': 'hud.json v1 â\x80\x94 layout, anchors, slot ids. No pixels.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'files': {'type': 'object', 'description': 'File contents keyed by filename (hud.json, hud.tscn, engine snippets)', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'assets': {'type': 'object', 'description': 'PNG URLs (GripForge original cartoon set)', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'preview_url': {'type': 'string', 'description': 'Studio live preview matching the json'}, 'unreal_plugin_url': {'type': 'string', 'description': 'Zip of the GripForgeHUD runtime plugin (UE 5.3+)'}}, 'additionalProperties': False}
gripforge_hud_bar
Forge a custom health bar style
Forge an ORIGINAL themed health-bar style: an image model draws the ornate empty frame (transparent background), the inner trough is located pixel-precisely, and a thematic gradient fill is composed to match — returns an aligned frame+fill PNG pair, same contract as the built-in gripforge_hud bar styles. Describe a THEME (e.g. "gothic demon-hunter, baroque metal, horn ornaments"), never a specific game — styles of a genre, not copies. 2 credits. RECIPE: download frame_url + fill_url next to your hud.json ; Godot: TextureProgressBar (texture_under=frame, texture_progress=fill, custom_minimum_size=size) ; Three/Unity: frame behind, fill cropped horizontally to the health percent. Generation has model variance — if the trough is not found, retry with a clearer theme.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['theme'], 'properties': {'name': {'type': 'string', 'maxLength': 60, 'description': 'Slug for the saved Library items'}, 'theme': {'type': 'string', 'maxLength': 300, 'minLength': 3, 'description': 'Visual theme of the frame (genre, materials, ornaments)'}, 'colors': {'type': 'array', 'items': {'type': 'string', 'pattern': '^#[0-9a-fA-F]{6}$'}, 'maxItems': 3, 'minItems': 3, 'description': 'Fill gradient [light, mid, dark] hex â\x80\x94 default blood red'}}}
输出模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['frame_url', 'fill_url', 'size', 'hud_snippet'], 'properties': {'size': {'type': 'object', 'required': ['w', 'h'], 'properties': {'h': {'type': 'number'}, 'w': {'type': 'number'}}, 'additionalProperties': False}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'fill_url': {'type': 'string', 'description': 'PNG fill (full-width, engine crops) download URL'}, 'frame_url': {'type': 'string', 'description': 'PNG frame (empty ornate bar) download URL'}, 'hud_snippet': {'type': 'object', 'description': 'Ready-to-paste hud.json health block', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'additionalProperties': False}
gripforge_hud_import
HUD Studio — import a game HUD from the project, list and read the workspace HUDs
Not the survivor generator (that is gripforge_hud): this one READS an existing HUD. action=import {text, filename?, name?} → reads the HUD of the project and saves it as a HUD document of the workspace; Pass screenshot (a capture of the screen while the game runs) so My HUDs shows the real thing; action shot attaches one to a HUD imported earlier.returns the studio URL to open it. `text` is the engine file as-is: a Godot .tscn scene, a Unity .uxml (UI Toolkit) or a .unity / .prefab (RectTransforms), the Unreal UMG designer clipboard (select the widgets, Ctrl+C — .uasset files are binary), or a GripForge hud.json / hud.v2.json. Read the file yourself and pass its content; `filename` helps detect the format. Controls are recognised by name (health, mana, minimap, ammo, quest…) and type, placed on nine anchors; the report lists what was created and skipped. action=list → HUDs of the workspace. action=get {id} → one HUD document (hud_… id).
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'get / shot: the HUD (hud_â\x80¦); import: re-import into that existing HUD â\x80\x94 its name, level, role and capture stay, its elements are replaced'}, 'name': {'type': 'string', 'maxLength': 120, 'description': 'import: name of the HUD in the studio'}, 'role': {'enum': ['screen', 'widget'], 'type': 'string', 'description': 'import: "screen" (a menu, a loading screen, the in-game HUD, a page) or "widget" (a component: a bar, a minimap, a button, a damage number); the studio lists a level\'s screens first and its widgets apart. Inferred from the footprint when omitted: a screen spans â\x89¥ 45 % of the width or â\x89¥ 60 % of the height'}, 'text': {'type': 'string', 'maxLength': 6291456, 'description': 'import: the engine file content'}, 'level': {'type': 'string', 'maxLength': 80, 'description': "import: the level / map where this screen shows (MainMenu, Desert_Castleâ\x80¦) â\x80\x94 the studio groups a project's screens by level; the Unreal bridge /hud/list gives it from the asset registry (widget â\x86\x90 blueprints â\x86\x90 map), otherwise trace which map references the screen"}, 'action': {'enum': ['import', 'list', 'get', 'shot'], 'type': 'string', 'description': 'import a screen · list the workspace HUDs · get one · shot = attach a capture of the screen in play to an existing HUD (id + screenshot)'}, 'embeds': {'type': 'object', 'description': 'import (Unreal): the nested Widget Blueprints this screen places (asset name â\x86\x92 their T3D export, e.g. { WBP_Menu: "Begin Objectâ\x80¦" }) so their buttons, bars and texts become elements of the screen instead of an empty box; the Unreal bridge /hud/get returns them as embeds', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'project': {'type': 'string', 'maxLength': 80, 'description': 'import: game project name (e.g. the .uproject / project folder) â\x80\x94 the studio groups HUDs by project'}, 'filename': {'type': 'string', 'maxLength': 200, 'description': 'import: original file name (hud.tscn, HUD.prefab, GameHud.uxml, umg.txtâ\x80¦)'}, 'pictures': {'type': 'object', 'description': "import: texture name â\x86\x92 base64 PNG/JPEG of that picture (â\x89¤ 6 MB each, 60 max): stored in the Library and linked to the screen's images, buttons and bars â\x80\x94 one call gives the screen its real art", 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'textures': {'type': 'object', 'description': "import: texture name â\x86\x92 lib_â\x80¦ id of that picture pushed with gripforge_library_push (kind hud); links the screen's images, buttons and bars to their real art", 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'screenshot': {'type': 'string', 'description': 'import / shot: base64 PNG or JPEG (â\x89¤ 16 MB, data URL accepted; stored packed to 1080p JPEG) of this screen captured while the game runs â\x80\x94 becomes its thumbnail in My HUDs and the backdrop of the editor preview. Capture it in the engine: Unreal bridge GET http://127.0.0.1:8439/shot?play=1&level=/Game/Maps/MainMenu&wait=5 (opens that map, starts Play In Editor, captures with the UI, stops; without play=1 it captures the editor viewport), or an Unreal MCP capture_viewport during PIE; Godot get_viewport().get_texture().get_image().save_png(); Unity ScreenCapture.CaptureScreenshot'}}}
gripforge_input_kit
Input maps and optional third-person character facing
Godot InputMap for an FPS: move_forward/back/left/right bound to WASD AND arrow keys, plus jump/crouch/fire/reload/buy. Write res://gripforge/input.json and autoload GfInput (snippet_godot). Player still uses Input.is_action_pressed("move_*"). Optional third_person=true adds portable character-facing JavaScript and a Three.js adapter: movement-facing, independent camera, aim/fire/build facing. Orientation only, not a physics controller. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "fps" or "counter-strike dust2"'}, 'third_person': {'type': 'boolean', 'description': 'Include character-facing JavaScript and Three.js usage (default false; existing input map unchanged).'}}}
gripforge_inspect
Inspect an asset: metrics, QA checks, multi-angle sheet
THE FEEDBACK LOOP: call this after every generate/attach/rig to SEE and VERIFY what you made, before building on top of it. Deterministic, free, repeatable. Returns (1) a structured report — kind guess, triangles/vertices, materials+textures, skeleton (bones, finger bones per hand, cape grid), animations, size in metres — and (2) QA checks with ok/warn/fail + why: plausible scale, poly budget, normals/UVs, rig skinned, strict T-pose arms, five-finger bones, feet on ground. Also returns a multi-angle render sheet (front/right/back/left by default) so you can look at the asset. Fix warns/fails (regenerate, rest_pose, retarget…) then inspect again.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Library id (lib_â\x80¦) of a GLB'}, 'sheet': {'type': 'boolean', 'description': 'include the multi-angle PNG (default true)'}, 'angles': {'type': 'array', 'items': {'type': 'number'}, 'maxItems': 6, 'description': 'yaw angles in degrees (default [0,90,180,270])'}}}
gripforge_joystick_kit
Ready-to-use joystick · Unreal / Godot / Unity / Three.js
Generate input.joystick source files and installation instructions: touch + mouse, independent dual sticks, radial deadzone, continuous holding and release/focus reset. Unreal runtime Pawn component, Godot CanvasLayer scene, Unity UI component, Three.js DOM controls + GripForge input.actions bridge. Feeds the existing movement controller rather than replacing physics, collision or networking. Returns files with relative path/content; the agent writes them into the target project and compiles/tests there. Does not install automatically, modify project settings or claim runtime validation. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['target'], 'properties': {'accent': {'type': 'string', 'default': '#ff681f', 'pattern': '^#[\\da-f]{6}$', 'description': 'Thumb color, six-digit hexadecimal RGB.'}, 'layout': {'enum': ['move', 'dual'], 'type': 'string', 'default': 'dual', 'description': 'One movement stick, or independent movement + camera sticks.'}, 'radius': {'type': 'number', 'default': 72, 'maximum': 160, 'minimum': 32, 'description': 'Stick radius in CSS/UI logical pixels, before engine DPI scaling.'}, 'target': {'enum': ['threejs', 'godot', 'unity', 'unreal', 'all'], 'type': 'string', 'description': 'Engine delivery. all returns each of the four source kits.'}, 'deadzone': {'type': 'number', 'default': 0.15, 'maximum': 0.5, 'minimum': 0, 'description': 'Radial deadzone, continuously rescaled to a unit disc.'}}}
gripforge_kit
Game Kits — read and compose game engines (manifest + rules)
A game kit IS an engine: its manifest carries asset slots AND GameRules — the genre as a document (movement, camera, world, objective, entities, pickups, ai, hud, audio). action=list → kits of the workspace. action=get {id} → manifest + rules (lib_… id). action=create {style?, name?, rules?, slots?} → new kit, rules default to the style then merge yours. action=patch {id, rules?, slots?, prompts?, name?} → partial update; rules merge section by section, a section set to null resets it. Slot refs inside rules must point at slot ids of the kit (unknown refs are dropped, the renderer falls back to procedural). Compose a NEW genre by writing rules: e.g. movement vehicle-boost + world arena-ring + objective knockout = sumo cars, no code.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['action'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'description': 'kit id (lib_â\x80¦) â\x80\x94 get/patch'}, 'name': {'type': 'string', 'maxLength': 160}, 'rules': {'anyOf': [{'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'GameRules document or partial patch'}, 'slots': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'itemId'], 'properties': {'id': {'type': 'string', 'maxLength': 40}, 'itemId': {'anyOf': [{'type': 'string', 'maxLength': 64}, {'type': 'null'}]}}}, 'description': 'slot assignments'}, 'style': {'type': 'string', 'maxLength': 64, 'description': 'create: preset style (arena-car, mario-kart, customâ\x80¦)'}, 'action': {'enum': ['list', 'get', 'create', 'patch'], 'type': 'string', 'description': 'what to do'}, 'prompts': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string', 'maxLength': 4000}}}}
gripforge_level
Plan a playable level from a prompt
Plan a playable level from a prompt (0 credits): rooms placed in metres (entrance, combat rooms, key/lock, boss room, treasure, secret), connections, critical path, shortcuts, and gameplay spawns (player/packs/boss/rewards). Same seed → same level. Pair with gripforge_scene_kit for dressing props.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'seed': {'type': 'number'}, 'floors': {'type': 'number'}, 'prompt': {'type': 'string', 'description': 'e.g. "gothic castle dungeon, 3 combat rooms, one boss"'}, 'combat_rooms': {'type': 'number'}, 'optional_branches': {'type': 'number'}}}
gripforge_library_get
Get Library item
Get one Library item (metadata + signed file_url). VFX items also return studio_url to open the editable effect in GripForge, and workspace_id. Pull bytes into a repo with the npm package.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Library id (lib_â\x80¦)'}}}
gripforge_library_list
List Library
List items in the GripForge Library locker (characters, enemies, weapons, props, textures, HUD, binds, vfx). Filter by kind and/or game style id (devil-may-cry, genshin…). Every item carries `rank` {score/100, grade A–D, reasons}: fitness for a GripForge game on the target platform. sort=rank lists the best fit first — use it to choose between candidates. Same origin as Studio — not a marketplace.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'description': 'Search name/filename/description/tags'}, 'kind': {'enum': ['character', 'fps-arms', 'enemy', 'weapon', 'equipment', 'prop', 'texture', 'skybox', 'loading', 'hud', 'button', 'bind', 'vfx', 'animation', 'audio'], 'type': 'string', 'description': 'Filter by kind'}, 'sort': {'enum': ['newest', 'rank'], 'type': 'string', 'description': 'newest (default) or rank: best fit for a GripForge game first'}, 'style': {'type': 'string', 'description': 'Game look id or alias (devil-may-cry, dmc, genshin)'}, 'target': {'enum': ['mobile', 'desktop'], 'type': 'string', 'description': 'Platform for the rank budgets (triangles, file size). Defaults to mobile.'}}}
gripforge_library_pull
Pull from Library
Return a signed same-origin file URL for a Library item you own (free). This hosted endpoint cannot write into your agent's working tree — use npx @gripforgeai/mcp gripforge_library_pull for that (that is the sync). First clone of a community asset into your locker costs 1 credit.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Library id (lib_â\x80¦)'}}}
gripforge_library_push
Push to Library
Upload a file into the Library locker from a URL (or small base64). Local paths need the npm MCP package.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['kind', 'name'], 'properties': {'kind': {'enum': ['character', 'fps-arms', 'enemy', 'weapon', 'equipment', 'prop', 'texture', 'skybox', 'loading', 'hud', 'button', 'bind', 'vfx', 'animation', 'audio'], 'type': 'string', 'description': 'Locker kind'}, 'name': {'type': 'string', 'description': 'Display name'}, 'base64': {'type': 'string', 'description': 'Raw file as base64 (small files only)'}, 'file_url': {'type': 'string', 'description': 'https URL of the file to store'}, 'filename': {'type': 'string', 'description': 'Original filename'}}}
gripforge_library_tag
Tag a Library item
Add a game look (devil-may-cry, genshin…) to tags so gripforge_style_kit can find the item. Does NOT overwrite grip style melee/gun/shield/staff — that stays on meta.style.
幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Library id (lib_â\x80¦)'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Replace tags (canonicalized). Omit to keep existing and just add style.'}, 'style': {'type': 'string', 'description': 'Game look id or alias (devil-may-cry, dmc, genshin)'}}}
gripforge_light_kit
Scene lights + fog
Moon / sun / candle point lights + fog + environment intensity for a game look, plus a Three.js snippet. 0 credits. Does not generate meshes. Pair with scene_kit placements (candle tags match candelabra xyz).
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "devil may cry like"'}}}
gripforge_loading_page
Game loading overlay
Loading overlay for a game look. Returns html/css/js (Three/web) plus engines.three | godot | unity | unreal. Title is text — do not rasterize. Overlay alone is 0 credits. Pass character_id (lib_… character/enemy/bind) to generate a cinematic 16:9 background still of that character (1 credit). No letters in the still.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "devil may cry like"'}, 'character_id': {'type': 'string', 'description': 'Library character / enemy / loadout bind id â\x80\x94 generates background still (1 credit)'}}}
gripforge_loadout
Multi-weapon loadout (attach + manifest + clips)
Build a multi-weapon character in ONE call: attaches every prop of every set onto the same rig, names each prop node gf_prop_<slug>_<l|r>, stamps glTF extras { gripforge: { prop, set, hand } } and a scene manifest { default, sets }, then retargets the standard clip pack (animate: false to skip). The engine switches weapons by toggling node visibility — the returned Three.js snippet does it. Example sets: { "sword": [{"prop_id":"lib_sword"}], "guns": [{"prop_id":"lib_gun","hand":"left","style":"gun"}, {"prop_id":"lib_gun","hand":"right","style":"gun"}] }. Credits: one attach per prop.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['character_id', 'sets'], 'properties': {'name': {'type': 'string'}, 'sets': {'type': 'object', 'description': 'set name â\x86\x92 props held in that set', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'array', 'items': {'type': 'object', 'required': ['prop_id'], 'properties': {'hand': {'enum': ['left', 'right'], 'type': 'string'}, 'style': {'enum': ['melee', 'gun', 'shield', 'staff'], 'type': 'string'}, 'prop_id': {'type': 'string'}}}}}, 'animate': {'type': 'boolean', 'description': 'Also retarget the standard clip pack (default true)'}, 'default': {'type': 'string', 'description': 'Set visible by default (first set otherwise)'}, 'archetype': {'enum': ['sword', 'claws', 'heavy', 'brawler', 'puppet'], 'type': 'string', 'description': 'Movement/strike archetype â\x80\x94 remaps the base slots (default sword)'}, 'character_id': {'type': 'string', 'description': 'Library character id (lib_â\x80¦)'}}}
gripforge_make_seamless
Make a texture tileable
Turn an image into a seamless (tileable) texture: 50% wrap offset, then the seams are cross-faded in a narrow band — the pattern is PRESERVED, nothing is generated or invented. Pass image_url (https) or texture_id (Library id, lib_…). Optional size forces a power of two (512/1024/2048), resampled before the seam fix. The result is saved in your Library as a texture and its download URL is returned. No credit consumed.
可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'band': {'type': 'number', 'maximum': 0.25, 'minimum': 0.02, 'description': 'Blend band as a fraction of the side (default 0.08)'}, 'name': {'type': 'string', 'description': 'Name for the Library item (default <source>_seamless)'}, 'size': {'type': 'number', 'description': 'Force a power-of-two side: 512, 1024, 2048â\x80¦'}, 'image_url': {'type': 'string', 'description': 'https URL of the image (PNG/JPG)'}, 'texture_id': {'type': 'string', 'description': 'Library id of a texture (lib_â\x80¦)'}}}
输出模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'width': {'type': 'number'}, 'height': {'type': 'number'}, 'file_url': {'type': 'string', 'description': 'Download URL of the seamless PNG'}, 'library_id': {'type': 'string', 'description': 'Library id of the seamless texture'}}, 'additionalProperties': False}
gripforge_map_concept
AI-drawn map layout
gpt-image-2 draws a top-down plan schematic (solid white walls on pure black) + a 3/4 aerial greybox concept render, auto-traces the plan into MapPlan wall boxes and saves both images to the Library. Reuse the traced plan with gripforge_map_plan { item } or https://gripforge.ai/map-plan?item=lib_…&greybox=1. Use when the layout should come from an image instead of the code presets. ~2 images of generation cost.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 400, 'minLength': 3, 'description': 'e.g. "moroccan desert village bomb map, tight alleys, two plazas"'}, 'extent_m': {'type': 'number', 'maximum': 300, 'minimum': 40, 'description': 'Playfield size in metres (default 110)'}, 'threshold': {'type': 'number', 'maximum': 240, 'minimum': 30, 'description': 'Wall luminance threshold (default 110)'}}}
gripforge_map_generate
Create map concept views or an editable map
Queue a persistent map job. stage=concept creates a private master overview plus optional views and stops. views: overview,top_down,entrance,objective. All additional views are conditioned on the SAME pinned master; they are illustrations, not exact 3D renders. reference is an environment screenshot for a NEW layout. To add views to an existing concept, pass source_concept instead; the master is kept unchanged and is free. One credit per new image (full new 4-view set = 4); default is overview only. Poll generation_read with include_preview=true to see the views. After the user selects the concept, submit stage=build with the returned concept and a new idempotency key. Build costs 1 credit and is the default for existing callers; legacy concept_item accepts a Library image ID, while concept pins its exact version. wizard: style realistic|stylized|lowpoly|handpainted; world open_world|closed_arena|dungeon|linear|battle_map; terrain auto|plains|desert_canyon|forest|snow|island|volcanic; size small|medium|large; boundary fixed|infinite (open edge, finite terrain); spawn single|teams; teams 2|4; boss,safeZone,extraction booleans. sources selects catalog/workspace/community props. Build uses the common Scene Engine with independent terrain, regions, paths, zones and asset instances. Cancel/retry keeps successful images and billing. No automatic visual validation, promotion or Unreal import.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt', 'wizard'], 'properties': {'seed': {'type': 'integer', 'maximum': 2147483647, 'minimum': -2147483647}, 'stage': {'enum': ['concept', 'build'], 'type': 'string'}, 'views': {'type': 'array', 'items': {'enum': ['overview', 'top_down', 'entrance', 'objective'], 'type': 'string'}, 'maxItems': 4, 'minItems': 1, 'description': 'Unique requested views, stage=concept only. The master overview is always included; omitting views keeps overview only.'}, 'prompt': {'type': 'string', 'maxLength': 4000, 'minLength': 3}, 'wizard': {'type': 'object', 'properties': {'boss': {'type': 'boolean'}, 'size': {'enum': ['small', 'medium', 'large'], 'type': 'string'}, 'spawn': {'enum': ['single', 'teams'], 'type': 'string'}, 'style': {'enum': ['realistic', 'stylized', 'lowpoly', 'handpainted'], 'type': 'string'}, 'teams': {'anyOf': [{'type': 'number', 'const': 2}, {'type': 'number', 'const': 4}]}, 'world': {'enum': ['open_world', 'closed_arena', 'dungeon', 'linear', 'battle_map'], 'type': 'string'}, 'terrain': {'enum': ['auto', 'plains', 'desert_canyon', 'forest', 'snow', 'island', 'volcanic'], 'type': 'string'}, 'boundary': {'enum': ['fixed', 'infinite'], 'type': 'string'}, 'safeZone': {'type': 'boolean'}, 'dimensions': {'type': 'object', 'required': ['width', 'depth'], 'properties': {'depth': {'type': 'number', 'maximum': 5000, 'minimum': 100}, 'width': {'type': 'number', 'maximum': 5000, 'minimum': 100}}, 'description': 'Explicit ground footprint in metres. Overrides size presets and world multipliers. Example: {width:500,depth:500}. Four-team maps require a square.'}, 'extraction': {'type': 'boolean'}}, 'additionalProperties': {}}, 'concept': {'type': 'object', 'required': ['assetId', 'revisionId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'fileRole': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}}, 'description': 'Exact chosen concept revision for stage=build. Mutually exclusive with concept_item.'}, 'sources': {'type': 'array', 'items': {'enum': ['catalog', 'workspace', 'community'], 'type': 'string'}, 'maxItems': 3, 'minItems': 1}, 'reference': {'type': 'object', 'required': ['assetId', 'revisionId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'fileRole': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}}, 'description': 'Pinned source-environment screenshot for stage=concept only. Upload to Library and pin first.'}, 'structure': {'type': 'object', 'description': 'Optional explicit gripforge.map-structures.v1 plan for stage=build: terraces with polygon/elevation and separate ramp/bridge connections. Read gripforge_map_schema for the contract. Preserves canyon voids; validates bridge clearance, endpoints and slopes. Uses durable per-piece assets and the common SceneDocument. Dimensions must match wizard.dimensions. Solo maps only; result is a structural work version requiring visual review.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'concept_item': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$', 'description': 'Legacy Library concept image ID. Prefer an immutable concept reference.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'source_concept': {'type': 'object', 'required': ['assetId', 'revisionId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'fileRole': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}}, 'description': 'Existing immutable master to add views to, stage=concept only. Mutually exclusive with reference; never regenerate this master.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_map_import
Migrate a saved terrain map
Queue a one-time materialization of an owned legacy terrain map into the shared Scene Engine. Preserve the saved spec, seed, resolution, family replacements, placed assets and removed props. Completed jobs return a canonical Studio link; source edits during migration cause a conflict rather than data loss.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_map_import_unreal
Import a portable Unreal scene
Queue a persistent import of schema gripforge.unreal-studio-import.v1. Upload files via local gripforge_map_unreal_upload_local or POST /api/v1/maps/import/unreal/assets first. document is a common SceneDocument with workspace-owned immutable assets, separate props, static foliage patches and editable terrain. source={engine:unreal,level:/Game/...,sha256,warnings:[]}. Returns job_id; poll generation_read for studio_url. Always a NEW private work scene; no overwrite, automatic validation or Community publication. 0 credits; storage quota applies.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['schema', 'document', 'source'], 'properties': {'schema': {'type': 'string', 'const': 'gripforge.unreal-studio-import.v1'}, 'source': {'type': 'object', 'required': ['engine', 'level', 'sha256', 'warnings'], 'properties': {'level': {'type': 'string', 'pattern': '^\\/Game(?:\\/[\\w-]+)+$'}, 'engine': {'type': 'string', 'const': 'unreal'}, 'sha256': {'type': 'string', 'pattern': '^[a-f0-9]{64}$'}, 'warnings': {'type': 'array', 'items': {'type': 'string', 'maxLength': 2000}, 'maxItems': 100}}}, 'document': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_map_import_unreal_schema
Unreal to Studio import contract
Read the native export → binary upload → persistent map import workflow, limits and explicit conversion caveats. Native extraction requires the local MCP and an installed Unreal editor. Hosted MCP/API consume the resulting portable SceneDocument; they cannot read your local .umap/.uasset files.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_map_look
Map still → camera + dressing
Reproduce a Dust II still WITHOUT copying pixels. Returns camera (pos/target/fov) + volume/prop/wire ids for that shot. shot=shot21a (A site), shot1a (T yard), shot5a (cat). Official URL is a LINK only — never rehost, never Meshy image-to-3d. Pair with gripforge_map_plan + map_props + map_wires. 0 credits.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'shot': {'type': 'string', 'maxLength': 80, 'minLength': 2, 'description': 'shot21a | a-site | shot1a | catwalk | URL fragment'}, 'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "dust2"'}}}
gripforge_map_plan
Top-down FPS map plan
FPS/bomb map in metres. Interprets the overhead as a 3D compound: hollow rooms, corniche/catwalk, A plat + pit, arches/windows, vaulted tunnels, T/CT, sidewalks. Preview: https://gripforge.ai/map-plan?prompt=dust2. Pair gripforge_map_props (crates/cars) + gripforge_map_wires (cables). 0 credits. Not a dungeon — use gripforge_level.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'item': {'type': 'string', 'description': 'lib_â\x80¦ traced plan from gripforge_map_concept (overrides the preset)'}, 'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "counter-strike dust2 bomb defusal"'}, 'windows': {'enum': ['shuttered', 'barred', 'none'], 'type': 'string', 'description': 'Boundary windows: volets entrouverts (default), grilles bois, ou aucune'}, 'window_density': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Share of boundary segments that get a window (default 0.25)'}}}
gripforge_map_props
FPS map callout props
Dressing for an FPS map in metres: crates (xbox, A default, goose, B big box), doors (mid, long, B), palms at T spawn, barrels, cars. Matches locker props when tagged. Empty slot → generate that prop. Pair with gripforge_map_plan. 0 credits. Preview https://gripforge.ai/map-plan?prompt=dust2
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "counter-strike dust2"'}}}
gripforge_map_reconstruct
Hierarchical FPS map reconstruction
Reconstruct an FPS map: collect official stills (HTTPS LINKS, classified by folder) → MapGraph (callouts/chokes) → footprint greybox (no props) → zone parts → camera match → dress. prompt e.g. "Reconstruct map: Counter-Strike 2 Dust II". stage=collect|graph|greybox|zone|validate|capture|dress|all. zone=LONG_A|A_SITE|…. stage=dress keeps greybox volumes and adds original tileable materials + map_props + map_wires (never Valve pixels). Preview /map-plan?prompt=dust2. Dust II is Valve IP — internal greybox benchmark, not a commercial clone. Never Meshy a screenshot, never ingest BSP/VPK. 0 credits. Greybox preview https://gripforge.ai/map-plan?prompt=dust2&greybox=1
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'zone': {'type': 'string', 'maxLength': 40, 'minLength': 2, 'description': 'LONG_A | A_SITE | CATWALK | T_SPAWN | â\x80¦'}, 'stage': {'enum': ['collect', 'graph', 'greybox', 'zone', 'validate', 'capture', 'dress', 'all'], 'type': 'string', 'description': 'collect | graph | greybox | zone | validate | capture | dress | all (default all)'}, 'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "Reconstruct map: Counter-Strike 2 Dust II"'}}}
gripforge_map_refs
Map in-game screenshot refs
Look up official in-game stills for a map (Dust II: A, B, mid, cat, tunnels, T yard). Returns HTTPS URLs (Valve CDN). Reference only — do not rehost, do not send to Meshy image-to-3d. Read materials then generate ORIGINAL locker props. live=true HEAD-checks links. 0 credits. Preview https://gripforge.ai/map-plan?prompt=dust2
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'live': {'type': 'boolean', 'description': 'HEAD-check URLs (default false)'}, 'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "dust2"'}}}
gripforge_map_schema
Map concept and generation workflow
Read the concept-first map workflow, immutable image reference format, costs and an example. Concepts, map work scenes and external engine delivery are separate steps.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_map_wires
FPS map overhead electricals
Sagging electrical cables for an FPS map: spans with two anchors (metres) + sag + strands. Not a generated mesh — GfMap tessellates cylinders (role=wire). Dust II: T yard, cat (shot5a), mid, A. Pair with gripforge_map_plan. 0 credits. Preview https://gripforge.ai/map-plan?prompt=dust2
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "counter-strike dust2"'}}}
gripforge_match_create
Create a match record
Records match.started. Does not spawn a new process. Mutating.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'map': {'type': 'string', 'maxLength': 120}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_match_get
Get a match
Read one match record.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'match_id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'match_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Match id (mtc_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_match_kit
Listen-server match contract
Party size, teams, maps, ranked flag, join-by-IP. Write res://gripforge/match.json and autoload GfMatch on top of GfNet. GripForge does not host a matchmaking queue. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. counter-strike, deathmatch, ranked 5v5'}}}
gripforge_match_list
List matches
Matches recorded for a server (SDK or API).
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_match_stop
Stop a match
Marks the match ended. Mutating.
可能执行破坏性操作
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'match_id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'match_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Match id (mtc_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_menu_kit
Menu + lobby + HUD
Main menu (host/join/quit), lobby listing connected peers where only the host starts, in-game HUD reading replicated state. Pairs with gripforge_net_kit. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. counter-strike, minimal'}}}
gripforge_navmesh
Walkable floor JSON
Walkable XZ AABB + circular holes (pillars) for a scene_kit room. JSON the engine clamps against — not a baked .navmesh. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "devil may cry like"'}}}
gripforge_net_kit
Godot ENet listen-server
GfNet autoload host/join/spawn with server-side hit validation, gf_round.gd for the round + bomb, MultiplayerSpawner/Synchronizer wiring. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. counter-strike, deathmatch, fps'}}}
gripforge_performance
Diagnose game stutter from measured frames and network delivery
Analyze a supplied game performance report, or read the latest instrumented kit capture in your authenticated workspace. Separates frame pacing, measured CPU/GPU work, render counters and stale network snapshots; returns evidence, recommendations and explicit measurement limits. Captures expire after 10 minutes or server restart. Explicit reports are not stored. Does not edit, deploy or automatically fix a game. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'kit_id': {'type': 'string', 'pattern': '^[A-Za-z0-9_.:-]+$', 'maxLength': 128, 'minLength': 1, 'description': 'Optional kit/library id to select a recent capture; omitted selects latest in your workspace.'}, 'report': {'type': 'object', 'required': ['samples'], 'properties': {'game': {'type': 'string', 'maxLength': 80}, 'samples': {'type': 'array', 'items': {'type': 'object', 'properties': {'fps': {'type': 'number', 'maximum': 1000, 'minimum': 0}, 'cpuMs': {'type': 'number', 'maximum': 60000, 'minimum': 0}, 'gpuMs': {'anyOf': [{'type': 'number', 'maximum': 60000, 'minimum': 0}, {'type': 'null'}]}, 'level': {'type': 'integer', 'maximum': 10, 'minimum': 0}, 'p95Ms': {'type': 'number', 'maximum': 60000, 'minimum': 0}, 'frameMs': {'type': 'number', 'maximum': 60000, 'minimum': 0}, 'quality': {'enum': ['auto', 'high', 'performance'], 'type': 'string'}, 'submitMs': {'type': 'number', 'maximum': 60000, 'minimum': 0}, 'drawCalls': {'type': 'integer', 'maximum': 1000000, 'minimum': 0}, 'networkMs': {'anyOf': [{'type': 'number', 'maximum': 60000, 'minimum': 0}, {'type': 'null'}]}, 'triangles': {'type': 'integer', 'maximum': 1000000000, 'minimum': 0}, 'pixelRatio': {'type': 'number', 'maximum': 8, 'minimum': 0.01}, 'snapshotAgeMs': {'type': 'number', 'maximum': 60000, 'minimum': 0}}}, 'maxItems': 120, 'minItems': 1}, 'version': {'type': 'string', 'maxLength': 80}, 'viewport': {'type': 'object', 'required': ['width', 'height'], 'properties': {'width': {'type': 'integer', 'maximum': 32768, 'minimum': 1}, 'height': {'type': 'integer', 'maximum': 32768, 'minimum': 1}}}}, 'description': 'Optional measured report with 1â\x80\x93120 sample windows. Omit to read a recent workspace capture.'}}}
gripforge_player_ban
Ban a player
HIGH IMPACT. Requires the Unity SDK. Currently returns 501. Owner only.
可能执行破坏性操作
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'player_id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'player_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Player session id (ses_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_player_get
Get a player session
Read one player session on a server.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'player_id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'player_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Player session id (ses_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_player_kick
Kick a player
Requires the Unity SDK. Currently returns 501. Mutating.
可能执行破坏性操作
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'player_id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'player_id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Player session id (ses_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_players_list
List connected players
Sessions reported by the Unity SDK. Empty until the SDK calls player.joined.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_prepare_vehicle
Prepare segmented vehicle hinges in Blender
Durable Blender preparation of an owned static segmented GLB. Map each Door_FL/FR/RL/RR or Wheel_FL/FR/RL/RR to exact mesh node names from the segmentation report. Keeps geometry placement, UVs and PBR; normalizes +Z forward/metres using yaw and length; adds hinge origins, seat/entry sockets and portable GLB open/close/preview clips. Optional hinge coordinates are in normalized vehicle metres. thickness adds an inward door shell, not a full cabin. Optional cuts provide strictly convex door outlines [forwardZ,heightY] and depth [near,far] measured from the centre on that side, in normalized metres. Blender cuts those explicit profiles while interpolating UVs. Does not infer outlines or guarantee clearance. Returns job_id, new private work GLB, Blender source and animated Studio review link. 0 credits; storage applies. Inspect before replacement.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['source'], 'properties': {'yaw': {'type': 'number', 'maximum': 180, 'minimum': -180}, 'cuts': {'type': 'array', 'items': {'type': 'object', 'required': ['role', 'outline', 'depth'], 'properties': {'role': {'enum': ['Door_FL', 'Door_FR', 'Door_RL', 'Door_RR'], 'type': 'string'}, 'depth': {'type': 'array', 'prefixItems': [{'type': 'number'}, {'type': 'number'}]}, 'outline': {'type': 'array', 'items': {'type': 'array', 'prefixItems': [{'type': 'number'}, {'type': 'number'}]}, 'maxItems': 12, 'minItems': 3}}}, 'maxItems': 4}, 'parts': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'array', 'items': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'maxItems': 64, 'minItems': 1}}, 'hinges': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'array', 'prefixItems': [{'type': 'number'}, {'type': 'number'}, {'type': 'number'}]}}, 'length': {'type': 'number', 'maximum': 7, 'minimum': 2.8}, 'source': {'type': 'object', 'required': ['assetId', 'revisionId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'fileRole': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}}}, 'openAngle': {'type': 'number', 'maximum': 85, 'minimum': 20}, 'thickness': {'type': 'number', 'maximum': 0.04, 'minimum': 0}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_project_get
Get a game project
Read a dedicated-server project (gpj_…) in the authenticated workspace. Not a Library asset.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game project id (gpj_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_projectile_create
Create projectile VFX
ADMIN ONLY. Create an editable 3D projectile: ignition, elemental volume, world-space trail, embers, contact flash, oriented ring and soot. 20 named variants: darts, short bolts, orbs, wisps, carrot rocket, spinning disc, spears, comets, coils and lightning. config.variant selects the geometry, trail and impact; style/color optionally override its palette. Omit variant to retain the original elemental recipe. To save several catalogue entries, pass variants=[IDs] without config/name: one persistent job renders/reviews each item sequentially, preserves completed items on retry and returns result.items. Publication remains explicit. Uses the shared trail and Scene Engine modules. save=true (default) queues persistent rendering/review/workspace save; poll gripforge_generation_read for Library ID and Studio link. save=false returns an unsaved recipe. Bind the resulting VFX to combat.projectiles/projectile_vfx using the Game Kit tools; gameplay speed/gravity/damage stay in the module. Web/Three.js only in v1. Does not install a kit or modify a game automatically. Recipe compilation needs no AI; saved previews use the existing review pipeline. No automatic visual validation.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'save': {'type': 'boolean'}, 'config': {'type': 'object', 'properties': {'seed': {'type': 'integer', 'maximum': 65535, 'minimum': 0}, 'color': {'type': 'string', 'pattern': '^#[a-f\\d]{6}$'}, 'style': {'enum': ['fire', 'ice', 'arcane', 'poison'], 'type': 'string'}, 'accent': {'type': 'string', 'pattern': '^#[a-f\\d]{6}$'}, 'radius': {'type': 'number', 'maximum': 1, 'minimum': 0.04}, 'quality': {'enum': ['low', 'high'], 'type': 'string'}, 'variant': {'enum': ['elemental', 'arcane-dart', 'ember-dart', 'venom-dart', 'crimson-bullet', 'frost-bullet', 'frost-orb', 'arcane-orb', 'solar-wisp', 'frost-wisp', 'carrot-shot', 'arcane-disc', 'ice-spear', 'venom-spear', 'venom-orb', 'void-comet', 'solar-comet', 'flame-coil', 'frost-coil', 'storm-bolt', 'solar-bolt'], 'type': 'string'}, 'version': {'type': 'number', 'const': 1}, 'trailLifetime': {'type': 'number', 'maximum': 1, 'minimum': 0.06}, 'impactDuration': {'type': 'number', 'maximum': 2, 'minimum': 0.15}}, 'additionalProperties': False}, 'variants': {'type': 'array', 'items': {'type': 'string', 'maxLength': 40, 'minLength': 1}, 'maxItems': 20, 'minItems': 1}, 'workspace_id': {'type': 'string', 'maxLength': 100}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_render
Render a Library mesh to PNG
Server-side software preview (PNG) of a Library GLB so the agent can see pose/attach without a browser. Not a path-traced studio shot.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Library id (lib_â\x80¦)'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}}}
gripforge_rest_pose
Idle rest pose (arms down)
Lower the character's arms from T-pose until they would clip THIS mesh (cape/chest/hips), then save an arms-down rest GLB (clip "idle"). Armed binds keep attached weapons in the hands. 0 credits. Attach first, then rest_pose on the bind id.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['character_id'], 'properties': {'name': {'type': 'string'}, 'character_id': {'type': 'string', 'description': 'Library character, enemy, or armed bind'}}}
gripforge_retarget
Retarget a clip onto another skeleton
Convert animation clips from skeleton A (source_id GLB) onto skeleton B (target_id). Bone-name heuristic (Mixamo / UAL / Tripo). Saves kind=animation.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['source_id', 'target_id'], 'properties': {'clip': {'type': 'string', 'description': 'Clip name on the source (default: first clip)'}, 'name': {'type': 'string'}, 'source_id': {'type': 'string', 'description': 'Library GLB that already has clips'}, 'target_id': {'type': 'string', 'description': 'Library character/enemy to drive'}}}
gripforge_scene_asset_pin
Pin an immutable Library revision
Archive the owned Library resource bytes and metadata for use in scenes. Returns assetId/revisionId, capabilities, material/animation names and sockets. Repeating for identical content reuses the archive; it consumes workspace storage only once. Prefers the validated version for insertion; choose version=work to test the draft. Does not approve the asset visually.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['assetId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'version': {'enum': ['current', 'work'], 'type': 'string', 'default': 'current'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_scene_asset_promote
Set the visually approved asset version
Promote only when the exact work revision has a matching trusted review for the current renderer. Existing scene instances keep their pinned revision.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['assetId', 'revisionId', 'expectedCurrent'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'expectedCurrent': {'anyOf': [{'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, {'type': 'null'}]}}}
gripforge_scene_asset_review
Review an immutable asset
Create a shared test scene and queue an independent review of real GripForge captures. Supports meshes, textures and effects. Never promotes automatically.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['assetId', 'revisionId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_scene_asset_versions
Read asset version and review
Read immutable asset work/current pointers and the trusted review of work. Does not create a version.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['assetId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_scene_create
Create a workspace scene
Create a draft scene. Pin Library assets first and use returned assetId/revisionId references. The response contains a GripForge Studio link. Exporting a VFX definition must not include this test scene.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['document'], 'properties': {'document': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_scene_kit
Scene dressing kit
Return locker props for a game look plus a suggested layout (metres, Y-up). Call after style_kit. Empty slots mean generate that dressing prop, tag it, retry. Does not generate meshes.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "devil may cry like", "genshin plaza"'}}}
gripforge_scene_list
List workspace scenes
List scenes, work/validated revision pointers and links in the authenticated workspace.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_scene_modify
Modify a selection with AI
Queue a scoped edit of saved scene nodes or a region. The server derives the allowed scope and preserves locks, gameplay zones, outside geometry and the last validated revision. Blender may fabricate missing assets. The result is a proposal requiring explicit application, never a silently replaced map.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'expectedRevision', 'nodeIds', 'prompt'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'prompt': {'type': 'string', 'maxLength': 4000, 'minLength': 3}, 'nodeIds': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'maxItems': 100, 'minItems': 1}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'blendDistance': {'type': 'number', 'maximum': 1000, 'exclusiveMinimum': 0}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}, 'expectedRevision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}
gripforge_scene_optimize
Prepare a scene for fast browser loading
Queue resumable browser texture variants for a saved scene. Preserve original GLBs, geometry, transforms, PBR, animations and Library heads. Color textures up to 1024px, data maps up to 512px and terrain color up to 4096px; WebP encoding. Saves a new work revision only if expectedRevision still matches. Does not promote validated. Poll generation_read for byte savings and studio_url. 0 credits; storage quota applies. New Unreal imports do this automatically.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'expectedRevision'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}, 'expectedRevision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}
gripforge_scene_patch
Edit selected scene instances
Apply insert/remove/transform/replace/update commands atomically. Environment updates can configure shared 3D cloud layers (density, altitude, wind, colour and quality); see gripforge_scene_schema. Replace preserves id, transform, role, materials and attachments, and rejects incompatible named slots. Locked objects cannot be changed. Scope constrains regional edits; read the schema first.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'baseRevision', 'commands'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'scope': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'commands': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'maxItems': 20000, 'minItems': 1}, 'baseRevision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_scene_promote
Set the visually approved scene version
Explicitly promote the latest work revision only if its trusted visual review matches the exact content, dependencies and current renderer. expectedCurrent must match the existing validated pointer or null. No client-supplied approval report is accepted.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'revision', 'expectedCurrent'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'expectedCurrent': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, {'type': 'null'}]}}}
gripforge_scene_proposal_apply
Apply a reviewed proposal to work
Explicitly accept or discard a proposal after inspecting it. Accept requires expectedRevision to match the exact base and current work revision. Atomic: concurrent changes or discard abort the save. Creates work, never promotes validated.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'proposal', 'action'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'action': {'enum': ['accept', 'discard'], 'type': 'string'}, 'proposal': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'expectedRevision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}
gripforge_scene_proposal_read
Read a proposed scene edit
Read the original scene, proposed document and scoped commands. Use the Studio link to inspect actual rendering before applying.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'proposal'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'proposal': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_scene_proposals
List proposed scene edits
List persistent proposals and their base revision, status and descriptions.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_scene_read
Read scene source
Read the editable SceneDocument at work, validated, or a numbered revision. Keep work_revision for optimistic writes. Validated can be absent.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'version': {'anyOf': [{'enum': ['work', 'validated'], 'type': 'string'}, {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}]}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_scene_realism
Architecture materials and ambient occlusion
Apply reusable architectural surface profiles and GTAO to a saved work scene. Read gripforge_scene_schema.realism first. assignments [{nodeId,material:"*" or a named slot,surface:{preset:preserve|brick|stone|metal|glass,detail:0..1,weathering:0..1,regions:[]}}]; surface:null removes only this local profile. Optional glass regions use explicit normalized mesh-local min/max bounds and interior parallax settings. Never guess masks from colours. ambientOcclusion {enabled,radius:0.02..3 metres,intensity:0..1,quality:low|medium|high}, or null to remove. Preserves transforms, source PBR maps, other instances and validated revisions. Returns Studio link for visual comparison. Optional quality {preset:performance|balanced|quality,resolutionScale:0.5..1,sharpness:0..0.5}, or null to restore the original presentation. Quality supports viewport resolution up to a bounded 4K budget. No generation charge, DLSS or automatic approval.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'expectedRevision'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'quality': {'anyOf': [{'type': 'object', 'required': ['preset'], 'properties': {'preset': {'enum': ['performance', 'balanced', 'quality'], 'type': 'string'}, 'sharpness': {'type': 'number', 'maximum': 0.5, 'minimum': 0}, 'resolutionScale': {'type': 'number', 'maximum': 1, 'minimum': 0.5}}}, {'type': 'null'}]}, 'assignments': {'type': 'array', 'items': {'type': 'object', 'required': ['nodeId', 'surface'], 'properties': {'nodeId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'surface': {'anyOf': [{'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, {'type': 'null'}]}, 'material': {'type': 'string', 'maxLength': 256, 'minLength': 1}}}, 'maxItems': 100}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'ambientOcclusion': {'anyOf': [{'type': 'object', 'required': ['enabled', 'radius', 'intensity', 'quality'], 'properties': {'radius': {'type': 'number', 'maximum': 3, 'minimum': 0.02}, 'enabled': {'type': 'boolean'}, 'quality': {'enum': ['low', 'medium', 'high'], 'type': 'string'}, 'intensity': {'type': 'number', 'maximum': 1, 'minimum': 0}}}, {'type': 'null'}]}, 'expectedRevision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}
gripforge_scene_review
Request an actual GripForge visual review
Queue a persistent render and independent visual review of the exact saved work revision. Poll generation_read. This does not promote or replace the validated version.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'expectedRevision'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'prompt': {'type': 'string', 'maxLength': 4000}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}, 'expectedRevision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}
gripforge_scene_schema
Shared scene engine format
Start here. Read the shared scene model, kinds, commands, limits and an editable example. Assets are immutable revisions; placed objects are independent instances. Scene saves create work revisions, never automatic visual approval.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_scene_versions
Scene versions and visual reviews
Read work/current pointers, immutable revision history and trusted visual review evidence. A rejected or unavailable review does not change the validated version.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_scene_write
Save scene work revision
Save a complete SceneDocument. expectedRevision must equal the latest work revision. A 409 is a real conflict: reread before changing it. Does not change the validated revision or source Library assets.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'document', 'expectedRevision'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'document': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'expectedRevision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}
gripforge_server_create
Create a game server
Create a dedicated server record. Implemented: Unity+FishNet (Docker demo) and Godot+ENet (real Godot Linux headless in Docker). Unreal returns unsupported. Does not start the process until deploy.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'demo': {'type': 'boolean'}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'hints': {'type': 'string', 'maxLength': 2000}, 'image': {'type': 'string', 'maxLength': 200}, 'engine': {'enum': ['unity', 'unreal', 'godot', 'custom'], 'type': 'string'}, 'region': {'type': 'string', 'maxLength': 40}, 'gamePort': {'type': 'integer', 'maximum': 65535, 'minimum': 1}, 'maxPlayers': {'type': 'integer', 'maximum': 200, 'minimum': 1}, 'networking': {'enum': ['fishnet', 'ngo', 'mirror', 'photon', 'enet', 'custom', 'unknown'], 'type': 'string'}, 'sourceKind': {'enum': ['project', 'git', 'upload', 'docker'], 'type': 'string'}, 'environment': {'enum': ['production', 'staging', 'development'], 'type': 'string'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_server_delete
Delete a game server
HIGH IMPACT. Stops the instance and deletes the server. Requires confirm=true. Owner only.
可能执行破坏性操作
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'confirm'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'confirm': {'type': 'boolean', 'const': True, 'description': 'Must be true. Production-destructive.'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_server_deploy
Deploy a game server
Create a Docker instance for this server and start it. Local demo uses a real container (python heartbeat unless a custom image is set). Mutating.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_server_events
Read server events
Activity feed: server.created, server.ready, player.joined, match.started, …
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_server_get
Get a game server
Read one dedicated server, its instance, engine/networking detection and integration status.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_server_list
List game servers
List dedicated game servers in the workspace with current status and latest instance.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_server_logs
Read server logs
Stdout/stderr from the runtime provider (Docker logs). Not stored in SQL.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'tail': {'type': 'integer', 'maximum': 2000, 'minimum': 20}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_server_metrics
Read server metrics
CPU, memory, network counters and player count from the metrics provider.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_server_restart
Restart a game server
Restart the running instance. Mutating.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_server_scale
Scale max players
Update desired max players. Does not resize cloud hardware (Docker provider has no node pool). Mutating.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'maxPlayers'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'maxPlayers': {'type': 'integer', 'maximum': 200, 'minimum': 1}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_server_start
Start a game server
Start the existing instance. Mutating.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_server_stop
Stop a game server
Stop the running instance. Mutating.
可能执行破坏性操作
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_settings
Game Settings of the workspace — genre, controls, match, menu
The workspace IS the game: genre (cs, mario-kart, arena-car, dmc…), remappable controls (same InputKit as the Godot input.json AND the web players), match rules (rounds/laps/score/timers/ports) and menu options (title, HUD toggles). Once set, every *-kit route called WITHOUT ?prompt= reads them (explicit prompt always wins), and the web players use the same bindings. Call with no args to READ (settings + resolved defaults). Pass fields to MERGE-SET. Pass a section as null to reset it to the genre preset. Set genre at project start, right after gripforge_style.
幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'menu': {'anyOf': [{'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, {'type': 'null'}], 'description': '{title, preset, hud:{â\x80¦}} â\x80\x94 null resets'}, 'genre': {'anyOf': [{'type': 'string', 'maxLength': 64}, {'type': 'null'}], 'description': 'game kit style id (cs, mario-kart, arena-carâ\x80¦) â\x80\x94 null resets'}, 'match': {'anyOf': [{'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'partial match rules â\x80\x94 null resets'}, 'controls': {'anyOf': [{'type': 'object', 'required': ['actions'], 'properties': {'kit_id': {'type': 'string', 'maxLength': 32}, 'actions': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}}}, {'type': 'null'}], 'description': 'full InputKit actions (InputBind[]) â\x80\x94 null resets to genre preset'}}}
gripforge_shader_pull
Pull a shader
Pull a catalog shader (id or alias like slash_reveal) for godot | unity | three. Returns file contents + assignment snippet (Godot ShaderMaterial / Unity Material / Three ShaderMaterial). This hosted endpoint cannot write into the working tree — use npx @gripforgeai/mcp gripforge_shader_pull with out_dir for that. v1 pull is free (no credit).
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'engine'], 'properties': {'id': {'type': 'string', 'description': 'Shader id or alias (slash_reveal, â\x80¦)'}, 'engine': {'enum': ['godot', 'unity', 'three'], 'type': 'string', 'description': 'Target engine'}, 'out_dir': {'type': 'string', 'description': 'Suggested folder (hosted returns contents only; npm writes)'}}}
gripforge_shaders
List shaders
List shaders from the GripForge catalog (authorized GodotShaders.com mirror). Returns { id, name, engines }. Search q=slash_reveal. Then pull with gripforge_shader_pull. Free.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'description': 'Search id/name/alias (e.g. slash_reveal)'}, 'type': {'enum': ['canvas_item', 'spatial', 'sky', 'particles', 'fog'], 'type': 'string', 'description': 'Godot shader_type'}, 'limit': {'type': 'number', 'description': 'Page size (default 50, max 200)'}, 'offset': {'type': 'number', 'description': 'Offset'}}}
gripforge_shield_export
gripforge_shield_export
ADMIN ONLY. Compile a shield recipe into reusable native source files for Three.js, Godot 4, Unity or Unreal 5, using the same geometry and shader functions. Returns files keyed by relative path plus install instructions. Write ALL files into a dedicated directory; never overwrite an existing modified package without checking. Includes enable/hit/shatter runtime; no mannequin or preview environment. Native builds require target-engine verification; source export is not visual certification.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['engine'], 'properties': {'config': {'type': 'object', 'properties': {'seed': {'type': 'integer', 'maximum': 65535, 'minimum': 0}, 'color': {'type': 'string', 'pattern': '^#[a-f\\d]{6}$'}, 'speed': {'type': 'number', 'maximum': 4, 'minimum': 0.1}, 'style': {'enum': ['fire', 'water', 'water-petal', 'blood', 'cat', 'cosmic', 'cyber', 'cyber-grid', 'holy', 'ice', 'ink', 'light', 'lightning', 'poison', 'rock', 'void', 'wind'], 'type': 'string'}, 'accent': {'type': 'string', 'pattern': '^#[a-f\\d]{6}$'}, 'radius': {'type': 'number', 'maximum': 5, 'minimum': 0.15}, 'opacity': {'type': 'number', 'maximum': 1, 'minimum': 0}, 'quality': {'enum': ['low', 'high'], 'type': 'string'}, 'stretch': {'type': 'array', 'prefixItems': [{'type': 'number', 'maximum': 2, 'minimum': 0.25}, {'type': 'number', 'maximum': 2, 'minimum': 0.25}, {'type': 'number', 'maximum': 2, 'minimum': 0.25}]}, 'version': {'type': 'number', 'const': 1}, 'intensity': {'type': 'number', 'maximum': 3, 'minimum': 0.1}}, 'additionalProperties': False}, 'engine': {'enum': ['threejs', 'godot', 'unity', 'unreal'], 'type': 'string'}, 'workspace_id': {'type': 'string', 'maxLength': 100}}}
gripforge_shield_vfx
gripforge_shield_vfx
ADMIN ONLY. Create an original editable 3D elemental shield using the shared shield-vfx module: 17 styles, radius/stretch, colours, intensity, quality and seed. Same shaders used in Studio and native exports. save=true by default queues persistent rendering/review/workspace save; poll generation_read for Studio URL. save=false returns an unsaved project. No commercial reference assets, collision or damage. Recipe compilation needs no AI; saving uses the normal VFX review pipeline. Work is not visually validated automatically.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'save': {'type': 'boolean'}, 'config': {'type': 'object', 'properties': {'seed': {'type': 'integer', 'maximum': 65535, 'minimum': 0}, 'color': {'type': 'string', 'pattern': '^#[a-f\\d]{6}$'}, 'speed': {'type': 'number', 'maximum': 4, 'minimum': 0.1}, 'style': {'enum': ['fire', 'water', 'water-petal', 'blood', 'cat', 'cosmic', 'cyber', 'cyber-grid', 'holy', 'ice', 'ink', 'light', 'lightning', 'poison', 'rock', 'void', 'wind'], 'type': 'string'}, 'accent': {'type': 'string', 'pattern': '^#[a-f\\d]{6}$'}, 'radius': {'type': 'number', 'maximum': 5, 'minimum': 0.15}, 'opacity': {'type': 'number', 'maximum': 1, 'minimum': 0}, 'quality': {'enum': ['low', 'high'], 'type': 'string'}, 'stretch': {'type': 'array', 'prefixItems': [{'type': 'number', 'maximum': 2, 'minimum': 0.25}, {'type': 'number', 'maximum': 2, 'minimum': 0.25}, {'type': 'number', 'maximum': 2, 'minimum': 0.25}]}, 'version': {'type': 'number', 'const': 1}, 'intensity': {'type': 'number', 'maximum': 3, 'minimum': 0.1}}, 'additionalProperties': False}, 'workspace_id': {'type': 'string', 'maxLength': 100}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_style
Workspace Style DNA — set once, applied to every generation
The visual identity of the workspace: palette (hex colors), written art direction, and sliders (realism/saturation/edges). Once set, it is AUTOMATICALLY appended to every generation prompt (characters, enemies, props, HUD bars…) so ten assets come out as ONE game — and gripforge_inspect gains a style check flagging assets whose dominant colors drift from the palette. Call with no args to READ the current DNA (+ the compiled prompt block). Pass fields to SET it. Pass extract_from (image lib ids) to auto-build the palette from reference art. clear:true removes it. Set the DNA at the START of a game project, before generating.
幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'refs': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 5, 'description': 'pinned reference lib ids'}, 'clear': {'type': 'boolean', 'description': 'remove the workspace style'}, 'edges': {'enum': ['soft', 'hard'], 'type': 'string'}, 'palette': {'type': 'array', 'items': {'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string'}, 'name': {'type': 'string'}}}, 'maxItems': 6, 'description': '2-6 colors, e.g. [{hex:"#8b1a1a",name:"blood red"}]'}, 'realism': {'enum': ['stylized', 'semi', 'realistic'], 'type': 'string'}, 'direction': {'type': 'string', 'maxLength': 500, 'description': 'art direction, e.g. "DMC gothic, worn leather, tarnished metal"'}, 'saturation': {'enum': ['muted', 'balanced', 'vivid'], 'type': 'string'}, 'extract_from': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 5, 'description': 'image lib ids â\x80\x94 extract the palette from them'}}}
gripforge_style_kit
Game-style kit from Library
Resolve a prompt like "Devil May Cry like" / "genshin" to a game-style id, then return the locker kit already tagged with that look: characters, enemies, weapons, props. Call this BEFORE generating when the user wants that game. Reuse the returned Library ids (attach / pull). Only generate if a bucket is empty.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "devil may cry like", "un ennemi genshin", "elden ring"'}}}
gripforge_texture_prep
Prep a game texture
Prep a game texture (terrain / props): optional 50% wrap + seam blend, then a faithful lanczos upscale (1× / 2× / 4×, capped at 1024 or 2048). The pattern is PRESERVED — nothing is generated (not Magnific, not an image model). Pass texture_id (Library) or image_url (https). Result is saved as kind=texture and the albedo URL is returned. To write the PNG into an open repo, use the npm package with out_dir. No credit consumed.
可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'name': {'type': 'string', 'description': 'Library name (default <source>_tile)'}, 'save': {'type': 'boolean', 'description': 'Save to Library (default true on hosted MCP)'}, 'size': {'anyOf': [{'type': 'number', 'const': 1024}, {'type': 'number', 'const': 2048}], 'description': 'Max output side (default 1024)'}, 'scale': {'anyOf': [{'type': 'number', 'const': 1}, {'type': 'number', 'const': 2}, {'type': 'number', 'const': 4}], 'description': 'Upscale factor (default 1)'}, 'seamless': {'type': 'boolean', 'description': '50% offset + seam blend (default true)'}, 'image_url': {'type': 'string', 'description': 'https URL of the image (PNG/JPG/WebP)'}, 'texture_id': {'type': 'string', 'description': 'Library id of a texture (lib_â\x80¦)'}}}
输出模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'file_url': {'type': 'string', 'description': 'Albedo PNG URL'}, 'library_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}
gripforge_vehicle_orient
Vehicle / kart mesh yaw
Yaw so a kart/vehicle GLB nose is local +Z (Meshy often faces +X). Then heading = yawToward(track tangent) = atan2(fx, fz). Pass Library id of the kart prop. Returns meshYaw + Three.js / Godot snippets. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'description': 'Library id of the vehicle/kart GLB (lib_â\x80¦)'}, 'prop_id': {'type': 'string', 'description': 'Same as id'}}}
gripforge_vehicle_schema
Modular vehicle manufacturing contract
Read the concept-first vehicle recipe, canonical parts, hinge convention, limits, quotes and revision workflow.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}}}
gripforge_vehicle_segment
Separate an existing vehicle with Tripo
Quote then queue one durable Tripo v2 semantic segmentation of an owned immutable GLB, including Meshy or Blender sources. stage=plan is free; stage=build requires quoted budget. 40 Tripo provider credits, distinct from the GripForge quote. Returns job_id; inspect parts and texture preservation in generation_read. No automatic completion, retexture, articulation, publication or replacement. A segmented output still needs hinge preparation.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['source'], 'properties': {'stage': {'enum': ['plan', 'build'], 'type': 'string', 'default': 'plan'}, 'budget': {'type': 'object', 'properties': {'usd': {'type': 'number', 'minimum': 0}, 'credits': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}}, 'source': {'type': 'object', 'required': ['assetId', 'revisionId'], 'properties': {'assetId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'fileRole': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}, 'revisionId': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,159}$'}}}, 'granularity': {'enum': ['simple', 'balanced', 'detailed'], 'type': 'string'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Returned scene links open this workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_vfx
Strike VFX on an attach (admin)
ADMIN ONLY. Generate + export a 3D slash/thrust/spin VFX parented to an existing attach bind, or a world-space fire meteor (head + ribbon trail + impact). Pass prompt to fill type/style/color/emitters. Returns studio_url (open this link to edit the saved effect in GripForge), workspace_id, GLB, PNG and vfx.json. Refused for non-admin API keys.
可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'core': {'type': 'number', 'maximum': 0.4, 'minimum': 0.02, 'description': 'portal only: shadow-core radius as a fraction of the portal (default 0.09)'}, 'look': {'enum': ['toon', 'solid', 'crystal', 'flame', 'pulse', 'firejet', 'impact'], 'type': 'string', 'description': 'toon: stylized ribbon/lightning; solid: filled beam; crystal: faceted weapon trail; flame: burning crescent; pulse: released electric orb; firejet: flared fire stream with torn tongues and pressure rings; impact: slam-family comic explosion with red telegraph, violet core, ink debris and optional impact frames'}, 'name': {'type': 'string', 'maxLength': 80}, 'type': {'enum': ['slash', 'thrust', 'spin', 'meteor', 'beam', 'swing', 'claw', 'charge', 'shield', 'portal', 'slam'], 'type': 'string', 'description': 'Strike type (default slash). portal = standing blood rift / demonic seal (world-space, loops); slam = ground-impact eruption: light pillar + fireball + sparks/debris (world-space, one-shot)'}, 'color': {'type': 'string', 'description': 'Hex color'}, 'style': {'enum': ['energy', 'metal', 'magic'], 'type': 'string', 'description': 'Look (default energy)'}, 'width': {'type': 'number', 'description': 'Ribbon width in metres'}, 'prompt': {'type': 'string', 'description': 'Natural-language VFX prompt. Fills type/style/color/emitters when omitted.'}, 'duration': {'type': 'number', 'description': 'Seconds (default 0.25)'}, 'emitters': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'maxItems': 6, 'description': 'Emitters returned by gripforge_vfx_generate.'}, 'attach_id': {'type': 'string', 'description': 'Library bind id (lib_â\x80¦). Not required for meteor.'}, 'generation': {'type': 'object', 'description': 'Generation provenance returned by gripforge_vfx_generate.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}}
输出模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string'}, 'vfx': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'urls': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'snippets': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'studio_url': {'type': 'string', 'description': 'Direct link to the saved effect in the GripForge VFX Studio; requires an authorized user session.'}, 'workspace_id': {'type': 'string'}}, 'additionalProperties': False}
gripforge_vfx_generate
Text / image to editable VFX (admin)
ADMIN ONLY. Text-to-VFX or image-to-VFX: interpret a prompt or reference into an editable animated effect specification. No Library save or credit charge. Pass the resulting type, style, look, color, duration, width, name, emitters and generation to gripforge_vfx to save/export (1 credit). Image mode requires a configured vision provider.
只读 可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'preset': {'enum': ['slash-trail', 'slash-emerald', 'slash-steel', 'slash-fire', 'slash-ice', 'slash-nature', 'arc-pulse', 'fire-breath', 'neon-impact'], 'type': 'string', 'description': 'Load a ready-to-play preset instantly, without AI. Supply this field alone.'}, 'prompt': {'type': 'string', 'maxLength': 500, 'description': 'Effect description; optional with an image.'}, 'image_id': {'type': 'string', 'description': 'Owned Library image id; use instead of image_data.'}, 'image_data': {'type': 'string', 'maxLength': 12582912, 'description': 'PNG/JPEG/WebP base64 data URI, up to 8 MB decoded.'}, 'visual_style': {'enum': ['realistic', 'stylized', 'anime', 'lowpoly'], 'type': 'string'}}}
gripforge_vfx_preview
VFX timeline sample (admin)
ADMIN ONLY. Play/scrub pose of a strike VFX at time t (seconds). t=0 is empty. No credits. Arc reveal / trail length / burst particles. Refused for non-admin keys.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['bind'], 'properties': {'t': {'type': 'number', 'description': 'Seconds on the timeline (default 0)'}, 'bind': {'type': 'object', 'description': 'Attach bind.json object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'type': {'enum': ['slash', 'thrust', 'spin', 'meteor', 'beam', 'swing', 'claw', 'charge', 'shield'], 'type': 'string'}, 'style': {'enum': ['energy', 'metal', 'magic'], 'type': 'string'}, 'duration': {'type': 'number'}}}
gripforge_vfx_project_generate
Create, render and refine a custom VFX
ADMIN ONLY. Text/image -> durable generation job -> original geometry/shaders -> actual GripForge rendering -> visual critique/correction -> workspace work revision. Returns immediately with job_id, status_url and studio_url. Poll gripforge_generation_read, then open its source_url to inspect the saved source and review. Closing the request does not cancel the job. Completed steps survive worker restart. Pass id + expected_revision to refine; image_id must belong to this workspace. A visually rejected candidate never replaces the validated version.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'pattern': '^lib_[A-Za-z0-9_-]+$'}, 'prompt': {'type': 'string', 'maxLength': 2000}, 'image_id': {'type': 'string', 'pattern': '^lib_[A-Za-z0-9_-]+$'}, 'image_data': {'type': 'string', 'maxLength': 12582912}, 'image_mode': {'enum': ['spatial', 'animated-artwork'], 'type': 'string', 'description': 'Default spatial: build a 3D effect. animated-artwork explicitly opts into a flat animated illustration.'}, 'visual_style': {'enum': ['realistic', 'stylized', 'anime', 'lowpoly'], 'type': 'string'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Explicit workspace id. The key must have access to this workspace; never infer another userâ\x80\x99s workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}, 'expected_revision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}
gripforge_vfx_project_promote
Set the visually approved VFX version
ADMIN ONLY. Explicitly promote work after a trusted positive review matching this source, dependencies and renderer. expectedCurrent is the existing validated revision, or null.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'revision', 'expectedCurrent'], 'properties': {'id': {'type': 'string', 'pattern': '^lib_[A-Za-z0-9_-]+$'}, 'revision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Explicit workspace id. The key must have access to this workspace; never infer another userâ\x80\x99s workspace.'}, 'expectedCurrent': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, {'type': 'null'}]}}}
gripforge_vfx_project_read
Read VFX project files and revisions
ADMIN ONLY. Read a project in the authenticated workspace. Returns project.json, per-layer .vert/.frag source, current revision, recent revision history and a Studio link. Read an older revision to restore it through write with the CURRENT expected_revision. Does not grant access to the server repository or arbitrary user files.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^lib_[A-Za-z0-9_-]+$'}, 'revision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Explicit workspace id. The key must have access to this workspace; never infer another userâ\x80\x99s workspace.'}}}
gripforge_vfx_project_render
Render actual VFX frames for inspection
ADMIN ONLY. Queue a durable render of an owned id OR an unsaved project at 1–4 timestamps. Returns job_id immediately. Poll gripforge_generation_read with include_preview for the actual rendered image, coverage, clipping and shader diagnostics. Uses the shared GripForge SceneViewport. Saves preview evidence only, no project revision. Requires workspace write access because the job and preview consume storage. Render timings are not browser FPS.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'pattern': '^lib_[A-Za-z0-9_-]+$'}, 'times': {'type': 'array', 'items': {'type': 'number', 'maximum': 12, 'minimum': 0}, 'maxItems': 4, 'minItems': 1, 'description': 'Render timestamps in seconds. Defaults to anticipation, middle and decay samples.'}, 'project': {'type': 'object', 'description': 'Complete editable project JSON. Read gripforge_vfx_project_schema for the format and a working example.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Explicit workspace id. The key must have access to this workspace; never infer another userâ\x80\x99s workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}}}
gripforge_vfx_project_review
Review an existing work revision
ADMIN ONLY. Queue a fresh GripForge capture and independent visual review without writing another source revision. Poll gripforge_generation_read; inspect its preview, then explicitly promote if approved.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'expected_revision'], 'properties': {'id': {'type': 'string', 'pattern': '^lib_[A-Za-z0-9_-]+$'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Explicit workspace id. The key must have access to this workspace; never infer another userâ\x80\x99s workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}, 'expected_revision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}
gripforge_vfx_project_schema
VFX authoring language and example
ADMIN ONLY. Start here to create original VFX beyond presets. Returns the editable source format, shader helpers, geometry budgets and a working example. Workflow: write custom source -> render -> inspect the returned image -> revise -> save. Blender or another modeling tool may supply custom mesh vertices/UVs/indices; no Blender instance is required for procedural effects.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Explicit workspace id. The key must have access to this workspace; never infer another userâ\x80\x99s workspace.'}}}
gripforge_vfx_project_write
Create or edit a VFX project
ADMIN ONLY. Create with project, or update id with project OR edits:[{path,content}]. Updates require expected_revision. Returns HTTP 202 job_id and studio_url immediately. Poll gripforge_generation_read; the worker compiles, renders and saves a work revision, then reviews it visually. Completed result includes source_url, preview_url and review. Use generation_read with include_preview to see the actual image. A source conflict fails the job and preserves current work; reread before writing. Validated versions remain unchanged. Editable files are project.json and layers/{id}.vert/.frag.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'pattern': '^lib_[A-Za-z0-9_-]+$'}, 'note': {'type': 'string', 'maxLength': 1000}, 'edits': {'type': 'array', 'items': {'type': 'object', 'required': ['path', 'content'], 'properties': {'path': {'type': 'string', 'maxLength': 100}, 'content': {'type': 'string', 'maxLength': 400000}}}, 'maxItems': 24, 'minItems': 1}, 'times': {'type': 'array', 'items': {'type': 'number', 'maximum': 12, 'minimum': 0}, 'maxItems': 4, 'minItems': 1, 'description': 'Render timestamps in seconds. Defaults to anticipation, middle and decay samples.'}, 'project': {'type': 'object', 'description': 'Complete editable project JSON. Read gripforge_vfx_project_schema for the format and a working example.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Explicit workspace id. The key must have access to this workspace; never infer another userâ\x80\x99s workspace.'}, 'idempotency_key': {'type': 'string', 'maxLength': 160, 'minLength': 8}, 'expected_revision': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}
gripforge_viewmodel_kit
FPS viewmodel (CS hands)
CS-style first-person arms + gun under Camera3D/Hold. Returns viewmodel.json, gf_viewmodel.gd, clip shader. Pull Mixamo T-pose characters (palms down) into bodies paths. Gun is a sibling under Hold, not the world-body hand bone. Pair with gripforge_input_kit. 0 credits.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'maxLength': 240, 'minLength': 2, 'description': 'e.g. "fps" or "counter-strike dust2"'}}}
gripforge_weapon_motion
gripforge_weapon_motion
Queue a persistent weapon-aware motion draft from an owned armed GLB. Axe/hammer get distinct procedural cleave, backhand and overhead attacks; sword uses the explicit UAL sword pack. Staff attacks fail with compatible_motion_missing; no silent sword fallback. Holds Grip finger poses, supports a second-hand anchor with IK. Poll gripforge_generation_read, cancel/retry with generation tools. Returns a NEW work asset and Character Studio URL; never replaces the game/source or visually validates a result. 0 generation credits.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['source_id'], 'properties': {'hand': {'enum': ['left', 'right'], 'type': 'string'}, 'name': {'type': 'string', 'maxLength': 150}, 'hands': {'anyOf': [{'type': 'number', 'const': 1}, {'type': 'number', 'const': 2}]}, 'slots': {'type': 'array', 'items': {'enum': ['idle', 'walk', 'run', 'attack1', 'attack2', 'attack3', 'hit', 'death', 'dodge', 'block', 'jump_start', 'jump_loop', 'jump_land'], 'type': 'string'}, 'maxItems': 13, 'minItems': 1}, 'family': {'enum': ['axe', 'sword', 'hammer', 'staff'], 'type': 'string', 'description': 'Required on the first call. Never infer axe vs sword from geometry alone.'}, 'edgeAxis': {'type': 'array', 'prefixItems': [{'type': 'number'}, {'type': 'number'}, {'type': 'number'}]}, 'source_id': {'type': 'string', 'pattern': '^lib_[A-Za-z0-9_-]{8,64}$'}, 'handleAxis': {'type': 'array', 'prefixItems': [{'type': 'number'}, {'type': 'number'}, {'type': 'number'}]}, 'weaponNode': {'type': 'string', 'maxLength': 150}, 'workspace_id': {'type': 'string', 'maxLength': 100}, 'primaryAnchor': {'type': 'array', 'prefixItems': [{'type': 'number'}, {'type': 'number'}, {'type': 'number'}]}, 'idempotency_key': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:-]{8,160}$'}, 'secondaryAnchor': {'type': 'array', 'description': 'Required for two hands; weapon-node local coordinates.', 'prefixItems': [{'type': 'number'}, {'type': 'number'}, {'type': 'number'}]}}}
gripforge_weapon_motion_review
gripforge_weapon_motion_review
Independently sample the saved weapon-motion GLB at 60 Hz: grip drift, finger pose, wrist rotation, joint discontinuities, second-hand reach and torso overlaps. Reports technicalPassed separately from visualStatus=not_reviewed. Inspect idle, wind-up, impact, recovery and locomotion in GripForge before using the draft. No promotion or mutation.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['source_id'], 'properties': {'source_id': {'type': 'string', 'pattern': '^lib_[A-Za-z0-9_-]{8,64}$'}, 'workspace_id': {'type': 'string', 'maxLength': 100}}}
gripforge_weapon_profile
gripforge_weapon_profile
Measure an owned armed GLB instance and return its editable weapon/motion profile: explicit family, holding hand, dimensions, grip anchors, handle and cutting-edge axes. Use gripforge_attach first. Default axes are +Y handle and +Z edge; inspect/correct them. Does not mutate the Library source or certify the initial seating.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['source_id'], 'properties': {'hand': {'enum': ['left', 'right'], 'type': 'string'}, 'hands': {'anyOf': [{'type': 'number', 'const': 1}, {'type': 'number', 'const': 2}]}, 'family': {'enum': ['axe', 'sword', 'hammer', 'staff'], 'type': 'string', 'description': 'Required on the first call. Never infer axe vs sword from geometry alone.'}, 'edgeAxis': {'type': 'array', 'prefixItems': [{'type': 'number'}, {'type': 'number'}, {'type': 'number'}]}, 'source_id': {'type': 'string', 'pattern': '^lib_[A-Za-z0-9_-]{8,64}$'}, 'handleAxis': {'type': 'array', 'prefixItems': [{'type': 'number'}, {'type': 'number'}, {'type': 'number'}]}, 'weaponNode': {'type': 'string', 'maxLength': 150}, 'workspace_id': {'type': 'string', 'maxLength': 100}, 'primaryAnchor': {'type': 'array', 'prefixItems': [{'type': 'number'}, {'type': 'number'}, {'type': 'number'}]}, 'secondaryAnchor': {'type': 'array', 'description': 'Required for two hands; weapon-node local coordinates.', 'prefixItems': [{'type': 'number'}, {'type': 'number'}, {'type': 'number'}]}}}
gripforge_world_backup
Backup a world
Not implemented. Returns 501. Mutating.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_world_deploy
Deploy a world
Not implemented. Returns 501.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_world_list
List worlds
Worlds stored for the workspace or a server’s project. Empty until worlds are implemented.
只读 幂等
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
gripforge_world_restore
Restore a backup
HIGH IMPACT. Not implemented. Returns 501.
可能执行破坏性操作
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 80, 'minLength': 4, 'description': 'Game server id (srv_â\x80¦)'}, 'workspace_id': {'type': 'string', 'maxLength': 100, 'description': 'Workspace authorized by the current key. Never infer another userâ\x80\x99s workspace.'}}}
已更改
gripforge_library_list
2026年10月1日 02:43
已更改
gripforge_generate_prop
2026年10月1日 02:43
已更改
gripforge_asset_search
2026年10月1日 02:43
已添加
gripforge_generate_weapon_catalog
2026年10月1日 02:43
已更改
gripforge_game_creation
2026年10月1日 02:43
已更改
gripforge_game_concepts
2026年10月1日 02:43
已添加
gripforge_projectile_create
2026年10月1日 02:43
已添加
gripforge_shield_export
2026年10月1日 02:43
已添加
gripforge_shield_vfx
2026年10月1日 02:43
已添加
gripforge_weapon_motion_review
2026年10月1日 02:43
已添加
gripforge_weapon_motion
2026年10月1日 02:43
已添加
gripforge_weapon_profile
2026年10月1日 02:43
已更改
gripforge_game_project
2026年10月1日 02:43
已更改
gripforge_gamekit_remove
2026年10月1日 02:43
已更改
gripforge_gamekit_installed
2026年10月1日 02:43
已更改
gripforge_generate_prop
2026年9月29日 02:50
已添加
gripforge_game_creation
2026年9月29日 02:50
已添加
gripforge_game_concepts
2026年9月29日 02:50
已添加
gripforge_generate_district
2026年9月29日 02:50
已添加
gripforge_generate_building
2026年9月29日 02:50
已添加
gripforge_architecture_schema
2026年9月29日 02:50
已更改
gripforge_game_project
2026年9月29日 02:50
已更改
gripforge_game_capabilities
2026年9月29日 02:50
已更改
gripforge_gamekit_deliver
2026年9月29日 02:50
已更改
gripforge_gamekit_update
2026年9月29日 02:50
已更改
gripforge_gamekit_dependencies
2026年9月29日 02:50
已更改
gripforge_gamekit_configure
2026年9月29日 02:50
已更改
gripforge_gamekit_remove
2026年9月29日 02:50
已更改
gripforge_gamekit_install
2026年9月29日 02:50
已添加
gripforge_gamekit_installed
2026年9月29日 02:50