Skip to main content

Introduction

This project is two things in one repo.

MMCP — the Motion Model Context Protocol — is a backbone-agnostic HTTP contract for text- and constraint-driven motion generation models. A client (typically a DCC plugin like Blender, Maya, or Houdini, or a web tool) sends a structured request describing the character's skeleton, the desired motion in natural language, and any spatial constraints. The server returns the generated animation as a standard glTF 2.0 document.

motionmcp — the Python SDK in this repo — implements the server side of the protocol. You bring a model and a generate() method; it handles wire format, validation, glTF encoding, and the standard error envelope. A working server is about thirty lines.

pip install motionmcp-sdk

Goals

  • Vendor-neutral. Any motion-generation backbone — diffusion, transformer, hybrid — implements the same wire format.
  • DCC-friendly. Inputs are plain JSON. Outputs load into any tool that reads glTF.
  • Skeleton-respectful. The user's skeleton is the user's skeleton. No imposed canonical naming.
  • Hand-writable. A minimal request fits in five lines.

Non-goals (v1)

  • File uploads or binary buffers in the request.
  • Streaming or partial generation events.
  • Mesh data (skin weights, blend shapes). The protocol is pure motion.
  • Per-finger or facial animation primitives.

Officially supported implementations

The protocol is vendor-neutral, but the project ships and supports a reference set:

  • Server: motionmcp-kimodo — the Kimodo SOMA model behind the protocol. Run on your own hardware; install from source.
  • Server: Animatica Cloud — the hosted product. Same protocol, plus retargeting and managed compute.
  • Client: Proscenium for Blender — directable motion generation inside Blender 4.2+. Talks to any MMCP server.

See Servers & clients → for the full list and how to build your own.

How to read these docs

These docs are the canonical source for the protocol and the SDK. Everything you need to implement a client or a server is here — read in order, or jump straight in:

Which one do I need?

If you're…Start here
Building a server in PythonQuickstart (server)
Building a server in another languageConcepts + Reference
Writing a DCC plugin or web clientQuickstart (client)
Just curiousThe protocol, in one page

Conventions

Coordinate systemRight-handed, Y-up (matches glTF 2.0 §3.2)
Length unitMeters
Rotation formatQuaternion [x, y, z, w] (glTF 2.0 convention)
TimeFrame indices in the request; FPS published in the response
Joint identityJoint name (UTF-8 string, NFC-normalized, case-sensitive, unique within a skeleton)

The coordinate_system and units fields exist for forward compatibility but are required to be "right_handed_y_up" and "meters" in v1. See Coordinate systems for the conversion tables that DCC plugins use at the boundary.