Skip to main content
Glama
donliggett

mcp-context-window

mcp-context-window

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

Создан на основе MCP TypeScript SDK v2 и соответствует протоколу версии 2026-07-28. Работает через stdio (LM Studio, Claude Desktop, любой процесс, запускающий локальный сервер) или Streamable HTTP.


Прочитайте это первым: что сервер MCP может и не может

Ни один сервер MCP не может видеть или изменять ваше окно контекста. MCP — это строго модель «запрос-ответ»: хост вызывает инструмент, инструмент отвечает. Сервер никогда не видит диалог, не может перехватывать сообщения до того, как они достигнут модели, и не может ничего обрезать. LM Studio выполняет собственное усечение контекста внутри и не советуется с серверами по этому поводу.

Поэтому это не автоматическое скользящее окно, и любой сервис, который рекламирует себя как таковой, вводит вас в заблуждение. Что это на самом деле: хранилище, к которому модель обращается осознанно, сохраняя основной объем материала за пределами окна и подгружая только то, что нужно в данный момент. Это действительно мощно даже с локальной моделью на 8k токенов — но работает только потому, что модель сама вызывает инструменты, а не потому, что сервер что-то перехватывает.

Практическое следствие: модель должна сотрудничать. Описания инструментов здесь написаны намеренно предписывающе, а context_guide возвращает рекомендуемый рабочий процесс. Если ваша модель игнорирует инструкции — укажите это явно в системном промпте.

Связанное примечание: MCP Sampling — механизм, позволяющий серверу попросить LLM клиента сгенерировать текст — был объявлен устаревшим в спецификации 2026-07-28, с официальной рекомендацией «интегрироваться напрямую с API провайдера LLM». Поэтому этот сервер сам вызывает OpenAI-совместимую endpoint. Это же делает его независимым от конкретного хоста: один и тот же код работает с LM Studio, Ollama, llama.cpp или vLLM.


Related MCP server: membot

Две половины

Сессии — рабочая память для длительной задачи

Инструмент

Назначение

context_open

Начать или возобновить именованную сессию; показывает, что уже сохранено

context_append

Записать факт, решение или тупик. Закрепите то, что нельзя потерять

context_recall

Извлечь наиболее релевантные записи, упакованные в бюджет токенов

context_compact

Свернуть старые записи в сводку, чтобы освободить бюджет

context_status

Насколько заполнена сессия и нужно ли её сжать

context_update

Закрепить, открепить или удалить одну запись

context_list_sessions

Найти идентификатор сессии из предыдущей работы

Документы — материал, слишком большой для чтения целиком

Инструмент

Назначение

doc_ingest

Загрузить текст или файл; разбить на фрагменты, почти ничего не попадает в контекст

doc_outline

Структура: индексы фрагментов, заголовки, размеры, опциональные сводки

doc_search

Найти релевантные фрагменты по ключевым словам и вернуть их дословно

doc_window

Прочитать диапазон фрагментов по порядку; курсор перемещается автоматически

doc_summarize

Суммировать диапазон или весь документ

doc_list / doc_forget

Управление списком документов

Плюс context_guide, который объясняет модель, как всем этим пользоваться.


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

```bash

npm install npm run build npm test


### ```bash
node dist/index.js --ingest-root ./sources

Или исследуйте интерактивно:

```bash

npx @modelcontextprotocol/inspector node dist/index.js


***

## LM Studio

Отредактируйте `~/.lmstudio/mcp.json` (в Windows — `C:\Users\<вы>\.lmstudio\mcp.json`)
через **Program → Install → Edit mcp.json**, затем перезагрузите LM Studio.

### ```json
{
  "mcpServers": {
    "context": {
      "command": "node",
      "args": [
        "/absolute/path/to/mcp-context-sliding/dist/index.js",
        "--ingest-root", "/absolute/path/to/your/project",
        "--budget", "4000"
      ]
    }
  }
}

Эти два пути должны быть абсолютными. Хост запускает сервер как дочерний процесс с непредсказуемым рабочим каталогом, поэтому относительный путь не будет разрешён. В командной строке, где вы контролируете рабочий каталог, относительные пути вроде --ingest-root ./sources допустимы.

В Windows используйте либо прямые слэши (C:/Users/вы/проекты), либо двойные обратные (C:\\Users\\вы\\проекты), поскольку одиночный обратный слэш является escape-символом в JSON-строке.

Установите --budget примерно равным половине контекста вашей модели. Это целевой объём, который сервер упаковывает в результаты поиска, а не жёсткий лимит, который LM Studio навязывает.

--ingest-root — это каталог, из которого doc_ingest может читать файлы. Если его не указывать, сервер принимает только встроенный текст — это безопасно по умолчанию, поскольку сервер, который открывает произвольные пути по запросу модели, — это риск безопасности.

Docker

```bash

docker build -t mcp-context-window:latest .


### ```json
{
  "mcpServers": {
    "context": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm", "--init",
        "-v", "mcp-context-data:/data",
        "-v", "/absolute/path/to/your/project:/ingest:ro",
        "-e", "CTX_INGEST_ROOTS=/ingest",
        "--add-host", "host.docker.internal:host-gateway",
        "mcp-context-window:latest", "--stdio"
      ]
    }
  }
}

Два важных момента: флаг -i обязателен, иначе JSON-RPC рукопожатие не состоится (серверу нужен STDIN). Именованный том обязателен, иначе каждый перезапуск бесшумно стирает все сохранённые сессии и документы. Внутри контейнера localhost указывает на сам контейнер, поэтому URL LLM по умолчанию — host.docker.internal. Docker также требует, чтобы путь монтирования с -v был абсолютным.


Как реально проходит сессия

```

context_open session_id "refactor-auth" context_append "Goal: replace session cookies with JWT" (pinned) context_append "auth/middleware.ts:42 assumes a cookie is present" context_append "Decision: keep cookie support behind a flag for one release" ... context_status → 3200/4000 tokens — approaching budget context_compact → folds 14 old entries into one 380-token summary context_recall "cookie flag decision" → returns the pinned goal + the decision


А вот документ:

### ```
doc_ingest      file_path "logs/build-failure.log"  → doc_kx91, 240 chunks
doc_search      "OutOfMemory"                       → 3 chunks, 1400 tokens
doc_window      from 118 to 121                     → the surrounding context

Журнал никогда не попадает в контекст модели. Три целевых чтения — да.


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

Флаг

Переменная окружения

Значение по умолчанию

Назначение

--data-dir <каталог>

CTX_DATA_DIR

системный каталог данных

Где хранится состояние

--ingest-root <каталог>

CTX_INGEST_ROOTS

(нет)

Разрешить doc_ingest читать файлы здесь. Повторяемый.

--llm-base-url <url>

CTX_LLM_BASE_URL

http://localhost:1234/v1

OpenAI-совместимая endpoint

--llm-model <id>

CTX_LLM_MODEL

(загруженная модель)

Оставьте пустым, чтобы использовать текущую

--llm-timeout <мс>

CTX_LLM_TIMEOUT_MS

120000

Локальные модели могут быть медленными

--no-llm

CTX_LLM_ENABLED=false

включено

Только экстрактивные сводки

--budget <n>

CTX_BUDGET

4000

Целевой объём для поиска/окна по умолчанию

--chunk-tokens <n>

CTX_CHUNK_TOKENS

800

Целевой размер фрагмента

--chunk-overlap <n>

CTX_CHUNK_OVERLAP

80

Перекрытие между фрагментами

--token-ratio <n>

CTX_TOKEN_RATIO

0.27

Начальная оценка токенов на символ

--stdio / --http

CTX_TRANSPORT

stdio

Транспорт

--host / --port

CTX_HTTP_HOST / CTX_HTTP_PORT

127.0.0.1 / 3001

Привязка HTTP

--audit / --no-audit

CTX_AUDIT

включено

JSON-журнал каждого вызова в stderr


Принципы проектирования

Подсчёт токенов калибруется по вашей реальной модели. Универсального токенизатора не существует — Llama, Qwen и GPT разделяют текст по-разному, и встроенный токенизатор был бы неточным для любой загруженной модели. Поэтому сервер сначала оценивает дёшево, а затем измеряет истину: он отправляет два образца разной длины на вашу endpoint с max_tokens: 1 и вычисляет наклон зависимости сообщаемого usage.prompt_tokens между ними. Наклон компенсирует постоянные накладные расходы чат-шаблона и даёт реальную предельную стоимость токена на символ. Результат кэшируется, так что некалиброванным бывает только самый первый запуск, и калибровка выполняется в фоне, поэтому запуск никогда не блокируется моделью, которая может быть ещё не загружена.

Оценки намеренно завышены. Занижение переполняет окно и обрезает именно тот контекст, для защиты которого существует этот сервер.

Суммирование деградирует, а не отказывает. Если endpoint недоступен или модель не загружена, сервер переключается на экстрактивное суммирование — оценку предложений по TF-ISF — которое мгновенно, детерминировано и структурно не способно галлюцинировать, поскольку может только выбирать предложения, которые реально существовали. Потеря доступа к сохранённому контексту — худший исход, чем более грубая сводка. После сбоя клиент делает короткую паузу, поэтому документ из 200 фрагментов не ждёт 200 отдельных TCP-таймаутов.

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

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

Поиск — это BM25 плюс учёт свежести, без модели эмбеддингов. Это не требует ничего загруженного, не занимает VRAM рядом с основной моделью и детерминировано — что важно, когда вся суть в предсказуемости того, что увидит модель. Идентификаторы индексируются целиком и по частям, поэтому getUserName можно найти по запросу «user name».

Ограничения

  • Модель должна реально вызывать эти инструменты. Ничего автоматического нет.

  • Поиск по ключевым словам пропускает перефразировки, которые нашла бы модель эмбеддингов.

  • Подсчёт токенов — это оценка до первой успешной калибровки.

  • Ни один транспорт не аутентифицирует; HTTP привязывается к loopback по этой причине.

  • doc_ingest читает UTF-8 текст. Это не извлекатель PDF или DOCX.

Лицензия

MIT

Install Server
F
license - not found
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides persistent session memory for AI assistants, enabling them to store, search, and retrieve conversation summaries across sessions via the Model Context Protocol.
    10
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides a persistent, versioned, and searchable context store for AI agents with local embedding and hybrid search.
    114
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Local-first, cross-session context store that reduces token usage by saving facts, decisions, and preferences, and recalling them in later sessions with token-efficient ranking and compression.
    2
    MIT

View all related MCP servers

Related MCP Connectors

  • Universal memory for AI agents and tools. Save, organize and search context anywhere.

  • Your portable context layer — load it into any AI.

  • Persistent memory for AI agents. Search, store, and recall across sessions.

View all MCP Connectors

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/donliggett/mcp-context-sliding'

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