Gaitkit Sign in Open the lab
Guide

How to give an AI coding agent a 3D asset library over MCP

Add the Gaitkit MCP server at https://gaitkit.com/mcp to your agent, for example with claude mcp add --transport http gaitkit https://gaitkit.com/mcp in Claude Code. The agent can then call search_assets, get_asset and get_variant to find a low-poly 3D model, turn plain words into knob values and paste working three.js code; when nothing fits, search reports poor or none coverage and the agent can file the request with report_need.

Updated 2026-10-22By Gaitkit

Install

The server speaks MCP over Streamable HTTP at a single URL, and browsing needs no key or account. Add it once, then restart the agent's session so it sees the tools.

Claude Code

Terminal
claude mcp add --transport http gaitkit https://gaitkit.com/mcp

Add --scope user to have it in every project; /mcp inside a session lists the tools.

Cursor

.cursor/mcp.json or ~/.cursor/mcp.json
{
  "mcpServers": {
    "gaitkit": { "url": "https://gaitkit.com/mcp" }
  }
}

Codex

Terminal
codex mcp add gaitkit --url https://gaitkit.com/mcp

VS Code (Copilot agent mode)

.vscode/mcp.json
{
  "servers": {
    "gaitkit": { "type": "http", "url": "https://gaitkit.com/mcp" }
  }
}

Other clients, including Windsurf, Claude Desktop and claude.ai custom connectors, take the same URL. The agents page has each one's config file.

The five tools

  • search_assets (query, class, legs, max_triangles, limit): finds specimens and grades its own answer as ok, poor or none. Each result has its size in metres, triangle count, knob names, motion (walk, drive, fly, swim, still) and tier.
  • get_asset (id): the full record: knob schema with a description of every knob, presets, night-light zones, rigged parts, gait data for walkers, file URLs and paste-ready three.js code for its kind of motion.
  • get_variant (id, want): plain words in, a createAsset({...}) call out. It understands colours, sizes, counts, features, option and preset names, in English or Turkish, and lists the words it could not place.
  • report_need (need, context): logs something the catalogue does not have. The request queue decides what gets built next.
  • who_am_i: which account an API key belongs to, its plan and its CDN token.

The tool descriptions tell the agent to search first, then fetch details, and to be honest when coverage is poor. You do not need a special prompt.

What an exchange looks like

A real exchange against the live server, shortened. The tool answers are what the server returns; note that the word it cannot act on comes back as unknown_words instead of being guessed at.

Claude Code
> Add a white fox with big ears that walks around the meadow. Make it look sleepy.

● gaitkit · search_assets({ "query": "fox", "limit": 3 })
  coverage: ok · fox (creature, walk, 4 legs, 2572 tris, free), giant-bat, sandbag-nest

● gaitkit · get_variant({ "id": "fox", "want": "white fox with big ears, sleepy" })
  confidence: high
  call: createAsset({"coat":"arctic","ears":1.8})
  unknown_words: ["sleepy"]

● Write(src/meadow/fox.js)
  import { createAsset } from 'https://gaitkit.com/cdn/fox.mjs';
  import { walker } from 'https://gaitkit.com/runtime/walk.mjs';
  const fox = createAsset({ coat: 'arctic', ears: 1.8 });
  const gait = walker(fox, { ground: raycastGround([meadow]) });

  Done: an arctic fox with big ears, walking on the meadow mesh.
  The fox has no "sleepy" option, so I left that out.

The agent writes code against the same public URLs a person would use: the module from /cdn/{id}.mjs and the walking runtime from /runtime/walk.mjs. The fox is a free specimen, so that code runs for anyone.

When the model is not there

A 3D library is only useful to an agent if it says no when it should. search_assets scores its own results: a hit on a name or tag is ok; matches that only touch descriptions are poor; nothing is none. On poor or none the response carries a note telling the agent to say so and to offer report_need, rather than passing off a robot spider as a crab.

Claude Code
> I need a kangaroo that hops.

● gaitkit · search_assets({ "query": "kangaroo" })
  coverage: poor · note: Nothing fits well. Tell the user honestly and offer report_need so it gets built.

  The catalogue has no kangaroo; the nearest results are unrelated. Want me to request one?

> Yes.

● gaitkit · report_need({ "need": "kangaroo that hops", "context": "outback scene, three.js" })
  recorded: true · Logged. Requests decide what gets built next.

Asking for the same thing twice keeps the first place in the queue rather than adding a duplicate. The same queue collects requests from the website's search box.

Free files, Pro files and keys

  • No key needed to browse. Search, metadata, variants and every free specimen's files are open. Each result says tier: free or tier: pro.
  • Pro files need a plan. Create an API key on your account and pass it as a header. get_asset then returns Pro file links that carry your CDN token.
Claude Code, with your key
claude mcp add --transport http gaitkit https://gaitkit.com/mcp --header "Authorization: Bearer gk_live_..."

Keep the API key (gk_live_…) in the agent's config, never in shipped code. The CDN token (gkc_…) only reads files, so it may go into a game or web app. Without a key the server allows 120 calls a minute per address; an agent that wants the whole catalogue should fetch /catalog.json once.

Without an MCP client

The endpoint is plain JSON-RPC 2.0 over POST /mcp, so any script can call it:

Terminal
curl -s https://gaitkit.com/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_assets","arguments":{"query":"fox","limit":3}}}'

The same operations exist as REST: GET /api/assets?q=fox, GET /api/assets/fox, GET /api/assets/fox/variant?want=white+big+ears and POST /api/demand. A short map of the site for language models lives at /llms.txt.

Questions

Do I need an API key to use the Gaitkit MCP server?

No. Searching, reading metadata, getting variants and downloading free specimens need no key. An API key is only for Pro files.

Which agents can use it?

Any MCP client that supports Streamable HTTP, including Claude Code, Cursor, Codex, VS Code with Copilot agent mode, Windsurf, Claude Desktop and claude.ai custom connectors.

What happens when the library has no matching model?

search_assets reports poor or none coverage and tells the agent to say so honestly. The agent can then log the request with report_need instead of substituting something else.

What does the agent get back besides a file link?

The real size in metres, the knob schema with descriptions, rigged parts, gait data for walkers, and paste-ready three.js code for the specimen's kind of motion.

Keep looking

Browse by type

Low-poly charactersLow-poly creaturesLow-poly vehiclesLow-poly buildingsLow-poly robots and mechsLow-poly propsLow-poly trees, rocks and terrainLow-poly furnitureLow-poly weaponsLow-poly sci-fi assetsLow-poly fantasy and medievalModular level kits

Motion and price

Free low-poly 3D modelsAnimated low-poly 3D models3D models that walk

By engine

3D models for three.js3D models for React Three FiberLow-poly 3D models for GodotLow-poly 3D models for Unity3D assets for AI agents

Kits

Adventurer GearAir, Sea & SpaceAlien WorldAncient WorldAnimalsBiomesBirds & Sea LifeBug WorldCastleCharactersCity StreetCoastal TownCyberpunkDungeonEveryday PropsFantasy CreaturesFantasy HeroesFarmFoodForest & WildsGarden BugsHalloweenHeavy VehiclesHistoricalHome & GardenHome FurnitureInteriorsKitchen & BathMachinesMech HangarMedieval VillageMilitary BaseModern ArsenalModular Level KitMonster HordeMonstersOffice & TechOutdoorsPiratesPlatformerPlayground & SportsPublic InteriorsRoad VehiclesRobotsSci-Fi CrewSeasonalShop & MarketSolarpunkSpace ColonySports & SkateTabletopTerrainTower DefenseTown BuildingsTownsfolkUnderwaterWastelandWild WestWildlifeWorld Architecture

Guides

How to add a walking 3D creature to a three.js sceneHow to add an animated low-poly model to React Three FiberHow to import an animated low-poly GLB into Godot 4How to use an animated GLB model in UnityHow do procedural IK walk cycles work?How to use low-poly 3D assets in a web game