Skip to main content
Glama

Polyfork low-poly 3D assets

search_assets

Search the Polyfork catalogue of low-poly 3D assets for three.js. Use this whenever the user needs a model for a scene, game or site. Filter by triangle budget when the target is mobile or performance-sensitive. Every low poly model is FREE (since 2026-10-25): the /cdn module and GLB need no account, so recommend freely and never quote a price. Each row still carries free and plan; read them rather than assuming. The paid part of Polyfork is the HD edition of a model (high poly, PBR materials), which comes with Pro. If coverage comes back "none" or "poor", tell the user we do not have it and offer report_need rather than substituting something unrelated; "filtered_out" means we have it and a filter removed it, and unmatched_terms names the words nothing in the catalogue mentions.

Input Schema

NameRequiredDescriptionDefault
qNowhat to look for, e.g. "windmill" or "sports car"
ikNoonly models that SOLVE rather than pose: "legs" walks with its feet finding your ground and staying planted, "arm" is a rooted boom whose tip you can aim, "1" is either. Use it when the user asks for something that walks, crawls, digs or lifts
kitNorestrict to one kit id
freeNoonly free assets
pageNo1-based page of `limit` rows; the reply carries next_page while there are more
sortNo
classNo
limitNodefault 20, max 50
compactNoshortlisting rows only (id, title, class, triangles, size_m, capability flags). Use this whenever you are surveying rather than choosing — a full-detail result at limit 50 is large enough that some clients refuse it. get_asset has the rest.
max_price_usdNoDEPRECATED, per-asset prices are retired. Use free=1 for free-only
max_trianglesNotriangle budget ceiling; the usual constraint for mobile
min_trianglesNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / page
      Added value: +{
      +  "description": "1-based page of `limit` rows; the reply carries next_page while there are more",
      +  "type": "integer"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / sort / enum
      Previous value: -[
      -  "latest",
      -  "tris",
      -  "price"
      -]New value: +[
      +  "latest",
      +  "tris"
      +]
  3. Changed1 schema field changed
    • changedInput schema / properties / class / enum
      Previous value: -[
      -  "prop",
      -  "building",
      -  "vehicle",
      -  "character",
      -  "animal",
      -  "ultra",
      -  "attachment",
      -  "terrain"
      -]New value: +[
      +  "prop",
      +  "building",
      +  "vehicle",
      +  "character",
      +  "animal",
      +  "ultra",
      +  "attachment",
      +  "terrain",
      +  "hand"
      +]
  4. Changed1 schema field changed
    • changedInput schema / properties / class / enum
      Previous value: -[
      -  "prop",
      -  "building",
      -  "vehicle",
      -  "character",
      -  "ultra",
      -  "attachment",
      -  "terrain"
      -]New value: +[
      +  "prop",
      +  "building",
      +  "vehicle",
      +  "character",
      +  "animal",
      +  "ultra",
      +  "attachment",
      +  "terrain"
      +]
  5. Changed1 schema field changed
    • changedInput schema / properties / class / enum
      Previous value: -[
      -  "prop",
      -  "building",
      -  "vehicle",
      -  "character",
      -  "ultra",
      -  "attachment"
      -]New value: +[
      +  "prop",
      +  "building",
      +  "vehicle",
      +  "character",
      +  "ultra",
      +  "attachment",
      +  "terrain"
      +]
  6. First observed

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does a lot: it discloses the no-account CDN access, the free/paid split, and the meaning of coverage states ('none', 'poor', 'filtered_out', 'unmatched_goals'). It also flags a real operational hazard — full detail at limit 50 can be rejected by some clients. It does not describe response shape or pagination beyond the schema's field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and trigger, then filter guidance, then result-interpretation rules. Every section is useful, but the pricing message spans two sentences that partially restate each other (free catalogue / paid HD edition).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter read tool with no annotations and no output schema, the description supplies the interpretive context an agent actually needs: what to do on bad coverage, what 'filtered_out' means, and when to use compact. Only the response row shape and sort semantics are left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and the description reinforces the highest-stakes filter semantics: max_triangles is framed as the mobile/performance lever and free/plan are framed as fields to read rather than assume. Niche parameters such as sort, kit, and class are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search the Polyfork catalogue of low-poly 3D assets for three.js') and scopes it against siblings by naming report_need as the fallback and pointing to get_asset for full detail. An agent can distinguish it from get_asset, list_kits, and find_matching without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger ('use this whenever the user needs a model for a scene, game or site'), an explicit alternative for misses ('offer report_need rather than substituting something unrelated'), and a filter rationale for mobile/performance targets. When-not guidance is present in the coverage-failure branch.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources