Skip to main content
Glama

configureNormalLayer

Configure normal map properties for 3D materials in Spline scenes by setting intensity, tiling, and applying normal map images to enhance surface detail and texture appearance.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sceneIdYesScene ID
materialIdYesMaterial ID
layerIdYesLayer ID
normalMapUrlYesURL to normal map image
intensityNoNormal map intensity
tilingNoNormal map tiling

Implementation Reference

  • The asynchronous handler function that implements the core logic of the 'configureNormalLayer' tool. It constructs layer parameters from the input (normalMapUrl, intensity, tiling) and sends a PUT request to the Spline API to update the specified material layer.
    async ({ sceneId, materialId, layerId, normalMapUrl, intensity, tiling }) => { try { const layerParams = { normalMapUrl, ...(intensity !== undefined && { intensity }), ...(tiling && { tiling }), }; await apiClient.request('PUT', `/scenes/${sceneId}/materials/${materialId}/layers/${layerId}`, { params: layerParams }); return { content: [ { type: 'text', text: `Normal layer ${layerId} configured successfully` } ] }; } catch (error) { return { content: [ { type: 'text', text: `Error configuring normal layer: ${error.message}` } ], isError: true }; } }
  • Zod-based input schema defining the parameters for the 'configureNormalLayer' tool: sceneId, materialId, layerId (required strings), normalMapUrl (URL), intensity (optional number default 1), and tiling (optional object with x/y).
    sceneId: z.string().min(1).describe('Scene ID'), materialId: z.string().min(1).describe('Material ID'), layerId: z.string().min(1).describe('Layer ID'), normalMapUrl: z.string().url().describe('URL to normal map image'), intensity: z.number().min(0).optional().default(1).describe('Normal map intensity'), tiling: z.object({ x: z.number().min(0).default(1).describe('X tiling'), y: z.number().min(0).default(1).describe('Y tiling'), }).optional().describe('Normal map tiling'), },
  • The complete registration of the 'configureNormalLayer' tool via server.tool(), including schema definition and inline handler function, within the registerAdvancedMaterialTools module.
    server.tool( 'configureNormalLayer', { sceneId: z.string().min(1).describe('Scene ID'), materialId: z.string().min(1).describe('Material ID'), layerId: z.string().min(1).describe('Layer ID'), normalMapUrl: z.string().url().describe('URL to normal map image'), intensity: z.number().min(0).optional().default(1).describe('Normal map intensity'), tiling: z.object({ x: z.number().min(0).default(1).describe('X tiling'), y: z.number().min(0).default(1).describe('Y tiling'), }).optional().describe('Normal map tiling'), }, async ({ sceneId, materialId, layerId, normalMapUrl, intensity, tiling }) => { try { const layerParams = { normalMapUrl, ...(intensity !== undefined && { intensity }), ...(tiling && { tiling }), }; await apiClient.request('PUT', `/scenes/${sceneId}/materials/${materialId}/layers/${layerId}`, { params: layerParams }); return { content: [ { type: 'text', text: `Normal layer ${layerId} configured successfully` } ] }; } catch (error) { return { content: [ { type: 'text', text: `Error configuring normal layer: ${error.message}` } ], isError: true }; } } );
  • src/index.js:97-97 (registration)
    Top-level registration call in the main server setup that invokes registerAdvancedMaterialTools(server), thereby registering the 'configureNormalLayer' tool along with other advanced material tools.
    registerAdvancedMaterialTools(server);
  • src/index.js:22-22 (registration)
    Import statement for the registerAdvancedMaterialTools function, which contains the 'configureNormalLayer' tool registration.
    import { registerAdvancedMaterialTools } from './tools/advanced-material-tools.js';

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aydinfer/spline-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server