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_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Журнал никогда не попадает в контекст модели. Три целевых чтения — да.
Конфигурация
Флаг | Переменная окружения | Значение по умолчанию | Назначение |
|
| системный каталог данных | Где хранится состояние |
|
| (нет) | Разрешить |
|
|
| OpenAI-совместимая endpoint |
|
| (загруженная модель) | Оставьте пустым, чтобы использовать текущую |
|
|
| Локальные модели могут быть медленными |
|
| включено | Только экстрактивные сводки |
|
|
| Целевой объём для поиска/окна по умолчанию |
|
|
| Целевой размер фрагмента |
|
|
| Перекрытие между фрагментами |
|
|
| Начальная оценка токенов на символ |
|
|
| Транспорт |
|
|
| Привязка HTTP |
|
| включено | 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
Available Tools
15 toolscontext_appendA
Record something worth remembering into the session. Use this as you go — after discovering a fact, making a decision, or hitting a dead end — rather than trying to hold it all in your reply. Keep each entry self-contained: it may be read back much later without the surrounding conversation. Set pinned for facts that must never be dropped during compaction, such as the goal or a hard constraint.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | note (default), decision, user, assistant, system | |
| tags | No | Short labels to group entries | |
| text | Yes | The content to remember, written to stand alone | |
| pinned | No | Always survives compaction and is always included in recall | |
| session_id | Yes | Session identifier. Reuse the same string across a task to accumulate memory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since there are no annotations, the description carries the behavioral disclosure burden. It adds useful context: entries may be read back later without surrounding conversation, and pinned entries survive compaction. It does not cover output behavior or other side effects, but the key memory-semantics are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences with no filler. The core purpose is front-loaded, and each remaining sentence adds essential guidance about cadence, self-containment, and pinning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with no output schema and no annotations, the description covers purpose, when to use it, and behavioral nuances. Minor missing context is explicit routing away from context_update, but the schema handles parameter details adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining that text must stand alone and that pinned entries are protected from compaction, both of which clarify how to use the corresponding parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Record something worth remembering into the session.' It clearly communicates an append/write behavior and is readily distinguishable from sibling tools like context_recall, context_compact, and context_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete triggers for use — 'after discovering a fact, making a decision, or hitting a dead end' — and explains the intent of recording incrementally. However, it does not explicitly state when not to use this tool or name the alternative for updating existing entries, such as context_update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context_compactA
Fold older entries into a single summary to free budget, keeping the most recent entries verbatim. Call this when context_status or context_append warns that the session is over budget. Pinned entries are never compacted. The originals are kept on disk and can be recovered, so this is safe to run. Use dry_run first to see what would happen.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Report what would be compacted without doing it | |
| session_id | Yes | Session identifier. Reuse the same string across a task to accumulate memory. | |
| keep_recent | No | How many of the newest entries to leave untouched (default 10) | |
| target_tokens | No | Rough size of the summary produced (default 400) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It covers key traits: pinned entries are never compacted, originals are kept on disk and recoverable, and dry_run is recommended for previewing. These are non-obvious behavioral details that an agent needs to know before calling, and they are clearly stated. The safety/reversibility disclosure is particularly strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, all essential. It front-loads the core action, then the trigger, then safety, then a recommendation. There is zero fluff; every sentence earns its place. It is compact and efficient, matching the tool's own purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 params, 1 required, no output schema) and the rich schema descriptions, the description is nearly complete. It covers when to use, what it does, safety, and workflow advice. The only minor gap is that it doesn't mention error conditions or the exact nature of the summary, but those are not critical for an agent to call it correctly. The description complements the schema well, earning a 4.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 per the rubric. The description adds some contextual meaning (e.g., 'keeping the most recent entries verbatim' hints at keep_recent), but it does not elaborately explain each parameter beyond what the schema already documents. The schema descriptions for each parameter are thorough, so the description's additional value is marginal but present. This aligns with the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and object: 'Fold older entries into a single summary to free budget.' It immediately distinguishes the tool from siblings by specifying the compaction behavior and the criteria for what stays verbatim. This is highly specific and leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the trigger: 'Call this when context_status or context_append warns that the session is over budget.' It also advises using dry_run first. This gives an agent a clear, actionable condition for when to invoke the tool, and provides a safety step. No alternatives are listed, but the trigger is so specific that it satisfies the dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context_guideA
Explain how to use this server effectively — the intended workflow for sessions and documents. Call this once if you have not used these tools before.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description at least implicitly acknowledges it's a read-only introductory aid, but does not detail output format or what happens if called repeatedly. Some prior exposure to the tool family or server is needed to appreciate its purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and direct, delivering both purpose and when-to-use in two sentences, front-loading the core message without extra bulk.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, the description covers purpose and usage. It doesn't mention any potential side effects or the exact content, but given the simplicity, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema provides high coverage (100%), so the baseline is high. The description appropriately focuses on the tool's behavior rather than parameter details, which are irrelevant here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool explains how to use the server and the intended workflow, combining guidance with a recommendation to call it once for new users. It distinguishes itself from siblings by being meta-guidance about the tool family, not a specific operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool explicitly tells the agent when to call it ('if you have not used these tools before') and its purpose in onboarding. It distinguishes from siblings because they perform specific operations, while this provides overarching usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context_list_sessionsA
List stored sessions, newest first. Use this to find a session id from earlier work when you do not remember it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It discloses that the tool lists stored sessions in newest-first order and implies a read-only operation. This is adequate for a simple, parameter-free listing tool, though it does not explicitly state side effects or return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. The first states the action and ordering, the second gives a practical use case. Every sentence contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool, the description covers everything an agent needs: what it lists, the ordering, and why to call it. Nothing essential is missing because there is no complex schema, security concern, or ambiguity requiring further disclosure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool exposes zero parameters, so there is no parameter-level ambiguity to resolve. The description does not need to add parameter meaning because there are none, earning the baseline score for a tool with no parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('List stored sessions') and a distinguishing detail ('newest first'). It also names the concrete use case of finding a session id, making its purpose unambiguous and distinct from the doc_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a specific scenario where the tool should be used: finding a session id from earlier work. It does not mention exclusions or alternatives, but the context is concrete enough for an agent to recognize when this listing tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context_openA
Start or resume a named memory session. Call this ONCE at the beginning of any task that will run long enough to risk losing earlier details, then reuse the same session_id for every later call. Returns what is already stored, so resuming a session after a restart tells you what you previously knew.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Human-readable label for this session | |
| session_id | No | Reuse an existing id to resume, or omit to have one generated |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well. It discloses that the tool both starts and resumes, that it returns previously stored content, and that resuming after a restart surfaces prior knowledge. These are non-obvious behavioral details beyond what the name or schema alone could convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the core action is front-loaded, followed by a concrete usage condition and a behavioral outcome. Every sentence contributes essential information an agent needs before calling the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema and annotations, the description explains what the tool returns when resuming, when it should be called, and how to manage session_id. This is sufficient for an agent to select and invoke the tool correctly in a long-running task workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real operational meaning to session_id by stating it must be reused consistently across calls. It reinforces the schema's existing description without restating it verbatim, adding value for the agent's invocation strategy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb phrase, 'Start or resume a named memory session,' which precisely identifies the resource and action. This clearly distinguishes it from siblings like context_append, context_recall, and context_list_sessions without requiring the reader to infer meaning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: call once at the beginning of long-running tasks and reuse the same session_id for later calls. It does not explicitly name alternatives or state when not to use it, but the context is clear enough for an agent to decide correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context_recallA
Retrieve the most relevant stored entries for a query, packed to fit a token budget. This is the main way to get memory back into your working context: ask for what you need rather than reading the whole session. Pinned entries are always included. Omit the query to get the most recent entries instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of entries | |
| query | No | What you are looking for. Omit for most-recent ordering. | |
| session_id | Yes | Session identifier. Reuse the same string across a task to accumulate memory. | |
| budget_tokens | No | Maximum tokens of entries to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses useful traits: results are 'packed to fit a token budget,' pinned entries are always included, and omitting the query switches to most-recent ordering. These go beyond the schema and help an agent predict behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with no filler. The primary action is front-loaded, followed by usage context and two key behavioral caveats. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no annotations and no output schema, the description covers the main use case, query omission, pinned entries, and token budgeting. It does not specify the return shape or how limit and budget_tokens interact, but it is largely sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying query omission behavior ('Omit the query to get the most recent entries instead') and explaining the token-budget intent behind budget_tokens. It does not detail the interaction between limit and budget_tokens, but it compensates beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Retrieve the most relevant stored entries for a query.' It also distinguishes itself from siblings by calling itself 'the main way to get memory back into your working context' and contrasting with 'reading the whole session.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states when to use the tool: when you need memory back into context, ask for what you need rather than reading the whole session. It also explains the no-query variant for recent entries. However, it does not explicitly name alternatives or state when not to use this tool versus siblings like context_open or doc_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context_statusA
Report how full a session is, what is pinned, and whether compaction is advisable. Cheap to call — use it to decide whether you need to compact before adding more.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | Session identifier. Reuse the same string across a task to accumulate memory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry behavioral disclosure. It does mention the tool is cheap to call contaminating performance traits)Skip it also lists what it reports (fullness, pinned items, compaction advice). However, it does not explicitly state that it is a read-only operation with no side effects, nor does it mention any error conditions or output format. For a read-only status tool, the read-only nature is implied but not stated, and that is an omission given the description carries the full burden without annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence states exactly what the tool reports (fullness, pinned items, compaction advice) and the second provides the usage context. Front-loaded and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description clearly covers what the tool reportsheb, when to use it, and that it is cheap. Since no output schema is defined, the description compensates by listing the key diagnostic outputs. The only minor gap is precisely how the response is structured (e.g., numeric vs. textual), but for a status/decision support tool, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter session_id is fully described in the schema (100% coverage) with a clear explanation about reusing the same ID for memory accumulation. The tool description itself does not add specific details about the parameter beyond what the schema already provides, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reports session fullness, pinned items, and compaction advisability. It names a specific verb ('report') and resource (session status), and distinguishes it from siblings like context_compact and context_append by focusing on status inspection rather than mutation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to call it ('use it to decide whether you need to compact before adding more') and characterizes the call as cheap, signaling it's a low-cost diagnostic step. This is clear guidance with a specific decision context, making alternatives obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context_updateA
Pin, unpin, or delete a single entry by its id. Pin what must survive compaction; delete what turned out to be wrong, so it stops polluting recall.
| Name | Required | Description | Default |
|---|---|---|---|
| delete | No | Remove the entry from recall | |
| pinned | No | Set or clear the pin | |
| entry_id | Yes | Entry id, as shown in recall output | |
| session_id | Yes | Session identifier. Reuse the same string across a task to accumulate memory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the burden of disclosure. It explicitly mentions that pinning affects compaction survival and that deletion removes from recall, which are non-obvious behavioral consequences. It does not specify edge cases like simultaneous pin+delete, but this is acceptable for a simple mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero wasted words. The action verb and primary resource are front-loaded, and the purpose/effect follows immediately. It is perfectly sized for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two required and two optional booleans, the description adequately covers what the tool does and why. It doesn't mention the session_id parameter, but the schema's description ('Reuse the same string across a task to accumulate memory') covers that. There is no output schema, so no return-value description is needed. The only minor gap is a lack of explicit mention of unpinning behavior when pinned=false, but that is inferred.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all four parameters with descriptions, so the baseline is 3. The description adds meaningful context by explaining the purpose of each action beyond the schema's dry definitions ('survive compaction', 'stops polluting recall'), which helps agents understand the semantic intent of the boolean flags.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (pin, unpin, or delete) on a specific resource (a single entry by id), with a concise rationale for each. It distinguishes itself from siblings like context_compact and context_recall by focusing on single-entry mutation rather than bulk operations or retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear guidance on when to pin versus delete ('Pin what must survive compaction; delete what turned out to be wrong'), which serves as an implicit usage test. It does not explicitly contrast with sibling tools like context_compact, but the context is sufficient for most agent decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_forgetA
Permanently delete an ingested document and everything derived from it. Use when a document is stale or was ingested by mistake.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes | Document id returned by doc_ingest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of transparency. It discloses the destructive and irreversible nature ('permanently delete') and the scope ('everything derived from it'), which are critical side effects. It does not mention permissions or errors, but it covers the most important behavioral aspects for a deletion tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no redundancy. The primary action is front-loaded, and the usage guidance is appended cleanly, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion operation with one parameter and no output schema, the description fully covers what the tool does, when to use it, and the nature of the parameter. Nothing essential is missing for an agent to correctly invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter doc_id is described as 'Document id returned by doc_ingest', which adds context on how to obtain a valid value. Since schema coverage is 100% and the description reinforces the source, it goes beyond a bare identifier definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('permanently delete') and the target ('an ingested document and everything derived from it'). It distinguishes itself from sibling tools like doc_ingest, doc_search, and doc_list by focusing on deletion and its cascading effect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides use cases: 'Use when a document is stale or was ingested by mistake.' This gives clear guidance on when to invoke this tool versus other document operations, with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_ingestA
Load a large text into the store and split it into addressable chunks. Use this INSTEAD OF reading a big file into your context: the content stays on disk and you page through it with doc_outline, doc_search and doc_window. Accepts inline text, or a file path if the server was started with an ingest root. Returns a document id.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | The content, passed inline | |
| title | No | Label for the document | |
| doc_id | No | Reuse a specific id, replacing any document already stored under it | |
| file_path | No | Read from this file instead. Requires --ingest-root to be configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral transparency burden and does it well: it reveals the key non-obvious behavior that content stays on disk rather than being loaded into context, and that it is split into addressable chunks. It also discloses the return value (a document id) and the ingest-root requirement. One smaller behavior, doc_id replacement removing existing stored content, is only present in the schema rather than the description, so the transparency is very good but not perfect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose in sentence one, usage guidance and alternatives in sentence two, input modes in sentence three, and the return value in sentence four. The most critical facts are front-loaded, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderately complex tool with no annotations and no output schema, the description covers the full contract an agent needs: what the tool does, why it should be used, what the preconditions are, and what it returns. It also positions the tool within the wider workflow of doc_outline, doc_search and doc_window. Nothing essential for a correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% description coverage with clear, self-explanatory parameter descriptions, so the structured data is doing most of the work. The description adds a conceptual cross-reference between inline text and file_path as alternative input modes, but this largely restates what the schema already says. Descriptively, it provides little beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific, unambiguous action: 'Load a large text into the store and split it into addressable chunks.' It clearly distinguishes the tool from alternatives by saying it should be used instead of reading a large file into context, and it names the complementary paging tools (doc_outline, doc_search, doc_window). An agent can immediately understand what this tool does and how it fits with its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this INSTEAD OF reading a big file into your context' gives an explicit, direct rule for when this tool is the right choice. The description also explains the follow-up workflow, stating content stays on disk and is paged through with doc_outline, doc_search and doc_window, and it clarifies the file_path precondition regarding the ingest root.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_listA
List ingested documents with their ids, sizes and read positions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. 'List' implies a read-only operation and the description states what is returned, but it does not mention ordering, pagination, session scoping, or how 'read positions' are calculated. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no filler. The action verb is front-loaded and the sentence conveys the tool's purpose and output in a compact, scannable way.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless listing tool, the description is largely complete: it states scope ('ingested documents') and return fields. However, there is no output schema and no clarification of what 'read positions' means, leaving minor ambiguity. Still, an agent can likely invoke it correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to document beyond the schema. The description focuses on output rather than inputs, which is appropriate here. The baseline of 4 for zero-parameter tools is met.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('ingested documents') and names the exact return fields (ids, sizes, read positions). This clearly differentiates it from sibling tools like doc_search, doc_summarize, or doc_ingest.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied by the verb 'List' but there is no explicit guidance on when to choose this tool over siblings such as doc_outline or doc_window. No alternatives, exclusions, or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_outlineA
Show the structure of an ingested document: every chunk with its index, heading and size. Call this right after doc_ingest to decide what is worth reading. Set summarize to also generate a one-line summary per chunk — more useful, but it runs the summarizer once per chunk, so it is slow on large documents.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes | Document id returned by doc_ingest | |
| summarize | No | Generate and cache a short summary for each chunk | |
| max_chunks | No | Only outline the first N chunks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It does disclose the performance cost of the summarize flag ('runs the summarizer once per chunk... slow on large documents'), which is a behavioral trait. However, it does not state whether the operation is read-only or has side effects (e.g., caching is mentioned only in the schema, not here), nor does it address error behavior for invalid doc_id. For a no-annotation tool, this is a moderate disclosure, hence a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences total. The first sentence front-loads the core purpose and output contents, while the second gives workflow context and a cost warning. Every clause earns its place, with no repetition or filler. Structure is ideal for quick agent consumption.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and no annotations, the description must explain behavior and expected outputs. It covers the main purpose, when to call it, and the summarization cost. It explicitly lists the output components (chunk index, heading, size) and hints at the workflow. It does not describe the exact return format (e.g., list vs. map) or error cases, but for a simple outline tool this is largely sufficient. A 4 reflects that it is nearly complete without going overboard.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all three parameters with descriptions (100% coverage), so the baseline is 3. The description adds a performance note about the summarize parameter, which goes beyond the schema's simple 'generate and cache a short summary'. However, it does not add any meaning to doc_id or max_chunks beyond what the schema provides. The added value is limited but present, so a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Show the structure of an ingested document' and enumerates exactly what the result contains ('every chunk with its index, heading and size'). It clearly distinguishes its role from siblings like doc_summarize (whole-document summary) and doc_search by framing it as a structural overview. The purpose is unambiguous and fully stated in the first sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use instruction: 'Call this right after doc_ingest to decide what is worth reading.' This tells the agent the exact workflow position and decision purpose. It also implies not to use it for other tasks and provides a trade-off for the summarize option. This is direct, actionable guidance that prevents misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_searchA
Find the chunks of a document most relevant to a query and return them verbatim, packed into a token budget. Prefer this over paging when you know what you are looking for — it is the difference between reading a manual and using its index. Omit doc_id to search across every ingested document.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum chunks to return | |
| query | Yes | What you are looking for | |
| doc_id | No | Restrict to one document; omit to search all | |
| budget_tokens | No | Maximum tokens of chunk text to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses that results are 'verbatim' (not summarized), that output is 'packed into a token budget' (tied to budget_tokens), and that omitting doc_id searches the entire corpus. This gives an agent a clear picture of side-effect-free read behavior, though it omits error handling and ranking details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with a striking analogy; every sentence carries information. The purpose is front-loaded, the usage nuance follows, and the parameter hint lands last. The manual-vs-index analogy, while colorful, earns its place by making the search-vs-paging tradeoff instantly understandable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no output schema and no annotations, the description covers the essential behavioral contract: what is searched, what is returned, and how the token budget applies. It doesn't specify default values for limit or budget_tokens, but optional parameters and the schema make that a minor gap. Overall it's complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter. The description adds value by introducing the 'token budget' concept that clarifies budget_tokens and by restating doc_id omission as a scoping rule. This goes beyond the schema without duplicating it, showing good use of the complementary role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Find the chunks of a document most relevant to a query and return them verbatim, packed into a token budget.' This makes the tool's purpose unmistakable. It gestures at a distinction from 'paging' through documents, though it doesn't name a specific sibling, so differentiation is strong but not explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs when to use the tool: 'Prefer this over paging when you know what you are looking for,' and reinforces it with the manual-vs-index analogy. It guides the agent away from using it for exploratory browsing and gives a concrete scoping rule ('Omit doc_id to search across every ingested document'). It falls short of naming the exact sibling tool to use instead, keeping this from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_summarizeA
Summarize a whole document or a range of its chunks. Use this to get the gist of something too large to read, before deciding which parts to pull verbatim. The whole-document summary is cached, so asking again is free.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Last chunk index (inclusive) | |
| from | No | First chunk index (inclusive) | |
| doc_id | Yes | Document id returned by doc_ingest | |
| refresh | No | Ignore the cached whole-document summary | |
| target_tokens | No | Rough length of the summary (default 500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses a useful non-obvious behavior: the whole-document summary is cached, making repeat calls cheap. It doesn't explicitly state read-only side effects, but the summarization framing implies a non-destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences, each serving a distinct purpose: what it does, when to use it, and an optimization note. The core action is front-loaded, and there is zero fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate coverage for a summarizer—description covers the action, use case, and a performance trait. It could mention the return format or error behavior, but no output schema exists, and the agent has enough to call it correctly. Slightly more detail on the default target_tokens would have made it a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are documented. The description adds contextual value by explaining the caching model ('cached, so asking again is free'), which clarifies the refresh parameter's purpose and the cost model. This goes beyond the schema's field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Summarize') and a clear resource ('a whole document or a range of its chunks'), and frames it as a gist-gathering step before verbatim retrieval, which differentiates it from sibling tools like doc_search or doc_outline. The language 'get the gist' clarifies exactly what problem it solves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear use case: 'Use this to get the gist of something too large to read, before deciding which parts to pull verbatim.' This implies when to use it (large documents) and hints at alternatives for verbatim extraction, though it doesn't name them explicitly. Lacks an explicit when-not-to-use, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_windowA
Read a range of chunks verbatim. This is the sliding window: ask for chunks 0-2, then 3-5, and so on, keeping each read inside your budget. Omit from/to to continue from where the last window left off — the read cursor is stored server-side, so sequential paging works without you tracking position.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Last chunk index (inclusive) | |
| from | No | First chunk index (inclusive) | |
| reset | No | Move the cursor back to the start | |
| doc_id | Yes | Document id returned by doc_ingest | |
| budget_tokens | No | Stop before exceeding this many tokens |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It reveals important stateful behavior: the read cursor is stored server-side, so sequential paging works without the agent tracking position. It also explains budget behavior and the verbatim read nature, which is strong for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. It front-loads the core purpose, then adds the operational pattern and cursor behavior in a compact, readable way. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has moderate complexity due to its server-side cursor and budget parameter, and the description covers these well. There is no output schema, but the description does not need to fully specify return format because the read semantics and paging behavior are clear. Minor gaps like error behavior or what happens on a fresh cursor are acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining how from/to relate to sliding-window reads, and by clarifying that omitting them continues from the server-stored cursor. This extra context justifies an above-baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Read a range of chunks verbatim.' This clearly distinguishes doc_window from siblings like doc_search, doc_summarize, and doc_outline, which do not provide verbatim chunk reads. The sliding-window framing further clarifies its unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear practical usage context: it explains the sliding-window pattern, how to stay within budget, and how to continue paging by omitting from/to. It does not explicitly name alternatives or state when not to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v1.0.0- First observed
context_append - First observed
context_compact - First observed
context_guide - First observed
context_list_sessions - First observed
context_open - First observed
context_recall - First observed
context_status - First observed
context_update - First observed
doc_forget - First observed
doc_ingest - First observed
doc_list - First observed
doc_outline - First observed
doc_search - First observed
doc_summarize - First observed
doc_window
TDQS
Scored across 15 tools
The tools are cleanly divided into context/session memory tools and document ingestion tools, with each serving a distinct operation: append, recall, compact, status, update, ingest, outline, window, search, summarize, list, and forget. Even the two retrieval-style tools, context_recall and doc_search, are clearly scoped to different stores by their descriptions.
All names are lowercase snake_case and consistently grouped with context_ and doc_ prefixes, mostly following a verb-action pattern. Minor deviations exist: context_status and doc_window use nouns as commands, but the overall convention is readable and predictable.
At 15 tools, the server is at the upper edge of a well-scoped set, but every tool maps to a distinct and useful operation across two related subdomains. There are no redundant utilities, and the count feels justified for the stated context-window and document-management purpose.
The server covers the core session lifecycle (open/resume, append, recall, compact, status, update, list) and the document lifecycle (ingest, outline, read, search, summarize, list, forget). The main gap is the absence of an explicit session deletion or close tool, though agents can still work around this by leaving sessions unused.
Maintenance
Related MCP Connectors
Cross-LLM persistent memory: store context once, recall it from any AI model.
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.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides persistent session memory for AI assistants, enabling them to store, search, and retrieve conversation summaries across sessions via the Model Context Protocol.10MIT
- AlicenseNot gradedqualityBmaintenanceProvides a persistent, versioned, and searchable context store for AI agents with local embedding and hybrid search.285 npm3MIT
- AlicenseNot gradedqualityCmaintenanceProvides a local context-memory layer for AI assistants, enabling retrieval-augmented queries, explanations, feedback, and status checks via MCP tools.1Apache 2.0
- AlicenseNot gradedqualityBmaintenanceProvides a unified context layer for Cursor's agent with lossless token savings and verifiable memory, enabling efficient code exploration and cross-session continuity.6 npm1MIT