Skip to main content
Glama
Spline MCP Server
by aydinfer

Spline.design MCP Server (Archived)

This project is archived. Spline.design does not provide a public REST API, making most of this server's functionality non-operational. See below for details.

Why archived

This MCP server was built to programmatically control Spline.design 3D scenes through Claude. However, Spline does not offer a public REST API for scene manipulation. The ~130 tools that call api.spline.design target endpoints that don't exist and will fail with network errors.

Spline's actual developer tools are:

  • Code API — A client-side JavaScript runtime (@splinetool/runtime) that only works in a browser with a canvas element. It can manipulate objects in exported scenes but cannot create scenes or objects.

  • Real-time API — A feature inside the Spline editor for making outbound API calls from Spline to external services. Not an inbound API.

Neither of these enables the kind of server-side programmatic control this MCP server attempts.

What does work

10 code generation tools generate @splinetool/runtime code for Vanilla JS, React, and Next.js. However, Claude can already write this code without an MCP server, making these tools redundant.

Related MCP server: BlenderMCP

Installation

Using npx (for Claude Desktop)

Add this to your Claude Desktop MCP config:

{
  "mcpServers": {
    "spline": {
      "command": "npx",
      "args": ["-y", "spline-mcp-server"]
    }
  }
}

Local development

git clone https://github.com/aydinfer/spline-mcp-server.git
cd spline-mcp-server
npm install
npm start

What you can do with it

Ask Claude to generate Spline runtime code for your projects:

  • "Generate a React component that loads my Spline scene and adds click handlers to objects"

  • "Write animation code that rotates an object on hover"

  • "Create an interactive scene with variable-based state management"

  • "Generate Next.js code with Spline integration"

Claude will use the code generation tools to produce working @splinetool/runtime code you can use directly in your web projects.

Spline Runtime API Reference

The @splinetool/runtime provides these methods (which the code generation tools target):

Method

Description

findObjectByName(name)

Find an object by name

findObjectById(uuid)

Find an object by ID

getAllObjects()

List all scene objects

emitEvent(event, nameOrUuid)

Trigger an event on an object

addEventListener(event, cb)

Listen for scene events

setVariable(name, value)

Set a scene variable

getVariable(name)

Get a scene variable

setZoom(value)

Control zoom level

play() / stop()

Control rendering

Objects expose position, rotation, scale, visible, and intensity properties.

Project Structure

spline-mcp-server/
├── src/
│   ├── tools/             # MCP tool implementations
│   │   └── design/        # Advanced design tools (pending API)
│   ├── utils/             # API client and runtime manager
│   ├── prompts/           # Prompt templates
│   ├── resources/         # MCP resources
│   └── index.js           # Main server entry point
├── bin/cli.js             # CLI entry point
├── docs/                  # Documentation
└── package.json

License

This project is licensed under the MIT License — see the LICENSE file for details.

Available Tools

73 tools
addCameraD

Inputs: sceneId (required), name, position, target, +2 more.

addDirectionalLightD

Inputs: sceneId (required), name, position, color, +2 more.

addMaterialLayerD

Inputs: sceneId (required), materialId (required), layerType (required), name (required), +5 more.

addPhysicsBodyD

Inputs: sceneId (required), objectId (required), type, mass, +1 more.

applyMaterialD

Inputs: sceneId (required), objectId (required), materialId (required).

configureAnimationActionD

Inputs: sceneId (required), actionId (required), objectId (required), animationType (required), +3 more.

configureApiD

Inputs: sceneId (required), name (required), method (required), url (required), +5 more.

configureApiRequestActionD

Inputs: sceneId (required), actionId (required), apiId (required), mappings.

configureCameraActionD

Inputs: sceneId (required), actionId (required), cameraId (required), duration, +1 more.

configureColorLayerD

Inputs: sceneId (required), materialId (required), layerId (required), color (required), +1 more.

configureConditionalActionD

Inputs: sceneId (required), actionId (required), variableName (required), condition (required), +3 more.

configureEventParametersD

Inputs: sceneId (required), eventId (required), eventType (required), keyCode, +7 more.

configureFogD

Inputs: sceneId (required), enabled, color, density, +2 more.

configureFresnelLayerD

Inputs: sceneId (required), materialId (required), layerId (required), color (required), +3 more.

configureGlassLayerD

Inputs: sceneId (required), materialId (required), layerId (required), tint, +3 more.

configureGradientLayerD

Inputs: sceneId (required), materialId (required), layerId (required), gradientType (required), +3 more.

configureImageLayerD

Inputs: sceneId (required), materialId (required), layerId (required), imageUrl (required), +3 more.

configureMatcapLayerD

Inputs: sceneId (required), materialId (required), layerId (required), matcapImageUrl (required), +1 more.

configureNormalLayerD

Inputs: sceneId (required), materialId (required), layerId (required), normalMapUrl (required), +2 more.

configureOpenAID

Inputs: sceneId (required), prompt (required), model, apiKey, +2 more.

configurePostProcessingD

Inputs: sceneId (required), bloom, depthOfField.

configureSoundActionD

Inputs: sceneId (required), actionId (required), soundUrl (required), volume, +3 more.

configureTransitionActionD

Inputs: sceneId (required), actionId (required), targetState (required), duration, +2 more.

configureVariableActionD

Inputs: sceneId (required), actionId (required), variableName (required), operation (required), +1 more.

create3DTextD

Inputs: sceneId (required), text (required), name, position, +4 more.

createActionD

Inputs: sceneId (required), eventId (required), type (required), name (required), +2 more.

createComprehensiveEventD

Inputs: sceneId (required), name (required), type (required), actions (required), +2 more.

createEventD

Inputs: sceneId (required), name (required), type (required), actions (required), +1 more.

createLayeredMaterialD

Inputs: sceneId (required), name (required), layers (required), baseType, +1 more.

createMaterialD

Inputs: sceneId (required), name (required), type (required), color, +10 more.

createObjectD

Inputs: sceneId (required), type (required), name (required), position, +4 more.

createParametricObjectD

Inputs: sceneId (required), type (required), name (required), position, +1 more.

createParticleSystemD

Inputs: sceneId (required), name, position, emissionRate, +5 more.

createStateD

Inputs: sceneId (required), name (required), properties (required), transitionDuration, +1 more.

createWebhookD

Inputs: sceneId (required), name (required), parameterMappings.

deleteActionD

Inputs: sceneId (required), eventId (required), actionId (required).

deleteApiD

Inputs: sceneId (required), apiId (required).

deleteMaterialLayerD

Inputs: sceneId (required), materialId (required), layerId (required).

deleteObjectD

Inputs: sceneId (required), objectId (required).

deleteWebhookD

Inputs: sceneId (required), webhookId (required).

exportSceneCodeD

Inputs: sceneId (required), format.

generateAnimationCodeD

Inputs: sceneId (required), objectId (required), animationType (required), duration, +3 more.

generateComprehensiveExampleD

Inputs: sceneId (required).

generateEmbedCodeD

Inputs: sceneId (required), width, height, frameBorder.

generateEventListenerCodeD

Inputs: sceneId (required), eventName (required).

generateObjectCodeD

Inputs: sceneId (required), objectId (required), action (required), params.

generateReactComponentD

Inputs: sceneId (required), componentName, interactivity, responsive, +1 more.

generateSceneInteractionCodeD

Inputs: sceneId (required), interactionType (required), options.

generateTextWithOpenAID

Inputs: prompt (required), model, maxTokens, temperature.

generateVariableCodeD

Inputs: sceneId (required), variableName (required), value.

getApisD

Inputs: sceneId (required).

getEventDetailsD

Inputs: sceneId (required), eventId (required).

getEventsD

Inputs: sceneId (required).

getMaterialDetailsD

Inputs: sceneId (required), materialId (required).

getMaterialsD

Inputs: sceneId (required).

getObjectDetailsD

Inputs: sceneId (required), objectId (required).

getObjectsD

Inputs: sceneId (required).

getRuntimeSetupD

Inputs: no named parameters.

getSceneD

Inputs: sceneId (required).

getScenesD

Inputs: projectId, limit, offset.

getStateDetailsD

Inputs: sceneId (required), stateId (required).

getStatesD

Inputs: sceneId (required).

getVariableD

Inputs: sceneId (required), variableName (required).

getWebhooksD

Inputs: sceneId (required).

listActionsD

Inputs: sceneId (required), eventId (required).

listMaterialLayersD

Inputs: sceneId (required), materialId (required).

reorderMaterialLayersD

Inputs: sceneId (required), materialId (required), layerOrder (required).

setVariableD

Inputs: sceneId (required), variableName (required), variableType (required), value.

triggerEventD

Inputs: sceneId (required), eventId (required), eventData.

triggerStateD

Inputs: sceneId (required), stateId (required).

triggerWebhookD

Inputs: sceneId (required), webhookId (required), data (required).

updateMaterialD

Inputs: sceneId (required), materialId (required), color, roughness, +9 more.

updateObjectD

Inputs: sceneId (required), objectId (required), position, rotation, +4 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    D1.7/5.0

    Scored across 73 tools

    Disambiguation3/5

    The tools cover distinct aspects of 3D scene creation and management, but there's significant overlap in configuration tools (e.g., configureApi vs configureApiRequestAction) and creation tools (createEvent vs createComprehensiveEvent). Without descriptions, it's unclear how these differ, leading to potential confusion for agents trying to select the right tool.

    Naming Consistency4/5

    Most tools follow a consistent verb_noun pattern (e.g., addCamera, createObject, getMaterials), with clear action prefixes like add, create, configure, get, delete, update, generate, and list. Minor deviations exist (e.g., exportSceneCode vs generateEmbedCode), but the overall naming is predictable and readable.

    Tool Count2/5

    With 73 tools, this is an extremely large set that feels overwhelming for a single server. While 3D scene creation is a complex domain, the high count suggests fragmentation or redundancy, making it difficult for agents to navigate and increasing the risk of misselection.

    Completeness4/5

    The tool set appears to cover a comprehensive range of operations for 3D scene management, including creation, configuration, retrieval, updating, and deletion of objects, materials, events, APIs, and more. There's good CRUD coverage (e.g., createObject, getObjects, updateObject, deleteObject), though some gaps might exist in specific subdomains like animation or physics.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers