npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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

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 — шаблон для копирования: данные копируются при добавлении, дальнейшие изменения пресета не влияют на блоки