# TemplatesSearchServer

Поиск по шаблонам кода 1С и проектная память.

## Назначение

TemplatesSearchServer предоставляет ИИ библиотеку готовых шаблонов и паттернов кода 1С, а также проектную память для хранения заметок и решений. Сервер содержит публичные шаблоны и позволяет добавлять собственные — как через веб-интерфейс, так и программно через MCP-инструменты.

## Возможности

ИИ получает инструменты для:

* Поиска типовых шаблонов кода (гибридный: векторный + полнотекстовый)
* Просмотра каталога всех шаблонов и получения конкретного шаблона по ID
* Добавления новых шаблонов прямо из чата
* Сохранения заметок, решений и наблюдений в проектную память
* Поиска по памяти с помощью семантического поиска

## Примеры использования

**Шаблоны кода:**

* "Как обойти результат запроса?"
* "Покажи шаблон обработки проведения документа"
* "Как правильно работать с транзакциями?"
* "Шаблон формы с динамическим списком"

**Проектная память:**

* "Запомни, что в этом проекте мы используем БСП 3.1"
* "Что мы решили по архитектуре обменов?"
* "Сохрани решение по обработке ошибок в HTTP-сервисах"

## Особенности

* Содержит публичные шаблоны с [fastcode.im](https://fastcode.im/Templates)
* **Веб-интерфейс** для управления шаблонами и заметками: `http://localhost:8004/extend/`
* Добавление собственных шаблонов через веб-интерфейс или MCP
* **Проектная память** — ИИ может сохранять и извлекать заметки между сессиями
* Гибридный поиск: комбинация векторного (семантического) и полнотекстового

## Доступные инструменты MCP

ИИ получает следующие инструменты:

| Инструмент       | Описание                                                      |
| ---------------- | ------------------------------------------------------------- |
| `templatesearch` | Гибридный поиск шаблонов кода по описанию или ключевым словам |
| `list_templates` | Список всех шаблонов (ID и описание, без кода)                |
| `get_template`   | Получение полного шаблона по ID (с исходным кодом)            |
| `add_template`   | Добавление нового шаблона с автоматической индексацией        |
| `remember`       | Сохранение заметки в проектную память                         |
| `recall`         | Семантический поиск по проектной памяти                       |

***

### templatesearch

Выполняет гибридный поиск по библиотеке шаблонов кода 1С: комбинирует векторный (семантический) и полнотекстовый поиск. Запросы принимаются на русском языке.

| Параметр | Тип    | Обязательный | Описание                                                               |
| -------- | ------ | ------------ | ---------------------------------------------------------------------- |
| `query`  | string | да           | Поисковый запрос — описание нужной функциональности или ключевые слова |

**Возврат**: Отформатированная строка с найденными шаблонами (название, описание, код).

**Логика поиска** зависит от длины запроса:

* 1 слово — сначала полнотекстовый, затем векторный поиск
* 2–3 слова — сначала векторный, затем полнотекстовый поиск
* 4+ слов — только векторный поиск

***

### list\_templates

Возвращает список всех шаблонов в базе — ID и описание. Исходный код не включается; для получения кода используйте `get_template`.

**Параметры:** нет

**Возврат**: JSON-массив объектов `{id, description}`.

**Пример ответа:**

```json
[
  {"id": "1", "description": "Обход результата запроса с выборкой"},
  {"id": "2", "description": "Транзакция с обработкой ошибок"}
]
```

***

### get\_template

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

| Параметр      | Тип    | Обязательный | Описание                         |
| ------------- | ------ | ------------ | -------------------------------- |
| `template_id` | string | да           | Идентификатор шаблона (числовой) |

**Возврат**: JSON-объект `{id, description, code}`.

**Пример ответа:**

```json
{
  "id": "1",
  "description": "Обход результата запроса с выборкой",
  "code": "Выборка = Запрос.Выполнить().Выбрать();\nПока Выборка.Следующий() Цикл\n    // Обработка строки\nКонецЦикла;"
}
```

***

### add\_template

Добавляет новый шаблон в базу данных и автоматически индексирует его для поиска. Переиндексация или перезапуск не требуются — шаблон сразу доступен через `templatesearch`.

| Параметр      | Тип    | Обязательный | Описание                                         |
| ------------- | ------ | ------------ | ------------------------------------------------ |
| `description` | string | да           | Подробное описание шаблона (минимум 10 символов) |
| `code`        | string | да           | Исходный код на языке 1С (минимум 10 символов)   |

**Возврат**: JSON `{success, message, id}`.

**Пример ответа (успех):**

```json
{"success": true, "message": "Шаблон успешно добавлен (ID: 42)", "id": 42}
```

**Валидация:**

* Описание и код должны содержать минимум 10 символов каждый
* При несоблюдении — `success: false` с описанием ошибки

***

### remember

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

| Параметр  | Тип    | Обязательный | Описание                                                          |
| --------- | ------ | ------------ | ----------------------------------------------------------------- |
| `content` | string | да           | Текст заметки — решение, наблюдение или факт (минимум 5 символов) |

**Возврат**: JSON `{success, message, id}`.

**Пример ответа:**

```json
{"success": true, "message": "Запомнено (ID: 7)", "id": 7}
```

***

### recall

Выполняет семантический (векторный) поиск по проектной памяти. Находит заметки, близкие по смыслу к запросу.

| Параметр | Тип    | Обязательный | Описание                                        |
| -------- | ------ | ------------ | ----------------------------------------------- |
| `query`  | string | да           | Что нужно вспомнить (на русском или английском) |

**Возврат**: Отформатированный текст с найденными заметками или сообщение об отсутствии результатов.

**Пример ответа:**

```
**Заметка #3:**
В проекте используется БСП 3.1.8, обмен через EnterpriseData
---
**Заметка #7:**
Решили использовать фоновые задания для загрузки из внешних систем
```

## Веб-интерфейс

После запуска сервера доступен веб-интерфейс:

```
http://localhost:8004/extend/
```

**Шаблоны** (`/extend/`):

* Просмотр, поиск, добавление, редактирование и удаление шаблонов

**Память** (`/extend/memory`):

* Просмотр всех заметок
* Семантический поиск по заметкам
* Добавление и удаление заметок

## Требования

* Docker Desktop с WSL2
* Лицензионный ключ
* Embedding модель (LM Studio или CPU)

## Порт

**8004**

## Образ Docker

```
comol/template-search-mcp:latest
```

## Быстрый старт

```powershell
docker run -d -p 8004:8004 `
  --name template_search_mcp `
  -e LICENSE_KEY=YOUR_LICENSE_KEY `
  -v "E:/bases/mcp_templates:/app/data" `
  comol/template-search-mcp:latest
```

## Конфигурация Cursor

```json
{
  "mcpServers": {
    "1c-templates-mcp": {
      "url": "http://localhost:8004/mcp",
      "connection_id": "1c_templates_service_001"
    }
  }
}
```

## Структура раздела

* [Установка](/mcp-servery-1c/servery/templates-search-server/ustanovka.md) — команды запуска
* [Редактирование шаблонов](/mcp-servery-1c/servery/templates-search-server/redaktirovanie-shablonov.md) — веб-интерфейс
* [Свои шаблоны](/mcp-servery-1c/servery/templates-search-server/svoi-shablony.md) — добавление собственных


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.onerpa.ru/mcp-servery-1c/servery/templates-search-server.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
