Skip to main content
Glama

Make a normal map of an image

createNormalMap

Make the normal map of an image, for 2.5D lighting: a lossless WebP of the same size and alpha as the image (transparent pixels are flat), in the OpenGL convention (red = right, green = up, blue = towards the viewer; Unity and Godot read it as is, Unreal expects green flipped). Pixel art gets one normal per art pixel, and the map of a seamless tile tiles the same way. An image you generated on Ludo is read with its type and pixel grid; for any other image pixel art is detected. Free, and limited to 20 calls per 5 minutes, 120 an hour and 1000 a day (HTTP 429 beyond). To get maps with new images or spritesheets, pass save_normals: true to the generation instead. The image is uploaded and validated, and an image larger than 15MB is rejected with HTTP 400. Async generation job: returns {id, status} - poll getApiJob (job and credit contract: see the server instructions).

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "requestBody": "<requestBody>"
    },
    "name": "createNormalMap"
  }
}

Input Schema

NameRequiredDescriptionDefault
requestBodyYesPayload for making the normal map of an image

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false, non-idempotent) by disclosing the concrete rate limits and the resulting HTTP 429, the 15MB rejection with HTTP 400, the lossless WebP output with alpha handling, and the async job contract returning {id, status}. These are the operational facts an agent actually needs before calling.

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 the output definition, then constraints, then limits, then job contract - a sensible order. It is a dense single paragraph with some repetition of the schema's note about Ludo-generated images, which is the only real slack.

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

Completeness5/5

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

No output schema exists, yet the description fully specifies the return value ({id, status}), the polling path, byte and rate limits, and the output format. Nothing material is missing for a single-parameter async generation tool.

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 100%, so the baseline is 3, but the description adds real interpretive semantics: the image is rendered per art pixel for pixel art, transparent pixels are flat, and non-Ludo images get pixel-art detection. That meaningfully changes how an agent should prepare the `image` input beyond what the schema states.

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 ('Make the normal map of an image') and immediately qualifies the artifact produced (lossless WebP, same size and alpha, OpenGL convention). This is clearly distinguishable from siblings like editImage, convertToPixelArt, or upscaleImage.

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?

Explicitly routes the agent away from this tool when the goal is maps for new images or spritesheets, naming the alternative parameter to use instead (save_normals: true on generation). It also names the required follow-up tool for the async job (getApiJob), leaving no inference needed about the workflow.

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.