@gripforgeai/mcp 0.1.5 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +142 -12
- package/dist/gamekit-deliver-local.js +586 -0
- package/dist/gamekit-tools.js +298 -0
- package/dist/scene-tools.js +79 -0
- package/dist/server-tools.js +143 -0
- package/dist/server.js +1483 -51
- package/dist/vfx-project-tools.js +48 -0
- package/package.json +6 -7
package/README.md
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
# @gripforgeai/mcp
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
**The tools your AI needs to make your games.**
|
|
4
|
+
|
|
5
|
+
Turn prompts into production-ready game assets — animated characters with their weapons attached, seamless textures, terrain, VFX, HUDs — and playable game kits.
|
|
6
|
+
|
|
7
|
+
MCP client for the [GripForge](https://gripforge.ai) API — from Claude Code, Cursor, Windsurf, VS Code or any MCP client.
|
|
5
8
|
|
|
6
9
|
## Hosted endpoint (zero install)
|
|
7
10
|
|
|
@@ -36,13 +39,14 @@ the npm package); GripForge finds the hand bone, scales the prop to the
|
|
|
36
39
|
character's hand, closes the fist around the grip and returns the bind JSON,
|
|
37
40
|
ready-to-paste Three.js / Unity / Godot snippets, and optionally the armed GLB.
|
|
38
41
|
|
|
39
|
-
|
|
42
|
+
To forge a character **from a picture** (not from a text prompt), pass
|
|
43
|
+
`concept_item` (a Library `lib_…` T-pose/concept), or with the npm package a
|
|
44
|
+
local `path` / `file_url`. That is Meshy image-to-3D. Without those fields the
|
|
45
|
+
tool is text-to-3D only.
|
|
40
46
|
|
|
41
|
-
|
|
42
|
-
claude mcp add gripforge -e GRIPFORGE_API_KEY=gf_... -- npx -y @gripforgeai/mcp
|
|
43
|
-
```
|
|
47
|
+
## Install (any MCP client)
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
Add the server to your client's MCP config (`.mcp.json`, `mcp.json`, settings — the shape is the same everywhere):
|
|
46
50
|
|
|
47
51
|
```json
|
|
48
52
|
{
|
|
@@ -56,7 +60,7 @@ Or in `.mcp.json`:
|
|
|
56
60
|
}
|
|
57
61
|
```
|
|
58
62
|
|
|
59
|
-
Get
|
|
63
|
+
Get an API key at https://gripforge.ai/login — Free: 15 Studio attaches + **3 API/MCP trial attaches / month**. Credit packs from €29 (100 credits, never expire).
|
|
60
64
|
|
|
61
65
|
## Install (Grok)
|
|
62
66
|
|
|
@@ -83,11 +87,19 @@ Also works with Cursor, Windsurf and any MCP-compatible client — same
|
|
|
83
87
|
|
|
84
88
|
## Tools
|
|
85
89
|
|
|
90
|
+
Hosted HTTP MCP (`https://gripforge.ai/mcp`) is always current. This npm package
|
|
91
|
+
writes files into the repo (`out_dir`), including `gripforge_hud`,
|
|
92
|
+
`gripforge_hud_bar` and `gripforge_cape`. Hosted-only: `gripforge_make_seamless`.
|
|
93
|
+
Full list: https://gripforge.ai/mcp-docs
|
|
94
|
+
|
|
86
95
|
- `gripforge_style_kit` — resolve "Devil May Cry like" / "genshin" to locker ids
|
|
87
96
|
already tagged with that look. **Call this before generating.** Reuse the ids.
|
|
88
97
|
- `gripforge_generate_character` — new T-pose + auto-rig into Library (10 credits).
|
|
89
98
|
`kind=enemy` or the word "enemy" in the prompt. Skip this if style_kit already
|
|
90
99
|
returned a character.
|
|
100
|
+
- `gripforge_boss` — playable boss kit (stats, phases, attacks, arena, engine snippets).
|
|
101
|
+
0 credits. Reuses a locker enemy. `generate=true` forges a new kind=enemy (10 credits).
|
|
102
|
+
Then `gripforge_animate` with the returned archetype.
|
|
91
103
|
- `gripforge_concept_correct` — concept image → strict T-pose sheet (1 credit).
|
|
92
104
|
- `gripforge_attach` — character + prop (paths or Library ids) in, bone-local bind + Three.js / Unity /
|
|
93
105
|
Godot snippets out. Styles: melee, gun, shield, staff (scythe/polearm).
|
|
@@ -95,24 +107,142 @@ Also works with Cursor, Windsurf and any MCP-compatible client — same
|
|
|
95
107
|
held item (off-hand). With `export_glb: true` (+ `out_dir`) it also writes `attached.glb`: the
|
|
96
108
|
character with the fist closed and the prop attached, textures preserved —
|
|
97
109
|
use this for mitten-hand rigs, whose closed fist cannot travel in a JSON bind.
|
|
110
|
+
- `gripforge_loadout` — multi-weapon character in one call (sets + manifest + clips). 1 credit / prop.
|
|
111
|
+
- `gripforge_generate_weapon` — Meshy weapon GLB into Library (kind=weapon, polycount, style=melee|gun). 10 credits. Not generate_character.
|
|
112
|
+
- `gripforge_hud` — survivor HUD kit (`hud.json` + PNGs + `.tscn` + snippets). Writes `out_dir` (default `./gripforge-hud`). 1 credit.
|
|
113
|
+
- `gripforge_hud_bar` — original themed health-bar frame+fill PNGs. Writes `out_dir`. 2 credits.
|
|
114
|
+
- `gripforge_cape` — cape bone grid + skinned `attached_cape.glb` + Godot/Three snippets. Writes `out_dir` (default `./gripforge-cape`). 1 credit.
|
|
98
115
|
- `gripforge_formats` — supported formats & options.
|
|
99
116
|
- `gripforge_library_list` / `get` / `push` / `pull` / `tag` — the Library locker.
|
|
100
|
-
`kind=animation` is valid. `pull` writes the mesh **and VFX sidecars** (`tex0..png/json`)
|
|
117
|
+
`kind=animation|audio` is valid. `pull` writes the mesh **and VFX sidecars** (`tex0..png/json`)
|
|
101
118
|
into the open repo (`out_dir`, default `./gripforge-library`).
|
|
102
119
|
Saving a bind after attach is not a second credit.
|
|
103
|
-
- `
|
|
120
|
+
- `gripforge_audio_kit` — locker SFX + music for a game look. Free.
|
|
121
|
+
- `gripforge_animate` — clip pack onto a Mixamo Library char (archetype sword/claws/heavy/brawler/puppet). 0 credits.
|
|
104
122
|
- `gripforge_retarget` — clip from skeleton A onto skeleton B.
|
|
105
123
|
- `gripforge_rest_pose` — arms-down rest computed against this mesh (weapons stay on an armed bind).
|
|
106
124
|
- `gripforge_render` — server PNG preview so the agent can see without a browser.
|
|
107
125
|
- `gripforge_scene_kit` — locker props + suggested layout for a game look.
|
|
108
|
-
- `
|
|
126
|
+
- `gripforge_light_kit` / `gripforge_font` / `gripforge_navmesh` — lights+fog, webfont+ranks, walkable AABB. 0 credits.
|
|
127
|
+
- `gripforge_input_kit` — FPS InputMap (WASD + arrows). Write input.json, autoload GfInput.
|
|
128
|
+
Optional `third_person: true` adds portable character-facing JavaScript and a
|
|
129
|
+
Three.js integration example; the existing input map is unchanged. 0 credits.
|
|
130
|
+
- `gripforge_viewmodel_kit` — CS-style FPS arms + gun under Camera3D/Hold. Write viewmodel.json + gf_viewmodel.gd. 0 credits.
|
|
131
|
+
- `gripforge_loading_page` — overlay html/css/js + Godot/Unity/Unreal. Pass `character_id` for a 16:9 still (1 credit).
|
|
132
|
+
- `gripforge_level` — playable room graph from a prompt. 0 credits.
|
|
133
|
+
- `gripforge_map_plan` — top-down FPS/bomb map (spawns, sites A/B, lanes, walls). Preview: https://gripforge.ai/map-plan?prompt=dust2. 0 credits.
|
|
134
|
+
- `gripforge_map_wires` — sagging electrical spans (2 anchors + sag), not a cable mesh. Pair with map_plan. 0 credits.
|
|
135
|
+
- `gripforge_map_look` — still → camera + dressing ids (shot21a A-site). LINK only, never Meshy image-to-3d. 0 credits.
|
|
136
|
+
- `gripforge_map_reconstruct` — collect → graph → greybox → zone → camera match → dress. Dust II Valve IP: greybox benchmark only, no BSP. stage=dress = original textures + props + wires. 0 credits.
|
|
137
|
+
- `gripforge_hitbox` — body capsules + `weapons[]` from a bind or loadout.
|
|
109
138
|
- `gripforge_texture_prep` — local path or `texture_id` → seamless blend + faithful
|
|
110
139
|
lanczos upscale (1×/2×/4×, max 1024 or 2048). Writes the PNG into `out_dir` and
|
|
111
140
|
returns the Library albedo URL. Not a generator. No credit.
|
|
112
|
-
- `
|
|
141
|
+
- `gripforge_vfx_generate` — use `preset` set to `slash-trail`, `slash-steel`, `slash-fire`, `slash-ice` or `slash-nature` alone for a ready-to-play recipe without AI; otherwise text/image to an editable animated VFX specification (admin keys). Accepts `prompt`, `visual_style`, and either a base64 `image_data` or an owned Library `image_id`.
|
|
142
|
+
- `gripforge_vfx` / `gripforge_vfx_preview` — save/export and sample VFX (admin keys). Pass generated `emitters` and `generation` along with the effect parameters to preserve the generated result.
|
|
113
143
|
- `gripforge_shaders` — list the authorized shader catalog (`{ id, name, engines }`). Search `q=slash_reveal`.
|
|
114
144
|
- `gripforge_shader_pull` — `id` + `engine` (`godot`|`unity`|`three`) + `out_dir` →
|
|
115
145
|
write sources into the repo and return an assignment snippet. **v1 pull is free**.
|
|
146
|
+
- `gripforge_performance` — analyze measured game FPS, frame timing, CPU/render
|
|
147
|
+
submission, optional GPU timing and network latency. Retrieve an explicitly
|
|
148
|
+
shared workspace capture or provide a report directly. 0 credits.
|
|
149
|
+
|
|
150
|
+
### Game Kits (modular)
|
|
151
|
+
|
|
152
|
+
Composable gameplay kits (`vehicle.driveable`, `mission.objectives`, `npc.wanted`…)
|
|
153
|
+
installed into a Game Kit project (`gkp_…`) with dependency resolution, a lockfile
|
|
154
|
+
and a browser play URL, then delivered into Godot, Unity or Unreal projects. All 0 credits
|
|
155
|
+
except the first delivery of a kit major version to an engine (1 credit per workspace).
|
|
156
|
+
Full parameters: https://gripforge.ai/mcp-docs
|
|
157
|
+
|
|
158
|
+
- `gripforge_gamekit_search` — **start here**: search the catalogue by text, capability, tag or target; with `project_id` each hit carries its install state.
|
|
159
|
+
- `gripforge_gamekit_get` — manifest, README, config schema + defaults, versions of one kit (`with_usage` lists the projects using it).
|
|
160
|
+
- `gripforge_gamekit_install` — add a kit to a project; manifest dependencies are resolved automatically (`dry_run` to preview).
|
|
161
|
+
- `gripforge_gamekit_remove` — uninstall a kit (`force` past `kit_in_use`, `prune` orphaned dependencies).
|
|
162
|
+
- `gripforge_gamekit_configure` — merge config values or toggle `enabled` without uninstalling.
|
|
163
|
+
- `gripforge_gamekit_dependencies` — dependency graph of a project, or the manifest tree of a catalogue kit.
|
|
164
|
+
- `gripforge_gamekit_update` — update plan (dry-run) or `apply=true` to write the lockfile and run migrations; omit `id` for all kits.
|
|
165
|
+
- `gripforge_gamekit_deliver` — plan (`dry_run`) then bundle of engine files for `godot` / `unity` / `unreal` (`web` is native); write `bundle.files` following `plan.actions`.
|
|
166
|
+
- `gripforge_gamekit_deliver_local` (this npm client only) — same delivery straight into `project_dir`: hashes `gripforge/**`, reads the lock, executes the actions with backups in `gripforge/.backup/<plan id>/`, `verify=true` runs Godot headless when `GODOT_BIN` is set.
|
|
167
|
+
- `gripforge_gamekit_rollback_local` (this npm client only) — restore the backups of the last delivery and put the previous lock back.
|
|
168
|
+
- `gripforge_game_capabilities` — what the project provides, what is missing for a goal and which kits fill each gap.
|
|
169
|
+
- `gripforge_game_project` — `action=list|create|get|bind|data|delete` on projects (bindings slot → `lib_…`, data collections, `confirm=true` to delete).
|
|
170
|
+
- `gripforge_game_play_url` — browser play URL of the project's current revision (`{ url, absolute }`).
|
|
171
|
+
|
|
172
|
+
## Character facing for third-person games
|
|
173
|
+
|
|
174
|
+
Call `gripforge_input_kit` with `{ "prompt": "third person", "third_person": true }`.
|
|
175
|
+
Save the returned `third_person.source_js` as `character-facing.js`; it exports:
|
|
176
|
+
|
|
177
|
+
```js
|
|
178
|
+
// Keep this object for the lifetime of one character.
|
|
179
|
+
const facingState = { velocity: 0, targetYaw: currentYaw };
|
|
180
|
+
updateCharacterFacing(currentYaw, {
|
|
181
|
+
moveX, moveZ, lookYaw, aiming, firing, building
|
|
182
|
+
}, dtSeconds, facingState)
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Pass world-space movement with **-Z forward**, angles in radians and elapsed time
|
|
186
|
+
in seconds. Free movement turns the character toward its travel direction;
|
|
187
|
+
standing still finishes the last turn and retains that heading. Aiming, firing
|
|
188
|
+
or building turns it toward `lookYaw`. Turning follows the shortest arc with
|
|
189
|
+
bounded angular speed and acceleration, retaining continuous analog directions.
|
|
190
|
+
Elapsed time is capped at 0.1 seconds after a long pause. The optional state adds
|
|
191
|
+
smooth acceleration and braking; older three-argument calls still work with a
|
|
192
|
+
speed cap. Reset the state after a teleport or character replacement.
|
|
193
|
+
|
|
194
|
+
The returned `usage_three` rotates an outer avatar group, preserving the imported
|
|
195
|
+
model's quaternion and keeping camera control independent. This helper supplies
|
|
196
|
+
orientation only. Keep your existing movement, physics, collision, camera and
|
|
197
|
+
network systems. Omitting `third_person`, or setting it to `false`, returns the
|
|
198
|
+
existing input kit without the additional section. The option is available in
|
|
199
|
+
the hosted MCP and this source checkout; it is not in published npm `0.1.5`.
|
|
200
|
+
|
|
201
|
+
## Performance diagnostics
|
|
202
|
+
|
|
203
|
+
`gripforge_performance` is included in this source checkout and the hosted MCP.
|
|
204
|
+
The published npm `0.1.5` package does not include it. Use the hosted endpoint
|
|
205
|
+
above, or build this checkout with `pnpm --filter @gripforgeai/mcp build` and
|
|
206
|
+
configure your MCP client to run `node` with the absolute path to
|
|
207
|
+
`packages/mcp-client/dist/server.js`. Deploying the website does not update an
|
|
208
|
+
installed npm package.
|
|
209
|
+
|
|
210
|
+
To retrieve the latest capture explicitly shared from a game in the API key's
|
|
211
|
+
workspace:
|
|
212
|
+
|
|
213
|
+
```json
|
|
214
|
+
{ "kit_id": "lib_your_kit_id" }
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Omit `kit_id` to use that workspace's latest capture. If none is available, the
|
|
218
|
+
tool asks for a capture or a report; it does not manufacture measurements.
|
|
219
|
+
Alternatively, provide copied diagnostic JSON:
|
|
220
|
+
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"report": {
|
|
224
|
+
"game": "Eclat Royale",
|
|
225
|
+
"viewport": { "width": 1920, "height": 1080 },
|
|
226
|
+
"samples": [
|
|
227
|
+
{ "fps": 32, "frameMs": 31.25, "p95Ms": 48, "cpuMs": 12, "submitMs": 7, "networkMs": 65 },
|
|
228
|
+
{ "fps": 34, "frameMs": 29.41, "p95Ms": 43, "cpuMs": 11, "submitMs": 6, "networkMs": 70 },
|
|
229
|
+
{ "fps": 31, "frameMs": 32.26, "p95Ms": 50, "cpuMs": 13, "submitMs": 8, "networkMs": 62 }
|
|
230
|
+
]
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
These example values illustrate the format. Supply measurements from the affected
|
|
236
|
+
game session. A report accepts 1–120 samples and each sample needs `fps` or
|
|
237
|
+
`frameMs`. Optional fields are `pixelRatio`, `quality`, `level`, `gpuMs`,
|
|
238
|
+
`drawCalls`, `triangles` and `snapshotAgeMs`, as well as the timing fields above.
|
|
239
|
+
The tool strips unrecognized report fields before sending the report to
|
|
240
|
+
GripForge. Explicit reports use analysis mode and are not saved as captures.
|
|
241
|
+
|
|
242
|
+
Results separate measured findings from recommendations. Renderer submission is
|
|
243
|
+
CPU/driver time already included in `cpuMs`; `gpuMs` is meaningful only when
|
|
244
|
+
actually measured. This tool does not control a browser, change game settings,
|
|
245
|
+
publish code or automatically fix a game.
|
|
116
246
|
|
|
117
247
|
## Env
|
|
118
248
|
|