@templite/mcp-server
v1.0.1
Published
MCP server for Templite CMS — 70+ tools for managing blocks, pages, templates, components, media and settings via Model Context Protocol
Maintainers
Readme
Templite MCP Server
MCP-сервер для управления Templite CMS через Model Context Protocol. Предоставляет 120+ инструментов для работы с блоками, страницами, шаблонами, компонентами, медиафайлами, городами, языками, переводами, пользователями и другими сущностями CMS.
Требования
- Node.js >= 18.0.0
- Доступ к Templite CMS API
- API-токен (создается в CMS: Settings → MCP или Profile → API tokens)
Быстрый старт (npx)
Без установки — запуск одной командой:
TEMPLITE_API_URL=https://your-site.com TEMPLITE_API_TOKEN=your-token npx -y @templite/mcp-serverУстановка
Глобально
npm install -g @templite/mcp-server
templite-mcpЛокально (в проект)
npm install @templite/mcp-server
npx templite-mcpПеременные окружения
| Переменная | Обязательная | По умолчанию | Описание |
|---|---|---|---|
| TEMPLITE_API_TOKEN | Да | — | Bearer-токен для авторизации в CMS API |
| TEMPLITE_API_URL | Да | — | Базовый URL CMS (например https://your-site.com) |
| TEMPLITE_DEBUG | Нет | 0 | 1 — включить логирование запросов в stderr |
Подключение к Claude Code
В файле ~/.claude/settings.json или .mcp.json проекта:
{
"mcpServers": {
"templite": {
"command": "npx",
"args": ["-y", "@templite/mcp-server"],
"env": {
"TEMPLITE_API_TOKEN": "your-token-here",
"TEMPLITE_API_URL": "https://your-site.com"
}
}
}
}Cursor / Windsurf
В .cursor/mcp.json или .windsurf/mcp.json:
{
"mcpServers": {
"templite": {
"command": "npx",
"args": ["-y", "@templite/mcp-server"],
"env": {
"TEMPLITE_API_TOKEN": "your-token-here",
"TEMPLITE_API_URL": "https://your-site.com"
}
}
}
}Архитектура
mcp-server/
├── index.js # Точка входа, регистрация всех tool-групп
├── package.json
└── src/
├── server.js # Создание McpServer + toolHandler (обёртка ответов)
├── client.js # TempliteClient — HTTP-клиент к CMS REST API
└── tools/
├── blocks.js # Блоки (CRUD, код, копирование)
├── block-fields.js # Поля блоков (CRUD)
├── block-tabs-sections.js # Вкладки и секции блоков
├── pages.js # Страницы, блоки на страницах, версии, кеш
├── page-types.js # Типы страниц и атрибуты
├── templates.js # Шаблоны страниц (CRUD)
├── template-fields.js # Поля шаблонов, код, вкладки, секции
├── components.js # Blade-компоненты (CRUD + код)
├── actions.js # Экшены (PHP-классы) + привязка к блокам
├── libraries.js # CSS/JS библиотеки (CRUD)
├── media.js # Медиафайлы (загрузка, список, удаление)
├── settings.js # Глобальные настройки CMS
├── global-fields.js # Структура настроек (страницы, секции, поля)
├── cache.js # Кеш и компиляция ассетов
├── presets.js # Пресеты блоков (CRUD)
├── cities.js # Города (CRUD, импорт, городские страницы)
├── languages.js # Языки (CRUD, порядок, язык по умолчанию)
├── translations.js # Переводы (страниц, блоков, глобальных настроек)
├── users.js # Пользователи сайта (CRUD, активация)
├── user-types.js # Типы пользователей (CRUD)
└── user-fields.js # Кастомные поля типов пользователейTempliteClient
HTTP-клиент (src/client.js) для взаимодействия с REST API CMS:
- Авторизация через статический Bearer-токен (без refresh-потока)
- Все запросы идут на
/api/cms/* - Таймаут: 30 секунд
- Автоматическая распаковка стандартной обёртки
{success, data, message} - Обработка ошибок: 401 (невалидный токен), 404, 422 (валидация), 403
toolHandler
Обёртка (src/server.js) для всех tool-хендлеров:
- Успех →
{ content: [{ type: "text", text: JSON.stringify(result) }] } - Ошибка →
{ content: [{ type: "text", text: "Error: ..." }], isError: true }
Инструменты (Tools)
Блоки (Blocks) — 7 инструментов
| Инструмент | Описание |
|---|---|
| list_blocks | Список всех блоков. Фильтры: block_type_id (1=Content, 2=Media, 3=Navigation, 4=Forms), search, limit |
| get_block | Получить блок по ID (число) или slug (строка). Возвращает полные данные: поля, вкладки, секции, код, экшены, библиотеки |
| create_block | Создать блок. Можно сразу передать fields (рекурсивно для вложенных array-полей) и library_ids |
| update_block | Обновить блок. Передавать только изменяемые поля. library_ids заменяет текущий список |
| delete_block | Удалить блок и все связанные поля, вкладки, секции, код |
| update_block_code | Обновить код блока: template (Blade), style (SCSS), script (JS). В шаблоне: {{ $fields['key'] }} |
| copy_block | Копировать блок со всеми полями, вкладками, секциями |
Поля блоков (Block Fields) — 3 инструмента
| Инструмент | Описание |
|---|---|
| add_block_field | Добавить поле к блоку. Для вложенных полей — parent_id (родитель type=array) |
| update_block_field | Обновить поле. Можно перемещать между вкладками/секциями через block_tab_id, block_section_id |
| remove_block_field | Удалить поле. Для array — рекурсивно удаляются все дочерние поля |
Типы полей: text, textfield, number, img, file, editor, tiptap, html, select, checkbox, radio, link, date, datetime, array, color, page, user
Вкладки и секции блоков (Block Tabs & Sections) — 8 инструментов
| Инструмент | Описание |
|---|---|
| create_block_tab | Создать вкладку. Параметры: name, order, columns (1-4), column_widths |
| update_block_tab | Обновить вкладку |
| delete_block_tab | Удалить вкладку (поля и секции отвязываются, не удаляются) |
| reorder_block_tabs | Изменить порядок вкладок: ids — массив ID в нужном порядке |
| create_block_section | Создать секцию. Можно привязать к вкладке через block_tab_id, указать column_index (0-3) |
| update_block_section | Обновить секцию |
| delete_block_section | Удалить секцию (поля отвязываются, не удаляются) |
| reorder_block_sections | Изменить порядок секций |
Страницы (Pages) — 15 инструментов
| Инструмент | Описание |
|---|---|
| create_page | Создать страницу. Параметры: title, alias, parent_id, type_id, template_page_id, template_data, status (published/draft/hidden), seo_data, publish_at, unpublish_at |
| update_page | Обновить страницу |
| get_page | Получить страницу по ID или alias/URL |
| list_pages | Список страниц. Фильтры: type_id, parent_id, status, search, limit |
| delete_page | Удалить страницу и все связанные блоки |
| copy_page | Копировать страницу со всеми блоками и данными |
| list_page_blocks | Список блоков на странице. Возвращает page_block_id, block_id, имя, порядок, статус, данные полей |
| add_block_to_page | Добавить блок на страницу с данными полей и порядком |
| update_block_data | Обновить данные полей блока на странице (по page_block_id, не block_id) |
| remove_block_from_page | Убрать блок со страницы |
| list_block_versions | Список версий данных блока на странице |
| restore_block_version | Восстановить версию данных блока |
| update_page_block_status | Изменить статус блока на странице (published/draft/hidden) |
| toggle_block_cache | Включить/выключить кеширование блока на странице |
| invalidate_block_cache | Сбросить кеш блока на странице |
Типы страниц (Page Types) — 8 инструментов
| Инструмент | Описание |
|---|---|
| list_page_types | Список всех типов страниц |
| get_page_type | Получить тип страницы по ID (с атрибутами) |
| create_page_type | Создать тип страницы: name, slug, template_page_id, settings |
| update_page_type | Обновить тип страницы |
| delete_page_type | Удалить тип (страницы не удаляются, теряют привязку) |
| add_page_type_attribute | Добавить атрибут к типу. Типы атрибутов: string, number, select, multi_select, boolean, date |
| update_page_type_attribute | Обновить атрибут типа |
| remove_page_type_attribute | Удалить атрибут (значения у страниц тоже удаляются) |
Шаблоны (Templates) — 4 инструмента
| Инструмент | Описание |
|---|---|
| list_templates | Список всех шаблонов |
| get_template | Получить шаблон по ID (с вкладками, полями, библиотеками) |
| create_template | Создать шаблон: name, slug, settings, library_ids |
| update_template | Обновить шаблон |
Поля шаблонов (Template Fields) — 8 инструментов
| Инструмент | Описание |
|---|---|
| list_template_fields | Список полей шаблона (дерево с вложенными для array) |
| add_template_field | Добавить поле к шаблону (те же типы что у блоков) |
| update_template_field | Обновить поле шаблона |
| remove_template_field | Удалить поле шаблона (рекурсивно для array) |
| get_template_code | Получить код шаблона: template (Blade), style (SCSS), script (JS) |
| update_template_code | Обновить код шаблона. В Blade-шаблоне: @yield('content') для области контента блоков |
| create_template_tab | Создать вкладку в шаблоне |
| create_template_section | Создать секцию в шаблоне |
Компоненты (Components) — 5 инструментов
| Инструмент | Описание |
|---|---|
| create_component | Создать Blade-компонент с кодом: code (Blade), style (SCSS), script (JS), params |
| update_component | Обновить компонент (метаданные и/или код) |
| delete_component | Удалить компонент и его файлы |
| get_component | Получить компонент по ID (с кодом) |
| list_components | Список компонентов. Фильтры: search, source (app/storage/vendor), limit |
Экшены (Actions) — 5 инструментов
| Инструмент | Описание |
|---|---|
| create_action | Создать экшен (PHP-класс для обработки форм, API-вызовов и т.д.) |
| update_action | Обновить экшен |
| list_actions | Список экшенов. Фильтры: search, source (app/storage/vendor), limit |
| attach_action | Привязать экшен к блоку (чтобы вызывать с фронтенда) |
| detach_action | Отвязать экшен от блока |
Библиотеки (Libraries) — 5 инструментов
| Инструмент | Описание |
|---|---|
| list_libraries | Список CSS/JS библиотек. Фильтры: active_only, search, limit |
| get_library | Получить библиотеку по ID (с CDN URL и конфигурацией) |
| create_library | Создать библиотеку: name, slug, version, js_cdn, css_cdn, load_strategy (local/cdn), active |
| update_library | Обновить библиотеку |
| delete_library | Удалить библиотеку |
Медиафайлы (Media) — 4 инструмента
| Инструмент | Описание |
|---|---|
| upload_file | Загрузить файл в медиатеку по серверному пути. Параметры: file_path, folder_id, alt, title |
| list_files | Список медиафайлов. Фильтры: type (image/video/document/archive/other), folder_id, search, limit |
| get_file | Получить метаданные файла по ID (URL, размеры, размер и т.д.) |
| delete_file | Удалить файл из хранилища и БД |
Настройки (Settings) — 2 инструмента
| Инструмент | Описание |
|---|---|
| get_settings | Получить полное дерево глобальных настроек CMS (страницы, секции, поля, значения) |
| update_settings | Обновить настройки. Формат: {key: value} или [{field_id, value}] (ID автоматически резолвятся в ключи) |
Кеш и ассеты (Cache & Assets) — 4 инструмента
| Инструмент | Описание |
|---|---|
| clear_cache | Очистить кеш CMS. Scope: all (по умолчанию), blocks, global, scss |
| compile_page_assets | Скомпилировать CSS/JS для конкретной страницы. Использовать после обновления кода блоков/шаблонов |
| compile_all_assets | Скомпилировать CSS/JS для ВСЕХ опубликованных страниц |
| rebuild_assets | Полная пересборка: очистка кеша + удаление скомпилированных файлов + рекомпиляция всех страниц |
Пресеты блоков (Presets) — 5 инструментов
| Инструмент | Описание |
|---|---|
| list_presets | Список пресетов. Фильтры: block_id, type (global/local), block_type_id, search, limit |
| get_preset | Получить пресет по ID (с полями блока) |
| create_preset | Создать пресет: name, slug, block_id, type (global — связанная ссылка, local — шаблон-копия), data (значения полей) |
| update_preset | Обновить пресет (тип нельзя менять после создания) |
| delete_preset | Удалить пресет (глобальные пресеты, привязанные к блокам на страницах, удалить нельзя) |
Города (Cities) — 12 инструментов
| Инструмент | Описание |
|---|---|
| list_cities | Список городов. Фильтры: search, is_active |
| get_city | Получить город по ID (координаты, контакты, доп. данные) |
| create_city | Создать город: name, slug, падежные формы, region, phone, address, email, coordinates (lat/lng), extra_data |
| update_city | Обновить город |
| delete_city | Удалить город и все его страничные переопределения |
| reorder_cities | Изменить порядок городов: items — массив {id, sort_order} |
| import_cities | Импортировать города из CSV/TXT файла |
| get_city_pages | Список городских переопределений для страницы |
| get_city_page | Получить переопределения страницы для конкретного города |
| update_city_page | Обновить городское переопределение: title, SEO, template data, status |
| materialize_city_page | Материализовать городскую страницу (создать независимую физическую страницу для города) |
| dematerialize_city_page | Демaterialизовать городскую страницу (вернуться к переопределениям) |
Языки (Languages) — 7 инструментов
| Инструмент | Описание |
|---|---|
| list_languages | Список языков. Фильтры: is_active |
| get_language | Получить язык по ID |
| create_language | Создать язык: code (уникальный, до 5 символов), name, is_default, is_active, order |
| update_language | Обновить язык |
| delete_language | Удалить язык (нельзя удалить язык по умолчанию) |
| reorder_languages | Изменить порядок языков: items — массив {id, order} |
| set_default_language | Установить язык по умолчанию |
Переводы (Translations) — 9 инструментов
| Инструмент | Описание |
|---|---|
| get_page_translation | Получить перевод страницы для языка: title, bread_title, seo_data, social_data |
| save_page_translation | Сохранить перевод страницы |
| get_block_translation | Получить перевод одного блока на странице |
| save_block_translation | Сохранить перевод блока: data (ключ-значение, совпадают с полями блока) |
| copy_block_from_default | Скопировать данные блока из языка по умолчанию как основу для перевода |
| get_block_translations | Получить переводы ВСЕХ блоков на странице (bulk). Возвращает объект по page_block_id |
| save_block_translations | Сохранить переводы нескольких блоков за раз: blocks — массив {page_block_id, data} |
| get_global_translations | Получить переводы глобальных настроек для языка |
| save_global_translations | Сохранить переводы глобальных настроек: values — {field_id: translated_value} |
Пользователи сайта (Users) — 6 инструментов
| Инструмент | Описание |
|---|---|
| list_users | Список пользователей. Фильтры: user_type_id, search, per_page |
| get_user | Получить пользователя по ID (с resolved custom fields) |
| create_user | Создать пользователя: user_type_id, name, email, password, avatar_id, data (кастомные поля), is_active |
| update_user | Обновить пользователя |
| delete_user | Удалить пользователя |
| toggle_user_active | Переключить статус активности пользователя |
Типы пользователей (User Types) — 5 инструментов
| Инструмент | Описание |
|---|---|
| list_user_types | Список типов пользователей (с количеством пользователей и полями) |
| get_user_type | Получить тип по ID (с permissions, settings, полями) |
| create_user_type | Создать тип: name, slug, guard (уникальный, нельзя менять после создания), module, permissions, settings, is_active |
| update_user_type | Обновить тип (guard нельзя менять) |
| delete_user_type | Удалить тип (нельзя, если есть пользователи этого типа) |
Поля пользователей (User Fields) — 5 инструментов
| Инструмент | Описание |
|---|---|
| list_user_fields | Список полей типа пользователя (дерево с вложенными для array) |
| create_user_field | Добавить поле к типу: name, key, type, parent_id (для вложенных), default_value, hint, data, tab, order |
| update_user_field | Обновить поле |
| delete_user_field | Удалить поле (рекурсивно для array) |
| reorder_user_fields | Изменить порядок полей: items — массив {id, order, tab} |
Ключевые концепции
Block vs Page Block
- Block — определение блока (шаблон, поля, код). ID блока =
block_id. - Page Block — экземпляр блока на конкретной странице (с заполненными данными). ID экземпляра =
page_block_id.
При обновлении данных блока на странице используйте update_block_data с page_block_id, а не block_id.
Вложенные поля (Array fields)
Поле типа array может содержать дочерние поля. При создании блока через create_block можно передать fields с вложенными children — они создадутся рекурсивно. При добавлении отдельных полей через add_block_field — указывайте parent_id.
Код блоков и шаблонов
- template — Blade PHP. В блоках:
{{ $fields['key'] }}для доступа к значениям полей. В шаблонах:@yield('content')для области блоков. - style — SCSS
- script — JavaScript
Типы блоков
| ID | Тип | |---|---| | 1 | Content | | 2 | Media | | 3 | Navigation | | 4 | Forms |
Статусы страниц
published(API: 1) — опубликованаdraft(API: 0) — черновикhidden(API: 0) — скрыта
Типы пресетов
global— связанная ссылка: изменения в пресете отражаются на всех использующих его блокахlocal— шаблон для копирования: данные копируются при добавлении, дальнейшие изменения пресета не влияют на блоки
