search_assetsread-onlyFinds specimens and grades its own answer: ok, poor or none. On poor or none it says so instead of passing off the nearest thing, and suggests report_need.
Point Claude Code, Cursor, Codex or any MCP client at Gaitkit and it can search 518 specimens, turn a sentence into knob values and drop the result into your scene. No key, no account to browse.
One line or one file, depending on your client. Restart the session afterwards so the agent sees the tools.
claude mcp add --transport http gaitkit https://gaitkit.com/mcpAdd --scope user to have it in every project. Check with claude mcp list; inside a session, /mcp shows the four tools.
{
"mcpServers": {
"gaitkit": {
"url": "https://gaitkit.com/mcp"
}
}
}Cursor picks the file up on save; the server shows under Settings → MCP with a green dot.
codex mcp add gaitkit --url https://gaitkit.com/mcp[mcp_servers.gaitkit]
url = "https://gaitkit.com/mcp"{
"servers": {
"gaitkit": {
"type": "http",
"url": "https://gaitkit.com/mcp"
}
}
}Copilot's agent mode lists the tools once the server starts. The command palette entry MCP: Add Server… writes the same file.
{
"mcpServers": {
"gaitkit": {
"serverUrl": "https://gaitkit.com/mcp"
}
}
}https://gaitkit.com/mcpJSON-RPC 2.0 over a single POST /mcp. No key is needed to browse, search or get variants. Claude Desktop and claude.ai: Settings → Connectors → Add custom connector, paste the URL.
search_assetsread-onlyFinds specimens and grades its own answer: ok, poor or none. On poor or none it says so instead of passing off the nearest thing, and suggests report_need.
get_assetread-onlySize in metres, palette, knob schema with every knob's description, presets, night-light zones, rigged parts, gait data for walkers, file URLs (module, GLB, OBJ) and paste-ready three.js code for its kind of motion.
get_variantread-onlyPlain words in, a createAsset({...}) call out: colours, sizes, counts, features, option and preset names, in English or Turkish. Reports a confidence and lists the words it could not place, so the agent can be honest about them.
report_needwrites to the request queueLogs a specimen the catalogue does not have. Asking twice keeps the first place in the queue. The queue decides what the factory builds next.
A real exchange, shortened. The tool answers are what the server returns today; note how the unmatched word comes back instead of being guessed.
› Put a white robot spider with long legs on the lab floor, no turret. Make it glittery.
● gaitkit · search_assets({ "query": "robot spider", "legs": 8 })
coverage: ok · spider-bot (mech, 8 legs, 1452 tris, 0.85 × 0.38 × 0.74 m), spider-tank, …
● gaitkit · get_variant({ "id": "spider-bot", "want": "white with long legs, no turret, glittery" })
confidence: high
call: createAsset({"colorway":"ivory","legLength":1.25,"turret":false})
unknown_words: ["glittery"]
● Write(src/lab/spider.js)
import { createAsset } from 'https://gaitkit.com/cdn/spider-bot.mjs';
import { walker } from 'https://gaitkit.com/runtime/walk.mjs';
const spider = createAsset({ colorway: 'ivory', legLength: 1.25, turret: false });
const gait = walker(spider, { ground }); // feet stay planted on your floor mesh
Done: an ivory spider bot with long legs and no turret, walking on the floor mesh.
It has no glitter option. Want me to log that as a request?The matcher reads every knob's description, so words like rusty, arctic, twin guns or bacasız work when a specimen has a knob for them, and come back as unknown_words when it does not.
createAsset() with no arguments always builds the same published look; every knob is optional.leg_i > hip_i > knee_i > foot_i; moving parts are named pivots listed in userData.rig.The full contract is in the docs.
Everything the tools do is also a plain HTTP call, for scripts and agents without MCP.
| Method | Path | What |
|---|---|---|
GET | /api/assets?q=&class=&legs=&max_triangles= | Search, same as search_assets |
GET | /api/assets/{id} | Full metadata, same as get_asset |
GET | /api/assets/{id}/variant?want= | Words to knob values, same as get_variant |
POST | /api/demand {need, context} | Request a missing specimen, same as report_need |
GET | /catalog.json | The whole catalogue in one file |
GET | /cdn/{id}.mjs · .glb · .obj · -params.json | Module, exports and knob schema |
GET | /llms.txt | A short map of the site for language models |
Authorization: Bearer …. The tools tell the agent when a key is needed and where to get one./catalog.json instead of hundreds of searches.