Skip to main content
Glama

3D МКП

Тесты плагиновМашинописьЛицензия

Обзор

3D-MCP — это универсальная реализация Model Context Protocol для 3D-программного обеспечения. Она создает унифицированный интерфейс TypeScript для LLM, позволяющий им взаимодействовать с Blender, Maya, Unreal Engine и другими 3D-приложениями через единый согласованный API.

// LLMs use the same interface regardless of underlying 3D software
await tools.animation.createKeyframe({
  objectId: "cube_1",
  property: "rotation.x",
  time: 30,
  value: Math.PI/2
});

Related MCP server: MCP Base

Основная философия и проектные решения

3D-MCP построен на четырех взаимосвязанных архитектурных принципах, которые вместе создают единую систему для создания 3D-контента:

  1. Проектирование Entity-First : четко определенные сущности предметной области формируют основу всех операций, обеспечивая единообразное моделирование данных на разных платформах.

  2. Типобезопасные CRUD-операции : автоматическая генерация операций создания, чтения, обновления, удаления с полной проверкой типов.

  3. Уровень атомарных операций : минимальный набор платформенно-специфичных реализаций, которые обрабатывают основные операции.

  4. Компонуемая архитектура инструментов : сложная функциональность, созданная путем объединения атомарных операций платформенно-независимым способом.

Такая архитектура создает инверсию зависимостей, при которой детали реализации, специфичные для платформы, изолируются до атомарных операций, в то время как большая часть кодовой базы остается независимой от платформы.

┌─────────────────────────────────────────────────────────────────────────┐
│                             LLM / User API                              │
└───────────────────────────────────┬─────────────────────────────────────┘
                                    │ MCP Tool API
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                          Compound Operations                            │
│                                                                         │
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────────────┐  │
│  │ Modeling Tools  │  │ Animation Tools │  │ Rigging Tools           │  │
│  └─────────────────┘  └─────────────────┘  └─────────────────────────┘  │
└───────────────────────────────────┬─────────────────────────────────────┘
                                    │ Implemented by
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                           Atomic Operations                             │
│                                                                         │
│  ┌─────────── Entity CRUD ────────────┐ ┌────────── Non-CRUD ─────────┐ │ 
│  │ create{Entity}s update{Entity}s ...│ │  select, undo, redo, etc.   │ │  
│  └────────────────────────────────────┘ └─────────────────────────────┘ │
└───────────────────────────────────┬─────────────────────────────────────┘
                                    │ Plug-in Server Request
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                       Platform-Specific Adapters                        │
│                                                                         │
│  ┌──── Blender ────┐  ┌────── Maya ─────┐  ┌─── Unreal Engine ────┐     │
│  │ createKeyframes │  │ createKeyframes │  │ createKeyframes      │     │    
│  └─────────────────┘  └─────────────────┘  └──────────────────────┘     │
└─────────────────────────────────────────────────────────────────────────┘

Почему именно эти дизайнерские решения?

Проект Entity-First был выбран по следующим причинам:

  • 3D-приложения используют разные объектные модели, но общие основные концепции (сетки, материалы, анимация)

  • Схемы Zod предоставляют единый источник истины для проверки, типизации и документирования.

  • Строгая типизация выявляет ошибки во время компиляции, а не во время выполнения

  • Богатые метаданные позволяют ИИ лучше понимать объекты домена

Операции CRUD как основа, потому что:

  • Они четко соответствуют тому, что 3D-приложениям необходимо делать с сущностями.

  • Стандартизированные шаблоны снижают когнитивные издержки

  • Автоматическая генерация устраняет повторяющийся код с помощью createCrudOperations

  • Каждая сущность автоматически получает одинаковый согласованный интерфейс.

Разделение атомарного и составного инструмента по следующим причинам:

  • Только атомарные инструменты требуют реализации на конкретной платформе (~20% кодовой базы)

  • Составные инструменты работают на всех платформах без изменений (~80% кодовой базы)

  • Новым платформам необходимо реализовать только атомарные операции, чтобы получить всю функциональность

  • Поддерживаемая архитектура с четким разделением задач

Техническая Архитектура

1. Архитектура CRUD, ориентированная на сущности

Основой системы является богатая система типов доменных сущностей, которая генерирует операции CRUD:

// Define entities with rich metadata using Zod
export const Mesh = NodeBase.extend({
  vertices: z.array(Tensor.VEC3).describe("Array of vertex positions [x, y, z]"),
  normals: z.array(Tensor.VEC3).optional().describe("Array of normal vectors"),
  // ... other properties
});

// CRUD operations generated automatically from entity schemas
const entityCruds = createCrudOperations(ModelEntities);
// => Creates createMeshs, getMeshs, updateMeshs, deleteMeshs, listMeshs

// All operations preserve complete type information
await tool.createRigControls.execute({
  name: "arm_ctrl",          
  shape: "cube",            // TypeScript error if not a valid enum value
  targetJointIds: ["joint1"], // Must be string array
  color: [0.2, 0.4, 1],     // Must match Color schema format
  // IDE autocomplete shows all required/optional fields
});

Схемы сущностей обеспечивают:

  • Проверка схемы : проверка параметров во время выполнения с подробными сообщениями об ошибках

  • Информация о типе : Полные типы TypeScript для помощи IDE

  • Документация : Самодокументируемый API с описаниями

  • Генерация кода : шаблоны для платформенно-специфических реализаций

Схема архитектуры сущности

┌──────────────────────────────────────────────────────────────┐
│                Core Entity Definitions                       │
│                                                              │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐   │
│  │ BaseEntity  │  │ NodeBase    │  │ Other Core Entities │   │
│  └─────────────┘  └─────────────┘  └─────────────────────┘   │
└──────────────────────────────────────────────────────────────┘
                           ▲
                           │ extends
                           │
┌──────────────────────────────────────────────────────────────┐
│                Domain-Specific Entities                      │
│                                                              │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐   │
│  │ Model       │  │ Animation   │  │ Rigging             │   │
│  │ Entities    │  │ Entities    │  │ Entities            │   │
│  └─────────────┘  └─────────────┘  └─────────────────────┘   │
└──────────────────────────────────────────────────────────────┘
                           │
                           │ input to
                           ▼
┌──────────────────────────────────────────────────────────────┐
│                Automatic CRUD Generation                     │
│                                                              │
│  ┌─────────────────────────────────────────────────────────┐ │
│  │ createCrudOperations(Entities)                          │ │
│  └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
                           │
                           │ generates
                           ▼
┌──────────────────────────────────────────────────────────────┐
│                     Atomic Operations                        │
│                                                              │
│  ┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐    │
│  │ create{Entity}s │ │ get{Entity}s │ │ update{Entity}s │ .. │
│  └─────────────────┘ └──────────────┘ └─────────────────┘    │
└──────────────────────────────────────────────────────────────┘
                           │
                           │ foundation for
                           ▼
┌──────────────────────────────────────────────────────────────┐
│                    Compound Operations                       │
│                                                              │
│  ┌─────────────────────────────────────────────────────────┐ │
│  │ No need for platform-specific code. Use atomic ops only.│ │
│  └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

2. Архитектура составного инструмента

Система создает четкое разделение между атомарными и составными операциями:

// From compounded.ts - Higher level operations composed from atomic operations
createIKFKSwitch: defineCompoundTool({
  // ...parameter and return definitions...
  execute: async (params) => {
    // Create IK chain using atomic operations
    const ikChainResult = await tool.createIKChains.execute({/*...*/});
    
    // Create control with full type-checking
    const ikControlResult = await tool.createRigControls.execute({
      name: `${switchName}_IK_CTRL`,
      shape: ikControlShape,  // Type-checked against schema
      targetJointIds: [jointIds[jointIds.length - 1]],
      color: ikColor,
      // ...other parameters
    });
    
    // Position the control at the end effector
    await tool.batchTransform.execute({/*...*/});
    
    // Create constraints to connect the system
    await tool.createConstraint.execute({/*...*/});
    
    // Return standardized response with created IDs
    return {
      success: true,
      switchControlId: switchControlResult.id,
      ikControlId: ikControlResult.id,
      fkControlIds,
      poleVectorId: poleVectorId || undefined,
    };
  }
})

Такая архитектура обеспечивает ряд технических преимуществ:

  1. Атомарные операции (~20% системы):

    • Напрямую взаимодействуйте с API платформы

    • Нужны реализации для конкретных платформ

    • Сосредоточьтесь на операциях с отдельными сущностями (создание, чтение, обновление, удаление)

    • Форма минимальной реализации, необходимой для новых платформ

  2. Сложные операции (~80% системы):

    • Построен полностью из атомных операций

    • Никакого платформенно-специфического кода

    • Реализовать концепции доменов более высокого уровня

    • Работает на любой платформе без модификации

Поток композиции инструмента

┌─────────────────────────────────────────────────────────────────────────┐
│                        High-Level Tool Definition                       │
└──────────────────────────────────────┬──────────────────────────────────┘
                                       │
                                       ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                         Compound Tool Pattern                           │
│                                                                         │
│  ┌──────────────────────────────────────────────────────────────────┐   │
│  │ defineCompoundTool({                                             │   │
│  │   description: string,                                           │   │
│  │   parameters: zod.Schema,                                        │   │
│  │   returns: zod.Schema,                                           │   │
│  │   execute: async (params) => {                                   │   │
│  │     // Composed entirely from atomic operations                  │   │
│  │     await tool.atomicOperation1.execute({...});                  │   │
│  │     await tool.atomicOperation2.execute({...});                  │   │
│  │     return { success: true, ...results };                        │   │
│  │   }                                                              │   │
│  │ })                                                               │   │
│  └──────────────────────────────────────────────────────────────────┘   │
└───────────────────────────────────┬─────────────────────────────────────┘
                                    │ Plug-in Server Request
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                         Platform Adaptation                             │
│                                                                         │
│  ┌──────────────────────────┐  ┌─────────────────────────────────────┐  │
│  │ Blender Implementation   │  │ Maya Implementation                 │  │
│  │ of Atomic Operations     │  │ of Atomic Operations                │  │
│  └──────────────────────────┘  └─────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────────────┘

Ключевые файлы для архитектуры составного инструмента:

  • composited.ts: Инструменты моделирования составных частей

  • composited.ts: Инструменты для создания составной анимации

  • composited.ts: Инструменты для комбинированного такелажа

3. Конвейер генерации кода

Система автоматически генерирует реализации для конкретных платформ из определений TypeScript:

┌─────────────────┐     ┌────────────────────┐     ┌─────────────────────────┐
│ Entity Schemas  │     │ Schema             │     │ Platform-Specific Code  │
│ & Tools (TS)    │ ──> │ Extraction (TS)    │ ──> │ (Python/C++/etc.)       │
└─────────────────┘     └────────────────────┘     └─────────────────────────┘
      │                        │                             │
      │                        │                             │
      ▼                        ▼                             ▼
┌─────────────────┐     ┌────────────────────┐     ┌─────────────────────────┐
│ Type            │     │ Parameter          │     │ Implementation          │
│ Definitions     │     │ Validation         │     │ Templates               │
└─────────────────┘     └────────────────────┘     └─────────────────────────┘

Ключевые аспекты системы генерации:

  • Извлечение сущностей : анализирует схемы Zod для понимания структуры сущностей.

  • Сопоставление параметров : преобразует типы TypeScript в собственные типы платформы.

  • Генерация проверки : создает проверку параметров на целевых языках.

  • Шаблоны реализации : предоставляют шаблоны кода, специфичные для платформы.

Система кодогенерации реализована в:

  • plugin-codegen.ts : Основной скрипт генерации кода

  • extract-schemas.ts : извлекает схемы Zod из файлов TypeScript во временные файлы JSON.

4. Организация домена

Система организована по доменам, которые отражают рабочие процессы создания 3D-контента:

  • Ядро : базовые сущности и операции, используемые во всех доменах.

  • Моделирование : создание сетки, редактирование и топологические операции

  • Анимация : ключевые кадры, кривые, клипы и управление анимацией

  • Оснастка : скелетные системы, элементы управления и деформации

  • Рендеринг : материалы, освещение и настройки рендеринга

Каждый домен следует одной и той же организационной схеме:

  • entity.ts : Определения сущностей, специфичные для домена

  • atomic.ts : Атомарные операции для доменных сущностей

  • compounded.ts : высокоуровневые операции, созданные на основе атомарных инструментов

Диаграмма структуры домена

packages/src/tool/
│
├── core/                  # Core shared components
│   ├── entity.ts          # Base entities all domains use
│   ├── utils.ts           # Shared utilities including CRUD generation
│   └── ...
│
├── model/                 # Modeling domain
│   ├── entity.ts          # Mesh, Vertex, Face, etc.
│   ├── atomic.ts          # Atomic modeling operations
│   ├── compounded.ts      # Higher-level modeling tools
│   └── ...
│
├── animation/             # Animation domain
│   ├── entity.ts          # Keyframe, AnimCurve, Clip, etc.
│   ├── atomic.ts          # Atomic animation operations
│   ├── compounded.ts      # Higher-level animation tools
│   └── ...
│
├── rig/                   # Rigging domain
│   ├── entity.ts          # Joint, IKChain, Control, etc.
│   ├── atomic.ts          # Atomic rigging operations
│   ├── compounded.ts      # Higher-level rigging tools
│   └── ...
│
└── rendering/             # Rendering domain
    ├── entity.ts          # Camera, Light, RenderSettings, etc.
    ├── atomic.ts          # Atomic rendering operations
    ├── compounded.ts      # Higher-level rendering tools
    └── ...

5. Архитектура CRUD, ориентированная на сущности

Система реализует сложный подход, ориентированный на сущности, где:

  1. Сущности как модели доменов : каждый домен (моделирование, анимация, оснастка) определяет свои основные сущности, которые представляют его фундаментальные концепции. Они реализованы как схемы Zod с богатой информацией о типах.

  2. CRUD как основа : каждая сущность автоматически получает полный набор операций CRUD (создание, чтение, обновление, удаление) через утилиту createCrudOperations :

// Each domain starts with CRUD operations for all its entities
const entityCruds = createCrudOperations(ModelEntities);

const modelAtomicTools = {
  ...entityCruds,  // Foundation of all atomic tools
  // Domain-specific operations build on this foundation
}
  1. Повторное использование и наследование сущностей : основные сущности, определенные в core/entity.ts расширяются сущностями, специфичными для домена, что способствует повторному использованию кода и единообразному проектированию во всех доменах.

  2. Архитектура, вдохновленная DDD : система следует принципам проектирования на основе предметной области, организуя код вокруг сущностей и агрегатов предметной области, а не технических проблем.

Такая архитектура обеспечивает несколько ключевых преимуществ:

  • Согласованность : все сущности имеют одинаковые шаблоны для основных операций.

  • Сокращенный шаблон : операции CRUD генерируются автоматически

  • Четкая организация : инструменты организованы вокруг доменных сущностей.

  • Разделение задач : каждый домен управляет своими собственными сущностями, используя при этом общие шаблоны.

Сочетание расширенных моделей сущностей с автоматическими операциями CRUD создает надежную основу, которая упрощает разработку, сохраняя при этом гибкость для операций, специфичных для предметной области.

Начиная

# Install dependencies
bun install

# Run the server
bun run index.ts

# Extract schemas and generate plugins
bun run packages/scripts/plugin-codegen.ts

Рабочий процесс разработки

  1. Определение сущностей : создание или расширение схем сущностей в src/tool/<domain>/entity.ts

  2. Генерация CRUD : использование createCrudOperations для генерации атомарных операций.

  3. Создание составных инструментов : создание высокоуровневых операций из атомарных инструментов.

  4. Генерация плагинов : запуск генератора кода для создания реализаций для конкретных платформ.

Внося вклад

Архитектурные решения 3D-MCP делают его уникально расширяемым:

  1. Добавить новые сущности : определить новые сущности и автоматически получить операции CRUD

  2. Добавить новые составные инструменты : объединить существующие атомарные операции для создания новых функций.

  3. Добавить новые платформы : реализовать интерфейсы атомарных инструментов в новом плагине.

Более подробную информацию о том, как внести свой вклад, можно найти в нашем руководстве по внесению вклада.


3D-MCP: единый API для управления всем 3D-программным обеспечением

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/team-plask/3d-mcp'

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